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

94.44% Statements 34/36
60% Branches 3/5
100% Functions 1/1
94.44% Lines 34/36

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 361x 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 1x 1x
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
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";
import {SyntaxInput, syntaxIssue} from "../_syntax_input";
 
export class GetBit implements StatementSyntax {
  public runSyntax(node: StatementNode, input: SyntaxInput): void {
 
    let lastType: AbstractType | undefined = undefined;
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      lastType = new Source().runSyntax(s, input);
    }
 
    if (lastType && new TypeUtils(input.scope).isHexLike(lastType) === false) {
      const message = "Input must be byte-like";
      input.issues.push(syntaxIssue(input, node.getFirstToken(), message));
      return;
    }
 
    for (const t of node.findDirectExpressions(Expressions.Target)) {
      const inline = t?.findDirectExpression(Expressions.InlineData);
      if (inline) {
        new InlineData().runSyntax(t, input, IntegerType.get());
      } else {
        new Target().runSyntax(t, input);
      }
    }
 
  }
}