@abaplint/cli 2.119.44 → 2.119.46

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 +418 -197
  2. package/package.json +2 -2
package/build/cli.js CHANGED
@@ -3124,16 +3124,17 @@ function buildSelectSingleCore(allowInto = false) {
3124
3124
  const fieldList = (0, combi_1.optPrio)(_1.SQLFieldList);
3125
3125
  const client = (0, combi_1.optPrio)(_1.SQLClient);
3126
3126
  const byp = (0, combi_1.optPrio)(_1.SQLBypassingBuffer);
3127
+ const conn = (0, combi_1.optPrio)((0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, _1.DatabaseConnection));
3127
3128
  const whereClause = (0, combi_1.optPrio)(where);
3128
3129
  const groupHaving = (0, combi_1.seq)((0, combi_1.optPrio)(sql_group_by_1.SQLGroupBy), (0, combi_1.optPrio)(_1.SQLHaving));
3129
- const trailingOpts = (0, combi_1.seq)((0, combi_1.optPrio)(_1.DatabaseConnection), (0, combi_1.optPrio)(_1.SQLHints), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(_1.SQLOptions));
3130
+ const trailingOpts = (0, combi_1.seq)(conn, (0, combi_1.optPrio)(_1.SQLHints), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(_1.SQLOptions));
3130
3131
  const intoSingle = (0, combi_1.altPrio)(sql_into_structure_1.SQLIntoStructure, _1.SQLIntoList);
3131
3132
  if (!allowInto) {
3132
3133
  const singleBody = (0, combi_1.seq)(_1.SQLFrom, client, byp, whereClause, groupHaving, trailingOpts);
3133
3134
  return (0, combi_1.seq)(fieldList, singleBody);
3134
3135
  }
3135
- const singleAfterFrom = (0, combi_1.seq)(_1.SQLFrom, client, byp, (0, combi_1.optPrio)(_1.DatabaseConnection), (0, combi_1.altPrio)((0, combi_1.seq)(intoSingle, byp, whereClause, groupHaving, trailingOpts), (0, combi_1.seq)((0, combi_1.optPrio)(sqlFields), whereClause, groupHaving, trailingOpts, (0, combi_1.optPrio)(intoSingle), (0, combi_1.optPrio)(_1.DatabaseConnection))));
3136
- const singleIntoBeforeFrom = (0, combi_1.seq)(intoSingle, _1.SQLFrom, client, byp, (0, combi_1.optPrio)(_1.DatabaseConnection), whereClause, groupHaving, trailingOpts);
3136
+ const singleAfterFrom = (0, combi_1.seq)(_1.SQLFrom, client, byp, conn, (0, combi_1.altPrio)((0, combi_1.seq)(intoSingle, byp, whereClause, groupHaving, trailingOpts), (0, combi_1.seq)((0, combi_1.optPrio)(sqlFields), whereClause, groupHaving, trailingOpts, (0, combi_1.optPrio)(intoSingle), conn)));
3137
+ const singleIntoBeforeFrom = (0, combi_1.seq)(intoSingle, _1.SQLFrom, client, byp, conn, whereClause, groupHaving, trailingOpts);
3137
3138
  return (0, combi_1.seq)(fieldList, byp, (0, combi_1.altPrio)(singleIntoBeforeFrom, singleAfterFrom));
3138
3139
  }
3139
3140
  function buildSelectCore(allowInto = false, allowOrderBy = true) {
@@ -3144,25 +3145,26 @@ function buildSelectCore(allowInto = false, allowOrderBy = true) {
3144
3145
  const fieldList = (0, combi_1.optPrio)(_1.SQLFieldList);
3145
3146
  const client = (0, combi_1.optPrio)(_1.SQLClient);
3146
3147
  const byp = (0, combi_1.optPrio)(_1.SQLBypassingBuffer);
3148
+ const conn = (0, combi_1.optPrio)((0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, _1.DatabaseConnection));
3147
3149
  const fae = (0, combi_1.optPrio)(_1.SQLForAllEntries);
3148
3150
  const whereClause = (0, combi_1.optPrio)(where);
3149
3151
  const groupHaving = (0, combi_1.seq)((0, combi_1.optPrio)(sql_group_by_1.SQLGroupBy), (0, combi_1.optPrio)(_1.SQLHaving));
3150
3152
  const orderUpOff = allowOrderBy
3151
3153
  ? [(0, combi_1.optPrio)((0, combi_1.seq)(_1.SQLOrderBy, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), (0, combi_1.optPrio)(offset)))]
3152
3154
  : [];
3153
- const trailingOpts = (0, combi_1.seq)((0, combi_1.optPrio)(_1.DatabaseConnection), (0, combi_1.optPrio)(_1.SQLHints), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(_1.SQLOptions));
3155
+ const trailingOpts = (0, combi_1.seq)(conn, (0, combi_1.optPrio)(_1.SQLHints), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(_1.SQLOptions));
3154
3156
  const intoSingle = (0, combi_1.altPrio)(sql_into_structure_1.SQLIntoStructure, _1.SQLIntoList);
3155
3157
  const intoForPackSize = _1.SQLIntoTable;
3156
3158
  if (!allowInto) {
3157
3159
  const afterFromNoInto = (0, combi_1.seq)(_1.SQLFrom, client, byp, (0, combi_1.seq)((0, combi_1.optPrio)(sqlFields), fae, whereClause, groupHaving, ...orderUpOff, trailingOpts));
3158
3160
  return (0, combi_1.altPrio)((0, combi_1.seq)("SINGLE", buildSelectSingleCore(false)), (0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), fieldList, byp, afterFromNoInto));
3159
3161
  }
3160
- const fromPackSize = (0, combi_1.seq)((0, combi_1.optPrio)(_1.SQLPackageSize), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(_1.DatabaseConnection), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo));
3162
+ const fromPackSize = (0, combi_1.seq)((0, combi_1.optPrio)(_1.SQLPackageSize), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, conn, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo));
3161
3163
  const trailingInto = (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.altPrio)((0, combi_1.seq)(intoForPackSize, (0, combi_1.optPrio)(_1.SQLPackageSize), byp, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(offset), (0, combi_1.optPrio)(_1.SQLOrderBy)), (0, combi_1.seq)(intoSingle, byp, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(offset)))), (0, combi_1.optPrio)(_1.SQLOptions));
3162
- const afterFromWithInto = (0, combi_1.seq)((0, combi_1.optPrio)(_1.SQLFrom), client, byp, fromPackSize, (0, combi_1.altPrio)((0, combi_1.seq)(intoForPackSize, (0, combi_1.optPrio)(_1.SQLPackageSize), byp, (0, combi_1.optPrio)(_1.DatabaseConnection), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(offset), fae, whereClause, groupHaving, ...orderUpOff, trailingOpts), (0, combi_1.seq)(intoSingle, byp, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, fae, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(offset), whereClause, groupHaving, ...orderUpOff, trailingOpts), (0, combi_1.seq)((0, combi_1.optPrio)(sqlFields), fae, whereClause, groupHaving, ...orderUpOff, trailingOpts, trailingInto)));
3164
+ const afterFromWithInto = (0, combi_1.seq)((0, combi_1.optPrio)(_1.SQLFrom), client, byp, fromPackSize, (0, combi_1.altPrio)((0, combi_1.seq)(intoForPackSize, (0, combi_1.optPrio)(_1.SQLPackageSize), byp, conn, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(offset), fae, whereClause, groupHaving, ...orderUpOff, trailingOpts), (0, combi_1.seq)(intoSingle, byp, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, fae, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(offset), whereClause, groupHaving, ...orderUpOff, trailingOpts), (0, combi_1.seq)((0, combi_1.optPrio)(sqlFields), fae, whereClause, groupHaving, ...orderUpOff, trailingOpts, trailingInto)));
3163
3165
  const selectTableIntoThenFrom = (0, combi_1.seq)(intoForPackSize, (0, combi_1.optPrio)(_1.SQLPackageSize));
3164
3166
  const selectOtherIntoThenFrom = intoSingle;
3165
- const nonSingleBody = (0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), fieldList, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)((0, combi_1.altPrio)(selectTableIntoThenFrom, selectOtherIntoThenFrom)), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(_1.DatabaseConnection), afterFromWithInto);
3167
+ const nonSingleBody = (0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), fieldList, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)((0, combi_1.altPrio)(selectTableIntoThenFrom, selectOtherIntoThenFrom)), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, conn, afterFromWithInto);
3166
3168
  return (0, combi_1.altPrio)((0, combi_1.seq)("SINGLE", buildSelectSingleCore(true)), nonSingleBody);
3167
3169
  }
3168
3170
  //# sourceMappingURL=_select_core.js.map
@@ -3320,9 +3322,15 @@ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src
3320
3322
  class AssignSource extends combi_1.Expression {
3321
3323
  getRunnable() {
3322
3324
  const component = (0, combi_1.seq)("COMPONENT", (0, combi_1.alt)(simple_source3_1.SimpleSource3, (0, combi_1.ver)(version_1.Release.v740sp02, source_1.Source, { also: combi_1.AlsoIn.OpenABAP })), "OF STRUCTURE", source_1.Source);
3323
- const tableField = (0, combi_1.seq)("TABLE FIELD", (0, combi_1.alt)(source_1.Source, dynamic_1.Dynamic));
3324
- const arrow = (0, combi_1.alt)((0, combi_1.tok)(tokens_1.InstanceArrow), (0, combi_1.tok)(tokens_1.StaticArrow));
3325
- const source = (0, combi_1.alt)((0, combi_1.seq)(source_1.Source, (0, combi_1.opt)((0, combi_1.seq)(arrow, dynamic_1.Dynamic))), component, tableField, (0, combi_1.seq)(dynamic_1.Dynamic, (0, combi_1.opt)((0, combi_1.seq)(arrow, (0, combi_1.alt)(field_1.Field, dynamic_1.Dynamic)))));
3325
+ // TABLE FIELD form: blocked in KeyUser
3326
+ const tableField = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("TABLE FIELD", (0, combi_1.alt)(source_1.Source, dynamic_1.Dynamic)));
3327
+ // class=>(dyn_attr) via static arrow is blocked in KeyUser
3328
+ // ref->(dyn_comp) via instance arrow is allowed — leave unguarded
3329
+ const arrowDynamic = (0, combi_1.alt)((0, combi_1.tok)(tokens_1.InstanceArrow), (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.tok)(tokens_1.StaticArrow)));
3330
+ const anyArrow = (0, combi_1.alt)((0, combi_1.tok)(tokens_1.InstanceArrow), (0, combi_1.tok)(tokens_1.StaticArrow));
3331
+ const source = (0, combi_1.alt)((0, combi_1.seq)(source_1.Source, (0, combi_1.opt)((0, combi_1.seq)(arrowDynamic, dynamic_1.Dynamic))), component, tableField,
3332
+ // standalone dynamic symbol (dyn_sym) blocked in KeyUser
3333
+ (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)(dynamic_1.Dynamic, (0, combi_1.opt)((0, combi_1.seq)(anyArrow, (0, combi_1.alt)(field_1.Field, dynamic_1.Dynamic))))));
3326
3334
  return source;
3327
3335
  }
3328
3336
  }
@@ -4223,8 +4231,16 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
4223
4231
  exports.DatabaseTable = void 0;
4224
4232
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
4225
4233
  const dynamic_1 = __webpack_require__(/*! ./dynamic */ "../core/build/src/abap/2_statements/expressions/dynamic.js");
4234
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
4226
4235
  class DatabaseTable extends combi_1.Expression {
4236
+ constructor(noDynamic = false) {
4237
+ super();
4238
+ this.noDynamic = noDynamic;
4239
+ }
4227
4240
  getRunnable() {
4241
+ if (this.noDynamic) {
4242
+ return (0, combi_1.altPrio)((0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, dynamic_1.Dynamic), (0, combi_1.regex)(/^\*?(\/\w+\/)?\w+$/));
4243
+ }
4228
4244
  return (0, combi_1.altPrio)(dynamic_1.Dynamic, (0, combi_1.regex)(/^\*?(\/\w+\/)?\w+$/));
4229
4245
  }
4230
4246
  }
