@abaplint/cli 2.97.9 → 2.97.10

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.
Files changed (2) hide show
  1. package/build/cli.js +4 -4
  2. package/package.json +2 -2
package/build/cli.js CHANGED
@@ -6726,7 +6726,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
6726
6726
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6727
6727
 
6728
6728
  "use strict";
6729
- eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CurrentScope = void 0;\nconst _builtin_1 = __webpack_require__(/*! ./_builtin */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_builtin.js\");\nconst ddic_1 = __webpack_require__(/*! ../../ddic */ \"./node_modules/@abaplint/core/build/src/ddic.js\");\nconst position_1 = __webpack_require__(/*! ../../position */ \"./node_modules/@abaplint/core/build/src/position.js\");\nconst spaghetti_scope_1 = __webpack_require__(/*! ./spaghetti_scope */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/spaghetti_scope.js\");\nconst _identifier_1 = __webpack_require__(/*! ../4_file_information/_identifier */ \"./node_modules/@abaplint/core/build/src/abap/4_file_information/_identifier.js\");\nconst _scope_type_1 = __webpack_require__(/*! ./_scope_type */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_scope_type.js\");\nconst _reference_1 = __webpack_require__(/*! ./_reference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js\");\nconst syntax_1 = __webpack_require__(/*! ./syntax */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/syntax.js\");\nclass CurrentScope {\n static buildDefault(reg, obj) {\n const s = new CurrentScope(reg, obj);\n s.push(_scope_type_1.ScopeType.BuiltIn, _scope_type_1.ScopeType.BuiltIn, new position_1.Position(1, 1), _builtin_1.BuiltIn.filename);\n this.addBuiltIn(s, reg.getConfig().getSyntaxSetttings().globalConstants);\n let name = _scope_type_1.ScopeType.Global;\n if (obj) {\n name = name + \"_\" + obj.getName();\n }\n s.push(_scope_type_1.ScopeType.Global, name, new position_1.Position(1, 1), name);\n return s;\n }\n static addBuiltIn(s, extras) {\n const b = new _builtin_1.BuiltIn();\n const builtin = b.get(extras);\n s.addList(builtin);\n for (const t of b.getTypes()) {\n s.addType(t);\n }\n }\n constructor(reg, obj) {\n this.current = undefined;\n this.parentObj = obj;\n this.reg = reg;\n }\n ///////////////////////////\n getVersion() {\n return this.reg.getConfig().getVersion();\n }\n addType(type) {\n if (type === undefined) {\n return;\n }\n this.addTypeNamed(type.getName(), type);\n }\n addTypeNamed(name, type) {\n if (type === undefined) {\n return;\n }\n if (this.current === undefined) {\n return;\n }\n const upper = name.toUpperCase();\n if (this.current.getData().types[upper] !== undefined) {\n throw new Error(`Type name \"${name}\" already defined`);\n }\n this.current.getData().types[upper] = type;\n }\n addExtraLikeType(type) {\n if (type === undefined) {\n return;\n }\n this.addExtraLikeTypeNamed(type.getName(), type);\n }\n addExtraLikeTypeNamed(name, type) {\n if (type === undefined) {\n return;\n }\n if (this.current === undefined) {\n return;\n }\n const upper = name.toUpperCase();\n if (this.current.getData().extraLikeTypes[upper] !== undefined) {\n throw new Error(`Type name \"${name}\" already defined`);\n }\n this.current.getData().extraLikeTypes[upper] = type;\n }\n addClassDefinition(c) {\n if (this.current === undefined) {\n return;\n }\n const name = c.getName().toUpperCase();\n if (this.current.getData().cdefs[name] !== undefined) {\n throw new Error(`Class \"${name}\" already defined`);\n }\n this.current.getData().cdefs[name] = c;\n }\n addFormDefinitions(f) {\n if (this.current === undefined) {\n return;\n }\n this.current.getData().forms.push(...f);\n }\n addInterfaceDefinition(i) {\n var _a;\n (_a = this.current) === null || _a === void 0 ? void 0 : _a.getData().idefs.push(i);\n }\n addNamedIdentifier(name, identifier) {\n if (this.current === undefined) {\n return;\n }\n const upper = name.toUpperCase();\n if (this.current.getData().vars[upper] !== undefined) {\n throw new Error(`Variable name \"${name}\" already defined`);\n }\n this.current.getData().vars[upper] = identifier;\n }\n addIdentifier(identifier) {\n if (identifier === undefined) {\n return;\n }\n this.addNamedIdentifier(identifier.getName(), identifier);\n }\n addDeferred(token) {\n var _a;\n if (token === undefined) {\n return;\n }\n (_a = this.current) === null || _a === void 0 ? void 0 : _a.getData().deferred.push(token);\n }\n addListPrefix(identifiers, prefix) {\n for (const id of identifiers) {\n this.addNamedIdentifier(prefix + id.getName(), id);\n }\n }\n addList(identifiers) {\n for (const id of identifiers) {\n this.addIdentifier(id);\n }\n }\n addReference(usage, referencing, type, filename, extra) {\n var _a;\n if (usage === undefined || type === undefined) {\n return;\n }\n const position = new _identifier_1.Identifier(usage, filename);\n (_a = this.current) === null || _a === void 0 ? void 0 : _a.getData().references.push({ position, resolved: referencing, referenceType: type, extra });\n }\n ///////////////////////////\n findFunctionModule(name) {\n if (name === undefined) {\n return undefined;\n }\n for (const fugr of this.reg.getObjectsByType(\"FUGR\")) {\n const func = fugr.getModule(name);\n if (func !== undefined) {\n return func;\n }\n }\n return undefined;\n }\n findObjectDefinition(name) {\n if (name === undefined) {\n return undefined;\n }\n const clas = this.findClassDefinition(name);\n if (clas) {\n return clas;\n }\n const intf = this.findInterfaceDefinition(name);\n if (intf) {\n return intf;\n }\n return undefined;\n }\n isBadiDef(name) {\n const upper = name.toUpperCase();\n for (const enhs of this.reg.getObjectsByType(\"ENHS\")) {\n for (const def of enhs.listBadiDefinitions()) {\n if (def.name.toUpperCase() === upper) {\n return true;\n }\n }\n }\n return false;\n }\n // todo, found + type can be removed from method output?\n existsObject(name) {\n var _a, _b, _c;\n if (name === undefined) {\n return { found: false };\n }\n const findLocalClass = (_a = this.current) === null || _a === void 0 ? void 0 : _a.findClassDefinition(name);\n if (findLocalClass) {\n return { found: true, id: findLocalClass, type: _reference_1.ReferenceType.ObjectOrientedReference, ooType: \"CLAS\" };\n }\n const globalClas = this.reg.getObject(\"CLAS\", name);\n if (globalClas) {\n return { found: true, id: globalClas.getIdentifier(), type: _reference_1.ReferenceType.ObjectOrientedReference, ooType: \"CLAS\" };\n }\n const findLocalInterface = (_b = this.current) === null || _b === void 0 ? void 0 : _b.findInterfaceDefinition(name);\n if (findLocalInterface) {\n return { found: true, id: findLocalInterface, type: _reference_1.ReferenceType.ObjectOrientedReference, ooType: \"INTF\" };\n }\n const globalIntf = this.reg.getObject(\"INTF\", name);\n if (globalIntf) {\n return { found: true, id: globalIntf.getIdentifier(), type: _reference_1.ReferenceType.ObjectOrientedReference, ooType: \"INTF\" };\n }\n const def = (_c = this.current) === null || _c === void 0 ? void 0 : _c.findDeferred(name);\n if (def !== undefined) {\n return { found: true, id: def };\n }\n return { found: false };\n }\n ///////////////////////////\n /** Lookup class in local and global scope */\n findClassDefinition(name) {\n var _a;\n if (name === undefined) {\n return undefined;\n }\n const clocal = (_a = this.current) === null || _a === void 0 ? void 0 : _a.findClassDefinition(name);\n if (clocal) {\n return clocal;\n }\n const cglobal = this.reg.getObject(\"CLAS\", name);\n if (cglobal) {\n return cglobal.getDefinition();\n }\n return undefined;\n }\n findTypePoolConstant(name) {\n var _a;\n if (name === undefined || name.includes(\"_\") === undefined) {\n return undefined;\n }\n const typePoolName = name.split(\"_\")[0];\n const typePool = this.reg.getObject(\"TYPE\", typePoolName);\n if (typePool === undefined) {\n return undefined;\n }\n const spag = (_a = new syntax_1.SyntaxLogic(this.reg, typePool).run().spaghetti.getFirstChild()) === null || _a === void 0 ? void 0 : _a.getFirstChild();\n const found = spag === null || spag === void 0 ? void 0 : spag.findVariable(name);\n return found;\n }\n findTypePoolType(name) {\n var _a;\n if (name.includes(\"_\") === undefined) {\n return undefined;\n }\n const typePoolName = name.split(\"_\")[0];\n const typePool = this.reg.getObject(\"TYPE\", typePoolName);\n if (typePool === undefined) {\n return undefined;\n }\n const spag = (_a = new syntax_1.SyntaxLogic(this.reg, typePool).run().spaghetti.getFirstChild()) === null || _a === void 0 ? void 0 : _a.getFirstChild();\n const found = spag === null || spag === void 0 ? void 0 : spag.findType(name);\n return found;\n }\n /** Lookup interface in local and global scope */\n findInterfaceDefinition(name) {\n var _a;\n const ilocal = (_a = this.current) === null || _a === void 0 ? void 0 : _a.findInterfaceDefinition(name);\n if (ilocal) {\n return ilocal;\n }\n const iglobal = this.reg.getObject(\"INTF\", name);\n if (iglobal) {\n return iglobal.getDefinition();\n }\n return undefined;\n }\n findFormDefinition(name) {\n var _a;\n return (_a = this.current) === null || _a === void 0 ? void 0 : _a.findFormDefinition(name);\n }\n findType(name) {\n var _a;\n if (name === undefined) {\n return undefined;\n }\n return (_a = this.current) === null || _a === void 0 ? void 0 : _a.findType(name);\n }\n findExtraLikeType(name) {\n var _a;\n if (name === undefined) {\n return undefined;\n }\n return (_a = this.current) === null || _a === void 0 ? void 0 : _a.findExtraLikeType(name);\n }\n findVariable(name) {\n var _a;\n if (name === undefined) {\n return undefined;\n }\n const found = (_a = this.current) === null || _a === void 0 ? void 0 : _a.findVariable(name);\n if (found) {\n return found;\n }\n return this.findTypePoolConstant(name);\n }\n ///////////////////////////\n getDDIC() {\n return new ddic_1.DDIC(this.reg);\n }\n getDDICReferences() {\n return this.reg.getDDICReferences();\n }\n getParentObj() {\n return this.parentObj;\n }\n getName() {\n if (this.current === undefined) {\n throw new Error(\"error, getName\");\n }\n return this.current.getIdentifier().sname;\n }\n getType() {\n if (this.current === undefined) {\n throw new Error(\"error, getType\");\n }\n return this.current.getIdentifier().stype;\n }\n push(stype, sname, start, filename) {\n const identifier = { stype, sname, start, filename, end: undefined };\n if (this.current === undefined) {\n // the top node\n this.current = new spaghetti_scope_1.SpaghettiScopeNode(identifier, undefined);\n }\n else {\n const parent = this.current;\n this.current = new spaghetti_scope_1.SpaghettiScopeNode(identifier, parent);\n parent.addChild(this.current);\n }\n }\n isOO() {\n let curr = this.current;\n while (curr !== undefined) {\n const stype = curr.getIdentifier().stype;\n if (stype === _scope_type_1.ScopeType.ClassDefinition\n || stype === _scope_type_1.ScopeType.ClassImplementation\n || stype === _scope_type_1.ScopeType.Interface) {\n return true;\n }\n curr = curr.getParent();\n }\n return false;\n }\n isTypePool() {\n var _a;\n return ((_a = this.current) === null || _a === void 0 ? void 0 : _a.getIdentifier().filename.endsWith(\".type.abap\")) === true || false;\n }\n setAllowHeaderUse(name) {\n // workaround for SELECT FOR ALL ENTRIES\n this.allowHeaderUse = name;\n }\n isAllowHeaderUse(name) {\n var _a;\n return name.toUpperCase() === ((_a = this.allowHeaderUse) === null || _a === void 0 ? void 0 : _a.toUpperCase());\n }\n pop(end) {\n this.allowHeaderUse = undefined;\n if (this.current === undefined) {\n throw new Error(\"something wrong, top scope popped\");\n }\n this.current.setEnd(end);\n const current = this.current;\n this.current = this.current.getParent();\n return new spaghetti_scope_1.SpaghettiScope(current);\n }\n}\nexports.CurrentScope = CurrentScope;\n//# sourceMappingURL=_current_scope.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/_current_scope.js?");
6729
+ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CurrentScope = void 0;\nconst _builtin_1 = __webpack_require__(/*! ./_builtin */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_builtin.js\");\nconst ddic_1 = __webpack_require__(/*! ../../ddic */ \"./node_modules/@abaplint/core/build/src/ddic.js\");\nconst position_1 = __webpack_require__(/*! ../../position */ \"./node_modules/@abaplint/core/build/src/position.js\");\nconst spaghetti_scope_1 = __webpack_require__(/*! ./spaghetti_scope */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/spaghetti_scope.js\");\nconst _identifier_1 = __webpack_require__(/*! ../4_file_information/_identifier */ \"./node_modules/@abaplint/core/build/src/abap/4_file_information/_identifier.js\");\nconst _scope_type_1 = __webpack_require__(/*! ./_scope_type */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_scope_type.js\");\nconst _reference_1 = __webpack_require__(/*! ./_reference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js\");\nconst syntax_1 = __webpack_require__(/*! ./syntax */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/syntax.js\");\nclass CurrentScope {\n static buildDefault(reg, obj) {\n const s = new CurrentScope(reg, obj);\n s.push(_scope_type_1.ScopeType.BuiltIn, _scope_type_1.ScopeType.BuiltIn, new position_1.Position(1, 1), _builtin_1.BuiltIn.filename);\n this.addBuiltIn(s, reg.getConfig().getSyntaxSetttings().globalConstants);\n let name = _scope_type_1.ScopeType.Global;\n if (obj) {\n name = name + \"_\" + obj.getName();\n }\n s.push(_scope_type_1.ScopeType.Global, name, new position_1.Position(1, 1), name);\n return s;\n }\n static addBuiltIn(s, extras) {\n const b = new _builtin_1.BuiltIn();\n const builtin = b.get(extras);\n s.addList(builtin);\n for (const t of b.getTypes()) {\n s.addType(t);\n }\n }\n constructor(reg, obj) {\n this.current = undefined;\n this.parentObj = obj;\n this.reg = reg;\n }\n ///////////////////////////\n getVersion() {\n return this.reg.getConfig().getVersion();\n }\n addType(type) {\n if (type === undefined) {\n return;\n }\n this.addTypeNamed(type.getName(), type);\n }\n addTypeNamed(name, type) {\n if (type === undefined) {\n return;\n }\n if (this.current === undefined) {\n return;\n }\n const upper = name.toUpperCase();\n if (this.current.getData().types[upper] !== undefined) {\n throw new Error(`Type name \"${name}\" already defined`);\n }\n this.current.getData().types[upper] = type;\n }\n addExtraLikeType(type) {\n if (type === undefined) {\n return;\n }\n this.addExtraLikeTypeNamed(type.getName(), type);\n }\n addExtraLikeTypeNamed(name, type) {\n if (type === undefined) {\n return;\n }\n if (this.current === undefined) {\n return;\n }\n const upper = name.toUpperCase();\n if (this.current.getData().extraLikeTypes[upper] !== undefined) {\n throw new Error(`Type name \"${name}\" already defined`);\n }\n this.current.getData().extraLikeTypes[upper] = type;\n }\n addClassDefinition(c) {\n if (this.current === undefined) {\n return;\n }\n const name = c.getName().toUpperCase();\n if (this.current.getData().cdefs[name] !== undefined) {\n throw new Error(`Class \"${name}\" already defined`);\n }\n this.current.getData().cdefs[name] = c;\n }\n addFormDefinitions(f) {\n if (this.current === undefined) {\n return;\n }\n this.current.getData().forms.push(...f);\n }\n addInterfaceDefinition(i) {\n var _a;\n (_a = this.current) === null || _a === void 0 ? void 0 : _a.getData().idefs.push(i);\n }\n addNamedIdentifier(name, identifier) {\n if (this.current === undefined) {\n return;\n }\n const upper = name.toUpperCase();\n if (this.current.getData().vars[upper] !== undefined) {\n throw new Error(`Variable name \"${name}\" already defined`);\n }\n this.current.getData().vars[upper] = identifier;\n }\n addIdentifier(identifier) {\n if (identifier === undefined) {\n return;\n }\n this.addNamedIdentifier(identifier.getName(), identifier);\n }\n addDeferred(token) {\n var _a;\n if (token === undefined) {\n return;\n }\n (_a = this.current) === null || _a === void 0 ? void 0 : _a.getData().deferred.push(token);\n }\n addListPrefix(identifiers, prefix) {\n for (const id of identifiers) {\n this.addNamedIdentifier(prefix + id.getName(), id);\n }\n }\n addList(identifiers) {\n for (const id of identifiers) {\n this.addIdentifier(id);\n }\n }\n addReference(usage, referencing, type, filename, extra) {\n var _a;\n if (usage === undefined || type === undefined) {\n return;\n }\n const position = new _identifier_1.Identifier(usage, filename);\n (_a = this.current) === null || _a === void 0 ? void 0 : _a.getData().references.push({ position, resolved: referencing, referenceType: type, extra });\n }\n ///////////////////////////\n findFunctionModule(name) {\n if (name === undefined) {\n return undefined;\n }\n for (const fugr of this.reg.getObjectsByType(\"FUGR\")) {\n const func = fugr.getModule(name);\n if (func !== undefined) {\n return func;\n }\n }\n return undefined;\n }\n findObjectDefinition(name) {\n if (name === undefined) {\n return undefined;\n }\n const clas = this.findClassDefinition(name);\n if (clas) {\n return clas;\n }\n const intf = this.findInterfaceDefinition(name);\n if (intf) {\n return intf;\n }\n return undefined;\n }\n isBadiDef(name) {\n const upper = name.toUpperCase();\n for (const enhs of this.reg.getObjectsByType(\"ENHS\")) {\n for (const def of enhs.listBadiDefinitions()) {\n if (def.name.toUpperCase() === upper) {\n return true;\n }\n }\n }\n return false;\n }\n // todo, found + type can be removed from method output?\n existsObject(name) {\n var _a, _b, _c;\n if (name === undefined) {\n return { found: false };\n }\n const findLocalClass = (_a = this.current) === null || _a === void 0 ? void 0 : _a.findClassDefinition(name);\n if (findLocalClass) {\n return { found: true, id: findLocalClass, type: _reference_1.ReferenceType.ObjectOrientedReference, ooType: \"CLAS\" };\n }\n const globalClas = this.reg.getObject(\"CLAS\", name);\n if (globalClas) {\n return { found: true, id: globalClas.getIdentifier(), type: _reference_1.ReferenceType.ObjectOrientedReference, ooType: \"CLAS\" };\n }\n const findLocalInterface = (_b = this.current) === null || _b === void 0 ? void 0 : _b.findInterfaceDefinition(name);\n if (findLocalInterface) {\n return { found: true, id: findLocalInterface, type: _reference_1.ReferenceType.ObjectOrientedReference, ooType: \"INTF\" };\n }\n const globalIntf = this.reg.getObject(\"INTF\", name);\n if (globalIntf) {\n return { found: true, id: globalIntf.getIdentifier(), type: _reference_1.ReferenceType.ObjectOrientedReference, ooType: \"INTF\" };\n }\n const def = (_c = this.current) === null || _c === void 0 ? void 0 : _c.findDeferred(name);\n if (def !== undefined) {\n return { found: true, id: def };\n }\n return { found: false };\n }\n ///////////////////////////\n /** Lookup class in local and global scope */\n findClassDefinition(name) {\n var _a;\n if (name === undefined) {\n return undefined;\n }\n const clocal = (_a = this.current) === null || _a === void 0 ? void 0 : _a.findClassDefinition(name);\n if (clocal) {\n return clocal;\n }\n const cglobal = this.reg.getObject(\"CLAS\", name);\n if (cglobal) {\n return cglobal.getDefinition();\n }\n return undefined;\n }\n findTypePoolConstant(name) {\n var _a;\n if (name === undefined || name.includes(\"_\") === undefined) {\n return undefined;\n }\n const typePoolName = name.split(\"_\")[0];\n const typePool = this.reg.getObject(\"TYPE\", typePoolName);\n if (typePool === undefined) {\n return undefined;\n }\n const spag = (_a = new syntax_1.SyntaxLogic(this.reg, typePool).run().spaghetti.getFirstChild()) === null || _a === void 0 ? void 0 : _a.getFirstChild();\n const found = spag === null || spag === void 0 ? void 0 : spag.findVariable(name);\n return found;\n }\n findTypePoolType(name) {\n var _a;\n if (name.includes(\"_\") === undefined) {\n return undefined;\n }\n const typePoolName = name.split(\"_\")[0];\n const typePool = this.reg.getObject(\"TYPE\", typePoolName);\n if (typePool === undefined) {\n return undefined;\n }\n const spag = (_a = new syntax_1.SyntaxLogic(this.reg, typePool).run().spaghetti.getFirstChild()) === null || _a === void 0 ? void 0 : _a.getFirstChild();\n const found = spag === null || spag === void 0 ? void 0 : spag.findType(name);\n return found;\n }\n /** Lookup interface in local and global scope */\n findInterfaceDefinition(name) {\n var _a;\n if (name === undefined) {\n return undefined;\n }\n const ilocal = (_a = this.current) === null || _a === void 0 ? void 0 : _a.findInterfaceDefinition(name);\n if (ilocal) {\n return ilocal;\n }\n const iglobal = this.reg.getObject(\"INTF\", name);\n if (iglobal) {\n return iglobal.getDefinition();\n }\n return undefined;\n }\n findFormDefinition(name) {\n var _a;\n return (_a = this.current) === null || _a === void 0 ? void 0 : _a.findFormDefinition(name);\n }\n findType(name) {\n var _a;\n if (name === undefined) {\n return undefined;\n }\n return (_a = this.current) === null || _a === void 0 ? void 0 : _a.findType(name);\n }\n findExtraLikeType(name) {\n var _a;\n if (name === undefined) {\n return undefined;\n }\n return (_a = this.current) === null || _a === void 0 ? void 0 : _a.findExtraLikeType(name);\n }\n findVariable(name) {\n var _a;\n if (name === undefined) {\n return undefined;\n }\n const found = (_a = this.current) === null || _a === void 0 ? void 0 : _a.findVariable(name);\n if (found) {\n return found;\n }\n return this.findTypePoolConstant(name);\n }\n ///////////////////////////\n getDDIC() {\n return new ddic_1.DDIC(this.reg);\n }\n getDDICReferences() {\n return this.reg.getDDICReferences();\n }\n getParentObj() {\n return this.parentObj;\n }\n getName() {\n if (this.current === undefined) {\n throw new Error(\"error, getName\");\n }\n return this.current.getIdentifier().sname;\n }\n getType() {\n if (this.current === undefined) {\n throw new Error(\"error, getType\");\n }\n return this.current.getIdentifier().stype;\n }\n push(stype, sname, start, filename) {\n const identifier = { stype, sname, start, filename, end: undefined };\n if (this.current === undefined) {\n // the top node\n this.current = new spaghetti_scope_1.SpaghettiScopeNode(identifier, undefined);\n }\n else {\n const parent = this.current;\n this.current = new spaghetti_scope_1.SpaghettiScopeNode(identifier, parent);\n parent.addChild(this.current);\n }\n }\n isOO() {\n let curr = this.current;\n while (curr !== undefined) {\n const stype = curr.getIdentifier().stype;\n if (stype === _scope_type_1.ScopeType.ClassDefinition\n || stype === _scope_type_1.ScopeType.ClassImplementation\n || stype === _scope_type_1.ScopeType.Interface) {\n return true;\n }\n curr = curr.getParent();\n }\n return false;\n }\n isTypePool() {\n var _a;\n return ((_a = this.current) === null || _a === void 0 ? void 0 : _a.getIdentifier().filename.endsWith(\".type.abap\")) === true || false;\n }\n setAllowHeaderUse(name) {\n // workaround for SELECT FOR ALL ENTRIES\n this.allowHeaderUse = name;\n }\n isAllowHeaderUse(name) {\n var _a;\n return name.toUpperCase() === ((_a = this.allowHeaderUse) === null || _a === void 0 ? void 0 : _a.toUpperCase());\n }\n pop(end) {\n this.allowHeaderUse = undefined;\n if (this.current === undefined) {\n throw new Error(\"something wrong, top scope popped\");\n }\n this.current.setEnd(end);\n const current = this.current;\n this.current = this.current.getParent();\n return new spaghetti_scope_1.SpaghettiScope(current);\n }\n}\nexports.CurrentScope = CurrentScope;\n//# sourceMappingURL=_current_scope.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/_current_scope.js?");
6730
6730
 
