All files / src/abap/2_statements result.ts

100% Statements 47/47
100% Branches 8/8
100% Functions 7/7
100% Lines 47/47

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 471x 1x 1x 1x 1x 1x 1x 1x 1x 1x 503267x 503267x 503267x 503267x 503267x 503267x 67654x 67654x 503267x 1x 1x 4240970x 4240970x 1x 1x 435613x 435613x 435613x 435613x 1x 1x 584049x 584049x 1x 1x 834525x 834525x 1x 1x 403701x 403701x 1x 1x 5319672x 5319672x 1x 1x
import {AbstractToken} from "../1_lexer/tokens/abstract_token";
import {ExpressionNode} from "../nodes/expression_node";
import {TokenNode} from "../nodes/token_node";
 
export class Result {
  private readonly tokens: readonly AbstractToken[];
  private readonly tokenIndex: number;
  private nodes: (ExpressionNode | TokenNode)[] | undefined;
 
  public constructor(tokens: readonly AbstractToken[], tokenIndex: number, nodes?: (ExpressionNode | TokenNode)[]) {
// tokens: all tokens, from the tokenIndex = not yet matched
// nodes: matched tokens
    this.tokens = tokens;
    this.tokenIndex = tokenIndex;
    this.nodes = nodes;
    if (this.nodes === undefined) {
      this.nodes = [];
    }
  }
 
  public peek(): AbstractToken {
    return this.tokens[this.tokenIndex];
  }
 
  public shift(node: ExpressionNode | TokenNode): Result {
    const cp = this.nodes!.slice();
    cp.push(node);
    return new Result(this.tokens, this.tokenIndex + 1, cp);
  }
 
  public popNode(): ExpressionNode | TokenNode | undefined {
    return this.nodes!.pop();
  }
 
  public getNodes(): (ExpressionNode | TokenNode)[] {
    return this.nodes!;
  }
 
  public setNodes(n: (ExpressionNode | TokenNode)[]): void {
    this.nodes = n;
  }
 
  public remainingLength(): number {
    return this.tokens.length - this.tokenIndex;
  }
 
}