-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathjass_im.parseq
More file actions
382 lines (277 loc) · 13.5 KB
/
jass_im.parseq
File metadata and controls
382 lines (277 loc) · 13.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
package de.peeeq.wurstscript.jassIm
abstract syntax:
ImProg(
@ignoreForEquality de.peeeq.wurstscript.ast.Element trace,
ImVars globals,
ImFunctions functions,
ImMethods methods,
ImClasses classes,
java.util.Map<ImVar, java.util.List<ImExpr>> globalInits)
ImVars * ImVar
ImFunctions * ImFunction
ImClasses * ImClass
ImVar(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImType type, String name,
java.util.List<de.peeeq.wurstscript.translation.imtranslation.VarFlag> varFlags)
ImType =
ImSimpleType(String typename)
| ImArrayLikeType
| ImTupleType(java.util.List<ImType> types, java.util.List<String> names)
| ImVoid()
| ImClassType(ref ImClass classDef, ImTypeArguments typeArguments)
| ImTypeVarRef(ref ImTypeVar typeVariable)
| ImAnyType()
ImArrayLikeType =
ImArrayType(ref ImType entryType)
| ImArrayTypeMulti(ref ImType entryType, java.util.List<Integer> arraySize)
ImTypeVars * ImTypeVar
ImTypeVar(String name)
ImFunction(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace,
String name,
ImTypeVars typeVariables,
ImVars parameters,
ref ImType returnType,
ImVars locals,
ImStmts body,
java.util.List<de.peeeq.wurstscript.translation.imtranslation.FunctionFlag> flags)
ImClass(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace,
String name,
ImTypeVars typeVariables,
ImVars fields,
ImMethods methods,
ImFunctions functions,
java.util.List<ImClassType> superClasses)
ImElementWithTypeVars = ImFunction | ImClass
ImMethods * ImMethod
ImMethod(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace,
ref ImClassType methodClass,
String name,
ref ImFunction implementation,
java.util.List<ImMethod> subMethods,
boolean isAbstract)
ImStmts * ImStmt
ImStmt =
ImIf(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImExpr condition, ImStmts thenBlock, ImStmts elseBlock)
| ImLoop(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImStmts body)
| ImExitwhen(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImExpr condition)
| ImReturn(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImExprOpt returnValue)
| ImSet(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImLExpr left, ImExpr right)
| ImExpr
| ImVarargLoop(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImStmts body, ref ImVar loopVar)
ImExprOpt =
ImExpr
| ImFlatExprOpt
ImFlatExprOpt =
ImFlatExpr
| ImNoExpr()
ImExprs * ImExpr
ImExpr =
ImCall
| ImClassRelatedExpr
| ImConst
| ImGetStackTrace()
| ImCompiletimeExpr(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImExpr expr, int executionOrderIndex)
| ImLExpr
| ImCast(ImExpr expr, ref ImType toType)
// an expression which can be used on the left hand side of an assignment
ImLExpr =
ImVarAccess(ref ImVar var)
| ImVarArrayAccess(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImVar var, ImExprs indexes)
| ImTupleSelection(ImExpr tupleExpr, int tupleIndex) // can only be used as L-value if tupleExpr is l-exprs
| ImMemberAccess
| ImTupleExpr(ImExprs exprs) // can only be used as L-value if exprs only contains l-exprs
| ImStatementExpr(ImStmts statements, ImExpr expr) // can only be used as L-value if expr only contains l-exprs
ImClassRelatedExpr =
ImMemberOrMethodAccess
| ImClassRelatedExprWithClass
ImMemberOrMethodAccess =
ImMethodCall(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImMethod method, ImTypeArguments typeArguments, ImExpr receiver, ImExprs arguments, boolean tuplesEliminated)
| ImMemberAccess(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImExpr receiver, ImTypeArguments typeArguments, ref ImVar var, ImExprs indexes)
ImClassRelatedExprWithClass =
ImAlloc(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImClassType clazz)
| ImDealloc(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImClassType clazz, ImExpr obj)
| ImInstanceof(ImExpr obj, ref ImClassType clazz)
| ImTypeIdOfObj(ImExpr obj, ref ImClassType clazz)
| ImTypeIdOfClass(ref ImClassType clazz)
| ImTypeClassDictValue(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImClassType clazz, ImExprs arguments)
ImCall =
ImFunctionCall(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImFunction func, ImTypeArguments typeArguments, ImExprs arguments
, boolean tuplesEliminated, de.peeeq.wurstscript.translation.imtranslation.CallType callType)
| ImOperatorCall(de.peeeq.wurstscript.WurstOperator op, ImExprs arguments)
ImConst =
ImIntVal(int valI)
| ImRealVal(String valR)
| ImStringVal(String valS)
| ImBoolVal(boolean valB)
| ImFuncRef(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImFunction func)
| ImNull(ref ImType type)
ImTypeArguments * ImTypeArgument
ImTypeArgument(ref ImType type)
// helper types:
JassImElementWithName = ImVar | ImFunction | ImClass | ImMethod
ElementWithTrace = ImVar | ImFunction | ImClass | ImMethod | ImIf | ImLoop | ImExitwhen | ImReturn
| ImSet | ImSetTuple | ImSetArray | ImSetArrayMulti | ImSetArrayTuple
| ImMethodCall | ImFunctionCall | ImCompiletimeExpr | ImVarArrayAccess | ImMemberAccess
| ImProg | ImFuncRef
| ImAlloc | ImDealloc
ElementWithTypes = ImTupleType | ImTupleArrayType
ElementWithVar = ImVarAccess | ImVarArrayAccess | ImVarArrayMultiAccess | ImMemberAccess
ImPrintable = ImStmt | ImFunction | ImProg | ImVar | ImType | ImStmts | ImExprOpt | ImType | ImTypeVar | ImClass
ImVarWrite = ImSet | ImSetArray | ImSetArrayMulti | ImSetArrayTuple | ImSetTuple
ImVarRead = ImVarAccess | ImVarArrayAccess | ImVarArrayMultiAccess
attributes:
ImType.defaultValue
returns de.peeeq.wurstscript.intermediatelang.ILconst
implemented by de.peeeq.wurstscript.translation.imtojass.DefaultValue.get
ImPrintable.print(java.lang.Appendable sb, int indent)
returns void
implemented by de.peeeq.wurstscript.translation.imtranslation.ImPrinter.print
Element.toString()
returns String
implemented by de.peeeq.wurstscript.translation.imtranslation.ImPrinter.asString
ImProg.flatten(de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator)
returns void
implemented by de.peeeq.wurstscript.translation.imtranslation.Flatten.flattenProg
ImFunction.flatten(de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator)
returns void
implemented by de.peeeq.wurstscript.translation.imtranslation.Flatten.flattenFunc
ImStmt.flatten(
de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
de.peeeq.wurstscript.jassIm.ImFunction f
)
returns de.peeeq.wurstscript.translation.imtranslation.Flatten.Result
implemented by de.peeeq.wurstscript.translation.imtranslation.Flatten.flatten
ImLExpr.flattenL(
de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
de.peeeq.wurstscript.jassIm.ImFunction f
)
returns de.peeeq.wurstscript.translation.imtranslation.Flatten.ResultL
implemented by de.peeeq.wurstscript.translation.imtranslation.Flatten.flattenL
ImStmt.attrPurity()
returns de.peeeq.wurstscript.translation.imtranslation.purity.PurityLevel
implemented by de.peeeq.wurstscript.translation.imtranslation.purity.PurityLevels.calculate
ImStmts.translate(
java.util.List<de.peeeq.wurstscript.jassAst.JassStatement> stmts,
de.peeeq.wurstscript.jassAst.JassFunction f,
de.peeeq.wurstscript.translation.imtojass.ImToJassTranslator translator
)
returns void
implemented by de.peeeq.wurstscript.translation.imtojass.StatementTranslation.translate
ImStmt.translate(
java.util.List<de.peeeq.wurstscript.jassAst.JassStatement> stmts,
de.peeeq.wurstscript.jassAst.JassFunction f,
de.peeeq.wurstscript.translation.imtojass.ImToJassTranslator translator
)
returns void
implemented by de.peeeq.wurstscript.translation.imtojass.StatementTranslation.translate
ImExpr.translate(
de.peeeq.wurstscript.translation.imtojass.ImToJassTranslator translator
)
returns de.peeeq.wurstscript.jassAst.JassExpr
implemented by de.peeeq.wurstscript.translation.imtojass.ExprTranslation.translate
ImConst.equalValue(ImConst other)
returns boolean
implemented by de.peeeq.wurstscript.translation.imtojass.Equality.equalValue
ImExpr.attrTyp()
returns ImType
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttrType.getType
Element.getNearestFunc()
returns ImFunction
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.getNearestFunc
ImType.equalsType(ImType other)
returns boolean
implemented by de.peeeq.wurstscript.translation.imtojass.TypeEquality.isEqualType
ImType.translateType()
returns String
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.translateType
ImVar.isGlobal()
returns boolean
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.isGlobal
ImStmt.translateStmtToLua(java.util.List<de.peeeq.wurstscript.luaAst.LuaStatement> res,
de.peeeq.wurstscript.translation.lua.translation.LuaTranslator tr)
returns void
implemented by de.peeeq.wurstscript.translation.lua.translation.StmtTranslation.translate
ImExpr.translateToLua(de.peeeq.wurstscript.translation.lua.translation.LuaTranslator tr)
returns de.peeeq.wurstscript.luaAst.LuaExpr
implemented by de.peeeq.wurstscript.translation.lua.translation.ExprTranslation.translate
ImStmts.runStatements(de.peeeq.wurstscript.intermediatelang.interpreter.ProgramState globalState
, de.peeeq.wurstscript.intermediatelang.interpreter.LocalState localState)
returns void
implemented by de.peeeq.wurstscript.intermediatelang.interpreter.RunStatement.run
ImStmt.runStatement(de.peeeq.wurstscript.intermediatelang.interpreter.ProgramState globalState
, de.peeeq.wurstscript.intermediatelang.interpreter.LocalState localState)
returns void
implemented by de.peeeq.wurstscript.intermediatelang.interpreter.RunStatement.run
ImExpr.evaluate(de.peeeq.wurstscript.intermediatelang.interpreter.ProgramState globalState
, de.peeeq.wurstscript.intermediatelang.interpreter.LocalState localState)
returns de.peeeq.wurstscript.intermediatelang.ILconst
implemented by de.peeeq.wurstscript.intermediatelang.interpreter.EvaluateExpr.eval
ImLExpr.evaluateLvalue(de.peeeq.wurstscript.intermediatelang.interpreter.ProgramState globalState
, de.peeeq.wurstscript.intermediatelang.interpreter.LocalState localState)
returns de.peeeq.wurstscript.intermediatelang.ILaddress
implemented by de.peeeq.wurstscript.intermediatelang.interpreter.EvaluateExpr.evaluateLvalue
ImCompiletimeExpr.evaluationResult
returns java.util.concurrent.atomic.AtomicReference<de.peeeq.wurstscript.intermediatelang.ILconst>
implemented by de.peeeq.wurstscript.intermediatelang.interpreter.EvaluateExpr.compiletimeEvaluationResult
ImFunction.isNative()
returns boolean
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.isNative
ImFunction.isBj()
returns boolean
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.isBj
ImFunction.isExtern()
returns boolean
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.isExtern
ImFunction.isCompiletime()
returns boolean
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.isCompiletime
ImFunction.hasFlag(de.peeeq.wurstscript.translation.imtranslation.FunctionFlag flag)
returns boolean
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.hasFlag
Element.attrTrace()
returns de.peeeq.wurstscript.ast.Element
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.getTrace
Element.attrProg()
returns ImProg
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.getProg
ImProg.attrVariableUses
returns de.peeeq.wurstscript.translation.imoptimizer.VariableUses.Uses
implemented by de.peeeq.wurstscript.translation.imoptimizer.VariableUses.calcVarUses
ImVar.attrWrites
returns java.util.Collection<ImVarWrite>
implemented by de.peeeq.wurstscript.translation.imoptimizer.VariableUses.getVarWrites
ImVar.attrReads
returns java.util.Collection<ImVarRead>
implemented by de.peeeq.wurstscript.translation.imoptimizer.VariableUses.getVarReads
ImFunction.calcUsedVariables()
returns java.util.Set<ImVar>
implemented by de.peeeq.wurstscript.translation.imtranslation.UsedVariables.calculate
ImFunction.calcReadVariables()
returns java.util.Set<ImVar>
implemented by de.peeeq.wurstscript.translation.imtranslation.UsedVariables.calculateReadVars
ImFunction.calcUsedFunctions()
returns java.util.Set<ImFunction>
implemented by de.peeeq.wurstscript.translation.imtranslation.UsedFunctions.calculate
ImMethod.attrClass()
returns ImClass
implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.attrClass
ImClass.attrTypeId()
returns int
implemented by de.peeeq.wurstscript.translation.imtranslation.TypeId.get
ImClass.isSubclassOf(ImClass other)
returns boolean
implemented by de.peeeq.wurstscript.translation.imtranslation.TypeId.isSubclass
ImProg.attrTypeId
returns java.util.Map<ImClass, Integer>
implemented by de.peeeq.wurstscript.translation.imtranslation.TypeId.calculate
ImClass.attrSubclasses
returns java.util.List<ImClass>
implemented by de.peeeq.wurstscript.translation.imtranslation.Subclasses.get
ImProg.attrSubclasses
returns com.google.common.collect.Multimap<ImClass, ImClass>
implemented by de.peeeq.wurstscript.translation.imtranslation.Subclasses.calculate
ImLExpr.isUsedAsLValue()
returns boolean
implemented by de.peeeq.wurstscript.translation.imtranslation.LValues.isUsedAsLValue
ImVar.isBJ()
returns boolean
implemented by de.peeeq.wurstscript.translation.imtranslation.VarFlag.isBj