All files / src/abap/2_statements/statements move.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 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 920x 1x 1x
import {IStatement} from "./_statement";
import {verNot, tok, ver, seq, alt, altPrio, plus} from "../combi";
import {Target, Source} from "../expressions";
import {Version} from "../../../version";
import {WPlus, WDash} from "../../1_lexer/tokens";
import {IStatementRunnable} from "../statement_runnable";
 
export class Move implements IStatement {
 
  public getMatcher(): IStatementRunnable {
 
    const mov = verNot(Version.Cloud, "MOVE");
 
    const move = seq(mov,
                     altPrio(
                       seq("EXACT", Source, "TO", Target),
                       seq(Source, altPrio("?TO", "TO"), Target)));
 
 
    const calcAssign = ver(Version.v754,
                           alt(seq(tok(WPlus), "="),
                               seq(tok(WDash), "="),
                               "/=",
                               "*=",
                               "&&="));
 
    const equals = altPrio(altPrio("=", "?="), calcAssign);
 
// todo, move "?=" to CAST?
    const eq = seq(plus(seq(Target, equals)), Source);
 
    return altPrio(move, eq);
  }
 
}