circuitscript 0.1.29 → 0.1.31

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 (42) hide show
  1. package/dist/cjs/BaseVisitor.js +150 -21
  2. package/dist/cjs/antlr/CircuitScriptLexer.js +241 -236
  3. package/dist/cjs/antlr/CircuitScriptParser.js +568 -431
  4. package/dist/cjs/builtinMethods.js +6 -2
  5. package/dist/cjs/environment.js +4 -0
  6. package/dist/cjs/execute.js +88 -57
  7. package/dist/cjs/globals.js +4 -1
  8. package/dist/cjs/helpers.js +6 -2
  9. package/dist/cjs/objects/ExecutionScope.js +9 -0
  10. package/dist/cjs/objects/types.js +21 -2
  11. package/dist/cjs/parser.js +6 -2
  12. package/dist/cjs/validate/SymbolTable.js +7 -1
  13. package/dist/cjs/validate/SymbolValidatorVisitor.js +54 -7
  14. package/dist/cjs/visitor.js +15 -47
  15. package/dist/esm/BaseVisitor.js +152 -23
  16. package/dist/esm/antlr/CircuitScriptLexer.js +241 -236
  17. package/dist/esm/antlr/CircuitScriptParser.js +567 -429
  18. package/dist/esm/antlr/CircuitScriptVisitor.js +3 -1
  19. package/dist/esm/builtinMethods.js +7 -3
  20. package/dist/esm/environment.js +4 -0
  21. package/dist/esm/execute.js +89 -58
  22. package/dist/esm/globals.js +2 -0
  23. package/dist/esm/helpers.js +6 -2
  24. package/dist/esm/objects/ExecutionScope.js +9 -0
  25. package/dist/esm/objects/types.js +27 -1
  26. package/dist/esm/parser.js +6 -2
  27. package/dist/esm/validate/SymbolTable.js +5 -0
  28. package/dist/esm/validate/SymbolValidatorVisitor.js +53 -6
  29. package/dist/esm/visitor.js +16 -45
  30. package/dist/types/BaseVisitor.d.ts +12 -5
  31. package/dist/types/antlr/CircuitScriptLexer.d.ts +43 -42
  32. package/dist/types/antlr/CircuitScriptParser.d.ts +71 -45
  33. package/dist/types/antlr/CircuitScriptVisitor.d.ts +6 -2
  34. package/dist/types/environment.d.ts +1 -0
  35. package/dist/types/execute.d.ts +2 -2
  36. package/dist/types/globals.d.ts +2 -0
  37. package/dist/types/objects/ExecutionScope.d.ts +3 -1
  38. package/dist/types/objects/types.d.ts +22 -1
  39. package/dist/types/validate/SymbolTable.d.ts +1 -0
  40. package/dist/types/validate/SymbolValidatorVisitor.d.ts +6 -2
  41. package/dist/types/visitor.d.ts +3 -1
  42. package/package.json +4 -1
@@ -1,10 +1,10 @@
1
- import { Array_exprContext, ArrayExprContext, ArrayIndexExprContext, Assignment_exprContext, Atom_exprContext, ExpressionContext, Flow_expressionsContext, Function_args_exprContext, Function_call_exprContext, Function_exprContext, Function_return_exprContext, FunctionCallExprContext, Import_exprContext, Operator_assignment_exprContext, ParametersContext, RoundedBracketsExprContext, ScriptContext, Trailer_expr2Context, Value_exprContext, ValueAtomExprContext } from "./antlr/CircuitScriptParser.js";
1
+ import { Array_exprContext, ArrayExprContext, ArrayIndexExprContext, Assignment_exprContext, Atom_exprContext, ExpressionContext, Flow_expressionsContext, Function_args_exprContext, Function_call_exprContext, Function_exprContext, Function_return_exprContext, FunctionCallExprContext, Import_all_simpleContext, Import_exprContext, Import_simpleContext, Import_specificContext, Operator_assignment_exprContext, ParametersContext, RoundedBracketsExprContext, ScriptContext, Trailer_expr2Context, Value_exprContext, ValueAtomExprContext } from "./antlr/CircuitScriptParser.js";
2
2
  import { CircuitScriptVisitor } from "./antlr/CircuitScriptVisitor.js";
3
3
  import { ExecutionContext } from "./execute.js";