@@ -7040,7 +7056,7 @@ const _select_core_1 = __webpack_require__(/*! ./_select_core */ "../core/build/
7040
7056
  class Select extends combi_1.Expression {
7041
7057
  getRunnable() {
7042
7058
  const into = (0, combi_1.altPrio)(_1.SQLIntoTable, sql_into_structure_1.SQLIntoStructure, _1.SQLIntoList);
7043
- const standalone = (0, combi_1.altPrio)((0, combi_1.seq)("SINGLE", (0, combi_1.optPrio)("FOR UPDATE"), (0, _select_core_1.buildSelectSingleCore)(true)), (0, _select_core_1.buildSelectCore)(true));
7059
+ const standalone = (0, combi_1.altPrio)((0, combi_1.seq)("SINGLE", (0, combi_1.optPrio)((0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, "FOR UPDATE")), (0, _select_core_1.buildSelectSingleCore)(true)), (0, _select_core_1.buildSelectCore)(true));
7044
7060
  const unionTail = (0, combi_1.ver)(version_1.Release.v750, (0, combi_1.plusPrio)(_1.SQLSetOp), { also: combi_1.AlsoIn.OpenABAP });
7045
7061
  const chained = (0, combi_1.seq)((0, _select_core_1.buildSelectCore)(false, false), unionTail, (0, combi_1.optPrio)(_1.SQLOrderBy), (0, combi_1.optPrio)(into));
7046
7062
  return (0, combi_1.seq)("SELECT", (0, combi_1.altPrio)(chained, standalone));
@@ -7075,8 +7091,9 @@ class SelectCTE extends combi_1.Expression {
7075
7091
  const bypass = "BYPASSING BUFFER";
7076
7092
  const privileged = (0, combi_1.ver)(version_1.Release.v758, _1.SQLPrivilegedAccess);
7077
7093
  const offset = (0, combi_1.ver)(version_1.Release.v751, (0, combi_1.seq)("OFFSET", sql_source_1.SQLSource));
7094
+ const conn = (0, combi_1.optPrio)((0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, _1.DatabaseConnection));
7078
7095
  const groupHaving = (0, combi_1.seq)((0, combi_1.optPrio)(_1.SQLGroupBy), (0, combi_1.optPrio)(_1.SQLHaving));
7079
- const tail = (0, combi_1.seq)(groupHaving, (0, combi_1.optPrio)((0, combi_1.seq)(_1.SQLOrderBy, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), (0, combi_1.optPrio)(offset))), (0, combi_1.optPrio)(_1.SQLHints), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(_1.SQLOptions), (0, combi_1.optPrio)(_1.DatabaseConnection));
7096
+ const tail = (0, combi_1.seq)(groupHaving, (0, combi_1.optPrio)((0, combi_1.seq)(_1.SQLOrderBy, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), (0, combi_1.optPrio)(offset))), (0, combi_1.optPrio)(_1.SQLHints), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(_1.SQLOptions), conn);
7080
7097
  const sqlStyle = (0, combi_1.seq)(_1.SQLFrom, (0, combi_1.optPrio)(_1.SQLClient), (0, combi_1.optPrio)(bypass), (0, combi_1.ver)(version_1.Release.v750, sql_fields_loop_1.SQLFieldsLoop, { also: combi_1.AlsoIn.OpenABAP }), (0, combi_1.optPrio)(_1.SQLForAllEntries), (0, combi_1.optPrio)(where), tail);
7081
7098
  const abapStyle = (0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), sql_field_list_loop_greedy_1.SQLFieldListLoopGreedy, _1.SQLFrom, (0, combi_1.optPrio)(_1.SQLClient), (0, combi_1.optPrio)(bypass), (0, combi_1.optPrio)(_1.SQLForAllEntries), (0, combi_1.optPrio)(where), tail);
7082
7099
  const union = (0, combi_1.seq)("UNION", (0, combi_1.optPrio)((0, combi_1.altPrio)("DISTINCT", "ALL")));
@@ -7713,7 +7730,7 @@ const dynamic_1 = __webpack_require__(/*! ./dynamic */ "../core/build/src/abap/2
7713
7730
  class SQLClient extends combi_1.Expression {
7714
7731
  getRunnable() {
7715
7732
  const clientList = (0, combi_1.ver)(version_1.Release.v740sp05, (0, combi_1.alt)(dynamic_1.Dynamic, (0, combi_1.seq)(sql_alias_field_1.SQLAliasField, (0, combi_1.starPrio)((0, combi_1.seq)(",", sql_alias_field_1.SQLAliasField)))));
7716
- const client = (0, combi_1.alt)((0, combi_1.verNotLang)(version_1.LanguageVersion.Cloud, (0, combi_1.seq)("CLIENT SPECIFIED", (0, combi_1.optPrio)(clientList))), (0, combi_1.seq)("USING", (0, combi_1.alt)((0, combi_1.ver)(version_1.Release.v740sp05, (0, combi_1.seq)("CLIENT", sql_source_simple_1.SQLSourceSimple)), (0, combi_1.ver)(version_1.Release.v754, (0, combi_1.seq)("CLIENTS IN", (0, combi_1.alt)(sql_source_simple_1.SQLSourceSimple, "T000"))), (0, combi_1.ver)(version_1.Release.v754, "ALL CLIENTS"))));
7733
+ const client = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.alt)((0, combi_1.verNotLang)(version_1.LanguageVersion.Cloud, (0, combi_1.seq)("CLIENT SPECIFIED", (0, combi_1.optPrio)(clientList))), (0, combi_1.seq)("USING", (0, combi_1.alt)((0, combi_1.ver)(version_1.Release.v740sp05, (0, combi_1.seq)("CLIENT", sql_source_simple_1.SQLSourceSimple)), (0, combi_1.ver)(version_1.Release.v754, (0, combi_1.seq)("CLIENTS IN", (0, combi_1.alt)(sql_source_simple_1.SQLSourceSimple, "T000"))), (0, combi_1.ver)(version_1.Release.v754, "ALL CLIENTS")))));
7717
7734
  return client;
7718
7735
  }
7719
7736
  }
@@ -8123,20 +8140,21 @@ exports.SQLFrom = void 0;
8123
8140
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8124
8141
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
8125
8142
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
8143
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
8126
8144
  class SQLFrom extends combi_1.Expression {
8127
8145
  // todo: rewrite/refactor this method
8128
8146
  getRunnable() {
8129
8147
  const joins = (0, combi_1.starPrio)((0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), _1.SQLJoin));
8130
8148
  // No opening parens
8131
8149
  const from0 = (0, combi_1.seq)("FROM", _1.SQLFromSource, joins);
8132
- // 1 to 7 opening parens, with up to that many closing parens at the end
8133
- const from1 = (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)));
8134
- const from2 = (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)));
8135
- const from3 = (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)));
8136
- const from4 = (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)));
8137
- const from5 = (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)));
8138
- const from6 = (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)));
8139
- const from7 = (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)));
8150
+ // 1 to 7 opening parens, with up to that many closing parens at the end (dynamic FROM, not allowed in KeyUser)
8151
+ const from1 = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW))));
8152
+ const from2 = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW))));
8153
+ const from3 = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW))));
8154
+ const from4 = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW))));
8155
+ const from5 = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW))));
8156
+ const from6 = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW))));
8157
+ const from7 = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FROM", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFromSource, joins, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW))));
8140
8158
  const source = (0, combi_1.altPrio)(from7, from6, from5, from4, from3, from2, from1, from0);
8141
8159
  return source;
8142
8160
  }
@@ -8171,7 +8189,8 @@ class SQLFromSource extends combi_1.Expression {
8171
8189
  const tab = (0, combi_1.ver)(version_1.Release.v752, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.FieldChain), { also: combi_1.AlsoIn.OpenABAP });
8172
8190
  const aas = (0, combi_1.seq)("AS", _1.SQLAsName);
8173
8191
  const privileged = (0, combi_1.ver)(version_1.Release.v752, (0, combi_1.seq)("WITH", _1.SQLPrivilegedAccess));
8174
- return (0, combi_1.seq)((0, combi_1.altPrio)(new sql_hierarchy_aggregate_1.SQLHierarchyAggregate(), new sql_hierarchy_accessor_1.SQLHierarchyAccessor(), new sql_hierarchy_source_1.SQLHierarchySource(), (0, combi_1.seq)(with_name_1.WithName, (0, combi_1.optPrio)(new sql_path_for_entity_1.SQLPathForEntity())), (0, combi_1.seq)(_1.DatabaseTable, (0, combi_1.optPrio)(_1.SQLCDSParameters), (0, combi_1.optPrio)(new sql_path_for_entity_1.SQLPathForEntity())), tab), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(aas));
8192
+ const pathForEntity = (0, combi_1.optPrio)((0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, new sql_path_for_entity_1.SQLPathForEntity()));
8193
+ return (0, combi_1.seq)((0, combi_1.altPrio)(new sql_hierarchy_aggregate_1.SQLHierarchyAggregate(), new sql_hierarchy_accessor_1.SQLHierarchyAccessor(), new sql_hierarchy_source_1.SQLHierarchySource(), (0, combi_1.seq)(with_name_1.WithName, pathForEntity), (0, combi_1.seq)(new _1.DatabaseTable(true), (0, combi_1.optPrio)(_1.SQLCDSParameters), pathForEntity), tab), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(aas));
8175
8194
  }
8176
8195
  }
8177
8196
  exports.SQLFromSource = SQLFromSource;
@@ -10930,6 +10949,7 @@ exports.NativeSQL = NativeSQL;
10930
10949
 
10931
10950
  Object.defineProperty(exports, "__esModule", ({ value: true }));
10932
10951
  exports.Add = void 0;
10952
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
10933
10953
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
10934
10954
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
10935
10955
  class Add {
@@ -10939,7 +10959,7 @@ class Add {
10939
10959
  const giving = (0, combi_1.seq)("GIVING", expressions_1.Source);
10940
10960
  const then = (0, combi_1.seq)("THEN", expressions_1.Source, "UNTIL", expressions_1.Source, (0, combi_1.opt)((0, combi_1.per)(giving, accordingTo)), (0, combi_1.opt)(to));
10941
10961
  const ret = (0, combi_1.seq)("ADD", expressions_1.Source, (0, combi_1.altPrio)(to, then));
10942
- return ret;
10962
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
10943
10963
  }
10944
10964
  }
10945
10965
  exports.Add = Add;
@@ -11035,12 +11055,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
11035
11055
  exports.Assert = void 0;
11036
11056
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
11037
11057
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
11058
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
11038
11059
  class Assert {
11039
11060
  getMatcher() {
11040
11061
  const fields = (0, combi_1.seq)("FIELDS", (0, combi_1.plus)(expressions_1.Source));
11041
11062
  const subkey = (0, combi_1.seq)("SUBKEY", expressions_1.Source);
11042
11063
  const id = (0, combi_1.seq)("ID", expressions_1.NamespaceSimpleName);
11043
- return (0, combi_1.seq)("ASSERT", (0, combi_1.optPrio)(id), (0, combi_1.optPrio)(subkey), (0, combi_1.opt)(fields), (0, combi_1.optPrio)("CONDITION"), expressions_1.Cond);
11064
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("ASSERT", (0, combi_1.optPrio)(id), (0, combi_1.optPrio)(subkey), (0, combi_1.opt)(fields), (0, combi_1.optPrio)("CONDITION"), expressions_1.Cond));
11044
11065
  }
11045
11066
  }
11046
11067
  exports.Assert = Assert;
@@ -11063,14 +11084,19 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/s
11063
11084
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
11064
11085
  class Assign {
11065
11086
  getMatcher() {
11066
- const type = (0, combi_1.seq)("TYPE", (0, combi_1.altPrio)(expressions_1.Dynamic, expressions_1.TypeName));
11087
+ const dynamicType = (0, combi_1.altPrio)((0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, expressions_1.Dynamic), expressions_1.TypeName);
11088
+ const type = (0, combi_1.seq)("TYPE", dynamicType);
11067
11089
  const like = (0, combi_1.seq)("LIKE", (0, combi_1.altPrio)(expressions_1.Dynamic, expressions_1.Source));
11068
11090
  const handle = (0, combi_1.seq)("TYPE HANDLE", expressions_1.Source);
11069
11091
  const range = (0, combi_1.seq)("RANGE", expressions_1.Source);
11070
11092
  const decimals = (0, combi_1.seq)("DECIMALS", expressions_1.Source);
11071
- const casting = (0, combi_1.seq)("CASTING", (0, combi_1.opt)((0, combi_1.alt)(like, handle, (0, combi_1.per)(type, decimals))));
11093
+ const castingType = (0, combi_1.seq)("CASTING", (0, combi_1.opt)((0, combi_1.alt)(like, handle, (0, combi_1.per)(type, decimals))));
11094
+ // CASTING TYPE (dyntype) blocked in KeyUser
11095
+ const casting = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, castingType);
11072
11096
  const obsoleteType = (0, combi_1.seq)("TYPE", expressions_1.Source, (0, combi_1.optPrio)(decimals));
11073
- const ret = (0, combi_1.seq)("ASSIGN", (0, combi_1.opt)((0, combi_1.seq)(expressions_1.Target, "INCREMENT")), expressions_1.AssignSource, "TO", expressions_1.FSTarget, (0, combi_1.opt)((0, combi_1.altPrio)(casting, obsoleteType, decimals)), (0, combi_1.opt)(range), (0, combi_1.opt)((0, combi_1.ver)(version_1.Release.v757, "ELSE UNASSIGN")));
11097
+ const ret = (0, combi_1.seq)("ASSIGN",
11098
+ // INCREMENT addition blocked in KeyUser
11099
+ (0, combi_1.opt)((0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)(expressions_1.Target, "INCREMENT"))), expressions_1.AssignSource, "TO", expressions_1.FSTarget, (0, combi_1.opt)((0, combi_1.altPrio)(casting, obsoleteType, decimals)), (0, combi_1.opt)(range), (0, combi_1.opt)((0, combi_1.ver)(version_1.Release.v757, "ELSE UNASSIGN")));
11074
11100
  return ret;
11075
11101
  }
11076
11102
  }
@@ -11116,6 +11142,7 @@ exports.AssignLocalCopy = AssignLocalCopy;
11116
11142
 
11117
11143
  Object.defineProperty(exports, "__esModule", ({ value: true }));
11118
11144
  exports.At = void 0;
11145
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
11119
11146
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
11120
11147
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
11121
11148
  class At {
@@ -11125,7 +11152,7 @@ class At {
11125
11152
  const atEnd = (0, combi_1.seq)("END OF", field);
11126
11153
  const group = (0, combi_1.regex)(/^[%\w]+$/);
11127
11154
  const ret = (0, combi_1.seq)("AT", (0, combi_1.altPrio)(atNew, atEnd, group));
11128
- return ret;
11155
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
11129
11156
  }
11130
11157
  }
11131
11158
  exports.At = At;
@@ -11285,12 +11312,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
11285
11312
  exports.AuthorityCheck = void 0;
