All files / src/abap/2_statements/expressions component_compare.ts

100% Statements 35/35
100% Branches 1/1
100% Functions 1/1
100% Lines 35/35

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 351x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x
import {seq, opt, ver, tok, altPrio, plus, alt, Expression} from "../combi";
import {ComponentChainSimple, FieldSub, Constant, Source, CompareOperator} from ".";
import {WParenLeft, ParenRightW} from "../../1_lexer/tokens";
import {Version} from "../../../version";
import {IStatementRunnable} from "../statement_runnable";
 
export class ComponentCompare extends Expression {
  public getRunnable(): IStatementRunnable {
    const val = alt(FieldSub, Constant);
 
    const list = seq(tok(WParenLeft),
                     val,
                     plus(seq(",", val)),
                     tok(ParenRightW));
 
    const inn = seq(opt("NOT"), "IN", altPrio(Source, list));
 
    const sopt = seq("IS",
                     opt("NOT"),
                     altPrio("SUPPLIED",
                             "BOUND",
                             ver(Version.v750, seq("INSTANCE OF", Source)),
                             "REQUESTED",
                             "ASSIGNED",
                             "INITIAL"));
 
    const between = seq(opt("NOT"), "BETWEEN", Source, "AND", Source);
 
    const rett = seq(ComponentChainSimple, altPrio(seq(CompareOperator, Source), inn, between, sopt));
 
    const ret = seq(opt("NOT"), rett);
 
    return ret;
  }
}