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

94.11% Statements 32/34
60% Branches 3/5
100% Functions 1/1
94.11% Lines 32/34

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 341x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 4x 4x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x     1x 1x 1x 1x
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {CurrentScope} from "../_current_scope";
import {Source} from "../expressions/source";
import {Target} from "../expressions/target";
import {StatementSyntax} from "../_statement_syntax";
import {IntegerType} from "../../types/basic";
import {InlineData} from "../expressions/inline_data";
import {AbstractType} from "../../types/basic/_abstract_type";
import {TypeUtils} from "../_type_utils";
 
export class GetBit implements StatementSyntax {
  public runSyntax(node: StatementNode, scope: CurrentScope, filename: string): void {
 
    let lastType: AbstractType | undefined = undefined;
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      lastType = new Source().runSyntax(s, scope, filename);
    }
 
    if (lastType && new TypeUtils(scope).isHexLike(lastType) === false) {
      throw new Error("Input must be byte-like");
    }
 
    for (const t of node.findDirectExpressions(Expressions.Target)) {
      const inline = t?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        new InlineData().runSyntax(t, scope, filename, IntegerType.get());
      } else {
        new Target().runSyntax(t, scope, filename);
      }
    }
 
  }
}