11286
11313
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
11287
11314
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
11315
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
11288
11316
  class AuthorityCheck {
11289
11317
  getMatcher() {
11290
11318
  const field = (0, combi_1.seq)("FIELD", expressions_1.Source);
11291
11319
  const id = (0, combi_1.seq)("ID", expressions_1.Source, (0, combi_1.alt)(field, "DUMMY"));
11292
11320
  const ret = (0, combi_1.seq)("AUTHORITY-CHECK OBJECT", expressions_1.Source, (0, combi_1.opt)((0, combi_1.seq)("FOR USER", expressions_1.Source)), (0, combi_1.plus)(id));
11293
- return ret;
11321
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
11294
11322
  }
11295
11323
  }
11296
11324
  exports.AuthorityCheck = AuthorityCheck;
@@ -11383,10 +11411,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
11383
11411
  exports.Call = void 0;
11384
11412
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
11385
11413
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
11414
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
11386
11415
  // method call
11387
11416
  class Call {
11388
11417
  getMatcher() {
11389
- const call = (0, combi_1.seq)("CALL METHOD", expressions_1.MethodSource, expressions_1.MethodCallBody);
11418
+ const call = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("CALL METHOD", expressions_1.MethodSource, expressions_1.MethodCallBody));
11390
11419
  return (0, combi_1.altPrio)(call, expressions_1.MethodCallChain);
11391
11420
  }
11392
11421
  }
@@ -11502,7 +11531,7 @@ class CallFunction {
11502
11531
  const ex = (0, combi_1.seq)("EXCEPTION-TABLE", expressions_1.Source);
11503
11532
  const dynamic = (0, combi_1.alt)((0, combi_1.seq)("PARAMETER-TABLE", expressions_1.Source, (0, combi_1.opt)(ex)), ex);
11504
11533
  const call = (0, combi_1.seq)("CALL", (0, combi_1.altPrio)("FUNCTION", (0, combi_1.verNotLang)(version_1.LanguageVersion.Cloud, "CUSTOMER-FUNCTION")), expressions_1.FunctionName, (0, combi_1.opt)(options), (0, combi_1.alt)(expressions_1.FunctionParameters, dynamic));
11505
- return call;
11534
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, call);
11506
11535
  }
11507
11536
  }
11508
11537
  exports.CallFunction = CallFunction;
@@ -11678,6 +11707,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
11678
11707
  exports.CallTransformation = void 0;
11679
11708
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
11680
11709
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
11710
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
11681
11711
  class CallTransformation {
11682
11712
  getMatcher() {
11683
11713
  const options = (0, combi_1.seq)("OPTIONS", expressions_1.CallTransformationOptions);
@@ -11688,7 +11718,7 @@ class CallTransformation {
11688
11718
  const result2 = (0, combi_1.seq)("XML", expressions_1.Target);
11689
11719
  const result = (0, combi_1.seq)("RESULT", (0, combi_1.alt)(expressions_1.CallTransformationParameters, result2));
11690
11720
  const call = (0, combi_1.seq)("CALL TRANSFORMATION", (0, combi_1.alt)(expressions_1.NamespaceSimpleName, expressions_1.Dynamic), (0, combi_1.per)(options, parameters, objects, source, result));
11691
- return call;
11721
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, call);
11692
11722
  }
11693
11723
  }
11694
11724
  exports.CallTransformation = CallTransformation;
@@ -11937,9 +11967,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
11937
11967
  exports.ClassDeferred = void 0;
11938
11968
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
11939
11969
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
11970
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
11940
11971
  class ClassDeferred {
11941
11972
  getMatcher() {
11942
- return (0, combi_1.seq)("CLASS", expressions_1.ClassName, "DEFINITION DEFERRED", (0, combi_1.optPrio)("PUBLIC"));
11973
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("CLASS", expressions_1.ClassName, "DEFINITION DEFERRED", (0, combi_1.optPrio)("PUBLIC")));
11943
11974
  }
11944
11975
  }
11945
11976
  exports.ClassDeferred = ClassDeferred;
@@ -11987,11 +12018,12 @@ exports.ClassDefinition = ClassDefinition;
11987
12018
 
11988
12019
  Object.defineProperty(exports, "__esModule", ({ value: true }));
11989
12020
  exports.ClassDefinitionLoad = void 0;
12021
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
11990
12022
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
11991
12023
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
11992
12024
  class ClassDefinitionLoad {
11993
12025
  getMatcher() {
11994
- return (0, combi_1.seq)("CLASS", expressions_1.ClassName, "DEFINITION LOAD");
12026
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("CLASS", expressions_1.ClassName, "DEFINITION LOAD"));
11995
12027
  }
11996
12028
  }
11997
12029
  exports.ClassDefinitionLoad = ClassDefinitionLoad;
@@ -12174,10 +12206,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
12174
12206
  exports.Commit = void 0;
12175
12207
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
12176
12208
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
12209
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
12177
12210
  class Commit {
12178
12211
  getMatcher() {
12179
12212
  const work = (0, combi_1.seq)("WORK", (0, combi_1.opt)("AND WAIT"));
12180
- return (0, combi_1.seq)("COMMIT", (0, combi_1.alt)(work, expressions_1.DatabaseConnection));
12213
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("COMMIT", (0, combi_1.alt)(work, expressions_1.DatabaseConnection)));
12181
12214
  }
12182
12215
  }
12183
12216
  exports.Commit = Commit;
@@ -12204,7 +12237,7 @@ class CommitEntities {
12204
12237
  const reported = (0, combi_1.seq)("REPORTED", expressions_1.Target);
12205
12238
  const responses = (0, combi_1.seq)("RESPONSES", failed, reported);
12206
12239
  const s = (0, combi_1.seq)("COMMIT ENTITIES", (0, combi_1.optPrio)("IN SIMULATION MODE"), (0, combi_1.opt)(responses), (0, combi_1.opt)((0, combi_1.seq)("RESPONSE OF", expressions_1.NamespaceSimpleName, (0, combi_1.per)(failed, reported))));
12207
- return (0, combi_1.ver)(version_1.Release.v754, s, { also: combi_1.AlsoIn.OpenABAP });
12240
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v754, s, { also: combi_1.AlsoIn.OpenABAP }));
12208
12241
  }
12209
12242
  }
12210
12243
  exports.CommitEntities = CommitEntities;
@@ -12550,7 +12583,7 @@ class CreateData {
12550
12583
  const key = (0, combi_1.seq)("WITH", (0, combi_1.alt)(def, kdef));
12551
12584
  const specified = (0, combi_1.seq)((0, combi_1.alt)(type, like), (0, combi_1.opt)(key), (0, combi_1.opt)(initial), (0, combi_1.opt)(length), (0, combi_1.opt)(decimals));
12552
12585
  const ret = (0, combi_1.seq)("CREATE DATA", expressions_1.Target, (0, combi_1.opt)((0, combi_1.alt)(typeHandle, (0, combi_1.seq)((0, combi_1.opt)(areaHandle), specified))));
12553
- return ret;
12586
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
12554
12587
  }
12555
12588
  }
12556
12589
  exports.CreateData = CreateData;
@@ -12580,7 +12613,7 @@ class CreateObject {
12580
12613
  const area = (0, combi_1.seq)("AREA HANDLE", expressions_1.Source);
12581
12614
  const type = (0, combi_1.seq)("TYPE", (0, combi_1.altPrio)(expressions_1.ClassName, expressions_1.Dynamic));
12582
12615
  const ret = (0, combi_1.seq)("CREATE OBJECT", expressions_1.Target, (0, combi_1.optPrio)((0, combi_1.per)(type, (0, combi_1.verNotLang)(version_1.LanguageVersion.Cloud, area))), (0, combi_1.optPrio)((0, combi_1.altPrio)(exporting, ptable)), (0, combi_1.optPrio)((0, combi_1.altPrio)(exceptions, etable)));
12583
- return ret;
12616
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
12584
12617
  }
12585
12618
  }
12586
12619
  exports.CreateObject = CreateObject;
@@ -12746,6 +12779,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
12746
12779
  exports.DeleteDatabase = void 0;
12747
12780
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
12748
12781
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
12782
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
12749
12783
  const sql_client_1 = __webpack_require__(/*! ../expressions/sql_client */ "../core/build/src/abap/2_statements/expressions/sql_client.js");
12750
12784
  class DeleteDatabase {
12751
12785
  getMatcher() {
@@ -12754,7 +12788,7 @@ class DeleteDatabase {
12754
12788
  const fromSomething = (0, combi_1.seq)("FROM", (0, combi_1.opt)("TABLE"), expressions_1.SQLSourceSimple);
12755
12789
  const table = (0, combi_1.seq)(expressions_1.DatabaseTable, (0, combi_1.optPrio)(sql_client_1.SQLClient), (0, combi_1.optPrio)(expressions_1.DatabaseConnection), (0, combi_1.optPrio)(fromSomething));
12756
12790
  const ret = (0, combi_1.seq)("DELETE", (0, combi_1.altPrio)(from, table));
12757
- return ret;
12791
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
12758
12792
  }
12759
12793
  }
12760
12794
  exports.DeleteDatabase = DeleteDatabase;
@@ -12822,6 +12856,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
12822
12856
  exports.DeleteInternal = void 0;
12823
12857
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
12824
12858
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
12859
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
12825
12860
  class DeleteInternal {
12826
12861
  getMatcher() {
12827
12862
  // todo, is READ and DELETE similar? something can be reused?
@@ -12830,7 +12865,8 @@ class DeleteInternal {
12830
12865
  const using = (0, combi_1.seq)("USING KEY", keyName);
12831
12866
  const from = (0, combi_1.seq)("FROM", expressions_1.Source);
12832
12867
  const fromTo = (0, combi_1.seq)((0, combi_1.optPrio)(from), (0, combi_1.optPrio)((0, combi_1.seq)("TO", expressions_1.Source)));
12833
- const where = (0, combi_1.seq)("WHERE", (0, combi_1.alt)(expressions_1.ComponentCond, expressions_1.Dynamic));
12868
+ // WHERE (dynamic) blocked in KeyUser
12869
+ const where = (0, combi_1.seq)("WHERE", (0, combi_1.alt)(expressions_1.ComponentCond, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, expressions_1.Dynamic)));
12834
12870
  const key = (0, combi_1.seq)("WITH TABLE KEY", (0, combi_1.opt)((0, combi_1.seq)(keyName, "COMPONENTS")), (0, combi_1.plus)(expressions_1.ComponentCompare));
12835
12871
  const table = (0, combi_1.seq)("TABLE", expressions_1.Target, (0, combi_1.alt)((0, combi_1.per)(index, using), (0, combi_1.seq)((0, combi_1.optPrio)(from), (0, combi_1.optPrio)(using)), key));
12836
12872
  const other = (0, combi_1.seq)(expressions_1.Target, (0, combi_1.alt)((0, combi_1.per)(index, using), fromTo, key), (0, combi_1.opt)(where));
@@ -13022,12 +13058,13 @@ exports.Detail = Detail;
13022
13058
 
13023
13059
  Object.defineProperty(exports, "__esModule", ({ value: true }));
13024
13060
  exports.Divide = void 0;
13061
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
13025
13062
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
13026
13063
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
13027
13064
  class Divide {
13028
13065
  getMatcher() {
13029
13066
  const ret = (0, combi_1.seq)("DIVIDE", expressions_1.Target, "BY", expressions_1.Source);
13030
- return ret;
13067
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
13031
13068
  }
13032
13069
  }
13033
13070
  exports.Divide = Divide;
@@ -13473,10 +13510,10 @@ exports.EndExec = EndExec;
13473
13510
  Object.defineProperty(exports, "__esModule", ({ value: true }));
13474
13511
  exports.EndForm = void 0;
13475
13512
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
13513
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
13476
13514
  class EndForm {
13477
13515
  getMatcher() {
13478
- const ret = (0, combi_1.str)("ENDFORM");
13479
- return ret;
13516
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.str)("ENDFORM"));
13480
13517
  }
13481
13518
  }
13482
13519
  exports.EndForm = EndForm;
@@ -13495,9 +13532,10 @@ exports.EndForm = EndForm;
13495
13532
  Object.defineProperty(exports, "__esModule", ({ value: true }));
13496
13533
  exports.EndFunction = void 0;
13497
13534
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
13535
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
13498
13536
  class EndFunction {
13499
13537
  getMatcher() {
13500
- return (0, combi_1.str)("ENDFUNCTION");
13538
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.str)("ENDFUNCTION"));
13501
13539
  }
13502
13540
  }
13503
13541
  exports.EndFunction = EndFunction;
@@ -13734,7 +13772,7 @@ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_st
13734
13772
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
13735
13773
  class EndWith {
13736
13774
  getMatcher() {
13737
- return (0, combi_1.ver)(version_1.Release.v751, "ENDWITH");
13775
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v751, "ENDWITH"));
13738
13776
  }
13739
13777
  }
13740
13778
  exports.EndWith = EndWith;
@@ -13897,6 +13935,7 @@ exports.Export = void 0;
13897
13935
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
13898
13936
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
13899
13937
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
13938
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
13900
13939
  // todo, cloud, split?
