skittles 1.6.1 → 1.6.2
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/dist/compiler/codegen/helpers.d.ts.map +1 -1
- package/dist/compiler/codegen/helpers.js +74 -0
- package/dist/compiler/codegen/helpers.js.map +1 -1
- package/dist/compiler/expression-parser.d.ts.map +1 -1
- package/dist/compiler/expression-parser.js +171 -31
- package/dist/compiler/expression-parser.js.map +1 -1
- package/dist/index.js +0 -0
- package/package.json +1 -1
- package/dist/commands/test.d.ts +0 -7
- package/dist/commands/test.d.ts.map +0 -1
- package/dist/commands/test.js +0 -60
- package/dist/commands/test.js.map +0 -1
- package/dist/stdlib/contracts/access/Ownable.d.ts +0 -33
- package/dist/stdlib/contracts/access/Ownable.d.ts.map +0 -1
- package/dist/stdlib/contracts/access/Ownable.js +0 -50
- package/dist/stdlib/contracts/access/Ownable.js.map +0 -1
- package/dist/stdlib/contracts/index.d.ts +0 -22
- package/dist/stdlib/contracts/index.d.ts.map +0 -1
- package/dist/stdlib/contracts/index.js +0 -25
- package/dist/stdlib/contracts/index.js.map +0 -1
- package/dist/stdlib/contracts/security/Pausable.d.ts +0 -27
- package/dist/stdlib/contracts/security/Pausable.d.ts.map +0 -1
- package/dist/stdlib/contracts/security/Pausable.js +0 -41
- package/dist/stdlib/contracts/security/Pausable.js.map +0 -1
- package/dist/stdlib/contracts/security/ReentrancyGuard.d.ts +0 -17
- package/dist/stdlib/contracts/security/ReentrancyGuard.d.ts.map +0 -1
- package/dist/stdlib/contracts/security/ReentrancyGuard.js +0 -25
- package/dist/stdlib/contracts/security/ReentrancyGuard.js.map +0 -1
- package/dist/stdlib/contracts/token/ERC20.d.ts +0 -64
- package/dist/stdlib/contracts/token/ERC20.d.ts.map +0 -1
- package/dist/stdlib/contracts/token/ERC20.js +0 -117
- package/dist/stdlib/contracts/token/ERC20.js.map +0 -1
- package/dist/stdlib/contracts/token/ERC721.d.ts +0 -80
- package/dist/stdlib/contracts/token/ERC721.d.ts.map +0 -1
- package/dist/stdlib/contracts/token/ERC721.js +0 -166
- package/dist/stdlib/contracts/token/ERC721.js.map +0 -1
- package/dist/testing.d.ts +0 -93
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js +0 -143
- package/dist/testing.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/compiler/codegen/helpers.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,MAAM,EAAE,CAAA;CAAE,CAoQ1E,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAoB/B,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,EAChC,WAAW,GAAG,CAAC,MAAM,CAAC,KACrB,OACyE,CAAC;AAO7E,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,EAC/D,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACzC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,IAAI,
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/compiler/codegen/helpers.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,MAAM,EAAE,CAAA;CAAE,CAoQ1E,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAoB/B,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,EAChC,WAAW,GAAG,CAAC,MAAM,CAAC,KACrB,OACyE,CAAC;AAO7E,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,EAC/D,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACzC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,IAAI,CAkPN"}
|
|
@@ -433,6 +433,80 @@ export function emitHelperFunctions(parts, addOrigin, functionOrigins, ancestors
|
|
|
433
433
|
` }`,
|
|
434
434
|
]);
|
|
435
435
|
}
|
|
436
|
+
// Memory-based variants for chained array operations (intermediate results are memory arrays)
|
|
437
|
+
const memEqCheck = useHashEq
|
|
438
|
+
? `keccak256(abi.encodePacked(arr[i])) == keccak256(abi.encodePacked(value))`
|
|
439
|
+
: `arr[i] == value`;
|
|
440
|
+
if (method === "memIncludes" && needsHelper(`_arrMemIncludes_${suffix}`, true)) {
|
|
441
|
+
emitHelper(`_arrMemIncludes_${suffix}`, [
|
|
442
|
+
` function _arrMemIncludes_${suffix}(${solType}[] memory arr, ${solType} ${memAnnotation}value) internal pure returns (bool) {`,
|
|
443
|
+
` for (uint256 i = 0; i < arr.length; i++) {`,
|
|
444
|
+
` if (${memEqCheck}) return true;`,
|
|
445
|
+
` }`,
|
|
446
|
+
` return false;`,
|
|
447
|
+
` }`,
|
|
448
|
+
]);
|
|
449
|
+
}
|
|
450
|
+
if (method === "memIndexOf" && needsHelper(`_arrMemIndexOf_${suffix}`, true)) {
|
|
451
|
+
emitHelper(`_arrMemIndexOf_${suffix}`, [
|
|
452
|
+
` function _arrMemIndexOf_${suffix}(${solType}[] memory arr, ${solType} ${memAnnotation}value) internal pure returns (uint256) {`,
|
|
453
|
+
` for (uint256 i = 0; i < arr.length; i++) {`,
|
|
454
|
+
` if (${memEqCheck}) return i;`,
|
|
455
|
+
` }`,
|
|
456
|
+
` return type(uint256).max;`,
|
|
457
|
+
` }`,
|
|
458
|
+
]);
|
|
459
|
+
}
|
|
460
|
+
if (method === "memLastIndexOf" &&
|
|
461
|
+
needsHelper(`_arrMemLastIndexOf_${suffix}`, true)) {
|
|
462
|
+
emitHelper(`_arrMemLastIndexOf_${suffix}`, [
|
|
463
|
+
` function _arrMemLastIndexOf_${suffix}(${solType}[] memory arr, ${solType} ${memAnnotation}value) internal pure returns (uint256) {`,
|
|
464
|
+
` for (uint256 i = arr.length; i > 0; i--) {`,
|
|
465
|
+
` if (${memEqCheck.replace(/arr\[i\]/g, "arr[i - 1]")}) return i - 1;`,
|
|
466
|
+
` }`,
|
|
467
|
+
` return type(uint256).max;`,
|
|
468
|
+
` }`,
|
|
469
|
+
]);
|
|
470
|
+
}
|
|
471
|
+
if (method === "memReverse" && needsHelper(`_arrMemReverse_${suffix}`, true)) {
|
|
472
|
+
emitHelper(`_arrMemReverse_${suffix}`, [
|
|
473
|
+
` function _arrMemReverse_${suffix}(${solType}[] memory arr) internal pure {`,
|
|
474
|
+
` uint256 len = arr.length;`,
|
|
475
|
+
` for (uint256 i = 0; i < len / 2; i++) {`,
|
|
476
|
+
` ${solType} ${memAnnotation}temp = arr[i];`,
|
|
477
|
+
` arr[i] = arr[len - 1 - i];`,
|
|
478
|
+
` arr[len - 1 - i] = temp;`,
|
|
479
|
+
` }`,
|
|
480
|
+
` }`,
|
|
481
|
+
]);
|
|
482
|
+
}
|
|
483
|
+
if (method === "memSlice" && needsHelper(`_arrMemSlice_${suffix}`, true)) {
|
|
484
|
+
emitHelper(`_arrMemSlice_${suffix}`, [
|
|
485
|
+
` function _arrMemSlice_${suffix}(${solType}[] memory arr, uint256 start, uint256 end) internal pure returns (${solType}[] memory) {`,
|
|
486
|
+
` if (end > arr.length) end = arr.length;`,
|
|
487
|
+
` require(start <= end, "invalid slice range");`,
|
|
488
|
+
` ${solType}[] memory result = new ${solType}[](end - start);`,
|
|
489
|
+
` for (uint256 i = start; i < end; i++) {`,
|
|
490
|
+
` result[i - start] = arr[i];`,
|
|
491
|
+
` }`,
|
|
492
|
+
` return result;`,
|
|
493
|
+
` }`,
|
|
494
|
+
]);
|
|
495
|
+
}
|
|
496
|
+
if (method === "memConcat" && needsHelper(`_arrMemConcat_${suffix}`, true)) {
|
|
497
|
+
emitHelper(`_arrMemConcat_${suffix}`, [
|
|
498
|
+
` function _arrMemConcat_${suffix}(${solType}[] memory arr, ${solType}[] memory other) internal pure returns (${solType}[] memory) {`,
|
|
499
|
+
` ${solType}[] memory result = new ${solType}[](arr.length + other.length);`,
|
|
500
|
+
` for (uint256 i = 0; i < arr.length; i++) {`,
|
|
501
|
+
` result[i] = arr[i];`,
|
|
502
|
+
` }`,
|
|
503
|
+
` for (uint256 i = 0; i < other.length; i++) {`,
|
|
504
|
+
` result[arr.length + i] = other[i];`,
|
|
505
|
+
` }`,
|
|
506
|
+
` return result;`,
|
|
507
|
+
` }`,
|
|
508
|
+
]);
|
|
509
|
+
}
|
|
436
510
|
}
|
|
437
511
|
}
|
|
438
512
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/compiler/codegen/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EACL,MAAM,EACN,MAAM,EACN,MAAM,EACN,UAAU,EACV,MAAM,EACN,MAAM,EACN,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,kEAAkE;AAClE,oEAAoE;AACpE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAmD;IAC7E;QACE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,2EAA2E;YAC3E,+BAA+B;YAC/B,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,2EAA2E;YAC3E,+BAA+B;YAC/B,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,iEAAiE;YACjE,+BAA+B;YAC/B,kCAAkC;YAClC,wBAAwB;YACxB,yBAAyB;YACzB,oBAAoB;YACpB,kCAAkC;YAClC,WAAW;YACX,mBAAmB;YACnB,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,gGAAgG;YAChG,6CAA6C;YAC7C,2CAA2C;YAC3C,6CAA6C;YAC7C,sCAAsC;YACtC,gCAAgC;YAChC,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,gHAAgH;YAChH,6CAA6C;YAC7C,0DAA0D;YAC1D,uDAAuD;YACvD,iDAAiD;YACjD,8CAA8C;YAC9C,WAAW;YACX,gCAAgC;YAChC,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,sFAAsF;YACtF,6CAA6C;YAC7C,2DAA2D;YAC3D,yDAAyD;YACzD,2CAA2C;YAC3C,wBAAwB,MAAM,YAAY,MAAM,KAAK;YACrD,0CAA0C,UAAU,IAAI;YACxD,sBAAsB;YACtB,0CAA0C;YAC1C,eAAe;YACf,WAAW;YACX,gCAAgC;YAChC,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,sFAAsF;YACtF,6CAA6C;YAC7C,2DAA2D;YAC3D,yDAAyD;YACzD,2CAA2C;YAC3C,wBAAwB,MAAM,YAAY,MAAM,KAAK;YACrD,0CAA0C,UAAU,IAAI;YACxD,sBAAsB;YACtB,0CAA0C;YAC1C,eAAe;YACf,WAAW;YACX,gCAAgC;YAChC,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,kGAAkG;YAClG,6CAA6C;YAC7C,mDAAmD;YACnD,iEAAiE;YACjE,4DAA4D;YAC5D,8DAA8D;YAC9D,WAAW;YACX,sBAAsB;YACtB,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,gGAAgG;YAChG,6CAA6C;YAC7C,mDAAmD;YACnD,iEAAiE;YACjE,gEAAgE;YAChE,4DAA4D;YAC5D,uEAAuE;YACvE,WAAW;YACX,sBAAsB;YACtB,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,+EAA+E;YAC/E,6CAA6C;YAC7C,4BAA4B;YAC5B,wCAAwC;YACxC,2DAA2D,UAAU,gBAAgB;YACrF,6DAA6D,UAAU,cAAc;YACrF,uDAAuD;YACvD,iDAAiD;YACjD,8CAA8C;YAC9C,WAAW;YACX,gCAAgC;YAChC,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,2GAA2G;YAC3G,6CAA6C;YAC7C,qDAAqD;YACrD,yCAAyC;YACzC,iCAAiC;YACjC,8EAA8E;YAC9E,gCAAgC;YAChC,+DAA+D;YAC/D,iFAAiF;YACjF,eAAe;YACf,sEAAsE;YACtE,WAAW;YACX,2DAA2D;YAC3D,gCAAgC;YAChC,4BAA4B;YAC5B,8EAA8E;YAC9E,gCAAgC;YAChC,+DAA+D;YAC/D,iFAAiF;YACjF,eAAe;YACf,0BAA0B;YAC1B,2DAA2D;YAC3D,wFAAwF;YACxF,oDAAoD;YACpD,gDAAgD;YAChD,6CAA6C;YAC7C,eAAe;YACf,WAAW;YACX,qEAAqE;YACrE,kGAAkG;YAClG,8CAA8C;YAC9C,uBAAuB;YACvB,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,mFAAmF;YACnF,qCAAqC;YACrC,+BAA+B;YAC/B,yBAAyB;YACzB,qDAAqD;YACrD,kDAAkD;YAClD,8BAA8B;YAC9B,uBAAuB;YACvB,6CAA6C,MAAM,oBAAoB;YACvE,0BAA0B;YAC1B,WAAW;YACX,gCAAgC;YAChC,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,mIAAmI;YACnI,6CAA6C;YAC7C,mDAAmD;YACnD,sDAAsD;YACtD,0CAA0C;YAC1C,+EAA+E;YAC/E,gCAAgC;YAChC,gEAAgE;YAChE,kFAAkF;YAClF,eAAe;YACf,0BAA0B;YAC1B,2GAA2G;YAC3G,8EAA8E;YAC9E,kGAAkG;YAClG,yJAAyJ;YACzJ,wCAAwC;YACxC,eAAe;YACf,WAAW;YACX,qBAAqB;YACrB,OAAO;SACR;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,GAAG,EAAE,CAAC;YACX,sIAAsI;YACtI,6CAA6C;YAC7C,mDAAmD;YACnD,sDAAsD;YACtD,0CAA0C;YAC1C,iCAAiC;YACjC,+EAA+E;YAC/E,gCAAgC;YAChC,gEAAgE;YAChE,kFAAkF;YAClF,eAAe;YACf,uEAAuE;YACvE,WAAW;YACX,0CAA0C;YAC1C,iIAAiI;YACjI,0BAA0B;YAC1B,sDAAsD;YACtD,iCAAiC;YACjC,8DAA8D;YAC9D,+BAA+B;YAC/B,oEAAoE;YACpE,sFAAsF;YACtF,mBAAmB;YACnB,eAAe;YACf,0BAA0B;YAC1B,kGAAkG;YAClG,0CAA0C;YAC1C,sBAAsB;YACtB,8CAA8C;YAC9C,sBAAsB;YACtB,eAAe;YACf,WAAW;YACX,gCAAgC;YAChC,OAAO;SACR;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IAC1C,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAAgC,EAChC,SAAsB,EACb,EAAE,CACX,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7E,SAAS,eAAe,CAAC,MAAc;IACrC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAe,EACf,SAA+D,EAC/D,eAAyC,EACzC,SAAsB;IAEtB,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,IAAa,EAAW,EAAE,CAC3D,IAAI,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAEnE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAe,EAAQ,EAAE;QACzD,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,0DAA0D;IAC1D,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC1D,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,oEAAoE;IACpE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACvD,MAAM,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,SAAS,GACb,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC;YAClC,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;YACpC,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,OAAO,CAAC;QAC9D,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,SAAS;YACvB,CAAC,CAAC,2EAA2E;YAC7E,CAAC,CAAC,iBAAiB,CAAC;QAEtB,IAAI,MAAM,KAAK,UAAU,IAAI,WAAW,CAAC,gBAAgB,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACzE,UAAU,CAAC,gBAAgB,MAAM,EAAE,EAAE;gBACnC,6BAA6B,MAAM,IAAI,OAAO,mBAAmB,OAAO,IAAI,aAAa,uCAAuC;gBAChI,oDAAoD;gBACpD,mBAAmB,OAAO,gBAAgB;gBAC1C,WAAW;gBACX,uBAAuB;gBACvB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,IAAI,WAAW,CAAC,eAAe,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACvE,UAAU,CAAC,eAAe,MAAM,EAAE,EAAE;gBAClC,4BAA4B,MAAM,IAAI,OAAO,mBAAmB,OAAO,IAAI,aAAa,0CAA0C;gBAClI,oDAAoD;gBACpD,mBAAmB,OAAO,aAAa;gBACvC,WAAW;gBACX,mCAAmC;gBACnC,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IACE,MAAM,KAAK,aAAa;YACxB,WAAW,CAAC,mBAAmB,MAAM,EAAE,EAAE,IAAI,CAAC,EAC9C,CAAC;YACD,UAAU,CAAC,mBAAmB,MAAM,EAAE,EAAE;gBACtC,gCAAgC,MAAM,IAAI,OAAO,mBAAmB,OAAO,IAAI,aAAa,0CAA0C;gBACtI,oDAAoD;gBACpD,mBAAmB,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,iBAAiB;gBAC9E,WAAW;gBACX,mCAAmC;gBACnC,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,cAAc,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACrE,UAAU,CAAC,cAAc,MAAM,EAAE,EAAE;gBACjC,2BAA2B,MAAM,IAAI,OAAO,mBAAmB,OAAO,IAAI,aAAa,kCAAkC;gBACzH,oDAAoD;gBACpD,mBAAmB,OAAO,KAAK;gBAC/B,+CAA+C;gBAC/C,4BAA4B;gBAC5B,8BAA8B;gBAC9B,eAAe;gBACf,WAAW;gBACX,uBAAuB;gBACvB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,IAAI,WAAW,CAAC,eAAe,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACvE,UAAU,CAAC,eAAe,MAAM,EAAE,EAAE;gBAClC,4BAA4B,MAAM,IAAI,OAAO,4BAA4B;gBACzE,mCAAmC;gBACnC,iDAAiD;gBACjD,eAAe,OAAO,IAAI,aAAa,gBAAgB;gBACvD,wCAAwC;gBACxC,sCAAsC;gBACtC,WAAW;gBACX,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,cAAc,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACrE,UAAU,CAAC,cAAc,MAAM,EAAE,EAAE;gBACjC,2BAA2B,MAAM,IAAI,OAAO,gEAAgE;gBAC5G,wCAAwC,uBAAuB,KAAK;gBACpE,4CAA4C;gBAC5C,iDAAiD;gBACjD,wCAAwC;gBACxC,kEAAkE;gBAClE,wCAAwC;gBACxC,WAAW;gBACX,iDAAiD;gBACjD,wBAAwB;gBACxB,WAAW;gBACX,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,OAAO,IAAI,WAAW,CAAC,aAAa,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACnE,UAAU,CAAC,aAAa,MAAM,EAAE,EAAE;gBAChC,0BAA0B,MAAM,IAAI,OAAO,sEAAsE,OAAO,cAAc;gBACtI,iDAAiD;gBACjD,uDAAuD;gBACvD,WAAW,OAAO,0BAA0B,OAAO,kBAAkB;gBACrE,iDAAiD;gBACjD,yCAAyC;gBACzC,WAAW;gBACX,wBAAwB;gBACxB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,cAAc,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACrE,UAAU,CAAC,cAAc,MAAM,EAAE,EAAE;gBACjC,2BAA2B,MAAM,IAAI,OAAO,mBAAmB,OAAO,2CAA2C,OAAO,cAAc;gBACtI,WAAW,OAAO,0BAA0B,OAAO,gCAAgC;gBACnF,oDAAoD;gBACpD,iCAAiC;gBACjC,WAAW;gBACX,sDAAsD;gBACtD,gDAAgD;gBAChD,WAAW;gBACX,wBAAwB;gBACxB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,cAAc,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACrE,UAAU,CAAC,cAAc,MAAM,EAAE,EAAE;gBACjC,2BAA2B,MAAM,IAAI,OAAO,gBAAgB,OAAO,uCAAuC,OAAO,cAAc;gBAC/H,WAAW,OAAO,0BAA0B,OAAO,0BAA0B;gBAC7E,kDAAkD;gBAClD,+BAA+B;gBAC/B,WAAW;gBACX,kDAAkD;gBAClD,0CAA0C;gBAC1C,WAAW;gBACX,wBAAwB;gBACxB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/compiler/codegen/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression-parser.d.ts","sourceRoot":"","sources":["../../src/compiler/expression-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EACL,KAAK,UAAU,EAMhB,MAAM,mBAAmB,CAAC;AA6C3B,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"expression-parser.d.ts","sourceRoot":"","sources":["../../src/compiler/expression-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EACL,KAAK,UAAU,EAMhB,MAAM,mBAAmB,CAAC;AA6C3B,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,UAAU,CAsoC/D;AAigBD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO,CAalE"}
|
|
@@ -201,13 +201,31 @@ export function parseExpression(node) {
|
|
|
201
201
|
right: defaultExpr,
|
|
202
202
|
};
|
|
203
203
|
}
|
|
204
|
-
// Array method calls on storage arrays
|
|
204
|
+
// Array method calls on storage arrays and chained array calls
|
|
205
205
|
if (ts.isPropertyAccessExpression(node.expression) &&
|
|
206
206
|
isArrayLikeReceiver(node.expression.expression)) {
|
|
207
207
|
const methodName = node.expression.name.text;
|
|
208
|
-
const
|
|
208
|
+
const isChainedCall = ts.isCallExpression(node.expression.expression);
|
|
209
|
+
// Parse receiver first so chained helpers are generated before we resolve types
|
|
209
210
|
const receiverExpr = parseExpression(node.expression.expression);
|
|
211
|
+
let elementType = resolveArrayElementType(node.expression.expression);
|
|
212
|
+
if (elementType === undefined && isChainedCall) {
|
|
213
|
+
elementType = resolveChainedElementType(receiverExpr);
|
|
214
|
+
}
|
|
210
215
|
const typeSuffix = getArrayHelperSuffix(elementType);
|
|
216
|
+
// For chained calls, cache the intermediate array result in a local variable
|
|
217
|
+
// to avoid re-executing the inner helper on every access.
|
|
218
|
+
let effectiveArrayExpr = receiverExpr;
|
|
219
|
+
let chainCacheStmts = [];
|
|
220
|
+
if (isChainedCall) {
|
|
221
|
+
const cacheName = "__sk_arr";
|
|
222
|
+
const arrType = {
|
|
223
|
+
kind: SkittlesTypeKind.Array,
|
|
224
|
+
valueType: elementType ?? UINT256_TYPE,
|
|
225
|
+
};
|
|
226
|
+
chainCacheStmts = [mkVarDecl(cacheName, arrType, receiverExpr)];
|
|
227
|
+
effectiveArrayExpr = mkId(cacheName);
|
|
228
|
+
}
|
|
211
229
|
const NON_COMPARABLE_KINDS = new Set([
|
|
212
230
|
SkittlesTypeKind.Struct,
|
|
213
231
|
SkittlesTypeKind.Array,
|
|
@@ -215,44 +233,50 @@ export function parseExpression(node) {
|
|
|
215
233
|
SkittlesTypeKind.Mapping,
|
|
216
234
|
]);
|
|
217
235
|
const isNonComparable = elementType != null && NON_COMPARABLE_KINDS.has(elementType.kind);
|
|
218
|
-
// includes(value) → _arrIncludes_T(arr, value)
|
|
236
|
+
// includes(value) → _arrIncludes_T(arr, value) or _arrMemIncludes_T for chained calls
|
|
219
237
|
if (methodName === "includes" && node.arguments.length === 1) {
|
|
220
238
|
if (isNonComparable)
|
|
221
239
|
throw new Error(`Unsupported: .includes() on ${typeSuffix}[] arrays. Element type does not support equality in Solidity. Use .some() with a callback instead.`);
|
|
222
|
-
|
|
240
|
+
const helperPrefix = isChainedCall ? "memIncludes" : "includes";
|
|
241
|
+
const helperName = isChainedCall ? `_arrMemIncludes_${typeSuffix}` : `_arrIncludes_${typeSuffix}`;
|
|
242
|
+
ctx.neededArrayHelpers.add(`${helperPrefix}_${typeSuffix}`);
|
|
223
243
|
return {
|
|
224
244
|
kind: "call",
|
|
225
245
|
callee: {
|
|
226
246
|
kind: "identifier",
|
|
227
|
-
name:
|
|
247
|
+
name: helperName,
|
|
228
248
|
},
|
|
229
249
|
args: [receiverExpr, parseExpression(node.arguments[0])],
|
|
230
250
|
};
|
|
231
251
|
}
|
|
232
|
-
// indexOf(value) → _arrIndexOf_T(arr, value)
|
|
252
|
+
// indexOf(value) → _arrIndexOf_T(arr, value) or _arrMemIndexOf_T for chained calls
|
|
233
253
|
if (methodName === "indexOf" && node.arguments.length === 1) {
|
|
234
254
|
if (isNonComparable)
|
|
235
255
|
throw new Error(`Unsupported: .indexOf() on ${typeSuffix}[] arrays. Element type does not support equality in Solidity. Use .findIndex() with a callback instead.`);
|
|
236
|
-
|
|
256
|
+
const helperPrefix = isChainedCall ? "memIndexOf" : "indexOf";
|
|
257
|
+
const helperName = isChainedCall ? `_arrMemIndexOf_${typeSuffix}` : `_arrIndexOf_${typeSuffix}`;
|
|
258
|
+
ctx.neededArrayHelpers.add(`${helperPrefix}_${typeSuffix}`);
|
|
237
259
|
return {
|
|
238
260
|
kind: "call",
|
|
239
261
|
callee: {
|
|
240
262
|
kind: "identifier",
|
|
241
|
-
name:
|
|
263
|
+
name: helperName,
|
|
242
264
|
},
|
|
243
265
|
args: [receiverExpr, parseExpression(node.arguments[0])],
|
|
244
266
|
};
|
|
245
267
|
}
|
|
246
|
-
// lastIndexOf(value) → _arrLastIndexOf_T(arr, value)
|
|
268
|
+
// lastIndexOf(value) → _arrLastIndexOf_T(arr, value) or _arrMemLastIndexOf_T for chained calls
|
|
247
269
|
if (methodName === "lastIndexOf" && node.arguments.length === 1) {
|
|
248
270
|
if (isNonComparable)
|
|
249
271
|
throw new Error(`Unsupported: .lastIndexOf() on ${typeSuffix}[] arrays. Element type does not support equality in Solidity.`);
|
|
250
|
-
|
|
272
|
+
const helperPrefix = isChainedCall ? "memLastIndexOf" : "lastIndexOf";
|
|
273
|
+
const helperName = isChainedCall ? `_arrMemLastIndexOf_${typeSuffix}` : `_arrLastIndexOf_${typeSuffix}`;
|
|
274
|
+
ctx.neededArrayHelpers.add(`${helperPrefix}_${typeSuffix}`);
|
|
251
275
|
return {
|
|
252
276
|
kind: "call",
|
|
253
277
|
callee: {
|
|
254
278
|
kind: "identifier",
|
|
255
|
-
name:
|
|
279
|
+
name: helperName,
|
|
256
280
|
},
|
|
257
281
|
args: [receiverExpr, parseExpression(node.arguments[0])],
|
|
258
282
|
};
|
|
@@ -272,7 +296,7 @@ export function parseExpression(node) {
|
|
|
272
296
|
}
|
|
273
297
|
return mkElem(receiverExpr, parseExpression(indexArg));
|
|
274
298
|
}
|
|
275
|
-
// slice(start?, end?) → _arrSlice_T(arr, start, end)
|
|
299
|
+
// slice(start?, end?) → _arrSlice_T(arr, start, end) or _arrMemSlice_T for chained calls
|
|
276
300
|
if (methodName === "slice") {
|
|
277
301
|
if (node.arguments.length > 2)
|
|
278
302
|
throw new Error("Array .slice() accepts at most 2 arguments: .slice(start?, end?).");
|
|
@@ -282,7 +306,9 @@ export function parseExpression(node) {
|
|
|
282
306
|
throw new Error("Array .slice() does not support negative indices. Solidity uses uint256 for array indices.");
|
|
283
307
|
}
|
|
284
308
|
}
|
|
285
|
-
|
|
309
|
+
const sliceHelperPrefix = isChainedCall ? "memSlice" : "slice";
|
|
310
|
+
const sliceHelperName = isChainedCall ? `_arrMemSlice_${typeSuffix}` : `_arrSlice_${typeSuffix}`;
|
|
311
|
+
ctx.neededArrayHelpers.add(`${sliceHelperPrefix}_${typeSuffix}`);
|
|
286
312
|
const startArg = node.arguments.length >= 1
|
|
287
313
|
? parseExpression(node.arguments[0])
|
|
288
314
|
: mkNum("0");
|
|
@@ -293,15 +319,16 @@ export function parseExpression(node) {
|
|
|
293
319
|
kind: "call",
|
|
294
320
|
callee: {
|
|
295
321
|
kind: "identifier",
|
|
296
|
-
name:
|
|
322
|
+
name: sliceHelperName,
|
|
297
323
|
},
|
|
298
324
|
args: [receiverExpr, startArg, endArg],
|
|
299
325
|
};
|
|
300
326
|
}
|
|
301
|
-
// concat(other) → _arrConcat_T(arr, other)
|
|
327
|
+
// concat(other) → _arrConcat_T(arr, other) or _arrMemConcat_T for chained calls
|
|
302
328
|
if (methodName === "concat" && node.arguments.length === 1) {
|
|
303
329
|
const otherArg = node.arguments[0];
|
|
304
|
-
if (
|
|
330
|
+
if (!isChainedCall &&
|
|
331
|
+
ts.isPropertyAccessExpression(otherArg) &&
|
|
305
332
|
otherArg.expression.kind === ts.SyntaxKind.ThisKeyword) {
|
|
306
333
|
const otherType = ctx.currentVarTypes.get(otherArg.name.text);
|
|
307
334
|
if (otherType?.kind === SkittlesTypeKind.Array) {
|
|
@@ -309,12 +336,14 @@ export function parseExpression(node) {
|
|
|
309
336
|
"Use .slice() to copy to memory first: this.a.concat(this.b.slice(0, this.b.length)).");
|
|
310
337
|
}
|
|
311
338
|
}
|
|
312
|
-
|
|
339
|
+
const concatHelperPrefix = isChainedCall ? "memConcat" : "concat";
|
|
340
|
+
const concatHelperName = isChainedCall ? `_arrMemConcat_${typeSuffix}` : `_arrConcat_${typeSuffix}`;
|
|
341
|
+
ctx.neededArrayHelpers.add(`${concatHelperPrefix}_${typeSuffix}`);
|
|
313
342
|
return {
|
|
314
343
|
kind: "call",
|
|
315
344
|
callee: {
|
|
316
345
|
kind: "identifier",
|
|
317
|
-
name:
|
|
346
|
+
name: concatHelperName,
|
|
318
347
|
},
|
|
319
348
|
args: [receiverExpr, parseExpression(otherArg)],
|
|
320
349
|
};
|
|
@@ -371,7 +400,11 @@ export function parseExpression(node) {
|
|
|
371
400
|
args: [],
|
|
372
401
|
});
|
|
373
402
|
if (methodName === "filter" && condExpr) {
|
|
374
|
-
const helper = generateFilterHelper(
|
|
403
|
+
const helper = generateFilterHelper(effectiveArrayExpr, elementType, callback.paramName, condExpr);
|
|
404
|
+
if (isChainedCall) {
|
|
405
|
+
helper.body = [...chainCacheStmts, ...helper.body];
|
|
406
|
+
helper.stateMutability = inferStateMutability(helper.body, ctx.currentVarTypes);
|
|
407
|
+
}
|
|
375
408
|
ctx.generatedArrayFunctions.push(helper);
|
|
376
409
|
return mkHelperCall(helper.name);
|
|
377
410
|
}
|
|
@@ -380,27 +413,47 @@ export function parseExpression(node) {
|
|
|
380
413
|
if (callback.paramName && elementType)
|
|
381
414
|
callbackEnv.set(callback.paramName, elementType);
|
|
382
415
|
const resultType = inferType(condExpr, callbackEnv);
|
|
383
|
-
const helper = generateMapHelper(
|
|
416
|
+
const helper = generateMapHelper(effectiveArrayExpr, elementType, callback.paramName, condExpr, resultType);
|
|
417
|
+
if (isChainedCall) {
|
|
418
|
+
helper.body = [...chainCacheStmts, ...helper.body];
|
|
419
|
+
helper.stateMutability = inferStateMutability(helper.body, ctx.currentVarTypes);
|
|
420
|
+
}
|
|
384
421
|
ctx.generatedArrayFunctions.push(helper);
|
|
385
422
|
return mkHelperCall(helper.name);
|
|
386
423
|
}
|
|
387
424
|
if (methodName === "some" && condExpr) {
|
|
388
|
-
const helper = generateSomeEveryHelper("some",
|
|
425
|
+
const helper = generateSomeEveryHelper("some", effectiveArrayExpr, elementType, callback.paramName, condExpr);
|
|
426
|
+
if (isChainedCall) {
|
|
427
|
+
helper.body = [...chainCacheStmts, ...helper.body];
|
|
428
|
+
helper.stateMutability = inferStateMutability(helper.body, ctx.currentVarTypes);
|
|
429
|
+
}
|
|
389
430
|
ctx.generatedArrayFunctions.push(helper);
|
|
390
431
|
return mkHelperCall(helper.name);
|
|
391
432
|
}
|
|
392
433
|
if (methodName === "every" && condExpr) {
|
|
393
|
-
const helper = generateSomeEveryHelper("every",
|
|
434
|
+
const helper = generateSomeEveryHelper("every", effectiveArrayExpr, elementType, callback.paramName, condExpr);
|
|
435
|
+
if (isChainedCall) {
|
|
436
|
+
helper.body = [...chainCacheStmts, ...helper.body];
|
|
437
|
+
helper.stateMutability = inferStateMutability(helper.body, ctx.currentVarTypes);
|
|
438
|
+
}
|
|
394
439
|
ctx.generatedArrayFunctions.push(helper);
|
|
395
440
|
return mkHelperCall(helper.name);
|
|
396
441
|
}
|
|
397
442
|
if (methodName === "find" && condExpr) {
|
|
398
|
-
const helper = generateFindHelper(
|
|
443
|
+
const helper = generateFindHelper(effectiveArrayExpr, elementType, callback.paramName, condExpr);
|
|
444
|
+
if (isChainedCall) {
|
|
445
|
+
helper.body = [...chainCacheStmts, ...helper.body];
|
|
446
|
+
helper.stateMutability = inferStateMutability(helper.body, ctx.currentVarTypes);
|
|
447
|
+
}
|
|
399
448
|
ctx.generatedArrayFunctions.push(helper);
|
|
400
449
|
return mkHelperCall(helper.name);
|
|
401
450
|
}
|
|
402
451
|
if (methodName === "findIndex" && condExpr) {
|
|
403
|
-
const helper = generateFindIndexHelper(
|
|
452
|
+
const helper = generateFindIndexHelper(effectiveArrayExpr, elementType, callback.paramName, condExpr);
|
|
453
|
+
if (isChainedCall) {
|
|
454
|
+
helper.body = [...chainCacheStmts, ...helper.body];
|
|
455
|
+
helper.stateMutability = inferStateMutability(helper.body, ctx.currentVarTypes);
|
|
456
|
+
}
|
|
404
457
|
ctx.generatedArrayFunctions.push(helper);
|
|
405
458
|
return mkHelperCall(helper.name);
|
|
406
459
|
}
|
|
@@ -411,18 +464,23 @@ export function parseExpression(node) {
|
|
|
411
464
|
throw new Error("Array .reduce() requires an initial value as the second argument.");
|
|
412
465
|
const initialValue = parseExpression(node.arguments[1]);
|
|
413
466
|
const accType = inferType(initialValue, ctx.currentVarTypes);
|
|
414
|
-
const helper = generateReduceHelper(
|
|
467
|
+
const helper = generateReduceHelper(effectiveArrayExpr, elementType, callback.paramName, callback.secondParamName, condExpr, initialValue, accType);
|
|
468
|
+
if (isChainedCall) {
|
|
469
|
+
helper.body = [...chainCacheStmts, ...helper.body];
|
|
470
|
+
helper.stateMutability = inferStateMutability(helper.body, ctx.currentVarTypes);
|
|
471
|
+
}
|
|
415
472
|
ctx.generatedArrayFunctions.push(helper);
|
|
416
473
|
return mkHelperCall(helper.name);
|
|
417
474
|
}
|
|
418
|
-
// sort: in-place insertion sort using comparator (statement-only
|
|
475
|
+
// sort: in-place insertion sort using comparator (statement-only for storage, returns array when chained)
|
|
419
476
|
if (methodName === "sort" && condExpr) {
|
|
420
477
|
if (!callback.secondParamName)
|
|
421
478
|
throw new Error("Array .sort() callback must have two parameters: (a, b) => expression.");
|
|
422
479
|
if (callback.paramName === callback.secondParamName) {
|
|
423
480
|
throw new Error("Array .sort() callback parameters must have distinct names, e.g. (a, b) => expression. Using the same identifier for both parameters would generate invalid Solidity.");
|
|
424
481
|
}
|
|
425
|
-
|
|
482
|
+
// Only enforce statement-only for non-chained (storage array) usage
|
|
483
|
+
if (!isChainedCall && node.parent && !ts.isExpressionStatement(node.parent)) {
|
|
426
484
|
throw new Error("Array .sort() modifies the array in place and does not return a value. Use it as a standalone statement.");
|
|
427
485
|
}
|
|
428
486
|
const sortElemKind = elementType?.kind;
|
|
@@ -451,7 +509,17 @@ export function parseExpression(node) {
|
|
|
451
509
|
comparatorKind !== "int256") {
|
|
452
510
|
throw new Error(`Array .sort() comparator must return an int256 or uint256. Got ${comparatorKind} instead.`);
|
|
453
511
|
}
|
|
454
|
-
const helper = generateSortHelper(
|
|
512
|
+
const helper = generateSortHelper(effectiveArrayExpr, elementType, callback.paramName, callback.secondParamName, condExpr);
|
|
513
|
+
// For chained calls, cache the source array and return it after sorting
|
|
514
|
+
if (isChainedCall) {
|
|
515
|
+
const arrType = {
|
|
516
|
+
kind: SkittlesTypeKind.Array,
|
|
517
|
+
valueType: elementType ?? UINT256_TYPE,
|
|
518
|
+
};
|
|
519
|
+
helper.body = [...chainCacheStmts, ...helper.body, mkReturn(mkId("__sk_arr"))];
|
|
520
|
+
helper.returnType = arrType;
|
|
521
|
+
helper.stateMutability = inferStateMutability(helper.body, ctx.currentVarTypes);
|
|
522
|
+
}
|
|
455
523
|
ctx.generatedArrayFunctions.push(helper);
|
|
456
524
|
return mkHelperCall(helper.name);
|
|
457
525
|
}
|
|
@@ -460,7 +528,7 @@ export function parseExpression(node) {
|
|
|
460
528
|
const helperName = `_forEach_${ctx.arrayMethodCounter++}`;
|
|
461
529
|
const elemType = elementType ?? UINT256_TYPE;
|
|
462
530
|
const forBody = [
|
|
463
|
-
mkVarDecl(callback.paramName, elemType, mkElem(
|
|
531
|
+
mkVarDecl(callback.paramName, elemType, mkElem(effectiveArrayExpr, mkId("__sk_i"))),
|
|
464
532
|
];
|
|
465
533
|
if (callback.bodyExpr) {
|
|
466
534
|
forBody.push(mkExprStmt(callback.bodyExpr));
|
|
@@ -469,7 +537,8 @@ export function parseExpression(node) {
|
|
|
469
537
|
forBody.push(...callback.bodyStmts);
|
|
470
538
|
}
|
|
471
539
|
const body = [
|
|
472
|
-
|
|
540
|
+
...(isChainedCall ? chainCacheStmts : []),
|
|
541
|
+
mkForLoop("__sk_i", effectiveArrayExpr, forBody),
|
|
473
542
|
];
|
|
474
543
|
const helperMutability = inferStateMutability(body, ctx.currentVarTypes);
|
|
475
544
|
const helper = {
|
|
@@ -503,9 +572,43 @@ export function parseExpression(node) {
|
|
|
503
572
|
}
|
|
504
573
|
// reverse() → _arrReverse_T(arr)
|
|
505
574
|
if (methodName === "reverse" && node.arguments.length === 0) {
|
|
506
|
-
|
|
575
|
+
// Only enforce statement-only for non-chained (storage array) usage
|
|
576
|
+
if (!isChainedCall && node.parent && !ts.isExpressionStatement(node.parent)) {
|
|
507
577
|
throw new Error("Array .reverse() modifies the array in place and does not return a value. Use it as a standalone statement.");
|
|
508
578
|
}
|
|
579
|
+
if (isChainedCall) {
|
|
580
|
+
// For chained calls, generate a helper that caches the array, reverses it, and returns it
|
|
581
|
+
const helperName = `_reverse_${ctx.arrayMethodCounter++}`;
|
|
582
|
+
const elemType = elementType ?? UINT256_TYPE;
|
|
583
|
+
const arrType = { kind: SkittlesTypeKind.Array, valueType: elemType };
|
|
584
|
+
ctx.neededArrayHelpers.add(`memReverse_${typeSuffix}`);
|
|
585
|
+
const body = [
|
|
586
|
+
...chainCacheStmts,
|
|
587
|
+
mkExprStmt({
|
|
588
|
+
kind: "call",
|
|
589
|
+
callee: { kind: "identifier", name: `_arrMemReverse_${typeSuffix}` },
|
|
590
|
+
args: [effectiveArrayExpr],
|
|
591
|
+
}),
|
|
592
|
+
mkReturn(effectiveArrayExpr),
|
|
593
|
+
];
|
|
594
|
+
const helper = {
|
|
595
|
+
name: helperName,
|
|
596
|
+
parameters: [],
|
|
597
|
+
returnType: arrType,
|
|
598
|
+
visibility: "private",
|
|
599
|
+
stateMutability: inferStateMutability(body, ctx.currentVarTypes),
|
|
600
|
+
isVirtual: false,
|
|
601
|
+
isOverride: false,
|
|
602
|
+
body,
|
|
603
|
+
};
|
|
604
|
+
ctx.generatedArrayFunctions.push(helper);
|
|
605
|
+
const mkHelperCall = (name) => ({
|
|
606
|
+
kind: "call",
|
|
607
|
+
callee: mkProp(mkId("this"), name),
|
|
608
|
+
args: [],
|
|
609
|
+
});
|
|
610
|
+
return mkHelperCall(helperName);
|
|
611
|
+
}
|
|
509
612
|
ctx.neededArrayHelpers.add(`reverse_${typeSuffix}`);
|
|
510
613
|
return {
|
|
511
614
|
kind: "call",
|
|
@@ -816,6 +919,8 @@ export function parseExpression(node) {
|
|
|
816
919
|
}
|
|
817
920
|
throw new Error(`Unsupported expression: ${ts.SyntaxKind[node.kind]}`);
|
|
818
921
|
}
|
|
922
|
+
// Methods that return a new array (used for chaining detection)
|
|
923
|
+
const ARRAY_RETURNING_METHODS = new Set(["filter", "map", "slice", "concat", "sort", "reverse"]);
|
|
819
924
|
function isArrayLikeReceiver(node) {
|
|
820
925
|
if (ts.isPropertyAccessExpression(node) &&
|
|
821
926
|
node.expression.kind === ts.SyntaxKind.ThisKeyword) {
|
|
@@ -823,6 +928,14 @@ function isArrayLikeReceiver(node) {
|
|
|
823
928
|
const type = ctx.currentVarTypes.get(name);
|
|
824
929
|
return type?.kind === SkittlesTypeKind.Array;
|
|
825
930
|
}
|
|
931
|
+
// Chained array method call: e.g., this.values.filter(fn) or this.values.filter(fn).map(fn2)
|
|
932
|
+
if (ts.isCallExpression(node) &&
|
|
933
|
+
ts.isPropertyAccessExpression(node.expression)) {
|
|
934
|
+
const methodName = node.expression.name.text;
|
|
935
|
+
if (ARRAY_RETURNING_METHODS.has(methodName)) {
|
|
936
|
+
return isArrayLikeReceiver(node.expression.expression);
|
|
937
|
+
}
|
|
938
|
+
}
|
|
826
939
|
return false;
|
|
827
940
|
}
|
|
828
941
|
function resolveArrayElementType(node) {
|
|
@@ -834,6 +947,33 @@ function resolveArrayElementType(node) {
|
|
|
834
947
|
return type.valueType;
|
|
835
948
|
}
|
|
836
949
|
}
|
|
950
|
+
// Chained: filter/slice/concat preserve the element type from the inner array
|
|
951
|
+
if (ts.isCallExpression(node) &&
|
|
952
|
+
ts.isPropertyAccessExpression(node.expression)) {
|
|
953
|
+
const methodName = node.expression.name.text;
|
|
954
|
+
if (["filter", "slice", "concat"].includes(methodName)) {
|
|
955
|
+
return resolveArrayElementType(node.expression.expression);
|
|
956
|
+
}
|
|
957
|
+
// map: element type changes — resolved later via resolveChainedElementType
|
|
958
|
+
}
|
|
959
|
+
return undefined;
|
|
960
|
+
}
|
|
961
|
+
/**
|
|
962
|
+
* Resolve the element type of a chained array call from its generated helper function.
|
|
963
|
+
* This is used after parseExpression has processed the inner chain step,
|
|
964
|
+
* so the helper function is already registered in ctx.generatedArrayFunctions.
|
|
965
|
+
*/
|
|
966
|
+
function resolveChainedElementType(expr) {
|
|
967
|
+
if (expr.kind === "call" &&
|
|
968
|
+
expr.callee.kind === "property-access" &&
|
|
969
|
+
expr.callee.object.kind === "identifier" &&
|
|
970
|
+
expr.callee.object.name === "this") {
|
|
971
|
+
const helperName = expr.callee.property;
|
|
972
|
+
const helper = ctx.generatedArrayFunctions.find((f) => f.name === helperName);
|
|
973
|
+
if (helper?.returnType?.kind === SkittlesTypeKind.Array) {
|
|
974
|
+
return helper.returnType.valueType;
|
|
975
|
+
}
|
|
976
|
+
}
|
|
837
977
|
return undefined;
|
|
838
978
|
}
|
|
839
979
|
function resolveSpreadElementType(node) {
|