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

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

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 431x 1x 1x 1x 1x 1x 1x 1x 1x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 60x 1x 1x
import {IStatement} from "./_statement";
import {seq, alt, opt, tok, per} from "../combi";
import {InstanceArrow, StaticArrow} from "../../1_lexer/tokens";
import {FSTarget, Target, Source, Dynamic, Field} from "../expressions";
import {IStatementRunnable} from "../statement_runnable";
 
export class Assign implements IStatement {
 
  public getMatcher(): IStatementRunnable {
    const component = seq("COMPONENT",
                          Source,
                          "OF STRUCTURE",
                          Source);
 
    const tableField = seq("TABLE FIELD", alt(Source, Dynamic));
 
    const arrow = alt(tok(InstanceArrow), tok(StaticArrow));
 
    const source = alt(seq(Source, opt(seq(arrow, Dynamic))),
                       component,
                       tableField,
                       seq(Dynamic, opt(seq(arrow, alt(Field, Dynamic)))));
 
    const type = seq("TYPE", alt(Dynamic, Source));
    const like = seq("LIKE", alt(Dynamic, Source));
    const handle = seq("TYPE HANDLE", Source);
    const range = seq("RANGE", Source);
    const decimals = seq("DECIMALS", Source);
 
    const casting = seq(opt("CASTING"), opt(alt(like, handle, per(type, decimals))));
 
    const ret = seq("ASSIGN",
                    opt(seq(Target, "INCREMENT")),
                    source,
                    "TO",
                    FSTarget,
                    casting,
                    opt(range));
 
    return ret;
  }
 
}