13901
13940
  class Export {
13902
13941
  getMatcher() {
@@ -13906,10 +13945,10 @@ class Export {
13906
13945
  const using = (0, combi_1.seq)("USING", expressions_1.Source);
13907
13946
  const cluster = (0, combi_1.seq)(expressions_1.NamespaceSimpleName, (0, combi_1.tok)(tokens_1.ParenLeft), (0, combi_1.regex)(/^[\w$%\^~]{2}$/), (0, combi_1.tok)(tokens_1.ParenRightW));
13908
13947
  const buffer = (0, combi_1.seq)("DATA BUFFER", expressions_1.Target);
13909
- const memory = (0, combi_1.seq)("MEMORY", (0, combi_1.opt)((0, combi_1.seq)("ID", expressions_1.Source)));
13948
+ const memory = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("MEMORY", (0, combi_1.opt)((0, combi_1.seq)("ID", expressions_1.Source))));
13910
13949
  const table = (0, combi_1.seq)("INTERNAL TABLE", expressions_1.Target);
13911
- const shared = (0, combi_1.seq)((0, combi_1.alt)("SHARED MEMORY", "SHARED BUFFER"), cluster, (0, combi_1.per)(from, client, id));
13912
- const database = (0, combi_1.seq)("DATABASE", cluster, (0, combi_1.per)(from, client, id, using));
13950
+ const shared = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)((0, combi_1.alt)("SHARED MEMORY", "SHARED BUFFER"), cluster, (0, combi_1.per)(from, client, id)));
13951
+ const database = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("DATABASE", cluster, (0, combi_1.per)(from, client, id, using)));
13913
13952
  const target = (0, combi_1.alt)(buffer, memory, database, table, shared);
13914
13953
  const left = (0, combi_1.alt)(expressions_1.FieldSub, expressions_1.FieldSymbol);
13915
13954
  const source = (0, combi_1.alt)((0, combi_1.plus)((0, combi_1.altPrio)((0, combi_1.seq)(left, from), left)), expressions_1.Dynamic, expressions_1.Constant);
@@ -14141,11 +14180,12 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
14141
14180
  exports.Form = void 0;
14142
14181
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
14143
14182
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
14183
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
14144
14184
  class Form {
14145
14185
  getMatcher() {
14146
14186
  const parameters = (0, combi_1.seq)((0, combi_1.opt)(expressions_1.FormTables), (0, combi_1.opt)(expressions_1.FormUsing), (0, combi_1.opt)(expressions_1.FormChanging), (0, combi_1.opt)(expressions_1.FormRaising));
14147
14187
  const ret = (0, combi_1.seq)("FORM", expressions_1.FormName, (0, combi_1.alt)("IMPLEMENTATION", parameters));
14148
- return ret;
14188
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
14149
14189
  }
14150
14190
  }
14151
14191
  exports.Form = Form;
@@ -14215,10 +14255,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
14215
14255
  exports.Free = void 0;
14216
14256
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
14217
14257
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
14258
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
14218
14259
  class Free {
14219
14260
  getMatcher() {
14220
14261
  const ret = (0, combi_1.seq)("FREE", expressions_1.Target);
14221
- return ret;
14262
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
14222
14263
  }
14223
14264
  }
14224
14265
  exports.Free = Free;
@@ -14286,9 +14327,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
14286
14327
  exports.FunctionModule = void 0;
14287
14328
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
14288
14329
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
14330
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
14289
14331
  class FunctionModule {
14290
14332
  getMatcher() {
14291
- return (0, combi_1.seq)("FUNCTION", expressions_1.Field);
14333
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FUNCTION", expressions_1.Field));
14292
14334
  }
14293
14335
  }
14294
14336
  exports.FunctionModule = FunctionModule;
@@ -14308,12 +14350,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
14308
14350
  exports.FunctionPool = void 0;
14309
14351
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
14310
14352
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
14353
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
14311
14354
  class FunctionPool {
14312
14355
  getMatcher() {
14313
14356
  const message = (0, combi_1.seq)("MESSAGE-ID", expressions_1.MessageClass);
14314
14357
  const line = (0, combi_1.seq)("LINE-SIZE", expressions_1.Integer);
14315
14358
  const no = (0, combi_1.str)("NO STANDARD PAGE HEADING");
14316
- return (0, combi_1.seq)("FUNCTION-POOL", expressions_1.IncludeName, (0, combi_1.opt)((0, combi_1.per)(message, line, no)));
14359
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FUNCTION-POOL", expressions_1.IncludeName, (0, combi_1.opt)((0, combi_1.per)(message, line, no))));
14317
14360
  }
14318
14361
  }
14319
14362
  exports.FunctionPool = FunctionPool;
@@ -14686,10 +14729,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
14686
14729
  exports.GetReference = void 0;
14687
14730
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
14688
14731
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
14732
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
14689
14733
  class GetReference {
14690
14734
  getMatcher() {
14691
14735
  const ret = (0, combi_1.seq)("GET REFERENCE OF", expressions_1.Source, "INTO", expressions_1.Target);
14692
- return ret;
14736
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
14693
14737
  }
14694
14738
  }
14695
14739
  exports.GetReference = GetReference;
@@ -14733,10 +14777,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
14733
14777
  exports.GetTime = void 0;
14734
14778
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
14735
14779
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
14780
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
14736
14781
  class GetTime {
14737
14782
  getMatcher() {
14738
14783
  const options = (0, combi_1.seq)((0, combi_1.alt)("STAMP FIELD", "FIELD"), expressions_1.Target);
14739
- return (0, combi_1.seq)("GET TIME", (0, combi_1.opt)(options));
14784
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("GET TIME", (0, combi_1.opt)(options)));
14740
14785
  }
14741
14786
  }
14742
14787
  exports.GetTime = GetTime;
@@ -14803,6 +14848,7 @@ exports.Import = void 0;
14803
14848
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
14804
14849
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
14805
14850
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
14851
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
14806
14852
  class Import {
14807
14853
  getMatcher() {
14808
14854
  const dto = (0, combi_1.seq)("TO", expressions_1.Target);
@@ -14811,11 +14857,11 @@ class Import {
14811
14857
  const using = (0, combi_1.seq)("USING", expressions_1.Source);
14812
14858
  const cluster = (0, combi_1.seq)(expressions_1.NamespaceSimpleName, (0, combi_1.tok)(tokens_1.ParenLeft), (0, combi_1.regex)(/^[\w$%\^]{2}$/), (0, combi_1.tok)(tokens_1.ParenRightW));
14813
14859
  const buffer = (0, combi_1.seq)("DATA BUFFER", expressions_1.Source);
14814
- const memory = (0, combi_1.seq)("MEMORY", (0, combi_1.opt)((0, combi_1.seq)("ID", expressions_1.Source)));
14860
+ const memory = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("MEMORY", (0, combi_1.opt)((0, combi_1.seq)("ID", expressions_1.Source))));
14815
14861
  const table = (0, combi_1.seq)("INTERNAL TABLE", expressions_1.Source);
14816
- const shared = (0, combi_1.seq)((0, combi_1.alt)("SHARED MEMORY", "SHARED BUFFER"), cluster, (0, combi_1.per)(dto, client, id));
14817
- const database = (0, combi_1.seq)("DATABASE", cluster, (0, combi_1.per)(dto, client, id, using));
14818
- const logfile = (0, combi_1.seq)("LOGFILE ID", expressions_1.Source);
14862
+ const shared = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)((0, combi_1.alt)("SHARED MEMORY", "SHARED BUFFER"), cluster, (0, combi_1.per)(dto, client, id)));
14863
+ const database = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("DATABASE", cluster, (0, combi_1.per)(dto, client, id, using)));
14864
+ const logfile = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("LOGFILE ID", expressions_1.Source));
14819
14865
  const source = (0, combi_1.alt)(buffer, memory, database, table, shared, logfile);
14820
14866
  const to = (0, combi_1.plus)((0, combi_1.seq)(expressions_1.ComponentChainSimple, (0, combi_1.alt)("TO", "INTO"), expressions_1.Target));
14821
14867
  const toeq = (0, combi_1.plus)((0, combi_1.seq)((0, combi_1.alt)(expressions_1.ComponentChainSimple, expressions_1.FieldSymbol), "=", expressions_1.Target));
@@ -15391,13 +15437,14 @@ exports.InsertDatabase = void 0;
15391
15437
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
15392
15438
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
15393
15439
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
15440
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
15394
15441
  class InsertDatabase {
15395
15442
  getMatcher() {
15396
15443
  const sub = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), expressions_1.Select, (0, combi_1.tok)(tokens_1.WParenRightW));
15397
15444
  const f = (0, combi_1.seq)((0, combi_1.opt)(expressions_1.SQLClient), (0, combi_1.opt)(expressions_1.DatabaseConnection), "FROM", (0, combi_1.opt)("TABLE"), (0, combi_1.alt)(expressions_1.SQLSource, sub), (0, combi_1.opt)("ACCEPTING DUPLICATE KEYS"));
15398
15445
  const from = (0, combi_1.seq)(expressions_1.DatabaseTable, (0, combi_1.opt)((0, combi_1.alt)(f, expressions_1.SQLClient, expressions_1.DatabaseConnection)));
15399
15446
  const into = (0, combi_1.seq)("INTO", expressions_1.DatabaseTable, (0, combi_1.opt)(expressions_1.SQLClient), (0, combi_1.opt)(expressions_1.DatabaseConnection), "VALUES", expressions_1.SQLSource);
15400
- return (0, combi_1.seq)("INSERT", (0, combi_1.alt)(from, into));
15447
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("INSERT", (0, combi_1.alt)(from, into)));
15401
15448
  }
15402
15449
  }
15403
15450
  exports.InsertDatabase = InsertDatabase;
@@ -15580,9 +15627,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
15580
15627
  exports.InterfaceDeferred = void 0;
15581
15628
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
15582
15629
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
15630
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
15583
15631
  class InterfaceDeferred {
15584
15632
  getMatcher() {
15585
- return (0, combi_1.seq)("INTERFACE", expressions_1.InterfaceName, "DEFERRED", (0, combi_1.opt)("PUBLIC"));
15633
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("INTERFACE", expressions_1.InterfaceName, "DEFERRED", (0, combi_1.opt)("PUBLIC")));
15586
15634
  }
15587
15635
  }
15588
15636
  exports.InterfaceDeferred = InterfaceDeferred;
@@ -15600,11 +15648,12 @@ exports.InterfaceDeferred = InterfaceDeferred;
15600
15648
 
15601
15649
  Object.defineProperty(exports, "__esModule", ({ value: true }));
15602
15650
  exports.InterfaceLoad = void 0;
15651
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
15603
15652
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
15604
15653
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
15605
15654
  class InterfaceLoad {
15606
15655
  getMatcher() {
15607
- return (0, combi_1.seq)("INTERFACE", expressions_1.InterfaceName, "LOAD");
15656
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("INTERFACE", expressions_1.InterfaceName, "LOAD"));
15608
15657
  }
15609
15658
  }
15610
15659
  exports.InterfaceLoad = InterfaceLoad;
@@ -15751,7 +15800,7 @@ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src
15751
15800
  const loop_group_by_1 = __webpack_require__(/*! ../expressions/loop_group_by */ "../core/build/src/abap/2_statements/expressions/loop_group_by.js");
15752
15801
  class Loop {
15753
15802
  getMatcher() {
15754
- const where = (0, combi_1.seq)("WHERE", (0, combi_1.alt)(expressions_1.ComponentCond, expressions_1.Dynamic));
15803
+ const where = (0, combi_1.seq)("WHERE", (0, combi_1.alt)(expressions_1.ComponentCond, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, expressions_1.Dynamic)));
15755
15804
  const group = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("GROUP BY", loop_group_by_1.LoopGroupBy), { also: combi_1.AlsoIn.OpenABAP });
15756
15805
  const step = (0, combi_1.ver)(version_1.Release.v757, (0, combi_1.seq)("STEP", expressions_1.Source));
15757
15806
  const from = (0, combi_1.seq)("FROM", expressions_1.Source);
@@ -15802,9 +15851,10 @@ exports.LoopAtScreen = LoopAtScreen;
15802
15851
  Object.defineProperty(exports, "__esModule", ({ value: true }));
15803
15852
  exports.LoopExtract = void 0;
15804
15853
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
15854
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
15805
15855
  class LoopExtract {
15806
15856
  getMatcher() {
15807
- return (0, combi_1.str)("LOOP");
15857
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.str)("LOOP"));
15808
15858
  }
15809
15859
  }
15810
15860
  exports.LoopExtract = LoopExtract;
@@ -15829,7 +15879,8 @@ class Message {
15829
15879
  getMatcher() {
15830
15880
  const like = (0, combi_1.seq)("DISPLAY LIKE", expressions_1.Source);
15831
15881
  const into = (0, combi_1.seq)("INTO", expressions_1.Target);
15832
- const raising = (0, combi_1.seq)("RAISING", expressions_1.ExceptionName);
15882
+ // RAISING addition blocked in KeyUser
15883
+ const raising = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("RAISING", expressions_1.ExceptionName));
15833
15884
  const options = (0, combi_1.per)(like, into, raising);
15834
15885
  const type = (0, combi_1.seq)("TYPE", expressions_1.Source);
15835
15886
  const sou = (0, combi_1.altPrio)(options, expressions_1.MessageSourceSource);
@@ -15865,8 +15916,10 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/s
15865
15916
  class MethodDef {
15866
15917
  getMatcher() {
15867
15918
  const def = (0, combi_1.ver)(version_1.Release.v740sp08, (0, combi_1.seq)("DEFAULT", (0, combi_1.altPrio)("FAIL", "IGNORE")), { also: combi_1.AlsoIn.OpenABAP });
15868
- const parameters = (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.altPrio)("FINAL", def, expressions_1.Abstract)), (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefChanging), (0, combi_1.optPrio)(expressions_1.MethodDefReturning), (0, combi_1.optPrio)((0, combi_1.altPrio)(expressions_1.MethodDefRaising, expressions_1.MethodDefExceptions)));
15869
- const testing = (0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), "FOR TESTING", (0, combi_1.optPrio)((0, combi_1.altPrio)(expressions_1.MethodDefRaising, expressions_1.MethodDefExceptions)));
15919
+ const parameters = (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.altPrio)("FINAL", def, expressions_1.Abstract)), (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefChanging), (0, combi_1.optPrio)(expressions_1.MethodDefReturning),
15920
+ // Old-style EXCEPTIONS blocked in KeyUser
15921
+ (0, combi_1.optPrio)((0, combi_1.altPrio)(expressions_1.MethodDefRaising, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, expressions_1.MethodDefExceptions))));
15922
+ const testing = (0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), "FOR TESTING", (0, combi_1.optPrio)((0, combi_1.altPrio)(expressions_1.MethodDefRaising, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, expressions_1.MethodDefExceptions))));
15870
15923
  const result = (0, combi_1.seq)("RESULT", expressions_1.MethodParamName);
