brighterscript 1.0.0-alpha.30 → 1.0.0-alpha.32
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/CHANGELOG.md +25 -0
- package/dist/AstValidationSegmenter.d.ts +10 -3
- package/dist/AstValidationSegmenter.js +73 -50
- package/dist/AstValidationSegmenter.js.map +1 -1
- package/dist/CrossScopeValidator.d.ts +67 -0
- package/dist/CrossScopeValidator.js +625 -0
- package/dist/CrossScopeValidator.js.map +1 -0
- package/dist/DiagnosticManager.d.ts +1 -0
- package/dist/DiagnosticManager.js +17 -13
- package/dist/DiagnosticManager.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +6 -6
- package/dist/DiagnosticMessages.js +8 -8
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/Program.d.ts +11 -17
- package/dist/Program.js +91 -96
- package/dist/Program.js.map +1 -1
- package/dist/Scope.js +18 -24
- package/dist/Scope.js.map +1 -1
- package/dist/SemanticTokenUtils.js +4 -0
- package/dist/SemanticTokenUtils.js.map +1 -1
- package/dist/SymbolTable.js +4 -1
- package/dist/SymbolTable.js.map +1 -1
- package/dist/SymbolTypeFlag.d.ts +2 -1
- package/dist/SymbolTypeFlag.js +1 -0
- package/dist/SymbolTypeFlag.js.map +1 -1
- package/dist/astUtils/CachedLookups.d.ts +2 -1
- package/dist/astUtils/CachedLookups.js +9 -2
- package/dist/astUtils/CachedLookups.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +4 -3
- package/dist/astUtils/reflection.js +7 -3
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +3 -2
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.js +2 -2
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.js +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +6 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +13 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +1 -4
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -1
- package/dist/bscPlugin/validation/{BrsFileAfterValidatior.js → BrsFileAfterValidator.js} +1 -1
- package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +3 -11
- package/dist/bscPlugin/validation/ScopeValidator.js +120 -191
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.spec.js +111 -10
- package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +7 -7
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +8 -5
- package/dist/files/BrsFile.js +63 -57
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +145 -19
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/interfaces.d.ts +3 -8
- package/dist/interfaces.js +3 -13
- package/dist/interfaces.js.map +1 -1
- package/dist/parser/AstNode.d.ts +2 -1
- package/dist/parser/AstNode.js +1 -0
- package/dist/parser/AstNode.js.map +1 -1
- package/dist/parser/Expression.d.ts +1 -1
- package/dist/parser/Parser.d.ts +1 -0
- package/dist/parser/Parser.js +42 -35
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Statement.d.ts +26 -4
- package/dist/parser/Statement.js +95 -64
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +2 -1
- package/dist/parser/TranspileState.js +9 -7
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.js +63 -2
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +1 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/roku-types/data.json +20 -2
- package/dist/roku-types/index.d.ts +14 -0
- package/dist/types/BuiltInInterfaceAdder.d.ts +3 -1
- package/dist/types/BuiltInInterfaceAdder.js +34 -7
- package/dist/types/BuiltInInterfaceAdder.js.map +1 -1
- package/dist/types/ClassType.d.ts +0 -1
- package/dist/types/ClassType.js +0 -1
- package/dist/types/ClassType.js.map +1 -1
- package/dist/types/ClassType.spec.js +2 -2
- package/dist/types/ReferenceType.d.ts +8 -0
- package/dist/types/ReferenceType.js +56 -1
- package/dist/types/ReferenceType.js.map +1 -1
- package/dist/types/UnionType.js +1 -1
- package/dist/types/UnionType.js.map +1 -1
- package/dist/types/helpers.d.ts +2 -0
- package/dist/types/helpers.js +14 -1
- package/dist/types/helpers.js.map +1 -1
- package/dist/util.d.ts +2 -0
- package/dist/util.js +41 -21
- package/dist/util.js.map +1 -1
- package/package.json +2 -2
- package/dist/bscPlugin/validation/BrsFileAfterValidatior.js.map +0 -1
- /package/dist/bscPlugin/validation/{BrsFileAfterValidatior.d.ts → BrsFileAfterValidator.d.ts} +0 -0
package/dist/parser/Statement.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ConditionalCompileConstStatement = exports.ConditionalCompileStatement = exports.AliasStatement = exports.ConditionalCompileErrorStatement = exports.TypecastStatement = exports.ContinueStatement = exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.FieldStatement = exports.MethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = void 0;
|
|
3
|
+
exports.ConditionalCompileConstStatement = exports.ConditionalCompileStatement = exports.AliasStatement = exports.ConditionalCompileErrorStatement = exports.TypecastStatement = exports.ContinueStatement = exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.FieldStatement = exports.MethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.ExpressionStatement = exports.Block = exports.AugmentedAssignmentStatement = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = void 0;
|
|
4
4
|
const TokenKind_1 = require("../lexer/TokenKind");
|
|
5
5
|
const Expression_1 = require("./Expression");
|
|
6
6
|
const util_1 = require("../util");
|
|
@@ -112,20 +112,14 @@ class AssignmentStatement extends AstNode_2.Statement {
|
|
|
112
112
|
this.range = util_1.util.createBoundingRange(util_1.util.createBoundingRangeFromTokens(this.tokens), this.value);
|
|
113
113
|
}
|
|
114
114
|
transpile(state) {
|
|
115
|
-
var _a
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
' ',
|
|
124
|
-
state.transpileToken((_d = this.tokens.equals) !== null && _d !== void 0 ? _d : (0, creators_1.createToken)(TokenKind_1.TokenKind.Equal)),
|
|
125
|
-
' ',
|
|
126
|
-
...this.value.transpile(state)
|
|
127
|
-
];
|
|
128
|
-
}
|
|
115
|
+
var _a;
|
|
116
|
+
return [
|
|
117
|
+
state.transpileToken(this.tokens.name),
|
|
118
|
+
' ',
|
|
119
|
+
state.transpileToken((_a = this.tokens.equals) !== null && _a !== void 0 ? _a : (0, creators_1.createToken)(TokenKind_1.TokenKind.Equal)),
|
|
120
|
+
' ',
|
|
121
|
+
...this.value.transpile(state)
|
|
122
|
+
];
|
|
129
123
|
}
|
|
130
124
|
walk(visitor, options) {
|
|
131
125
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
@@ -147,6 +141,46 @@ class AssignmentStatement extends AstNode_2.Statement {
|
|
|
147
141
|
}
|
|
148
142
|
}
|
|
149
143
|
exports.AssignmentStatement = AssignmentStatement;
|
|
144
|
+
class AugmentedAssignmentStatement extends AstNode_2.Statement {
|
|
145
|
+
constructor(options) {
|
|
146
|
+
super();
|
|
147
|
+
this.kind = AstNode_1.AstNodeKind.AugmentedAssignmentStatement;
|
|
148
|
+
this.value = options.value;
|
|
149
|
+
this.tokens = {
|
|
150
|
+
operator: options.operator
|
|
151
|
+
};
|
|
152
|
+
this.item = options.item;
|
|
153
|
+
this.value = options.value;
|
|
154
|
+
this.range = util_1.util.createBoundingRange(this.item, util_1.util.createBoundingRangeFromTokens(this.tokens), this.value);
|
|
155
|
+
}
|
|
156
|
+
transpile(state) {
|
|
157
|
+
return [
|
|
158
|
+
this.item.transpile(state),
|
|
159
|
+
' ',
|
|
160
|
+
state.transpileToken(this.tokens.operator),
|
|
161
|
+
' ',
|
|
162
|
+
this.value.transpile(state)
|
|
163
|
+
];
|
|
164
|
+
}
|
|
165
|
+
walk(visitor, options) {
|
|
166
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
167
|
+
(0, visitors_1.walk)(this, 'item', visitor, options);
|
|
168
|
+
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
getType(options) {
|
|
172
|
+
const variableType = util_1.util.binaryOperatorResultType(this.item.getType(options), this.tokens.operator, this.value.getType(options));
|
|
173
|
+
//const variableType = this.typeExpression?.getType({ ...options, typeChain: undefined }) ?? this.value.getType({ ...options, typeChain: undefined });
|
|
174
|
+
// Note: compound assignments (eg. +=) are internally dealt with via the RHS being a BinaryExpression
|
|
175
|
+
// so this.value will be a BinaryExpression, and BinaryExpressions can figure out their own types
|
|
176
|
+
// options.typeChain?.push(new TypeChainEntry({ name: this.tokens.name.text, type: variableType, data: options.data, range: this.tokens.name.range, astNode: this }));
|
|
177
|
+
return variableType;
|
|
178
|
+
}
|
|
179
|
+
getLeadingTrivia() {
|
|
180
|
+
return this.item.getLeadingTrivia();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
exports.AugmentedAssignmentStatement = AugmentedAssignmentStatement;
|
|
150
184
|
class Block extends AstNode_2.Statement {
|
|
151
185
|
constructor(options) {
|
|
152
186
|
var _a;
|
|
@@ -823,30 +857,27 @@ class DottedSetStatement extends AstNode_2.Statement {
|
|
|
823
857
|
this.kind = AstNode_1.AstNodeKind.DottedSetStatement;
|
|
824
858
|
this.tokens = {
|
|
825
859
|
name: options.name,
|
|
826
|
-
dot: options.dot
|
|
860
|
+
dot: options.dot,
|
|
861
|
+
equals: options.equals
|
|
827
862
|
};
|
|
828
863
|
this.obj = options.obj;
|
|
829
864
|
this.value = options.value;
|
|
830
865
|
this.range = util_1.util.createBoundingRange(this.obj, this.tokens.dot, this.tokens.name, this.value);
|
|
831
866
|
}
|
|
832
867
|
transpile(state) {
|
|
833
|
-
var _a, _b, _c;
|
|
834
868
|
//if the value is a compound assignment, don't add the obj, dot, name, or operator...the expression will handle that
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
...this.value.transpile(state)
|
|
848
|
-
];
|
|
849
|
-
}
|
|
869
|
+
return [
|
|
870
|
+
//object
|
|
871
|
+
...this.obj.transpile(state),
|
|
872
|
+
this.tokens.dot ? state.tokenToSourceNode(this.tokens.dot) : '.',
|
|
873
|
+
//name
|
|
874
|
+
state.transpileToken(this.tokens.name),
|
|
875
|
+
' ',
|
|
876
|
+
state.transpileToken(this.tokens.equals, '='),
|
|
877
|
+
' ',
|
|
878
|
+
//right-hand-side of assignment
|
|
879
|
+
...this.value.transpile(state)
|
|
880
|
+
];
|
|
850
881
|
}
|
|
851
882
|
walk(visitor, options) {
|
|
852
883
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
@@ -877,7 +908,8 @@ class IndexedSetStatement extends AstNode_2.Statement {
|
|
|
877
908
|
this.kind = AstNode_1.AstNodeKind.IndexedSetStatement;
|
|
878
909
|
this.tokens = {
|
|
879
910
|
openingSquare: options.openingSquare,
|
|
880
|
-
closingSquare: options.closingSquare
|
|
911
|
+
closingSquare: options.closingSquare,
|
|
912
|
+
equals: options.equals
|
|
881
913
|
};
|
|
882
914
|
this.obj = options.obj;
|
|
883
915
|
this.indexes = options.indexes;
|
|
@@ -885,29 +917,23 @@ class IndexedSetStatement extends AstNode_2.Statement {
|
|
|
885
917
|
this.range = util_1.util.createBoundingRange(this.obj, this.tokens.openingSquare, ...this.indexes, this.tokens.closingSquare, this.value);
|
|
886
918
|
}
|
|
887
919
|
transpile(state) {
|
|
888
|
-
var _a
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
//
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
state.transpileToken(this.tokens.openingSquare));
|
|
900
|
-
for (let i = 0; i < this.indexes.length; i++) {
|
|
901
|
-
//add comma between indexes
|
|
902
|
-
if (i > 0) {
|
|
903
|
-
result.push(', ');
|
|
904
|
-
}
|
|
905
|
-
let index = this.indexes[i];
|
|
906
|
-
result.push(...((_d = index === null || index === void 0 ? void 0 : index.transpile(state)) !== null && _d !== void 0 ? _d : []));
|
|
920
|
+
var _a;
|
|
921
|
+
const result = [];
|
|
922
|
+
result.push(
|
|
923
|
+
//obj
|
|
924
|
+
...this.obj.transpile(state),
|
|
925
|
+
// [
|
|
926
|
+
state.transpileToken(this.tokens.openingSquare, '['));
|
|
927
|
+
for (let i = 0; i < this.indexes.length; i++) {
|
|
928
|
+
//add comma between indexes
|
|
929
|
+
if (i > 0) {
|
|
930
|
+
result.push(', ');
|
|
907
931
|
}
|
|
908
|
-
|
|
909
|
-
|
|
932
|
+
let index = this.indexes[i];
|
|
933
|
+
result.push(...((_a = index === null || index === void 0 ? void 0 : index.transpile(state)) !== null && _a !== void 0 ? _a : []));
|
|
910
934
|
}
|
|
935
|
+
result.push(state.transpileToken(this.tokens.closingSquare, ']'), ' ', state.transpileToken(this.tokens.equals, '='), ' ', ...this.value.transpile(state));
|
|
936
|
+
return result;
|
|
911
937
|
}
|
|
912
938
|
walk(visitor, options) {
|
|
913
939
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
@@ -1001,7 +1027,11 @@ class NamespaceStatement extends AstNode_2.Statement {
|
|
|
1001
1027
|
}
|
|
1002
1028
|
transpile(state) {
|
|
1003
1029
|
//namespaces don't actually have any real content, so just transpile their bodies
|
|
1004
|
-
return
|
|
1030
|
+
return [
|
|
1031
|
+
state.transpileLeadingComments(this.tokens.namespace),
|
|
1032
|
+
this.body.transpile(state),
|
|
1033
|
+
state.transpileLeadingComments(this.tokens.endNamespace)
|
|
1034
|
+
];
|
|
1005
1035
|
}
|
|
1006
1036
|
getTypedef(state) {
|
|
1007
1037
|
var _a;
|
|
@@ -1053,8 +1083,7 @@ class ImportStatement extends AstNode_2.Statement {
|
|
|
1053
1083
|
//The xml files are responsible for adding the additional script imports, but
|
|
1054
1084
|
//add the import statement as a comment just for debugging purposes
|
|
1055
1085
|
return [
|
|
1056
|
-
|
|
1057
|
-
state.transpileToken(this.tokens.import, 'import'),
|
|
1086
|
+
state.transpileToken(this.tokens.import, 'import', true),
|
|
1058
1087
|
' ',
|
|
1059
1088
|
state.transpileToken(this.tokens.path)
|
|
1060
1089
|
];
|
|
@@ -1156,7 +1185,9 @@ class InterfaceStatement extends AstNode_2.Statement {
|
|
|
1156
1185
|
}
|
|
1157
1186
|
transpile(state) {
|
|
1158
1187
|
//interfaces should completely disappear at runtime
|
|
1159
|
-
return [
|
|
1188
|
+
return [
|
|
1189
|
+
state.transpileLeadingComments(this.tokens.interface)
|
|
1190
|
+
];
|
|
1160
1191
|
}
|
|
1161
1192
|
getTypedef(state) {
|
|
1162
1193
|
var _a, _b, _c, _d;
|
|
@@ -2155,7 +2186,9 @@ class EnumStatement extends AstNode_2.Statement {
|
|
|
2155
2186
|
}
|
|
2156
2187
|
transpile(state) {
|
|
2157
2188
|
//enum declarations do not exist at runtime, so don't transpile anything...
|
|
2158
|
-
return [
|
|
2189
|
+
return [
|
|
2190
|
+
state.transpileLeadingComments(this.tokens.enum)
|
|
2191
|
+
];
|
|
2159
2192
|
}
|
|
2160
2193
|
getTypedef(state) {
|
|
2161
2194
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -2288,7 +2321,7 @@ class ConstStatement extends AstNode_2.Statement {
|
|
|
2288
2321
|
}
|
|
2289
2322
|
transpile(state) {
|
|
2290
2323
|
//const declarations don't exist at runtime, so just transpile empty
|
|
2291
|
-
return [];
|
|
2324
|
+
return [state.transpileLeadingComments(this.tokens.const)];
|
|
2292
2325
|
}
|
|
2293
2326
|
getTypedef(state) {
|
|
2294
2327
|
var _a;
|
|
@@ -2349,8 +2382,7 @@ class TypecastStatement extends AstNode_2.Statement {
|
|
|
2349
2382
|
transpile(state) {
|
|
2350
2383
|
//the typecast statement is a comment just for debugging purposes
|
|
2351
2384
|
return [
|
|
2352
|
-
|
|
2353
|
-
state.transpileToken(this.tokens.typecast, 'typecast'),
|
|
2385
|
+
state.transpileToken(this.tokens.typecast, 'typecast', true),
|
|
2354
2386
|
' ',
|
|
2355
2387
|
this.typecastExpression.obj.transpile(state),
|
|
2356
2388
|
' ',
|
|
@@ -2414,8 +2446,7 @@ class AliasStatement extends AstNode_2.Statement {
|
|
|
2414
2446
|
transpile(state) {
|
|
2415
2447
|
//the alias statement is a comment just for debugging purposes
|
|
2416
2448
|
return [
|
|
2417
|
-
|
|
2418
|
-
state.transpileToken(this.tokens.alias, 'alias'),
|
|
2449
|
+
state.transpileToken(this.tokens.alias, 'alias', true),
|
|
2419
2450
|
' ',
|
|
2420
2451
|
state.transpileToken(this.tokens.name),
|
|
2421
2452
|
' ',
|