1
1
import { ExpressionOperators , OperationTypes , Operators } from "./operators" ;
2
- import { Token } from "./token-types" ;
2
+ import { getTokenLoc , getTokenValue , Token } from "./token-types" ;
3
3
4
4
export type AstNodeType = 'assign' | 'binOp' | 'const'
5
5
| 'getSingleVar' | 'setSingleVar' | 'dotObjectAccess' | 'bracketObjectAccess'
@@ -14,11 +14,22 @@ export abstract class AstNode {
14
14
constructor ( public type : AstNodeType ) { }
15
15
}
16
16
17
+ export interface FuncDefNode {
18
+ params : string [ ] ;
19
+ funcAst : AstBlock ;
20
+ }
21
+
22
+ export interface IsNullCoelsing {
23
+ nullCoelsing : boolean | undefined
24
+ }
25
+
17
26
export class AssignNode extends AstNode {
18
27
constructor (
19
28
public target : AstNode ,
20
- public source : AstNode ) {
29
+ public source : AstNode ,
30
+ public loc : Uint16Array ) {
21
31
super ( 'assign' ) ;
32
+ this . loc = loc ;
22
33
}
23
34
}
24
35
@@ -27,20 +38,22 @@ export class ConstNode extends AstNode {
27
38
28
39
constructor ( token : Token ) {
29
40
super ( 'const' ) ;
30
- this . value = token [ 0 ] ;
31
- // this.loc = token[1].subarray(1 );
41
+ this . value = getTokenValue ( token ) ;
42
+ this . loc = getTokenLoc ( token ) ;
32
43
}
33
44
}
34
45
35
46
export class CommentNode extends AstNode {
36
- constructor ( public comment : string ) {
47
+ constructor ( public comment : string , public loc : Uint16Array ) {
37
48
super ( 'comment' ) ;
49
+ this . loc = loc ;
38
50
}
39
51
}
40
52
41
53
export class ReturnNode extends AstNode {
42
- constructor ( public returnValue : AstNode | undefined = undefined ) {
54
+ constructor ( public returnValue : AstNode | undefined = undefined , public loc : Uint16Array ) {
43
55
super ( 'return' ) ;
56
+ this . loc = loc ;
44
57
}
45
58
}
46
59
@@ -61,47 +74,51 @@ export class SetSingleVarNode extends AstNode {
61
74
constructor ( token : Token ) {
62
75
super ( 'setSingleVar' ) ;
63
76
this . name = token [ 0 ] as string
77
+ this . loc = getTokenLoc ( token ) ;
64
78
}
65
79
}
66
80
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 ) {
69
85
super ( 'funcCall' ) ;
86
+ this . loc = loc ;
70
87
}
71
88
}
72
89
73
- export interface FuncDefNode {
74
- params : string [ ] ;
75
- funcAst : AstBlock ;
76
- }
77
-
78
90
export 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 ;
81
94
}
82
95
}
83
96
84
97
export 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 ) {
86
99
super ( 'arrowFuncDef' ) ;
100
+ this . loc = loc ;
87
101
}
88
102
}
89
103
90
104
export 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 ) {
92
106
super ( 'if' ) ;
107
+ this . loc = loc
93
108
}
94
109
}
95
110
96
111
export 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 ) {
98
113
super ( 'for' ) ;
114
+ this . loc = loc ;
99
115
}
100
116
}
101
117
102
118
export class WhileNode extends AstNode {
103
- constructor ( public condition : AstNode , public body : AstNode [ ] ) {
119
+ constructor ( public condition : AstNode , public body : AstNode [ ] , public loc : Uint16Array ) {
104
120
super ( 'while' ) ;
121
+ this . loc = loc ;
105
122
}
106
123
}
107
124
@@ -111,25 +128,28 @@ export interface NameAlias {
111
128
}
112
129
113
130
export 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 ) {
115
132
super ( 'import' ) ;
133
+ this . loc = loc ;
116
134
}
117
135
}
118
136
119
- export class GetSingleVarNode extends AstNode {
137
+ export class GetSingleVarNode extends AstNode implements IsNullCoelsing {
120
138
name : string ;
121
139
nullCoelsing : boolean | undefined = undefined ;
122
140
123
141
constructor ( token : Token , nullCoelsing : boolean | undefined = undefined ) {
124
142
super ( 'getSingleVar' ) ;
125
143
this . name = token [ 0 ] as string ;
126
144
this . nullCoelsing = nullCoelsing ;
145
+ this . loc = getTokenLoc ( token ) ;
127
146
}
128
147
}
129
148
130
149
export class DotObjectAccessNode extends AstNode {
131
- constructor ( public nestedProps : AstNode [ ] ) {
150
+ constructor ( public nestedProps : AstNode [ ] , public loc : Uint16Array ) {
132
151
super ( 'dotObjectAccess' ) ;
152
+ this . loc = loc ;
133
153
}
134
154
}
135
155
export interface ObjectPropertyInfo {
@@ -138,34 +158,38 @@ export interface ObjectPropertyInfo {
138
158
}
139
159
140
160
export class CreateObjectNode extends AstNode {
141
- constructor ( public props : ObjectPropertyInfo [ ] ) {
161
+ constructor ( public props : ObjectPropertyInfo [ ] , public loc : Uint16Array ) {
142
162
super ( 'createObject' ) ;
163
+ this . loc = loc ;
143
164
}
144
165
}
145
166
146
167
export class CreateArrayNode extends AstNode {
147
- constructor (
148
- public items : AstNode [ ]
149
- ) {
168
+ constructor ( public items : AstNode [ ] , public loc : Uint16Array ) {
150
169
super ( 'createArray' ) ;
170
+ this . loc = loc ;
151
171
}
152
172
}
153
173
154
174
export class BracketObjectAccessNode extends AstNode {
155
175
constructor (
156
176
public propertyName : string ,
157
177
public bracketBody : AstNode ,
158
- public nullCoalescing : boolean | undefined = undefined ) {
178
+ public nullCoalescing : boolean | undefined = undefined ,
179
+ public loc : Uint16Array ) {
159
180
super ( 'bracketObjectAccess' ) ;
181
+ this . loc = loc ;
160
182
}
161
183
}
162
184
163
185
export class BinOpNode extends AstNode {
164
186
constructor (
165
187
public left : AstNode ,
166
188
public op : ExpressionOperators ,
167
- public right : AstNode ) {
189
+ public right : AstNode ,
190
+ public loc : Uint16Array ) {
168
191
super ( 'binOp' ) ;
192
+ this . loc = loc ;
169
193
}
170
194
}
171
195
@@ -175,3 +199,5 @@ export interface AstBlock {
175
199
funcs : FunctionDefNode [ ] ;
176
200
body : AstNode [ ] ;
177
201
}
202
+
203
+
0 commit comments