diff --git a/actions-expressions/src/ast.ts b/actions-expressions/src/ast.ts index 04a87b6..cb37fad 100644 --- a/actions-expressions/src/ast.ts +++ b/actions-expressions/src/ast.ts @@ -17,7 +17,7 @@ export abstract class Expr { } export class Literal extends Expr { - constructor(public literal: ExpressionData) { + constructor(public literal: ExpressionData, public token: Token) { super(); } diff --git a/actions-expressions/src/parser.ts b/actions-expressions/src/parser.ts index ee4cf3a..9345bd6 100644 --- a/actions-expressions/src/parser.ts +++ b/actions-expressions/src/parser.ts @@ -196,7 +196,7 @@ export class Parser { if (this.match(TokenType.IDENTIFIER)) { let property = this.previous(); - expr = new IndexAccess(expr, new Literal(new data.StringData(property.lexeme))); + expr = new IndexAccess(expr, new Literal(new data.StringData(property.lexeme), property)); } else if (this.match(TokenType.STAR)) { expr = new IndexAccess(expr, new Star()); } else { @@ -254,19 +254,19 @@ export class Parser { private primary(): Expr { switch (true) { case this.match(TokenType.FALSE): - return new Literal(new data.BooleanData(false)); + return new Literal(new data.BooleanData(false), this.previous()); case this.match(TokenType.TRUE): - return new Literal(new data.BooleanData(true)); + return new Literal(new data.BooleanData(true), this.previous()); case this.match(TokenType.NULL): - return new Literal(new data.Null()); + return new Literal(new data.Null(), this.previous()); case this.match(TokenType.NUMBER): - return new Literal(new data.NumberData(this.previous().value as number)); + return new Literal(new data.NumberData(this.previous().value as number), this.previous()); case this.match(TokenType.STRING): - return new Literal(new data.StringData(this.previous().value as string)); + return new Literal(new data.StringData(this.previous().value as string), this.previous()); case this.match(TokenType.LEFT_PAREN): const expr = this.expression();