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

95.55% Statements 43/45
92.85% Branches 13/14
100% Functions 1/1
95.55% Lines 43/45

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 451x 1x 1x 1x 1x 1x 1x 1x 1x 1x 23x 23x 23x 23x 23x 23x     23x 23x 23x 23x 8x 8x 22x 23x 24x 24x 22x 22x 23x 42x 22x 42x 20x 20x 42x 22x 23x 7x 7x 22x 23x 23x 1x
import {ExpressionNode} from "../../nodes";
import {CurrentScope} from "../_current_scope";
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";
 
export class CondBody {
  public runSyntax(
    node: ExpressionNode | undefined,
    scope: CurrentScope,
    filename: string,
    targetType: AbstractType | undefined): AbstractType | undefined {
 
    if (node === undefined) {
      return targetType;
    }
 
    let scoped = false;
    const l = node.findDirectExpression(Expressions.Let);
    if (l) {
      scoped = new Let().runSyntax(l, scope, filename);
    }
 
    for (const s of node.findDirectExpressions(Expressions.Cond)) {
      new Cond().runSyntax(s, scope, filename);
    }
 
    let type: AbstractType | undefined = undefined;
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      if (type === undefined) {
        type = new Source().runSyntax(s, scope, filename);
      } else {
        new Source().runSyntax(s, scope, filename);
      }
    }
 
    if (scoped === true) {
      scope.pop(node.getLastToken().getEnd());
    }
 
    return targetType ? targetType : type;
  }
}