cashc 0.6.4 → 0.7.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.
Files changed (94) hide show
  1. package/README.md +7 -9
  2. package/dist/main/Errors.d.ts +13 -10
  3. package/dist/main/Errors.js +28 -18
  4. package/dist/main/artifact/Artifact.d.ts +1 -1
  5. package/dist/main/artifact/Artifact.js +3 -4
  6. package/dist/main/ast/AST.d.ts +32 -8
  7. package/dist/main/ast/AST.js +26 -4
  8. package/dist/main/ast/AstBuilder.d.ts +8 -7
  9. package/dist/main/ast/AstBuilder.js +99 -85
  10. package/dist/main/ast/AstTraversal.d.ts +4 -2
  11. package/dist/main/ast/AstTraversal.js +9 -2
  12. package/dist/main/ast/AstVisitor.d.ts +3 -1
  13. package/dist/main/ast/Globals.d.ts +6 -15
  14. package/dist/main/ast/Globals.js +25 -45
  15. package/dist/main/ast/Location.d.ts +1 -1
  16. package/dist/main/ast/Operator.d.ts +18 -1
  17. package/dist/main/ast/Operator.js +19 -1
  18. package/dist/main/ast/Pragma.d.ts +1 -1
  19. package/dist/main/ast/SymbolTable.d.ts +1 -1
  20. package/dist/main/ast/ThrowingErrorListener.js +3 -3
  21. package/dist/main/cashc-cli.js +10 -9
  22. package/dist/main/compiler.d.ts +1 -1
  23. package/dist/main/compiler.js +20 -22
  24. package/dist/main/generation/GenerateTargetTraversal.d.ts +4 -9
  25. package/dist/main/generation/GenerateTargetTraversal.js +56 -186
  26. package/dist/main/generation/utils.d.ts +3 -2
  27. package/dist/main/generation/utils.js +62 -44
  28. package/dist/main/grammar/CashScriptLexer.d.ts +25 -15
  29. package/dist/main/grammar/CashScriptLexer.js +389 -317
  30. package/dist/main/grammar/CashScriptListener.d.ts +40 -5
  31. package/dist/main/grammar/CashScriptParser.d.ts +71 -27
  32. package/dist/main/grammar/CashScriptParser.js +709 -418
  33. package/dist/main/grammar/CashScriptVisitor.d.ts +25 -3
  34. package/dist/main/index.d.ts +3 -3
  35. package/dist/main/index.js +10 -6
  36. package/dist/main/print/OutputSourceCodeTraversal.d.ts +4 -2
  37. package/dist/main/print/OutputSourceCodeTraversal.js +22 -3
  38. package/dist/main/semantic/EnsureFinalRequireTraversal.d.ts +2 -2
  39. package/dist/main/semantic/EnsureFinalRequireTraversal.js +9 -9
  40. package/dist/main/semantic/SymbolTableTraversal.d.ts +4 -2
  41. package/dist/main/semantic/SymbolTableTraversal.js +44 -24
  42. package/dist/main/semantic/TypeCheckTraversal.d.ts +4 -2
  43. package/dist/main/semantic/TypeCheckTraversal.js +99 -47
  44. package/dist/module/Errors.d.ts +13 -10
  45. package/dist/module/Errors.js +16 -7
  46. package/dist/module/artifact/Artifact.d.ts +1 -1
  47. package/dist/module/artifact/Artifact.js +1 -2
  48. package/dist/module/ast/AST.d.ts +32 -8
  49. package/dist/module/ast/AST.js +23 -3
  50. package/dist/module/ast/AstBuilder.d.ts +8 -7
  51. package/dist/module/ast/AstBuilder.js +33 -19
  52. package/dist/module/ast/AstTraversal.d.ts +4 -2
  53. package/dist/module/ast/AstTraversal.js +8 -1
  54. package/dist/module/ast/AstVisitor.d.ts +3 -1
  55. package/dist/module/ast/Globals.d.ts +6 -15
  56. package/dist/module/ast/Globals.js +11 -31
  57. package/dist/module/ast/Location.d.ts +1 -1
  58. package/dist/module/ast/Operator.d.ts +18 -1
  59. package/dist/module/ast/Operator.js +18 -0
  60. package/dist/module/ast/Pragma.d.ts +1 -1
  61. package/dist/module/ast/SymbolTable.d.ts +1 -1
  62. package/dist/module/ast/ThrowingErrorListener.js +2 -2
  63. package/dist/module/cashc-cli.js +2 -1
  64. package/dist/module/compiler.d.ts +1 -1
  65. package/dist/module/compiler.js +9 -11
  66. package/dist/module/generation/GenerateTargetTraversal.d.ts +4 -9
  67. package/dist/module/generation/GenerateTargetTraversal.js +30 -160
  68. package/dist/module/generation/utils.d.ts +3 -2
  69. package/dist/module/generation/utils.js +23 -6
  70. package/dist/module/grammar/CashScriptLexer.d.ts +25 -15
  71. package/dist/module/grammar/CashScriptLexer.js +384 -316
  72. package/dist/module/grammar/CashScriptListener.d.ts +40 -5
  73. package/dist/module/grammar/CashScriptParser.d.ts +71 -27
  74. package/dist/module/grammar/CashScriptParser.js +699 -415
  75. package/dist/module/grammar/CashScriptVisitor.d.ts +25 -3
  76. package/dist/module/index.d.ts +3 -3
  77. package/dist/module/index.js +3 -3
  78. package/dist/module/print/OutputSourceCodeTraversal.d.ts +4 -2
  79. package/dist/module/print/OutputSourceCodeTraversal.js +20 -1
  80. package/dist/module/semantic/EnsureFinalRequireTraversal.d.ts +2 -2
  81. package/dist/module/semantic/EnsureFinalRequireTraversal.js +3 -3
  82. package/dist/module/semantic/SymbolTableTraversal.d.ts +4 -2
  83. package/dist/module/semantic/SymbolTableTraversal.js +24 -4
  84. package/dist/module/semantic/TypeCheckTraversal.d.ts +4 -2
  85. package/dist/module/semantic/TypeCheckTraversal.js +56 -4
  86. package/package.json +2 -2
  87. package/dist/main/generation/preimage.d.ts +0 -10
  88. package/dist/main/generation/preimage.js +0 -57
  89. package/dist/main/semantic/VerifyCovenantTraversal.d.ts +0 -12
  90. package/dist/main/semantic/VerifyCovenantTraversal.js +0 -63
  91. package/dist/module/generation/preimage.d.ts +0 -10
  92. package/dist/module/generation/preimage.js +0 -54
  93. package/dist/module/semantic/VerifyCovenantTraversal.d.ts +0 -12
  94. package/dist/module/semantic/VerifyCovenantTraversal.js +0 -57
