Skip to content

Commit 5c72fae

Browse files
committed
Propagate concrete types through Lua composite operands
1 parent 24246be commit 5c72fae

1 file changed

Lines changed: 15 additions & 2 deletions

File tree

  • de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation

de.peeeq.wurstscript/src/main/java/de/peeeq/wurstscript/translation/imtranslation/ExprTranslation.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,10 @@ private static ImExpr wrapTranslation(Element trace, ImTranslator t, ImExpr tran
208208
}
209209

210210
public static ImExpr translateIntern(ExprBinary e, ImTranslator t, ImFunction f) {
211-
ImExpr left = e.getLeft().imTranslateExpr(t, f);
212-
ImExpr right = e.getRight().imTranslateExpr(t, f);
213211
WurstOperator op = e.getOp();
214212
FuncLink overloadedOperator = e.attrFuncLink();
213+
ImExpr left = translateConcatOperand(e, e.getLeft(), t, f, overloadedOperator);
214+
ImExpr right = translateConcatOperand(e, e.getRight(), t, f, overloadedOperator);
215215
if (op == WurstOperator.PLUS && overloadedOperator == null) {
216216
left = wrapImplicitToString(e, e.getLeft(), left, t);
217217
right = wrapImplicitToString(e, e.getRight(), right, t);
@@ -243,6 +243,19 @@ public static ImExpr translateIntern(ExprBinary e, ImTranslator t, ImFunction f)
243243
return ImOperatorCall(op, ImExprs(left, right));
244244
}
245245

246+
private static ImExpr translateConcatOperand(ExprBinary concat, Expr operand, ImTranslator t, ImFunction f,
247+
@Nullable FuncLink overloadedOperator) {
248+
if (concat.getOp() == WurstOperator.PLUS && overloadedOperator == null
249+
&& isCompositeExpectedTypeExpression(operand)) {
250+
FuncLink toString = AttrFuncDef.implicitToStringForConcatOperand(concat, operand);
251+
if (toString != null) {
252+
FunctionSignature signature = FunctionSignature.fromNameLink(toString);
253+
return translateWithExpectedType(operand, t, f, signature.getReceiverType());
254+
}
255+
}
256+
return operand.imTranslateExpr(t, f);
257+
}
258+
246259
private static ImExpr wrapImplicitToString(ExprBinary concat, Expr operand, ImExpr translated,
247260
ImTranslator t) {
248261
FuncLink toString = AttrFuncDef.implicitToStringForConcatOperand(concat, operand);

0 commit comments

Comments
 (0)