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 401476x 401476x 401476x 401476x 401476x 401476x 63235x 63235x 401476x 1x 1x 2154119x 2154119x 1x 1x 338241x 338241x 338241x 338241x 1x 1x 440726x 440726x 1x 1x 677235x 677235x 1x 1x 325905x 325905x 1x 1x 3104725x 3104725x 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;
  }
 
}