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

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

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 381x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 4x 1x 1x
import {IStatement} from "./_statement";
import {verNot, tok, ver, seq, alt, altPrio, star, opt} 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)),
                     opt(seq("PERCENTAGE", Source, opt(alt("LEFT", "RIGHT")))));
 
 
    const calcAssign = ver(Version.v754,
                           alt(seq(tok(WPlus), "="),
                               seq(tok(WDash), "="),
                               "/=",
                               "*=",
                               "&&="));
 
    const chained = seq("=", star(seq(Target, "=")));
 
    const equals = altPrio(altPrio(chained, "?="), calcAssign);
 
// todo, move "?=" to CAST?
    const eq = seq(Target, equals, Source);
 
    return altPrio(move, eq);
  }
 
}