15871
15924
  const link = (0, combi_1.seq)("LINK", expressions_1.MethodParamName);
15872
15925
  const full = (0, combi_1.seq)("FULL", expressions_1.MethodParamName);
@@ -15877,8 +15930,10 @@ class MethodDef {
15877
15930
  (0, combi_1.seq)("TABLE FUNCTION", expressions_1.NamespaceSimpleName), // todo, this is only from version something
15878
15931
  (0, combi_1.seq)("VALIDATE ON SAVE IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("MODIFY", (0, combi_1.opt)("IMPORTING"), (0, combi_1.plus)((0, combi_1.seq)(expressions_1.MethodParamName, modify))), (0, combi_1.seq)("PRECHECK IMPORTING", expressions_1.MethodParamName, modify), (0, combi_1.seq)("DETERMINATION", expressions_1.TypeName, "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("VALIDATION", expressions_1.TypeName, "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("NUMBERING IMPORTING", expressions_1.MethodParamName, modify), (0, combi_1.seq)("READ IMPORTING", expressions_1.MethodParamName, (0, combi_1.altPrio)(forRead, forfunction)), (0, combi_1.seq)("FEATURES IMPORTING", expressions_1.MethodParamName, "REQUEST", expressions_1.NamespaceSimpleName, "FOR", expressions_1.NamespaceSimpleName, result), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR CREATE", expressions_1.TypeName, expressions_1.MethodParamName, "FOR UPDATE", expressions_1.TypeName, expressions_1.MethodParamName, "FOR DELETE", expressions_1.TypeName), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR READ", expressions_1.TypeName, result), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR UPDATE", expressions_1.TypeName), (0, combi_1.seq)((0, combi_1.alt)("BEHAVIOR", "LOCK"), "IMPORTING", expressions_1.MethodParamName, "FOR LOCK", expressions_1.TypeName), (0, combi_1.seq)("DETERMINE", (0, combi_1.alt)("ON MODIFY", "ON SAVE"), "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("GLOBAL AUTHORIZATION IMPORTING REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)("GLOBAL FEATURES IMPORTING REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)((0, combi_1.seq)((0, combi_1.opt)("INSTANCE"), "AUTHORIZATION IMPORTING"), expressions_1.MethodParamName, "REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)("INSTANCE FEATURES IMPORTING", expressions_1.MethodParamName, "REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result));
15879
15932
  // todo, this is only from version something
15880
- const amdp = (0, combi_1.seq)("AMDP OPTIONS", (0, combi_1.optPrio)("READ-ONLY"), "CDS SESSION CLIENT", (0, combi_1.alt)("CURRENT", "DEPENDENT"), (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefRaising));
15881
- const ret = (0, combi_1.seq)((0, combi_1.altPrio)("CLASS-METHODS", "METHODS"), expressions_1.MethodName, (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), (0, combi_1.optPrio)(def), expressions_1.EventHandler), parameters, testing, (0, combi_1.seq)("FOR", behavior), amdp, "NOT AT END OF MODE", (0, combi_1.optPrio)(expressions_1.Redefinition)));
15933
+ // AMDP OPTIONS clause blocked in KeyUser
15934
+ const amdp = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("AMDP OPTIONS", (0, combi_1.optPrio)("READ-ONLY"), "CDS SESSION CLIENT", (0, combi_1.alt)("CURRENT", "DEPENDENT"), (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefRaising)));
15935
+ // FOR DDL OBJECT / FOR TABLE FUNCTION / FOR SCALAR FUNCTION blocked in KeyUser
15936
+ const ret = (0, combi_1.seq)((0, combi_1.altPrio)("CLASS-METHODS", "METHODS"), expressions_1.MethodName, (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), (0, combi_1.optPrio)(def), expressions_1.EventHandler), parameters, testing, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("FOR", behavior)), amdp, "NOT AT END OF MODE", (0, combi_1.optPrio)(expressions_1.Redefinition)));
15882
15937
  return ret;
15883
15938
  }
15884
15939
  }
@@ -15899,13 +15954,15 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
15899
15954
  exports.MethodImplementation = void 0;
15900
15955
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
15901
15956
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
15957
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
15902
15958
  class MethodImplementation {
15903
15959
  getMatcher() {
15904
15960
  const name = (0, combi_1.regex)(/[\w~]+/);
15905
15961
  const kernel = (0, combi_1.seq)("KERNEL MODULE", (0, combi_1.plus)(name), (0, combi_1.optPrio)((0, combi_1.altPrio)("FAIL", "IGNORE")));
15906
15962
  const using = (0, combi_1.seq)("USING", (0, combi_1.plus)(expressions_1.SimpleFieldChain));
15907
15963
  const database = (0, combi_1.seq)("DATABASE", (0, combi_1.alt)("PROCEDURE", "FUNCTION", "GRAPH WORKSPACE"), "FOR HDB", expressions_1.Language, (0, combi_1.opt)("OPTIONS READ-ONLY"), (0, combi_1.opt)(using));
15908
- const by = (0, combi_1.seq)("BY", (0, combi_1.alt)(kernel, database));
15964
+ // BY DATABASE and BY KERNEL both blocked in KeyUser
15965
+ const by = (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("BY", (0, combi_1.alt)(kernel, database)));
15909
15966
  return (0, combi_1.seq)("METHOD", expressions_1.MethodName, (0, combi_1.optPrio)(by));
15910
15967
  }
15911
15968
  }
@@ -15926,11 +15983,12 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
15926
15983
  exports.ModifyDatabase = void 0;
15927
15984
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
15928
15985
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
15986
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
15929
15987
  class ModifyDatabase {
15930
15988
  getMatcher() {
15931
15989
  const from = (0, combi_1.seq)("FROM", (0, combi_1.opt)("TABLE"), expressions_1.SQLSource);
15932
15990
  const options = (0, combi_1.per)(expressions_1.DatabaseConnection, from, expressions_1.SQLClient);
15933
- return (0, combi_1.seq)("MODIFY", expressions_1.DatabaseTable, options);
15991
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("MODIFY", expressions_1.DatabaseTable, options));
15934
15992
  }
15935
15993
  }
15936
15994
  exports.ModifyDatabase = ModifyDatabase;
@@ -16171,12 +16229,13 @@ exports.MoveCorresponding = MoveCorresponding;
16171
16229
 
16172
16230
  Object.defineProperty(exports, "__esModule", ({ value: true }));
16173
16231
  exports.Multiply = void 0;
16232
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
16174
16233
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
16175
16234
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
16176
16235
  class Multiply {
16177
16236
  getMatcher() {
16178
16237
  const ret = (0, combi_1.seq)("MULTIPLY", expressions_1.Target, "BY", expressions_1.Source);
16179
- return ret;
16238
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
16180
16239
  }
16181
16240
  }
16182
16241
  exports.Multiply = Multiply;
@@ -16507,7 +16566,7 @@ class Perform {
16507
16566
  const normal = (0, combi_1.seq)((0, combi_1.opt)(found), (0, combi_1.opt)(expressions_1.PerformTables), (0, combi_1.opt)(expressions_1.PerformUsing), (0, combi_1.opt)(expressions_1.PerformChanging), (0, combi_1.opt)(found), (0, combi_1.opt)(commit));
16508
16567
  const of = (0, combi_1.seq)("OF", (0, combi_1.plus)(Expressions.FormName));
16509
16568
  const ret = (0, combi_1.seq)("PERFORM", (0, combi_1.alt)(short, full), (0, combi_1.altPrio)(of, normal));
16510
- return ret;
16569
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
16511
16570
  }
16512
16571
  }
16513
16572
  exports.Perform = Perform;
@@ -16826,7 +16885,8 @@ class Raise {
16826
16885
  const from = (0, combi_1.seq)("TYPE", expressions_1.ClassName, (0, combi_1.opt)((0, combi_1.alt)((0, combi_1.ver)(version_1.Release.v750, (0, combi_1.alt)(mess, messid), { also: combi_1.AlsoIn.OpenABAP }), (0, combi_1.ver)(version_1.Release.v752, "USING MESSAGE"))), (0, combi_1.optPrio)(exporting));
16827
16886
  const pre = (0, combi_1.altPrio)((0, combi_1.seq)((0, combi_1.optPrio)("RESUMABLE"), "EXCEPTION"), "SHORTDUMP");
16828
16887
  const clas = (0, combi_1.seq)(pre, (0, combi_1.altPrio)(from, (0, combi_1.ver)(version_1.Release.v752, expressions_1.Source, { also: combi_1.AlsoIn.OpenABAP }), expressions_1.SimpleSource2));
16829
- const ret = (0, combi_1.seq)("RAISE", (0, combi_1.altPrio)(clas, expressions_1.ExceptionName));
16888
+ // Old form "RAISE exception_name" blocked in KeyUser
16889
+ const ret = (0, combi_1.seq)("RAISE", (0, combi_1.altPrio)(clas, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, expressions_1.ExceptionName)));
16830
16890
  return ret;
16831
16891
  }
16832
16892
  }
@@ -16847,9 +16907,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
16847
16907
  exports.RaiseEntityEvent = void 0;
16848
16908
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
16849
16909
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
16910
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
16850
16911
  class RaiseEntityEvent {
16851
16912
  getMatcher() {
16852
- return (0, combi_1.seq)("RAISE ENTITY EVENT", expressions_1.EventName, "FROM", expressions_1.Source);
16913
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("RAISE ENTITY EVENT", expressions_1.EventName, "FROM", expressions_1.Source));
16853
16914
  }
16854
16915
  }
16855
16916
  exports.RaiseEntityEvent = RaiseEntityEvent;
@@ -16869,10 +16930,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
16869
16930
  exports.RaiseEvent = void 0;
16870
16931
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
16871
16932
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
16933
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
16872
16934
  class RaiseEvent {
16873
16935
  getMatcher() {
16874
16936
  const exporting = (0, combi_1.seq)("EXPORTING", expressions_1.ParameterListS);
16875
- return (0, combi_1.seq)("RAISE EVENT", expressions_1.EventName, (0, combi_1.opt)(exporting));
16937
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("RAISE EVENT", expressions_1.EventName, (0, combi_1.opt)(exporting)));
16876
16938
  }
16877
16939
  }
16878
16940
  exports.RaiseEvent = RaiseEvent;
@@ -17041,9 +17103,10 @@ class ReadTable {
17041
17103
  getMatcher() {
17042
17104
  const comparing = (0, combi_1.seq)("COMPARING", (0, combi_1.alt)((0, combi_1.plus)(expressions_1.FieldSub), (0, combi_1.plus)(expressions_1.Dynamic)));
17043
17105
  const index = (0, combi_1.seq)("INDEX", expressions_1.Source);
17044
- const components = (0, combi_1.seq)((0, combi_1.alt)(expressions_1.Field, expressions_1.Dynamic), "COMPONENTS", expressions_1.ComponentCompareSimple);
17106
+ // Dynamic key name or dynamic component name blocked in KeyUser
17107
+ const components = (0, combi_1.seq)((0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.alt)(expressions_1.Field, expressions_1.Dynamic)), "COMPONENTS", expressions_1.ComponentCompareSimple);
17045
17108
  const key = (0, combi_1.seq)((0, combi_1.altPrio)("WITH KEY", "WITH TABLE KEY"), (0, combi_1.alt)(expressions_1.ComponentCompareSimple, components, (0, combi_1.seq)((0, combi_1.optPrio)("="), expressions_1.Source)));
17046
- const using = (0, combi_1.seq)("USING KEY", (0, combi_1.alt)(expressions_1.Field, expressions_1.Dynamic));
17109
+ const using = (0, combi_1.seq)("USING KEY", (0, combi_1.alt)(expressions_1.Field, (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, expressions_1.Dynamic)));
17047
17110
  const from = (0, combi_1.seq)("FROM", expressions_1.Source);
17048
17111
  const transporting = (0, combi_1.seq)("TRANSPORTING", (0, combi_1.altPrio)("ALL FIELDS", "NO FIELDS", transporting_fields_1.TransportingFields));
17049
17112
  const common = [expressions_1.ReadTableTarget, comparing, "CASTING", transporting, "BINARY SEARCH"];
@@ -17348,9 +17411,10 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
17348
17411
  exports.Rollback = void 0;
17349
17412
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
17350
17413
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
17414
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
17351
17415
  class Rollback {
17352
17416
  getMatcher() {
17353
- return (0, combi_1.seq)("ROLLBACK", (0, combi_1.altPrio)("WORK", expressions_1.DatabaseConnection));
17417
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("ROLLBACK", (0, combi_1.altPrio)("WORK", expressions_1.DatabaseConnection)));
17354
17418
  }
17355
17419
  }
