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

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

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