Keep original token for literals

This commit is contained in:
Christopher Schleiden
2023-01-31 16:21:01 -08:00
parent 117b69f10f
commit 38c8ed1080
2 changed files with 7 additions and 7 deletions
+1 -1
View File
@@ -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();
}
+6 -6
View File
@@ -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();