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

95.55% Statements 43/45
90.9% Branches 10/11
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 1x 1x 1x 329x 329x 329x 329x 329x 45x 45x 329x 329x 329x 329x 329x 329x 3x 3x 329x 282x 329x 1x 1x 282x 329x     282x 282x 329x 1x 1x 329x 329x 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 {Dynamic} from "../expressions/dynamic";
import {TypeUtils} from "../_type_utils";
import {FieldChain} from "../expressions/field_chain";
import {ReferenceType} from "../_reference";
 
export class Write implements StatementSyntax {
  public runSyntax(node: StatementNode, scope: CurrentScope, filename: string): void {
 
// todo, more
 
    let second = node.getChildren()[1];
    if (second.get() instanceof Expressions.WriteOffsetLength) {
      second = node.getChildren()[2];
    }
 
    for (const s of node.findAllExpressions(Expressions.Source)) {
      const type = new Source().runSyntax(s, scope, filename);
      if (s === second
          && new TypeUtils(scope).isCharLike(type) === false
          && new TypeUtils(scope).isHexLike(type) === false) {
        throw new Error("Source not character like");
      }
    }
 
    for (const s of node.findAllExpressions(Expressions.SimpleFieldChain2)) {
      new FieldChain().runSyntax(s, scope, filename, ReferenceType.DataReadReference);
    }
 
    for (const s of node.findAllExpressions(Expressions.Dynamic)) {
      new Dynamic().runSyntax(s, scope, filename);
    }
 
    const target = node.findDirectExpression(Expressions.Target);
    if (target) {
      new Target().runSyntax(target, scope, filename);
    }
 
  }
}