@abaplint/core 2.111.0 → 2.112.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/build/abaplint.d.ts +17 -8
- package/build/src/abap/5_syntax/_builtin.js +2 -2
- package/build/src/abap/5_syntax/_current_scope.js +2 -0
- package/build/src/abap/5_syntax/_procedural.js +6 -2
- package/build/src/abap/5_syntax/_syntax_input.js +11 -0
- package/build/src/abap/5_syntax/assert_error.js +7 -0
- package/build/src/abap/5_syntax/basic_types.js +78 -79
- package/build/src/abap/5_syntax/expressions/attribute_chain.js +15 -8
- package/build/src/abap/5_syntax/expressions/attribute_name.js +24 -11
- package/build/src/abap/5_syntax/expressions/cast.js +24 -13
- package/build/src/abap/5_syntax/expressions/compare.js +4 -4
- package/build/src/abap/5_syntax/expressions/component_chain.js +26 -11
- package/build/src/abap/5_syntax/expressions/component_compare.js +7 -4
- package/build/src/abap/5_syntax/expressions/component_compare_simple.js +11 -6
- package/build/src/abap/5_syntax/expressions/component_cond.js +3 -3
- package/build/src/abap/5_syntax/expressions/component_name.js +10 -5
- package/build/src/abap/5_syntax/expressions/cond.js +3 -6
- package/build/src/abap/5_syntax/expressions/cond_body.js +6 -6
- package/build/src/abap/5_syntax/expressions/conv_body.js +9 -8
- package/build/src/abap/5_syntax/expressions/corresponding_body.js +3 -3
- package/build/src/abap/5_syntax/expressions/data_definition.js +7 -7
- package/build/src/abap/5_syntax/expressions/database_table.js +9 -7
- package/build/src/abap/5_syntax/expressions/default.js +8 -2
- package/build/src/abap/5_syntax/expressions/dereference.js +5 -2
- package/build/src/abap/5_syntax/expressions/dynamic.js +2 -2
- package/build/src/abap/5_syntax/expressions/field_assignment.js +12 -5
- package/build/src/abap/5_syntax/expressions/field_chain.js +52 -64
- package/build/src/abap/5_syntax/expressions/field_length.js +2 -2
- package/build/src/abap/5_syntax/expressions/field_offset.js +2 -2
- package/build/src/abap/5_syntax/expressions/filter_body.js +3 -3
- package/build/src/abap/5_syntax/expressions/for.js +11 -11
- package/build/src/abap/5_syntax/expressions/form_param.js +10 -9
- package/build/src/abap/5_syntax/expressions/fstarget.js +8 -5
- package/build/src/abap/5_syntax/expressions/inline_data.js +11 -8
- package/build/src/abap/5_syntax/expressions/inline_field_definition.js +12 -8
- package/build/src/abap/5_syntax/expressions/inline_fs.js +7 -7
- package/build/src/abap/5_syntax/expressions/inline_loop_definition.js +16 -11
- package/build/src/abap/5_syntax/expressions/let.js +3 -3
- package/build/src/abap/5_syntax/expressions/loop_group_by.js +5 -15
- package/build/src/abap/5_syntax/expressions/message_source.js +4 -4
- package/build/src/abap/5_syntax/expressions/method_call_body.js +4 -4
- package/build/src/abap/5_syntax/expressions/method_call_chain.js +34 -25
- package/build/src/abap/5_syntax/expressions/method_call_param.js +33 -14
- package/build/src/abap/5_syntax/expressions/method_def_returning.js +7 -6
- package/build/src/abap/5_syntax/expressions/method_param.js +11 -10
- package/build/src/abap/5_syntax/expressions/method_parameters.js +76 -49
- package/build/src/abap/5_syntax/expressions/method_source.js +47 -38
- package/build/src/abap/5_syntax/expressions/new_object.js +48 -28
- package/build/src/abap/5_syntax/expressions/raise_with.js +2 -2
- package/build/src/abap/5_syntax/expressions/reduce_body.js +10 -10
- package/build/src/abap/5_syntax/expressions/reduce_next.js +3 -3
- package/build/src/abap/5_syntax/expressions/select.js +48 -33
- package/build/src/abap/5_syntax/expressions/select_loop.js +2 -2
- package/build/src/abap/5_syntax/expressions/source.js +74 -64
- package/build/src/abap/5_syntax/expressions/source_field.js +12 -6
- package/build/src/abap/5_syntax/expressions/source_field_symbol.js +8 -4
- package/build/src/abap/5_syntax/expressions/sql_compare.js +11 -19
- package/build/src/abap/5_syntax/expressions/sql_for_all_entries.js +7 -4
- package/build/src/abap/5_syntax/expressions/sql_from.js +3 -3
- package/build/src/abap/5_syntax/expressions/sql_in.js +34 -0
- package/build/src/abap/5_syntax/expressions/sql_order_by.js +2 -2
- package/build/src/abap/5_syntax/expressions/sql_source.js +3 -3
- package/build/src/abap/5_syntax/expressions/string_template.js +16 -8
- package/build/src/abap/5_syntax/expressions/switch_body.js +8 -4
- package/build/src/abap/5_syntax/expressions/table_expression.js +2 -2
- package/build/src/abap/5_syntax/expressions/target.js +50 -29
- package/build/src/abap/5_syntax/expressions/type_table.js +7 -7
- package/build/src/abap/5_syntax/expressions/value_body.js +17 -12
- package/build/src/abap/5_syntax/global_definitions/find_global_definitions.js +19 -6
- package/build/src/abap/5_syntax/spaghetti_scope.js +2 -1
- package/build/src/abap/5_syntax/statements/add.js +3 -3
- package/build/src/abap/5_syntax/statements/add_corresponding.js +3 -3
- package/build/src/abap/5_syntax/statements/append.js +25 -14
- package/build/src/abap/5_syntax/statements/assert.js +2 -2
- package/build/src/abap/5_syntax/statements/assign.js +17 -12
- package/build/src/abap/5_syntax/statements/authority_check.js +2 -2
- package/build/src/abap/5_syntax/statements/call.js +8 -5
- package/build/src/abap/5_syntax/statements/call_badi.js +4 -4
- package/build/src/abap/5_syntax/statements/call_function.js +12 -9
- package/build/src/abap/5_syntax/statements/call_kernel.js +2 -2
- package/build/src/abap/5_syntax/statements/call_transaction.js +3 -3
- package/build/src/abap/5_syntax/statements/call_transformation.js +5 -5
- package/build/src/abap/5_syntax/statements/case.js +2 -2
- package/build/src/abap/5_syntax/statements/case_type.js +2 -2
- package/build/src/abap/5_syntax/statements/catch.js +24 -19
- package/build/src/abap/5_syntax/statements/check.js +2 -2
- package/build/src/abap/5_syntax/statements/class_data.js +9 -5
- package/build/src/abap/5_syntax/statements/class_deferred.js +2 -2
- package/build/src/abap/5_syntax/statements/class_implementation.js +16 -13
- package/build/src/abap/5_syntax/statements/class_local_friends.js +16 -9
- package/build/src/abap/5_syntax/statements/clear.js +3 -3
- package/build/src/abap/5_syntax/statements/close_dataset.js +2 -2
- package/build/src/abap/5_syntax/statements/collect.js +4 -4
- package/build/src/abap/5_syntax/statements/commit_entities.js +4 -4
- package/build/src/abap/5_syntax/statements/concatenate.js +18 -11
- package/build/src/abap/5_syntax/statements/condense.js +2 -2
- package/build/src/abap/5_syntax/statements/constant.js +6 -5
- package/build/src/abap/5_syntax/statements/controls.js +5 -5
- package/build/src/abap/5_syntax/statements/convert.js +8 -8
- package/build/src/abap/5_syntax/statements/create_data.js +11 -11
- package/build/src/abap/5_syntax/statements/create_object.js +49 -26
- package/build/src/abap/5_syntax/statements/data.js +8 -4
- package/build/src/abap/5_syntax/statements/delete_cluster.js +4 -4
- package/build/src/abap/5_syntax/statements/delete_database.js +5 -5
- package/build/src/abap/5_syntax/statements/delete_internal.js +7 -7
- package/build/src/abap/5_syntax/statements/delete_report.js +2 -2
- package/build/src/abap/5_syntax/statements/describe.js +13 -13
- package/build/src/abap/5_syntax/statements/divide.js +3 -3
- package/build/src/abap/5_syntax/statements/do.js +8 -5
- package/build/src/abap/5_syntax/statements/editor_call.js +3 -3
- package/build/src/abap/5_syntax/statements/else_if.js +2 -2
- package/build/src/abap/5_syntax/statements/export.js +5 -5
- package/build/src/abap/5_syntax/statements/fieldsymbol.js +4 -4
- package/build/src/abap/5_syntax/statements/find.js +13 -13
- package/build/src/abap/5_syntax/statements/form.js +10 -7
- package/build/src/abap/5_syntax/statements/format.js +2 -2
- package/build/src/abap/5_syntax/statements/get_badi.js +4 -4
- package/build/src/abap/5_syntax/statements/get_bit.js +9 -6
- package/build/src/abap/5_syntax/statements/get_cursor.js +2 -2
- package/build/src/abap/5_syntax/statements/get_locale.js +3 -3
- package/build/src/abap/5_syntax/statements/get_parameter.js +4 -4
- package/build/src/abap/5_syntax/statements/get_reference.js +8 -5
- package/build/src/abap/5_syntax/statements/get_run_time.js +3 -3
- package/build/src/abap/5_syntax/statements/get_time.js +3 -3
- package/build/src/abap/5_syntax/statements/if.js +2 -2
- package/build/src/abap/5_syntax/statements/import.js +5 -5
- package/build/src/abap/5_syntax/statements/import_dynpro.js +3 -3
- package/build/src/abap/5_syntax/statements/include_type.js +9 -5
- package/build/src/abap/5_syntax/statements/insert_database.js +5 -5
- package/build/src/abap/5_syntax/statements/insert_field_group.js +4 -4
- package/build/src/abap/5_syntax/statements/insert_internal.js +22 -13
- package/build/src/abap/5_syntax/statements/insert_report.js +2 -2
- package/build/src/abap/5_syntax/statements/insert_textpool.js +2 -2
- package/build/src/abap/5_syntax/statements/interface_deferred.js +2 -2
- package/build/src/abap/5_syntax/statements/log_point.js +2 -2
- package/build/src/abap/5_syntax/statements/loop.js +29 -16
- package/build/src/abap/5_syntax/statements/loop_at_screen.js +3 -3
- package/build/src/abap/5_syntax/statements/message.js +6 -6
- package/build/src/abap/5_syntax/statements/method_implementation.js +18 -13
- package/build/src/abap/5_syntax/statements/modify_database.js +8 -8
- package/build/src/abap/5_syntax/statements/modify_entities.js +4 -4
- package/build/src/abap/5_syntax/statements/modify_internal.js +15 -8
- package/build/src/abap/5_syntax/statements/modify_screen.js +2 -2
- package/build/src/abap/5_syntax/statements/move.js +17 -10
- package/build/src/abap/5_syntax/statements/move_corresponding.js +14 -7
- package/build/src/abap/5_syntax/statements/multiply.js +3 -3
- package/build/src/abap/5_syntax/statements/open_dataset.js +3 -3
- package/build/src/abap/5_syntax/statements/pack.js +3 -3
- package/build/src/abap/5_syntax/statements/parameter.js +11 -6
- package/build/src/abap/5_syntax/statements/perform.js +12 -8
- package/build/src/abap/5_syntax/statements/raise.js +23 -18
- package/build/src/abap/5_syntax/statements/raise_event.js +4 -4
- package/build/src/abap/5_syntax/statements/ranges.js +6 -5
- package/build/src/abap/5_syntax/statements/read_entities.js +4 -4
- package/build/src/abap/5_syntax/statements/read_report.js +3 -3
- package/build/src/abap/5_syntax/statements/read_table.js +40 -21
- package/build/src/abap/5_syntax/statements/read_textpool.js +3 -3
- package/build/src/abap/5_syntax/statements/receive.js +3 -3
- package/build/src/abap/5_syntax/statements/replace.js +3 -3
- package/build/src/abap/5_syntax/statements/scan.js +3 -3
- package/build/src/abap/5_syntax/statements/search.js +2 -2
- package/build/src/abap/5_syntax/statements/select.js +2 -2
- package/build/src/abap/5_syntax/statements/select_loop.js +2 -2
- package/build/src/abap/5_syntax/statements/selection_screen.js +4 -4
- package/build/src/abap/5_syntax/statements/selectoption.js +9 -6
- package/build/src/abap/5_syntax/statements/set_bit.js +8 -5
- package/build/src/abap/5_syntax/statements/set_handler.js +3 -3
- package/build/src/abap/5_syntax/statements/set_locale.js +3 -3
- package/build/src/abap/5_syntax/statements/set_parameter.js +2 -2
- package/build/src/abap/5_syntax/statements/set_pf_status.js +2 -2
- package/build/src/abap/5_syntax/statements/set_titlebar.js +2 -2
- package/build/src/abap/5_syntax/statements/shift.js +15 -8
- package/build/src/abap/5_syntax/statements/sort.js +16 -7
- package/build/src/abap/5_syntax/statements/split.js +12 -7
- package/build/src/abap/5_syntax/statements/static.js +4 -4
- package/build/src/abap/5_syntax/statements/submit.js +4 -4
- package/build/src/abap/5_syntax/statements/subtract.js +3 -3
- package/build/src/abap/5_syntax/statements/subtract_corresponding.js +3 -3
- package/build/src/abap/5_syntax/statements/syntax_check.js +3 -3
- package/build/src/abap/5_syntax/statements/system_call.js +2 -2
- package/build/src/abap/5_syntax/statements/tables.js +7 -7
- package/build/src/abap/5_syntax/statements/transfer.js +3 -3
- package/build/src/abap/5_syntax/statements/translate.js +3 -3
- package/build/src/abap/5_syntax/statements/truncate_dataset.js +2 -2
- package/build/src/abap/5_syntax/statements/type.js +12 -7
- package/build/src/abap/5_syntax/statements/unassign.js +7 -4
- package/build/src/abap/5_syntax/statements/unpack.js +3 -3
- package/build/src/abap/5_syntax/statements/update_database.js +11 -11
- package/build/src/abap/5_syntax/statements/wait.js +3 -3
- package/build/src/abap/5_syntax/statements/when.js +2 -2
- package/build/src/abap/5_syntax/statements/when_type.js +9 -6
- package/build/src/abap/5_syntax/statements/while.js +4 -4
- package/build/src/abap/5_syntax/statements/with.js +3 -3
- package/build/src/abap/5_syntax/statements/with_loop.js +3 -3
- package/build/src/abap/5_syntax/statements/write.js +14 -10
- package/build/src/abap/5_syntax/structures/class_data.js +3 -3
- package/build/src/abap/5_syntax/structures/constants.js +6 -5
- package/build/src/abap/5_syntax/structures/data.js +17 -13
- package/build/src/abap/5_syntax/structures/statics.js +16 -11
- package/build/src/abap/5_syntax/structures/type_enum.js +15 -13
- package/build/src/abap/5_syntax/structures/types.js +9 -9
- package/build/src/abap/5_syntax/syntax.js +32 -16
- package/build/src/abap/types/class_attributes.js +30 -30
- package/build/src/abap/types/class_definition.js +29 -29
- package/build/src/abap/types/event_definition.js +5 -5
- package/build/src/abap/types/form_definition.js +13 -13
- package/build/src/abap/types/interface_definition.js +19 -19
- package/build/src/abap/types/method_definition.js +10 -10
- package/build/src/abap/types/method_definitions.js +9 -10
- package/build/src/abap/types/method_parameters.js +29 -29
- package/build/src/issue.js +12 -0
- package/build/src/registry.js +1 -1
- package/build/src/rules/check_syntax.js +2 -1
- package/package.json +3 -3
|
@@ -5,15 +5,15 @@ const Expressions = require("../../2_statements/expressions");
|
|
|
5
5
|
const inline_field_definition_1 = require("./inline_field_definition");
|
|
6
6
|
const _scope_type_1 = require("../_scope_type");
|
|
7
7
|
class Let {
|
|
8
|
-
runSyntax(node,
|
|
8
|
+
runSyntax(node, input, skipScope = false) {
|
|
9
9
|
if (node === undefined) {
|
|
10
10
|
return false;
|
|
11
11
|
}
|
|
12
12
|
if (skipScope !== true) {
|
|
13
|
-
scope.push(_scope_type_1.ScopeType.Let, "LET", node.getFirstToken().getStart(), filename);
|
|
13
|
+
input.scope.push(_scope_type_1.ScopeType.Let, "LET", node.getFirstToken().getStart(), input.filename);
|
|
14
14
|
}
|
|
15
15
|
for (const f of node.findDirectExpressions(Expressions.InlineFieldDefinition)) {
|
|
16
|
-
new inline_field_definition_1.InlineFieldDefinition().runSyntax(f,
|
|
16
|
+
new inline_field_definition_1.InlineFieldDefinition().runSyntax(f, input);
|
|
17
17
|
}
|
|
18
18
|
return true;
|
|
19
19
|
}
|
|
@@ -8,32 +8,22 @@ const inline_data_1 = require("./inline_data");
|
|
|
8
8
|
const fstarget_1 = require("./fstarget");
|
|
9
9
|
const target_1 = require("./target");
|
|
10
10
|
class LoopGroupBy {
|
|
11
|
-
runSyntax(node,
|
|
11
|
+
runSyntax(node, input) {
|
|
12
12
|
for (const t of node.findAllExpressions(Expressions.Target)) {
|
|
13
13
|
const inline = t.findDirectExpression(Expressions.InlineData);
|
|
14
14
|
if (inline) {
|
|
15
|
-
new inline_data_1.InlineData().runSyntax(inline,
|
|
15
|
+
new inline_data_1.InlineData().runSyntax(inline, input, new basic_1.VoidType("todoGroupBy"));
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
|
-
new target_1.Target().runSyntax(t,
|
|
18
|
+
new target_1.Target().runSyntax(t, input);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
for (const t of node.findAllExpressions(Expressions.FSTarget)) {
|
|
22
|
-
new fstarget_1.FSTarget().runSyntax(t,
|
|
22
|
+
new fstarget_1.FSTarget().runSyntax(t, input, new basic_1.VoidType("todoGroupBy"));
|
|
23
23
|
}
|
|
24
|
-
/*
|
|
25
|
-
const components: IStructureComponent[] = [];
|
|
26
|
-
for (const c of node.findDirectExpressions(Expressions.LoopGroupByComponent)) {
|
|
27
|
-
components.push({name: c.getFirstToken().getStr(), type: new VoidType("todoGroupBy")});
|
|
28
|
-
}
|
|
29
|
-
if (components.length === 0) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
*/
|
|
33
|
-
// const sourceType = new StructureType(components);
|
|
34
24
|
for (const c of node.findDirectExpressions(Expressions.LoopGroupByComponent)) {
|
|
35
25
|
for (const t of c.findDirectExpressions(Expressions.ComponentCompareSingle)) {
|
|
36
|
-
new component_compare_1.ComponentCompare().runSyntax(t,
|
|
26
|
+
new component_compare_1.ComponentCompare().runSyntax(t, input);
|
|
37
27
|
}
|
|
38
28
|
}
|
|
39
29
|
}
|
|
@@ -4,10 +4,10 @@ exports.MessageSource = void 0;
|
|
|
4
4
|
const Expressions = require("../../2_statements/expressions");
|
|
5
5
|
const source_1 = require("./source");
|
|
6
6
|
class MessageSource {
|
|
7
|
-
runSyntax(node,
|
|
7
|
+
runSyntax(node, input) {
|
|
8
8
|
var _a, _b, _c, _d, _e;
|
|
9
9
|
for (const f of node.findDirectExpressions(Expressions.Source)) {
|
|
10
|
-
new source_1.Source().runSyntax(f,
|
|
10
|
+
new source_1.Source().runSyntax(f, input);
|
|
11
11
|
}
|
|
12
12
|
if (node.getFirstToken().getStr().toUpperCase() === "ID") {
|
|
13
13
|
const id = (_a = node.findExpressionAfterToken("ID")) === null || _a === void 0 ? void 0 : _a.concatTokens();
|
|
@@ -20,7 +20,7 @@ class MessageSource {
|
|
|
20
20
|
}
|
|
21
21
|
if ((id === null || id === void 0 ? void 0 : id.startsWith("'")) && number) {
|
|
22
22
|
const messageClass = id.substring(1, id.length - 1).toUpperCase();
|
|
23
|
-
scope.getMSAGReferences().addUsing(filename, node.getFirstToken(), messageClass, number);
|
|
23
|
+
input.scope.getMSAGReferences().addUsing(input.filename, node.getFirstToken(), messageClass, number);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
@@ -28,7 +28,7 @@ class MessageSource {
|
|
|
28
28
|
const messageNumber = typeAndNumber === null || typeAndNumber === void 0 ? void 0 : typeAndNumber.substring(1);
|
|
29
29
|
const messageClass = (_e = node.findDirectExpression(Expressions.MessageClass)) === null || _e === void 0 ? void 0 : _e.concatTokens().toUpperCase();
|
|
30
30
|
if (messageNumber && messageClass) {
|
|
31
|
-
scope.getMSAGReferences().addUsing(filename, node.getFirstToken(), messageClass, messageNumber);
|
|
31
|
+
input.scope.getMSAGReferences().addUsing(input.filename, node.getFirstToken(), messageClass, messageNumber);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -6,18 +6,18 @@ const method_parameters_1 = require("./method_parameters");
|
|
|
6
6
|
const source_1 = require("./source");
|
|
7
7
|
const method_call_param_1 = require("./method_call_param");
|
|
8
8
|
class MethodCallBody {
|
|
9
|
-
runSyntax(node,
|
|
9
|
+
runSyntax(node, input, method) {
|
|
10
10
|
const parameters = node.findDirectExpression(Expressions.MethodParameters);
|
|
11
11
|
if (parameters) {
|
|
12
|
-
new method_parameters_1.MethodParameters().runSyntax(parameters,
|
|
12
|
+
new method_parameters_1.MethodParameters().runSyntax(parameters, input, method);
|
|
13
13
|
}
|
|
14
14
|
const param = node.findDirectExpression(Expressions.MethodCallParam);
|
|
15
15
|
if (param) {
|
|
16
|
-
new method_call_param_1.MethodCallParam().runSyntax(param,
|
|
16
|
+
new method_call_param_1.MethodCallParam().runSyntax(param, input, method);
|
|
17
17
|
}
|
|
18
18
|
// for PARAMETER-TABLE and EXCEPTION-TABLE
|
|
19
19
|
for (const s of node.findDirectExpressions(Expressions.Source)) {
|
|
20
|
-
new source_1.Source().runSyntax(s,
|
|
20
|
+
new source_1.Source().runSyntax(s, input);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -14,16 +14,19 @@ const _reference_1 = require("../_reference");
|
|
|
14
14
|
const component_name_1 = require("./component_name");
|
|
15
15
|
const attribute_name_1 = require("./attribute_name");
|
|
16
16
|
const class_definition_1 = require("../../types/class_definition");
|
|
17
|
+
const _syntax_input_1 = require("../_syntax_input");
|
|
17
18
|
class MethodCallChain {
|
|
18
|
-
runSyntax(node,
|
|
19
|
+
runSyntax(node, input, targetType) {
|
|
19
20
|
var _a, _b;
|
|
20
|
-
const helper = new _object_oriented_1.ObjectOriented(scope);
|
|
21
|
+
const helper = new _object_oriented_1.ObjectOriented(input.scope);
|
|
21
22
|
const children = node.getChildren().slice();
|
|
22
23
|
const first = children.shift();
|
|
23
24
|
if (first === undefined) {
|
|
24
|
-
|
|
25
|
+
const message = "MethodCallChain, first child expected";
|
|
26
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
27
|
+
return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
|
|
25
28
|
}
|
|
26
|
-
let context = this.findTop(first,
|
|
29
|
+
let context = this.findTop(first, input, targetType);
|
|
27
30
|
if (first.get() instanceof Expressions.MethodCall) {
|
|
28
31
|
children.unshift(first);
|
|
29
32
|
}
|
|
@@ -38,37 +41,41 @@ class MethodCallChain {
|
|
|
38
41
|
const className = context instanceof basic_1.ObjectReferenceType ? context.getIdentifierName() : undefined;
|
|
39
42
|
const methodToken = (_a = current.findDirectExpression(Expressions.MethodName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
40
43
|
const methodName = methodToken === null || methodToken === void 0 ? void 0 : methodToken.getStr();
|
|
41
|
-
const def = scope.findObjectDefinition(className);
|
|
44
|
+
const def = input.scope.findObjectDefinition(className);
|
|
42
45
|
// eslint-disable-next-line prefer-const
|
|
43
46
|
let { method, def: foundDef } = helper.searchMethodName(def, methodName);
|
|
44
47
|
if (method === undefined && current === first) {
|
|
45
48
|
method = new _builtin_1.BuiltIn().searchBuiltin(methodName === null || methodName === void 0 ? void 0 : methodName.toUpperCase());
|
|
46
49
|
if (method) {
|
|
47
|
-
scope.addReference(methodToken, method, _reference_1.ReferenceType.BuiltinMethodReference, filename);
|
|
50
|
+
input.scope.addReference(methodToken, method, _reference_1.ReferenceType.BuiltinMethodReference, input.filename);
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
else {
|
|
51
54
|
if (previous && previous.getFirstToken().getStr() === "=>" && (method === null || method === void 0 ? void 0 : method.isStatic()) === false) {
|
|
52
|
-
|
|
55
|
+
const message = "Method \"" + methodName + "\" not static";
|
|
56
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
57
|
+
return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
|
|
53
58
|
}
|
|
54
59
|
const extra = {
|
|
55
60
|
ooName: foundDef === null || foundDef === void 0 ? void 0 : foundDef.getName(),
|
|
56
61
|
ooType: foundDef instanceof class_definition_1.ClassDefinition ? "CLAS" : "INTF"
|
|
57
62
|
};
|
|
58
|
-
scope.addReference(methodToken, method, _reference_1.ReferenceType.MethodReference, filename, extra);
|
|
63
|
+
input.scope.addReference(methodToken, method, _reference_1.ReferenceType.MethodReference, input.filename, extra);
|
|
59
64
|
}
|
|
60
65
|
if (methodName === null || methodName === void 0 ? void 0 : methodName.includes("~")) {
|
|
61
66
|
const name = methodName.split("~")[0];
|
|
62
|
-
const idef = scope.findInterfaceDefinition(name);
|
|
67
|
+
const idef = input.scope.findInterfaceDefinition(name);
|
|
63
68
|
if (idef) {
|
|
64
|
-
scope.addReference(methodToken, idef, _reference_1.ReferenceType.ObjectOrientedReference, filename);
|
|
69
|
+
input.scope.addReference(methodToken, idef, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
|
|
65
70
|
}
|
|
66
71
|
}
|
|
67
72
|
if (method === undefined && (methodName === null || methodName === void 0 ? void 0 : methodName.toUpperCase()) === "CONSTRUCTOR") {
|
|
68
73
|
context = undefined; // todo, this is a workaround, constructors always exists
|
|
69
74
|
}
|
|
70
75
|
else if (method === undefined && !(context instanceof basic_1.VoidType)) {
|
|
71
|
-
|
|
76
|
+
const message = "Method \"" + methodName + "\" not found, methodCallChain";
|
|
77
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
78
|
+
return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
|
|
72
79
|
}
|
|
73
80
|
else if (method) {
|
|
74
81
|
const ret = (_b = method.getParameters().getReturning()) === null || _b === void 0 ? void 0 : _b.getType();
|
|
@@ -76,51 +83,53 @@ class MethodCallChain {
|
|
|
76
83
|
}
|
|
77
84
|
const param = current.findDirectExpression(Expressions.MethodCallParam);
|
|
78
85
|
if (param && method) {
|
|
79
|
-
new method_call_param_1.MethodCallParam().runSyntax(param,
|
|
86
|
+
new method_call_param_1.MethodCallParam().runSyntax(param, input, method);
|
|
80
87
|
}
|
|
81
88
|
else if (param && context instanceof basic_1.VoidType) {
|
|
82
|
-
new method_call_param_1.MethodCallParam().runSyntax(param,
|
|
89
|
+
new method_call_param_1.MethodCallParam().runSyntax(param, input, context);
|
|
83
90
|
}
|
|
84
91
|
}
|
|
85
92
|
else if (current instanceof nodes_1.ExpressionNode && current.get() instanceof Expressions.ComponentName) {
|
|
86
|
-
context = new component_name_1.ComponentName().runSyntax(context, current);
|
|
93
|
+
context = new component_name_1.ComponentName().runSyntax(context, current, input);
|
|
87
94
|
}
|
|
88
95
|
else if (current instanceof nodes_1.ExpressionNode && current.get() instanceof Expressions.AttributeName) {
|
|
89
|
-
context = new attribute_name_1.AttributeName().runSyntax(context, current,
|
|
96
|
+
context = new attribute_name_1.AttributeName().runSyntax(context, current, input);
|
|
90
97
|
}
|
|
91
98
|
previous = current;
|
|
92
99
|
}
|
|
93
100
|
return context;
|
|
94
101
|
}
|
|
95
102
|
//////////////////////////////////////
|
|
96
|
-
findTop(first,
|
|
103
|
+
findTop(first, input, targetType) {
|
|
97
104
|
var _a;
|
|
98
105
|
if (first.get() instanceof Expressions.ClassName) {
|
|
99
106
|
const token = first.getFirstToken();
|
|
100
107
|
const className = token.getStr();
|
|
101
|
-
const classDefinition = scope.findObjectDefinition(className);
|
|
102
|
-
if (classDefinition === undefined && scope.getDDIC().inErrorNamespace(className) === false) {
|
|
108
|
+
const classDefinition = input.scope.findObjectDefinition(className);
|
|
109
|
+
if (classDefinition === undefined && input.scope.getDDIC().inErrorNamespace(className) === false) {
|
|
103
110
|
const extra = { ooName: className, ooType: "Void" };
|
|
104
|
-
scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, extra);
|
|
111
|
+
input.scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, input.filename, extra);
|
|
105
112
|
return new basic_1.VoidType(className);
|
|
106
113
|
}
|
|
107
114
|
else if (classDefinition === undefined) {
|
|
108
|
-
|
|
115
|
+
const message = "Class " + className + " not found";
|
|
116
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, first.getFirstToken(), message));
|
|
117
|
+
return new basic_1.VoidType(_syntax_input_1.CheckSyntaxKey);
|
|
109
118
|
}
|
|
110
|
-
scope.addReference(first.getFirstToken(), classDefinition, _reference_1.ReferenceType.ObjectOrientedReference, filename);
|
|
119
|
+
input.scope.addReference(first.getFirstToken(), classDefinition, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
|
|
111
120
|
return new basic_1.ObjectReferenceType(classDefinition);
|
|
112
121
|
}
|
|
113
122
|
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.FieldChain) {
|
|
114
|
-
return new field_chain_1.FieldChain().runSyntax(first,
|
|
123
|
+
return new field_chain_1.FieldChain().runSyntax(first, input, _reference_1.ReferenceType.DataReadReference);
|
|
115
124
|
}
|
|
116
125
|
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.NewObject) {
|
|
117
|
-
return new new_object_1.NewObject().runSyntax(first,
|
|
126
|
+
return new new_object_1.NewObject().runSyntax(first, input, targetType);
|
|
118
127
|
}
|
|
119
128
|
else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Cast) {
|
|
120
|
-
return new cast_1.Cast().runSyntax(first,
|
|
129
|
+
return new cast_1.Cast().runSyntax(first, input, targetType);
|
|
121
130
|
}
|
|
122
131
|
else {
|
|
123
|
-
const meType = (_a = scope.findVariable("me")) === null || _a === void 0 ? void 0 : _a.getType();
|
|
132
|
+
const meType = (_a = input.scope.findVariable("me")) === null || _a === void 0 ? void 0 : _a.getType();
|
|
124
133
|
if (meType) {
|
|
125
134
|
return meType;
|
|
126
135
|
}
|
|
@@ -8,21 +8,28 @@ const method_parameters_1 = require("./method_parameters");
|
|
|
8
8
|
const tokens_1 = require("../../1_lexer/tokens");
|
|
9
9
|
const source_1 = require("./source");
|
|
10
10
|
const _type_utils_1 = require("../_type_utils");
|
|
11
|
+
const _syntax_input_1 = require("../_syntax_input");
|
|
11
12
|
class MethodCallParam {
|
|
12
|
-
runSyntax(node,
|
|
13
|
+
runSyntax(node, input, method) {
|
|
13
14
|
if (!(node.get() instanceof Expressions.MethodCallParam)) {
|
|
14
|
-
|
|
15
|
+
const message = "MethodCallParam, unexpected input";
|
|
16
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
17
|
+
return;
|
|
15
18
|
}
|
|
16
19
|
const children = node.getChildren();
|
|
17
20
|
if (children.length < 2 || children.length > 3) {
|
|
18
|
-
|
|
21
|
+
const message = "MethodCallParam, unexpected child length";
|
|
22
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
23
|
+
return;
|
|
19
24
|
}
|
|
20
25
|
const child = children[1];
|
|
21
26
|
if (child.get() instanceof tokens_1.WParenRight || child.get() instanceof tokens_1.WParenRightW) {
|
|
22
27
|
if (!(method instanceof basic_1.VoidType)) {
|
|
23
28
|
const required = method.getParameters().getRequiredParameters();
|
|
24
29
|
if (required.length > 0) {
|
|
25
|
-
|
|
30
|
+
const message = "Parameter \"" + required[0].getName() + "\" must be supplied";
|
|
31
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
32
|
+
return;
|
|
26
33
|
}
|
|
27
34
|
}
|
|
28
35
|
}
|
|
@@ -31,17 +38,23 @@ class MethodCallParam {
|
|
|
31
38
|
|| child.get() instanceof Expressions.ConstantString)) {
|
|
32
39
|
if (!(method instanceof basic_1.VoidType)) {
|
|
33
40
|
if (method.getParameters().getImporting().length === 0) {
|
|
34
|
-
|
|
41
|
+
const message = "Method \"" + method.getName() + "\" has no importing parameters";
|
|
42
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
43
|
+
return;
|
|
35
44
|
}
|
|
36
45
|
else if (method.getParameters().getRequiredParameters().length > 1) {
|
|
37
|
-
|
|
46
|
+
const message = "Method \"" + method.getName() + "\" has more than one importing or changing parameter";
|
|
47
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
48
|
+
return;
|
|
38
49
|
}
|
|
39
50
|
}
|
|
40
51
|
let targetType = undefined;
|
|
41
52
|
if (!(method instanceof basic_1.VoidType)) {
|
|
42
53
|
const name = method.getParameters().getDefaultImporting();
|
|
43
54
|
if (name === undefined) {
|
|
44
|
-
|
|
55
|
+
const message = "No default importing parameter";
|
|
56
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
57
|
+
return;
|
|
45
58
|
}
|
|
46
59
|
for (const i of method.getParameters().getImporting()) {
|
|
47
60
|
if (i.getName().toUpperCase() === name) {
|
|
@@ -55,27 +68,33 @@ class MethodCallParam {
|
|
|
55
68
|
}
|
|
56
69
|
let sourceType = basic_1.StringType.get();
|
|
57
70
|
if (child.get() instanceof Expressions.Source) {
|
|
58
|
-
sourceType = new source_1.Source().runSyntax(child,
|
|
71
|
+
sourceType = new source_1.Source().runSyntax(child, input, targetType);
|
|
59
72
|
}
|
|
60
73
|
const calculated = child.findFirstExpression(Expressions.MethodCallChain) !== undefined
|
|
61
74
|
|| child.findFirstExpression(Expressions.StringTemplate) !== undefined
|
|
62
75
|
|| child.findFirstExpression(Expressions.ArithOperator) !== undefined;
|
|
63
76
|
if (sourceType === undefined) {
|
|
64
|
-
|
|
77
|
+
const message = "No source type determined, method source";
|
|
78
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
79
|
+
return;
|
|
65
80
|
}
|
|
66
|
-
else if (new _type_utils_1.TypeUtils(scope).isAssignableStrict(sourceType, targetType, calculated) === false) {
|
|
67
|
-
|
|
81
|
+
else if (new _type_utils_1.TypeUtils(input.scope).isAssignableStrict(sourceType, targetType, calculated) === false) {
|
|
82
|
+
const message = "Method parameter type not compatible";
|
|
83
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
84
|
+
return;
|
|
68
85
|
}
|
|
69
86
|
}
|
|
70
87
|
else if (child instanceof nodes_1.ExpressionNode && child.get() instanceof Expressions.ParameterListS) {
|
|
71
|
-
new method_parameters_1.MethodParameters().checkExporting(child,
|
|
88
|
+
new method_parameters_1.MethodParameters().checkExporting(child, input, method);
|
|
72
89
|
}
|
|
73
90
|
else if (child.get() instanceof Expressions.MethodParameters) {
|
|
74
|
-
new method_parameters_1.MethodParameters().runSyntax(child,
|
|
91
|
+
new method_parameters_1.MethodParameters().runSyntax(child, input, method);
|
|
75
92
|
}
|
|
76
93
|
else {
|
|
77
94
|
// console.dir(child);
|
|
78
|
-
|
|
95
|
+
const message = "MethodCallParam, unexpected child";
|
|
96
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
97
|
+
return;
|
|
79
98
|
}
|
|
80
99
|
}
|
|
81
100
|
}
|
|
@@ -5,25 +5,26 @@ const Expressions = require("../../2_statements/expressions");
|
|
|
5
5
|
const _typed_identifier_1 = require("../../types/_typed_identifier");
|
|
6
6
|
const basic_1 = require("../../types/basic");
|
|
7
7
|
const basic_types_1 = require("../basic_types");
|
|
8
|
+
const assert_error_1 = require("../assert_error");
|
|
8
9
|
class MethodDefReturning {
|
|
9
|
-
runSyntax(node,
|
|
10
|
+
runSyntax(node, input, meta) {
|
|
10
11
|
const name = node.findDirectExpression(Expressions.MethodParamName);
|
|
11
12
|
if (name === undefined) {
|
|
12
|
-
throw new
|
|
13
|
+
throw new assert_error_1.AssertError("method_parameter.ts, todo, handle pass by value and reference");
|
|
13
14
|
}
|
|
14
15
|
const type = node.findDirectExpression(Expressions.TypeParam);
|
|
15
16
|
if (type === undefined) {
|
|
16
|
-
throw new
|
|
17
|
+
throw new assert_error_1.AssertError("method_parameter.ts, unexpected structure");
|
|
17
18
|
}
|
|
18
|
-
let found = new basic_types_1.BasicTypes(
|
|
19
|
+
let found = new basic_types_1.BasicTypes(input).parseType(type);
|
|
19
20
|
if ((found === null || found === void 0 ? void 0 : found.isGeneric()) === true) {
|
|
20
21
|
found = new basic_1.UnknownType("RETURNING parameter must be fully specified");
|
|
21
22
|
}
|
|
22
23
|
if (found) {
|
|
23
|
-
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, found, meta);
|
|
24
|
+
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, found, meta);
|
|
24
25
|
}
|
|
25
26
|
else {
|
|
26
|
-
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.UnknownType("method param, todo"), meta);
|
|
27
|
+
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new basic_1.UnknownType("method param, todo"), meta);
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
}
|
|
@@ -7,38 +7,39 @@ const basic_types_1 = require("../basic_types");
|
|
|
7
7
|
const Expressions = require("../../2_statements/expressions");
|
|
8
8
|
const default_1 = require("./default");
|
|
9
9
|
const cgeneric_type_1 = require("../../types/basic/cgeneric_type");
|
|
10
|
+
const assert_error_1 = require("../assert_error");
|
|
10
11
|
class MethodParam {
|
|
11
|
-
runSyntax(node,
|
|
12
|
+
runSyntax(node, input, meta) {
|
|
12
13
|
const name = node.findDirectExpression(Expressions.MethodParamName);
|
|
13
14
|
if (name === undefined) {
|
|
14
|
-
throw new
|
|
15
|
+
throw new assert_error_1.AssertError("MethodParam, todo, handle pass by value and reference");
|
|
15
16
|
}
|
|
16
17
|
const type = node.findDirectExpression(Expressions.TypeParam);
|
|
17
18
|
if (type === undefined) {
|
|
18
|
-
throw new
|
|
19
|
+
throw new assert_error_1.AssertError("MethodParam, unexpected structure");
|
|
19
20
|
}
|
|
20
21
|
const def = type.findDirectExpression(Expressions.Default);
|
|
21
22
|
if (def) {
|
|
22
23
|
try {
|
|
23
|
-
new default_1.Default().runSyntax(def,
|
|
24
|
+
new default_1.Default().runSyntax(def, input);
|
|
24
25
|
}
|
|
25
26
|
catch (e) {
|
|
26
|
-
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.UnknownType(e.toString()), meta);
|
|
27
|
+
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new basic_1.UnknownType(e.toString()), meta);
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
30
|
const concat = type.concatTokens().toUpperCase();
|
|
30
31
|
if (concat === "TYPE C" || concat.startsWith("TYPE C ")) {
|
|
31
|
-
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new cgeneric_type_1.CGenericType(), meta);
|
|
32
|
+
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new cgeneric_type_1.CGenericType(), meta);
|
|
32
33
|
}
|
|
33
34
|
else if (concat === "TYPE X" || concat.startsWith("TYPE X ")) {
|
|
34
|
-
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.XGenericType(), meta);
|
|
35
|
+
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new basic_1.XGenericType(), meta);
|
|
35
36
|
}
|
|
36
|
-
const found = new basic_types_1.BasicTypes(
|
|
37
|
+
const found = new basic_types_1.BasicTypes(input).parseType(type);
|
|
37
38
|
if (found) {
|
|
38
|
-
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, found, meta);
|
|
39
|
+
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, found, meta);
|
|
39
40
|
}
|
|
40
41
|
else {
|
|
41
|
-
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.UnknownType("method param, todo"), meta);
|
|
42
|
+
return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, new basic_1.UnknownType("method param, todo"), meta);
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
}
|