6731
6731
  /***/ }),
6732
6732
 
@@ -6781,7 +6781,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
6781
6781
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6782
6782
 
6783
6783
  "use strict";
6784
- eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TypeUtils = void 0;\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/@abaplint/core/build/src/abap/types/index.js\");\nconst basic_1 = __webpack_require__(/*! ../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\nconst cgeneric_type_1 = __webpack_require__(/*! ../types/basic/cgeneric_type */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/cgeneric_type.js\");\nclass TypeUtils {\n constructor(scope) {\n this.scope = scope;\n }\n isCharLikeStrict(type) {\n if (type === undefined) {\n return false;\n }\n else if (type instanceof basic_1.StructureType) {\n for (const c of type.getComponents()) {\n if (this.isCharLikeStrict(c.type) === false) {\n return false;\n }\n }\n return true;\n }\n else if (type instanceof basic_1.StringType\n || type instanceof basic_1.AnyType\n || type instanceof basic_1.CharacterType\n || type instanceof basic_1.SimpleType\n || type instanceof cgeneric_type_1.CGenericType\n || type instanceof basic_1.CLikeType\n || type instanceof basic_1.DateType\n || type instanceof basic_1.CSequenceType\n || type instanceof basic_1.NumericGenericType\n || type instanceof basic_1.NumericType\n || type instanceof basic_1.TimeType\n || type instanceof basic_1.UnknownType\n || type instanceof basic_1.VoidType) {\n return true;\n }\n return false;\n }\n isCharLike(type) {\n if (type === undefined) {\n return false;\n }\n else if (type instanceof basic_1.TableType && type.isWithHeader()) {\n return this.isCharLike(type.getRowType());\n }\n else if (type instanceof basic_1.StructureType) {\n for (const c of type.getComponents()) {\n if (this.isCharLike(c.type) === false) {\n return false;\n }\n }\n return true;\n }\n else if (type instanceof basic_1.StringType\n || type instanceof basic_1.CharacterType\n || type instanceof basic_1.VoidType\n || type instanceof basic_1.AnyType\n || type instanceof basic_1.UnknownType\n || type instanceof basic_1.NumericType\n || type instanceof basic_1.IntegerType\n || type instanceof basic_1.SimpleType\n || type instanceof basic_1.FloatType\n || type instanceof basic_1.FloatingPointType\n || type instanceof basic_1.DecFloatType\n || type instanceof basic_1.DecFloat16Type\n || type instanceof basic_1.DecFloat34Type\n || type instanceof basic_1.NumericGenericType\n || type instanceof basic_1.CSequenceType\n || type instanceof cgeneric_type_1.CGenericType\n || type instanceof basic_1.DateType\n || type instanceof basic_1.CLikeType\n || type instanceof basic_1.PackedType\n || type instanceof basic_1.TimeType) {\n return true;\n }\n return false;\n }\n isHexLike(type) {\n if (type === undefined) {\n return false;\n }\n else if (type instanceof basic_1.StructureType) {\n for (const c of type.getComponents()) {\n if (this.isHexLike(c.type) === false) {\n return false;\n }\n }\n return true;\n }\n else if (type instanceof basic_1.XStringType\n || type instanceof basic_1.HexType\n || type instanceof basic_1.VoidType\n || type instanceof basic_1.AnyType\n || type instanceof basic_1.UnknownType) {\n return true;\n }\n return false;\n }\n isOOAssignable(source, target) {\n let sid = source.getIdentifier();\n let tid = target.getIdentifier();\n const tname = tid.getName().toUpperCase();\n const sname = sid.getName().toUpperCase();\n if (tname === sname) {\n return true;\n }\n if (!(sid instanceof types_1.ClassDefinition || sid instanceof types_1.InterfaceDefinition)) {\n const found = this.scope.findObjectDefinition(sid.getName());\n if (found) {\n sid = found;\n }\n else {\n return false;\n }\n }\n if (!(tid instanceof types_1.ClassDefinition || tid instanceof types_1.InterfaceDefinition)) {\n const found = this.scope.findObjectDefinition(tid.getName());\n if (found) {\n tid = found;\n }\n else {\n return false;\n }\n }\n if (sid instanceof types_1.ClassDefinition && tid instanceof types_1.ClassDefinition) {\n if (sname === tname) {\n return true;\n }\n const slist = this.listAllSupers(sid);\n if (slist.indexOf(tname) >= 0) {\n return true;\n }\n }\n else if (sid instanceof types_1.ClassDefinition && tid instanceof types_1.InterfaceDefinition) {\n if (sid.getImplementing().some(i => i.name === tname)) {\n return true;\n }\n const slist = this.listAllInterfaces(sid);\n if (slist.indexOf(tname) >= 0) {\n return true;\n }\n }\n else if (sid instanceof types_1.InterfaceDefinition && tid instanceof types_1.InterfaceDefinition) {\n if (sname === tname) {\n return true;\n }\n if (sid.getImplementing().some(i => i.name === tname)) {\n return true;\n }\n const slist = this.listAllInterfaces(sid);\n if (slist.indexOf(tname) >= 0) {\n return true;\n }\n }\n return false;\n }\n listAllInterfaces(cdef) {\n var _a;\n const ret = new Set();\n const stack = [];\n // initialize\n cdef.getImplementing().forEach(i => stack.push(i.name));\n if (cdef instanceof types_1.ClassDefinition) {\n const supers = this.listAllSupers(cdef);\n for (const s of supers) {\n (_a = this.scope.findClassDefinition(s)) === null || _a === void 0 ? void 0 : _a.getImplementing().forEach(i => stack.push(i.name));\n }\n }\n // main loop\n while (stack.length > 0) {\n const intf = stack.pop().toUpperCase();\n ret.add(intf);\n const idef = this.scope.findInterfaceDefinition(intf);\n idef === null || idef === void 0 ? void 0 : idef.getImplementing().forEach(i => stack.push(i.name));\n }\n return Array.from(ret.values());\n }\n listAllSupers(cdef) {\n var _a, _b;\n const ret = [];\n let sup = cdef.getSuperClass();\n while (sup !== undefined) {\n ret.push(sup === null || sup === void 0 ? void 0 : sup.toUpperCase());\n sup = (_b = (_a = this.scope.findClassDefinition(sup)) === null || _a === void 0 ? void 0 : _a.getSuperClass()) === null || _b === void 0 ? void 0 : _b.toUpperCase();\n }\n return ret;\n }\n isCastable(_source, _target) {\n // todo\n return true;\n }\n isAssignableStrict(source, target) {\n var _a;\n /*\n console.dir(source);\n console.dir(target);\n */\n if (source instanceof basic_1.CharacterType && target instanceof basic_1.CharacterType) {\n if (((_a = source.getAbstractTypeData()) === null || _a === void 0 ? void 0 : _a.derivedFromConstant) === true) {\n return source.getLength() <= target.getLength();\n }\n return source.getLength() === target.getLength();\n }\n else if (source instanceof basic_1.StringType && target instanceof basic_1.StructureType) {\n for (const c of target.getComponents()) {\n if (c.type instanceof basic_1.StringType) {\n return false;\n }\n }\n return true;\n }\n return this.isAssignable(source, target);\n }\n isAssignable(source, target) {\n /*\n console.dir(source);\n console.dir(target);\n */\n if (target instanceof basic_1.TableType) {\n if (target.isWithHeader()) {\n return this.isAssignable(source, target.getRowType());\n }\n if (source instanceof basic_1.VoidType\n || source instanceof basic_1.AnyType\n || source instanceof basic_1.UnknownType) {\n return true;\n }\n else if (source instanceof basic_1.TableType) {\n return this.isAssignableStrict(source.getRowType(), target.getRowType());\n }\n return false;\n }\n else if (target instanceof basic_1.ObjectReferenceType && source instanceof basic_1.ObjectReferenceType) {\n return this.isOOAssignable(source, target);\n }\n else if (target instanceof basic_1.ObjectReferenceType\n || target instanceof basic_1.GenericObjectReferenceType) {\n if (source instanceof basic_1.ObjectReferenceType\n || source instanceof basic_1.GenericObjectReferenceType\n || source instanceof basic_1.VoidType\n || source instanceof basic_1.AnyType\n || source instanceof basic_1.UnknownType) {\n return true;\n }\n return false;\n }\n else if (target instanceof basic_1.DataReference) {\n if (source instanceof basic_1.DataReference\n || source instanceof basic_1.VoidType\n || source instanceof basic_1.AnyType\n || source instanceof basic_1.UnknownType) {\n return true;\n }\n return false;\n }\n else if (target instanceof basic_1.StructureType) {\n if (source instanceof basic_1.TableType && source.isWithHeader()) {\n return this.isAssignable(source.getRowType(), target);\n }\n else if (source instanceof basic_1.StructureType\n || source instanceof basic_1.VoidType\n || source instanceof basic_1.AnyType\n || source instanceof basic_1.UnknownType) {\n return true;\n }\n else if (target.containsVoid() === true) {\n return true;\n }\n else if (source instanceof basic_1.IntegerType) {\n return false;\n }\n else if (this.isCharLike(target) && this.isCharLike(source)) {\n return true;\n }\n return false;\n }\n else if (target instanceof basic_1.IntegerType\n || target instanceof basic_1.StringType) {\n if (source instanceof basic_1.TableType && source.isWithHeader() === false) {\n return false;\n }\n else if (source instanceof basic_1.DataReference\n || source instanceof basic_1.ObjectReferenceType\n || source instanceof basic_1.GenericObjectReferenceType) {\n return false;\n }\n return true;\n }\n return true;\n }\n}\nexports.TypeUtils = TypeUtils;\n//# sourceMappingURL=_type_utils.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/_type_utils.js?");
6784
+ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TypeUtils = void 0;\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/@abaplint/core/build/src/abap/types/index.js\");\nconst basic_1 = __webpack_require__(/*! ../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\nconst cgeneric_type_1 = __webpack_require__(/*! ../types/basic/cgeneric_type */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/cgeneric_type.js\");\nclass TypeUtils {\n constructor(scope) {\n this.scope = scope;\n }\n isCharLikeStrict(type) {\n if (type === undefined) {\n return false;\n }\n else if (type instanceof basic_1.StructureType) {\n for (const c of type.getComponents()) {\n if (this.isCharLikeStrict(c.type) === false) {\n return false;\n }\n }\n return true;\n }\n else if (type instanceof basic_1.StringType\n || type instanceof basic_1.AnyType\n || type instanceof basic_1.CharacterType\n || type instanceof basic_1.SimpleType\n || type instanceof cgeneric_type_1.CGenericType\n || type instanceof basic_1.CLikeType\n || type instanceof basic_1.DateType\n || type instanceof basic_1.CSequenceType\n || type instanceof basic_1.NumericGenericType\n || type instanceof basic_1.NumericType\n || type instanceof basic_1.TimeType\n || type instanceof basic_1.UnknownType\n || type instanceof basic_1.VoidType) {\n return true;\n }\n return false;\n }\n isCharLike(type) {\n if (type === undefined) {\n return false;\n }\n else if (type instanceof basic_1.TableType && type.isWithHeader()) {\n return this.isCharLike(type.getRowType());\n }\n else if (type instanceof basic_1.StructureType) {\n for (const c of type.getComponents()) {\n if (this.isCharLike(c.type) === false) {\n return false;\n }\n }\n return true;\n }\n else if (type instanceof basic_1.StringType\n || type instanceof basic_1.CharacterType\n || type instanceof basic_1.VoidType\n || type instanceof basic_1.AnyType\n || type instanceof basic_1.UnknownType\n || type instanceof basic_1.NumericType\n || type instanceof basic_1.IntegerType\n || type instanceof basic_1.SimpleType\n || type instanceof basic_1.FloatType\n || type instanceof basic_1.FloatingPointType\n || type instanceof basic_1.DecFloatType\n || type instanceof basic_1.DecFloat16Type\n || type instanceof basic_1.DecFloat34Type\n || type instanceof basic_1.NumericGenericType\n || type instanceof basic_1.CSequenceType\n || type instanceof cgeneric_type_1.CGenericType\n || type instanceof basic_1.DateType\n || type instanceof basic_1.CLikeType\n || type instanceof basic_1.PackedType\n || type instanceof basic_1.TimeType) {\n return true;\n }\n return false;\n }\n isHexLike(type) {\n if (type === undefined) {\n return false;\n }\n else if (type instanceof basic_1.StructureType) {\n for (const c of type.getComponents()) {\n if (this.isHexLike(c.type) === false) {\n return false;\n }\n }\n return true;\n }\n else if (type instanceof basic_1.XStringType\n || type instanceof basic_1.HexType\n || type instanceof basic_1.VoidType\n || type instanceof basic_1.AnyType\n || type instanceof basic_1.UnknownType) {\n return true;\n }\n return false;\n }\n isOOAssignable(source, target) {\n let sid = source.getIdentifier();\n let tid = target.getIdentifier();\n const tname = tid.getName().toUpperCase();\n const sname = sid.getName().toUpperCase();\n if (tname === sname) {\n return true;\n }\n if (!(sid instanceof types_1.ClassDefinition || sid instanceof types_1.InterfaceDefinition)) {\n const found = this.scope.findObjectDefinition(sid.getName());\n if (found) {\n sid = found;\n }\n else {\n return false;\n }\n }\n if (!(tid instanceof types_1.ClassDefinition || tid instanceof types_1.InterfaceDefinition)) {\n const found = this.scope.findObjectDefinition(tid.getName());\n if (found) {\n tid = found;\n }\n else {\n return false;\n }\n }\n if (sid instanceof types_1.ClassDefinition && tid instanceof types_1.ClassDefinition) {\n if (sname === tname) {\n return true;\n }\n const slist = this.listAllSupers(sid);\n if (slist.indexOf(tname) >= 0) {\n return true;\n }\n }\n else if (sid instanceof types_1.ClassDefinition && tid instanceof types_1.InterfaceDefinition) {\n if (sid.getImplementing().some(i => i.name === tname)) {\n return true;\n }\n const slist = this.listAllInterfaces(sid);\n if (slist.indexOf(tname) >= 0) {\n return true;\n }\n }\n else if (sid instanceof types_1.InterfaceDefinition && tid instanceof types_1.InterfaceDefinition) {\n if (sname === tname) {\n return true;\n }\n if (sid.getImplementing().some(i => i.name === tname)) {\n return true;\n }\n const slist = this.listAllInterfaces(sid);\n if (slist.indexOf(tname) >= 0) {\n return true;\n }\n }\n return false;\n }\n listAllInterfaces(cdef) {\n var _a;\n const ret = new Set();\n const stack = [];\n // initialize\n cdef.getImplementing().forEach(i => stack.push(i.name));\n if (cdef instanceof types_1.ClassDefinition) {\n const supers = this.listAllSupers(cdef);\n for (const s of supers) {\n (_a = this.scope.findClassDefinition(s)) === null || _a === void 0 ? void 0 : _a.getImplementing().forEach(i => stack.push(i.name));\n }\n }\n // main loop\n while (stack.length > 0) {\n const intf = stack.pop().toUpperCase();\n ret.add(intf);\n const idef = this.scope.findInterfaceDefinition(intf);\n idef === null || idef === void 0 ? void 0 : idef.getImplementing().forEach(i => stack.push(i.name));\n }\n return Array.from(ret.values());\n }\n listAllSupers(cdef) {\n var _a, _b;\n const ret = [];\n let sup = cdef.getSuperClass();\n while (sup !== undefined) {\n ret.push(sup === null || sup === void 0 ? void 0 : sup.toUpperCase());\n sup = (_b = (_a = this.scope.findClassDefinition(sup)) === null || _a === void 0 ? void 0 : _a.getSuperClass()) === null || _b === void 0 ? void 0 : _b.toUpperCase();\n }\n return ret;\n }\n isCastable(_source, _target) {\n // todo\n return true;\n }\n structureContainsString(structure) {\n for (const c of structure.getComponents()) {\n if (c.type instanceof basic_1.StringType) {\n return true;\n }\n }\n return false;\n }\n isAssignableStrict(source, target) {\n var _a;\n /*\n console.dir(source);\n console.dir(target);\n */\n if (source instanceof basic_1.CharacterType && target instanceof basic_1.CharacterType) {\n if (((_a = source.getAbstractTypeData()) === null || _a === void 0 ? void 0 : _a.derivedFromConstant) === true) {\n return source.getLength() <= target.getLength();\n }\n return source.getLength() === target.getLength();\n }\n else if (source instanceof basic_1.StringType && target instanceof basic_1.StructureType) {\n if (this.structureContainsString(target)) {\n return false;\n }\n return true;\n }\n return this.isAssignable(source, target);\n }\n isAssignable(source, target) {\n /*\n console.dir(source);\n console.dir(target);\n */\n if (target instanceof basic_1.TableType) {\n if (target.isWithHeader()) {\n return this.isAssignable(source, target.getRowType());\n }\n if (source instanceof basic_1.VoidType\n || source instanceof basic_1.AnyType\n || source instanceof basic_1.UnknownType) {\n return true;\n }\n else if (source instanceof basic_1.TableType) {\n return this.isAssignableStrict(source.getRowType(), target.getRowType());\n }\n return false;\n }\n else if (target instanceof basic_1.ObjectReferenceType && source instanceof basic_1.ObjectReferenceType) {\n return this.isOOAssignable(source, target);\n }\n else if (target instanceof basic_1.ObjectReferenceType\n || target instanceof basic_1.GenericObjectReferenceType) {\n if (source instanceof basic_1.ObjectReferenceType\n || source instanceof basic_1.GenericObjectReferenceType\n || source instanceof basic_1.VoidType\n || source instanceof basic_1.AnyType\n || source instanceof basic_1.UnknownType) {\n return true;\n }\n return false;\n }\n else if (target instanceof basic_1.DataReference) {\n if (source instanceof basic_1.DataReference\n || source instanceof basic_1.VoidType\n || source instanceof basic_1.AnyType\n || source instanceof basic_1.UnknownType) {\n return true;\n }\n return false;\n }\n else if (target instanceof basic_1.StructureType) {\n if (source instanceof basic_1.TableType && source.isWithHeader()) {\n return this.isAssignable(source.getRowType(), target);\n }\n else if (source instanceof basic_1.VoidType\n || source instanceof basic_1.AnyType\n || source instanceof basic_1.UnknownType) {\n return true;\n }\n else if (source instanceof basic_1.StructureType) {\n if (this.structureContainsString(target) && !this.structureContainsString(source)) {\n return false;\n }\n return true;\n }\n else if (target.containsVoid() === true) {\n return true;\n }\n else if (source instanceof basic_1.IntegerType) {\n return false;\n }\n else if (this.isCharLike(target) && this.isCharLike(source)) {\n return true;\n }\n return false;\n }\n else if (target instanceof basic_1.IntegerType\n || target instanceof basic_1.StringType) {\n if (source instanceof basic_1.TableType && source.isWithHeader() === false) {\n return false;\n }\n else if (source instanceof basic_1.DataReference\n || source instanceof basic_1.ObjectReferenceType\n || source instanceof basic_1.GenericObjectReferenceType) {\n return false;\n }\n return true;\n }\n return true;\n }\n}\nexports.TypeUtils = TypeUtils;\n//# sourceMappingURL=_type_utils.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/_type_utils.js?");
6785
6785
 
