@@ -16,10 +16,9 @@ ImVar(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImType type
1616
1717ImType =
1818 ImSimpleType(String typename)
19- | ImArrayType(String typename )
20- | ImArrayTypeMulti(String typename , java.util.List<Integer> arraySize)
19+ | ImArrayType(ref ImType entryType )
20+ | ImArrayTypeMulti(ref ImType entryType , java.util.List<Integer> arraySize)
2121 | ImTupleType(java.util.List<ImType> types, java.util.List<String> names)
22- | ImTupleArrayType(java.util.List<ImType> types, java.util.List<String> names)
2322 | ImVoid()
2423
2524ImFunction(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace,
@@ -52,11 +51,7 @@ ImStmt =
5251 | ImLoop(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImStmts body)
5352 | ImExitwhen(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImExpr condition)
5453 | ImReturn(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImExprOpt returnValue)
55- | ImSet(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImVar left, ImExpr right)
56- | ImSetTuple(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImVar left, int tupleIndex, ImExpr right)
57- | ImSetArray(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImVar left, ImExpr index, ImExpr right)
58- | ImSetArrayMulti(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImVar left, ImExprs indices, ImExpr right)
59- | ImSetArrayTuple(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImVar left, ImExpr index, int tupleIndex, ImExpr right)
54+ | ImSet(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImLExpr left, ImExpr right)
6055 | ImExpr
6156 | ImVarargLoop(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImStmts body, ref ImVar loopVar)
6257
@@ -72,26 +67,29 @@ ImFlatExprOpt =
7267ImExprs * ImExpr
7368
7469ImExpr =
75- ImStatementExpr(ImStmts statements, ImExpr expr)
76- | ImFlatExpr
77-
78- ImFlatExpr =
7970 ImCall
80- | ImVarAccess(ref ImVar var)
81- | ImVarArrayAccess(ref ImVar var, ImExpr index)
82- | ImVarArrayMultiAccess(ref ImVar var, ImExpr index1, ImExpr index2)
83- | ImTupleExpr(ImExprs exprs)
84- | ImTupleSelection(ImExpr tupleExpr, int tupleIndex)
8571 | ImClassRelatedExpr
8672 | ImConst
8773 | ImGetStackTrace()
8874 | ImCompiletimeExpr(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImExpr expr, int executionOrderIndex)
89-
75+ | ImLExpr
76+
77+ // an expression which can be used on the left hand side of an assignment
78+ ImLExpr =
79+ ImVarAccess(ref ImVar var)
80+ | ImVarArrayAccess(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImVar var, ImExprs indexes)
81+ | ImTupleSelection(ImExpr tupleExpr, int tupleIndex) // can only be used as L-value if tupleExpr is l-exprs
82+ | ImMemberAccess
83+ | ImTupleExpr(ImExprs exprs) // can only be used as L-value if exprs only contains l-exprs
84+ | ImStatementExpr(ImStmts statements, ImExpr expr) // can only be used as L-value if expr only contains l-exprs
85+
86+
87+
9088ImClassRelatedExpr =
9189 ImMethodCall(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ref ImMethod method, ImExpr receiver, ImExprs arguments, boolean tuplesEliminated)
9290 | ImAlloc(ref ImClass clazz)
9391 | ImDealloc(ref ImClass clazz, ImExpr obj)
94- | ImMemberAccess(ImExpr receiver, ref ImVar var)
92+ | ImMemberAccess(@ignoreForEquality de.peeeq.wurstscript.ast.Element trace, ImExpr receiver, ref ImVar var)
9593 | ImInstanceof(ImExpr obj, ref ImClass clazz)
9694 | ImTypeIdOfObj(ImExpr obj, ref ImClass clazz)
9795 | ImTypeIdOfClass(ref ImClass clazz)
@@ -117,12 +115,10 @@ JassImElementWithName = ImVar | ImFunction | ImClass | ImMethod
117115
118116ElementWithTrace = ImVar | ImFunction | ImClass | ImMethod | ImIf | ImLoop | ImExitwhen | ImReturn
119117 | ImSet | ImSetTuple | ImSetArray | ImSetArrayMulti | ImSetArrayTuple
120- | ImMethodCall | ImFunctionCall | ImCompiletimeExpr
118+ | ImMethodCall | ImFunctionCall | ImCompiletimeExpr | ImVarArrayAccess | ImMemberAccess
121119
122120ElementWithTypes = ImTupleType | ImTupleArrayType
123121
124- ElementWithLeft = ImSet| ImSetTuple| ImSetArray| ImSetArrayMulti| ImSetArrayTuple
125-
126122ElementWithVar = ImVarAccess | ImVarArrayAccess | ImVarArrayMultiAccess | ImMemberAccess
127123
128124
@@ -160,41 +156,18 @@ ImStmt.flatten(
160156 )
161157 returns de.peeeq.wurstscript.translation.imtranslation.Flatten.Result
162158 implemented by de.peeeq.wurstscript.translation.imtranslation.Flatten.flatten
163-
164- ImStmt.attrPurity
159+
160+ ImLExpr.flattenL(
161+ de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
162+ de.peeeq.wurstscript.jassIm.ImFunction f
163+ )
164+ returns de.peeeq.wurstscript.translation.imtranslation.Flatten.ResultL
165+ implemented by de.peeeq.wurstscript.translation.imtranslation.Flatten.flattenL
166+
167+ ImStmt.attrPurity()
165168 returns de.peeeq.wurstscript.translation.imtranslation.purity.PurityLevel
166169 implemented by de.peeeq.wurstscript.translation.imtranslation.purity.PurityLevels.calculate
167170
168- ImProg.eliminateTuples(de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator)
169- returns void
170- implemented by de.peeeq.wurstscript.translation.imtranslation.EliminateTuples.eliminateTuplesProg
171-
172- ImFunction.eliminateTuples(de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator)
173- returns void
174- implemented by de.peeeq.wurstscript.translation.imtranslation.EliminateTuples.eliminateTuplesFunc
175-
176- ImStmt.eliminateTuples(
177- de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
178- de.peeeq.wurstscript.jassIm.ImFunction f
179- )
180- returns ImStmt
181- implemented by de.peeeq.wurstscript.translation.imtranslation.EliminateTuples.eliminateTuples
182-
183- ImExpr.eliminateTuplesExpr(
184- de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
185- de.peeeq.wurstscript.jassIm.ImFunction f
186- )
187- returns ImExpr
188- implemented by de.peeeq.wurstscript.translation.imtranslation.EliminateTuples.eliminateTuplesExpr
189-
190- ImExprOpt.eliminateTuplesExprOpt(
191- de.peeeq.wurstscript.translation.imtranslation.ImTranslator translator,
192- de.peeeq.wurstscript.jassIm.ImFunction f
193- )
194- returns ImExprOpt
195- implemented by de.peeeq.wurstscript.translation.imtranslation.EliminateTuples.eliminateTuplesExpr
196-
197-
198171ImStmts.translate(
199172 java.util.List<de.peeeq.wurstscript.jassAst.JassStatement> stmts,
200173 de.peeeq.wurstscript.jassAst.JassFunction f,
@@ -221,7 +194,7 @@ ImConst.equalValue(ImConst other)
221194 returns boolean
222195 implemented by de.peeeq.wurstscript.translation.imtojass.Equality.equalValue
223196
224- ImExpr.attrTyp
197+ ImExpr.attrTyp()
225198 returns ImType
226199 implemented by de.peeeq.wurstscript.translation.imtojass.ImAttrType.getType
227200
@@ -237,7 +210,7 @@ ImType.translateType()
237210 returns String
238211 implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.translateType
239212
240- ImVar.isGlobal
213+ ImVar.isGlobal()
241214 returns boolean
242215 implemented by de.peeeq.wurstscript.translation.imtojass.ImAttributes.isGlobal
243216
@@ -267,6 +240,13 @@ ImExpr.evaluate(de.peeeq.wurstscript.intermediatelang.interpreter.ProgramState g
267240 returns de.peeeq.wurstscript.intermediatelang.ILconst
268241 implemented by de.peeeq.wurstscript.intermediatelang.interpreter.EvaluateExpr.eval
269242
243+ ImLExpr.evaluateLvalue(de.peeeq.wurstscript.intermediatelang.interpreter.ProgramState globalState
244+ , de.peeeq.wurstscript.intermediatelang.interpreter.LocalState localState)
245+ returns de.peeeq.wurstscript.intermediatelang.ILaddress
246+ implemented by de.peeeq.wurstscript.intermediatelang.interpreter.EvaluateExpr.evaluateLvalue
247+
248+
249+
270250ImCompiletimeExpr.evaluationResult
271251 returns java.util.concurrent.atomic.AtomicReference<de.peeeq.wurstscript.intermediatelang.ILconst>
272252 implemented by de.peeeq.wurstscript.intermediatelang.interpreter.EvaluateExpr.compiletimeEvaluationResult
@@ -352,5 +332,7 @@ ImProg.attrSubclasses
352332 returns com.google.common.collect.Multimap<ImClass, ImClass>
353333 implemented by de.peeeq.wurstscript.translation.imtranslation.Subclasses.calculate
354334
355-
335+ ImLExpr.isUsedAsLValue()
336+ returns boolean
337+ implemented by de.peeeq.wurstscript.translation.imtranslation.LValues.isUsedAsLValue
356338
0 commit comments