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

94.28% Statements 33/35
87.5% Branches 7/8
100% Functions 1/1
94.28% Lines 33/35

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 351x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 275x 275x 275x 275x 275x 275x 275x 275x 275x 2x 2x 275x 237x 275x     237x 237x 275x 1x 1x 275x 275x 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";
 
export class Write implements StatementSyntax {
  public runSyntax(node: StatementNode, scope: CurrentScope, filename: string): void {
 
// todo, more
 
    const second = node.getChildren()[1];
    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.Dynamic)) {
      new Dynamic().runSyntax(s, scope, filename);
    }
 
    const target = node.findDirectExpression(Expressions.Target);
    if (target) {
      new Target().runSyntax(target, scope, filename);
    }
 
  }
}