@harmoniclabs/pebble 0.1.8 → 0.1.10

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/ast/nodes/expr/IsExpr.d.ts +10 -1
  2. package/dist/ast/nodes/expr/IsExpr.js +9 -13
  3. package/dist/ast/nodes/expr/PebbleExpr.d.ts +2 -1
  4. package/dist/ast/nodes/expr/PebbleExpr.js +2 -1
  5. package/dist/ast/nodes/statements/declarations/ContractDecl.d.ts +3 -1
  6. package/dist/ast/nodes/statements/declarations/ContractDecl.js +3 -1
  7. package/dist/ast/nodes/statements/declarations/StateDecl.d.ts +12 -0
  8. package/dist/ast/nodes/statements/declarations/StateDecl.js +12 -0
  9. package/dist/compiler/AstCompiler/internal/_deriveContractBody/_deriveContractBody.js +154 -6
  10. package/dist/compiler/AstCompiler/internal/exprs/_compileCaseExpr.d.ts +1 -1
  11. package/dist/compiler/AstCompiler/internal/exprs/_compileCaseExpr.js +30 -4
  12. package/dist/compiler/AstCompiler/internal/exprs/_compileExpr.js +4 -1
  13. package/dist/compiler/AstCompiler/internal/exprs/_compileIsExpr.d.ts +5 -1
  14. package/dist/compiler/AstCompiler/internal/exprs/_compileIsExpr.js +20 -41
  15. package/dist/compiler/AstCompiler/internal/exprs/_compileTernaryExpr.js +7 -2
  16. package/dist/compiler/AstCompiler/internal/statements/_compileAssertStmt.js +4 -0
  17. package/dist/compiler/AstCompiler/internal/statements/_compileIfStmt.js +7 -2
  18. package/dist/compiler/AstCompiler/internal/statements/_compileMatchStmt.d.ts +1 -1
  19. package/dist/compiler/AstCompiler/internal/statements/_compileMatchStmt.js +17 -4
  20. package/dist/compiler/AstCompiler/scope/AstScope.d.ts +12 -0
  21. package/dist/compiler/AstCompiler/scope/AstScope.js +25 -2
  22. package/dist/compiler/AstCompiler/utils/extractIsNarrowings.d.ts +30 -0
  23. package/dist/compiler/AstCompiler/utils/extractIsNarrowings.js +110 -0
  24. package/dist/compiler/Compiler.js +7 -3
  25. package/dist/compiler/TirCompiler/expressify/expressifyVars.js +6 -0
  26. package/dist/compiler/tir/expressions/TirCallExpr.js +4 -0
  27. package/dist/compiler/tir/expressions/TirCaseExpr.js +38 -7
  28. package/dist/compiler/tir/expressions/TirExpr.d.ts +2 -1
  29. package/dist/compiler/tir/expressions/TirExpr.js +2 -1
  30. package/dist/compiler/tir/expressions/TirFuncExpr.js +4 -1
  31. package/dist/compiler/tir/expressions/TirIsExpr.d.ts +23 -0
  32. package/dist/compiler/tir/expressions/TirIsExpr.js +87 -0
  33. package/dist/compiler/tir/types/TirStructType.d.ts +33 -2
  34. package/dist/compiler/tir/types/TirStructType.js +69 -4
  35. package/dist/compiler/tir/types/utils/canAssignTo.js +14 -0
  36. package/dist/parser/Parser.d.ts +2 -0
  37. package/dist/parser/Parser.js +87 -22
  38. package/dist/tokenizer/Token.d.ts +79 -78
  39. package/dist/tokenizer/Token.js +79 -78
  40. package/dist/tokenizer/utils/tokenFromKeyword.js +7 -2
  41. package/dist/tokenizer/utils/tokenIsAlsoIdentifier.js +1 -0
  42. package/package.json +2 -1
@@ -83,135 +83,136 @@ export var Token;
83
83
  Token[Token["Contract"] = 42] = "Contract";
84
84
  Token[Token["Param"] = 43] = "Param";
85
85
  Token[Token["Spend"] = 44] = "Spend";
