@rcrsr/rill 0.8.6 → 0.10.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.
- package/dist/ast-nodes.d.ts +189 -49
- package/dist/ast-nodes.d.ts.map +1 -1
- package/dist/ast-unions.d.ts +1 -1
- package/dist/ast-unions.d.ts.map +1 -1
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +30 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-classes.d.ts +3 -1
- package/dist/error-classes.d.ts.map +1 -1
- package/dist/error-classes.js +11 -5
- package/dist/error-classes.js.map +1 -1
- package/dist/error-registry.d.ts.map +1 -1
- package/dist/error-registry.js +313 -11
- package/dist/error-registry.js.map +1 -1
- package/dist/ext/crypto/index.d.ts +2 -1
- package/dist/ext/crypto/index.d.ts.map +1 -1
- package/dist/ext/crypto/index.js +7 -0
- package/dist/ext/crypto/index.js.map +1 -1
- package/dist/ext/exec/index.d.ts +2 -1
- package/dist/ext/exec/index.d.ts.map +1 -1
- package/dist/ext/exec/index.js +6 -0
- package/dist/ext/exec/index.js.map +1 -1
- package/dist/ext/fetch/index.d.ts +2 -1
- package/dist/ext/fetch/index.d.ts.map +1 -1
- package/dist/ext/fetch/index.js +6 -0
- package/dist/ext/fetch/index.js.map +1 -1
- package/dist/ext/fs/index.d.ts +2 -1
- package/dist/ext/fs/index.d.ts.map +1 -1
- package/dist/ext/fs/index.js +3 -0
- package/dist/ext/fs/index.js.map +1 -1
- package/dist/ext/kv/index.d.ts +2 -1
- package/dist/ext/kv/index.d.ts.map +1 -1
- package/dist/ext/kv/index.js +5 -1
- package/dist/ext/kv/index.js.map +1 -1
- package/dist/generated/introspection-data.d.ts +1 -1
- package/dist/generated/introspection-data.d.ts.map +1 -1
- package/dist/generated/introspection-data.js +194 -185
- package/dist/generated/introspection-data.js.map +1 -1
- package/dist/generated/version-data.d.ts +1 -1
- package/dist/generated/version-data.d.ts.map +1 -1
- package/dist/generated/version-data.js +3 -3
- package/dist/generated/version-data.js.map +1 -1
- package/dist/highlight-map.d.ts.map +1 -1
- package/dist/highlight-map.js +8 -2
- package/dist/highlight-map.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/lexer/operators.d.ts.map +1 -1
- package/dist/lexer/operators.js +0 -2
- package/dist/lexer/operators.js.map +1 -1
- package/dist/lexer/readers.d.ts +18 -1
- package/dist/lexer/readers.d.ts.map +1 -1
- package/dist/lexer/readers.js +55 -0
- package/dist/lexer/readers.js.map +1 -1
- package/dist/parser/helpers.d.ts +8 -13
- package/dist/parser/helpers.d.ts.map +1 -1
- package/dist/parser/helpers.js +42 -35
- package/dist/parser/helpers.js.map +1 -1
- package/dist/parser/index.d.ts +1 -0
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +1 -0
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/parser-collect.d.ts.map +1 -1
- package/dist/parser/parser-collect.js +34 -5
- package/dist/parser/parser-collect.js.map +1 -1
- package/dist/parser/parser-control.d.ts +1 -1
- package/dist/parser/parser-control.d.ts.map +1 -1
- package/dist/parser/parser-control.js +11 -2
- package/dist/parser/parser-control.js.map +1 -1
- package/dist/parser/parser-expr.d.ts +3 -1
- package/dist/parser/parser-expr.d.ts.map +1 -1
- package/dist/parser/parser-expr.js +377 -100
- package/dist/parser/parser-expr.js.map +1 -1
- package/dist/parser/parser-extract.d.ts +3 -5
- package/dist/parser/parser-extract.d.ts.map +1 -1
- package/dist/parser/parser-extract.js +37 -69
- package/dist/parser/parser-extract.js.map +1 -1
- package/dist/parser/parser-functions.d.ts +2 -2
- package/dist/parser/parser-functions.d.ts.map +1 -1
- package/dist/parser/parser-functions.js +112 -36
- package/dist/parser/parser-functions.js.map +1 -1
- package/dist/parser/parser-literals.d.ts +5 -4
- package/dist/parser/parser-literals.d.ts.map +1 -1
- package/dist/parser/parser-literals.js +316 -47
- package/dist/parser/parser-literals.js.map +1 -1
- package/dist/parser/parser-script.d.ts.map +1 -1
- package/dist/parser/parser-script.js +25 -12
- package/dist/parser/parser-script.js.map +1 -1
- package/dist/parser/parser-shape.d.ts +13 -0
- package/dist/parser/parser-shape.d.ts.map +1 -0
- package/dist/parser/parser-shape.js +72 -0
- package/dist/parser/parser-shape.js.map +1 -0
- package/dist/parser/parser-types.d.ts +31 -0
- package/dist/parser/parser-types.d.ts.map +1 -0
- package/dist/parser/parser-types.js +78 -0
- package/dist/parser/parser-types.js.map +1 -0
- package/dist/parser/parser-variables.d.ts.map +1 -1
- package/dist/parser/parser-variables.js +10 -1
- package/dist/parser/parser-variables.js.map +1 -1
- package/dist/runtime/core/callable.d.ts +27 -22
- package/dist/runtime/core/callable.d.ts.map +1 -1
- package/dist/runtime/core/callable.js +30 -26
- package/dist/runtime/core/callable.js.map +1 -1
- package/dist/runtime/core/context.d.ts.map +1 -1
- package/dist/runtime/core/context.js +8 -8
- package/dist/runtime/core/context.js.map +1 -1
- package/dist/runtime/core/equals.d.ts.map +1 -1
- package/dist/runtime/core/equals.js +179 -30
- package/dist/runtime/core/equals.js.map +1 -1
- package/dist/runtime/core/eval/base.d.ts +2 -2
- package/dist/runtime/core/eval/base.d.ts.map +1 -1
- package/dist/runtime/core/eval/evaluator.d.ts.map +1 -1
- package/dist/runtime/core/eval/evaluator.js +3 -1
- package/dist/runtime/core/eval/evaluator.js.map +1 -1
- package/dist/runtime/core/eval/index.d.ts +18 -3
- package/dist/runtime/core/eval/index.d.ts.map +1 -1
- package/dist/runtime/core/eval/index.js +22 -2
- package/dist/runtime/core/eval/index.js.map +1 -1
- package/dist/runtime/core/eval/mixins/annotations.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/annotations.js +14 -8
- package/dist/runtime/core/eval/mixins/annotations.js.map +1 -1
- package/dist/runtime/core/eval/mixins/closures.d.ts +0 -2
- package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/closures.js +341 -105
- package/dist/runtime/core/eval/mixins/closures.js.map +1 -1
- package/dist/runtime/core/eval/mixins/collections.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/collections.js +65 -25
- package/dist/runtime/core/eval/mixins/collections.js.map +1 -1
- package/dist/runtime/core/eval/mixins/control-flow.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/control-flow.js +21 -17
- package/dist/runtime/core/eval/mixins/control-flow.js.map +1 -1
- package/dist/runtime/core/eval/mixins/conversion.d.ts +30 -0
- package/dist/runtime/core/eval/mixins/conversion.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/conversion.js +212 -0
- package/dist/runtime/core/eval/mixins/conversion.js.map +1 -0
- package/dist/runtime/core/eval/mixins/core.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/core.js +101 -32
- package/dist/runtime/core/eval/mixins/core.js.map +1 -1
- package/dist/runtime/core/eval/mixins/extraction.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/extraction.js +136 -30
- package/dist/runtime/core/eval/mixins/extraction.js.map +1 -1
- package/dist/runtime/core/eval/mixins/list-dispatch.d.ts +17 -0
- package/dist/runtime/core/eval/mixins/list-dispatch.d.ts.map +1 -0
- package/dist/runtime/core/eval/mixins/list-dispatch.js +97 -0
- package/dist/runtime/core/eval/mixins/list-dispatch.js.map +1 -0
- package/dist/runtime/core/eval/mixins/literals.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/literals.js +73 -83
- package/dist/runtime/core/eval/mixins/literals.js.map +1 -1
- package/dist/runtime/core/eval/mixins/types.d.ts +4 -0
- package/dist/runtime/core/eval/mixins/types.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/types.js +323 -3
- package/dist/runtime/core/eval/mixins/types.js.map +1 -1
- package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -1
- package/dist/runtime/core/eval/mixins/variables.js +45 -7
- package/dist/runtime/core/eval/mixins/variables.js.map +1 -1
- package/dist/runtime/core/execute.d.ts.map +1 -1
- package/dist/runtime/core/execute.js +3 -16
- package/dist/runtime/core/execute.js.map +1 -1
- package/dist/runtime/core/field-descriptor.d.ts +29 -0
- package/dist/runtime/core/field-descriptor.d.ts.map +1 -0
- package/dist/runtime/core/field-descriptor.js +27 -0
- package/dist/runtime/core/field-descriptor.js.map +1 -0
- package/dist/runtime/core/types.d.ts +15 -6
- package/dist/runtime/core/types.d.ts.map +1 -1
- package/dist/runtime/core/types.js.map +1 -1
- package/dist/runtime/core/values.d.ts +114 -9
- package/dist/runtime/core/values.d.ts.map +1 -1
- package/dist/runtime/core/values.js +529 -43
- package/dist/runtime/core/values.js.map +1 -1
- package/dist/runtime/ext/builtins.d.ts.map +1 -1
- package/dist/runtime/ext/builtins.js +47 -107
- package/dist/runtime/ext/builtins.js.map +1 -1
- package/dist/runtime/ext/extensions.d.ts +21 -2
- package/dist/runtime/ext/extensions.d.ts.map +1 -1
- package/dist/runtime/ext/extensions.js.map +1 -1
- package/dist/runtime/index.d.ts +6 -4
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +7 -2
- package/dist/runtime/index.js.map +1 -1
- package/dist/token-types.d.ts +7 -2
- package/dist/token-types.d.ts.map +1 -1
- package/dist/token-types.js +9 -2
- package/dist/token-types.js.map +1 -1
- package/dist/value-types.d.ts +32 -1
- package/dist/value-types.d.ts.map +1 -1
- package/dist/value-types.js +1 -1
- package/dist/value-types.js.map +1 -1
- package/package.json +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-script.d.ts","sourceRoot":"","sources":["../../src/parser/parser-script.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,eAAe,EAEf,UAAU,EAEV,aAAa,EACd,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"parser-script.d.ts","sourceRoot":"","sources":["../../src/parser/parser-script.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,eAAe,EAEf,UAAU,EAEV,aAAa,EACd,MAAM,aAAa,CAAC;AAgBrB,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,MAAM;QACd,WAAW,IAAI,UAAU,CAAC;QAC1B,gBAAgB,IAAI,eAAe,CAAC;QACpC,cAAc,IAAI,aAAa,GAAG,sBAAsB,CAAC;QACzD,uBAAuB,IAAI,sBAAsB,CAAC;QAClD,mBAAmB,IAAI,aAAa,EAAE,CAAC;QACvC,kBAAkB,IAAI,aAAa,CAAC;QACpC,sBAAsB,CACpB,aAAa,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAC/D,OAAO,EAAE,MAAM,GACd,iBAAiB,CAAC;KACtB;CACF"}
|
|
@@ -6,6 +6,7 @@ import { Parser } from './parser.js';
|
|
|
6
6
|
import { ParseError, TOKEN_TYPES } from '../types.js';
|
|
7
7
|
import { LexerError } from '../lexer/index.js';
|
|
8
8
|
import { check, advance, expect, current, isAtEnd, skipNewlines, makeSpan, } from './state.js';
|
|
9
|
+
const RESERVED_ANNOTATION_KEYS = ['type', 'input', 'output'];
|
|
9
10
|
// ============================================================
|
|
10
11
|
// SCRIPT PARSING
|
|
11
12
|
// ============================================================
|
|
@@ -166,20 +167,19 @@ Parser.prototype.parseAnnotatedStatement = function () {
|
|
|
166
167
|
expect(this.state, TOKEN_TYPES.LPAREN, 'Expected (');
|
|
167
168
|
const annotations = this.parseAnnotationArgs();
|
|
168
169
|
expect(this.state, TOKEN_TYPES.RPAREN, 'Expected )', 'RILL-P005');
|
|
170
|
+
skipNewlines(this.state);
|
|
169
171
|
// Parse the inner statement (which could also be annotated)
|
|
170
172
|
const statement = this.parseStatement();
|
|
171
|
-
// If inner is annotated,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
}
|
|
178
|
-
: statement;
|
|
173
|
+
// If inner is already annotated, return it unchanged.
|
|
174
|
+
// BC-2: The immediately-preceding annotation attaches to the closure;
|
|
175
|
+
// the outer annotation is discarded.
|
|
176
|
+
if (statement.type === 'AnnotatedStatement') {
|
|
177
|
+
return statement;
|
|
178
|
+
}
|
|
179
179
|
return {
|
|
180
180
|
type: 'AnnotatedStatement',
|
|
181
181
|
annotations,
|
|
182
|
-
statement
|
|
182
|
+
statement,
|
|
183
183
|
span: makeSpan(start, current(this.state).span.end),
|
|
184
184
|
};
|
|
185
185
|
};
|
|
@@ -199,9 +199,9 @@ Parser.prototype.parseAnnotationArgs = function () {
|
|
|
199
199
|
};
|
|
200
200
|
Parser.prototype.parseAnnotationArg = function () {
|
|
201
201
|
const start = current(this.state).span.start;
|
|
202
|
-
// Spread argument:
|
|
203
|
-
if (check(this.state, TOKEN_TYPES.
|
|
204
|
-
advance(this.state); // consume
|
|
202
|
+
// Spread argument: ...expr
|
|
203
|
+
if (check(this.state, TOKEN_TYPES.ELLIPSIS)) {
|
|
204
|
+
advance(this.state); // consume ...
|
|
205
205
|
const expression = this.parseExpression();
|
|
206
206
|
return {
|
|
207
207
|
type: 'SpreadArg',
|
|
@@ -209,8 +209,21 @@ Parser.prototype.parseAnnotationArg = function () {
|
|
|
209
209
|
span: makeSpan(start, current(this.state).span.end),
|
|
210
210
|
};
|
|
211
211
|
}
|
|
212
|
+
// Description shorthand: bare string expands to description: <string>
|
|
213
|
+
if (check(this.state, TOKEN_TYPES.STRING)) {
|
|
214
|
+
const value = this.parseExpression();
|
|
215
|
+
return {
|
|
216
|
+
type: 'NamedArg',
|
|
217
|
+
name: 'description',
|
|
218
|
+
value,
|
|
219
|
+
span: makeSpan(start, current(this.state).span.end),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
212
222
|
// Named argument: key: value
|
|
213
223
|
const nameToken = expect(this.state, TOKEN_TYPES.IDENTIFIER, 'Expected annotation name');
|
|
224
|
+
if (RESERVED_ANNOTATION_KEYS.includes(nameToken.value)) {
|
|
225
|
+
throw new ParseError('RILL-P001', `Annotation key "${nameToken.value}" is reserved`, nameToken.span.start);
|
|
226
|
+
}
|
|
214
227
|
expect(this.state, TOKEN_TYPES.COLON, 'Expected :');
|
|
215
228
|
const value = this.parseExpression();
|
|
216
229
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-script.js","sourceRoot":"","sources":["../../src/parser/parser-script.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAWrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,QAAQ,GACT,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"parser-script.js","sourceRoot":"","sources":["../../src/parser/parser-script.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Extension: Type Constructor Parsing
|
|
3
|
+
* type-constructor = ("list" | "dict" | "tuple" | "ordered") "(" [type-arg-list] ")" ;
|
|
4
|
+
* type-arg-list = type-arg ("," type-arg)* [","] ;
|
|
5
|
+
* type-arg = identifier ":" expression | expression ;
|
|
6
|
+
*/
|
|
7
|
+
import type { TypeConstructorNode } from '../types.js';
|
|
8
|
+
declare module './parser.js' {
|
|
9
|
+
interface Parser {
|
|
10
|
+
parseTypeConstructor(constructorName: string): TypeConstructorNode;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=parser-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-shape.d.ts","sourceRoot":"","sources":["../../src/parser/parser-shape.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAEV,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AAarB,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,MAAM;QACd,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,mBAAmB,CAAC;KACpE;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Extension: Type Constructor Parsing
|
|
3
|
+
* type-constructor = ("list" | "dict" | "tuple" | "ordered") "(" [type-arg-list] ")" ;
|
|
4
|
+
* type-arg-list = type-arg ("," type-arg)* [","] ;
|
|
5
|
+
* type-arg = identifier ":" expression | expression ;
|
|
6
|
+
*/
|
|
7
|
+
import { Parser } from './parser.js';
|
|
8
|
+
import { ParseError, TOKEN_TYPES } from '../types.js';
|
|
9
|
+
import { check, advance, expect, current, skipNewlines, makeSpan, peek, } from './state.js';
|
|
10
|
+
// ============================================================
|
|
11
|
+
// TYPE CONSTRUCTOR PARSING
|
|
12
|
+
// ============================================================
|
|
13
|
+
/**
|
|
14
|
+
* Parse a type constructor: list(args), dict(k: T, ...), tuple(T...), ordered(k: T, ...).
|
|
15
|
+
* Called when current identifier is in ['list', 'dict', 'tuple', 'ordered'] and next token is LPAREN.
|
|
16
|
+
* Consumes: constructorName "(" [type-arg-list] ")"
|
|
17
|
+
* Produces TypeConstructorNode.
|
|
18
|
+
*/
|
|
19
|
+
Parser.prototype.parseTypeConstructor = function (constructorName) {
|
|
20
|
+
const validNames = ['list', 'dict', 'tuple', 'ordered'];
|
|
21
|
+
if (!validNames.includes(constructorName)) {
|
|
22
|
+
throw new ParseError('RILL-P001', `Expected type constructor name (list, dict, tuple, ordered), got: ${constructorName}`, current(this.state).span.start);
|
|
23
|
+
}
|
|
24
|
+
const start = current(this.state).span.start;
|
|
25
|
+
// Consume the constructor name identifier token
|
|
26
|
+
advance(this.state);
|
|
27
|
+
expect(this.state, TOKEN_TYPES.LPAREN, 'Expected (');
|
|
28
|
+
skipNewlines(this.state);
|
|
29
|
+
const args = [];
|
|
30
|
+
if (!check(this.state, TOKEN_TYPES.RPAREN)) {
|
|
31
|
+
args.push(parseTypeArg(this));
|
|
32
|
+
skipNewlines(this.state);
|
|
33
|
+
while (check(this.state, TOKEN_TYPES.COMMA)) {
|
|
34
|
+
advance(this.state);
|
|
35
|
+
skipNewlines(this.state);
|
|
36
|
+
if (check(this.state, TOKEN_TYPES.RPAREN))
|
|
37
|
+
break; // trailing comma
|
|
38
|
+
args.push(parseTypeArg(this));
|
|
39
|
+
skipNewlines(this.state);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const rparen = expect(this.state, TOKEN_TYPES.RPAREN, 'Expected )', 'RILL-P005');
|
|
43
|
+
return {
|
|
44
|
+
type: 'TypeConstructor',
|
|
45
|
+
constructorName: constructorName,
|
|
46
|
+
args,
|
|
47
|
+
span: makeSpan(start, rparen.span.end),
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
// ============================================================
|
|
51
|
+
// TYPE ARG PARSING (internal)
|
|
52
|
+
// ============================================================
|
|
53
|
+
/**
|
|
54
|
+
* Parse a single type argument: `identifier ":" expression` (named) or `expression` (positional).
|
|
55
|
+
* Lookahead: if current is IDENTIFIER and next is COLON, parse as named arg.
|
|
56
|
+
* Otherwise parse as positional.
|
|
57
|
+
*/
|
|
58
|
+
function parseTypeArg(parser) {
|
|
59
|
+
// Named arg: identifier ":" expression
|
|
60
|
+
if (check(parser.state, TOKEN_TYPES.IDENTIFIER) &&
|
|
61
|
+
peek(parser.state, 1).type === TOKEN_TYPES.COLON) {
|
|
62
|
+
const nameToken = advance(parser.state); // consume identifier
|
|
63
|
+
advance(parser.state); // consume ':'
|
|
64
|
+
skipNewlines(parser.state);
|
|
65
|
+
const value = parser.parseExpression();
|
|
66
|
+
return { kind: 'named', name: nameToken.value, value };
|
|
67
|
+
}
|
|
68
|
+
// Positional arg: expression
|
|
69
|
+
const value = parser.parseExpression();
|
|
70
|
+
return { kind: 'positional', value };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=parser-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-shape.js","sourceRoot":"","sources":["../../src/parser/parser-shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Utility: Type Reference Parsing
|
|
3
|
+
* Parses a type-ref production: either a static type name (optionally
|
|
4
|
+
* parameterized) or a dynamic $variable.
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
import { type TypeRef } from '../types.js';
|
|
8
|
+
import { type ParserState } from './state.js';
|
|
9
|
+
/**
|
|
10
|
+
* Parse a type reference from the current position in the token stream.
|
|
11
|
+
*
|
|
12
|
+
* Grammar:
|
|
13
|
+
* ```
|
|
14
|
+
* type-ref = type-name [ "(" type-ref-arg-list ")" ] | "$" identifier
|
|
15
|
+
* type-ref-arg-list = type-ref-arg { "," type-ref-arg } [ "," ]
|
|
16
|
+
* type-ref-arg = identifier ":" type-ref | type-ref
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* - `$identifier` → `{ kind: 'dynamic', varName: identifier }`
|
|
20
|
+
* - `type-name` → `{ kind: 'static', typeName }`
|
|
21
|
+
* - `type-name(arg, ...)` → `{ kind: 'static', typeName, args: [...] }`
|
|
22
|
+
*
|
|
23
|
+
* Dynamic refs do not accept parameterization — `$T(...)` is not valid.
|
|
24
|
+
*
|
|
25
|
+
* Throws ParseError (EC-13) if neither a `$identifier` nor a valid type name
|
|
26
|
+
* is found. Throws ParseError (EC-14) if the arg list is malformed.
|
|
27
|
+
*
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseTypeRef(state: ParserState): TypeRef;
|
|
31
|
+
//# sourceMappingURL=parser-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-types.d.ts","sourceRoot":"","sources":["../../src/parser/parser-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,OAAO,EAIb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,WAAW,EAAmC,MAAM,YAAY,CAAC;AAG/E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAkExD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Utility: Type Reference Parsing
|
|
3
|
+
* Parses a type-ref production: either a static type name (optionally
|
|
4
|
+
* parameterized) or a dynamic $variable.
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
import { TOKEN_TYPES, ParseError, } from '../types.js';
|
|
8
|
+
import { check, advance, expect, current } from './state.js';
|
|
9
|
+
import { VALID_TYPE_NAMES, parseTypeName } from './helpers.js';
|
|
10
|
+
/**
|
|
11
|
+
* Parse a type reference from the current position in the token stream.
|
|
12
|
+
*
|
|
13
|
+
* Grammar:
|
|
14
|
+
* ```
|
|
15
|
+
* type-ref = type-name [ "(" type-ref-arg-list ")" ] | "$" identifier
|
|
16
|
+
* type-ref-arg-list = type-ref-arg { "," type-ref-arg } [ "," ]
|
|
17
|
+
* type-ref-arg = identifier ":" type-ref | type-ref
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* - `$identifier` → `{ kind: 'dynamic', varName: identifier }`
|
|
21
|
+
* - `type-name` → `{ kind: 'static', typeName }`
|
|
22
|
+
* - `type-name(arg, ...)` → `{ kind: 'static', typeName, args: [...] }`
|
|
23
|
+
*
|
|
24
|
+
* Dynamic refs do not accept parameterization — `$T(...)` is not valid.
|
|
25
|
+
*
|
|
26
|
+
* Throws ParseError (EC-13) if neither a `$identifier` nor a valid type name
|
|
27
|
+
* is found. Throws ParseError (EC-14) if the arg list is malformed.
|
|
28
|
+
*
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
export function parseTypeRef(state) {
|
|
32
|
+
if (check(state, TOKEN_TYPES.DOLLAR)) {
|
|
33
|
+
advance(state); // consume $
|
|
34
|
+
const nameToken = expect(state, TOKEN_TYPES.IDENTIFIER, 'Expected variable name after $');
|
|
35
|
+
return { kind: 'dynamic', varName: nameToken.value };
|
|
36
|
+
}
|
|
37
|
+
const typeName = parseTypeName(state, VALID_TYPE_NAMES);
|
|
38
|
+
// Check for parameterized form: type-name "(" type-ref-arg-list ")"
|
|
39
|
+
if (!check(state, TOKEN_TYPES.LPAREN)) {
|
|
40
|
+
return { kind: 'static', typeName };
|
|
41
|
+
}
|
|
42
|
+
advance(state); // consume "("
|
|
43
|
+
const args = [];
|
|
44
|
+
// Parse arg list: allow empty "()" and trailing commas
|
|
45
|
+
while (!check(state, TOKEN_TYPES.RPAREN)) {
|
|
46
|
+
// Check for named arg: identifier ":" type-ref
|
|
47
|
+
// Lookahead: current is IDENTIFIER and next is COLON
|
|
48
|
+
const tok = current(state);
|
|
49
|
+
if (tok.type === TOKEN_TYPES.IDENTIFIER &&
|
|
50
|
+
state.tokens[state.pos + 1]?.type === TOKEN_TYPES.COLON) {
|
|
51
|
+
const name = tok.value;
|
|
52
|
+
advance(state); // consume identifier
|
|
53
|
+
advance(state); // consume ":"
|
|
54
|
+
const ref = parseTypeRef(state);
|
|
55
|
+
args.push({ name, ref });
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Positional arg: type-ref
|
|
59
|
+
const ref = parseTypeRef(state);
|
|
60
|
+
args.push({ ref });
|
|
61
|
+
}
|
|
62
|
+
// Consume trailing or separating comma
|
|
63
|
+
if (check(state, TOKEN_TYPES.COMMA)) {
|
|
64
|
+
advance(state);
|
|
65
|
+
}
|
|
66
|
+
else if (!check(state, TOKEN_TYPES.RPAREN)) {
|
|
67
|
+
// Neither comma nor closing paren — malformed arg list (EC-14)
|
|
68
|
+
throw new ParseError('RILL-P014', "Expected ',' or ')' in type argument list", current(state).span.start);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Consume ")"
|
|
72
|
+
if (!check(state, TOKEN_TYPES.RPAREN)) {
|
|
73
|
+
throw new ParseError('RILL-P014', "Expected ')' to close type argument list", current(state).span.start);
|
|
74
|
+
}
|
|
75
|
+
advance(state); // consume ")"
|
|
76
|
+
return { kind: 'static', typeName, args };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=parser-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-types.js","sourceRoot":"","sources":["../../src/parser/parser-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-variables.d.ts","sourceRoot":"","sources":["../../src/parser/parser-variables.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,cAAc,EACd,QAAQ,EACR,cAAc,EACd,YAAY,EACb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"parser-variables.d.ts","sourceRoot":"","sources":["../../src/parser/parser-variables.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,cAAc,EACd,QAAQ,EACR,cAAc,EACd,YAAY,EACb,MAAM,aAAa,CAAC;AAiBrB,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,MAAM;QACd,aAAa,IAAI,YAAY,CAAC;QAC9B,sBAAsB,CACpB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,SAAS,EAAE,OAAO,EAClB,KAAK,EAAE,cAAc,GACpB,YAAY,CAAC;QAChB,gBAAgB,IAAI;YAClB,WAAW,EAAE,cAAc,EAAE,CAAC;YAC9B,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;SACvC,CAAC;QACF,uBAAuB,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAAC;QACxE,2BAA2B,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;QACrE,oBAAoB,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC;QACxC,iBAAiB,IAAI,QAAQ,CAAC;KAC/B;CACF"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Parser } from './parser.js';
|
|
6
6
|
import { TOKEN_TYPES, ParseError } from '../types.js';
|
|
7
|
-
import { check, advance, expect, makeSpan, current } from './state.js';
|
|
7
|
+
import { check, advance, expect, makeSpan, current, skipNewlinesIfFollowedBy, } from './state.js';
|
|
8
8
|
import { isMethodCallWithArgs, VALID_TYPE_NAMES, parseTypeName, } from './helpers.js';
|
|
9
9
|
// ============================================================
|
|
10
10
|
// VARIABLE PARSING
|
|
@@ -52,6 +52,9 @@ Parser.prototype.makeVariableWithAccess = function (name, isPipeVar, start) {
|
|
|
52
52
|
Parser.prototype.parseAccessChain = function () {
|
|
53
53
|
const accessChain = [];
|
|
54
54
|
let existenceCheck = null;
|
|
55
|
+
skipNewlinesIfFollowedBy(this.state, TOKEN_TYPES.DOT);
|
|
56
|
+
skipNewlinesIfFollowedBy(this.state, TOKEN_TYPES.DOT_QUESTION);
|
|
57
|
+
skipNewlinesIfFollowedBy(this.state, TOKEN_TYPES.LBRACKET);
|
|
55
58
|
while (check(this.state, TOKEN_TYPES.DOT, TOKEN_TYPES.DOT_QUESTION, TOKEN_TYPES.LBRACKET)) {
|
|
56
59
|
if (check(this.state, TOKEN_TYPES.DOT) &&
|
|
57
60
|
isMethodCallWithArgs(this.state)) {
|
|
@@ -63,6 +66,9 @@ Parser.prototype.parseAccessChain = function () {
|
|
|
63
66
|
const closeBracket = expect(this.state, TOKEN_TYPES.RBRACKET, 'Expected ] after index expression', 'RILL-P005');
|
|
64
67
|
const span = makeSpan(openBracket.span.start, closeBracket.span.end);
|
|
65
68
|
accessChain.push({ accessKind: 'bracket', expression, span });
|
|
69
|
+
skipNewlinesIfFollowedBy(this.state, TOKEN_TYPES.DOT);
|
|
70
|
+
skipNewlinesIfFollowedBy(this.state, TOKEN_TYPES.DOT_QUESTION);
|
|
71
|
+
skipNewlinesIfFollowedBy(this.state, TOKEN_TYPES.LBRACKET);
|
|
66
72
|
continue;
|
|
67
73
|
}
|
|
68
74
|
if (check(this.state, TOKEN_TYPES.DOT_QUESTION)) {
|
|
@@ -85,6 +91,9 @@ Parser.prototype.parseAccessChain = function () {
|
|
|
85
91
|
break;
|
|
86
92
|
}
|
|
87
93
|
accessChain.push(access);
|
|
94
|
+
skipNewlinesIfFollowedBy(this.state, TOKEN_TYPES.DOT);
|
|
95
|
+
skipNewlinesIfFollowedBy(this.state, TOKEN_TYPES.DOT_QUESTION);
|
|
96
|
+
skipNewlinesIfFollowedBy(this.state, TOKEN_TYPES.LBRACKET);
|
|
88
97
|
}
|
|
89
98
|
return { accessChain, existenceCheck };
|
|
90
99
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-variables.js","sourceRoot":"","sources":["../../src/parser/parser-variables.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AASrC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"parser-variables.js","sourceRoot":"","sources":["../../src/parser/parser-variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,12 +24,14 @@
|
|
|
24
24
|
* - Per spec algorithm: "Apply default values for missing arguments before validation"
|
|
25
25
|
* - Mutation occurs before host function receives args, maintaining immutability contract
|
|
26
26
|
*/
|
|
27
|
-
import type { BodyNode, SourceLocation } from '../../types.js';
|
|
28
|
-
|
|
27
|
+
import type { BodyNode, RillFunctionReturnType, RillTypeName, SourceLocation } from '../../types.js';
|
|
28
|
+
export type { RillFunctionReturnType } from '../../types.js';
|
|
29
|
+
import type { RillStructuralType, RillTypeValue, RillValue } from './values.js';
|
|
29
30
|
interface RuntimeContextLike {
|
|
30
31
|
readonly parent?: RuntimeContextLike | undefined;
|
|
31
32
|
readonly variables: Map<string, RillValue>;
|
|
32
33
|
pipeValue: RillValue;
|
|
34
|
+
readonly metadata?: Record<string, string> | undefined;
|
|
33
35
|
}
|
|
34
36
|
/**
|
|
35
37
|
* Callable function signature.
|
|
@@ -44,18 +46,15 @@ export type CallableFn = (args: RillValue[], ctx: RuntimeContextLike, location?:
|
|
|
44
46
|
*/
|
|
45
47
|
export interface CallableParam {
|
|
46
48
|
readonly name: string;
|
|
47
|
-
readonly typeName:
|
|
49
|
+
readonly typeName: RillTypeName | null;
|
|
50
|
+
/** Full resolved structural type. Absent means bare type (uses typeName only). Present supersedes typeName for structural validation and reflection. */
|
|
51
|
+
readonly typeStructure?: RillStructuralType;
|
|
48
52
|
readonly defaultValue: RillValue | null;
|
|
49
53
|
/** Evaluated parameter-level annotations (e.g., ^(cache: true)) */
|
|
50
54
|
readonly annotations: Record<string, RillValue>;
|
|
51
55
|
/** Human-readable parameter description (optional, from host functions) */
|
|
52
56
|
readonly description?: string;
|
|
53
57
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Return type declaration for host-provided functions.
|
|
56
|
-
* Limited to 6 primitive types plus 'any' (default).
|
|
57
|
-
*/
|
|
58
|
-
export type RillFunctionReturnType = 'string' | 'number' | 'bool' | 'list' | 'dict' | 'vector' | 'any';
|
|
59
58
|
/**
|
|
60
59
|
* Parameter metadata for host-provided functions.
|
|
61
60
|
*
|
|
@@ -115,6 +114,10 @@ export interface ScriptCallable extends CallableBase {
|
|
|
115
114
|
readonly annotations: Record<string, RillValue>;
|
|
116
115
|
/** Evaluated parameter annotations keyed by parameter name */
|
|
117
116
|
readonly paramAnnotations: Record<string, Record<string, RillValue>>;
|
|
117
|
+
/** Cached input structural type built from params at creation time — used by `$fn.^input` */
|
|
118
|
+
readonly inputShape: RillStructuralType;
|
|
119
|
+
/** Return type target from `:type-target` syntax — set in Phase 2, undefined until then */
|
|
120
|
+
readonly returnShape?: RillTypeValue | undefined;
|
|
118
121
|
}
|
|
119
122
|
/** Runtime callable - Rill's built-in functions (type, log, json, identity) */
|
|
120
123
|
export interface RuntimeCallable extends CallableBase {
|
|
@@ -164,6 +167,20 @@ export declare function formatCallable(callable: RillCallable): string;
|
|
|
164
167
|
* 5. Same parameter-level annotations
|
|
165
168
|
*/
|
|
166
169
|
export declare function callableEquals(a: ScriptCallable, b: ScriptCallable, valueEquals?: (a: RillValue, b: RillValue) => boolean): boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Build a RillStructuralType closure variant from a closure's parameter list.
|
|
172
|
+
*
|
|
173
|
+
* Called at closure creation time to build the structural type for `$fn.^input`.
|
|
174
|
+
* - Typed params map to { type: typeName }
|
|
175
|
+
* - Untyped params (typeName: null) map to { type: 'any' }
|
|
176
|
+
* - Return type is always { type: 'any' }
|
|
177
|
+
*
|
|
178
|
+
* No validation: parser already validates type names.
|
|
179
|
+
*
|
|
180
|
+
* @param params - Closure parameter definitions
|
|
181
|
+
* @returns Frozen RillStructuralType with closure variant
|
|
182
|
+
*/
|
|
183
|
+
export declare function paramsToStructuralType(params: CallableParam[]): RillStructuralType;
|
|
167
184
|
/**
|
|
168
185
|
* Validate defaultValue type matches declared parameter type.
|
|
169
186
|
*
|
|
@@ -175,17 +192,6 @@ export declare function callableEquals(a: ScriptCallable, b: ScriptCallable, val
|
|
|
175
192
|
* @throws Error if defaultValue type doesn't match param.type
|
|
176
193
|
*/
|
|
177
194
|
export declare function validateDefaultValueType(param: HostFunctionParam, _functionName: string): void;
|
|
178
|
-
/**
|
|
179
|
-
* Validate returnType is a valid RillFunctionReturnType literal.
|
|
180
|
-
*
|
|
181
|
-
* Called at registration time to catch configuration errors early.
|
|
182
|
-
* Throws Error (not RuntimeError) to indicate registration failure.
|
|
183
|
-
*
|
|
184
|
-
* @param returnType - Return type value to validate
|
|
185
|
-
* @param functionName - Function name for error messages
|
|
186
|
-
* @throws Error if returnType is not a valid literal
|
|
187
|
-
*/
|
|
188
|
-
export declare function validateReturnType(returnType: unknown, functionName: string): void;
|
|
189
195
|
/**
|
|
190
196
|
* Validate host function arguments against parameter declarations.
|
|
191
197
|
*
|
|
@@ -196,7 +202,7 @@ export declare function validateReturnType(returnType: unknown, functionName: st
|
|
|
196
202
|
* @param params - Parameter declarations from function definition
|
|
197
203
|
* @param functionName - Function name for error messages
|
|
198
204
|
* @param location - Source location for error reporting
|
|
199
|
-
* @throws RuntimeError with
|
|
205
|
+
* @throws RuntimeError with RILL-R001 on validation failure
|
|
200
206
|
*/
|
|
201
207
|
export declare function validateHostFunctionArgs(args: RillValue[], params: readonly HostFunctionParam[], functionName: string, location?: SourceLocation): void;
|
|
202
208
|
/**
|
|
@@ -209,8 +215,7 @@ export declare function validateHostFunctionArgs(args: RillValue[], params: read
|
|
|
209
215
|
* @param params - Parameter definitions
|
|
210
216
|
* @param functionName - Function name for error messages
|
|
211
217
|
* @param location - Source location for error reporting
|
|
212
|
-
* @throws RuntimeError with
|
|
218
|
+
* @throws RuntimeError with RILL-R001 on validation failure
|
|
213
219
|
*/
|
|
214
220
|
export declare function validateCallableArgs(args: RillValue[], params: readonly CallableParam[], functionName: string, location?: SourceLocation): void;
|
|
215
|
-
export {};
|
|
216
221
|
//# sourceMappingURL=callable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callable.d.ts","sourceRoot":"","sources":["../../../src/runtime/core/callable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"callable.d.ts","sourceRoot":"","sources":["../../../src/runtime/core/callable.ts"],"names":[],"mappings":"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"}
|
|
@@ -154,6 +154,34 @@ export function callableEquals(a, b, valueEquals = (x, y) => formatValue(x) ===
|
|
|
154
154
|
}
|
|
155
155
|
return true;
|
|
156
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Build a RillStructuralType closure variant from a closure's parameter list.
|
|
159
|
+
*
|
|
160
|
+
* Called at closure creation time to build the structural type for `$fn.^input`.
|
|
161
|
+
* - Typed params map to { type: typeName }
|
|
162
|
+
* - Untyped params (typeName: null) map to { type: 'any' }
|
|
163
|
+
* - Return type is always { type: 'any' }
|
|
164
|
+
*
|
|
165
|
+
* No validation: parser already validates type names.
|
|
166
|
+
*
|
|
167
|
+
* @param params - Closure parameter definitions
|
|
168
|
+
* @returns Frozen RillStructuralType with closure variant
|
|
169
|
+
*/
|
|
170
|
+
export function paramsToStructuralType(params) {
|
|
171
|
+
const closureParams = params.map((param) => {
|
|
172
|
+
const paramType = param.typeStructure !== undefined
|
|
173
|
+
? param.typeStructure
|
|
174
|
+
: param.typeName !== null
|
|
175
|
+
? { type: param.typeName }
|
|
176
|
+
: { type: 'any' };
|
|
177
|
+
return [param.name, paramType];
|
|
178
|
+
});
|
|
179
|
+
return Object.freeze({
|
|
180
|
+
type: 'closure',
|
|
181
|
+
params: closureParams,
|
|
182
|
+
ret: { type: 'any' },
|
|
183
|
+
});
|
|
184
|
+
}
|
|
157
185
|
/**
|
|
158
186
|
* Validate defaultValue type matches declared parameter type.
|
|
159
187
|
*
|
|
@@ -176,30 +204,6 @@ export function validateDefaultValueType(param, _functionName) {
|
|
|
176
204
|
throw new Error(`Invalid defaultValue for parameter '${param.name}': expected ${expectedType}, got ${actualType}`);
|
|
177
205
|
}
|
|
178
206
|
}
|
|
179
|
-
/**
|
|
180
|
-
* Validate returnType is a valid RillFunctionReturnType literal.
|
|
181
|
-
*
|
|
182
|
-
* Called at registration time to catch configuration errors early.
|
|
183
|
-
* Throws Error (not RuntimeError) to indicate registration failure.
|
|
184
|
-
*
|
|
185
|
-
* @param returnType - Return type value to validate
|
|
186
|
-
* @param functionName - Function name for error messages
|
|
187
|
-
* @throws Error if returnType is not a valid literal
|
|
188
|
-
*/
|
|
189
|
-
export function validateReturnType(returnType, functionName) {
|
|
190
|
-
const validTypes = [
|
|
191
|
-
'string',
|
|
192
|
-
'number',
|
|
193
|
-
'bool',
|
|
194
|
-
'list',
|
|
195
|
-
'dict',
|
|
196
|
-
'vector',
|
|
197
|
-
'any',
|
|
198
|
-
];
|
|
199
|
-
if (!validTypes.includes(returnType)) {
|
|
200
|
-
throw new Error(`Invalid returnType for function '${functionName}': expected one of string, number, bool, list, dict, vector, any`);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
207
|
/**
|
|
204
208
|
* Validate host function arguments against parameter declarations.
|
|
205
209
|
*
|
|
@@ -210,7 +214,7 @@ export function validateReturnType(returnType, functionName) {
|
|
|
210
214
|
* @param params - Parameter declarations from function definition
|
|
211
215
|
* @param functionName - Function name for error messages
|
|
212
216
|
* @param location - Source location for error reporting
|
|
213
|
-
* @throws RuntimeError with
|
|
217
|
+
* @throws RuntimeError with RILL-R001 on validation failure
|
|
214
218
|
*/
|
|
215
219
|
export function validateHostFunctionArgs(args, params, functionName, location) {
|
|
216
220
|
// Check for excess arguments
|
|
@@ -267,7 +271,7 @@ export function validateHostFunctionArgs(args, params, functionName, location) {
|
|
|
267
271
|
* @param params - Parameter definitions
|
|
268
272
|
* @param functionName - Function name for error messages
|
|
269
273
|
* @param location - Source location for error reporting
|
|
270
|
-
* @throws RuntimeError with
|
|
274
|
+
* @throws RuntimeError with RILL-R001 on validation failure
|
|
271
275
|
*/
|
|
272
276
|
export function validateCallableArgs(args, params, functionName, location) {
|
|
273
277
|
// Check for excess arguments
|