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')],[
|
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 = {
|
package/compiler/codegen.js
CHANGED
@@ -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, '
|
512
|
+
[ Opcodes.call, includeBuiltin(scope, '__Porffor_generator_prototype_return').index ],
|
487
513
|
[ Opcodes.drop ],
|
488
514
|
[ Opcodes.drop ],
|
489
515
|
|
package/package.json
CHANGED