86
- Token[Token["Mint"] = 45] = "Mint";
87
- Token[Token["Certify"] = 46] = "Certify";
88
- Token[Token["Withdraw"] = 47] = "Withdraw";
89
- Token[Token["Propose"] = 48] = "Propose";
90
- Token[Token["Vote"] = 49] = "Vote";
91
- Token[Token["Context"] = 50] = "Context";
86
+ Token[Token["State"] = 45] = "State";
87
+ Token[Token["Mint"] = 46] = "Mint";
88
+ Token[Token["Certify"] = 47] = "Certify";
89
+ Token[Token["Withdraw"] = 48] = "Withdraw";
90
+ Token[Token["Propose"] = 49] = "Propose";
91
+ Token[Token["Vote"] = 50] = "Vote";
92
+ Token[Token["Context"] = 51] = "Context";
92
93
  // punctuation
93
94
  /** `{` */
94
- Token[Token["OpenBrace"] = 51] = "OpenBrace";
95
+ Token[Token["OpenBrace"] = 52] = "OpenBrace";
95
96
  /** `}` */
96
- Token[Token["CloseBrace"] = 52] = "CloseBrace";
97
- Token[Token["OpenParen"] = 53] = "OpenParen";
98
- Token[Token["CloseParen"] = 54] = "CloseParen";
97
+ Token[Token["CloseBrace"] = 53] = "CloseBrace";
98
+ Token[Token["OpenParen"] = 54] = "OpenParen";
99
+ Token[Token["CloseParen"] = 55] = "CloseParen";
99
100
  /** `[` */
100
- Token[Token["OpenBracket"] = 55] = "OpenBracket";
101
+ Token[Token["OpenBracket"] = 56] = "OpenBracket";
101
102
  /** `]` */
102
- Token[Token["CloseBracket"] = 56] = "CloseBracket";
103
+ Token[Token["CloseBracket"] = 57] = "CloseBracket";
103
104
  /** `.` */
104
- Token[Token["Dot"] = 57] = "Dot";
105
+ Token[Token["Dot"] = 58] = "Dot";
105
106
  /** `...` */
106
- Token[Token["Dot_Dot_Dot"] = 58] = "Dot_Dot_Dot";
107
+ Token[Token["Dot_Dot_Dot"] = 59] = "Dot_Dot_Dot";
107
108
  /** `;` */
108
- Token[Token["Semicolon"] = 59] = "Semicolon";
109
+ Token[Token["Semicolon"] = 60] = "Semicolon";
109
110
  /** `,` */
110
- Token[Token["Comma"] = 60] = "Comma";
111
+ Token[Token["Comma"] = 61] = "Comma";
111
112
  /** `<` */
112
- Token[Token["LessThan"] = 61] = "LessThan";
113
+ Token[Token["LessThan"] = 62] = "LessThan";
113
114
  /** `>` */
114
- Token[Token["GreaterThan"] = 62] = "GreaterThan";
115
+ Token[Token["GreaterThan"] = 63] = "GreaterThan";
115
116
  /** `<=` */
116
- Token[Token["LessThan_Equals"] = 63] = "LessThan_Equals";
117
+ Token[Token["LessThan_Equals"] = 64] = "LessThan_Equals";
117
118
  /** `>=` */
118
- Token[Token["GreaterThan_Equals"] = 64] = "GreaterThan_Equals";
119
+ Token[Token["GreaterThan_Equals"] = 65] = "GreaterThan_Equals";
119
120
  /** `==` */
120
- Token[Token["Equals_Equals"] = 65] = "Equals_Equals";
121
+ Token[Token["Equals_Equals"] = 66] = "Equals_Equals";
121
122
  /** `!=` */
122
- Token[Token["Exclamation_Equals"] = 66] = "Exclamation_Equals";
123
+ Token[Token["Exclamation_Equals"] = 67] = "Exclamation_Equals";
123
124
  /** `===` */
124
- Token[Token["Equals_Equals_Equals"] = 67] = "Equals_Equals_Equals";
125
+ Token[Token["Equals_Equals_Equals"] = 68] = "Equals_Equals_Equals";
125
126
  /** `!==` */
