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.
- package/README.md +7 -9
- package/dist/main/Errors.d.ts +13 -10
- package/dist/main/Errors.js +28 -18
- package/dist/main/artifact/Artifact.d.ts +1 -1
- package/dist/main/artifact/Artifact.js +3 -4
- package/dist/main/ast/AST.d.ts +32 -8
- package/dist/main/ast/AST.js +26 -4
- package/dist/main/ast/AstBuilder.d.ts +8 -7
- package/dist/main/ast/AstBuilder.js +99 -85
- package/dist/main/ast/AstTraversal.d.ts +4 -2
- package/dist/main/ast/AstTraversal.js +9 -2
- package/dist/main/ast/AstVisitor.d.ts +3 -1
- package/dist/main/ast/Globals.d.ts +6 -15
- package/dist/main/ast/Globals.js +25 -45
- package/dist/main/ast/Location.d.ts +1 -1
- package/dist/main/ast/Operator.d.ts +18 -1
- package/dist/main/ast/Operator.js +19 -1
- package/dist/main/ast/Pragma.d.ts +1 -1
- package/dist/main/ast/SymbolTable.d.ts +1 -1
- package/dist/main/ast/ThrowingErrorListener.js +3 -3
- package/dist/main/cashc-cli.js +10 -9
- package/dist/main/compiler.d.ts +1 -1
- package/dist/main/compiler.js +20 -22
- package/dist/main/generation/GenerateTargetTraversal.d.ts +4 -9
- package/dist/main/generation/GenerateTargetTraversal.js +56 -186
- package/dist/main/generation/utils.d.ts +3 -2
- package/dist/main/generation/utils.js +62 -44
- package/dist/main/grammar/CashScriptLexer.d.ts +25 -15
- package/dist/main/grammar/CashScriptLexer.js +389 -317
- package/dist/main/grammar/CashScriptListener.d.ts +40 -5
- package/dist/main/grammar/CashScriptParser.d.ts +71 -27
- package/dist/main/grammar/CashScriptParser.js +709 -418
- package/dist/main/grammar/CashScriptVisitor.d.ts +25 -3
- package/dist/main/index.d.ts +3 -3
- package/dist/main/index.js +10 -6
- package/dist/main/print/OutputSourceCodeTraversal.d.ts +4 -2
- package/dist/main/print/OutputSourceCodeTraversal.js +22 -3
- package/dist/main/semantic/EnsureFinalRequireTraversal.d.ts +2 -2
- package/dist/main/semantic/EnsureFinalRequireTraversal.js +9 -9
- package/dist/main/semantic/SymbolTableTraversal.d.ts +4 -2
- package/dist/main/semantic/SymbolTableTraversal.js +44 -24
- package/dist/main/semantic/TypeCheckTraversal.d.ts +4 -2
- package/dist/main/semantic/TypeCheckTraversal.js +99 -47
- package/dist/module/Errors.d.ts +13 -10
- package/dist/module/Errors.js +16 -7
- package/dist/module/artifact/Artifact.d.ts +1 -1
- package/dist/module/artifact/Artifact.js +1 -2
- package/dist/module/ast/AST.d.ts +32 -8
- package/dist/module/ast/AST.js +23 -3
- package/dist/module/ast/AstBuilder.d.ts +8 -7
- package/dist/module/ast/AstBuilder.js +33 -19
- package/dist/module/ast/AstTraversal.d.ts +4 -2
- package/dist/module/ast/AstTraversal.js +8 -1
- package/dist/module/ast/AstVisitor.d.ts +3 -1
- package/dist/module/ast/Globals.d.ts +6 -15
- package/dist/module/ast/Globals.js +11 -31
- package/dist/module/ast/Location.d.ts +1 -1
- package/dist/module/ast/Operator.d.ts +18 -1
- package/dist/module/ast/Operator.js +18 -0
- package/dist/module/ast/Pragma.d.ts +1 -1
- package/dist/module/ast/SymbolTable.d.ts +1 -1
- package/dist/module/ast/ThrowingErrorListener.js +2 -2
- package/dist/module/cashc-cli.js +2 -1
- package/dist/module/compiler.d.ts +1 -1
- package/dist/module/compiler.js +9 -11
- package/dist/module/generation/GenerateTargetTraversal.d.ts +4 -9
- package/dist/module/generation/GenerateTargetTraversal.js +30 -160
- package/dist/module/generation/utils.d.ts +3 -2
- package/dist/module/generation/utils.js +23 -6
- package/dist/module/grammar/CashScriptLexer.d.ts +25 -15
- package/dist/module/grammar/CashScriptLexer.js +384 -316
- package/dist/module/grammar/CashScriptListener.d.ts +40 -5
- package/dist/module/grammar/CashScriptParser.d.ts +71 -27
- package/dist/module/grammar/CashScriptParser.js +699 -415
- package/dist/module/grammar/CashScriptVisitor.d.ts +25 -3
- package/dist/module/index.d.ts +3 -3
- package/dist/module/index.js +3 -3
- package/dist/module/print/OutputSourceCodeTraversal.d.ts +4 -2
- package/dist/module/print/OutputSourceCodeTraversal.js +20 -1
- package/dist/module/semantic/EnsureFinalRequireTraversal.d.ts +2 -2
- package/dist/module/semantic/EnsureFinalRequireTraversal.js +3 -3
- package/dist/module/semantic/SymbolTableTraversal.d.ts +4 -2
- package/dist/module/semantic/SymbolTableTraversal.js +24 -4
- package/dist/module/semantic/TypeCheckTraversal.d.ts +4 -2
- package/dist/module/semantic/TypeCheckTraversal.js +56 -4
- package/package.json +2 -2
- package/dist/main/generation/preimage.d.ts +0 -10
- package/dist/main/generation/preimage.js +0 -57
- package/dist/main/semantic/VerifyCovenantTraversal.d.ts +0 -12
- package/dist/main/semantic/VerifyCovenantTraversal.js +0 -63
- package/dist/module/generation/preimage.d.ts +0 -10
- package/dist/module/generation/preimage.js +0 -54
- package/dist/module/semantic/VerifyCovenantTraversal.d.ts +0 -12
- 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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
--asm
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
--
|
|
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
|
```
|
package/dist/main/Errors.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Type
|
|
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?:
|
|
49
|
-
expected?:
|
|
50
|
-
constructor(node: Node, actual?:
|
|
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
|
-
}
|
package/dist/main/Errors.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
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
|
|
6
|
-
const
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
@@ -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
|
|
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:
|
|
26
|
+
version: index_js_1.version,
|
|
28
27
|
},
|
|
29
28
|
updatedAt: new Date().toISOString(),
|
|
30
29
|
};
|
package/dist/main/ast/AST.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Type } from '@cashscript/utils';
|
|
2
|
-
import { TimeOp
|
|
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
|
|
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[]);
|
package/dist/main/ast/AST.js
CHANGED
|
@@ -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
|
|
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,
|
|
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;
|