UNPKG

@abaplint/core

Version:
56 lines 2.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Concatenate = void 0; const Expressions = require("../../2_statements/expressions"); const source_1 = require("../expressions/source"); const target_1 = require("../expressions/target"); const basic_1 = require("../../types/basic"); const inline_data_1 = require("../expressions/inline_data"); const _type_utils_1 = require("../_type_utils"); const _syntax_input_1 = require("../_syntax_input"); class Concatenate { runSyntax(node, input) { const byteMode = node.findDirectTokenByText("BYTE") !== undefined; const linesMode = node.findDirectTokenByText("LINES") !== undefined; const target = node.findFirstExpression(Expressions.Target); const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData); if (inline) { if (byteMode) { inline_data_1.InlineData.runSyntax(inline, input, basic_1.XStringType.get()); } else { inline_data_1.InlineData.runSyntax(inline, input, basic_1.StringType.get()); } } else if (target) { const type = target_1.Target.runSyntax(target, input); const compatible = byteMode ? new _type_utils_1.TypeUtils(input.scope).isHexLike(type) : new _type_utils_1.TypeUtils(input.scope).isCharLikeStrict(type); if (compatible === false) { const message = "Target type not compatible"; input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message)); return; } } if (linesMode) { for (const s of node.findDirectExpressions(Expressions.Source)) { const type = source_1.Source.runSyntax(s, input); if (!(type instanceof basic_1.UnknownType) && !(type instanceof basic_1.VoidType) && !(type instanceof basic_1.TableType)) { const message = "Source must be an internal table"; input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message)); return; } } } for (const s of node.findDirectExpressions(Expressions.SimpleSource3)) { const type = source_1.Source.runSyntax(s, input); const compatible = byteMode ? new _type_utils_1.TypeUtils(input.scope).isHexLike(type) : new _type_utils_1.TypeUtils(input.scope).isCharLikeStrict(type); if (compatible === false) { const message = "Source type not compatible"; input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message)); return; } } } } exports.Concatenate = Concatenate; //# sourceMappingURL=concatenate.js.map