126
- Token[Token["Exclamation_Equals_Equals"] = 68] = "Exclamation_Equals_Equals";
127
+ Token[Token["Exclamation_Equals_Equals"] = 69] = "Exclamation_Equals_Equals";
127
128
  /** `=>` */
128
- Token[Token["FatArrow"] = 69] = "FatArrow";
129
+ Token[Token["FatArrow"] = 70] = "FatArrow";
129
130
  /** `+` */
130
- Token[Token["Plus"] = 70] = "Plus";
131
+ Token[Token["Plus"] = 71] = "Plus";
131
132
  /** `-` */
132
- Token[Token["Minus"] = 71] = "Minus";
133
+ Token[Token["Minus"] = 72] = "Minus";
133
134
  /** `**` */
134
- Token[Token["Asterisk_Asterisk"] = 72] = "Asterisk_Asterisk";
135
+ Token[Token["Asterisk_Asterisk"] = 73] = "Asterisk_Asterisk";
135
136
  /** `*` */
136
- Token[Token["Asterisk"] = 73] = "Asterisk";
137
+ Token[Token["Asterisk"] = 74] = "Asterisk";
137
138
  /** `/` */
138
- Token[Token["Slash"] = 74] = "Slash";
139
+ Token[Token["Slash"] = 75] = "Slash";
139
140
  /** `%` */
140
- Token[Token["Percent"] = 75] = "Percent";
141
+ Token[Token["Percent"] = 76] = "Percent";
141
142
  /** `++` */
142
- Token[Token["Plus_Plus"] = 76] = "Plus_Plus";
143
+ Token[Token["Plus_Plus"] = 77] = "Plus_Plus";
143
144
  /** `--` */
144
- Token[Token["Minus_Minus"] = 77] = "Minus_Minus";
145
+ Token[Token["Minus_Minus"] = 78] = "Minus_Minus";
145
146
  /** `<<` */
146
- Token[Token["LessThan_LessThan"] = 78] = "LessThan_LessThan";
147
+ Token[Token["LessThan_LessThan"] = 79] = "LessThan_LessThan";
147
148
  /** `>>` */
148
- Token[Token["GreaterThan_GreaterThan"] = 79] = "GreaterThan_GreaterThan";
149
+ Token[Token["GreaterThan_GreaterThan"] = 80] = "GreaterThan_GreaterThan";
149
150
  /** `>>>` */
150
- Token[Token["GreaterThan_GreaterThan_GreaterThan"] = 80] = "GreaterThan_GreaterThan_GreaterThan";
151
+ Token[Token["GreaterThan_GreaterThan_GreaterThan"] = 81] = "GreaterThan_GreaterThan_GreaterThan";
151
152
  /** `+` */
152
- Token[Token["Ampersand"] = 81] = "Ampersand";
153
+ Token[Token["Ampersand"] = 82] = "Ampersand";
153
154
  /** `|` */
154
- Token[Token["Bar"] = 82] = "Bar";
155
+ Token[Token["Bar"] = 83] = "Bar";
155
156
  /** `^` */
156
- Token[Token["Caret"] = 83] = "Caret";
157
+ Token[Token["Caret"] = 84] = "Caret";
157
158
  /** `!` */
158
- Token[Token["Exclamation"] = 84] = "Exclamation";
159
+ Token[Token["Exclamation"] = 85] = "Exclamation";
159
160
  /** `~` */
160
- Token[Token["Tilde"] = 85] = "Tilde";
161
+ Token[Token["Tilde"] = 86] = "Tilde";
161
162
  /** `&&` */
162
- Token[Token["Ampersand_Ampersand"] = 86] = "Ampersand_Ampersand";
163
+ Token[Token["Ampersand_Ampersand"] = 87] = "Ampersand_Ampersand";
163
164
  /** `||` */
164
- Token[Token["Bar_Bar"] = 87] = "Bar_Bar";
165
+ Token[Token["Bar_Bar"] = 88] = "Bar_Bar";
165
166
  /** `?` */
166
- Token[Token["Question"] = 88] = "Question";
167
+ Token[Token["Question"] = 89] = "Question";
167
168
  /** `:` */
