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

100% Statements 38/38
90% Branches 9/10
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 38 391x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 4x 4x 4x 5x 5x 5x 4x 4x 2x 2x 4x 4x 3x 3x 1x 3x 2x 2x 3x 4x 4x 1x  
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {Target} from "../expressions/target";
import {Source} from "../expressions/source";
import {XStringType} from "../../types/basic";
import {InlineData} from "../expressions/inline_data";
import {Dynamic} from "../expressions/dynamic";
import {StatementSyntax} from "../_statement_syntax";
import {SyntaxInput} from "../_syntax_input";
 
export class CallTransformation implements StatementSyntax {
  public runSyntax(node: StatementNode, input: SyntaxInput): void {
 
    const resultParameters = node.findExpressionAfterToken("RESULT");
    const resultSources = new Set(
      resultParameters?.findAllExpressions(Expressions.SimpleSource3) || [],
    );
 
    for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
      const isResult = resultSources.has(s);
      Source.runSyntax(s, input, undefined, isResult, false, isResult === false);
    }
 
    for (const d of node.findAllExpressions(Expressions.Dynamic)) {
      Dynamic.runSyntax(d, input);
    }
 
    for (const t of node.findAllExpressions(Expressions.Target)) {
      const inline = t?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        InlineData.runSyntax(inline, input, XStringType.get());
      } else {
        Target.runSyntax(t, input);
      }
    }
 
  }
}