porffor 0.42.9 → 0.43.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.
@@ -4,7 +4,10 @@ export const __Porffor_generator = (values: any[]): __Porffor_generator => {
4
4
  };
5
5
 
6
6
  export const __Porffor_generator_yield = (vals: any[], value: any): void => {
7
- Porffor.array.fastPush(vals, value);
7
+ const len: i32 = Porffor.array.fastPush(vals, value);
8
+
9
+ // add 1 to length so done is not true until after yields
10
+ vals.length = len + 1;
8
11
  };
9
12
 
10
13
  export const __Porffor_generator_prototype_next = (vals: any[]): object => {
@@ -1746,9 +1746,9 @@ locals:[124],localNames:["values","values#type","gen"],
1746
1746
  usedTypes:[80,50],
1747
1747
  }
1748
1748
  this.__Porffor_generator_yield = {
1749
- wasm:(_,{builtin})=>[[32,0],[65,208,0],[32,2],[32,3],[16,builtin('__Porffor_array_fastPush')],[26],[26],[68,0],[65,128,1],[15]],
1749
+ wasm:(_,{builtin})=>[[32,0],[65,208,0],[32,2],[32,3],[16,builtin('__Porffor_array_fastPush')],[33,5],[33,4],[32,0],[252,3],[34,7],[32,4],[68,1],[160],[34,6],[252,3],[54,1,0],[68,0],[65,128,1],[15]],
1750
1750
  params:[124,127,124,127],typedParams:1,returns:[124,127],typedReturns:1,
1751
- locals:[127],localNames:["vals","vals#type","value","value#type","#last_type"],
1751
+ locals:[124,127,124,127],localNames:["vals","vals#type","value","value#type","len","#last_type","__length_setter_tmp","__member_setter_ptr_tmp"],
1752
1752
  usedTypes:[80],
1753
1753
  }
1754
1754
  this.__Porffor_generator_prototype_next = {
@@ -312,6 +312,9 @@ const generate = (scope, decl, global = false, name = undefined, valueUnused = f
312
312
  case 'AwaitExpression':
313
313
  return cacheAst(decl, generateAwait(scope, decl));
314
314
 
315
+ case 'YieldExpression':
316
+ return cacheAst(decl, generateYield(scope, decl));
317
+
315
318
  case 'TemplateLiteral':
316
319
  return cacheAst(decl, generateTemplate(scope, decl));
317
320
 
@@ -451,6 +454,29 @@ const generateIdent = (scope, decl) => {
451
454
  return lookup(decl.name, scope.identFailEarly);
452
455
  };
453
456
 
457
+ const generateYield = (scope, decl) => {
458
+ const arg = decl.argument ?? DEFAULT_VALUE();
459
+
460
+ // just support a single yield like a return for now
461
+ return [
462
+ // return value in generator
463
+ [ Opcodes.local_get, scope.locals['#generator_out'].idx ],
464
+ ...number(TYPES.__porffor_generator, Valtype.i32),
465
+
466
+ ...generate(scope, arg),
467
+ ...getNodeType(scope, arg),
468
+
469
+ [ Opcodes.call, includeBuiltin(scope, '__Porffor_generator_yield').index ],
470
+ [ Opcodes.drop ],
471
+ [ Opcodes.drop ],
472
+
473
+ // return generator
474
+ [ Opcodes.local_get, scope.locals['#generator_out'].idx ],
475
+ ...number(TYPES.__porffor_generator, Valtype.i32),
476
+ [ Opcodes.return ]
477
+ ];
478
+ };
479
+
454
480
  const generateReturn = (scope, decl) => {
455
481
  const arg = decl.argument ?? DEFAULT_VALUE();
456
482
 
@@ -483,7 +509,7 @@ const generateReturn = (scope, decl) => {
483
509
  ...generate(scope, arg),
484
510
  ...getNodeType(scope, arg),
485
511
 
486
- [ Opcodes.call, includeBuiltin(scope, '__Porffor_generator_yield').index ],
512
+ [ Opcodes.call, includeBuiltin(scope, '__Porffor_generator_prototype_return').index ],
487
513
  [ Opcodes.drop ],
488
514
  [ Opcodes.drop ],
489
515
 
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.42.9+d73aec1ce",
4
+ "version": "0.43.0+e3142bb67",
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.42.9+d73aec1ce';
3
+ globalThis.version = '0.43.0+e3142bb67';
4
4
 
5
5
  // deno compat
6
6
  if (typeof process === 'undefined' && typeof Deno !== 'undefined') {