6786
6786
  /***/ }),
6787
6787
 
@@ -7793,7 +7793,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
7793
7793
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7794
7794
 
7795
7795
  "use strict";
7796
- eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CreateObject = void 0;\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nconst source_1 = __webpack_require__(/*! ../expressions/source */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js\");\nconst target_1 = __webpack_require__(/*! ../expressions/target */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/target.js\");\nconst dynamic_1 = __webpack_require__(/*! ../expressions/dynamic */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dynamic.js\");\nconst _reference_1 = __webpack_require__(/*! ../_reference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js\");\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\nconst types_1 = __webpack_require__(/*! ../../types */ \"./node_modules/@abaplint/core/build/src/abap/types/index.js\");\nconst _object_oriented_1 = __webpack_require__(/*! ../_object_oriented */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_object_oriented.js\");\nclass CreateObject {\n runSyntax(node, scope, filename) {\n let cdef = undefined;\n // CREATE OBJECT, TYPE\n const type = node.findExpressionAfterToken(\"TYPE\");\n if (type && type.get() instanceof Expressions.ClassName) {\n const token = type.getFirstToken();\n const name = token.getStr();\n cdef = scope.findClassDefinition(name);\n if (cdef) {\n scope.addReference(token, cdef, _reference_1.ReferenceType.ObjectOrientedReference, filename);\n if (cdef.isAbstract() === true) {\n throw new Error(cdef.getName() + \" is abstract, cannot be instantiated\");\n }\n }\n else if (scope.getDDIC().inErrorNamespace(name) === false) {\n scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, { ooName: name, ooType: \"CLAS\" });\n }\n else {\n throw new Error(\"TYPE \\\"\" + name + \"\\\" not found\");\n }\n }\n // just recurse\n for (const s of node.findAllExpressions(Expressions.Source)) {\n new source_1.Source().runSyntax(s, scope, filename);\n }\n let first = true;\n for (const t of node.findAllExpressions(Expressions.Target)) {\n const found = new target_1.Target().runSyntax(t, scope, filename);\n if (first === true) {\n first = false;\n if (found instanceof basic_1.VoidType) {\n continue;\n }\n else if (found instanceof basic_1.UnknownType) {\n throw new Error(\"Target type unknown, \" + t.concatTokens());\n }\n else if (!(found instanceof basic_1.ObjectReferenceType)\n && !(found instanceof basic_1.AnyType)\n && !(found instanceof basic_1.GenericObjectReferenceType)) {\n throw new Error(\"Target must be an object reference, \" + t.concatTokens());\n }\n else if (found instanceof basic_1.GenericObjectReferenceType && type === undefined) {\n throw new Error(\"Generic type, cannot be instantiated\");\n }\n else if (found instanceof basic_1.ObjectReferenceType) {\n const id = found.getIdentifier();\n if (id instanceof types_1.InterfaceDefinition && type === undefined) {\n throw new Error(\"Interface reference, cannot be instantiated\");\n }\n else if (id instanceof types_1.ClassDefinition && cdef === undefined) {\n cdef = id;\n }\n if (type === undefined && id instanceof types_1.ClassDefinition && id.isAbstract() === true) {\n throw new Error(id.getName() + \" is abstract, cannot be instantiated\");\n }\n }\n }\n }\n for (const t of node.findDirectExpressions(Expressions.Dynamic)) {\n new dynamic_1.Dynamic().runSyntax(t, scope, filename);\n }\n this.validateParameters(cdef, node, scope);\n }\n validateParameters(cdef, node, scope) {\n var _a, _b, _c;\n if (cdef === undefined) {\n return;\n }\n const methodDef = new _object_oriented_1.ObjectOriented(scope).searchMethodName(cdef, \"CONSTRUCTOR\");\n const methodParameters = (_a = methodDef.method) === null || _a === void 0 ? void 0 : _a.getParameters();\n const allImporting = (methodParameters === null || methodParameters === void 0 ? void 0 : methodParameters.getImporting()) || [];\n const requiredImporting = new Set(methodParameters === null || methodParameters === void 0 ? void 0 : methodParameters.getRequiredParameters().map(i => i.getName().toUpperCase()));\n // todo, validate types\n for (const p of ((_b = node.findDirectExpression(Expressions.ParameterListS)) === null || _b === void 0 ? void 0 : _b.findAllExpressions(Expressions.ParameterS)) || []) {\n const name = (_c = p.findDirectExpression(Expressions.ParameterName)) === null || _c === void 0 ? void 0 : _c.concatTokens().toUpperCase();\n if (name === undefined) {\n continue;\n }\n if ((allImporting === null || allImporting === void 0 ? void 0 : allImporting.some(p => p.getName().toUpperCase() === name)) === false) {\n throw new Error(`constructor parameter \"${name}\" does not exist`);\n }\n requiredImporting.delete(name);\n }\n for (const r of requiredImporting.values()) {\n throw new Error(`constructor parameter \"${r}\" must be supplied`);\n }\n }\n}\nexports.CreateObject = CreateObject;\n//# sourceMappingURL=create_object.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/create_object.js?");
7796
+ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CreateObject = void 0;\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nconst source_1 = __webpack_require__(/*! ../expressions/source */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js\");\nconst target_1 = __webpack_require__(/*! ../expressions/target */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/target.js\");\nconst dynamic_1 = __webpack_require__(/*! ../expressions/dynamic */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dynamic.js\");\nconst _reference_1 = __webpack_require__(/*! ../_reference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js\");\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\nconst types_1 = __webpack_require__(/*! ../../types */ \"./node_modules/@abaplint/core/build/src/abap/types/index.js\");\nconst _object_oriented_1 = __webpack_require__(/*! ../_object_oriented */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_object_oriented.js\");\nclass CreateObject {\n runSyntax(node, scope, filename) {\n let cdef = undefined;\n // CREATE OBJECT, TYPE\n const type = node.findExpressionAfterToken(\"TYPE\");\n if (type && type.get() instanceof Expressions.ClassName) {\n const token = type.getFirstToken();\n const name = token.getStr();\n cdef = scope.findClassDefinition(name);\n if (cdef) {\n scope.addReference(token, cdef, _reference_1.ReferenceType.ObjectOrientedReference, filename);\n if (cdef.isAbstract() === true) {\n throw new Error(cdef.getName() + \" is abstract, cannot be instantiated\");\n }\n }\n else if (scope.getDDIC().inErrorNamespace(name) === false) {\n scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, { ooName: name, ooType: \"CLAS\" });\n }\n else {\n throw new Error(\"TYPE \\\"\" + name + \"\\\" not found\");\n }\n }\n // just recurse\n for (const s of node.findAllExpressions(Expressions.Source)) {\n new source_1.Source().runSyntax(s, scope, filename);\n }\n let first = true;\n for (const t of node.findAllExpressions(Expressions.Target)) {\n const found = new target_1.Target().runSyntax(t, scope, filename);\n if (first === true) {\n first = false;\n if (found instanceof basic_1.VoidType) {\n continue;\n }\n else if (found instanceof basic_1.UnknownType) {\n throw new Error(\"Target type unknown, \" + t.concatTokens());\n }\n else if (!(found instanceof basic_1.ObjectReferenceType)\n && !(found instanceof basic_1.AnyType)\n && !(found instanceof basic_1.GenericObjectReferenceType)) {\n throw new Error(\"Target must be an object reference, \" + t.concatTokens());\n }\n else if (found instanceof basic_1.GenericObjectReferenceType && type === undefined) {\n throw new Error(\"Generic type, cannot be instantiated\");\n }\n else if (found instanceof basic_1.ObjectReferenceType) {\n const id = found.getIdentifier();\n if (id instanceof types_1.InterfaceDefinition && type === undefined) {\n throw new Error(\"Interface reference, cannot be instantiated\");\n }\n else if (found instanceof basic_1.ObjectReferenceType\n && type === undefined\n && scope.findInterfaceDefinition(found.getQualifiedName())) {\n throw new Error(\"Interface reference, cannot be instantiated\");\n }\n else if (id instanceof types_1.ClassDefinition && cdef === undefined) {\n cdef = id;\n }\n if (type === undefined && id instanceof types_1.ClassDefinition && id.isAbstract() === true) {\n throw new Error(id.getName() + \" is abstract, cannot be instantiated\");\n }\n }\n }\n }\n for (const t of node.findDirectExpressions(Expressions.Dynamic)) {\n new dynamic_1.Dynamic().runSyntax(t, scope, filename);\n }\n this.validateParameters(cdef, node, scope);\n }\n validateParameters(cdef, node, scope) {\n var _a, _b, _c;\n if (cdef === undefined) {\n return;\n }\n const methodDef = new _object_oriented_1.ObjectOriented(scope).searchMethodName(cdef, \"CONSTRUCTOR\");\n const methodParameters = (_a = methodDef.method) === null || _a === void 0 ? void 0 : _a.getParameters();\n const allImporting = (methodParameters === null || methodParameters === void 0 ? void 0 : methodParameters.getImporting()) || [];\n const requiredImporting = new Set(methodParameters === null || methodParameters === void 0 ? void 0 : methodParameters.getRequiredParameters().map(i => i.getName().toUpperCase()));\n // todo, validate types\n for (const p of ((_b = node.findDirectExpression(Expressions.ParameterListS)) === null || _b === void 0 ? void 0 : _b.findAllExpressions(Expressions.ParameterS)) || []) {\n const name = (_c = p.findDirectExpression(Expressions.ParameterName)) === null || _c === void 0 ? void 0 : _c.concatTokens().toUpperCase();\n if (name === undefined) {\n continue;\n }\n if ((allImporting === null || allImporting === void 0 ? void 0 : allImporting.some(p => p.getName().toUpperCase() === name)) === false) {\n throw new Error(`constructor parameter \"${name}\" does not exist`);\n }\n requiredImporting.delete(name);\n }\n for (const r of requiredImporting.values()) {\n throw new Error(`constructor parameter \"${r}\" must be supplied`);\n }\n }\n}\nexports.CreateObject = CreateObject;\n//# sourceMappingURL=create_object.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/create_object.js?");
7797
7797
 
