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

88.05% Statements 59/67
54.54% Branches 12/22
100% Functions 1/1
88.05% Lines 59/67

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 57 58 59 60 61 62 63 64 65 66 67 681x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x 6x 6x 14x 14x 6x 6x 6x 8x 8x 6x 6x 6x 6x 2x 2x 6x 6x     6x 8x 6x 6x 6x 4x 4x 4x 4x     4x 6x 6x 6x 1x 1x 1x 1x     1x 6x 6x 6x 1x 1x 1x 1x     1x 6x 6x 1x  
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {InlineData} from "../expressions/inline_data";
import {TimeType, DateType, PackedType, CharacterType, UTCLongType} 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, 0));
      } else {
        Target.runSyntax(stampTarget, input);
      }
    }
 
    const utclongTarget = node.findExpressionAfterToken("UTCLONG");
    if (utclongTarget?.get() instanceof Expressions.Target) {
      const inline = utclongTarget?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        InlineData.runSyntax(inline, input, new UTCLongType());
      } else {
        Target.runSyntax(utclongTarget, input);
      }
    }
 
  }
}