fix: evaluate call_indirect callee before arguments (#2994) · AssemblyScript/assemblyscript@ffed83a · GitHub
Skip to content

Commit ffed83a

Browse files
fix: evaluate call_indirect callee before arguments (#2994)
1 parent f93a941 commit ffed83a

18 files changed

Lines changed: 9232 additions & 6834 deletions

‎src/compiler.ts‎

Lines changed: 30 additions & 18 deletions

‎src/module.ts‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2978,6 +2978,13 @@ export class Module {
29782978

29792979
/** Makes a copy of a trivial expression (doesn't contain subexpressions). Returns `0` if non-trivial. */
29802980
tryCopyTrivialExpression(expr: ExpressionRef): ExpressionRef {
2981+
if (this.isTrivialExpression(expr)) {
2982+
return this.copyExpression(expr);
2983+
}
2984+
return 0;
2985+
}
2986+
2987+
isTrivialExpression(expr: ExpressionRef): bool {
29812988
switch (binaryen._BinaryenExpressionGetId(expr)) {
29822989
case ExpressionId.LocalGet:
29832990
case ExpressionId.GlobalGet:
@@ -2986,9 +2993,9 @@ export class Module {
29862993
case ExpressionId.Nop:
29872994
case ExpressionId.Unreachable:
29882995
case ExpressionId.DataDrop:
2989-
case ExpressionId.RefNull: return this.copyExpression(expr);
2996+
case ExpressionId.RefNull: return true;
29902997
}
2991-
return 0;
2998+
return false;
29922999
}
29933000

29943001
/** Makes a copy of any expression including all subexpressions. */

‎tests/compiler/call-rest.debug.wat‎

Lines changed: 58 additions & 45 deletions

0 commit comments

Comments
 (0)