package/README.md CHANGED
@@ -26,13 +26,11 @@ npm install -g cashc
26
26
  Usage: cashc [options] [source_file]
27
27
 
28
28
  Options:
29
- --output, -o Specify a file to output the generated artifact. [string]
30
- --hex, -h Compile the contract to hex format rather than a full artifact
31
- [boolean]
32
- --asm, -A Compile the contract to ASM format rather than a full artifact
33
- [boolean]
34
- --opcount, -c Display the number of opcodes in the compiled bytecode[boolean]
35
- --size, -s Display the size in bytes of the compiled bytecode [boolean]
36
- --help Show help [boolean]
37
- --version Show version number [boolean]
29
+ -V, --version Output the version number.
30
+ -o, --output <path> Specify a file to output the generated artifact.
31
+ -h, --hex Compile the contract to hex format rather than a full artifact.
32
+ -A, --asm Compile the contract to ASM format rather than a full artifact.
33
+ -c, --opcount Display the number of opcodes in the compiled bytecode.
34
+ -s, --size Display the size in bytes of the compiled bytecode.
35
+ -?, --help Display help
38
36
  ```
@@ -1,7 +1,7 @@
1
- import { Type, PrimitiveType } from '@cashscript/utils';
2
- import { IdentifierNode, FunctionDefinitionNode, VariableDefinitionNode, ParameterNode, Node, FunctionCallNode, BinaryOpNode, UnaryOpNode, TimeOpNode, CastNode, AssignNode, BranchNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode, StatementNode, ContractNode } from './ast/AST';
3
- import { Symbol, SymbolType } from './ast/SymbolTable';
4
- import { Location, Point } from './ast/Location';
1
+ import { Type } from '@cashscript/utils';
2
+ import { IdentifierNode, FunctionDefinitionNode, VariableDefinitionNode, ParameterNode, Node, FunctionCallNode, BinaryOpNode, UnaryOpNode, TimeOpNode, CastNode, AssignNode, BranchNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode, StatementNode, ContractNode, ExpressionNode } from './ast/AST.js';
3
+ import { Symbol, SymbolType } from './ast/SymbolTable.js';
4
+ import { Location, Point } from './ast/Location.js';
5
5
  export declare class CashScriptError extends Error {
6
6
  node: Node;
7
7
  constructor(node: Node, message: string);
@@ -45,9 +45,9 @@ export declare class FinalRequireStatementError extends CashScriptError {
45
45
  constructor(node: StatementNode);
46
46
  }
47
47
  export declare class TypeError extends CashScriptError {
48
- actual?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined;
49
- expected?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined;
50
- constructor(node: Node, actual?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined, expected?: PrimitiveType | import("@cashscript/utils").ArrayType | import("@cashscript/utils").TupleType | import("@cashscript/utils").BytesType | Type[] | undefined, message?: string);
48
+ actual?: Type | Type[] | undefined;
49
+ expected?: Type | Type[] | undefined;
50
+ constructor(node: Node, actual?: Type | Type[] | undefined, expected?: Type | Type[] | undefined, message?: string);
51
51
  }
52
52
  export declare class InvalidParameterTypeError extends TypeError {
53
53
  constructor(node: FunctionCallNode | RequireNode | InstantiationNode, actual: Type[], expected: Type[]);
@@ -67,9 +67,15 @@ export declare class CastSizeError extends CashScriptError {
67
67
  export declare class AssignTypeError extends TypeError {
68
68
  constructor(node: AssignNode | VariableDefinitionNode);
69
69
  }
70
+ export declare class TupleAssignmentError extends CashScriptError {
71
+ constructor(node: ExpressionNode);
72
+ }
70
73
  export declare class ConstantConditionError extends CashScriptError {
71
74
  constructor(node: BranchNode | RequireNode, res: boolean);
72
75
  }
76
+ export declare class ConstantModificationError extends CashScriptError {
77
+ constructor(node: VariableDefinitionNode);
78
+ }
73
79
  export declare class ArrayElementError extends CashScriptError {
74
80
  constructor(node: ArrayNode);
75
81
  }
@@ -79,6 +85,3 @@ export declare class IndexOutOfBoundsError extends CashScriptError {
79
85
  export declare class VersionError extends Error {
80
86
  constructor(actual: string, constraint: string);
81
87
  }
82
- export declare class UnverifiedCovenantError extends CashScriptError {
83
- constructor(node: IdentifierNode);
84
- }
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UnverifiedCovenantError = exports.VersionError = exports.IndexOutOfBoundsError = exports.ArrayElementError = exports.ConstantConditionError = exports.AssignTypeError = exports.CastSizeError = exports.CastTypeError = exports.UnsupportedTypeError = exports.UnequalTypeError = exports.InvalidParameterTypeError = exports.TypeError = exports.FinalRequireStatementError = exports.EmptyFunctionError = exports.EmptyContractError = exports.UnusedVariableError = exports.VariableRedefinitionError = exports.FunctionRedefinitionError = exports.RedefinitionError = exports.InvalidSymbolTypeError = exports.UndefinedReferenceError = exports.ParseError = exports.CashScriptError = void 0;
3
+ exports.VersionError = exports.IndexOutOfBoundsError = exports.ArrayElementError = exports.ConstantModificationError = exports.ConstantConditionError = exports.TupleAssignmentError = exports.AssignTypeError = exports.CastSizeError = exports.CastTypeError = exports.UnsupportedTypeError = exports.UnequalTypeError = exports.InvalidParameterTypeError = exports.TypeError = exports.FinalRequireStatementError = exports.EmptyFunctionError = exports.EmptyContractError = exports.UnusedVariableError = exports.VariableRedefinitionError = exports.FunctionRedefinitionError = exports.RedefinitionError = exports.InvalidSymbolTypeError = exports.UndefinedReferenceError = exports.ParseError = exports.CashScriptError = void 0;
4
4
  const utils_1 = require("@cashscript/utils");
5
- const AST_1 = require("./ast/AST");
6
- const Location_1 = require("./ast/Location");
5
+ const AST_js_1 = require("./ast/AST.js");
6
+ const Location_js_1 = require("./ast/Location.js");
7
7
  class CashScriptError extends Error {
8
8
  constructor(node, message) {
9
9
  if (node.location) {
@@ -17,7 +17,7 @@ class CashScriptError extends Error {
17
17
  exports.CashScriptError = CashScriptError;
18
18
  class ParseError extends Error {
19
19
  constructor(message, location) {
20
- const start = location instanceof Location_1.Point ? location : location === null || location === void 0 ? void 0 : location.start;
20
+ const start = location instanceof Location_js_1.Point ? location : location === null || location === void 0 ? void 0 : location.start;
21
21
  if (start) {
22
22
  message += ` at ${start}`;
23
23
  }
@@ -97,7 +97,7 @@ class TypeError extends CashScriptError {
97
97
  exports.TypeError = TypeError;
98
98
  class InvalidParameterTypeError extends TypeError {
99
99
  constructor(node, actual, expected) {
100
- const name = node instanceof AST_1.RequireNode ? 'require' : node.identifier.name;
100
+ const name = node instanceof AST_js_1.RequireNode ? 'require' : node.identifier.name;
101
101
  super(node, actual, expected, `Found parameters (${actual}) in call to function '${name}' where parameters (${expected}) were expected`);
102
102
  }
103
103
  }
@@ -112,7 +112,7 @@ class UnequalTypeError extends TypeError {
112
112
  exports.UnequalTypeError = UnequalTypeError;
113
113
  class UnsupportedTypeError extends TypeError {
114
114
  constructor(node, actual, expected) {
115
- if (node instanceof AST_1.BinaryOpNode && node.operator.startsWith('.')) {
115
+ if (node instanceof AST_js_1.BinaryOpNode && node.operator.startsWith('.')) {
116
116
  if (expected === utils_1.PrimitiveType.INT) {
117
117
  super(node, actual, expected, `Tried to call member 'split' with unsupported parameter type '${actual}'`);
118
118
  }
@@ -120,19 +120,23 @@ class UnsupportedTypeError extends TypeError {
120
120
  super(node, actual, expected, `Tried to call member 'split' on unsupported type '${actual}'`);
121
121
  }
122
122
  }
123
- else if (node instanceof AST_1.BinaryOpNode) {
123
+ else if (node instanceof AST_js_1.BinaryOpNode) {
124
124
  super(node, actual, expected, `Tried to apply operator '${node.operator}' to unsupported type '${actual}'`);
125
125
  }
126
- else if (node instanceof AST_1.UnaryOpNode && node.operator.startsWith('.')) {
126
+ else if (node instanceof AST_js_1.UnaryOpNode && node.operator.startsWith('.')) {
127
127
  super(node, actual, expected, `Tried to access member '${node.operator}' on unsupported type '${actual}'`);
128
128
  }
129
- else if (node instanceof AST_1.UnaryOpNode) {
129
+ else if (node instanceof AST_js_1.UnaryOpNode && node.operator.includes('[i]')) {
130
+ const [scope] = node.operator.split('[i]');
131
+ super(node, actual, expected, `Tried to index '${scope}''with unsupported type '${actual}'`);
132
+ }
133
+ else if (node instanceof AST_js_1.UnaryOpNode) {
130
134
  super(node, actual, expected, `Tried to apply operator '${node.operator}' to unsupported type '${actual}'`);
131
135
  }
