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

95.74% Statements 45/47
92.85% Branches 13/14
100% Functions 1/1
95.74% Lines 45/47

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 45 46 471x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 384x 384x 384x 384x 384x 72x 72x 384x 384x 384x 384x 384x 384x 2x 2x 2x 2x 384x 381x 384x 1x 1x 381x 384x     381x 381x 384x 1x 1x 384x 384x 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 {Dynamic} from "../expressions/dynamic";
import {TypeUtils} from "../_type_utils";
import {FieldChain} from "../expressions/field_chain";
import {ReferenceType} from "../_reference";
import {SyntaxInput, syntaxIssue} from "../_syntax_input";
 
export class Write implements StatementSyntax {
  public runSyntax(node: StatementNode, input: SyntaxInput): void {
 
// todo, more
 
    let second = node.getChildren()[1];
    if (second.get() instanceof Expressions.WriteOffsetLength) {
      second = node.getChildren()[2];
    }
 
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      const type = Source.runSyntax(s, input);
      if (s === second
          && new TypeUtils(input.scope).isCharLike(type) === false
          && new TypeUtils(input.scope).isHexLike(type) === false) {
        const message = "Source not character like";
        input.issues.push(syntaxIssue(input, s.getFirstToken(), message));
        return;
      }
    }
 
    for (const s of node.findDirectExpression(Expressions.WriteOffsetLength)?.findDirectExpressions(Expressions.SimpleFieldChain2) || []) {
      FieldChain.runSyntax(s, input, ReferenceType.DataReadReference);
    }
 
    for (const s of node.findAllExpressions(Expressions.Dynamic)) {
      Dynamic.runSyntax(s, input);
    }
 
    const target = node.findDirectExpression(Expressions.Target);
    if (target) {
      Target.runSyntax(target, input);
    }
 
  }
}