@@ -380,14 +380,15 @@ private void rewriteFuncRefs(final List<ImFuncRefOrCall> funcRefs, Set<ImFunctio
380380 ImExprs args = JassIm .ImExprs (str );
381381 ImStmts body = bridgeFunc .getBody ();
382382 de .peeeq .wurstscript .ast .Element trace = frTrace ;
383- // reset stack and add information for callback:
384- body .add (JassIm .ImSet (trace , JassIm .ImVarAccess (stackSize ), JassIm .ImIntVal (0 )));
385383
386384 ImFunctionCall call = JassIm .ImFunctionCall (frTrace , f , JassIm .ImTypeArguments (), args , true , CallType .NORMAL );
387385 if (bridgeFunc .getReturnType () instanceof ImVoid ) {
388386 stmt = call ;
389387 } else {
390- stmt = JassIm .ImReturn (frTrace , call );
388+ ImVar bridgeReturn = JassIm .ImVar (trace , bridgeFunc .getReturnType ().copy (), "bridge_return" , false );
389+ bridgeFunc .getLocals ().add (bridgeReturn );
390+ body .add (JassIm .ImSet (trace , JassIm .ImVarAccess (bridgeReturn ), call ));
391+ stmt = JassIm .ImReturn (frTrace , JassIm .ImVarAccess (bridgeReturn ));
391392 }
392393 body .add (stmt );
393394
@@ -426,7 +427,7 @@ private void rewriteErrorStatements(final Multimap<ImFunction, ImGetStackTrace>
426427 ImVar traceLimit = JassIm .ImVar (trace , TypesHelper .imInt (), "stacktraceLimit" , false );
427428 f .getLocals ().add (traceLimit );
428429 ImStmts stmts = JassIm .ImStmts ();
429- stmts .add (JassIm .ImSet (trace , JassIm .ImVarAccess (traceStr ), JassIm .ImStringVal ("" )));
430+ stmts .add (JassIm .ImSet (trace , JassIm .ImVarAccess (traceStr ), JassIm .ImStringVal (" Stacktrace: " )));
430431 stmts .add (JassIm .ImSet (trace , JassIm .ImVarAccess (traceI ), JassIm .ImVarAccess (stackSize )));
431432 stmts .add (JassIm .ImSet (trace , JassIm .ImVarAccess (traceLimit ), JassIm .ImIntVal (0 )));
432433 ImStmts loopBody = JassIm .ImStmts ();
@@ -447,6 +448,12 @@ private void rewriteErrorStatements(final Multimap<ImFunction, ImGetStackTrace>
447448 JassIm .ImOperatorCall (WurstOperator .PLUS , JassIm .ImExprs (JassIm .ImStringVal ("\n " ),
448449 JassIm .ImVarArrayAccess (trace , stack , JassIm .ImExprs (JassIm .ImVarAccess (traceI )))))))));
449450
451+ // Make empty traces explicit instead of returning an empty string.
452+ stmts .add (JassIm .ImIf (trace , JassIm .ImOperatorCall (WurstOperator .EQ ,
453+ JassIm .ImExprs (JassIm .ImVarAccess (traceStr ), JassIm .ImStringVal (" Stacktrace:" ))),
454+ JassIm .ImStmts (JassIm .ImSet (trace , JassIm .ImVarAccess (traceStr ), JassIm .ImStringVal (" Stacktrace: <none>" ))),
455+ JassIm .ImStmts ()));
456+
450457 s .replaceBy (JassIm .ImStatementExpr (stmts , JassIm .ImVarAccess (traceStr )));
451458 }
452459 }
0 commit comments