porffor 0.0.0-579ef36 → 0.0.0-7e89c1d

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.
@@ -327,13 +327,15 @@ const concatStrings = (scope, left, right, global, name, assign) => {
327
327
 
328
328
  scope.memory = true;
329
329
 
330
- const pointer = arrays.get(name ?? '$undeclared');
330
+ const getLocalTmp = name => localTmp(scope, name + binaryExpDepth);
331
331
 
332
332
  const rightPointer = localTmp(scope, 'concat_right_pointer', Valtype.i32);
333
333
  const rightLength = localTmp(scope, 'concat_right_length', Valtype.i32);
334
334
  const leftLength = localTmp(scope, 'concat_left_length', Valtype.i32);
335
335
 
336
336
  if (assign) {
337
+ const pointer = arrays.get(name ?? '$undeclared');
338
+
337
339
  return [
338
340
  // setup right
339
341
  ...right,
@@ -384,15 +386,12 @@ const concatStrings = (scope, left, right, global, name, assign) => {
384
386
 
385
387
  const leftPointer = localTmp(scope, 'concat_left_pointer', Valtype.i32);
386
388
 
387
- const newOut = makeArray(scope, {
389
+ // alloc/assign array
390
+ const [ , pointer ] = makeArray(scope, {
388
391
  rawElements: new Array(0)
389
392
  }, global, name, true, 'i16');
390
393
 
391
394
  return [
392
- // setup new/out array
393
- ...newOut,
394
- [ Opcodes.drop ],
395
-
396
395
  // setup left
397
396
  ...left,
398
397
  Opcodes.i32_to_u,
@@ -524,7 +523,7 @@ const truthy = (scope, wasm, type) => {
524
523
  ];
525
524
  };
526
525
 
527
- const performOp = (scope, op, left, right, leftType, rightType, _global = false, _name = '$unspecified', assign = false) => {
526
+ const performOp = (scope, op, left, right, leftType, rightType, _global = false, _name = '$undeclared', assign = false) => {
528
527
  if (op === '||' || op === '&&' || op === '??') {
529
528
  return performLogicOp(scope, op, left, right);
530
529
  }
@@ -569,13 +568,17 @@ const performOp = (scope, op, left, right, leftType, rightType, _global = false,
569
568
  ];
570
569
  };
571
570
 
571
+ let binaryExpDepth = 0;
572
572
  const generateBinaryExp = (scope, decl, _global, _name) => {
573
+ binaryExpDepth++;
574
+
573
575
  const out = [
574
576
  ...performOp(scope, decl.operator, generate(scope, decl.left), generate(scope, decl.right), getNodeType(scope, decl.left), getNodeType(scope, decl.right), _global, _name)
575
577
  ];
576
578
 
577
579
  if (valtype !== 'i32' && ['==', '===', '!=', '!==', '>', '>=', '<', '<='].includes(decl.operator)) out.push(Opcodes.i32_from_u);
578
580
 
581
+ binaryExpDepth--;
579
582
  return out;
580
583
  };
581
584
 
@@ -792,7 +795,7 @@ const generateLiteral = (scope, decl, global, name) => {
792
795
 
793
796
  return makeArray(scope, {
794
797
  rawElements
795
- }, global, name, false, 'i16');
798
+ }, global, name, false, 'i16')[0];
796
799
 
797
800
  default:
798
801
  return todo(`cannot generate literal of type ${typeof decl.value}`);
@@ -941,10 +944,9 @@ const generateCall = (scope, decl, _global, _name) => {
941
944
  if (codeLog) log('codegen', 'cloning unknown dynamic pointer');
942
945
 
943
946
  // register array
944
- makeArray(scope, {
947
+ const [ , pointer ] = makeArray(scope, {
945
948
  rawElements: new Array(0)
946
949
  }, _global, baseName, true, baseType === TYPES.string ? 'i16' : valtype);
947
- pointer = arrays.get(baseName);
948
950
 
949
951
  const [ local, isGlobal ] = lookupName(scope, baseName);
950
952
 
@@ -980,10 +982,9 @@ const generateCall = (scope, decl, _global, _name) => {
980
982
  set: value => arrayUtil.setLength(pointer, value),
981
983
  setI32: value => arrayUtil.setLengthI32(pointer, value)
982
984
  }, generate(scope, decl.arguments[0] ?? DEFAULT_VALUE), protoLocal, (length, itemType) => {
983
- const out = makeArray(scope, {
985
+ return makeArray(scope, {
984
986
  rawElements: new Array(length)
985
987
  }, _global, _name, true, itemType);
986
- return [ out, arrays.get(_name ?? '$undeclared') ];
987
988
  }),
988
989
  [ Opcodes.end ]
989
990
  ];
@@ -1578,12 +1579,12 @@ const makeArray = (scope, decl, global = false, name = '$undeclared', initEmpty
1578
1579
 
1579
1580
  scope.memory = true;
1580
1581
 
1581
- return out;
1582
+ return [ out, pointer ];
1582
1583
  };
1583
1584
 
1584
1585
  let arrays = new Map();
1585
1586
  const generateArray = (scope, decl, global = false, name = '$undeclared', initEmpty = false) => {
1586
- return makeArray(scope, decl, global, name, initEmpty, valtype);
1587
+ return makeArray(scope, decl, global, name, initEmpty, valtype)[0];
1587
1588
  };
1588
1589
 
1589
1590
  export const generateMember = (scope, decl, _global, _name) => {
@@ -1644,10 +1645,9 @@ export const generateMember = (scope, decl, _global, _name) => {
1644
1645
 
1645
1646
  // string
1646
1647
 
1647
- const newOut = makeArray(scope, {
1648
+ const [ newOut, newPointer ] = makeArray(scope, {
1648
1649
  rawElements: new Array(1)
1649
1650
  }, _global, _name, true, 'i16');
1650
- const newPointer = arrays.get(_name ?? '$undeclared');
1651
1651
 
1652
1652
  return [
1653
1653
  // setup new/out array
@@ -1912,10 +1912,9 @@ const internalConstrs = {
1912
1912
 
1913
1913
  // new Array(n)
1914
1914
 
1915
- makeArray(scope, {
1915
+ const [ , pointer ] = makeArray(scope, {
1916
1916
  rawElements: new Array(0)
1917
1917
  }, global, name, true);
1918
- const pointer = arrays.get(name ?? '$undeclared');
1919
1918
 
1920
1919
  const arg = decl.arguments[0] ?? DEFAULT_VALUE;
1921
1920
 
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.0.0-579ef36",
4
+ "version": "0.0.0-7e89c1d",
5
5
  "author": "CanadaHonk",
6
6
  "license": "MIT",
7
7
  "dependencies": {
package/runner/repl.js CHANGED
@@ -56,7 +56,7 @@ const run = async (source, _context, _filename, callback, run = true) => {
56
56
  const { exports, wasm, pages } = await compile(toRun, []);
57
57
  fs.writeFileSync('out.wasm', Buffer.from(wasm));
58
58
 
59
- if (exports.$) {
59
+ if (run && exports.$) {
60
60
  lastMemory = exports.$;
61
61
  lastPages = [...pages.keys()];
62
62
  }