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

95.45% Statements 42/44
91.66% Branches 11/12
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 32x 32x 32x 32x 32x     32x 32x 32x 32x 10x 10x 31x 32x 33x 33x 31x 31x 32x 55x 29x 55x 26x 26x 55x 31x 32x 9x 9x 31x 31x 31x 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): AbstractType | undefined {
 
    if (node === undefined) {
      return undefined;
    }
 
    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 type;
  }
}