17356
17420
  exports.Rollback = Rollback;
@@ -17373,7 +17437,7 @@ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src
17373
17437
  class RollbackEntities {
17374
17438
  getMatcher() {
17375
17439
  const s = "ROLLBACK ENTITIES";
17376
- return (0, combi_1.ver)(version_1.Release.v754, s);
17440
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v754, s));
17377
17441
  }
17378
17442
  }
17379
17443
  exports.RollbackEntities = RollbackEntities;
@@ -17777,12 +17841,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
17777
17841
  exports.SetHandler = void 0;
17778
17842
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
17779
17843
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
17844
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
17780
17845
  class SetHandler {
17781
17846
  getMatcher() {
17782
17847
  const activation = (0, combi_1.seq)("ACTIVATION", expressions_1.Source);
17783
17848
  const fo = (0, combi_1.seq)("FOR", (0, combi_1.altPrio)("ALL INSTANCES", expressions_1.Source));
17784
17849
  const ret = (0, combi_1.seq)("SET HANDLER", (0, combi_1.plus)(expressions_1.MethodSource), (0, combi_1.optPrio)(fo), (0, combi_1.optPrio)(activation));
17785
- return ret;
17850
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
17786
17851
  }
17787
17852
  }
17788
17853
  exports.SetHandler = SetHandler;
@@ -17880,7 +17945,7 @@ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src
17880
17945
  class SetLocks {
17881
17946
  getMatcher() {
17882
17947
  const s = (0, combi_1.seq)("SET LOCKS OF", expressions_1.SimpleName, "ENTITY", expressions_1.SimpleName, "FROM", expressions_1.Source, "FAILED", expressions_1.Target, "REPORTED", expressions_1.Target);
17883
- return (0, combi_1.ver)(version_1.Release.v754, s);
17948
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v754, s));
17884
17949
  }
17885
17950
  }
17886
17951
  exports.SetLocks = SetLocks;
@@ -18307,12 +18372,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
18307
18372
  exports.Static = void 0;
18308
18373
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
18309
18374
  const Expressions = __importStar(__webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js"));
18375
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
18310
18376
  class Static {
18311
18377
  getMatcher() {
18312
18378
  const p = (0, combi_1.opt)((0, combi_1.per)(Expressions.Type, Expressions.Value, Expressions.Length, Expressions.Decimals));
18313
18379
  const type = (0, combi_1.seq)((0, combi_1.opt)(Expressions.ConstantFieldLength), p);
18314
- const ret = (0, combi_1.seq)((0, combi_1.alt)("STATIC", "STATICS"), Expressions.DefinitionName, (0, combi_1.optPrio)(Expressions.ConstantFieldLength), (0, combi_1.alt)(type, Expressions.TypeTable));
18315
- return ret;
18380
+ const body = (0, combi_1.seq)(Expressions.DefinitionName, (0, combi_1.optPrio)(Expressions.ConstantFieldLength), (0, combi_1.alt)(type, Expressions.TypeTable));
18381
+ return (0, combi_1.altPrio)((0, combi_1.seq)("STATIC", body), (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("STATICS", body)));
18316
18382
  }
18317
18383
  }
18318
18384
  exports.Static = Static;
@@ -18455,12 +18521,13 @@ exports.Submit = Submit;
18455
18521
 
18456
18522
  Object.defineProperty(exports, "__esModule", ({ value: true }));
18457
18523
  exports.Subtract = void 0;
18524
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
18458
18525
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
18459
18526
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
18460
18527
  class Subtract {
18461
18528
  getMatcher() {
18462
18529
  const ret = (0, combi_1.seq)("SUBTRACT", expressions_1.Source, "FROM", expressions_1.Target);
18463
- return ret;
18530
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
18464
18531
  }
18465
18532
  }
18466
18533
  exports.Subtract = Subtract;
@@ -18686,11 +18753,12 @@ exports.Tables = Tables;
18686
18753
 
18687
18754
  Object.defineProperty(exports, "__esModule", ({ value: true }));
18688
18755
  exports.TestInjection = void 0;
18756
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
18689
18757
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
18690
18758
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
18691
18759
  class TestInjection {
18692
18760
  getMatcher() {
18693
- return (0, combi_1.seq)("TEST-INJECTION", expressions_1.TestSeamName);
18761
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.seq)("TEST-INJECTION", expressions_1.TestSeamName));
18694
18762
  }
18695
18763
  }
18696
18764
  exports.TestInjection = TestInjection;
@@ -18713,7 +18781,7 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/s
18713
18781
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
18714
18782
  class TestSeam {
18715
18783
  getMatcher() {
18716
- return (0, combi_1.ver)(version_1.Release.v750, (0, combi_1.seq)("TEST-SEAM", expressions_1.TestSeamName), { also: combi_1.AlsoIn.OpenABAP });
18784
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v750, (0, combi_1.seq)("TEST-SEAM", expressions_1.TestSeamName), { also: combi_1.AlsoIn.OpenABAP }));
18717
18785
  }
18718
18786
  }
18719
18787
  exports.TestSeam = TestSeam;
@@ -19227,17 +19295,18 @@ exports.Unpack = Unpack;
19227
19295
 
19228
19296
  Object.defineProperty(exports, "__esModule", ({ value: true }));
19229
19297
  exports.UpdateDatabase = void 0;
19298
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
19230
19299
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
19231
19300
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
19232
- const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
19301
+ const version_2 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
19233
19302
  class UpdateDatabase {
19234
19303
  getMatcher() {
19235
19304
  const parameters = (0, combi_1.seq)(expressions_1.SQLFieldAndValue, (0, combi_1.star)((0, combi_1.seq)((0, combi_1.opt)(","), expressions_1.SQLFieldAndValue)));
19236
19305
  const set = (0, combi_1.seq)("SET", (0, combi_1.alt)(parameters, expressions_1.Dynamic), (0, combi_1.opt)((0, combi_1.seq)("WHERE", expressions_1.SQLCond)));
19237
19306
  const indicators = (0, combi_1.seq)("INDICATORS SET STRUCTURE", expressions_1.ComponentName);
19238
- const fromTable = (0, combi_1.seq)("FROM", (0, combi_1.opt)("TABLE"), expressions_1.SQLSource, (0, combi_1.opt)((0, combi_1.ver)(version_1.Release.v755, indicators)));
19307
+ const fromTable = (0, combi_1.seq)("FROM", (0, combi_1.opt)("TABLE"), expressions_1.SQLSource, (0, combi_1.opt)((0, combi_1.ver)(version_2.Release.v755, indicators)));
19239
19308
  const ret = (0, combi_1.seq)("UPDATE", expressions_1.DatabaseTable, (0, combi_1.opt)(expressions_1.SQLClient), (0, combi_1.opt)(expressions_1.DatabaseConnection), (0, combi_1.opt)((0, combi_1.alt)(fromTable, set)));
19240
- return ret;
19309
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
19241
19310
  }
19242
19311
  }
19243
19312
  exports.UpdateDatabase = UpdateDatabase;
@@ -19280,19 +19349,20 @@ exports.VerificationMessage = VerificationMessage;
19280
19349
 
19281
19350
  Object.defineProperty(exports, "__esModule", ({ value: true }));
19282
19351
  exports.Wait = void 0;
19283
- const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
19284
19352
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
19353
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
19354
+ const version_2 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
19285
19355
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
19286
19356
  class Wait {
19287
19357
  getMatcher() {
19288
19358
  const up = (0, combi_1.seq)("UP TO", expressions_1.Source, "SECONDS");
19289
19359
  const channels = "MESSAGING CHANNELS";
19290
- const push = (0, combi_1.ver)(version_1.Release.v750, "PUSH CHANNELS", { also: combi_1.AlsoIn.OpenABAP });
19360
+ const push = (0, combi_1.ver)(version_2.Release.v750, "PUSH CHANNELS", { also: combi_1.AlsoIn.OpenABAP });
19291
19361
  const tasks = "ASYNCHRONOUS TASKS";
19292
19362
  const type = (0, combi_1.seq)("FOR", (0, combi_1.per)(channels, push, tasks));
19293
19363
  const until = (0, combi_1.seq)((0, combi_1.opt)(type), "UNTIL", expressions_1.Cond, (0, combi_1.opt)(up));
19294
19364
  const ret = (0, combi_1.seq)("WAIT", (0, combi_1.alt)(until, up));
19295
- return ret;
19365
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, ret);
19296
19366
  }
19297
19367
  }
19298
19368
  exports.Wait = Wait;
@@ -19435,7 +19505,7 @@ class With {
19435
19505
  getMatcher() {
19436
19506
  const exposing = (0, combi_1.optPrio)((0, combi_1.seq)("WITH", (0, combi_1.altPrio)(new expressions_1.SQLCTEHierarchy(), expressions_1.SQLCTEAssociations)));
19437
19507
  const cte = (0, combi_1.seq)(expressions_1.WithName, "AS", (0, combi_1.tok)(tokens_1.WParenLeftW), expressions_1.SelectCTE, (0, combi_1.tok)(tokens_1.WParenRightW), exposing);
19438
- return (0, combi_1.ver)(version_1.Release.v751, (0, combi_1.seq)("WITH", cte, (0, combi_1.star)((0, combi_1.seq)(",", cte)), expressions_1.Select));
19508
+ return (0, combi_1.verNotLang)(version_1.LanguageVersion.KeyUser, (0, combi_1.ver)(version_1.Release.v751, (0, combi_1.seq)("WITH", cte, (0, combi_1.star)((0, combi_1.seq)(",", cte)), expressions_1.Select)));
19439
19509
  }
19440
19510
  }
19441
19511
  exports.With = With;
