Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 8 additions & 11 deletions src/LuaAST.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export enum SyntaxKind {
// Statements
DoStatement,
VariableDeclarationStatement,
VariableAssignmentStatement,
AssignmentStatement,
IfStatement,
WhileStatement,
RepeatStatement,
Expand Down Expand Up @@ -40,8 +40,6 @@ export enum SyntaxKind {
Identifier,
TableIndexExpression,
// Operators
AssignmentOperator, // TODO maybe remove this once we figure out the correct way to transform a assignment in a binary expression
// or maybe move change Assignment statement to contain a binaryExpression with an AssignmentOperator somehow?
// Arithmetic
AdditionOperator, // Maybe use abreviations for those add, sub, mul ...
SubractionOperator,
Expand Down Expand Up @@ -82,7 +80,6 @@ export type UnaryOperator = SyntaxKind.NegationOperator | SyntaxKind.LengthOpera
SyntaxKind.NotOperator | SyntaxKind.BitwiseNotOperator;

export type BinaryOperator =
SyntaxKind.AssignmentOperator | // TODO @see above
// Arithmetic
SyntaxKind.AdditionOperator | SyntaxKind.SubractionOperator | SyntaxKind.MultiplicationOperator |
SyntaxKind.DivisionOperator | SyntaxKind.FloorDivisionOperator |
Expand Down Expand Up @@ -214,24 +211,24 @@ export function createVariableDeclarationStatement(
}

// `test1, test2 = 12, 42`
export interface VariableAssignmentStatement extends Statement {
kind: SyntaxKind.VariableAssignmentStatement;
export interface AssignmentStatement extends Statement {
kind: SyntaxKind.AssignmentStatement;
left: IdentifierOrTableIndexExpression[];
right: Expression[];
}

export function isVariableAssignmentStatement(node: Node): node is VariableAssignmentStatement {
return node.kind === SyntaxKind.VariableAssignmentStatement;
export function isAssignmentStatement(node: Node): node is AssignmentStatement {
return node.kind === SyntaxKind.AssignmentStatement;
}

export function createVariableAssignmentStatement(
export function createAssignmentStatement(
left: IdentifierOrTableIndexExpression | IdentifierOrTableIndexExpression[],
right: Expression | Expression[],
parent?: Node,
tsOriginal?: ts.Node): VariableAssignmentStatement {
tsOriginal?: ts.Node): AssignmentStatement {

const statement =
createNode(SyntaxKind.VariableAssignmentStatement, parent, tsOriginal) as VariableAssignmentStatement;
createNode(SyntaxKind.AssignmentStatement, parent, tsOriginal) as AssignmentStatement;
setParent(left, statement);
if (Array.isArray(left)) {
statement.left = left;
Expand Down
23 changes: 14 additions & 9 deletions src/LuaPrinter.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import * as tstl from "./LuaAST";

import {TSHelper as tsHelper} from "./TSHelper";

export class LuaPrinter {

/* tslint:disable:object-literal-sort-keys */
private static operatorMap: {[key in tstl.Operator]: string} = {
[tstl.SyntaxKind.AssignmentOperator]: "=",
[tstl.SyntaxKind.AdditionOperator]: "+",
[tstl.SyntaxKind.SubractionOperator]: "-",
[tstl.SyntaxKind.MultiplicationOperator]: "*",
Expand Down Expand Up @@ -65,8 +66,8 @@ export class LuaPrinter {
return this.printDoStatement(statement as tstl.DoStatement);
case tstl.SyntaxKind.VariableDeclarationStatement:
return this.printVariableDeclarationStatement(statement as tstl.VariableDeclarationStatement);
case tstl.SyntaxKind.VariableAssignmentStatement:
return this.printVariableAssignmentStatement(statement as tstl.VariableAssignmentStatement);
case tstl.SyntaxKind.AssignmentStatement:
return this.printVariableAssignmentStatement(statement as tstl.AssignmentStatement);
case tstl.SyntaxKind.IfStatement:
return this.printIfStatement(statement as tstl.IfStatement);
case tstl.SyntaxKind.WhileStatement:
Expand Down Expand Up @@ -109,7 +110,7 @@ export class LuaPrinter {
}
}

private printVariableAssignmentStatement(statement: tstl.VariableAssignmentStatement): string {
private printVariableAssignmentStatement(statement: tstl.AssignmentStatement): string {
return this.indent(`${statement.left.map(e => this.printExpression(e)).join(", ")} = ` +
`${statement.right.map(e => this.printExpression(e)).join(", ")};\n`);
}
Expand Down Expand Up @@ -272,7 +273,7 @@ export class LuaPrinter {
}

private printFunctionExpression(expression: tstl.FunctionExpression): string {
const paramterArr: string[] = expression.params.map(i => this.printIdentifier(i));
const paramterArr: string[] = expression.params ? expression.params.map(i => this.printIdentifier(i)) : [];
if (expression.dots) {
paramterArr.push(this.printDotsLiteral(expression.dots));
}
Expand All @@ -290,7 +291,11 @@ export class LuaPrinter {
const value = this.printExpression(expression.value);

if (expression.key) {
return `[${this.printExpression(expression.key)}] = ${value}`;
if (tstl.isIdentifier(expression.key)) {
return `${this.printExpression(expression.key)} = ${value}`;
} else {
return `[${this.printExpression(expression.key)}] = ${value}`;
}
} else {
return value;
}
Expand Down Expand Up @@ -320,7 +325,7 @@ export class LuaPrinter {
}

private printCallExpression(expression: tstl.CallExpression): string {
const params = expression.params.map(e => this.printExpression(e)).join(", ");
const params = expression.params ? expression.params.map(e => this.printExpression(e)).join(", ") : "";
return `${this.printExpression(expression.expression)}(${params})`;
}

Expand All @@ -337,8 +342,8 @@ export class LuaPrinter {

private printTableIndexExpression(expression: tstl.TableIndexExpression): string {
const table = this.printExpression(expression.table);
if (tstl.isIdentifier(expression.index)) {
return `${table}.${this.printIdentifier(expression.index)}`;
if (tstl.isStringLiteral(expression.index) && tsHelper.isValidLuaIdentifier(expression.index.value)) {
return `${table}.${expression.index.value}`;
}
return `${table}[${this.printExpression(expression.index)}]`;
}
Expand Down
Loading