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

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

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 321x 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 1x 1x
import {IStatement} from "./_statement";
import {seq, alt, opt, per, optPrio, altPrio, ver} from "../combi";
import {FSTarget, Target, Source, Dynamic, TypeName, AssignSource} from "../expressions";
import {IStatementRunnable} from "../statement_runnable";
import {Version} from "../../../version";
 
export class Assign implements IStatement {
 
  public getMatcher(): IStatementRunnable {
 
    const type = seq("TYPE", altPrio(Dynamic, TypeName));
    const like = seq("LIKE", altPrio(Dynamic, Source));
    const handle = seq("TYPE HANDLE", Source);
    const range = seq("RANGE", Source);
    const decimals = seq("DECIMALS", Source);
 
    const casting = seq("CASTING", opt(alt(like, handle, per(type, decimals))));
    const obsoleteType = seq("TYPE", Source, optPrio(decimals));
 
    const ret = seq("ASSIGN",
                    opt(seq(Target, "INCREMENT")),
                    AssignSource,
                    "TO",
                    FSTarget,
                    opt(altPrio(casting, obsoleteType)),
                    opt(range),
                    opt(ver(Version.v757, "ELSE UNASSIGN")));
 
    return ret;
  }
 
}