132
- else if (node instanceof AST_1.TimeOpNode) {
136
+ else if (node instanceof AST_js_1.TimeOpNode) {
133
137
  super(node, actual, expected, `Tried to apply operator '>=' on unsupported type '${actual}'`);
134
138
  }
135
- else if (node instanceof AST_1.TupleIndexOpNode) {
139
+ else if (node instanceof AST_js_1.TupleIndexOpNode) {
136
140
  super(node, actual, expected, `Tried to index unsupported type '${actual}'`);
137
141
  }
138
142
  else {
@@ -155,17 +159,29 @@ class CastSizeError extends CashScriptError {
155
159
  exports.CastSizeError = CastSizeError;
156
160
  class AssignTypeError extends TypeError {
157
161
  constructor(node) {
158
- const expected = node instanceof AST_1.AssignNode ? node.identifier.type : node.type;
162
+ const expected = node instanceof AST_js_1.AssignNode ? node.identifier.type : node.type;
159
163
  super(node, node.expression.type, expected, `Type '${node.expression.type}' can not be assigned to variable of type '${expected}'`);
160
164
  }
161
165
  }
162
166
  exports.AssignTypeError = AssignTypeError;
167
+ class TupleAssignmentError extends CashScriptError {
168
+ constructor(node) {
169
+ super(node, 'Expression must return a tuple to use destructuring');
170
+ }
171
+ }
172
+ exports.TupleAssignmentError = TupleAssignmentError;
163
173
  class ConstantConditionError extends CashScriptError {
164
174
  constructor(node, res) {
165
175
  super(node, `Condition always evaluates to ${res}`);
166
176
  }
167
177
  }
168
178
  exports.ConstantConditionError = ConstantConditionError;
179
+ class ConstantModificationError extends CashScriptError {
180
+ constructor(node) {
181
+ super(node, `Tried to modify immutable variable '${node.name}'`);
182
+ }
183
+ }
184
+ exports.ConstantModificationError = ConstantModificationError;
169
185
  class ArrayElementError extends CashScriptError {
170
186
  constructor(node) {
171
187
  super(node, 'Incorrect elements in array');
@@ -186,10 +202,4 @@ class VersionError extends Error {
186
202
  }
187
203
  }
188
204
  exports.VersionError = VersionError;
189
- class UnverifiedCovenantError extends CashScriptError {
190
- constructor(node) {
191
- super(node, `Covenant variable ${node.name} was used without un-nested signature check`);
192
- }
193
- }
194
- exports.UnverifiedCovenantError = UnverifiedCovenantError;
195
205
  //# sourceMappingURL=Errors.js.map
@@ -1,3 +1,3 @@
1
1
  import { Artifact, Script } from '@cashscript/utils';
2
- import { Ast } from '../ast/AST';
2
+ import { Ast } from '../ast/AST.js';
3
3
  export declare function generateArtifact(ast: Ast, script: Script, source: string): Artifact;
@@ -2,20 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateArtifact = void 0;
4
4
  const utils_1 = require("@cashscript/utils");
5
- const __1 = require("..");
5
+ const index_js_1 = require("../index.js");
6
6
  function generateArtifact(ast, script, source) {
7
7
  const { contract } = ast;
8
8
  const constructorInputs = contract.parameters
9
9
  .map((parameter) => ({ name: parameter.name, type: parameter.type.toString() }));
10
10
  const abi = contract.functions.map((func) => ({
11
11
  name: func.name,
12
- covenant: func.preimageFields.length > 0,
13
12
  inputs: func.parameters.map((parameter) => ({
14
13
  name: parameter.name,
15
14
  type: parameter.type.toString(),
16
15
  })),
17
16
  }));
18
- const bytecode = utils_1.scriptToAsm(script);
17
+ const bytecode = (0, utils_1.scriptToAsm)(script);
19
18
  return {
20
19
  contractName: contract.name,
21
20
  constructorInputs,
@@ -24,7 +23,7 @@ function generateArtifact(ast, script, source) {
24
23
  source,
25
24
  compiler: {
26
25
  name: 'cashc',
27
- version: __1.version,
26
+ version: index_js_1.version,
28
27
  },
29
28
  updatedAt: new Date().toISOString(),
30
29
  };
@@ -1,9 +1,9 @@
1
1
  import { Type } from '@cashscript/utils';
2
- import { TimeOp, PreimageField } from './Globals';
3
- import AstVisitor from './AstVisitor';
4
- import { BinaryOperator, UnaryOperator } from './Operator';
5
- import { Location } from './Location';
6
- import { SymbolTable, Symbol } from './SymbolTable';
2
+ import { TimeOp } from './Globals.js';
3
+ import AstVisitor from './AstVisitor.js';
4
+ import { BinaryOperator, NullaryOperator, UnaryOperator } from './Operator.js';
5
+ import { Location } from './Location.js';
6
+ import { SymbolTable, Symbol } from './SymbolTable.js';
7
7
  export declare type Ast = SourceFileNode;
8
8
  export declare abstract class Node {
9
9
  location?: Location;
@@ -32,10 +32,9 @@ export declare class FunctionDefinitionNode extends Node implements Named {
32
32
  name: string;
33
33
  parameters: ParameterNode[];
34
34
  body: BlockNode;
35
- preimageFields: PreimageField[];
36
35
  symbolTable?: SymbolTable;
37
36
  opRolls: Map<string, IdentifierNode>;
38
- constructor(name: string, parameters: ParameterNode[], body: BlockNode, preimageFields: PreimageField[]);
37
+ constructor(name: string, parameters: ParameterNode[], body: BlockNode);
39
38
  accept<T>(visitor: AstVisitor<T>): T;
40
39
  }
41
40
  export declare class ParameterNode extends Node implements Named, Typed {
@@ -48,9 +47,29 @@ export declare abstract class StatementNode extends Node {
48
47
  }
49
48
  export declare class VariableDefinitionNode extends StatementNode implements Named, Typed {
50
49
  type: Type;
50
+ modifier: string;
51
51
  name: string;
52
52
  expression: ExpressionNode;
53
- constructor(type: Type, name: string, expression: ExpressionNode);
53
+ constructor(type: Type, modifier: string, name: string, expression: ExpressionNode);
54
+ accept<T>(visitor: AstVisitor<T>): T;
55
+ }
56
+ export declare class TupleAssignmentNode extends StatementNode {
57
+ var1: {
58
+ name: string;
59
+ type: Type;
60
+ };
61
+ var2: {
62
+ name: string;
63
+ type: Type;
64
+ };
65
+ tuple: ExpressionNode;
66
+ constructor(var1: {
67
+ name: string;
68
+ type: Type;
69
+ }, var2: {
70
+ name: string;
71
+ type: Type;
72
+ }, tuple: ExpressionNode);
54
73
  accept<T>(visitor: AstVisitor<T>): T;
55
74
  }
56
75
  export declare class AssignNode extends StatementNode {
@@ -124,6 +143,11 @@ export declare class UnaryOpNode extends ExpressionNode {
124
143
  constructor(operator: UnaryOperator, expression: ExpressionNode);
125
144
  accept<T>(visitor: AstVisitor<T>): T;
126
145
  }
146
+ export declare class NullaryOpNode extends ExpressionNode {
147
+ operator: NullaryOperator;
148
+ constructor(operator: NullaryOperator);
149
+ accept<T>(visitor: AstVisitor<T>): T;
150
+ }
127
151
  export declare class ArrayNode extends ExpressionNode {
128
152
  elements: ExpressionNode[];
129
153
  constructor(elements: ExpressionNode[]);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HexLiteralNode = exports.StringLiteralNode = exports.IntLiteralNode = exports.BoolLiteralNode = exports.LiteralNode = exports.IdentifierNode = exports.ArrayNode = exports.UnaryOpNode = exports.BinaryOpNode = exports.TupleIndexOpNode = exports.InstantiationNode = exports.FunctionCallNode = exports.CastNode = exports.ExpressionNode = exports.BlockNode = exports.BranchNode = exports.RequireNode = exports.TimeOpNode = exports.AssignNode = exports.VariableDefinitionNode = exports.StatementNode = exports.ParameterNode = exports.FunctionDefinitionNode = exports.ContractNode = exports.SourceFileNode = exports.Node = void 0;
3
+ exports.HexLiteralNode = exports.StringLiteralNode = exports.IntLiteralNode = exports.BoolLiteralNode = exports.LiteralNode = exports.IdentifierNode = exports.ArrayNode = exports.NullaryOpNode = exports.UnaryOpNode = exports.BinaryOpNode = exports.TupleIndexOpNode = exports.InstantiationNode = exports.FunctionCallNode = exports.CastNode = exports.ExpressionNode = exports.BlockNode = exports.BranchNode = exports.RequireNode = exports.TimeOpNode = exports.AssignNode = exports.TupleAssignmentNode = exports.VariableDefinitionNode = exports.StatementNode = exports.ParameterNode = exports.FunctionDefinitionNode = exports.ContractNode = exports.SourceFileNode = exports.Node = void 0;
4
4
  const utils_1 = require("@cashscript/utils");
5
5
  class Node {
6
6
  }
@@ -28,12 +28,11 @@ class ContractNode extends Node {
28
28
  }
29
29
  exports.ContractNode = ContractNode;
30
30
  class FunctionDefinitionNode extends Node {
31
- constructor(name, parameters, body, preimageFields) {
31
+ constructor(name, parameters, body) {
32
32
  super();
33
33
  this.name = name;
34
34
  this.parameters = parameters;
35
35
  this.body = body;
36
- this.preimageFields = preimageFields;
37
36
  this.opRolls = new Map();
38
37
  }
39
38
  accept(visitor) {
@@ -56,9 +55,10 @@ class StatementNode extends Node {
56
55
  }
57
56
  exports.StatementNode = StatementNode;
58
57
  class VariableDefinitionNode extends StatementNode {
59
- constructor(type, name, expression) {
58
+ constructor(type, modifier, name, expression) {
60
59
  super();
61
60
  this.type = type;
61
+ this.modifier = modifier;
62
62
  this.name = name;
63
63
  this.expression = expression;
64
64
  }
@@ -67,6 +67,18 @@ class VariableDefinitionNode extends StatementNode {
67
67
  }
68
68
  }
69
69
  exports.VariableDefinitionNode = VariableDefinitionNode;
70
+ class TupleAssignmentNode extends StatementNode {
71
+ constructor(var1, var2, tuple) {
72
+ super();
73
+ this.var1 = var1;
74
+ this.var2 = var2;
75
+ this.tuple = tuple;
76
+ }
77
+ accept(visitor) {
78
+ return visitor.visitTupleAssignment(this);
79
+ }
80
+ }
81
+ exports.TupleAssignmentNode = TupleAssignmentNode;
70
82
  class AssignNode extends StatementNode {
71
83
  constructor(identifier, expression) {
72
84
  super();
@@ -192,6 +204,16 @@ class UnaryOpNode extends ExpressionNode {
192
204
  }
193
205
  }
194
206
  exports.UnaryOpNode = UnaryOpNode;
207
+ class NullaryOpNode extends ExpressionNode {
208
+ constructor(operator) {
209
+ super();
210
+ this.operator = operator;
211
+ }
212
+ accept(visitor) {
213
+ return visitor.visitNullaryOp(this);
214
+ }
215
+ }
216
+ exports.NullaryOpNode = NullaryOpNode;
195
217
  class ArrayNode extends ExpressionNode {
196
218
  constructor(elements) {
197
219
  super();
@@ -1,12 +1,11 @@
1
- import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor';
2
- import { ParseTree } from 'antlr4ts/tree/ParseTree';
3
- import { Node, SourceFileNode, ContractNode, ParameterNode, VariableDefinitionNode, FunctionDefinitionNode, AssignNode, IdentifierNode, BranchNode, CastNode, FunctionCallNode, UnaryOpNode, BinaryOpNode, BoolLiteralNode, IntLiteralNode, HexLiteralNode, StringLiteralNode, ExpressionNode, LiteralNode, BlockNode, TimeOpNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode } from './AST';
4
- import { ContractDefinitionContext, FunctionDefinitionContext, VariableDefinitionContext, ParameterContext, AssignStatementContext, IfStatementContext, FunctionCallContext, CastContext, LiteralContext, SourceFileContext, BlockContext, TimeOpStatementContext, ArrayContext, ParenthesisedContext, FunctionCallExpressionContext, UnaryOpContext, BinaryOpContext, IdentifierContext, LiteralExpressionContext, TupleIndexOpContext, RequireStatementContext, PragmaDirectiveContext, PreimageFieldContext, InstantiationContext } from '../grammar/CashScriptParser';
5
- import { CashScriptVisitor } from '../grammar/CashScriptVisitor';
1
+ import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor.js';
2
+ import { ParseTree } from 'antlr4ts/tree/ParseTree.js';
3
+ import { Node, SourceFileNode, ContractNode, ParameterNode, VariableDefinitionNode, FunctionDefinitionNode, AssignNode, IdentifierNode, BranchNode, CastNode, FunctionCallNode, UnaryOpNode, BinaryOpNode, BoolLiteralNode, IntLiteralNode, HexLiteralNode, StringLiteralNode, ExpressionNode, LiteralNode, BlockNode, TimeOpNode, ArrayNode, TupleIndexOpNode, RequireNode, InstantiationNode, TupleAssignmentNode, NullaryOpNode } from './AST.js';
4
+ import { ContractDefinitionContext, FunctionDefinitionContext, VariableDefinitionContext, TupleAssignmentContext, ParameterContext, AssignStatementContext, IfStatementContext, FunctionCallContext, CastContext, LiteralContext, SourceFileContext, BlockContext, TimeOpStatementContext, ArrayContext, ParenthesisedContext, FunctionCallExpressionContext, UnaryOpContext, BinaryOpContext, IdentifierContext, LiteralExpressionContext, TupleIndexOpContext, RequireStatementContext, PragmaDirectiveContext, InstantiationContext, NullaryOpContext, UnaryIntrospectionOpContext } from '../grammar/CashScriptParser.js';
5
+ import { CashScriptVisitor } from '../grammar/CashScriptVisitor.js';
6
6
  export default class AstBuilder extends AbstractParseTreeVisitor<Node> implements CashScriptVisitor<Node> {
7
7
  private tree;
8
8
  constructor(tree: ParseTree);
9
- private preimageFields;
10
9
  defaultResult(): Node;
11
10
  build(): Node;
12
11
  visitSourceFile(ctx: SourceFileContext): SourceFileNode;
@@ -15,6 +14,7 @@ export default class AstBuilder extends AbstractParseTreeVisitor<Node> implement
15
14
  visitFunctionDefinition(ctx: FunctionDefinitionContext): FunctionDefinitionNode;
16
15
  visitParameter(ctx: ParameterContext): ParameterNode;
17
16
  visitVariableDefinition(ctx: VariableDefinitionContext): VariableDefinitionNode;
17
+ visitTupleAssignment(ctx: TupleAssignmentContext): TupleAssignmentNode;
18
18
  visitAssignStatement(ctx: AssignStatementContext): AssignNode;
19
19
  visitTimeOpStatement(ctx: TimeOpStatementContext): TimeOpNode;
20
20
  visitRequireStatement(ctx: RequireStatementContext): RequireNode;
@@ -26,10 +26,11 @@ export default class AstBuilder extends AbstractParseTreeVisitor<Node> implement
26
26
  visitFunctionCall(ctx: FunctionCallContext): FunctionCallNode;
27
27
  visitInstantiation(ctx: InstantiationContext): InstantiationNode;
28
28
  visitTupleIndexOp(ctx: TupleIndexOpContext): TupleIndexOpNode;
29
+ visitNullaryOp(ctx: NullaryOpContext): NullaryOpNode;
30
+ visitUnaryIntrospectionOp(ctx: UnaryIntrospectionOpContext): UnaryOpNode;
29
31
  visitUnaryOp(ctx: UnaryOpContext): UnaryOpNode;
30
32
  visitBinaryOp(ctx: BinaryOpContext): BinaryOpNode;
31
33
  visitArray(ctx: ArrayContext): ArrayNode;
32
- visitPreimageField(ctx: PreimageFieldContext): IdentifierNode;
33
34
  visitIdentifier(ctx: IdentifierContext): IdentifierNode;
34
35
  visitLiteralExpression(ctx: LiteralExpressionContext): LiteralNode;
35
36
  createLiteral(ctx: LiteralContext): LiteralNode;