168
- Token[Token["Colon"] = 89] = "Colon";
169
+ Token[Token["Colon"] = 90] = "Colon";
169
170
  /** `=` */
170
- Token[Token["Equals"] = 90] = "Equals";
171
- Token[Token["Plus_Equals"] = 91] = "Plus_Equals";
172
- Token[Token["Minus_Equals"] = 92] = "Minus_Equals";
173
- Token[Token["Asterisk_Equals"] = 93] = "Asterisk_Equals";
174
- Token[Token["Asterisk_Asterisk_Equals"] = 94] = "Asterisk_Asterisk_Equals";
175
- Token[Token["Slash_Equals"] = 95] = "Slash_Equals";
176
- Token[Token["Percent_Equals"] = 96] = "Percent_Equals";
177
- Token[Token["LessThan_LessThan_Equals"] = 97] = "LessThan_LessThan_Equals";
178
- Token[Token["GreaterThan_GreaterThan_Equals"] = 98] = "GreaterThan_GreaterThan_Equals";
179
- Token[Token["GreaterThan_GreaterThan_GreaterThan_Equals"] = 99] = "GreaterThan_GreaterThan_GreaterThan_Equals";
180
- Token[Token["Ampersand_Equals"] = 100] = "Ampersand_Equals";
181
- Token[Token["Bar_Equals"] = 101] = "Bar_Equals";
182
- Token[Token["Caret_Equals"] = 102] = "Caret_Equals";
183
- Token[Token["At"] = 103] = "At";
171
+ Token[Token["Equals"] = 91] = "Equals";
172
+ Token[Token["Plus_Equals"] = 92] = "Plus_Equals";
173
+ Token[Token["Minus_Equals"] = 93] = "Minus_Equals";
174
+ Token[Token["Asterisk_Equals"] = 94] = "Asterisk_Equals";
175
+ Token[Token["Asterisk_Asterisk_Equals"] = 95] = "Asterisk_Asterisk_Equals";
176
+ Token[Token["Slash_Equals"] = 96] = "Slash_Equals";
177
+ Token[Token["Percent_Equals"] = 97] = "Percent_Equals";
178
+ Token[Token["LessThan_LessThan_Equals"] = 98] = "LessThan_LessThan_Equals";
179
+ Token[Token["GreaterThan_GreaterThan_Equals"] = 99] = "GreaterThan_GreaterThan_Equals";
180
+ Token[Token["GreaterThan_GreaterThan_GreaterThan_Equals"] = 100] = "GreaterThan_GreaterThan_GreaterThan_Equals";
181
+ Token[Token["Ampersand_Equals"] = 101] = "Ampersand_Equals";
182
+ Token[Token["Bar_Equals"] = 102] = "Bar_Equals";
183
+ Token[Token["Caret_Equals"] = 103] = "Caret_Equals";
184
+ Token[Token["At"] = 104] = "At";
184
185
  /** `??=` */
185
- Token[Token["Question_Question_Equals"] = 104] = "Question_Question_Equals";
186
+ Token[Token["Question_Question_Equals"] = 105] = "Question_Question_Equals";
186
187
  /** `||=` */
187
- Token[Token["Bar_Bar_Equals"] = 105] = "Bar_Bar_Equals";
188
+ Token[Token["Bar_Bar_Equals"] = 106] = "Bar_Bar_Equals";
188
189
  /** `&&=` */
189
- Token[Token["Ampersand_Ampersand_Equals"] = 106] = "Ampersand_Ampersand_Equals";
190
+ Token[Token["Ampersand_Ampersand_Equals"] = 107] = "Ampersand_Ampersand_Equals";
190
191
  /** `??` */
191
- Token[Token["Question_Question"] = 107] = "Question_Question";
192
+ Token[Token["Question_Question"] = 108] = "Question_Question";
192
193
  /** `?.` */
193
- Token[Token["Question_Dot"] = 108] = "Question_Dot";
194
+ Token[Token["Question_Dot"] = 109] = "Question_Dot";
194
195
  /** `!.` */
