porffor 0.39.2 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compiler/builtins/promise.ts +14 -9
- package/compiler/builtins_precompiled.js +11 -11
- package/compiler/codegen.js +31 -10
- package/compiler/precompile.js +10 -7
- package/compiler/wrap.js +2 -2
- package/package.json +1 -1
- package/runner/index.js +1 -1
- package/runner/repl.js +1 -1
@@ -94,7 +94,7 @@ export const __ecma262_RejectPromise = (promise: any[], reason: any): void => {
|
|
94
94
|
|
95
95
|
export const __Porffor_promise_noop = () => {};
|
96
96
|
|
97
|
-
export const __Porffor_promise_resolve = (
|
97
|
+
export const __Porffor_promise_resolve = (value: any, promise: any): any => {
|
98
98
|
// todo: if value is own promise, reject with typeerror
|
99
99
|
|
100
100
|
if (__ecma262_IsPromise(value)) {
|
@@ -106,7 +106,7 @@ export const __Porffor_promise_resolve = (promise: any, value: any): any => {
|
|
106
106
|
return undefined;
|
107
107
|
};
|
108
108
|
|
109
|
-
export const __Porffor_promise_reject = (
|
109
|
+
export const __Porffor_promise_reject = (reason: any, promise: any): any => {
|
110
110
|
if (__ecma262_IsPromise(reason)) {
|
111
111
|
// todo
|
112
112
|
} else {
|
@@ -181,8 +181,8 @@ export const __Porffor_promise_runJobs = () => {
|
|
181
181
|
|
182
182
|
// hack: cannot share scope so use a global
|
183
183
|
let activePromise: any;
|
184
|
-
export const __Porffor_promise_resolveActive = (value: any) => __Porffor_promise_resolve(
|
185
|
-
export const __Porffor_promise_rejectActive = (reason: any) => __Porffor_promise_reject(
|
184
|
+
export const __Porffor_promise_resolveActive = (value: any) => __Porffor_promise_resolve(value, activePromise);
|
185
|
+
export const __Porffor_promise_rejectActive = (reason: any) => __Porffor_promise_reject(reason, activePromise);
|
186
186
|
|
187
187
|
export const Promise = function (executor: any): void {
|
188
188
|
if (!new.target) throw new TypeError("Constructor Promise requires 'new'");
|
@@ -191,7 +191,13 @@ export const Promise = function (executor: any): void {
|
|
191
191
|
const obj: any[] = __Porffor_promise_create();
|
192
192
|
|
193
193
|
activePromise = obj;
|
194
|
-
|
194
|
+
|
195
|
+
try {
|
196
|
+
executor(__Porffor_promise_resolveActive, __Porffor_promise_rejectActive);
|
197
|
+
} catch (e) {
|
198
|
+
// executor threw, reject promise
|
199
|
+
__ecma262_RejectPromise(obj, e);
|
200
|
+
}
|
195
201
|
|
196
202
|
const pro: Promise = obj;
|
197
203
|
return pro;
|
@@ -200,7 +206,7 @@ export const Promise = function (executor: any): void {
|
|
200
206
|
export const __Promise_resolve = (value: any): Promise => {
|
201
207
|
const obj: any[] = __Porffor_promise_create();
|
202
208
|
|
203
|
-
__Porffor_promise_resolve(
|
209
|
+
__Porffor_promise_resolve(value, obj);
|
204
210
|
|
205
211
|
const pro: Promise = obj;
|
206
212
|
return pro;
|
@@ -209,7 +215,7 @@ export const __Promise_resolve = (value: any): Promise => {
|
|
209
215
|
export const __Promise_reject = (reason: any): Promise => {
|
210
216
|
const obj: any[] = __Porffor_promise_create();
|
211
217
|
|
212
|
-
__Porffor_promise_reject(
|
218
|
+
__Porffor_promise_reject(reason, obj);
|
213
219
|
|
214
220
|
const pro: Promise = obj;
|
215
221
|
return pro;
|
@@ -431,6 +437,5 @@ export const __Porffor_promise_await = (value: any) => {
|
|
431
437
|
if (state == 1) return result;
|
432
438
|
|
433
439
|
// rejected
|
434
|
-
|
435
|
-
throw Error('Uncaught await promise rejection');
|
440
|
+
throw result;
|
436
441
|
};
|
@@ -2053,14 +2053,14 @@ params:[],typedParams:1,returns:[124,127],typedReturns:1,
|
|
2053
2053
|
locals:[],localNames:[],
|
2054
2054
|
};
|
2055
2055
|
this.__Porffor_promise_resolve = {
|
2056
|
-
wasm:(_,{t,builtin})=>[[32,
|
2056
|
+
wasm:(_,{t,builtin})=>[[32,0],[32,1],[16,builtin('__ecma262_IsPromise')],[33,4],[33,5],[32,4],[33,6],[2,127],...t([67,195],()=>[[32,6],[65,195,0],[70],[32,6],[65,195,1],[70],[114],[4,64],[32,5],[252,3],[40,1,0],[12,1],[11]]),[32,5],[252,3],[11],[4,64],[5],[32,2],[32,3],[32,0],[32,1],[16,builtin('__ecma262_FulfillPromise')],[33,4],[26],[11],[68,0],[65,128,1],[15]],
|
2057
2057
|
params:[124,127,124,127],typedParams:1,returns:[124,127],typedReturns:1,
|
2058
|
-
locals:[127,124,127],localNames:["
|
2058
|
+
locals:[127,124,127],localNames:["value","value#type","promise","promise#type","#last_type","#logicinner_tmp","#typeswitch_tmp1"],
|
2059
2059
|
};
|
2060
2060
|
this.__Porffor_promise_reject = {
|
2061
|
-
wasm:(_,{t,builtin})=>[[32,
|
2061
|
+
wasm:(_,{t,builtin})=>[[32,0],[32,1],[16,builtin('__ecma262_IsPromise')],[33,4],[33,5],[32,4],[33,6],[2,127],...t([67,195],()=>[[32,6],[65,195,0],[70],[32,6],[65,195,1],[70],[114],[4,64],[32,5],[252,3],[40,1,0],[12,1],[11]]),[32,5],[252,3],[11],[4,64],[5],[32,2],[32,3],[32,0],[32,1],[16,builtin('__ecma262_RejectPromise')],[33,4],[26],[11],[68,0],[65,128,1],[15]],
|
2062
2062
|
params:[124,127,124,127],typedParams:1,returns:[124,127],typedReturns:1,
|
2063
|
-
locals:[127,124,127],localNames:["
|
2063
|
+
locals:[127,124,127],localNames:["reason","reason#type","promise","promise#type","#last_type","#logicinner_tmp","#typeswitch_tmp1"],
|
2064
2064
|
};
|
2065
2065
|
this.__Porffor_promise_create = {
|
2066
2066
|
wasm:(_,{builtin})=>[[65,192,0],[16,builtin('__Porffor_allocateBytes')],[183],[34,0],[33,3],[68,0],[33,4],[32,3],[252,3],[32,4],[252,3],[65,9],[108],[106],[34,2],[68,0],[34,1],[57,0,4],[32,2],[65,128,1],[58,0,12],[32,0],[33,3],[68,1],[33,4],[32,3],[252,3],[32,4],[252,3],[65,9],[108],[106],[34,2],[68,0],[34,1],[57,0,4],[32,2],[65,1],[58,0,12],[65,128,4],[16,builtin('__Porffor_allocateBytes')],[183],[33,5],[32,0],[33,3],[68,2],[33,4],[32,3],[252,3],[32,4],[252,3],[65,9],[108],[106],[34,2],[32,5],[34,1],[57,0,4],[32,2],[65,208,0],[58,0,12],[65,128,4],[16,builtin('__Porffor_allocateBytes')],[183],[33,6],[32,0],[33,3],[68,3],[33,4],[32,3],[252,3],[32,4],[252,3],[65,9],[108],[106],[34,2],[32,6],[34,1],[57,0,4],[32,2],[65,208,0],[58,0,12],[32,0],[65,208,0],[15]],
|
@@ -2088,33 +2088,33 @@ globalInits:{jobQueue:(_,{allocPage,glbl,loc})=>[...number(allocPage(_,'array: p
|
|
2088
2088
|
table:1,
|
2089
2089
|
};
|
2090
2090
|
this.__Porffor_promise_resolveActive = {
|
2091
|
-
wasm:(_,{glbl,builtin})=>[
|
2091
|
+
wasm:(_,{glbl,builtin})=>[[32,0],[32,1],...glbl(35,'activePromise',124),...glbl(35,'activePromise#type',127),[16,builtin('__Porffor_promise_resolve')],[34,2],[15]],
|
2092
2092
|
params:[124,127],typedParams:1,returns:[124,127],typedReturns:1,
|
2093
2093
|
locals:[127],localNames:["value","value#type","#last_type"],
|
2094
2094
|
globalInits:{jobQueue:(_,{allocPage,glbl,loc})=>[...number(allocPage(_,'array: promise.ts/jobQueue','f64'),124),...glbl(36,'jobQueue',124),...glbl(35,'jobQueue',124),[252,3],[33,loc('#makearray_pointer_tmp',127)],[32,loc('#makearray_pointer_tmp',127)],[65,0],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[68,0],[252,3],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[26]]},
|
2095
2095
|
};
|
2096
2096
|
this.__Porffor_promise_rejectActive = {
|
2097
|
-
wasm:(_,{glbl,builtin})=>[
|
2097
|
+
wasm:(_,{glbl,builtin})=>[[32,0],[32,1],...glbl(35,'activePromise',124),...glbl(35,'activePromise#type',127),[16,builtin('__Porffor_promise_reject')],[34,2],[15]],
|
2098
2098
|
params:[124,127],typedParams:1,returns:[124,127],typedReturns:1,
|
2099
2099
|
locals:[127],localNames:["reason","reason#type","#last_type"],
|
2100
2100
|
globalInits:{jobQueue:(_,{allocPage,glbl,loc})=>[...number(allocPage(_,'array: promise.ts/jobQueue','f64'),124),...glbl(36,'jobQueue',124),...glbl(35,'jobQueue',124),[252,3],[33,loc('#makearray_pointer_tmp',127)],[32,loc('#makearray_pointer_tmp',127)],[65,0],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[68,0],[252,3],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[26]]},
|
2101
2101
|
};
|
2102
2102
|
this.Promise = {
|
2103
|
-
wasm:(_,{t,glbl,builtin,funcRef,internalThrow})=>[[32,0],[33,6],[32,1],[33,7],[2,124],...t([67,195],()=>[[32,7],[65,195,0],[70],[32,7],[65,195,1],[70],[114],[4,64],[32,6],[252,3],[40,1,0],[69],[184],[12,1],[11]]),[32,6],[68,0],[97],[184],[11],[252,3],[4,64],...internalThrow(_,'TypeError',`Constructor Promise requires 'new'`),[11],[32,5],[184],[68,6],[98],[4,64],...internalThrow(_,'TypeError',`Promise executor is not a function`),[11],[16,builtin('__Porffor_promise_create')],[33,9],[34,8],...glbl(36,'activePromise',124),...glbl(35,'activePromise',124),[65,208,0],...glbl(36,'activePromise#type',127),[26],[32,4],[33,22],[32,5],[33,7],[2,124],...t([6],()=>[[32,7],[65,6],[70],[4,64],...funcRef('__Porffor_promise_resolveActive'),[65,6],[33,10],[33,11],...funcRef('__Porffor_promise_rejectActive'),[65,6],[33,12],[33,13],[68,0],[65,128,1],[33,14],[33,15],[68,0],[65,128,1],[33,16],[33,17],[68,0],[65,128,1],[33,18],[33,19],[32,22],[252,3],[34,20],[65,192,0],[108],[65,4],[106],[45,0,128,128,4,"read func lut"],[33,21],[2,124],[2,64],[2,64],[2,64],[2,64],[2,64],[2,64],[32,20],[65,192,0],[108],[47,0,128,128,4,"read func lut"],[14,6,0,1,2,3,4,5,0],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,20],[17,2,0,"no_type_return"],[5],[32,20],[17,0,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,20],[17,2,0],[33,9],[5],[32,20],[17,0,0],[33,9],[11],[11],[12,5],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,20],[17,3,0,"no_type_return"],[5],[32,11],[32,10],[32,20],[17,1,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,20],[17,3,0],[33,9],[5],[32,11],[32,10],[32,20],[17,1,0],[33,9],[11],[11],[12,4],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,20],[17,4,0,"no_type_return"],[5],[32,11],[32,10],[32,13],[32,12],[32,20],[17,2,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,20],[17,4,0],[33,9],[5],[32,11],[32,10],[32,13],[32,12],[32,20],[17,2,0],[33,9],[11],[11],[12,3],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,20],[17,5,0,"no_type_return"],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,20],[17,3,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,20],[17,5,0],[33,9],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,20],[17,3,0],[33,9],[11],[11],[12,2],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,20],[17,6,0,"no_type_return"],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,20],[17,4,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,20],[17,6,0],[33,9],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,20],[17,4,0],[33,9],[11],[11],[12,1],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,19],[32,18],[32,20],[17,7,0,"no_type_return"],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,19],[32,18],[32,20],[17,5,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,19],[32,18],[32,20],[17,7,0],[33,9],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,19],[32,18],[32,20],[17,5,0],[33,9],[11],[11],[11],[12,1],[11]]),...internalThrow(_,'TypeError',`executor is not a function`),[68,0],[11],[26],[32,8],[34,
|
2103
|
+
wasm:(_,{t,glbl,builtin,funcRef,internalThrow})=>[[32,0],[33,6],[32,1],[33,7],[2,124],...t([67,195],()=>[[32,7],[65,195,0],[70],[32,7],[65,195,1],[70],[114],[4,64],[32,6],[252,3],[40,1,0],[69],[184],[12,1],[11]]),[32,6],[68,0],[97],[184],[11],[252,3],[4,64],...internalThrow(_,'TypeError',`Constructor Promise requires 'new'`),[11],[32,5],[184],[68,6],[98],[4,64],...internalThrow(_,'TypeError',`Promise executor is not a function`),[11],[16,builtin('__Porffor_promise_create')],[33,9],[34,8],...glbl(36,'activePromise',124),...glbl(35,'activePromise',124),[65,208,0],...glbl(36,'activePromise#type',127),[26],[6,64],[32,4],[33,22],[32,5],[33,7],[2,124],...t([6],()=>[[32,7],[65,6],[70],[4,64],...funcRef('__Porffor_promise_resolveActive'),[65,6],[33,10],[33,11],...funcRef('__Porffor_promise_rejectActive'),[65,6],[33,12],[33,13],[68,0],[65,128,1],[33,14],[33,15],[68,0],[65,128,1],[33,16],[33,17],[68,0],[65,128,1],[33,18],[33,19],[32,22],[252,3],[34,20],[65,192,0],[108],[65,4],[106],[45,0,128,128,4,"read func lut"],[33,21],[2,124],[2,64],[2,64],[2,64],[2,64],[2,64],[2,64],[32,20],[65,192,0],[108],[47,0,128,128,4,"read func lut"],[14,6,0,1,2,3,4,5,0],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,20],[17,2,0,"no_type_return"],[5],[32,20],[17,0,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,20],[17,2,0],[33,9],[5],[32,20],[17,0,0],[33,9],[11],[11],[12,5],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,20],[17,3,0,"no_type_return"],[5],[32,11],[32,10],[32,20],[17,1,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,20],[17,3,0],[33,9],[5],[32,11],[32,10],[32,20],[17,1,0],[33,9],[11],[11],[12,4],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,20],[17,4,0,"no_type_return"],[5],[32,11],[32,10],[32,13],[32,12],[32,20],[17,2,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,20],[17,4,0],[33,9],[5],[32,11],[32,10],[32,13],[32,12],[32,20],[17,2,0],[33,9],[11],[11],[12,3],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,20],[17,5,0,"no_type_return"],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,20],[17,3,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,20],[17,5,0],[33,9],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,20],[17,3,0],[33,9],[11],[11],[12,2],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,20],[17,6,0,"no_type_return"],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,20],[17,4,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,20],[17,6,0],[33,9],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,20],[17,4,0],[33,9],[11],[11],[12,1],[11],[32,21],[65,1],[113],[4,124],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,19],[32,18],[32,20],[17,7,0,"no_type_return"],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,19],[32,18],[32,20],[17,5,0,"no_type_return"],[11],[5],[32,21],[65,2],[113],[4,124],[68,0],[65,128,1],[68,0],[65,128,1],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,19],[32,18],[32,20],[17,7,0],[33,9],[5],[32,11],[32,10],[32,13],[32,12],[32,15],[32,14],[32,17],[32,16],[32,19],[32,18],[32,20],[17,5,0],[33,9],[11],[11],[11],[12,1],[11]]),...internalThrow(_,'TypeError',`executor is not a function`),[68,0],[11],[26],[7,0],[33,24],[34,23],[33,25],[32,24],[33,26],[32,8],[65,208,0],[32,25],[32,26],[16,builtin('__ecma262_RejectPromise')],[33,9],[26],[11],[32,8],[34,27],[65,36],[15]],
|
2104
2104
|
params:[124,127,124,127,124,127],typedParams:1,returns:[124,127],typedReturns:1,
|
2105
|
-
locals:[124,127,124,127,127,124,127,124,127,124,127,124,127,124,127,127,124,124],localNames:["#newtarget","#newtarget#type","#this","#this#type","executor","executor#type","#logicinner_tmp","#typeswitch_tmp1","obj","#last_type","#indirect_arg0_type","#indirect_arg0_val","#indirect_arg1_type","#indirect_arg1_val","#indirect_arg2_type","#indirect_arg2_val","#indirect_arg3_type","#indirect_arg3_val","#indirect_arg4_type","#indirect_arg4_val","#indirect_func","#indirect_flags","#indirect_callee","pro"],
|
2105
|
+
locals:[124,127,124,127,127,124,127,124,127,124,127,124,127,124,127,127,124,124,127,124,127,124],localNames:["#newtarget","#newtarget#type","#this","#this#type","executor","executor#type","#logicinner_tmp","#typeswitch_tmp1","obj","#last_type","#indirect_arg0_type","#indirect_arg0_val","#indirect_arg1_type","#indirect_arg1_val","#indirect_arg2_type","#indirect_arg2_val","#indirect_arg3_type","#indirect_arg3_val","#indirect_arg4_type","#indirect_arg4_val","#indirect_func","#indirect_flags","#indirect_callee","#catch_tmp1","#catch_tmp1#type","e","e#type","pro"],
|
2106
2106
|
usedTypes:[80,36],
|
2107
2107
|
globalInits:{jobQueue:(_,{allocPage,glbl,loc})=>[...number(allocPage(_,'array: promise.ts/jobQueue','f64'),124),...glbl(36,'jobQueue',124),...glbl(35,'jobQueue',124),[252,3],[33,loc('#makearray_pointer_tmp',127)],[32,loc('#makearray_pointer_tmp',127)],[65,0],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[68,0],[252,3],[54,1,0],[32,loc('#makearray_pointer_tmp',127)],[26]]},
|
2108
2108
|
table:1,constr:1,
|
2109
2109
|
};
|
2110
2110
|
this.__Promise_resolve = {
|
2111
|
-
wasm:(_,{builtin})=>[[16,builtin('__Porffor_promise_create')],[33,3],[
|
2111
|
+
wasm:(_,{builtin})=>[[16,builtin('__Porffor_promise_create')],[33,3],[33,2],[32,0],[32,1],[32,2],[65,208,0],[16,builtin('__Porffor_promise_resolve')],[33,3],[26],[32,2],[34,4],[65,36],[15]],
|
2112
2112
|
params:[124,127],typedParams:1,returns:[124,127],typedReturns:1,
|
2113
2113
|
locals:[124,127,124],localNames:["value","value#type","obj","#last_type","pro"],
|
2114
2114
|
usedTypes:[80,36],
|
2115
2115
|
};
|
2116
2116
|
this.__Promise_reject = {
|
2117
|
-
wasm:(_,{builtin})=>[[16,builtin('__Porffor_promise_create')],[33,3],[
|
2117
|
+
wasm:(_,{builtin})=>[[16,builtin('__Porffor_promise_create')],[33,3],[33,2],[32,0],[32,1],[32,2],[65,208,0],[16,builtin('__Porffor_promise_reject')],[33,3],[26],[32,2],[34,4],[65,36],[15]],
|
2118
2118
|
params:[124,127],typedParams:1,returns:[124,127],typedReturns:1,
|
2119
2119
|
locals:[124,127,124],localNames:["reason","reason#type","obj","#last_type","pro"],
|
2120
2120
|
usedTypes:[80,36],
|
@@ -2221,7 +2221,7 @@ params:[124,127],typedParams:1,returns:[124,127],typedReturns:1,
|
|
2221
2221
|
locals:[127],localNames:["_this","_this#type","#last_type"],
|
2222
2222
|
};
|
2223
2223
|
this.__Porffor_promise_await = {
|
2224
|
-
wasm:(
|
2224
|
+
wasm:()=>[[32,1],[184],[68,36],[98],[4,64],[32,0],[32,1],[15],[11],[32,0],[34,2],[33,4],[68,1],[34,5],[252,3],[65,9],[108],[32,4],[252,3],[106],[34,7],[43,0,4],[32,7],[45,0,12],[33,6],[34,3],[68,0],[97],[4,64],[32,0],[32,1],[15],[11],[32,2],[33,4],[68,0],[34,5],[252,3],[65,9],[108],[32,4],[252,3],[106],[34,7],[43,0,4],[32,7],[45,0,12],[34,6],[33,9],[33,8],[32,3],[68,1],[97],[4,64],[32,8],[32,9],[15],[11],[32,8],[32,9],[8,0]],
|
2225
2225
|
params:[124,127],typedParams:1,returns:[124,127],typedReturns:1,
|
2226
2226
|
locals:[124,124,124,124,127,127,124,127],localNames:["value","value#type","promise","state","#member_obj","#member_prop","#last_type","#loadArray_offset","result","result#type"],
|
2227
2227
|
usedTypes:[80],
|
package/compiler/codegen.js
CHANGED
@@ -404,16 +404,14 @@ const generateReturn = (scope, decl) => {
|
|
404
404
|
const arg = decl.argument ?? DEFAULT_VALUE();
|
405
405
|
|
406
406
|
if (scope.async) {
|
407
|
-
typeUsed(scope, TYPES.promise);
|
408
|
-
|
409
407
|
return [
|
410
408
|
// resolve promise with return value
|
411
|
-
[ Opcodes.local_get, scope.locals['#async_out_promise'].idx ],
|
412
|
-
...number(TYPES.promise, Valtype.i32),
|
413
|
-
|
414
409
|
...generate(scope, arg),
|
415
410
|
...(scope.returnType != null ? [] : getNodeType(scope, arg)),
|
416
411
|
|
412
|
+
[ Opcodes.local_get, scope.locals['#async_out_promise'].idx ],
|
413
|
+
...number(TYPES.promise, Valtype.i32),
|
414
|
+
|
417
415
|
[ Opcodes.call, includeBuiltin(scope, '__Porffor_promise_resolve').index ],
|
418
416
|
[ Opcodes.drop ],
|
419
417
|
[ Opcodes.drop ],
|
@@ -4735,7 +4733,9 @@ const generateLabel = (scope, decl) => {
|
|
4735
4733
|
const generateThrow = (scope, decl) => {
|
4736
4734
|
scope.throws = true;
|
4737
4735
|
|
4738
|
-
|
4736
|
+
let exceptionMode = Prefs.exceptionMode ?? 'stack';
|
4737
|
+
if (globalThis.precompile) exceptionMode = decl.argument.callee != null ? 'lut' : 'stack';
|
4738
|
+
|
4739
4739
|
if (exceptionMode === 'lut') {
|
4740
4740
|
let message = decl.argument.value, constructor = null;
|
4741
4741
|
|
@@ -4761,7 +4761,7 @@ const generateThrow = (scope, decl) => {
|
|
4761
4761
|
|
4762
4762
|
return [
|
4763
4763
|
...number(exceptId, Valtype.i32),
|
4764
|
-
[ Opcodes.throw,
|
4764
|
+
[ Opcodes.throw, 0 ]
|
4765
4765
|
];
|
4766
4766
|
}
|
4767
4767
|
|
@@ -4775,7 +4775,7 @@ const generateThrow = (scope, decl) => {
|
|
4775
4775
|
return [
|
4776
4776
|
...generate(scope, decl.argument),
|
4777
4777
|
...getNodeType(scope, decl.argument),
|
4778
|
-
[ Opcodes.throw,
|
4778
|
+
[ Opcodes.throw, globalThis.precompile ? 1 : 0 ]
|
4779
4779
|
];
|
4780
4780
|
}
|
4781
4781
|
};
|
@@ -6023,7 +6023,9 @@ const generateFunc = (scope, decl) => {
|
|
6023
6023
|
if (decl.async) {
|
6024
6024
|
// make out promise local
|
6025
6025
|
allocVar(func, '#async_out_promise', false, false);
|
6026
|
+
|
6026
6027
|
func.async = true;
|
6028
|
+
typeUsed(func, TYPES.promise);
|
6027
6029
|
}
|
6028
6030
|
|
6029
6031
|
const wasm = prelude.concat(generate(func, body));
|
@@ -6033,10 +6035,29 @@ const generateFunc = (scope, decl) => {
|
|
6033
6035
|
wasm.unshift(
|
6034
6036
|
[ Opcodes.call, includeBuiltin(func, '__Porffor_promise_create').index ],
|
6035
6037
|
[ Opcodes.drop ],
|
6036
|
-
[ Opcodes.local_set, func.locals['#async_out_promise'].idx ]
|
6038
|
+
[ Opcodes.local_set, func.locals['#async_out_promise'].idx ],
|
6039
|
+
|
6040
|
+
// wrap in try for later catch
|
6041
|
+
[ Opcodes.try, Blocktype.void ]
|
6037
6042
|
);
|
6038
6043
|
|
6039
|
-
//
|
6044
|
+
// reject with thrown value if caught error
|
6045
|
+
wasm.push(
|
6046
|
+
[ Opcodes.catch, 0 ],
|
6047
|
+
|
6048
|
+
[ Opcodes.local_get, func.locals['#async_out_promise'].idx ],
|
6049
|
+
...number(TYPES.promise, Valtype.i32),
|
6050
|
+
|
6051
|
+
[ Opcodes.call, includeBuiltin(func, '__Porffor_promise_reject').index ],
|
6052
|
+
[ Opcodes.drop ],
|
6053
|
+
[ Opcodes.drop ],
|
6054
|
+
[ Opcodes.end ],
|
6055
|
+
|
6056
|
+
// return promise at the end of func
|
6057
|
+
[ Opcodes.local_get, func.locals['#async_out_promise'].idx ],
|
6058
|
+
...number(TYPES.promise, Valtype.i32),
|
6059
|
+
[ Opcodes.return ]
|
6060
|
+
);
|
6040
6061
|
}
|
6041
6062
|
|
6042
6063
|
if (name === 'main') {
|
package/compiler/precompile.js
CHANGED
@@ -25,7 +25,7 @@ const compile = async (file, _funcs) => {
|
|
25
25
|
first = source.slice(0, source.indexOf('\n'));
|
26
26
|
}
|
27
27
|
|
28
|
-
let args = ['--module', '--todo-time=compile', '--truthy=no_nan_negative', '--no-rm-unused-types', '--scoped-page-names', '--funsafe-no-unlikely-proto-checks', '--zero-checks=charCodeAt', '--fast-length', '--parse-types', '--opt-types', '--no-passive-data', '--active-data'
|
28
|
+
let args = ['--module', '--todo-time=compile', '--truthy=no_nan_negative', '--no-rm-unused-types', '--scoped-page-names', '--funsafe-no-unlikely-proto-checks', '--zero-checks=charCodeAt', '--fast-length', '--parse-types', '--opt-types', '--no-passive-data', '--active-data'];
|
29
29
|
if (first.startsWith('// @porf')) {
|
30
30
|
args = first.slice('// @porf '.length).split(' ').concat(args);
|
31
31
|
}
|
@@ -152,13 +152,16 @@ const compile = async (file, _funcs) => {
|
|
152
152
|
y.splice(0, 10, 'alloc', pageName, x.pages.get(pageName).type, valtypeBinary);
|
153
153
|
}
|
154
154
|
|
155
|
+
if (n[0] === Opcodes.throw) {
|
156
|
+
if (y[0] === Opcodes.i32_const && n[1] === 0) {
|
157
|
+
const id = read_signedLEB128(y.slice(1));
|
158
|
+
y.splice(0, 10, 'throw', exceptions[id].constructor, exceptions[id].message);
|
155
159
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
wasm.splice(i + 1, 1);
|
160
|
+
// remove throw inst
|
161
|
+
wasm.splice(i + 1, 1);
|
162
|
+
} else {
|
163
|
+
n[1]--;
|
164
|
+
}
|
162
165
|
}
|
163
166
|
}
|
164
167
|
};
|
package/compiler/wrap.js
CHANGED
@@ -316,8 +316,8 @@ ${flags & 0b0001 ? ` get func idx: ${get}
|
|
316
316
|
case TYPES.test262error:
|
317
317
|
case TYPES.__porffor_todoerror: {
|
318
318
|
const obj = porfToJSValue({ memory, funcs, pages }, value, TYPES.object);
|
319
|
-
const
|
320
|
-
|
319
|
+
const err = new (globalThis[TYPE_NAMES[type]] ?? Error)(obj.message);
|
320
|
+
|
321
321
|
err.name = obj.name;
|
322
322
|
err.stack = `${TYPE_NAMES[type]}: ${obj.message}`;
|
323
323
|
return err;
|
package/package.json
CHANGED
package/runner/index.js
CHANGED
package/runner/repl.js
CHANGED