@abaplint/runtime 2.7.149 → 2.7.150

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.
@@ -5,6 +5,41 @@ const binary_search_1 = require("../binary_search");
5
5
  const compare_1 = require("../compare");
6
6
  const types_1 = require("../types");
7
7
  /** startIndex = javascript index, return ABAP index */
8
+ function searchWithKeyEarlyExit(arr, withKey, startIndex = 0, usesTableLine, firstKeyName, firstValue) {
9
+ const isStructured = arr[0] instanceof types_1.Structure;
10
+ for (let index = startIndex; index < arr.length; index++) {
11
+ const a = arr[index];
12
+ let row = undefined;
13
+ if (usesTableLine === false && isStructured === true) {
14
+ row = a.get();
15
+ }
16
+ else {
17
+ row = isStructured ? Object.assign({ table_line: a }, a.get()) : { table_line: a };
18
+ }
19
+ if (withKey(row) === true) {
20
+ return {
21
+ found: a,
22
+ foundIndex: index + 1,
23
+ };
24
+ }
25
+ /*
26
+ console.dir(row);
27
+ console.dir(row[firstKeyName.toLowerCase()]);
28
+ console.dir(firstValue);
29
+ */
30
+ if ((0, compare_1.gt)(row[firstKeyName.toLowerCase()], firstValue)) {
31
+ return {
32
+ found: undefined,
33
+ foundIndex: 0,
34
+ };
35
+ }
36
+ }
37
+ return {
38
+ found: undefined,
39
+ foundIndex: 0,
40
+ };
41
+ }
42
+ /** startIndex = javascript index, return ABAP index */
8
43
  function searchWithKey(arr, withKey, startIndex = 0, usesTableLine) {
9
44
  const isStructured = arr[0] instanceof types_1.Structure;
10
45
  for (let index = startIndex; index < arr.length; index++) {
@@ -121,8 +156,7 @@ function readTable(table, options) {
121
156
  const startIndex = (0, binary_search_1.binarySearchFrom)(arr, 0, arr.length, firstKeyName.toLowerCase(), firstValue) - 1;
122
157
  // console.dir("startindex: " + startIndex);
123
158
  if (startIndex >= 0) {
124
- // todo: early exit if not found
125
- const searchResult = searchWithKey(arr, options.withKey, startIndex, options.usesTableLine);
159
+ const searchResult = searchWithKeyEarlyExit(arr, options.withKey, startIndex, options.usesTableLine, firstKeyName, firstValue);
126
160
  // console.dir(searchResult);
127
161
  found = searchResult.found;
128
162
  foundIndex = searchResult.foundIndex;
@@ -79,7 +79,7 @@ export declare class HashedTable implements ITable {
79
79
  clear(): void;
80
80
  set(tab: HashedTable | TableRowType): ITable;
81
81
  getHeader(): TableRowType;
82
- private getValue;
82
+ private cloneRow;
83
83
  }
84
84
  export declare class Table implements ITable {
85
85
  private value;
@@ -109,6 +109,6 @@ export declare class Table implements ITable {
109
109
  append(item: TableRowType): any;
110
110
  appendInitial(): TableRowType;
111
111
  sort(compareFn: (a: TableRowType, b: TableRowType) => number): void;
112
- private getValue;
112
+ private cloneRow;
113
113
  }
114
114
  export {};
@@ -9,6 +9,7 @@ const field_symbol_1 = require("./field_symbol");
9
9
  const data_reference_1 = require("./data_reference");
10
10
  const insert_internal_1 = require("../statements/insert_internal");
11
11
  const sort_1 = require("../statements/sort");
12
+ // const FEATURE_SHARED_TABLES = true;
12
13
  var TableAccessType;
13
14
  (function (TableAccessType) {
14
15
  TableAccessType["standard"] = "STANDARD";
@@ -159,7 +160,7 @@ class HashedTable {
159
160
  return { value: undefined, subrc: 4 };
160
161
  }
161
162
  else {
162
- const val = this.getValue(data);
163
+ const val = this.cloneRow(data);
163
164
  for (const loopController of this.loops.values()) {
164
165
  loopController.array.push(val);
165
166
  }
@@ -230,7 +231,7 @@ class HashedTable {
230
231
  return this.header;
231
232
  }
232
233
  ///////////////////////////
233
- getValue(item) {
234
+ cloneRow(item) {
234
235
  // make sure to do conversion if needed
235
236
  if (typeof item === "number") {
236
237
  const tmp = (0, clone_1.clone)(this.getRowType());
@@ -355,7 +356,7 @@ class Table {
355
356
  }
356
357
  let val;
357
358
  if (noClone === false) {
358
- val = this.getValue(item);
359
+ val = this.cloneRow(item);
359
360
  }
360
361
  else {
361
362
  val = item;
@@ -414,7 +415,7 @@ class Table {
414
415
  return ref;
415
416
  }
416
417
  else {
417
- const val = this.getValue(item);
418
+ const val = this.cloneRow(item);
418
419
  this.value.push(val);
419
420
  return val;
420
421
  }
@@ -431,7 +432,7 @@ class Table {
431
432
  this.value.sort(compareFn);
432
433
  }
433
434
  ///////////////////////////
434
- getValue(item) {
435
+ cloneRow(item) {
435
436
  // make sure to do conversion if needed
436
437
  if (typeof item === "number") {
437
438
  const tmp = (0, clone_1.clone)(this.getRowType());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/runtime",
3
- "version": "2.7.149",
3
+ "version": "2.7.150",
4
4
  "description": "Transpiler - Runtime",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/src/index.d.ts",