All files / src/abap/5_syntax/statements convert.ts

89.47% Statements 51/57
43.75% Branches 7/16
100% Functions 1/1
89.47% Lines 51/57

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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 571x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 9x 9x 4x 4x 4x 5x 5x 4x 4x 4x 4x 1x 1x 4x 4x     4x 5x 4x 4x 4x 3x 3x 3x 3x     3x 4x 4x 4x 1x 1x 1x 1x     1x 4x 4x 1x
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {InlineData} from "../expressions/inline_data";
import {TimeType, DateType, PackedType, CharacterType} from "../../types/basic";
import {Source} from "../expressions/source";
import {Target} from "../expressions/target";
import {StatementSyntax} from "../_statement_syntax";
import {SyntaxInput} from "../_syntax_input";
 
export class Convert implements StatementSyntax {
  public runSyntax(node: StatementNode, input: SyntaxInput): void {
 
// todo, the source must be of a specific type
 
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      Source.runSyntax(s, input);
    }
 
    const timeTargets = node.findExpressionsAfterToken("TIME");
    for (const timeTarget of timeTargets) {
      const concat = node.concatTokens().toUpperCase();
      if (timeTarget?.get() instanceof Expressions.Target) {
        const inline = timeTarget?.findDirectExpression(Expressions.InlineData);
        if (inline) {
          let targetType = new TimeType();
          if (concat.includes("DAYLIGHT SAVING TIME " + inline.concatTokens().toUpperCase())) {
            targetType = new CharacterType(1);
          }
          InlineData.runSyntax(inline, input, targetType);
        } else {
          Target.runSyntax(timeTarget, input);
        }
      }
    }
 
    const dateTarget = node.findExpressionAfterToken("DATE");
    if (dateTarget?.get() instanceof Expressions.Target) {
      const inline = dateTarget?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        InlineData.runSyntax(inline, input, new DateType());
      } else {
        Target.runSyntax(dateTarget, input);
      }
    }
 
    const stampTarget = node.findExpressionAfterToken("STAMP");
    if (stampTarget?.get() instanceof Expressions.Target) {
      const inline = stampTarget?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        InlineData.runSyntax(inline, input, new PackedType(8, 4));
      } else {
        Target.runSyntax(stampTarget, input);
      }
    }
 
  }
}