4
4
  import { Logger } from "./logger.js";
5
5
  import { ClassComponent } from "./objects/ClassComponent.js";
6
6
  import { Net } from "./objects/Net.js";
7
- import { CallableParameter, CFunctionOptions, ComplexType, Direction, FunctionDefinedParameter, AnyReference } from "./objects/types.js";
7
+ import { CallableParameter, ComplexType, Direction, FunctionDefinedParameter, AnyReference, ImportedModule, NewContextOptions, ImportFunctionHandling as ImportFunctionHandling } from "./objects/types.js";
8
8
  import { ParserRuleContext } from 'antlr4ng';
9
9
  import { ExecutionWarning } from "./utils.js";
10
10
  import { BaseError } from './utils.js';
@@ -12,13 +12,13 @@ import { ExecutionScope } from './objects/ExecutionScope.js';
12
12
  import { NodeScriptEnvironment } from "./environment.js";
13
13
  import { PinId } from './objects/PinDefinition.js';
14
14
  export declare class BaseVisitor extends CircuitScriptVisitor<ComplexType | AnyReference | any> {
15
- indentLevel: number;
16
15
  startingContext: ExecutionContext;
17
16
  executionStack: ExecutionContext[];
18
17
  silent: boolean;
19
18
  logger: Logger;
20
19
  printStream: string[];
21
20
  printToConsole: boolean;
21
+ allowParseImports: boolean;
22
22
  acceptedDirections: Direction[];
23
23
  protected resultData: Map<ParserRuleContext, any>;
24
24
  protected componentCtxLinks: Map<ParserRuleContext, ClassComponent>;
@@ -45,6 +45,10 @@ export declare class BaseVisitor extends CircuitScriptVisitor<ComplexType | AnyR
45
45
  log2(message: string): void;
46
46
  visitAsync(ctx: ParserRuleContext): Promise<void>;
47
47
  visitScript: (ctx: ScriptContext) => Promise<void>;
48
+ private importCommon;
49
+ visitImport_simple: (ctx: Import_simpleContext) => Promise<void>;
50
+ visitImport_all_simple: (ctx: Import_all_simpleContext) => Promise<void>;
51
+ visitImport_specific: (ctx: Import_specificContext) => Promise<void>;
48
52
  visitAssignment_expr: (ctx: Assignment_exprContext) => void;
49
53
  visitOperator_assignment_expr: (ctx: Operator_assignment_exprContext) => void;
50
54
  private getReference;
@@ -53,6 +57,8 @@ export declare class BaseVisitor extends CircuitScriptVisitor<ComplexType | AnyR
53
57
  visitFunctionCallExpr: (ctx: FunctionCallExprContext) => void;
54
58
  visitFunction_call_expr: (ctx: Function_call_exprContext) => void;
55
59
  private handleFunctionCall;
60
+ protected handleEnterContext(executor: ExecutionContext, executionStack: ExecutionContext[], contextName: string, ctx: ParserRuleContext, options: NewContextOptions, funcDefinedParameters: FunctionDefinedParameter[], passedInParameters: CallableParameter[], isBreakContext?: boolean): ExecutionContext;
61
+ protected handlePopContext(executor: ExecutionContext, executionStack: ExecutionContext[], namespaceExtension: string, isBreakContext?: boolean): ExecutionContext;
56
62
  visitValue_expr: (ctx: Value_exprContext) => void;
57
63
  visitValueAtomExpr: (ctx: ValueAtomExprContext) => void;
58
64
  visitFunction_args_expr: (ctx: Function_args_exprContext) => void;
@@ -68,14 +74,14 @@ export declare class BaseVisitor extends CircuitScriptVisitor<ComplexType | AnyR
68
74
  protected linkComponentToCtx(ctx: ParserRuleContext, instance: ClassComponent, creationFlag?: boolean): void;
69
75
  getComponentCtxLinks(): Map<ParserRuleContext, ClassComponent>;
70
76
  visitResult(ctx: ParserRuleContext): any;
71
- protected handleImportFile(name: string, throwErrors?: boolean, ctx?: ParserRuleContext | null): Promise<ImportFile>;
77
+ protected handleImportFile(name: string, importHandling: ImportFunctionHandling, throwErrors?: boolean, ctx?: ParserRuleContext | null, specificImports?: string[]): Promise<ImportFile>;
72
78
  visitRoundedBracketsExpr: (ctx: RoundedBracketsExprContext) => void;
73
79
  protected setupDefinedParameters(funcDefinedParameters: FunctionDefinedParameter[], passedInParameters: CallableParameter[], executor: ExecutionContext): void;
74
80
  protected runExpressions(executor: ExecutionContext, expressions: ExpressionContext[] | Function_exprContext[]): ComplexType;
75
81
  protected getNetNamespace(executorNetNamespace: string, passedNetNamespace: string | null): string;
76
82
  protected setInstanceParam(object: ClassComponent, trailers: string[], value: any): void;
77
83
  protected getInstanceParam<T>(object: ClassComponent, trailers: string[]): T;
78
- protected enterNewChildContext(executionStack: ExecutionContext[], parentContext: ExecutionContext, executionContextName: string, options: CFunctionOptions, funcDefinedParameters: FunctionDefinedParameter[], passedInParameters: CallableParameter[]): ExecutionContext;
84
+ protected enterNewChildContext(executionStack: ExecutionContext[], parentContext: ExecutionContext, executionContextName: string, options: NewContextOptions, funcDefinedParameters: FunctionDefinedParameter[], passedInParameters: CallableParameter[]): ExecutionContext;
79
85
  protected prepareStringValue(value: string): string;
80
86
  protected throwWithContext(context: ParserRuleContext, messageOrError: string | BaseError): void;
81
87
  protected validateType(value: any, context: ParserRuleContext, validateFunction: (value: any) => boolean, expectedType: string): boolean;
@@ -89,5 +95,6 @@ type ImportFile = {
89
95
  hasError: boolean;
90
96
  hasParseError: boolean;
91
97
  pathExists: boolean;
98
+ importedModule: ImportedModule;
92
99
  };
93
100
  export {};
@@ -25,48 +25,49 @@ export declare class CircuitScriptLexer extends antlr.Lexer {
25
25
  static readonly Return = 23;
26
26
  static readonly Define = 24;
27
27
  static readonly Import = 25;
28
- static readonly For = 26;
29
- static readonly In = 27;
30
- static readonly While = 28;
31
- static readonly Continue = 29;
32
- static readonly If = 30;
33
- static readonly Else = 31;
34
- static readonly Not = 32;
35
- static readonly Frame = 33;
36
- static readonly Sheet = 34;
37
- static readonly Equals = 35;
38
- static readonly NotEquals = 36;
39
- static readonly GreaterThan = 37;
40
- static readonly GreatOrEqualThan = 38;
41
- static readonly LessThan = 39;
42
- static readonly LessOrEqualThan = 40;
43
- static readonly LogicalAnd = 41;
44
- static readonly LogicalOr = 42;
45
- static readonly Addition = 43;
46
- static readonly Minus = 44;
47
- static readonly Divide = 45;
48
- static readonly Multiply = 46;
49
- static readonly Modulus = 47;
50
- static readonly AdditionAssign = 48;
51
- static readonly MinusAssign = 49;
52
- static readonly DivideAssign = 50;
53
- static readonly MultiplyAssign = 51;
54
- static readonly ModulusAssign = 52;
55
- static readonly ANNOTATION_START = 53;
56
- static readonly OPEN_PAREN = 54;
57
- static readonly CLOSE_PAREN = 55;
58
- static readonly NOT_CONNECTED = 56;
59
- static readonly BOOLEAN_VALUE = 57;
60
- static readonly ID = 58;
61
- static readonly INTEGER_VALUE = 59;
62
- static readonly DECIMAL_VALUE = 60;
63
- static readonly NUMERIC_VALUE = 61;
64
- static readonly STRING_VALUE = 62;
65
- static readonly PERCENTAGE_VALUE = 63;
66
- static readonly ALPHA_NUMERIC = 64;
67
- static readonly WS = 65;
68
- static readonly NEWLINE = 66;
69
- static readonly COMMENT = 67;
28
+ static readonly From = 26;
29
+ static readonly For = 27;
30
+ static readonly In = 28;
31
+ static readonly While = 29;
32
+ static readonly Continue = 30;
33
+ static readonly If = 31;
34
+ static readonly Else = 32;
35
+ static readonly Not = 33;
36
+ static readonly Frame = 34;
37
+ static readonly Sheet = 35;
38
+ static readonly Equals = 36;
39
+ static readonly NotEquals = 37;
40
+ static readonly GreaterThan = 38;
41
+ static readonly GreatOrEqualThan = 39;
42
+ static readonly LessThan = 40;
43
+ static readonly LessOrEqualThan = 41;
44
+ static readonly LogicalAnd = 42;
45
+ static readonly LogicalOr = 43;
46
+ static readonly Addition = 44;
47
+ static readonly Minus = 45;
48
+ static readonly Divide = 46;
49
+ static readonly Multiply = 47;
50
+ static readonly Modulus = 48;
51
+ static readonly AdditionAssign = 49;
52
+ static readonly MinusAssign = 50;
53
+ static readonly DivideAssign = 51;
54
+ static readonly MultiplyAssign = 52;
55
+ static readonly ModulusAssign = 53;
56
+ static readonly ANNOTATION_START = 54;
57
+ static readonly OPEN_PAREN = 55;
58
+ static readonly CLOSE_PAREN = 56;
59
+ static readonly NOT_CONNECTED = 57;
60
+ static readonly BOOLEAN_VALUE = 58;
61
+ static readonly ID = 59;
62
+ static readonly INTEGER_VALUE = 60;
63
+ static readonly DECIMAL_VALUE = 61;
64
+ static readonly NUMERIC_VALUE = 62;
65
+ static readonly STRING_VALUE = 63;
66
+ static readonly PERCENTAGE_VALUE = 64;
67
+ static readonly ALPHA_NUMERIC = 65;
68
+ static readonly WS = 66;
69
+ static readonly NEWLINE = 67;
70
+ static readonly COMMENT = 68;
70
71
  static readonly channelNames: string[];
71
72
  static readonly literalNames: (string | null)[];
72
73
  static readonly symbolicNames: (string | null)[];
@@ -27,50 +27,51 @@ export declare class CircuitScriptParser extends antlr.Parser {
27
27
  static readonly Return = 23;
28
28
  static readonly Define = 24;
29
29
  static readonly Import = 25;
30
- static readonly For = 26;
31
- static readonly In = 27;
32
- static readonly While = 28;
33
- static readonly Continue = 29;
34
- static readonly If = 30;
35
- static readonly Else = 31;
36
- static readonly Not = 32;
37
- static readonly Frame = 33;
38
- static readonly Sheet = 34;
39
- static readonly Equals = 35;
40
- static readonly NotEquals = 36;
41
- static readonly GreaterThan = 37;
42
- static readonly GreatOrEqualThan = 38;
43
- static readonly LessThan = 39;
44
- static readonly LessOrEqualThan = 40;
45
- static readonly LogicalAnd = 41;
46
- static readonly LogicalOr = 42;
47
- static readonly Addition = 43;
48
- static readonly Minus = 44;
49
- static readonly Divide = 45;
50
- static readonly Multiply = 46;
51
- static readonly Modulus = 47;
52
- static readonly AdditionAssign = 48;
53
- static readonly MinusAssign = 49;
54
- static readonly DivideAssign = 50;
55
- static readonly MultiplyAssign = 51;
56
- static readonly ModulusAssign = 52;
57
- static readonly ANNOTATION_START = 53;
58
- static readonly OPEN_PAREN = 54;
59
- static readonly CLOSE_PAREN = 55;
60
- static readonly NOT_CONNECTED = 56;
61
- static readonly BOOLEAN_VALUE = 57;
62
- static readonly ID = 58;
63
- static readonly INTEGER_VALUE = 59;
64
- static readonly DECIMAL_VALUE = 60;
65
- static readonly NUMERIC_VALUE = 61;
66
- static readonly STRING_VALUE = 62;
67
- static readonly PERCENTAGE_VALUE = 63;
68
- static readonly ALPHA_NUMERIC = 64;
69
- static readonly WS = 65;
70
- static readonly NEWLINE = 66;
71
- static readonly COMMENT = 67;
72
- static readonly INDENT = 68;
73
- static readonly DEDENT = 69;
30
+ static readonly From = 26;
31
+ static readonly For = 27;
32
+ static readonly In = 28;
33
+ static readonly While = 29;
34
+ static readonly Continue = 30;
35
+ static readonly If = 31;
36
+ static readonly Else = 32;
37
+ static readonly Not = 33;
38
+ static readonly Frame = 34;
39
+ static readonly Sheet = 35;
40
+ static readonly Equals = 36;
41
+ static readonly NotEquals = 37;
42
+ static readonly GreaterThan = 38;
43
+ static readonly GreatOrEqualThan = 39;
44
+ static readonly LessThan = 40;
45
+ static readonly LessOrEqualThan = 41;
46
+ static readonly LogicalAnd = 42;
47
+ static readonly LogicalOr = 43;
48
+ static readonly Addition = 44;
49
+ static readonly Minus = 45;
50
+ static readonly Divide = 46;
51
+ static readonly Multiply = 47;
52
+ static readonly Modulus = 48;
53
+ static readonly AdditionAssign = 49;
54
+ static readonly MinusAssign = 50;
55
+ static readonly DivideAssign = 51;
56
+ static readonly MultiplyAssign = 52;
57
+ static readonly ModulusAssign = 53;
58
+ static readonly ANNOTATION_START = 54;
59
+ static readonly OPEN_PAREN = 55;
60
+ static readonly CLOSE_PAREN = 56;
61
+ static readonly NOT_CONNECTED = 57;
62
+ static readonly BOOLEAN_VALUE = 58;
63
+ static readonly ID = 59;
64
+ static readonly INTEGER_VALUE = 60;
65
+ static readonly DECIMAL_VALUE = 61;
66
+ static readonly NUMERIC_VALUE = 62;
67
+ static readonly STRING_VALUE = 63;
68
+ static readonly PERCENTAGE_VALUE = 64;
69
+ static readonly ALPHA_NUMERIC = 65;
70
+ static readonly WS = 66;
71
+ static readonly NEWLINE = 67;
72
+ static readonly COMMENT = 68;
73
+ static readonly INDENT = 69;
74
+ static readonly DEDENT = 70;
74
75
  static readonly RULE_script = 0;
75
76
  static readonly RULE_expression = 1;
76
77
  static readonly RULE_flow_expressions = 2;
@@ -885,9 +886,34 @@ export declare class Point_exprContext extends antlr.ParserRuleContext {
885
886
  }
886
887
  export declare class Import_exprContext extends antlr.ParserRuleContext {
887
888
  constructor(parent: antlr.ParserRuleContext | null, invokingState: number);
889
+ get ruleIndex(): number;
890
+ copyFrom(ctx: Import_exprContext): void;
891
+ }
892
+ export declare class Import_specificContext extends Import_exprContext {
893
+ _moduleName?: Token | null;
894
+ _ID?: Token | null;
895
+ _funcNames: antlr.Token[];
896
+ constructor(ctx: Import_exprContext);
897
+ From(): antlr.TerminalNode;
898
+ Import(): antlr.TerminalNode;
899
+ ID(): antlr.TerminalNode[];
900
+ ID(i: number): antlr.TerminalNode | null;
901
+ accept<Result>(visitor: CircuitScriptVisitor<Result>): Result | null;
902
+ }
903
+ export declare class Import_all_simpleContext extends Import_exprContext {
904
+ _moduleName?: Token | null;
905
+ constructor(ctx: Import_exprContext);
906
+ From(): antlr.TerminalNode;
907
+ Import(): antlr.TerminalNode;
908
+ Multiply(): antlr.TerminalNode;
909
+ ID(): antlr.TerminalNode;
910
+ accept<Result>(visitor: CircuitScriptVisitor<Result>): Result | null;
911
+ }
912
+ export declare class Import_simpleContext extends Import_exprContext {
913
+ _moduleName?: Token | null;
914
+ constructor(ctx: Import_exprContext);
888
915
  Import(): antlr.TerminalNode;
889
916
  ID(): antlr.TerminalNode;
890
- get ruleIndex(): number;
891
917
  accept<Result>(visitor: CircuitScriptVisitor<Result>): Result | null;
892
918
  }
893
919
  export declare class Frame_exprContext extends antlr.ParserRuleContext {
@@ -71,7 +71,9 @@ import { Wire_expr_direction_onlyContext } from "./CircuitScriptParser.js";
71
71
  import { Wire_exprContext } from "./CircuitScriptParser.js";
72
72
  import { Array_exprContext } from "./CircuitScriptParser.js";
73
73
  import { Point_exprContext } from "./CircuitScriptParser.js";
74
- import { Import_exprContext } from "./CircuitScriptParser.js";
74
+ import { Import_simpleContext } from "./CircuitScriptParser.js";
75
+ import { Import_all_simpleContext } from "./CircuitScriptParser.js";
76
+ import { Import_specificContext } from "./CircuitScriptParser.js";
75
77
  import { Frame_exprContext } from "./CircuitScriptParser.js";
76
78
  import { If_exprContext } from "./CircuitScriptParser.js";
77
79
  import { If_inner_exprContext } from "./CircuitScriptParser.js";
@@ -159,7 +161,9 @@ export declare class CircuitScriptVisitor<Result> extends AbstractParseTreeVisit
159
161
  visitWire_expr?: (ctx: Wire_exprContext) => Result;
160
162
  visitArray_expr?: (ctx: Array_exprContext) => Result;
161
163
  visitPoint_expr?: (ctx: Point_exprContext) => Result;
162
- visitImport_expr?: (ctx: Import_exprContext) => Result;
164
+ visitImport_simple?: (ctx: Import_simpleContext) => Result;
165
+ visitImport_all_simple?: (ctx: Import_all_simpleContext) => Result;
166
+ visitImport_specific?: (ctx: Import_specificContext) => Result;
163
167
  visitFrame_expr?: (ctx: Frame_exprContext) => Result;
164
168
  visitIf_expr?: (ctx: If_exprContext) => Result;
165
169
  visitIf_inner_expr?: (ctx: If_inner_exprContext) => Result;
@@ -35,4 +35,5 @@ export declare class NodeScriptEnvironment {
35
35
  getCurrentFile(): string;
36
36
  getRelativeToCurrentFolder(filePath: string): string;
37
37
  exists(path: PathLike): Promise<boolean>;
38
+ hashStringSHA256(value: string): string;
38
39
  }
@@ -79,12 +79,12 @@ export declare class ExecutionContext {
79
79
  resetBreakContextFunctionCalls(): void;
80
80
  popBreakContext(): ParserRuleContext;
81
81
  getBreakContext(): ParserRuleContext;
82
- createFunction(functionName: string, __runFunc: CFunction, source?: ParserRuleContext, uniqueId?: string): void;
82
+ createFunction(namespace: string, functionName: string, __runFunc: CFunction, source?: ParserRuleContext, uniqueId?: string): void;
83
83
  hasFunction(functionName: string): boolean;
84
84
  getFunction(functionName: string): CFunctionEntry;
85
85
  resolveVariable(executionStack: ExecutionContext[], idName: string, trailers?: string[]): AnyReference;
86
86
  resolveTrailers(type: ReferenceTypes, item: any, trailers?: string[]): AnyReference;
87
- callFunction(functionName: string, functionParams: CallableParameter[], executionStack: ExecutionContext[], netNamespace: string): CFunctionResult;
87
+ callFunction(functionReference: AnyReference, functionParams: CallableParameter[], executionStack: ExecutionContext[], netNamespace: string): CFunctionResult;
88
88
  mergeScope(childScope: ExecutionScope, namespace: string): ClassComponent[];
89
89
  addWire(segments: [string, (number | UnitDimension)?][]): Wire;
90
90
  addPoint(pointId: string, userDefined?: boolean): ComponentPin;
@@ -1,6 +1,7 @@
1
1
  export declare const TOOL_VERSION = "0.1.5";
2
2
  export declare const Delimiter1 = "-";
3
3
  export declare const DoubleDelimiter1 = "--";
4
+ export declare const BaseNamespace = "--.";
4
5
  export declare enum GlobalNames {
5
6
  __root = "--root",
6
7
  symbol = "symbol"
@@ -82,6 +83,7 @@ export declare enum ReferenceTypes {
82
83
  variable = "variable",
83
84
  instance = "instance",
84
85
  pinType = "pinType",
86
+ module = "module",
85
87
  unknown = "unknown"
86
88
  }
87
89
  export declare enum BlockTypes {
@@ -1,6 +1,6 @@
1
1
  import { ClassComponent } from './ClassComponent.js';
2
2
  import { Net } from './Net.js';
3
- import { CFunction, CFunctionEntry, ComponentPinNet, ComponentPinNetPair, ComponentPinWireId, ParseSymbolType, ValueType } from './types.js';
3
+ import { CFunction, CFunctionEntry, ComponentPinNet, ComponentPinNetPair, ComponentPinWireId, ImportedModule, ParseSymbolType, ValueType } from './types.js';
4
4
  import { BlockTypes, LayoutDirection } from '../globals.js';
5
5
  import { Wire, WireSegment } from './Wire.js';
6
6
  import { Frame } from './Frame.js';
@@ -19,6 +19,7 @@ export declare class ExecutionScope {
19
19
  symbols: Map<string, {
20
20
  type: ParseSymbolType;
21
21
  }>;
22
+ modules: Map<string, ImportedModule>;
22
23
  blockStack: Map<number, BlockStackEntry>;
23
24
  contextStack: ParserRuleContext[];
24
25
  onPropertyHandler: OnPropertyHandler[];
@@ -59,6 +60,7 @@ export declare class ExecutionScope {
59
60
  popOnPropertyHandler(): OnPropertyHandler;
60
61
  triggerPropertyHandler(visitor: BaseVisitor, value: any, valueCtx: ParserRuleContext): void;
61
62
  getInstances(): ClassComponent[];
63
+ copyTo(scope: ExecutionScope): void;
62
64
  }
63
65
  export declare enum SequenceAction {
64
66
  To = "to",
@@ -8,16 +8,23 @@ import { PinId } from './PinDefinition.js';
8
8
  export type CFunction = (args: CallableParameter[], options?: CFunctionOptions) => CFunctionResult;
9
9
  export declare class CFunctionEntry {
10
10
  name: string;
11
+ namespace: string;
12
+ originalNamespace: string;
11
13
  execute: CFunction;
12
14
  uniqueId?: string;
13
15
  source?: ParserRuleContext;
14
- constructor(name: string, execute: CFunction, source?: ParserRuleContext, uniqueId?: string);
16
+ constructor(namespace: string, name: string, execute: CFunction, source?: ParserRuleContext, uniqueId?: string);
15
17
  toString(): string;
16
18
  }
17
19
  export type CFunctionOptions = {
18
20
  netNamespace?: string;
19
21
  functionCallIndex: number;
20
22
  };
23
+ export type NewContextOptions = {
24
+ netNamespace?: string;
25
+ namespace?: string;
26
+ functionCallIndex: number;
27
+ };
21
28
  export type CFunctionResult = [
22
29
  executionContext: ExecutionContext,
23
30
  result: ValueType | ClassComponent | null
@@ -113,3 +120,17 @@ export declare enum NetTypes {
113
120
  Any = "any",
114
121
  Source = "source"
115
122
  }
123
+ export declare class ImportedModule {
124
+ moduleName: string;
125
+ context: ExecutionContext;
126
+ importHandlingFlag: ImportFunctionHandling;
127
+ specifiedImports: string[];
128
+ moduleNamespace: string;
129
+ moduleFilePath: string;
130
+ constructor(moduleName: string, moduleNamespace: string, moduleFilePath: string, context: ExecutionContext, flag: ImportFunctionHandling, specifiedImports: string[]);
131
+ }
132
+ export declare enum ImportFunctionHandling {
133
+ AllWithNamespace = "all-with-namespace",
134
+ AllMergeIntoNamespace = "all-merge-into-namespace",
135
+ SpecificMergeIntoNamespace = "specific-merge-into-namespace"
136
+ }
@@ -18,6 +18,7 @@ export declare class SymbolTable {
18
18
  searchParentContext(executionContext: ExecutionContext, id: string): ExecutionContext | null;
19
19
  clearUndefined(): void;
20
20
  }
21
+ export declare function cloneSymbol(symbol: SymbolTableItemDefined): SymbolTableItemDefined;
21
22
  export type SymbolTableItemDefined = {
22
23
  id: string;
23
24
  type: ParseSymbolType;
@@ -1,5 +1,5 @@
1
1
  import { TerminalNode, Token } from "antlr4ng";
2
- import { Import_exprContext, Assignment_exprContext, Atom_exprContext, Function_call_exprContext, ValueAtomExprContext, UnaryOperatorExprContext, MultiplyExprContext, AdditionExprContext, BinaryOperatorExprContext, DataExprContext, Function_def_exprContext, For_exprContext } from "src/antlr/CircuitScriptParser";
2
+ import { Assignment_exprContext, Atom_exprContext, Function_call_exprContext, ValueAtomExprContext, UnaryOperatorExprContext, MultiplyExprContext, AdditionExprContext, BinaryOperatorExprContext, DataExprContext, Function_def_exprContext, For_exprContext, Import_simpleContext, Import_all_simpleContext, Import_specificContext } from "../antlr/CircuitScriptParser.js";
3
3
  import { ExecutionContext } from "../execute.js";
4
4
  import { ComplexType, FunctionDefinedParameter } from "../objects/types.js";
5
5
  import { SymbolTableItem } from "./SymbolTable.js";
@@ -16,7 +16,11 @@ export declare class SymbolValidatorVisitor extends BaseVisitor {
16
16
  protected handleAtomSymbol(atom: TerminalNode): SymbolTableItem;
17
17
  protected addSymbolInstance(symbol: SymbolTableItem, token: Token): void;
18
18
  setSymbols(symbolTable: SymbolTable): void;
19
- visitImport_expr: (ctx: Import_exprContext) => void;
19
+ private importCommon;
20
+ visitImport_simple: (ctx: Import_simpleContext) => Promise<void>;
21
+ visitImport_all_simple: (ctx: Import_all_simpleContext) => Promise<void>;
22
+ visitImport_specific: (ctx: Import_specificContext) => Promise<void>;
23
+ private applyModuleImports;
20
24
  visitAssignment_expr: (ctx: Assignment_exprContext) => ComplexType;
21
25
  visitAtom_expr: (ctx: Atom_exprContext) => void;
22
26
  visitFunction_call_expr: (ctx: Function_call_exprContext) => void;
@@ -4,10 +4,12 @@ import { PinTypes } from './objects/PinTypes.js';
4
4
  import { ComponentPin, ComponentPinNet, ComponentPinNetPair } from './objects/types.js';
5
5
  import { ExecutionWarning } from "./utils.js";
6
6
  import { Net } from './objects/Net.js';
7
- import { BaseVisitor } from './BaseVisitor.js';
7
+ import { BaseVisitor, OnErrorHandler } from './BaseVisitor.js';
8
8
  import { ParserRuleContext } from 'antlr4ng';
9
9
  import { Wire } from './objects/Wire.js';
10
+ import { NodeScriptEnvironment } from './environment.js';
10
11
  export declare class ParserVisitor extends BaseVisitor {
12
+ constructor(silent: boolean | undefined, onErrorHandler: OnErrorHandler | null | undefined, environment: NodeScriptEnvironment);
11
13
  componentCreationIndex: number;
12
14
  creationCtx: Map<ClassComponent | Wire, ParserRuleContext>;
13
15
  visitKeyword_assignment_expr: (ctx: Keyword_assignment_exprContext) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "circuitscript",
3
- "version": "0.1.29",
3
+ "version": "0.1.31",
4
4
  "description": "Interpreter for the circuitscript language",
5
5
  "homepage": "https://circuitscript.net",
6
6
  "engines": {
@@ -25,6 +25,7 @@
25
25
  ],
26
26
  "devDependencies": {
27
27
  "@types/big.js": "^6.2.2",
28
+ "@types/crypto-js": "^4.2.2",
28
29
  "@types/figlet": "^1.5.8",
29
30
  "@types/jest": "~29.5",
30
31
  "@types/node": "~18",
@@ -49,6 +50,7 @@
49
50
  "scripts": {
50
51
  "start": "node build/src/main.js",
51
52
  "clean": "rimraf coverage build tmp dist",
53
+ "compile": "npm run build",
52
54
  "build": "npm run copy-assets ; npm run build:cjs ; npm run build:esm",
53
55
  "build:cjs": "tsc -p tsconfig.cjs.json",
54
56
  "build:release:cjs": "tsc -p tsconfig.release.cjs.json",
@@ -86,6 +88,7 @@
86
88
  "antlr4ng": "^3.0.4",
87
89
  "big.js": "^6.2.2",
88
90
  "commander": "^11.1.0",
91
+ "crypto-js": "^4.2.0",
89
92
  "express": "^4.18.2",
90
93
  "figlet": "^1.7.0",
91
94
  "lodash": "^4.17.21",