@neocompose/cli 0.24.3 → 0.24.4
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.24.4] - 2026-08-07
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Preserve every operand and its grouping when compiling chained NeoScript
|
|
8
|
+
`&&` and `||` expressions. The previous lowering overwrote the left
|
|
9
|
+
expression's connective, so `a || b || c` evaluated as `a || c`.
|
|
10
|
+
- Short-circuit logical expressions in the local evaluator instead of eagerly
|
|
11
|
+
evaluating an unused right-hand operand.
|
|
12
|
+
|
|
3
13
|
## [0.24.3] - 2026-08-07
|
|
4
14
|
|
|
5
15
|
### Fixed
|
package/dist/neo.mjs
CHANGED
|
@@ -7323,7 +7323,7 @@ var NEOSCRIPT_COMPILER_REVISION;
|
|
|
7323
7323
|
var init_strict_ir = __esm({
|
|
7324
7324
|
"../packages/neoscript-language/src/strict-ir.ts"() {
|
|
7325
7325
|
"use strict";
|
|
7326
|
-
NEOSCRIPT_COMPILER_REVISION =
|
|
7326
|
+
NEOSCRIPT_COMPILER_REVISION = 8;
|
|
7327
7327
|
}
|
|
7328
7328
|
});
|
|
7329
7329
|
|
|
@@ -8157,6 +8157,9 @@ function pointerToBooleanExpression(pointer) {
|
|
|
8157
8157
|
if (pointer.type === "operation" /* Operation */ && pointer.operation.type === "boolean" /* Boolean */) {
|
|
8158
8158
|
return pointer.operation.expression;
|
|
8159
8159
|
}
|
|
8160
|
+
return pointerToBooleanOperandExpression(pointer);
|
|
8161
|
+
}
|
|
8162
|
+
function pointerToBooleanOperandExpression(pointer) {
|
|
8160
8163
|
return {
|
|
8161
8164
|
condition: {
|
|
8162
8165
|
type: "equalTo" /* EqualTo */,
|
|
@@ -12701,7 +12704,7 @@ var init_strict_resolver = __esm({
|
|
|
12701
12704
|
operation: {
|
|
12702
12705
|
type: "boolean" /* Boolean */,
|
|
12703
12706
|
expression: {
|
|
12704
|
-
...
|
|
12707
|
+
...pointerToBooleanOperandExpression(l.pointer),
|
|
12705
12708
|
connective: {
|
|
12706
12709
|
type: expression.op === "&&" ? "&&" /* And */ : "||" /* Or */,
|
|
12707
12710
|
to: pointerToBooleanExpression(r.pointer)
|
|
@@ -60276,12 +60279,11 @@ function stringifyForInterp(v) {
|
|
|
60276
60279
|
function evalBooleanExpression(expression, scope, ctx) {
|
|
60277
60280
|
const head = evalCondition(expression.condition, scope, ctx);
|
|
60278
60281
|
if (!expression.connective) return head;
|
|
60279
|
-
const tail = evalBooleanExpression(expression.connective.to, scope, ctx);
|
|
60280
60282
|
switch (expression.connective.type) {
|
|
60281
60283
|
case "&&" /* and */:
|
|
60282
|
-
return head
|
|
60284
|
+
return head ? evalBooleanExpression(expression.connective.to, scope, ctx) : false;
|
|
60283
60285
|
case "||" /* or */:
|
|
60284
|
-
return head
|
|
60286
|
+
return head ? true : evalBooleanExpression(expression.connective.to, scope, ctx);
|
|
60285
60287
|
}
|
|
60286
60288
|
}
|
|
60287
60289
|
function evalCondition(condition, scope, ctx) {
|
|
@@ -101546,7 +101548,7 @@ var init_registry2 = __esm({
|
|
|
101546
101548
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
101547
101549
|
formatVersion: 3,
|
|
101548
101550
|
contractVersion: "3.9",
|
|
101549
|
-
cliVersion: "0.24.
|
|
101551
|
+
cliVersion: "0.24.4",
|
|
101550
101552
|
projectFileUploadBatchSize: 32,
|
|
101551
101553
|
documentRecords: {
|
|
101552
101554
|
member: {
|
package/package.json
CHANGED
|
@@ -82,7 +82,7 @@ wrappers.
|
|
|
82
82
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
83
83
|
|
|
84
84
|
```html
|
|
85
|
-
<!-- reviewed-through-cli: 0.24.
|
|
85
|
+
<!-- reviewed-through-cli: 0.24.4 -->
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
The quoted version above is checked too, so this instruction cannot go stale
|
|
@@ -7,6 +7,7 @@ runtime ownership, evaluation, and migrations.
|
|
|
7
7
|
|
|
8
8
|
- Inline bodies and snippets
|
|
9
9
|
- Nullability and ownership
|
|
10
|
+
- Logical operators
|
|
10
11
|
- Loops and transfer
|
|
11
12
|
- Switch
|
|
12
13
|
- Try/catch
|
|
@@ -53,6 +54,13 @@ Save, Session, Setter, or otherwise writable. A constructor writes only its
|
|
|
53
54
|
`this` instance. A writable structured-leaf field still inherits the receiver's
|
|
54
55
|
effective storage restrictions.
|
|
55
56
|
|
|
57
|
+
## Logical operators
|
|
58
|
+
|
|
59
|
+
Use `&&` and `||` with C# precedence: `&&` binds tighter than `||`, and
|
|
60
|
+
parentheses preserve explicit grouping. Both operators short-circuit, so the
|
|
61
|
+
right operand is evaluated only when it can change the result. Chained
|
|
62
|
+
expressions retain every operand; `a || b || c` never skips `b`.
|
|
63
|
+
|
|
56
64
|
## Loops and transfer
|
|
57
65
|
|
|
58
66
|
Use C#-shaped loops:
|