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.
@@ -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 = (promise: any, value: any): any => {
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 = (promise: any, reason: any): any => {
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(activePromise, value);
185
- export const __Porffor_promise_rejectActive = (reason: any) => __Porffor_promise_reject(activePromise, reason);
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
- executor(__Porffor_promise_resolveActive, __Porffor_promise_rejectActive);
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(obj, value);
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(obj, reason);
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
- // todo: throw result instead of fixed error here
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,2],[32,3],[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,0],[32,1],[32,2],[32,3],[16,builtin('__ecma262_FulfillPromise')],[33,4],[26],[11],[68,0],[65,128,1],[15]],
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:["promise","promise#type","value","value#type","#last_type","#logicinner_tmp","#typeswitch_tmp1"],
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,2],[32,3],[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,0],[32,1],[32,2],[32,3],[16,builtin('__ecma262_RejectPromise')],[33,4],[26],[11],[68,0],[65,128,1],[15]],
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:["promise","promise#type","reason","reason#type","#last_type","#logicinner_tmp","#typeswitch_tmp1"],
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})=>[...glbl(35,'activePromise',124),...glbl(35,'activePromise#type',127),[32,0],[32,1],[16,builtin('__Porffor_promise_resolve')],[34,2],[15]],
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})=>[...glbl(35,'activePromise',124),...glbl(35,'activePromise#type',127),[32,0],[32,1],[16,builtin('__Porffor_promise_reject')],[34,2],[15]],
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,23],[65,36],[15]],
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],[34,2],[65,208,0],[32,0],[32,1],[16,builtin('__Porffor_promise_resolve')],[33,3],[26],[32,2],[34,4],[65,36],[15]],
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],[34,2],[65,208,0],[32,0],[32,1],[16,builtin('__Porffor_promise_reject')],[33,3],[26],[32,2],[34,4],[65,36],[15]],
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:(_,{internalThrow})=>[[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],...internalThrow(_,'Error',`Uncaught await promise rejection`),[68,0],[65,128,1],[15]],
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],
@@ -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
- const exceptionMode = Prefs.exceptionMode ?? 'stack';
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, tags[0].idx ]
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, tags[0].idx ]
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
- // todo: wrap in try and reject thrown value once supported
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') {
@@ -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', '--exception-mode=lut'];
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
- if (y[0] === Opcodes.i32_const && n[0] === Opcodes.throw) {
157
- const id = read_signedLEB128(y.slice(1));
158
- y.splice(0, 10, 'throw', exceptions[id].constructor, exceptions[id].message);
159
-
160
- // remove throw inst
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 constr = globalThis[TYPE_NAMES[type]] ?? Error;
320
- const err = new constr(obj.message);
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "porffor",
3
3
  "description": "a basic experimental wip aot optimizing js -> wasm engine/compiler/runtime in js",
4
- "version": "0.39.2+c58905509",
4
+ "version": "0.40.0+4d30ede66",
5
5
  "author": "CanadaHonk",
6
6
  "license": "MIT",
7
7
  "scripts": {},
package/runner/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
- globalThis.version = '0.39.2+c58905509';
3
+ globalThis.version = '0.40.0+4d30ede66';
4
4
 
5
5
  // deno compat
6
6
  if (typeof process === 'undefined' && typeof Deno !== 'undefined') {
package/runner/repl.js CHANGED
@@ -111,7 +111,7 @@ const run = (source, _context, _filename, callback, run = true) => {
111
111
 
112
112
  prev = prev + ';\n' + source.trim();
113
113
  } catch (e) {
114
- console.log('Uncaught', e.stack);
114
+ console.log('Uncaught', e.stack ? e.stack : e);
115
115
  }
116
116
 
117
117
  callback();