@@ -25130,7 +25200,6 @@ BuiltIn.methods = {
25130
25200
 
25131
25201
  Object.defineProperty(exports, "__esModule", ({ value: true }));
25132
25202
  exports.CurrentScope = void 0;
25133
- const version_1 = __webpack_require__(/*! ../../version */ "../core/build/src/version.js");
25134
25203
  const _builtin_1 = __webpack_require__(/*! ./_builtin */ "../core/build/src/abap/5_syntax/_builtin.js");
25135
25204
  const ddic_1 = __webpack_require__(/*! ../../ddic */ "../core/build/src/ddic.js");
25136
25205
  const position_1 = __webpack_require__(/*! ../../position */ "../core/build/src/position.js");
@@ -25166,7 +25235,7 @@ class CurrentScope {
25166
25235
  }
25167
25236
  ///////////////////////////
25168
25237
  getRelease() {
25169
- return (0, version_1.versionToABAPRelease)(this.reg.getConfig().getVersion());
25238
+ return this.reg.getConfig().getRelease();
25170
25239
  }
25171
25240
  getVersion() {
25172
25241
  return this.reg.getConfig().getVersion();
@@ -32603,7 +32672,7 @@ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "../core/bui
32603
32672
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
32604
32673
  const isSimple = /^\w+$/;
32605
32674
  class Select {
32606
- static runSyntax(node, input, skipImplicitInto = false) {
32675
+ static runSyntax(node, input, skipImplicitInto = false, selectLoop = false) {
32607
32676
  var _a;
32608
32677
  const token = node.getFirstToken();
32609
32678
  let from = node.findDirectExpression(Expressions.SQLFrom);
@@ -32662,6 +32731,14 @@ class Select {
32662
32731
  sql_source_1.SQLSource.runSyntax(s, input);
32663
32732
  }
32664
32733
  for (const up of node.findDirectExpressions(Expressions.SQLUpTo)) {
32734
+ if (intoExpression
32735
+ && this.isStrictMode(node, input)
32736
+ && (selectLoop === false || input.scope.getLanguageVersion() === version_1.LanguageVersion.Cloud)
32737
+ && from.getFirstToken().getStart().isBefore(up.getFirstToken().getStart())
32738
+ && up.getFirstToken().getStart().isBefore(intoExpression.getFirstToken().getStart())) {
32739
+ const message = `The addition "UP TO n ROWS" must only be placed after the INTO/APPENDING clause.`;
32740
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, up.getFirstToken(), message));
32741
+ }
32665
32742
  for (const s of up.findDirectExpressions(Expressions.SQLSource)) {
32666
32743
  sql_source_1.SQLSource.runSyntax(s, input);
32667
32744
  }
@@ -32687,7 +32764,7 @@ class Select {
32687
32764
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, orderBy.getFirstToken(), message));
32688
32765
  }
32689
32766
  }
32690
- if (this.isStrictMode(node)) {
32767
+ if (this.isStrictMode(node, input)) {
32691
32768
  this.strictModeChecks(node, input);
32692
32769
  }
32693
32770
  if (input.scope.getType() === _scope_type_1.ScopeType.OpenSQL) {
@@ -32695,7 +32772,11 @@ class Select {
32695
32772
  }
32696
32773
  }
32697
32774
  // there are multiple rules, but gotta start somewhere
32698
- static isStrictMode(node) {
32775
+ static isStrictMode(node, input) {
32776
+ // strict OpenSQL is always required in the cloud language version
32777
+ if (input.scope.getLanguageVersion() === version_1.LanguageVersion.Cloud) {
32778
+ return true;
32779
+ }
32699
32780
  const into = node.findDirectExpressionsMulti([Expressions.SQLIntoList, Expressions.SQLIntoStructure, Expressions.SQLIntoTable])[0];
32700
32781
  const where = node.findDirectExpression(Expressions.SQLCond);
32701
32782
  // INTO is after WHERE
@@ -38119,8 +38200,9 @@ class DeleteInternal {
38119
38200
  const localVariable = input.scope.findVariable(target.concatTokens());
38120
38201
  if (localVariable === undefined && node.getChildren().length === 5 && node.getChildren()[2].concatTokens().toUpperCase() === "FROM") {
38121
38202
  // it might be a database table
38122
- tabl = (_a = input.scope.getDDIC()) === null || _a === void 0 ? void 0 : _a.lookupTableOrView(target.concatTokens());
38123
- if (tabl) {
38203
+ const found = (_a = input.scope.getDDIC()) === null || _a === void 0 ? void 0 : _a.lookupTableOrView(target.concatTokens());
38204
+ if ((found === null || found === void 0 ? void 0 : found.object) !== undefined) {
38205
+ tabl = found;
38124
38206
  input.scope.getDDICReferences().addUsing(input.scope.getParentObj(), { object: tabl.object });
38125
38207
  }
38126
38208
  }
@@ -38128,7 +38210,7 @@ class DeleteInternal {
38128
38210
  targetType = target_1.Target.runSyntax(target, input);
38129
38211
  if (node.findDirectTokenByText("TABLE") === undefined
38130
38212
  && node.findDirectTokenByText("ADJACENT") === undefined
38131
- && node.findDirectTokenByText("FROM")
38213
+ && (node.findDirectTokenByText("FROM") || node.findDirectTokenByText("INDEX"))
38132
38214
  && targetType instanceof basic_1.TableType
38133
38215
  && targetType.getAccessType() === basic_1.TableAccessType.hashed) {
38134
38216
  const message = "Implicit or explicit index operation on hashed table is not possible";
@@ -40693,6 +40775,14 @@ class Loop {
40693
40775
  }
40694
40776
  const targetConcat = loopTarget === null || loopTarget === void 0 ? void 0 : loopTarget.concatTokens().toUpperCase();
40695
40777
  const topType = sourceType; // todo: refactor topType vs sourceType vs rowType
40778
+ if (topType instanceof basic_1.TableType
40779
+ && topType.getAccessType() === basic_1.TableAccessType.hashed
40780
+ && node.findDirectTokenByText("USING") === undefined
40781
+ && (node.findDirectTokenByText("FROM") || node.findDirectTokenByText("TO"))) {
40782
+ const message = "Implicit or explicit index operation on hashed table is not possible";
40783
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
40784
+ return;
40785
+ }
40696
40786
  if (sourceType instanceof basic_1.TableType) {
40697
40787
  rowType = sourceType.getRowType();
40698
40788
  sourceType = rowType;
@@ -41235,6 +41325,13 @@ class ModifyInternal {
41235
41325
  // ok
41236
41326
  }
41237
41327
  else if (targetType instanceof basic_1.TableType) {
41328
+ if (node.findDirectTokenByText("TABLE") === undefined
41329
+ && node.findDirectTokenByText("INDEX")
41330
+ && targetType.getAccessType() === basic_1.TableAccessType.hashed) {
41331
+ const message = "Implicit or explicit index operation on hashed table is not possible";
41332
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
41333
+ return;
41334
+ }
41238
41335
  if (node.findDirectTokenByText("TABLE")
41239
41336
  && node.findDirectTokenByText("INDEX")
41240
41337
  && targetType.isWithHeader() === false) {
@@ -43134,7 +43231,7 @@ class SelectLoop {
43134
43231
  runSyntax(node, input) {
43135
43232
  const s = node.findDirectExpression(Expressions.Select);
43136
43233
  if (s) {
43137
- select_1.Select.runSyntax(s, input);
43234
+ select_1.Select.runSyntax(s, input, false, true);
43138
43235
  }
43139
43236
  }
43140
43237
  }
@@ -51972,27 +52069,27 @@ class CDSParser {
51972
52069
  }
51973
52070
  let tokens = cds_lexer_1.CDSLexer.run(file);
51974
52071
  tokens = tokens.filter(t => !(t instanceof tokens_1.Comment));
51975
- let res = combi_1.Combi.run(new Expressions.CDSDefineView(), tokens, version_1.defaultVersion);
52072
+ let res = combi_1.Combi.run(new Expressions.CDSDefineView(), tokens, version_1.defaultRelease);
51976
52073
  if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
51977
- res = combi_1.Combi.run(new Expressions.CDSDefineAbstract(), tokens, version_1.defaultVersion);
52074
+ res = combi_1.Combi.run(new Expressions.CDSDefineAbstract(), tokens, version_1.defaultRelease);
51978
52075
  }
51979
52076
  if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
51980
- res = combi_1.Combi.run(new Expressions.CDSDefineProjection(), tokens, version_1.defaultVersion);
52077
+ res = combi_1.Combi.run(new Expressions.CDSDefineProjection(), tokens, version_1.defaultRelease);
51981
52078
  }
51982
52079
  if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
51983
- res = combi_1.Combi.run(new Expressions.CDSAnnotate(), tokens, version_1.defaultVersion);
52080
+ res = combi_1.Combi.run(new Expressions.CDSAnnotate(), tokens, version_1.defaultRelease);
51984
52081
  }
51985
52082
  if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
51986
- res = combi_1.Combi.run(new Expressions.CDSDefineCustom(), tokens, version_1.defaultVersion);
52083
+ res = combi_1.Combi.run(new Expressions.CDSDefineCustom(), tokens, version_1.defaultRelease);
51987
52084
  }
51988
52085
  if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
51989
- res = combi_1.Combi.run(new Expressions.CDSDefineTableFunction(), tokens, version_1.defaultVersion);
52086
+ res = combi_1.Combi.run(new Expressions.CDSDefineTableFunction(), tokens, version_1.defaultRelease);
51990
52087
  }
51991
52088
  if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
51992
- res = combi_1.Combi.run(new Expressions.CDSExtendView(), tokens, version_1.defaultVersion);
52089
+ res = combi_1.Combi.run(new Expressions.CDSExtendView(), tokens, version_1.defaultRelease);
51993
52090
  }
51994
52091
  if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
51995
- res = combi_1.Combi.run(new Expressions.CDSDefineHierarchy(), tokens, version_1.defaultVersion);
52092
+ res = combi_1.Combi.run(new Expressions.CDSDefineHierarchy(), tokens, version_1.defaultRelease);
51996
52093
  }
51997
52094
  if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
51998
52095
  return undefined;
@@ -53340,10 +53437,7 @@ class Config {
53340
53437
  for (const rule of sorted) {
53341
53438
  rules[rule.getMetadata().key] = rule.getConfig();
53342
53439
  }
53343
- let version = version_1.defaultVersion;
53344
- if (ver) {
53345
- version = ver;
53346
- }
53440
+ const version = ver;
53347
53441
  // defaults: dont skip anything, report everything. The user can decide to skip stuff
53348
53442
  // its difficult to debug errors not being reported
53349
53443
  const config = {
@@ -53451,42 +53545,54 @@ class Config {
53451
53545
  return this.config.syntax;
53452
53546
  }
53453
53547
  getRelease() {
53454
- return (0, version_1.versionToABAPRelease)(this.getVersion());
53548
+ const v = this.config.syntax.version;
53549
+ if (v !== undefined && typeof v !== "string") {
53550
+ return version_1.Release[v.release];
53551
+ }
53552
+ if (this.config.global === undefined || v === undefined) {
53553
+ return version_1.defaultRelease;
53554
+ }
53555
+ return (0, version_1.versionToABAPRelease)(v);
53455
53556
  }
53456
53557
  getOpenABAP() {
53457
53558
  return this.config.syntax.openABAP === true;
53458
53559
  }
53459
53560
  getVersion() {
53460
- if (this.config.global === undefined || this.config.syntax.version === undefined) {
53461
- return version_1.defaultVersion;
53561
+ const v = this.config.syntax.version;
53562
+ if (this.config.global === undefined || v === undefined || typeof v !== "string") {
53563
+ return version_1.Version.v816;
53462
53564
  }
53463
- return this.config.syntax.version;
53565
+ return v;
53464
53566
  }
53465
53567
  getLanguageVersion() {
53466
53568
  var _a;
53569
+ const v = this.config.syntax.version;
53570
+ if (v !== undefined && typeof v !== "string") {
53571
+ return v.language;
53572
+ }
53467
53573
  return (_a = this.config.syntax.languageVersion) !== null && _a !== void 0 ? _a : version_1.LanguageVersion.Normal;
53468
53574
  }
53469
53575
  checkVersion() {
53470
- if (this.config.syntax.version === undefined) {
53471
- return; // handled in getVersion
53576
+ const version = this.config.syntax.version;
53577
+ if (version === undefined || typeof version !== "string") {
53578
+ return; // undefined handled in getVersion, object form is already explicit
53472
53579
  }
53473
53580
  let match = false;
53474
53581
  const vers = version_1.Version;
53475
53582
  for (const v in version_1.Version) {
53476
- if (vers[v] === this.config.syntax.version) {
53583
+ if (vers[v] === version) {
53477
53584
  match = true;
53478
53585
  break;
53479
53586
  }
53480
53587
  }
53481
53588
  if (match === false) {
53482
- this.config.syntax.version = version_1.defaultVersion;
53589
+ this.config.syntax.version = undefined;
53483
53590
  return;
53484
53591
  }
53485
- if (this.config.syntax.version === version_1.Version.Cloud) {
53486
- this.config.syntax.version = version_1.Version.Newest;
53592
+ if (version === version_1.Version.Cloud) {
53487
53593
  this.config.syntax.languageVersion = version_1.LanguageVersion.Cloud;
53488
53594
  }
53489
- else if (this.config.syntax.version === version_1.Version.OpenABAP) {
53595
+ else if (version === version_1.Version.OpenABAP) {
53490
53596
  this.config.syntax.version = version_1.Version.v702;
53491
53597
  this.config.syntax.openABAP = true;
53492
53598
  }
@@ -54169,9 +54275,9 @@ var DDLKind;
54169
54275
  class DDLParser {
54170
54276
  parse(file) {
54171
54277
  const tokens = ddl_lexer_1.DDLLexer.run(file);
54172
- let res = combi_1.Combi.run(new Expressions.DDLStructure(), tokens, version_1.defaultVersion);
54278
+ let res = combi_1.Combi.run(new Expressions.DDLStructure(), tokens, version_1.defaultRelease);
54173
54279
  if (res === undefined) {
54174
- res = combi_1.Combi.run(new Expressions.DDLTable(), tokens, version_1.defaultVersion);
54280
+ res = combi_1.Combi.run(new Expressions.DDLTable(), tokens, version_1.defaultRelease);
54175
54281
  }
54176
54282
  if (res === undefined || !(res[0] instanceof nodes_1.ExpressionNode)) {
54177
54283
  return undefined;
@@ -67317,7 +67423,7 @@ class Registry {
67317
67423
  }
67318
67424
  static abaplintVersion() {
67319
67425
  // magic, see build script "version.js"
67320
- return "2.119.44";
67426
+ return "2.119.46";
67321
67427
  }
67322
67428
  getDDICReferences() {
67323
67429
  return this.ddicReferences;
@@ -80866,6 +80972,7 @@ __exportStar(__webpack_require__(/*! ./strict_sql */ "../core/build/src/rules/st
80866
80972
  __exportStar(__webpack_require__(/*! ./superclass_final */ "../core/build/src/rules/superclass_final.js"), exports);
80867
80973
  __exportStar(__webpack_require__(/*! ./superfluous_value */ "../core/build/src/rules/superfluous_value.js"), exports);
80868
80974
  __exportStar(__webpack_require__(/*! ./sy_modification */ "../core/build/src/rules/sy_modification.js"), exports);
80975
+ __exportStar(__webpack_require__(/*! ./sy_read_restriction */ "../core/build/src/rules/sy_read_restriction.js"), exports);
80869
80976
  __exportStar(__webpack_require__(/*! ./tabl_enhancement_category */ "../core/build/src/rules/tabl_enhancement_category.js"), exports);
80870
80977
  __exportStar(__webpack_require__(/*! ./tables_declared_locally */ "../core/build/src/rules/tables_declared_locally.js"), exports);
80871
80978
  __exportStar(__webpack_require__(/*! ./try_without_catch */ "../core/build/src/rules/try_without_catch.js"), exports);
@@ -91930,6 +92037,168 @@ exports.SyModification = SyModification;
91930
92037
 
91931
92038
  /***/ },
91932
92039
 
92040
+ /***/ "../core/build/src/rules/sy_read_restriction.js"
92041
+ /*!******************************************************!*\
92042
+ !*** ../core/build/src/rules/sy_read_restriction.js ***!
92043
+ \******************************************************/
92044
+ (__unused_webpack_module, exports, __webpack_require__) {
92045
+
92046
+ "use strict";
92047
+
92048
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
92049
+ if (k2 === undefined) k2 = k;
92050
+ var desc = Object.getOwnPropertyDescriptor(m, k);
92051
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
92052
+ desc = { enumerable: true, get: function() { return m[k]; } };
92053
+ }
92054
+ Object.defineProperty(o, k2, desc);
92055
+ }) : (function(o, m, k, k2) {
92056
+ if (k2 === undefined) k2 = k;
92057
+ o[k2] = m[k];
92058
+ }));
92059
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
92060
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
92061
+ }) : function(o, v) {
92062
+ o["default"] = v;
92063
+ });
92064
+ var __importStar = (this && this.__importStar) || (function () {
92065
+ var ownKeys = function(o) {
92066
+ ownKeys = Object.getOwnPropertyNames || function (o) {
92067
+ var ar = [];
92068
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
92069
+ return ar;
92070
+ };
92071
+ return ownKeys(o);
92072
+ };
92073
+ return function (mod) {
92074
+ if (mod && mod.__esModule) return mod;
92075
+ var result = {};
92076
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
92077
+ __setModuleDefault(result, mod);
92078
+ return result;
92079
+ };
92080
+ })();
92081
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
92082
+ exports.SyReadRestriction = exports.SyReadRestrictionConf = void 0;
92083
+ const issue_1 = __webpack_require__(/*! ../issue */ "../core/build/src/issue.js");
92084
+ const Expressions = __importStar(__webpack_require__(/*! ../abap/2_statements/expressions */ "../core/build/src/abap/2_statements/expressions/index.js"));
92085
+ const _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ "../core/build/src/rules/_abap_rule.js");
92086
+ const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "../core/build/src/rules/_basic_rule_config.js");
92087
+ const _irule_1 = __webpack_require__(/*! ./_irule */ "../core/build/src/rules/_irule.js");
92088
+ const version_1 = __webpack_require__(/*! ../version */ "../core/build/src/version.js");
92089
+ const severity_1 = __webpack_require__(/*! ../severity */ "../core/build/src/severity.js");
92090
+ // ABAP Cloud: 17 system fields allowed for reading
92091
+ // https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/ABENSYSTEM_FIELDS.html
92092
+ const CLOUD_ALLOWED = new Set([
92093
+ "SY-BATCH",
92094
+ "SY-DBCNT",
92095
+ "SY-FDPOS",
92096
+ "SY-INDEX",
92097
+ "SY-LANGU",
92098
+ "SY-MANDT",
92099
+ "SY-MSGID",
92100
+ "SY-MSGNO",
92101
+ "SY-MSGTY",
92102
+ "SY-MSGV1",
92103
+ "SY-MSGV2",
92104
+ "SY-MSGV3",
92105
+ "SY-MSGV4",
92106
+ "SY-SUBRC",
92107
+ "SY-SYSID",
92108
+ "SY-TABIX",
92109
+ "SY-UNAME",
92110
+ ]);
92111
+ // ABAP for Key Users: 5 system fields allowed for reading
92112
+ const KEYUSER_ALLOWED = new Set([
92113
+ "SY-DBCNT",
92114
+ "SY-FDPOS",
92115
+ "SY-INDEX",
92116
+ "SY-SUBRC",
92117
+ "SY-TABIX",
92118
+ ]);
92119
+ class SyReadRestrictionConf extends _basic_rule_config_1.BasicRuleConfig {
92120
+ }
92121
+ exports.SyReadRestrictionConf = SyReadRestrictionConf;
92122
+ class SyReadRestriction extends _abap_rule_1.ABAPRule {
92123
+ constructor() {
92124
+ super(...arguments);
92125
+ this.conf = new SyReadRestrictionConf();
92126
+ }
92127
+ getMetadata() {
92128
+ return {
92129
+ key: "sy_read_restriction",
92130
+ title: "SY field read restriction",
92131
+ shortDescription: `Finds reads of SY fields not allowed in the current language version`,
92132
+ extendedInformation: `In ABAP Cloud, only 17 system fields may be read; reads of other fields produce a warning.\n` +
92133
+ `In ABAP for Key Users, only 5 system fields may be read:\n` +
92134
+ `SY-DBCNT, SY-FDPOS, SY-INDEX, SY-SUBRC, SY-TABIX.\n` +
92135
+ `https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/ABENSYSTEM_FIELDS.html`,
92136
+ tags: [_irule_1.RuleTag.SingleFile],
92137
+ badExample: `lv = sy-uname.`,
92138
+ goodExample: `IF sy-subrc = 0. ENDIF.`,
92139
+ };
92140
+ }
92141
+ getConfig() {
92142
+ return this.conf;
92143
+ }
92144
+ setConfig(conf) {
92145
+ this.conf = conf;
92146
+ }
92147
+ runParsed(file, _obj) {
92148
+ var _a;
92149
+ const issues = [];
92150
+ const langVer = this.reg.getConfig().getLanguageVersion();
92151
+ if (langVer === version_1.LanguageVersion.Normal) {
92152
+ return [];
92153
+ }
92154
+ const allowed = langVer === version_1.LanguageVersion.KeyUser ? KEYUSER_ALLOWED : CLOUD_ALLOWED;
92155
+ const severity = langVer === version_1.LanguageVersion.KeyUser ? this.conf.severity : severity_1.Severity.Warning;
92156
+ // Collect tokens that appear in writable Target positions — they're modifications,
92157
+ // handled by the sy_modification rule, not this one.
92158
+ const writeTokens = new Set();
92159
+ for (const t of ((_a = file.getStructure()) === null || _a === void 0 ? void 0 : _a.findAllExpressionsRecursive(Expressions.Target)) || []) {
92160
+ const concat = t.concatTokens().toUpperCase();
92161
+ if (!concat.startsWith("SY-")) {
92162
+ continue;
92163
+ }
92164
+ writeTokens.add(t.getFirstToken());
92165
+ }
92166
+ // Walk all tokens looking for the sequence SY - <fieldname>
92167
+ const tokens = file.getTokens();
92168
+ for (let i = 0; i + 2 < tokens.length; i++) {
92169
+ const sy = tokens[i];
92170
+ const dash = tokens[i + 1];
92171
+ const fld = tokens[i + 2];
92172
+ if (sy.getStr().toUpperCase() !== "SY") {
92173
+ continue;
92174
+ }
92175
+ if (dash.getStr() !== "-") {
92176
+ continue;
92177
+ }
92178
+ // Adjacent: no whitespace between the three tokens, on the same row
92179
+ if (sy.getEnd().getCol() !== dash.getStart().getCol()
92180
+ || dash.getEnd().getCol() !== fld.getStart().getCol()
92181
+ || sy.getRow() !== dash.getRow()
92182
+ || dash.getRow() !== fld.getRow()) {
92183
+ continue;
92184
+ }
92185
+ if (writeTokens.has(sy)) {
92186
+ continue;
92187
+ }
92188
+ const fieldName = "SY-" + fld.getStr().toUpperCase();
92189
+ if (!allowed.has(fieldName)) {
92190
+ const message = `SY field "${fieldName}" cannot be read in language version ${langVer}`;
92191
+ issues.push(issue_1.Issue.atToken(file, sy, message, this.getMetadata().key, severity));
92192
+ }
92193
+ }
92194
+ return issues;
92195
+ }
92196
+ }
92197
+ exports.SyReadRestriction = SyReadRestriction;
92198
+ //# sourceMappingURL=sy_read_restriction.js.map
92199
+
92200
+ /***/ },
92201
+
91933
92202
  /***/ "../core/build/src/rules/tabl_enhancement_category.js"
91934
92203
  /*!************************************************************!*\
91935
92204
  !*** ../core/build/src/rules/tabl_enhancement_category.js ***!
@@ -96713,12 +96982,8 @@ exports.NameValidator = NameValidator;
96713
96982
  "use strict";
96714
96983
 
96715
96984
  Object.defineProperty(exports, "__esModule", ({ value: true }));
96716
- exports.defaultRelease = exports.defaultVersion = exports.Release = exports.ReleaseList = exports.LanguageVersion = exports.Version = void 0;
96985
+ exports.defaultRelease = exports.Release = exports.ReleaseList = exports.LanguageVersion = exports.Version = void 0;
96717
96986
  exports.releaseAtLeast = releaseAtLeast;
96718
- exports.fromABAP = fromABAP;
96719
- exports.fromKernel = fromKernel;
96720
- exports.fromCloud = fromCloud;
96721
- exports.fromOP = fromOP;
96722
96987
  exports.versionToABAPRelease = versionToABAPRelease;
96723
96988
  exports.getPreviousVersion = getPreviousVersion;
96724
96989
  /** @deprecated Use ABAPRelease and Release instead */
@@ -96747,7 +97012,6 @@ var Version;
96747
97012
  * Release.Newest + {@link LanguageVersion.Cloud} pair.
96748
97013
  */
96749
97014
  Version["Cloud"] = "Cloud";
96750
- Version["Newest"] = "Newest";
96751
97015
  })(Version || (exports.Version = Version = {}));
96752
97016
  /**
96753
97017
  * Dialect / flavor axis, orthogonal to the on-prem/cloud release track.
@@ -96855,62 +97119,6 @@ exports.Release = Object.freeze(Object.assign(Object.assign({}, Object.fromEntri
96855
97119
  function releaseAtLeast(running, required) {
96856
97120
  return running.ordinal >= required.ordinal;
96857
97121
  }
96858
- // Lookup maps for the four constructor functions
96859
- const byAbap = new Map();
96860
- const byKernel = new Map();
96861
- const byOp = new Map();
96862
- const byCloud = new Map();
96863
- for (const r of exports.ReleaseList) {
96864
- if (r.abap !== null) {
96865
- byAbap.set(r.abap, r);
96866
- }
96867
- if (r.kernel !== null) {
96868
- byKernel.set(r.kernel, r);
96869
- }
96870
- if (r.cloud !== null) {
96871
- byCloud.set(r.cloud, r);
96872
- }
96873
- if (r.op !== null) {
96874
- // fromOP returns the *last* row at that op (the full on-prem release),
96875
- // so we overwrite on each iteration — later rows win.
96876
- byOp.set(r.op, r);
96877
- }
96878
- }
96879
- /** Look up a release by its ABAP name, e.g. "7.90", "740SP05", "9.16" */
96880
- function fromABAP(abap) {
96881
- const found = byAbap.get(abap);
96882
- if (found === undefined) {
96883
- throw new Error("Unknown ABAP release: " + abap);
96884
- }
96885
- return found;
96886
- }
96887
- /** Look up a release by its kernel release number, e.g. 753, 790, 916 */
96888
- function fromKernel(kernel) {
96889
- const found = byKernel.get(kernel);
96890
- if (found === undefined) {
96891
- throw new Error("Unknown kernel release: " + kernel);
96892
- }
96893
- return found;
96894
- }
96895
- /** Look up a release by its cloud release number, e.g. 793, 916 */
96896
- function fromCloud(cloud) {
96897
- const found = byCloud.get(cloud);
96898
- if (found === undefined) {
96899
- throw new Error("Unknown cloud release: " + cloud);
96900
- }
96901
- return found;
96902
- }
96903
- /**
96904
- * Look up a release by its on-prem release number, e.g. 758, 816.
96905
- * Returns the *last* cloud row at that op number, which is the full on-prem release.
96906
- */
96907
- function fromOP(op) {
96908
- const found = byOp.get(op);
96909
- if (found === undefined) {
96910
- throw new Error("Unknown on-prem release: " + op);
96911
- }
96912
- return found;
96913
- }
96914
97122
  // ---------------------------------------------------------------------------
96915
97123
  // Deprecated compatibility layer — keeps existing callers working
96916
97124
  // ---------------------------------------------------------------------------
@@ -96930,7 +97138,6 @@ const byDeprecated = Object.freeze({
96930
97138
  [Version.v757]: exports.Release["v757"],
96931
97139
  [Version.v758]: exports.Release["v758"],
96932
97140
  [Version.v816]: exports.Release["v816"],
96933
- [Version.Newest]: exports.Release["Newest"],
96934
97141
  [Version.Cloud]: exports.Release["Newest"], // Cloud → Newest sentinel
96935
97142
  [Version.OpenABAP]: exports.Release["v702"], // OpenABAP shares v702 release identity
96936
97143
  });
@@ -96941,8 +97148,7 @@ function versionToABAPRelease(v) {
96941
97148
  }
96942
97149
  return found;
96943
97150
  }
96944
- exports.defaultVersion = Version.v758;
96945
- exports.defaultRelease = exports.Release.v758;
97151
+ exports.defaultRelease = exports.Release.Newest;
96946
97152
  function getPreviousVersion(v) {
96947
97153
  if (v === Version.OpenABAP) {
96948
97154
  return Version.v702;
@@ -98256,7 +98462,25 @@ class Progress {
98256
98462
  this.bar.render();
98257
98463
  }
98258
98464
  }
98465
+ function validateVersion(version) {
98466
+ if (version === undefined) {
98467
+ return;
98468
+ }
98469
+ let known = false;
98470
+ if (typeof version === "string") {
98471
+ const vers = core_1.Version;
98472
+ known = Object.keys(core_1.Version).some(v => vers[v] === version);
98473
+ }
98474
+ else if (typeof version === "object" && typeof version.release === "string") {
98475
+ // new object form: {release, language}
98476
+ known = core_1.Release[version.release] !== undefined;
98477
+ }
98478
+ if (known === false) {
98479
+ throw "Error: Unknown version in abaplint.json";
98480
+ }
98481
+ }
98259
98482
  function loadConfig(filename) {
98483
+ var _a;
98260
98484
  // possible cases:
98261
98485
  // a) nothing specified, using abaplint.json from cwd
98262
98486
  // b) nothing specified, no abaplint.json in cwd
@@ -98296,10 +98520,7 @@ function loadConfig(filename) {
98296
98520
  process.stderr.write("Using config: " + f + "\n");
98297
98521
  const json = fs.readFileSync(f, "utf8");
98298
98522
  const parsed = JSON5.parse(json);
98299
- const vers = core_1.Version;
98300
- if (Object.keys(core_1.Version).some(v => vers[v] === parsed.syntax.version) === false) {
98301
- throw "Error: Unknown version in abaplint.json";
98302
- }
98523
+ validateVersion((_a = parsed.syntax) === null || _a === void 0 ? void 0 : _a.version);
98303
98524
  return {
98304
98525
  config: new core_1.Config(json),
98305
98526
  base: path.dirname(f) === process.cwd() ? "." : path.dirname(f),