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

93.75% Statements 30/32
33.33% Branches 1/3
100% Functions 1/1
93.75% Lines 30/32

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 321x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x     3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {TypedIdentifier} from "../../types/_typed_identifier";
import {StructureType, TableType, CharacterType, TableKeyType} from "../../types/basic";
import {BasicTypes} from "../basic_types";
import {StatementSyntax} from "../_statement_syntax";
import {SyntaxInput} from "../_syntax_input";
import {AssertError} from "../assert_error";
 
export class Ranges implements StatementSyntax {
  public runSyntax(node: StatementNode, input: SyntaxInput) {
    const nameToken = node.findFirstExpression(Expressions.SimpleName)?.getFirstToken();
 
    const typeExpression = node.findFirstExpression(Expressions.SimpleFieldChain2);
    if (typeExpression === undefined) {
      throw new AssertError("Ranges, unexpected node");
    }
 
    const found = new BasicTypes(input).parseType(typeExpression);
    if (found && nameToken) {
      const structure = new StructureType([
        {name: "sign", type: new CharacterType(1)},
        {name: "option", type: new CharacterType(2)},
        {name: "low", type: found},
        {name: "high", type: found},
      ]);
      const type = new TableType(structure, {withHeader: true, keyType: TableKeyType.default});
      const id = new TypedIdentifier(nameToken, input.filename, type);
      input.scope.addIdentifier(id);
    }
  }
}