All files / src/abap/2_statements/statements perform.ts

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

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 441x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x 1x
import {IStatement} from "./_statement";
import {verNot, str, seq, opt, alt, tok, plus, altPrio} from "../combi";
import {ParenLeft, ParenRightW} from "../../1_lexer/tokens";
import * as Expressions from "../expressions";
import {Version} from "../../../version";
import {IStatementRunnable} from "../statement_runnable";
import {PerformTables, PerformUsing, PerformChanging} from "../expressions";
 
export class Perform implements IStatement {
 
  public getMatcher(): IStatementRunnable {
    const level = seq("LEVEL", Expressions.Source);
    const commit = alt(seq("ON COMMIT", opt(level)),
                       "ON ROLLBACK");
 
    const short = verNot(Version.Cloud, seq(Expressions.FormName,
                                            tok(ParenLeft),
                                            Expressions.IncludeName,
                                            tok(ParenRightW)));
 
    const program = seq("IN PROGRAM", opt(alt(Expressions.Dynamic, Expressions.IncludeName)));
 
    const found = str("IF FOUND");
 
    const full = seq(alt(Expressions.FormName, Expressions.Dynamic),
                     opt(verNot(Version.Cloud, program)));
 
    const normal = seq(opt(found),
                       opt(PerformTables),
                       opt(PerformUsing),
                       opt(PerformChanging),
                       opt(found),
                       opt(commit));
 
    const of = seq("OF", plus(Expressions.FormName));
 
    const ret = seq("PERFORM",
                    alt(short, full),
                    altPrio(of, normal));
 
    return ret;
  }
 
}