@abaplint/core
Version:
abaplint - Core API
43 lines • 2.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InlineData = void 0;
const Expressions = require("../../2_statements/expressions");
const _typed_identifier_1 = require("../../types/_typed_identifier");
const basic_1 = require("../../types/basic");
const _reference_1 = require("../_reference");
const _syntax_input_1 = require("../_syntax_input");
class InlineData {
static runSyntax(node, input, type) {
var _a;
const token = (_a = node.findFirstExpression(Expressions.TargetField)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
if (token && type) {
if (type instanceof basic_1.CSequenceType || type instanceof basic_1.CLikeType) {
type = basic_1.StringType.get();
}
else if (type instanceof basic_1.XSequenceType) {
type = basic_1.StringType.get();
}
else if (type instanceof basic_1.CGenericType) {
const message = "InlineData, generic type C cannot be used for inferred type";
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
return;
}
if (type.isGeneric()) {
const message = "DATA definition cannot be generic, " + type.constructor.name;
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
type = basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
}
const identifier = new _typed_identifier_1.TypedIdentifier(token, input.filename, type, ["inline" /* IdentifierMeta.InlineDefinition */]);
input.scope.addIdentifier(identifier);
input.scope.addReference(token, identifier, _reference_1.ReferenceType.DataWriteReference, input.filename);
}
else if (token) {
const message = "InlineData, could not determine type for \"" + token.getStr() + "\"";
const identifier = new _typed_identifier_1.TypedIdentifier(token, input.filename, new basic_1.UnknownType(message), ["inline" /* IdentifierMeta.InlineDefinition */]);
input.scope.addIdentifier(identifier);
input.scope.addReference(token, identifier, _reference_1.ReferenceType.DataWriteReference, input.filename);
}
}
}
exports.InlineData = InlineData;
//# sourceMappingURL=inline_data.js.map