11import { ExpressionOperators , OperationTypes , Operators } from "./operators" ;
2- import { Token } from "./token-types" ;
2+ import { getTokenLoc , getTokenValue , Token } from "./token-types" ;
33
44export type AstNodeType = 'assign' | 'binOp' | 'const'
55 | 'getSingleVar' | 'setSingleVar' | 'dotObjectAccess' | 'bracketObjectAccess'
@@ -14,11 +14,22 @@ export abstract class AstNode {
1414 constructor ( public type : AstNodeType ) { }
1515}
1616
17+ export interface FuncDefNode {
18+ params : string [ ] ;
19+ funcAst : AstBlock ;
20+ }
21+
22+ export interface IsNullCoelsing {
23+ nullCoelsing : boolean | undefined
24+ }
25+
1726export class AssignNode extends AstNode {
1827 constructor (
1928 public target : AstNode ,
20- public source : AstNode ) {
29+ public source : AstNode ,
30+ public loc : Uint16Array ) {
2131 super ( 'assign' ) ;
32+ this . loc = loc ;
2233 }
2334}
2435
@@ -27,20 +38,22 @@ export class ConstNode extends AstNode {
2738
2839 constructor ( token : Token ) {
2940 super ( 'const' ) ;
30- this . value = token [ 0 ] ;
31- // this.loc = token[1].subarray(1 );
41+ this . value = getTokenValue ( token ) ;
42+ this . loc = getTokenLoc ( token ) ;
3243 }
3344}
3445
3546export class CommentNode extends AstNode {
36- constructor ( public comment : string ) {
47+ constructor ( public comment : string , public loc : Uint16Array ) {
3748 super ( 'comment' ) ;
49+ this . loc = loc ;
3850 }
3951}
4052
4153export class ReturnNode extends AstNode {
42- constructor ( public returnValue : AstNode | undefined = undefined ) {
54+ constructor ( public returnValue : AstNode | undefined = undefined , public loc : Uint16Array ) {
4355 super ( 'return' ) ;
56+ this . loc = loc ;
4457 }
4558}
4659
@@ -61,47 +74,51 @@ export class SetSingleVarNode extends AstNode {
6174 constructor ( token : Token ) {
6275 super ( 'setSingleVar' ) ;
6376 this . name = token [ 0 ] as string
77+ this . loc = getTokenLoc ( token ) ;
6478 }
6579}
6680
67- export class FunctionCallNode extends AstNode {
68- constructor ( public name : string , public paramNodes : AstNode [ ] | null ) {
81+ export class FunctionCallNode extends AstNode implements IsNullCoelsing {
82+ public nullCoelsing : boolean | undefined = undefined ;
83+
84+ constructor ( public name : string , public paramNodes : AstNode [ ] | null , public loc : Uint16Array ) {
6985 super ( 'funcCall' ) ;
86+ this . loc = loc ;
7087 }
7188}
7289
73- export interface FuncDefNode {
74- params : string [ ] ;
75- funcAst : AstBlock ;
76- }
77-
7890export class FunctionDefNode extends AstNode implements FuncDefNode {
79- constructor ( public funcAst : AstBlock , public params : string [ ] , public isAsync : boolean ) {
80- super ( 'funcDef' , ) ;
91+ constructor ( public funcAst : AstBlock , public params : string [ ] , public isAsync : boolean , public loc : Uint16Array ) {
92+ super ( 'funcDef' ) ;
93+ this . loc = loc ;
8194 }
8295}
8396
8497export class ArrowFuncDefNode extends AstNode implements FuncDefNode {
85- constructor ( public funcAst : AstBlock , public params : string [ ] ) {
98+ constructor ( public funcAst : AstBlock , public params : string [ ] , public loc : Uint16Array ) {
8699 super ( 'arrowFuncDef' ) ;
100+ this . loc = loc ;
87101 }
88102}
89103
90104export class IfNode extends AstNode {
91- constructor ( public conditionNode : AstNode , public ifBody : AstNode [ ] , public elseBody : AstNode [ ] | undefined = undefined ) {
105+ constructor ( public conditionNode : AstNode , public ifBody : AstNode [ ] , public elseBody : AstNode [ ] | undefined = undefined , public loc : Uint16Array ) {
92106 super ( 'if' ) ;
107+ this . loc = loc
93108 }
94109}
95110
96111export class ForNode extends AstNode {
97- constructor ( public sourceArray : AstNode , public itemVarName : string , public body : AstNode [ ] ) {
112+ constructor ( public sourceArray : AstNode , public itemVarName : string , public body : AstNode [ ] , public loc : Uint16Array ) {
98113 super ( 'for' ) ;
114+ this . loc = loc ;
99115 }
100116}
101117
102118export class WhileNode extends AstNode {
103- constructor ( public condition : AstNode , public body : AstNode [ ] ) {
119+ constructor ( public condition : AstNode , public body : AstNode [ ] , public loc : Uint16Array ) {
104120 super ( 'while' ) ;
121+ this . loc = loc ;
105122 }
106123}
107124
@@ -111,25 +128,28 @@ export interface NameAlias {
111128}
112129
113130export class ImportNode extends AstNode {
114- constructor ( public module : NameAlias , public body : AstBlock , public parts : NameAlias [ ] | undefined = undefined ) {
131+ constructor ( public module : NameAlias , public body : AstBlock , public parts : NameAlias [ ] | undefined = undefined , public loc : Uint16Array ) {
115132 super ( 'import' ) ;
133+ this . loc = loc ;
116134 }
117135}
118136
119- export class GetSingleVarNode extends AstNode {
137+ export class GetSingleVarNode extends AstNode implements IsNullCoelsing {
120138 name : string ;
121139 nullCoelsing : boolean | undefined = undefined ;
122140
123141 constructor ( token : Token , nullCoelsing : boolean | undefined = undefined ) {
124142 super ( 'getSingleVar' ) ;
125143 this . name = token [ 0 ] as string ;
126144 this . nullCoelsing = nullCoelsing ;
145+ this . loc = getTokenLoc ( token ) ;
127146 }
128147}
129148
130149export class DotObjectAccessNode extends AstNode {
131- constructor ( public nestedProps : AstNode [ ] ) {
150+ constructor ( public nestedProps : AstNode [ ] , public loc : Uint16Array ) {
132151 super ( 'dotObjectAccess' ) ;
152+ this . loc = loc ;
133153 }
134154}
135155export interface ObjectPropertyInfo {
@@ -138,34 +158,38 @@ export interface ObjectPropertyInfo {
138158}
139159
140160export class CreateObjectNode extends AstNode {
141- constructor ( public props : ObjectPropertyInfo [ ] ) {
161+ constructor ( public props : ObjectPropertyInfo [ ] , public loc : Uint16Array ) {
142162 super ( 'createObject' ) ;
163+ this . loc = loc ;
143164 }
144165}
145166
146167export class CreateArrayNode extends AstNode {
147- constructor (
148- public items : AstNode [ ]
149- ) {
168+ constructor ( public items : AstNode [ ] , public loc : Uint16Array ) {
150169 super ( 'createArray' ) ;
170+ this . loc = loc ;
151171 }
152172}
153173
154174export class BracketObjectAccessNode extends AstNode {
155175 constructor (
156176 public propertyName : string ,
157177 public bracketBody : AstNode ,
158- public nullCoalescing : boolean | undefined = undefined ) {
178+ public nullCoalescing : boolean | undefined = undefined ,
179+ public loc : Uint16Array ) {
159180 super ( 'bracketObjectAccess' ) ;
181+ this . loc = loc ;
160182 }
161183}
162184
163185export class BinOpNode extends AstNode {
164186 constructor (
165187 public left : AstNode ,
166188 public op : ExpressionOperators ,
167- public right : AstNode ) {
189+ public right : AstNode ,
190+ public loc : Uint16Array ) {
168191 super ( 'binOp' ) ;
192+ this . loc = loc ;
169193 }
170194}
171195
@@ -175,3 +199,5 @@ export interface AstBlock {
175199 funcs : FunctionDefNode [ ] ;
176200 body : AstNode [ ] ;
177201}
202+
203+
0 commit comments