195
- Token[Token["Exclamation_Dot"] = 109] = "Exclamation_Dot";
196
+ Token[Token["Exclamation_Dot"] = 110] = "Exclamation_Dot";
196
197
  // custom native types for pebble
197
- Token[Token["Data"] = 110] = "Data";
198
- Token[Token["Bytes"] = 111] = "Bytes";
199
- Token[Token["Optional"] = 112] = "Optional";
200
- Token[Token["List"] = 113] = "List";
201
- Token[Token["LinearMap"] = 114] = "LinearMap";
198
+ Token[Token["Data"] = 111] = "Data";
199
+ Token[Token["Bytes"] = 112] = "Bytes";
200
+ Token[Token["Optional"] = 113] = "Optional";
201
+ Token[Token["List"] = 114] = "List";
202
+ Token[Token["LinearMap"] = 115] = "LinearMap";
202
203
  // struct decl modifiers
203
204
  // taggedModifier, // `tagged` data struct
204
- Token[Token["Runtime"] = 115] = "Runtime";
205
+ Token[Token["Runtime"] = 116] = "Runtime";
205
206
  // literals
206
- Token[Token["Identifier"] = 116] = "Identifier";
207
- Token[Token["StringLiteral"] = 117] = "StringLiteral";
208
- Token[Token["HexBytesLiteral"] = 118] = "HexBytesLiteral";
209
- Token[Token["IntegerLiteral"] = 119] = "IntegerLiteral";
207
+ Token[Token["Identifier"] = 117] = "Identifier";
208
+ Token[Token["StringLiteral"] = 118] = "StringLiteral";
209
+ Token[Token["HexBytesLiteral"] = 119] = "HexBytesLiteral";
210
+ Token[Token["IntegerLiteral"] = 120] = "IntegerLiteral";
210
211
  // FloatLiteral,
211
- Token[Token["StringTemplateLiteralQuote"] = 120] = "StringTemplateLiteralQuote";
212
+ Token[Token["StringTemplateLiteralQuote"] = 121] = "StringTemplateLiteralQuote";
212
213
  // meta
213
- Token[Token["Invalid"] = 121] = "Invalid";
214
- Token[Token["EndOfFile"] = 122] = "EndOfFile";
214
+ Token[Token["Invalid"] = 122] = "Invalid";
215
+ Token[Token["EndOfFile"] = 123] = "EndOfFile";
215
216
  })(Token || (Token = {}));
216
217
  Object.freeze(Token);
217
218
  /*
@@ -179,6 +179,13 @@ export function tokenFromKeyword(text) {
179
179
  break;
180
180
  }
181
181
  case 115 /* CharCode.s */: {
182
+ if (len === 5) {
183
+ if (text === "spend")
184
+ return Token.Spend;
185
+ if (text === "state")
186
+ return Token.State;
187
+ break;
188
+ }
182
189
  if (len === 6) {
183
190
  // if (text === "switch") return Token.Switch;
184
191
  if (text === "static")
@@ -187,8 +194,6 @@ export function tokenFromKeyword(text) {
187
194
  return Token.Struct;
188
195
  break;
189
196
  }
190
- if (text === "spend")
191
- return Token.Spend;
192
197
  // if (text === "set") return Token.Set;
193
198
  // if (text === "super") return Token.Super;
194
199
  break;
@@ -21,6 +21,7 @@ export function tokenIsAlsoIdentifier(token) {
21
21
  case Token.Contract:
22
22
  case Token.Param:
23
23
  case Token.Spend:
24
+ case Token.State:
24
25
  case Token.Mint:
25
26
  case Token.Certify:
26
27
  case Token.Withdraw:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harmoniclabs/pebble",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "A simple, yet rock solid, functional language with an imperative bias, targeting UPLC",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -14,6 +14,7 @@
14
14
  "dist"
15
15
  ],
16
16
  "scripts": {
17
+ "prepublishOnly": "npm run ci",
17
18
  "buidl": "npm run build",
18
19
  "build": "rm -rf ./dist && npm run build:light",
19
20
  "build:light": "npm run genDiagnosticMessages && tsc --project ./tsconfig.json && tsc-alias -p ./tsconfig.json",