xbintsc 0.1.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/LICENSE +21 -0
- package/README.md +191 -0
- package/bin/xbintsc.js +26 -0
- package/dist/src/ast/factory.d.ts +11 -0
- package/dist/src/ast/factory.js +36 -0
- package/dist/src/ast/factory.js.map +1 -0
- package/dist/src/ast/nodes.d.ts +848 -0
- package/dist/src/ast/nodes.js +247 -0
- package/dist/src/ast/nodes.js.map +1 -0
- package/dist/src/ast/visitor.d.ts +18 -0
- package/dist/src/ast/visitor.js +52 -0
- package/dist/src/ast/visitor.js.map +1 -0
- package/dist/src/binder/binder.d.ts +82 -0
- package/dist/src/binder/binder.js +443 -0
- package/dist/src/binder/binder.js.map +1 -0
- package/dist/src/cli/main.d.ts +16 -0
- package/dist/src/cli/main.js +191 -0
- package/dist/src/cli/main.js.map +1 -0
- package/dist/src/codegen/llvm.d.ts +31 -0
- package/dist/src/codegen/llvm.js +1178 -0
- package/dist/src/codegen/llvm.js.map +1 -0
- package/dist/src/codegen/values.d.ts +23 -0
- package/dist/src/codegen/values.js +32 -0
- package/dist/src/codegen/values.js.map +1 -0
- package/dist/src/diagnostics/diagnostic.d.ts +69 -0
- package/dist/src/diagnostics/diagnostic.js +104 -0
- package/dist/src/diagnostics/diagnostic.js.map +1 -0
- package/dist/src/diagnostics/source.d.ts +43 -0
- package/dist/src/diagnostics/source.js +73 -0
- package/dist/src/diagnostics/source.js.map +1 -0
- package/dist/src/driver/cache.d.ts +37 -0
- package/dist/src/driver/cache.js +82 -0
- package/dist/src/driver/cache.js.map +1 -0
- package/dist/src/driver/compiler.d.ts +41 -0
- package/dist/src/driver/compiler.js +128 -0
- package/dist/src/driver/compiler.js.map +1 -0
- package/dist/src/driver/index.d.ts +4 -0
- package/dist/src/driver/index.js +5 -0
- package/dist/src/driver/index.js.map +1 -0
- package/dist/src/driver/paths.d.ts +4 -0
- package/dist/src/driver/paths.js +22 -0
- package/dist/src/driver/paths.js.map +1 -0
- package/dist/src/driver/toolchain.d.ts +43 -0
- package/dist/src/driver/toolchain.js +76 -0
- package/dist/src/driver/toolchain.js.map +1 -0
- package/dist/src/extensions/node.d.ts +9 -0
- package/dist/src/extensions/node.js +20 -0
- package/dist/src/extensions/node.js.map +1 -0
- package/dist/src/extensions/registry.d.ts +45 -0
- package/dist/src/extensions/registry.js +76 -0
- package/dist/src/extensions/registry.js.map +1 -0
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.js +19 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lexer/scanner.d.ts +48 -0
- package/dist/src/lexer/scanner.js +650 -0
- package/dist/src/lexer/scanner.js.map +1 -0
- package/dist/src/lexer/token.d.ts +170 -0
- package/dist/src/lexer/token.js +250 -0
- package/dist/src/lexer/token.js.map +1 -0
- package/dist/src/parser/parser.d.ts +127 -0
- package/dist/src/parser/parser.js +2334 -0
- package/dist/src/parser/parser.js.map +1 -0
- package/dist/tests/binder/binder.test.d.ts +1 -0
- package/dist/tests/binder/binder.test.js +89 -0
- package/dist/tests/binder/binder.test.js.map +1 -0
- package/dist/tests/cli/main.test.d.ts +1 -0
- package/dist/tests/cli/main.test.js +68 -0
- package/dist/tests/cli/main.test.js.map +1 -0
- package/dist/tests/cli/process.test.d.ts +9 -0
- package/dist/tests/cli/process.test.js +57 -0
- package/dist/tests/cli/process.test.js.map +1 -0
- package/dist/tests/codegen/llvm.test.d.ts +1 -0
- package/dist/tests/codegen/llvm.test.js +93 -0
- package/dist/tests/codegen/llvm.test.js.map +1 -0
- package/dist/tests/driver/cache.test.d.ts +1 -0
- package/dist/tests/driver/cache.test.js +66 -0
- package/dist/tests/driver/cache.test.js.map +1 -0
- package/dist/tests/driver/compiler.test.d.ts +1 -0
- package/dist/tests/driver/compiler.test.js +80 -0
- package/dist/tests/driver/compiler.test.js.map +1 -0
- package/dist/tests/driver/toolchain.test.d.ts +1 -0
- package/dist/tests/driver/toolchain.test.js +60 -0
- package/dist/tests/driver/toolchain.test.js.map +1 -0
- package/dist/tests/e2e/compile.test.d.ts +5 -0
- package/dist/tests/e2e/compile.test.js +93 -0
- package/dist/tests/e2e/compile.test.js.map +1 -0
- package/dist/tests/extensions/registry.test.d.ts +1 -0
- package/dist/tests/extensions/registry.test.js +47 -0
- package/dist/tests/extensions/registry.test.js.map +1 -0
- package/dist/tests/helpers.d.ts +23 -0
- package/dist/tests/helpers.js +41 -0
- package/dist/tests/helpers.js.map +1 -0
- package/dist/tests/lexer/scanner.test.d.ts +1 -0
- package/dist/tests/lexer/scanner.test.js +95 -0
- package/dist/tests/lexer/scanner.test.js.map +1 -0
- package/dist/tests/parser/parser.test.d.ts +1 -0
- package/dist/tests/parser/parser.test.js +137 -0
- package/dist/tests/parser/parser.test.js.map +1 -0
- package/package.json +49 -0
- package/runtime/ext_node.c +42 -0
- package/runtime/rt.h +177 -0
- package/runtime/xt_runtime.c +682 -0
- package/scripts/build-runtime.mjs +34 -0
- package/src/ast/factory.ts +37 -0
- package/src/ast/nodes.ts +1111 -0
- package/src/ast/visitor.ts +60 -0
- package/src/binder/binder.ts +549 -0
- package/src/cli/main.ts +210 -0
- package/src/codegen/llvm.ts +1324 -0
- package/src/codegen/values.ts +36 -0
- package/src/diagnostics/diagnostic.ts +132 -0
- package/src/diagnostics/source.ts +97 -0
- package/src/driver/cache.ts +96 -0
- package/src/driver/compiler.ts +197 -0
- package/src/driver/index.ts +4 -0
- package/src/driver/paths.ts +24 -0
- package/src/driver/toolchain.ts +103 -0
- package/src/extensions/node.ts +23 -0
- package/src/extensions/registry.ts +101 -0
- package/src/index.ts +33 -0
- package/src/lexer/scanner.ts +650 -0
- package/src/lexer/token.ts +266 -0
- package/src/parser/parser.ts +2396 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The xbintsc abstract syntax tree.
|
|
3
|
+
*
|
|
4
|
+
* The AST is a faithful, lossless-enough representation of the TypeScript
|
|
5
|
+
* source. Nodes are discriminated unions keyed by `kind` so the binder, checker
|
|
6
|
+
* and code generator can switch exhaustively over them. Every node carries a
|
|
7
|
+
* source range (`start`/`end` offsets) which the diagnostics layer maps back to
|
|
8
|
+
* line/column, and which the incremental cache uses to detect changes.
|
|
9
|
+
*/
|
|
10
|
+
export var SyntaxKind;
|
|
11
|
+
(function (SyntaxKind) {
|
|
12
|
+
// Markers
|
|
13
|
+
SyntaxKind[SyntaxKind["Unknown"] = 0] = "Unknown";
|
|
14
|
+
SyntaxKind[SyntaxKind["EndOfFileToken"] = 1] = "EndOfFileToken";
|
|
15
|
+
SyntaxKind[SyntaxKind["SourceFile"] = 300] = "SourceFile";
|
|
16
|
+
SyntaxKind[SyntaxKind["QualifiedName"] = 301] = "QualifiedName";
|
|
17
|
+
SyntaxKind[SyntaxKind["ExpressionWithTypeArguments"] = 302] = "ExpressionWithTypeArguments";
|
|
18
|
+
SyntaxKind[SyntaxKind["ImportType"] = 303] = "ImportType";
|
|
19
|
+
// Trivia-ish
|
|
20
|
+
SyntaxKind[SyntaxKind["Identifier"] = 2] = "Identifier";
|
|
21
|
+
SyntaxKind[SyntaxKind["PrivateIdentifier"] = 3] = "PrivateIdentifier";
|
|
22
|
+
// Literals
|
|
23
|
+
SyntaxKind[SyntaxKind["NumericLiteral"] = 4] = "NumericLiteral";
|
|
24
|
+
SyntaxKind[SyntaxKind["BigIntLiteral"] = 5] = "BigIntLiteral";
|
|
25
|
+
SyntaxKind[SyntaxKind["StringLiteral"] = 6] = "StringLiteral";
|
|
26
|
+
SyntaxKind[SyntaxKind["NoSubstitutionTemplateLiteral"] = 7] = "NoSubstitutionTemplateLiteral";
|
|
27
|
+
SyntaxKind[SyntaxKind["TemplateLiteral"] = 8] = "TemplateLiteral";
|
|
28
|
+
SyntaxKind[SyntaxKind["TemplateSpan"] = 9] = "TemplateSpan";
|
|
29
|
+
SyntaxKind[SyntaxKind["RegularExpressionLiteral"] = 10] = "RegularExpressionLiteral";
|
|
30
|
+
SyntaxKind[SyntaxKind["TrueKeyword"] = 11] = "TrueKeyword";
|
|
31
|
+
SyntaxKind[SyntaxKind["FalseKeyword"] = 12] = "FalseKeyword";
|
|
32
|
+
SyntaxKind[SyntaxKind["NullKeyword"] = 13] = "NullKeyword";
|
|
33
|
+
SyntaxKind[SyntaxKind["UndefinedKeyword"] = 14] = "UndefinedKeyword";
|
|
34
|
+
SyntaxKind[SyntaxKind["ThisKeyword"] = 15] = "ThisKeyword";
|
|
35
|
+
// Expressions
|
|
36
|
+
SyntaxKind[SyntaxKind["ArrayLiteralExpression"] = 20] = "ArrayLiteralExpression";
|
|
37
|
+
SyntaxKind[SyntaxKind["ObjectLiteralExpression"] = 21] = "ObjectLiteralExpression";
|
|
38
|
+
SyntaxKind[SyntaxKind["PropertyAssignment"] = 22] = "PropertyAssignment";
|
|
39
|
+
SyntaxKind[SyntaxKind["ShorthandPropertyAssignment"] = 23] = "ShorthandPropertyAssignment";
|
|
40
|
+
SyntaxKind[SyntaxKind["SpreadElement"] = 24] = "SpreadElement";
|
|
41
|
+
SyntaxKind[SyntaxKind["FunctionExpression"] = 25] = "FunctionExpression";
|
|
42
|
+
SyntaxKind[SyntaxKind["ArrowFunction"] = 26] = "ArrowFunction";
|
|
43
|
+
SyntaxKind[SyntaxKind["ClassExpression"] = 27] = "ClassExpression";
|
|
44
|
+
SyntaxKind[SyntaxKind["CallExpression"] = 28] = "CallExpression";
|
|
45
|
+
SyntaxKind[SyntaxKind["NewExpression"] = 29] = "NewExpression";
|
|
46
|
+
SyntaxKind[SyntaxKind["PropertyAccessExpression"] = 30] = "PropertyAccessExpression";
|
|
47
|
+
SyntaxKind[SyntaxKind["ElementAccessExpression"] = 31] = "ElementAccessExpression";
|
|
48
|
+
SyntaxKind[SyntaxKind["ParenthesizedExpression"] = 32] = "ParenthesizedExpression";
|
|
49
|
+
SyntaxKind[SyntaxKind["PrefixUnaryExpression"] = 33] = "PrefixUnaryExpression";
|
|
50
|
+
SyntaxKind[SyntaxKind["PostfixUnaryExpression"] = 34] = "PostfixUnaryExpression";
|
|
51
|
+
SyntaxKind[SyntaxKind["BinaryExpression"] = 35] = "BinaryExpression";
|
|
52
|
+
SyntaxKind[SyntaxKind["ConditionalExpression"] = 36] = "ConditionalExpression";
|
|
53
|
+
SyntaxKind[SyntaxKind["AsExpression"] = 37] = "AsExpression";
|
|
54
|
+
SyntaxKind[SyntaxKind["SatisfiesExpression"] = 38] = "SatisfiesExpression";
|
|
55
|
+
SyntaxKind[SyntaxKind["NonNullExpression"] = 39] = "NonNullExpression";
|
|
56
|
+
SyntaxKind[SyntaxKind["TypeOfExpression"] = 40] = "TypeOfExpression";
|
|
57
|
+
SyntaxKind[SyntaxKind["VoidExpression"] = 41] = "VoidExpression";
|
|
58
|
+
SyntaxKind[SyntaxKind["DeleteExpression"] = 42] = "DeleteExpression";
|
|
59
|
+
SyntaxKind[SyntaxKind["AwaitExpression"] = 43] = "AwaitExpression";
|
|
60
|
+
SyntaxKind[SyntaxKind["YieldExpression"] = 44] = "YieldExpression";
|
|
61
|
+
SyntaxKind[SyntaxKind["TaggedTemplateExpression"] = 45] = "TaggedTemplateExpression";
|
|
62
|
+
// Statements
|
|
63
|
+
SyntaxKind[SyntaxKind["ExpressionStatement"] = 60] = "ExpressionStatement";
|
|
64
|
+
SyntaxKind[SyntaxKind["Block"] = 61] = "Block";
|
|
65
|
+
SyntaxKind[SyntaxKind["EmptyStatement"] = 62] = "EmptyStatement";
|
|
66
|
+
SyntaxKind[SyntaxKind["DebuggerStatement"] = 63] = "DebuggerStatement";
|
|
67
|
+
SyntaxKind[SyntaxKind["VariableStatement"] = 64] = "VariableStatement";
|
|
68
|
+
SyntaxKind[SyntaxKind["VariableDeclarationList"] = 65] = "VariableDeclarationList";
|
|
69
|
+
SyntaxKind[SyntaxKind["VariableDeclaration"] = 66] = "VariableDeclaration";
|
|
70
|
+
SyntaxKind[SyntaxKind["IfStatement"] = 67] = "IfStatement";
|
|
71
|
+
SyntaxKind[SyntaxKind["WhileStatement"] = 68] = "WhileStatement";
|
|
72
|
+
SyntaxKind[SyntaxKind["DoStatement"] = 69] = "DoStatement";
|
|
73
|
+
SyntaxKind[SyntaxKind["ForStatement"] = 70] = "ForStatement";
|
|
74
|
+
SyntaxKind[SyntaxKind["ForOfStatement"] = 71] = "ForOfStatement";
|
|
75
|
+
SyntaxKind[SyntaxKind["ForInStatement"] = 72] = "ForInStatement";
|
|
76
|
+
SyntaxKind[SyntaxKind["ReturnStatement"] = 73] = "ReturnStatement";
|
|
77
|
+
SyntaxKind[SyntaxKind["BreakStatement"] = 74] = "BreakStatement";
|
|
78
|
+
SyntaxKind[SyntaxKind["ContinueStatement"] = 75] = "ContinueStatement";
|
|
79
|
+
SyntaxKind[SyntaxKind["ThrowStatement"] = 76] = "ThrowStatement";
|
|
80
|
+
SyntaxKind[SyntaxKind["TryStatement"] = 77] = "TryStatement";
|
|
81
|
+
SyntaxKind[SyntaxKind["CatchClause"] = 78] = "CatchClause";
|
|
82
|
+
SyntaxKind[SyntaxKind["SwitchStatement"] = 79] = "SwitchStatement";
|
|
83
|
+
SyntaxKind[SyntaxKind["CaseClause"] = 80] = "CaseClause";
|
|
84
|
+
SyntaxKind[SyntaxKind["DefaultClause"] = 81] = "DefaultClause";
|
|
85
|
+
SyntaxKind[SyntaxKind["LabeledStatement"] = 82] = "LabeledStatement";
|
|
86
|
+
// Declarations
|
|
87
|
+
SyntaxKind[SyntaxKind["FunctionDeclaration"] = 100] = "FunctionDeclaration";
|
|
88
|
+
SyntaxKind[SyntaxKind["ClassDeclaration"] = 101] = "ClassDeclaration";
|
|
89
|
+
SyntaxKind[SyntaxKind["InterfaceDeclaration"] = 102] = "InterfaceDeclaration";
|
|
90
|
+
SyntaxKind[SyntaxKind["TypeAliasDeclaration"] = 103] = "TypeAliasDeclaration";
|
|
91
|
+
SyntaxKind[SyntaxKind["EnumDeclaration"] = 104] = "EnumDeclaration";
|
|
92
|
+
SyntaxKind[SyntaxKind["EnumMember"] = 105] = "EnumMember";
|
|
93
|
+
SyntaxKind[SyntaxKind["ModuleDeclaration"] = 106] = "ModuleDeclaration";
|
|
94
|
+
SyntaxKind[SyntaxKind["Parameter"] = 107] = "Parameter";
|
|
95
|
+
SyntaxKind[SyntaxKind["TypeParameterDeclaration"] = 108] = "TypeParameterDeclaration";
|
|
96
|
+
SyntaxKind[SyntaxKind["PropertyDeclaration"] = 109] = "PropertyDeclaration";
|
|
97
|
+
SyntaxKind[SyntaxKind["MethodDeclaration"] = 110] = "MethodDeclaration";
|
|
98
|
+
SyntaxKind[SyntaxKind["ConstructorDeclaration"] = 111] = "ConstructorDeclaration";
|
|
99
|
+
SyntaxKind[SyntaxKind["HeritageClause"] = 112] = "HeritageClause";
|
|
100
|
+
SyntaxKind[SyntaxKind["ImportDeclaration"] = 113] = "ImportDeclaration";
|
|
101
|
+
SyntaxKind[SyntaxKind["ImportClause"] = 114] = "ImportClause";
|
|
102
|
+
SyntaxKind[SyntaxKind["NamedImports"] = 115] = "NamedImports";
|
|
103
|
+
SyntaxKind[SyntaxKind["ImportSpecifier"] = 116] = "ImportSpecifier";
|
|
104
|
+
SyntaxKind[SyntaxKind["NamespaceImport"] = 117] = "NamespaceImport";
|
|
105
|
+
SyntaxKind[SyntaxKind["ExportDeclaration"] = 118] = "ExportDeclaration";
|
|
106
|
+
SyntaxKind[SyntaxKind["ExportAssignment"] = 119] = "ExportAssignment";
|
|
107
|
+
SyntaxKind[SyntaxKind["NamedExports"] = 120] = "NamedExports";
|
|
108
|
+
SyntaxKind[SyntaxKind["ExportSpecifier"] = 121] = "ExportSpecifier";
|
|
109
|
+
// Types
|
|
110
|
+
SyntaxKind[SyntaxKind["TypeReference"] = 200] = "TypeReference";
|
|
111
|
+
SyntaxKind[SyntaxKind["TypePredicate"] = 201] = "TypePredicate";
|
|
112
|
+
SyntaxKind[SyntaxKind["AnyKeywordType"] = 202] = "AnyKeywordType";
|
|
113
|
+
SyntaxKind[SyntaxKind["UnknownKeywordType"] = 203] = "UnknownKeywordType";
|
|
114
|
+
SyntaxKind[SyntaxKind["NumberKeywordType"] = 204] = "NumberKeywordType";
|
|
115
|
+
SyntaxKind[SyntaxKind["BigIntKeywordType"] = 205] = "BigIntKeywordType";
|
|
116
|
+
SyntaxKind[SyntaxKind["StringKeywordType"] = 206] = "StringKeywordType";
|
|
117
|
+
SyntaxKind[SyntaxKind["BooleanKeywordType"] = 207] = "BooleanKeywordType";
|
|
118
|
+
SyntaxKind[SyntaxKind["SymbolKeywordType"] = 208] = "SymbolKeywordType";
|
|
119
|
+
SyntaxKind[SyntaxKind["VoidKeywordType"] = 209] = "VoidKeywordType";
|
|
120
|
+
SyntaxKind[SyntaxKind["UndefinedKeywordType"] = 210] = "UndefinedKeywordType";
|
|
121
|
+
SyntaxKind[SyntaxKind["NullKeywordType"] = 211] = "NullKeywordType";
|
|
122
|
+
SyntaxKind[SyntaxKind["NeverKeywordType"] = 212] = "NeverKeywordType";
|
|
123
|
+
SyntaxKind[SyntaxKind["ObjectKeywordType"] = 213] = "ObjectKeywordType";
|
|
124
|
+
SyntaxKind[SyntaxKind["ThisKeywordType"] = 214] = "ThisKeywordType";
|
|
125
|
+
SyntaxKind[SyntaxKind["LiteralType"] = 215] = "LiteralType";
|
|
126
|
+
SyntaxKind[SyntaxKind["ArrayType"] = 216] = "ArrayType";
|
|
127
|
+
SyntaxKind[SyntaxKind["TupleType"] = 217] = "TupleType";
|
|
128
|
+
SyntaxKind[SyntaxKind["UnionType"] = 218] = "UnionType";
|
|
129
|
+
SyntaxKind[SyntaxKind["IntersectionType"] = 219] = "IntersectionType";
|
|
130
|
+
SyntaxKind[SyntaxKind["FunctionType"] = 220] = "FunctionType";
|
|
131
|
+
SyntaxKind[SyntaxKind["TypeLiteral"] = 221] = "TypeLiteral";
|
|
132
|
+
SyntaxKind[SyntaxKind["PropertySignature"] = 222] = "PropertySignature";
|
|
133
|
+
SyntaxKind[SyntaxKind["MethodSignature"] = 223] = "MethodSignature";
|
|
134
|
+
SyntaxKind[SyntaxKind["IndexSignature"] = 224] = "IndexSignature";
|
|
135
|
+
SyntaxKind[SyntaxKind["ParenthesizedType"] = 225] = "ParenthesizedType";
|
|
136
|
+
SyntaxKind[SyntaxKind["TypeQuery"] = 226] = "TypeQuery";
|
|
137
|
+
SyntaxKind[SyntaxKind["IndexedAccessType"] = 227] = "IndexedAccessType";
|
|
138
|
+
SyntaxKind[SyntaxKind["TypeOperator"] = 228] = "TypeOperator";
|
|
139
|
+
SyntaxKind[SyntaxKind["MappedType"] = 229] = "MappedType";
|
|
140
|
+
SyntaxKind[SyntaxKind["ConditionalType"] = 230] = "ConditionalType";
|
|
141
|
+
SyntaxKind[SyntaxKind["InferType"] = 231] = "InferType";
|
|
142
|
+
SyntaxKind[SyntaxKind["OptionalType"] = 232] = "OptionalType";
|
|
143
|
+
SyntaxKind[SyntaxKind["RestType"] = 233] = "RestType";
|
|
144
|
+
})(SyntaxKind || (SyntaxKind = {}));
|
|
145
|
+
export var NodeFlags;
|
|
146
|
+
(function (NodeFlags) {
|
|
147
|
+
NodeFlags[NodeFlags["None"] = 0] = "None";
|
|
148
|
+
NodeFlags[NodeFlags["Let"] = 1] = "Let";
|
|
149
|
+
NodeFlags[NodeFlags["Const"] = 2] = "Const";
|
|
150
|
+
NodeFlags[NodeFlags["Var"] = 4] = "Var";
|
|
151
|
+
NodeFlags[NodeFlags["Exported"] = 8] = "Exported";
|
|
152
|
+
NodeFlags[NodeFlags["Default"] = 16] = "Default";
|
|
153
|
+
NodeFlags[NodeFlags["Declare"] = 32] = "Declare";
|
|
154
|
+
NodeFlags[NodeFlags["Async"] = 64] = "Async";
|
|
155
|
+
NodeFlags[NodeFlags["Generator"] = 128] = "Generator";
|
|
156
|
+
NodeFlags[NodeFlags["Ambient"] = 256] = "Ambient";
|
|
157
|
+
NodeFlags[NodeFlags["Readonly"] = 512] = "Readonly";
|
|
158
|
+
NodeFlags[NodeFlags["Abstract"] = 1024] = "Abstract";
|
|
159
|
+
NodeFlags[NodeFlags["Optional"] = 2048] = "Optional";
|
|
160
|
+
})(NodeFlags || (NodeFlags = {}));
|
|
161
|
+
export var ModifierKind;
|
|
162
|
+
(function (ModifierKind) {
|
|
163
|
+
ModifierKind["Export"] = "export";
|
|
164
|
+
ModifierKind["Default"] = "default";
|
|
165
|
+
ModifierKind["Declare"] = "declare";
|
|
166
|
+
ModifierKind["Abstract"] = "abstract";
|
|
167
|
+
ModifierKind["Public"] = "public";
|
|
168
|
+
ModifierKind["Private"] = "private";
|
|
169
|
+
ModifierKind["Protected"] = "protected";
|
|
170
|
+
ModifierKind["Static"] = "static";
|
|
171
|
+
ModifierKind["Readonly"] = "readonly";
|
|
172
|
+
ModifierKind["Async"] = "async";
|
|
173
|
+
})(ModifierKind || (ModifierKind = {}));
|
|
174
|
+
export var PrefixUnaryOperator;
|
|
175
|
+
(function (PrefixUnaryOperator) {
|
|
176
|
+
PrefixUnaryOperator["Plus"] = "+";
|
|
177
|
+
PrefixUnaryOperator["Minus"] = "-";
|
|
178
|
+
PrefixUnaryOperator["Tilde"] = "~";
|
|
179
|
+
PrefixUnaryOperator["Exclamation"] = "!";
|
|
180
|
+
PrefixUnaryOperator["TypeOf"] = "typeof";
|
|
181
|
+
PrefixUnaryOperator["Void"] = "void";
|
|
182
|
+
PrefixUnaryOperator["Delete"] = "delete";
|
|
183
|
+
PrefixUnaryOperator["PlusPlus"] = "++";
|
|
184
|
+
PrefixUnaryOperator["MinusMinus"] = "--";
|
|
185
|
+
PrefixUnaryOperator["Await"] = "await";
|
|
186
|
+
})(PrefixUnaryOperator || (PrefixUnaryOperator = {}));
|
|
187
|
+
export var PostfixUnaryOperator;
|
|
188
|
+
(function (PostfixUnaryOperator) {
|
|
189
|
+
PostfixUnaryOperator["PlusPlus"] = "++";
|
|
190
|
+
PostfixUnaryOperator["MinusMinus"] = "--";
|
|
191
|
+
})(PostfixUnaryOperator || (PostfixUnaryOperator = {}));
|
|
192
|
+
export var BinaryOperator;
|
|
193
|
+
(function (BinaryOperator) {
|
|
194
|
+
BinaryOperator["Add"] = "+";
|
|
195
|
+
BinaryOperator["Subtract"] = "-";
|
|
196
|
+
BinaryOperator["Multiply"] = "*";
|
|
197
|
+
BinaryOperator["Divide"] = "/";
|
|
198
|
+
BinaryOperator["Remainder"] = "%";
|
|
199
|
+
BinaryOperator["Exponent"] = "**";
|
|
200
|
+
BinaryOperator["LessThan"] = "<";
|
|
201
|
+
BinaryOperator["LessThanEquals"] = "<=";
|
|
202
|
+
BinaryOperator["GreaterThan"] = ">";
|
|
203
|
+
BinaryOperator["GreaterThanEquals"] = ">=";
|
|
204
|
+
BinaryOperator["EqualsEquals"] = "==";
|
|
205
|
+
BinaryOperator["ExclamationEquals"] = "!=";
|
|
206
|
+
BinaryOperator["EqualsEqualsEquals"] = "===";
|
|
207
|
+
BinaryOperator["ExclamationEqualsEquals"] = "!==";
|
|
208
|
+
BinaryOperator["AmpersandAmpersand"] = "&&";
|
|
209
|
+
BinaryOperator["BarBar"] = "||";
|
|
210
|
+
BinaryOperator["QuestionQuestion"] = "??";
|
|
211
|
+
BinaryOperator["Ampersand"] = "&";
|
|
212
|
+
BinaryOperator["Bar"] = "|";
|
|
213
|
+
BinaryOperator["Caret"] = "^";
|
|
214
|
+
BinaryOperator["LessThanLessThan"] = "<<";
|
|
215
|
+
BinaryOperator["GreaterThanGreaterThan"] = ">>";
|
|
216
|
+
BinaryOperator["GreaterThanGreaterThanGreaterThan"] = ">>>";
|
|
217
|
+
BinaryOperator["Comma"] = ",";
|
|
218
|
+
BinaryOperator["In"] = "in";
|
|
219
|
+
BinaryOperator["InstanceOf"] = "instanceof";
|
|
220
|
+
})(BinaryOperator || (BinaryOperator = {}));
|
|
221
|
+
/** Assignment operators, including the compound forms. */
|
|
222
|
+
export var AssignmentOperator;
|
|
223
|
+
(function (AssignmentOperator) {
|
|
224
|
+
AssignmentOperator["Assign"] = "=";
|
|
225
|
+
AssignmentOperator["AddAssign"] = "+=";
|
|
226
|
+
AssignmentOperator["SubtractAssign"] = "-=";
|
|
227
|
+
AssignmentOperator["MultiplyAssign"] = "*=";
|
|
228
|
+
AssignmentOperator["DivideAssign"] = "/=";
|
|
229
|
+
AssignmentOperator["RemainderAssign"] = "%=";
|
|
230
|
+
AssignmentOperator["ExponentAssign"] = "**=";
|
|
231
|
+
AssignmentOperator["LessThanLessThanAssign"] = "<<=";
|
|
232
|
+
AssignmentOperator["GreaterThanGreaterThanAssign"] = ">>=";
|
|
233
|
+
AssignmentOperator["GreaterThanGreaterThanGreaterThanAssign"] = ">>>=";
|
|
234
|
+
AssignmentOperator["AmpersandAssign"] = "&=";
|
|
235
|
+
AssignmentOperator["BarAssign"] = "|=";
|
|
236
|
+
AssignmentOperator["CaretAssign"] = "^=";
|
|
237
|
+
AssignmentOperator["AmpersandAmpersandAssign"] = "&&=";
|
|
238
|
+
AssignmentOperator["BarBarAssign"] = "||=";
|
|
239
|
+
AssignmentOperator["QuestionQuestionAssign"] = "??=";
|
|
240
|
+
})(AssignmentOperator || (AssignmentOperator = {}));
|
|
241
|
+
export var TypeOperator;
|
|
242
|
+
(function (TypeOperator) {
|
|
243
|
+
TypeOperator["KeyOf"] = "keyof";
|
|
244
|
+
TypeOperator["Unique"] = "unique";
|
|
245
|
+
TypeOperator["Readonly"] = "readonly";
|
|
246
|
+
})(TypeOperator || (TypeOperator = {}));
|
|
247
|
+
//# sourceMappingURL=nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/ast/nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SyntaxKind, type Node } from "./nodes.js";
|
|
2
|
+
/**
|
|
3
|
+
* A generic, allocation-light AST visitor. The parser, binder and checker all
|
|
4
|
+
* traverse the tree; centralizing the "what are my children" logic avoids the
|
|
5
|
+
* classic bug where a new node kind is added but one traversal forgets it.
|
|
6
|
+
*/
|
|
7
|
+
export type VisitorFn<T extends Node = Node> = (node: T) => void;
|
|
8
|
+
export interface Visitor {
|
|
9
|
+
[SyntaxKind.Identifier]?: VisitorFn;
|
|
10
|
+
[key: number]: VisitorFn | undefined;
|
|
11
|
+
}
|
|
12
|
+
/** Return the direct children of a node for generic traversal. */
|
|
13
|
+
export declare function getChildren(node: Node): Node[];
|
|
14
|
+
/** Depth-first pre-order traversal. */
|
|
15
|
+
export declare function forEachChild(node: Node, visit: (child: Node) => void): void;
|
|
16
|
+
export declare function walk(node: Node, visit: VisitorFn): void;
|
|
17
|
+
/** Find the innermost node whose range contains `offset`. */
|
|
18
|
+
export declare function nodeAtPosition(root: Node, offset: number): Node | undefined;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SyntaxKind } from "./nodes.js";
|
|
2
|
+
/** Return the direct children of a node for generic traversal. */
|
|
3
|
+
export function getChildren(node) {
|
|
4
|
+
const children = [];
|
|
5
|
+
const push = (n) => {
|
|
6
|
+
if (n && typeof n === "object" && "kind" in n)
|
|
7
|
+
children.push(n);
|
|
8
|
+
};
|
|
9
|
+
const pushAll = (list) => {
|
|
10
|
+
if (!list)
|
|
11
|
+
return;
|
|
12
|
+
for (const item of list)
|
|
13
|
+
push(item);
|
|
14
|
+
};
|
|
15
|
+
const n = node;
|
|
16
|
+
for (const key of Object.keys(n)) {
|
|
17
|
+
if (key === "kind" || key === "start" || key === "end" || key === "text" || key === "value")
|
|
18
|
+
continue;
|
|
19
|
+
const value = n[key];
|
|
20
|
+
if (Array.isArray(value))
|
|
21
|
+
pushAll(value);
|
|
22
|
+
else if (value && typeof value === "object" && "kind" in value)
|
|
23
|
+
push(value);
|
|
24
|
+
}
|
|
25
|
+
return children;
|
|
26
|
+
}
|
|
27
|
+
/** Depth-first pre-order traversal. */
|
|
28
|
+
export function forEachChild(node, visit) {
|
|
29
|
+
for (const child of getChildren(node))
|
|
30
|
+
visit(child);
|
|
31
|
+
}
|
|
32
|
+
export function walk(node, visit) {
|
|
33
|
+
visit(node);
|
|
34
|
+
for (const child of getChildren(node))
|
|
35
|
+
walk(child, visit);
|
|
36
|
+
}
|
|
37
|
+
/** Find the innermost node whose range contains `offset`. */
|
|
38
|
+
export function nodeAtPosition(root, offset) {
|
|
39
|
+
let current = root;
|
|
40
|
+
let result;
|
|
41
|
+
while (current) {
|
|
42
|
+
const children = getChildren(current).filter((c) => c.start <= offset && offset < c.end);
|
|
43
|
+
if (children.length === 0)
|
|
44
|
+
break;
|
|
45
|
+
// Prefer the smallest (innermost) child.
|
|
46
|
+
children.sort((a, b) => a.end - a.start - (b.end - b.start));
|
|
47
|
+
current = children[0];
|
|
48
|
+
result = current;
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=visitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.js","sourceRoot":"","sources":["../../../src/ast/visitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAenD,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,IAAU;IACpC,MAAM,QAAQ,GAAW,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,CAAU,EAAQ,EAAE;QAChC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAK,CAAU;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAS,CAAC,CAAC;IACpF,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,IAAoC,EAAQ,EAAE;QAC7D,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,IAA0C,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO;YAAE,SAAS;QACtG,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC;aACpC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAK,KAAgB;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,YAAY,CAAC,IAAU,EAAE,KAA4B;IACnE,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAU,EAAE,KAAgB;IAC/C,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,MAAc;IACvD,IAAI,OAAO,GAAqB,IAAI,CAAC;IACrC,IAAI,MAAwB,CAAC;IAC7B,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,QAAQ,GAAW,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACvG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QACjC,yCAAyC;QACzC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAO,EAAE,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The binder walks the AST once and answers two questions the code generator
|
|
3
|
+
* and checker depend on:
|
|
4
|
+
*
|
|
5
|
+
* 1. Which declaration does every identifier refer to? (scopes + symbols)
|
|
6
|
+
* 2. Which variables are captured by nested functions? (closure conversion)
|
|
7
|
+
*
|
|
8
|
+
* The result is deliberately plain data — maps and records — so it can be
|
|
9
|
+
* cached, serialized for the incremental build, and unit tested in isolation.
|
|
10
|
+
*/
|
|
11
|
+
import { type ArrowFunction, type FunctionDeclaration, type FunctionExpression, type Identifier, type Node, type SourceFileNode } from "../ast/nodes.js";
|
|
12
|
+
export declare enum SymbolKind {
|
|
13
|
+
Var = "var",
|
|
14
|
+
Let = "let",
|
|
15
|
+
Const = "const",
|
|
16
|
+
Function = "function",
|
|
17
|
+
Parameter = "parameter",
|
|
18
|
+
Class = "class",
|
|
19
|
+
Interface = "interface",
|
|
20
|
+
TypeAlias = "type",
|
|
21
|
+
Enum = "enum",
|
|
22
|
+
Import = "import",
|
|
23
|
+
Namespace = "namespace"
|
|
24
|
+
}
|
|
25
|
+
export interface SymbolInfo {
|
|
26
|
+
readonly id: number;
|
|
27
|
+
readonly name: string;
|
|
28
|
+
readonly kind: SymbolKind;
|
|
29
|
+
/** False for `const` bindings and imports. */
|
|
30
|
+
readonly mutable: boolean;
|
|
31
|
+
/** The function this symbol belongs to. */
|
|
32
|
+
readonly fn: FunctionInfo;
|
|
33
|
+
readonly declarations: Node[];
|
|
34
|
+
readonly references: Identifier[];
|
|
35
|
+
/** Set when referenced from a nested function. */
|
|
36
|
+
captured: boolean;
|
|
37
|
+
/** Assigned after construction once we know it is captured. */
|
|
38
|
+
boxed: boolean;
|
|
39
|
+
}
|
|
40
|
+
export type FunctionNode = SourceFileNode | FunctionDeclaration | FunctionExpression | ArrowFunction;
|
|
41
|
+
export interface FunctionInfo {
|
|
42
|
+
readonly id: number;
|
|
43
|
+
readonly name: string;
|
|
44
|
+
readonly node: FunctionNode;
|
|
45
|
+
readonly parent?: FunctionInfo;
|
|
46
|
+
readonly scope: Scope;
|
|
47
|
+
readonly params: SymbolInfo[];
|
|
48
|
+
/** Every binding declared directly in this function (params + locals). */
|
|
49
|
+
readonly locals: SymbolInfo[];
|
|
50
|
+
/** Outer bindings referenced by this function or any descendant. */
|
|
51
|
+
readonly captures: SymbolInfo[];
|
|
52
|
+
readonly captureIndex: Map<number, number>;
|
|
53
|
+
readonly isModule: boolean;
|
|
54
|
+
readonly isArrow: boolean;
|
|
55
|
+
}
|
|
56
|
+
export declare enum ScopeKind {
|
|
57
|
+
Module = "module",
|
|
58
|
+
Function = "function",
|
|
59
|
+
Block = "block",
|
|
60
|
+
For = "for",
|
|
61
|
+
Catch = "catch"
|
|
62
|
+
}
|
|
63
|
+
export interface Scope {
|
|
64
|
+
readonly kind: ScopeKind;
|
|
65
|
+
readonly parent?: Scope;
|
|
66
|
+
readonly fn: FunctionInfo;
|
|
67
|
+
readonly symbols: Map<string, SymbolInfo>;
|
|
68
|
+
/** The syntax node that introduced the scope, when there is one. */
|
|
69
|
+
readonly node?: Node;
|
|
70
|
+
}
|
|
71
|
+
export interface BindResult {
|
|
72
|
+
readonly moduleFunction: FunctionInfo;
|
|
73
|
+
readonly functions: FunctionInfo[];
|
|
74
|
+
/** Maps a function-like AST node to the FunctionInfo the binder built for it. */
|
|
75
|
+
readonly functionOfNode: Map<Node, FunctionInfo>;
|
|
76
|
+
readonly symbolOfDeclaration: Map<Node, SymbolInfo>;
|
|
77
|
+
readonly symbolOfIdentifier: Map<Identifier, SymbolInfo>;
|
|
78
|
+
readonly scopes: Map<Node, Scope>;
|
|
79
|
+
/** Identifier references that could not be resolved in user code. */
|
|
80
|
+
readonly unresolved: Identifier[];
|
|
81
|
+
}
|
|
82
|
+
export declare function bind(sourceFile: SourceFileNode): BindResult;
|