From 070784479d78fd24aa2b0adc6b8024fb641abb2a Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 1 Nov 2021 10:15:38 +0200 Subject: [PATCH 1/4] expose try for exception handling --- src/module.ts | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/module.ts b/src/module.ts index f4ab962eb4..22d283db36 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1613,23 +1613,27 @@ export class Module { // exception handling - // try( - // body: ExpressionRef, - // catchTags: string[], - // catchBodies: ExpressionRef[] - // ): ExpressionRef { - // var numCatchTags = catchTags.length; - // var strs = new Array(numCatchTags); - // for (let i = 0; i < numCatchTags; ++i) { - // strs[i] = this.allocStringCached(catchTags[i]); - // } - // var cArr1 = allocPtrArray(strs); - // var cArr2 = allocPtrArray(catchBodies); - // var ret = binaryen._BinaryenTry(this.ref, body, cArr1, numCatchTags, cArr2, catchBodies.length); - // binaryen._free(cArr2); - // binaryen._free(cArr1); - // return ret; - // } + try( + name: string | null, + body: ExpressionRef, + catchTags: string[], + catchBodies: ExpressionRef[], + delegateTarget: string | null = null + ): ExpressionRef { + var numCatchTags = catchTags.length; + var strs = new Array(numCatchTags); + for (let i = 0; i < numCatchTags; ++i) { + strs[i] = this.allocStringCached(catchTags[i]); + } + var cArr1 = allocPtrArray(strs); + var cArr2 = allocPtrArray(catchBodies); + var cStr1 = name ? this.allocStringCached(name) : 0; + var cStr2 = delegateTarget ? this.allocStringCached(delegateTarget) : 0; + var ret = binaryen._BinaryenTry(this.ref, cStr1, body, cArr1, numCatchTags, cArr2, catchBodies.length, cStr2); + binaryen._free(cArr2); + binaryen._free(cArr1); + return ret; + } throw( tagName: string, From 9aa9ffff310fa38e401792335eb4a94c9cc1cb12 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 1 Nov 2021 10:17:36 +0200 Subject: [PATCH 2/4] explicit checks with nulls --- src/module.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/module.ts b/src/module.ts index 22d283db36..10a8565b4d 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1627,8 +1627,8 @@ export class Module { } var cArr1 = allocPtrArray(strs); var cArr2 = allocPtrArray(catchBodies); - var cStr1 = name ? this.allocStringCached(name) : 0; - var cStr2 = delegateTarget ? this.allocStringCached(delegateTarget) : 0; + var cStr1 = name !== null ? this.allocStringCached(name) : 0; + var cStr2 = delegateTarget !== null ? this.allocStringCached(delegateTarget) : 0; var ret = binaryen._BinaryenTry(this.ref, cStr1, body, cArr1, numCatchTags, cArr2, catchBodies.length, cStr2); binaryen._free(cArr2); binaryen._free(cArr1); From a12028e3c24fabde8537f7c4dd4eab24b256602c Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 1 Nov 2021 10:18:34 +0200 Subject: [PATCH 3/4] refactor --- src/module.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/module.ts b/src/module.ts index 10a8565b4d..ef83184680 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1629,7 +1629,9 @@ export class Module { var cArr2 = allocPtrArray(catchBodies); var cStr1 = name !== null ? this.allocStringCached(name) : 0; var cStr2 = delegateTarget !== null ? this.allocStringCached(delegateTarget) : 0; - var ret = binaryen._BinaryenTry(this.ref, cStr1, body, cArr1, numCatchTags, cArr2, catchBodies.length, cStr2); + var ret = binaryen._BinaryenTry( + this.ref, cStr1, body, cArr1, numCatchTags, cArr2, catchBodies.length, cStr2 + ); binaryen._free(cArr2); binaryen._free(cArr1); return ret; From ea48c52af653e3d056ef5593e645f2d96d6bad61 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Mon, 1 Nov 2021 14:26:41 +0200 Subject: [PATCH 4/4] Update src/module.ts Co-authored-by: dcode --- src/module.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/module.ts b/src/module.ts index ef83184680..62617f7afe 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1627,8 +1627,8 @@ export class Module { } var cArr1 = allocPtrArray(strs); var cArr2 = allocPtrArray(catchBodies); - var cStr1 = name !== null ? this.allocStringCached(name) : 0; - var cStr2 = delegateTarget !== null ? this.allocStringCached(delegateTarget) : 0; + var cStr1 = this.allocStringCached(name); + var cStr2 = this.allocStringCached(delegateTarget); var ret = binaryen._BinaryenTry( this.ref, cStr1, body, cArr1, numCatchTags, cArr2, catchBodies.length, cStr2 );