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.
Files changed (40) hide show
  1. package/dist/compiler/codegen/helpers.d.ts.map +1 -1
  2. package/dist/compiler/codegen/helpers.js +74 -0
  3. package/dist/compiler/codegen/helpers.js.map +1 -1
  4. package/dist/compiler/expression-parser.d.ts.map +1 -1
  5. package/dist/compiler/expression-parser.js +171 -31
  6. package/dist/compiler/expression-parser.js.map +1 -1
  7. package/dist/index.js +0 -0
  8. package/package.json +1 -1
  9. package/dist/commands/test.d.ts +0 -7
  10. package/dist/commands/test.d.ts.map +0 -1
  11. package/dist/commands/test.js +0 -60
  12. package/dist/commands/test.js.map +0 -1
  13. package/dist/stdlib/contracts/access/Ownable.d.ts +0 -33
  14. package/dist/stdlib/contracts/access/Ownable.d.ts.map +0 -1
  15. package/dist/stdlib/contracts/access/Ownable.js +0 -50
  16. package/dist/stdlib/contracts/access/Ownable.js.map +0 -1
  17. package/dist/stdlib/contracts/index.d.ts +0 -22
  18. package/dist/stdlib/contracts/index.d.ts.map +0 -1
  19. package/dist/stdlib/contracts/index.js +0 -25
  20. package/dist/stdlib/contracts/index.js.map +0 -1
  21. package/dist/stdlib/contracts/security/Pausable.d.ts +0 -27
  22. package/dist/stdlib/contracts/security/Pausable.d.ts.map +0 -1
  23. package/dist/stdlib/contracts/security/Pausable.js +0 -41
  24. package/dist/stdlib/contracts/security/Pausable.js.map +0 -1
  25. package/dist/stdlib/contracts/security/ReentrancyGuard.d.ts +0 -17
  26. package/dist/stdlib/contracts/security/ReentrancyGuard.d.ts.map +0 -1
  27. package/dist/stdlib/contracts/security/ReentrancyGuard.js +0 -25
  28. package/dist/stdlib/contracts/security/ReentrancyGuard.js.map +0 -1
  29. package/dist/stdlib/contracts/token/ERC20.d.ts +0 -64
  30. package/dist/stdlib/contracts/token/ERC20.d.ts.map +0 -1
  31. package/dist/stdlib/contracts/token/ERC20.js +0 -117
  32. package/dist/stdlib/contracts/token/ERC20.js.map +0 -1
  33. package/dist/stdlib/contracts/token/ERC721.d.ts +0 -80
  34. package/dist/stdlib/contracts/token/ERC721.d.ts.map +0 -1
  35. package/dist/stdlib/contracts/token/ERC721.js +0 -166
  36. package/dist/stdlib/contracts/token/ERC721.js.map +0 -1
  37. package/dist/testing.d.ts +0 -93
  38. package/dist/testing.d.ts.map +0 -1
  39. package/dist/testing.js +0 -143
  40. 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,CA8JN"}
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":"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"}
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,CA8hC/D;AAgdD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,OAAO,CAalE"}
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 elementType = resolveArrayElementType(node.expression.expression);
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
- ctx.neededArrayHelpers.add(`includes_${typeSuffix}`);
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: `_arrIncludes_${typeSuffix}`,
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
- ctx.neededArrayHelpers.add(`indexOf_${typeSuffix}`);
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: `_arrIndexOf_${typeSuffix}`,
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
- ctx.neededArrayHelpers.add(`lastIndexOf_${typeSuffix}`);
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: `_arrLastIndexOf_${typeSuffix}`,
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
- ctx.neededArrayHelpers.add(`slice_${typeSuffix}`);
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: `_arrSlice_${typeSuffix}`,
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 (ts.isPropertyAccessExpression(otherArg) &&
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
- ctx.neededArrayHelpers.add(`concat_${typeSuffix}`);
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: `_arrConcat_${typeSuffix}`,
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(receiverExpr, elementType, callback.paramName, condExpr);
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(receiverExpr, elementType, callback.paramName, condExpr, resultType);
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", receiverExpr, elementType, callback.paramName, condExpr);
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", receiverExpr, elementType, callback.paramName, condExpr);
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(receiverExpr, elementType, callback.paramName, condExpr);
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(receiverExpr, elementType, callback.paramName, condExpr);
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(receiverExpr, elementType, callback.paramName, callback.secondParamName, condExpr, initialValue, accType);
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 like reverse)
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
- if (node.parent && !ts.isExpressionStatement(node.parent)) {
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(receiverExpr, elementType, callback.paramName, callback.secondParamName, condExpr);
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(receiverExpr, mkId("__sk_i"))),
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
- mkForLoop("__sk_i", receiverExpr, forBody),
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
- if (node.parent && !ts.isExpressionStatement(node.parent)) {
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) {