All files / src/abap/5_syntax/expressions cond_body.ts

95.45% Statements 42/44
87.5% Branches 7/8
100% Functions 1/1
95.45% Lines 42/44

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 441x 1x 1x 1x 1x 1x 1x 1x 1x 1x 34x 34x 34x 34x 34x     34x 34x 34x 34x 10x 10x 34x 34x 36x 36x 34x 34x 34x 61x 32x 61x 29x 29x 61x 34x 34x 10x 10x 34x 34x 34x 1x
import {ExpressionNode} from "../../nodes";
import * as Expressions from "../../2_statements/expressions";
import {Source} from "./source";
import {Let} from "./let";
import {Cond} from "./cond";
import {AbstractType} from "../../types/basic/_abstract_type";
import {SyntaxInput} from "../_syntax_input";
 
export class CondBody {
  public runSyntax(
    node: ExpressionNode | undefined,
    input: SyntaxInput,
    targetType: AbstractType | undefined): AbstractType | undefined {
 
    if (node === undefined) {
      return undefined;
    }
 
    let scoped = false;
    const l = node.findDirectExpression(Expressions.Let);
    if (l) {
      scoped = new Let().runSyntax(l, input);
    }
 
    for (const s of node.findDirectExpressions(Expressions.Cond)) {
      new Cond().runSyntax(s, input);
    }
 
    let type: AbstractType | undefined = undefined;
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      if (type === undefined) {
        type = new Source().runSyntax(s, input, targetType);
      } else {
        new Source().runSyntax(s, input, targetType);
      }
    }
 
    if (scoped === true) {
      input.scope.pop(node.getLastToken().getEnd());
    }
 
    return type;
  }
}