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 464975x 464975x 464975x 464975x 464975x 464975x 65958x 65958x 464975x 1x 1x 3232076x 3232076x 1x 1x 399017x 399017x 399017x 399017x 1x 1x 530495x 530495x 1x 1x 773682x 773682x 1x 1x 373643x 373643x 1x 1x 4259053x 4259053x 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;
  }
 
}