7798
7798
  /***/ }),
7799
7799
 
@@ -11841,7 +11841,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
11841
11841
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
11842
11842
 
11843
11843
  "use strict";
11844
- eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Registry = void 0;\nconst config_1 = __webpack_require__(/*! ./config */ \"./node_modules/@abaplint/core/build/src/config.js\");\nconst artifacts_objects_1 = __webpack_require__(/*! ./artifacts_objects */ \"./node_modules/@abaplint/core/build/src/artifacts_objects.js\");\nconst find_global_definitions_1 = __webpack_require__(/*! ./abap/5_syntax/global_definitions/find_global_definitions */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/global_definitions/find_global_definitions.js\");\nconst excludeHelper_1 = __webpack_require__(/*! ./utils/excludeHelper */ \"./node_modules/@abaplint/core/build/src/utils/excludeHelper.js\");\nconst ddic_references_1 = __webpack_require__(/*! ./ddic_references */ \"./node_modules/@abaplint/core/build/src/ddic_references.js\");\nconst rules_runner_1 = __webpack_require__(/*! ./rules_runner */ \"./node_modules/@abaplint/core/build/src/rules_runner.js\");\n// todo, this should really be an instance in case there are multiple Registry'ies\nclass ParsingPerformance {\n static clear() {\n this.results = [];\n this.lexing = 0;\n this.statements = 0;\n this.structure = 0;\n }\n static push(obj, result) {\n if (result.runtimeExtra) {\n this.lexing += result.runtimeExtra.lexing;\n this.statements += result.runtimeExtra.statements;\n this.structure += result.runtimeExtra.structure;\n }\n if (result.runtime < 100) {\n return;\n }\n if (this.results === undefined) {\n this.results = [];\n }\n let extra = \"\";\n if (result.runtimeExtra) {\n extra = `\\t(lexing: ${result.runtimeExtra.lexing}ms, statements: ${result.runtimeExtra.statements}ms, structure: ${result.runtimeExtra.structure}ms)`;\n }\n this.results.push({\n runtime: result.runtime,\n extra,\n name: obj.getType() + \" \" + obj.getName(),\n });\n }\n static output() {\n const MAX = 10;\n this.results.sort((a, b) => { return b.runtime - a.runtime; });\n for (let i = 0; i < MAX; i++) {\n const row = this.results[i];\n if (row === undefined) {\n break;\n }\n process.stderr.write(`\\t${row.runtime}ms\\t${row.name} ${row.extra}\\n`);\n }\n process.stderr.write(`\\tTotal lexing: ${this.lexing}ms\\n`);\n process.stderr.write(`\\tTotal statements: ${this.statements}ms\\n`);\n process.stderr.write(`\\tTotal structure: ${this.structure}ms\\n`);\n }\n}\n///////////////////////////////////////////////////////////////////////////////////////////////\nclass Registry {\n constructor(conf) {\n this.objects = {};\n this.objectsByType = {};\n this.dependencies = {};\n this.conf = conf ? conf : config_1.Config.getDefault();\n this.references = new ddic_references_1.DDICReferences();\n }\n static abaplintVersion() {\n // magic, see build script \"version.sh\"\n return \"2.97.9\";\n }\n getDDICReferences() {\n return this.references;\n }\n *getObjects() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n yield this.objects[name][type];\n }\n }\n }\n *getObjectsByType(type) {\n for (const name in this.objectsByType[type] || []) {\n yield this.objectsByType[type][name];\n }\n }\n *getFiles() {\n for (const obj of this.getObjects()) {\n for (const file of obj.getFiles()) {\n yield file;\n }\n }\n }\n getFirstObject() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n return this.objects[name][type];\n }\n }\n return undefined;\n }\n getObjectCount(skipDependencies = true) {\n let res = 0;\n for (const o of this.getObjects()) {\n if (skipDependencies === true && this.isDependency(o)) {\n continue;\n }\n res = res + 1;\n }\n return res;\n }\n getFileByName(filename) {\n const upper = filename.toUpperCase();\n for (const o of this.getObjects()) {\n for (const f of o.getFiles()) {\n if (f.getFilename().toUpperCase() === upper) {\n return f;\n }\n }\n }\n return undefined;\n }\n getObject(type, name) {\n if (type === undefined || name === undefined) {\n return undefined;\n }\n const searchName = name.toUpperCase();\n if (this.objects[searchName]) {\n return this.objects[searchName][type];\n }\n return undefined;\n }\n getConfig() {\n return this.conf;\n }\n // assumption: Config is immutable, and can only be changed via this method\n setConfig(conf) {\n for (const obj of this.getObjects()) {\n obj.setDirty();\n }\n this.conf = conf;\n return this;\n }\n inErrorNamespace(name) {\n // todo: performance? cache regexp?\n const reg = new RegExp(this.getConfig().getSyntaxSetttings().errorNamespace, \"i\");\n return reg.test(name);\n }\n addFile(file) {\n return this.addFiles([file]);\n }\n updateFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.updateFile(file);\n return this;\n }\n removeFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.removeFile(file);\n if (obj.getFiles().length === 0) {\n this.references.clear(obj);\n this.removeObject(obj);\n }\n return this;\n }\n _addFiles(files, dependency) {\n var _a;\n const globalExclude = ((_a = this.conf.getGlobal().exclude) !== null && _a !== void 0 ? _a : [])\n .map(pattern => new RegExp(pattern, \"i\"));\n for (const f of files) {\n const filename = f.getFilename();\n const isNotAbapgitFile = filename.split(\".\").length <= 2;\n if (isNotAbapgitFile || excludeHelper_1.ExcludeHelper.isExcluded(filename, globalExclude)) {\n continue;\n }\n let found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n if (dependency === false && found && this.isDependency(found)) {\n this.removeDependency(found);\n found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n }\n found.addFile(f);\n }\n return this;\n }\n addFiles(files) {\n this._addFiles(files, false);\n return this;\n }\n addDependencies(files) {\n for (const f of files) {\n this.addDependency(f);\n }\n return this;\n }\n addDependency(file) {\n var _a;\n const type = (_a = file.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return this;\n }\n const name = file.getObjectName().toUpperCase();\n if (this.dependencies[type] === undefined) {\n this.dependencies[type] = {};\n }\n this.dependencies[type][name] = true;\n this._addFiles([file], true);\n return this;\n }\n removeDependency(obj) {\n var _a;\n (_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? true : delete _a[obj.getName()];\n this.removeObject(obj);\n }\n isDependency(obj) {\n var _a;\n return ((_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? void 0 : _a[obj.getName()]) === true;\n }\n isFileDependency(filename) {\n var _a, _b;\n const f = this.getFileByName(filename);\n if (f === undefined) {\n return false;\n }\n const type = (_a = f.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return false;\n }\n const name = f.getObjectName().toUpperCase();\n return ((_b = this.dependencies[type]) === null || _b === void 0 ? void 0 : _b[name]) === true;\n }\n // assumption: the file is already in the registry\n findObjectForFile(file) {\n const filename = file.getFilename();\n for (const obj of this.getObjects()) {\n for (const ofile of obj.getFiles()) {\n if (ofile.getFilename() === filename) {\n return obj;\n }\n }\n }\n return undefined;\n }\n // todo, this will be changed to async sometime\n findIssues(input) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return new rules_runner_1.RulesRunner(this).runRules(this.getObjects(), input);\n }\n // todo, this will be changed to async sometime\n findIssuesObject(iobj) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return new rules_runner_1.RulesRunner(this).runRules([iobj]);\n }\n // todo, this will be changed to async sometime\n parse() {\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n for (const o of this.getObjects()) {\n this.parsePrivate(o);\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run();\n return this;\n }\n async parseAsync(input) {\n var _a, _b;\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n (_a = input === null || input === void 0 ? void 0 : input.progress) === null || _a === void 0 ? void 0 : _a.set(this.getObjectCount(false), \"Lexing and parsing\");\n for (const o of this.getObjects()) {\n await ((_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick(\"Lexing and parsing(\" + this.conf.getVersion() + \") - \" + o.getType() + \" \" + o.getName()));\n this.parsePrivate(o);\n }\n if ((input === null || input === void 0 ? void 0 : input.outputPerformance) === true) {\n ParsingPerformance.output();\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run(input === null || input === void 0 ? void 0 : input.progress);\n return this;\n }\n //////////////////////////////////////////\n // todo, refactor, this is a mess, see where-used, a lot of the code should be in this method instead\n parsePrivate(input) {\n const config = this.getConfig();\n const result = input.parse(config.getVersion(), config.getSyntaxSetttings().globalMacros, this);\n ParsingPerformance.push(input, result);\n }\n isDirty() {\n for (const o of this.getObjects()) {\n const dirty = o.isDirty();\n if (dirty === true) {\n return true;\n }\n }\n return false;\n }\n findOrCreate(name, type) {\n try {\n return this.find(name, type);\n }\n catch (_a) {\n const newName = name.toUpperCase();\n const newType = type ? type : \"UNKNOWN\";\n const add = artifacts_objects_1.ArtifactsObjects.newObject(newName, newType);\n if (this.objects[newName] === undefined) {\n this.objects[newName] = {};\n }\n this.objects[newName][newType] = add;\n if (this.objectsByType[newType] === undefined) {\n this.objectsByType[newType] = {};\n }\n this.objectsByType[newType][newName] = add;\n return add;\n }\n }\n removeObject(remove) {\n if (remove === undefined) {\n return;\n }\n if (this.objects[remove.getName()][remove.getType()] === undefined) {\n throw new Error(\"removeObject: object not found\");\n }\n if (Object.keys(this.objects[remove.getName()]).length === 1) {\n delete this.objects[remove.getName()];\n }\n else {\n delete this.objects[remove.getName()][remove.getType()];\n }\n if (Object.keys(this.objectsByType[remove.getType()]).length === 1) {\n delete this.objectsByType[remove.getType()];\n }\n else {\n delete this.objectsByType[remove.getType()][remove.getName()];\n }\n }\n find(name, type) {\n const searchType = type ? type : \"UNKNOWN\";\n const searchName = name.toUpperCase();\n if (this.objects[searchName] !== undefined\n && this.objects[searchName][searchType]) {\n return this.objects[searchName][searchType];\n }\n throw new Error(\"find: object not found, \" + type + \" \" + name);\n }\n}\nexports.Registry = Registry;\n//# sourceMappingURL=registry.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/registry.js?");
11844
+ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Registry = void 0;\nconst config_1 = __webpack_require__(/*! ./config */ \"./node_modules/@abaplint/core/build/src/config.js\");\nconst artifacts_objects_1 = __webpack_require__(/*! ./artifacts_objects */ \"./node_modules/@abaplint/core/build/src/artifacts_objects.js\");\nconst find_global_definitions_1 = __webpack_require__(/*! ./abap/5_syntax/global_definitions/find_global_definitions */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/global_definitions/find_global_definitions.js\");\nconst excludeHelper_1 = __webpack_require__(/*! ./utils/excludeHelper */ \"./node_modules/@abaplint/core/build/src/utils/excludeHelper.js\");\nconst ddic_references_1 = __webpack_require__(/*! ./ddic_references */ \"./node_modules/@abaplint/core/build/src/ddic_references.js\");\nconst rules_runner_1 = __webpack_require__(/*! ./rules_runner */ \"./node_modules/@abaplint/core/build/src/rules_runner.js\");\n// todo, this should really be an instance in case there are multiple Registry'ies\nclass ParsingPerformance {\n static clear() {\n this.results = [];\n this.lexing = 0;\n this.statements = 0;\n this.structure = 0;\n }\n static push(obj, result) {\n if (result.runtimeExtra) {\n this.lexing += result.runtimeExtra.lexing;\n this.statements += result.runtimeExtra.statements;\n this.structure += result.runtimeExtra.structure;\n }\n if (result.runtime < 100) {\n return;\n }\n if (this.results === undefined) {\n this.results = [];\n }\n let extra = \"\";\n if (result.runtimeExtra) {\n extra = `\\t(lexing: ${result.runtimeExtra.lexing}ms, statements: ${result.runtimeExtra.statements}ms, structure: ${result.runtimeExtra.structure}ms)`;\n }\n this.results.push({\n runtime: result.runtime,\n extra,\n name: obj.getType() + \" \" + obj.getName(),\n });\n }\n static output() {\n const MAX = 10;\n this.results.sort((a, b) => { return b.runtime - a.runtime; });\n for (let i = 0; i < MAX; i++) {\n const row = this.results[i];\n if (row === undefined) {\n break;\n }\n process.stderr.write(`\\t${row.runtime}ms\\t${row.name} ${row.extra}\\n`);\n }\n process.stderr.write(`\\tTotal lexing: ${this.lexing}ms\\n`);\n process.stderr.write(`\\tTotal statements: ${this.statements}ms\\n`);\n process.stderr.write(`\\tTotal structure: ${this.structure}ms\\n`);\n }\n}\n///////////////////////////////////////////////////////////////////////////////////////////////\nclass Registry {\n constructor(conf) {\n this.objects = {};\n this.objectsByType = {};\n this.dependencies = {};\n this.conf = conf ? conf : config_1.Config.getDefault();\n this.references = new ddic_references_1.DDICReferences();\n }\n static abaplintVersion() {\n // magic, see build script \"version.sh\"\n return \"2.97.10\";\n }\n getDDICReferences() {\n return this.references;\n }\n *getObjects() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n yield this.objects[name][type];\n }\n }\n }\n *getObjectsByType(type) {\n for (const name in this.objectsByType[type] || []) {\n yield this.objectsByType[type][name];\n }\n }\n *getFiles() {\n for (const obj of this.getObjects()) {\n for (const file of obj.getFiles()) {\n yield file;\n }\n }\n }\n getFirstObject() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n return this.objects[name][type];\n }\n }\n return undefined;\n }\n getObjectCount(skipDependencies = true) {\n let res = 0;\n for (const o of this.getObjects()) {\n if (skipDependencies === true && this.isDependency(o)) {\n continue;\n }\n res = res + 1;\n }\n return res;\n }\n getFileByName(filename) {\n const upper = filename.toUpperCase();\n for (const o of this.getObjects()) {\n for (const f of o.getFiles()) {\n if (f.getFilename().toUpperCase() === upper) {\n return f;\n }\n }\n }\n return undefined;\n }\n getObject(type, name) {\n if (type === undefined || name === undefined) {\n return undefined;\n }\n const searchName = name.toUpperCase();\n if (this.objects[searchName]) {\n return this.objects[searchName][type];\n }\n return undefined;\n }\n getConfig() {\n return this.conf;\n }\n // assumption: Config is immutable, and can only be changed via this method\n setConfig(conf) {\n for (const obj of this.getObjects()) {\n obj.setDirty();\n }\n this.conf = conf;\n return this;\n }\n inErrorNamespace(name) {\n // todo: performance? cache regexp?\n const reg = new RegExp(this.getConfig().getSyntaxSetttings().errorNamespace, \"i\");\n return reg.test(name);\n }\n addFile(file) {\n return this.addFiles([file]);\n }\n updateFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.updateFile(file);\n return this;\n }\n removeFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.removeFile(file);\n if (obj.getFiles().length === 0) {\n this.references.clear(obj);\n this.removeObject(obj);\n }\n return this;\n }\n _addFiles(files, dependency) {\n var _a;\n const globalExclude = ((_a = this.conf.getGlobal().exclude) !== null && _a !== void 0 ? _a : [])\n .map(pattern => new RegExp(pattern, \"i\"));\n for (const f of files) {\n const filename = f.getFilename();\n const isNotAbapgitFile = filename.split(\".\").length <= 2;\n if (isNotAbapgitFile || excludeHelper_1.ExcludeHelper.isExcluded(filename, globalExclude)) {\n continue;\n }\n let found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n if (dependency === false && found && this.isDependency(found)) {\n this.removeDependency(found);\n found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n }\n found.addFile(f);\n }\n return this;\n }\n addFiles(files) {\n this._addFiles(files, false);\n return this;\n }\n addDependencies(files) {\n for (const f of files) {\n this.addDependency(f);\n }\n return this;\n }\n addDependency(file) {\n var _a;\n const type = (_a = file.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return this;\n }\n const name = file.getObjectName().toUpperCase();\n if (this.dependencies[type] === undefined) {\n this.dependencies[type] = {};\n }\n this.dependencies[type][name] = true;\n this._addFiles([file], true);\n return this;\n }\n removeDependency(obj) {\n var _a;\n (_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? true : delete _a[obj.getName()];\n this.removeObject(obj);\n }\n isDependency(obj) {\n var _a;\n return ((_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? void 0 : _a[obj.getName()]) === true;\n }\n isFileDependency(filename) {\n var _a, _b;\n const f = this.getFileByName(filename);\n if (f === undefined) {\n return false;\n }\n const type = (_a = f.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return false;\n }\n const name = f.getObjectName().toUpperCase();\n return ((_b = this.dependencies[type]) === null || _b === void 0 ? void 0 : _b[name]) === true;\n }\n // assumption: the file is already in the registry\n findObjectForFile(file) {\n const filename = file.getFilename();\n for (const obj of this.getObjects()) {\n for (const ofile of obj.getFiles()) {\n if (ofile.getFilename() === filename) {\n return obj;\n }\n }\n }\n return undefined;\n }\n // todo, this will be changed to async sometime\n findIssues(input) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return new rules_runner_1.RulesRunner(this).runRules(this.getObjects(), input);\n }\n // todo, this will be changed to async sometime\n findIssuesObject(iobj) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return new rules_runner_1.RulesRunner(this).runRules([iobj]);\n }\n // todo, this will be changed to async sometime\n parse() {\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n for (const o of this.getObjects()) {\n this.parsePrivate(o);\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run();\n return this;\n }\n async parseAsync(input) {\n var _a, _b;\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n (_a = input === null || input === void 0 ? void 0 : input.progress) === null || _a === void 0 ? void 0 : _a.set(this.getObjectCount(false), \"Lexing and parsing\");\n for (const o of this.getObjects()) {\n await ((_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick(\"Lexing and parsing(\" + this.conf.getVersion() + \") - \" + o.getType() + \" \" + o.getName()));\n this.parsePrivate(o);\n }\n if ((input === null || input === void 0 ? void 0 : input.outputPerformance) === true) {\n ParsingPerformance.output();\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run(input === null || input === void 0 ? void 0 : input.progress);\n return this;\n }\n //////////////////////////////////////////\n // todo, refactor, this is a mess, see where-used, a lot of the code should be in this method instead\n parsePrivate(input) {\n const config = this.getConfig();\n const result = input.parse(config.getVersion(), config.getSyntaxSetttings().globalMacros, this);\n ParsingPerformance.push(input, result);\n }\n isDirty() {\n for (const o of this.getObjects()) {\n const dirty = o.isDirty();\n if (dirty === true) {\n return true;\n }\n }\n return false;\n }\n findOrCreate(name, type) {\n try {\n return this.find(name, type);\n }\n catch (_a) {\n const newName = name.toUpperCase();\n const newType = type ? type : \"UNKNOWN\";\n const add = artifacts_objects_1.ArtifactsObjects.newObject(newName, newType);\n if (this.objects[newName] === undefined) {\n this.objects[newName] = {};\n }\n this.objects[newName][newType] = add;\n if (this.objectsByType[newType] === undefined) {\n this.objectsByType[newType] = {};\n }\n this.objectsByType[newType][newName] = add;\n return add;\n }\n }\n removeObject(remove) {\n if (remove === undefined) {\n return;\n }\n if (this.objects[remove.getName()][remove.getType()] === undefined) {\n throw new Error(\"removeObject: object not found\");\n }\n if (Object.keys(this.objects[remove.getName()]).length === 1) {\n delete this.objects[remove.getName()];\n }\n else {\n delete this.objects[remove.getName()][remove.getType()];\n }\n if (Object.keys(this.objectsByType[remove.getType()]).length === 1) {\n delete this.objectsByType[remove.getType()];\n }\n else {\n delete this.objectsByType[remove.getType()][remove.getName()];\n }\n }\n find(name, type) {\n const searchType = type ? type : \"UNKNOWN\";\n const searchName = name.toUpperCase();\n if (this.objects[searchName] !== undefined\n && this.objects[searchName][searchType]) {\n return this.objects[searchName][searchType];\n }\n throw new Error(\"find: object not found, \" + type + \" \" + name);\n }\n}\nexports.Registry = Registry;\n//# sourceMappingURL=registry.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/registry.js?");
11845
11845
 
11846
11846
  /***/ }),
11847
11847
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.97.9",
3
+ "version": "2.97.10",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "bin": {
6
6
  "abaplint": "./abaplint"
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "homepage": "https://abaplint.org",
39
39
  "devDependencies": {
40
- "@abaplint/core": "^2.97.9",
40
+ "@abaplint/core": "^2.97.10",
41
41
  "@types/chai": "^4.3.4",
42
42
  "@types/glob": "^7.2.0",
43
43
  "@types/minimist": "^1.2.2",