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

93.54% Statements 29/31
33.33% Branches 1/3
100% Functions 1/1
93.54% Lines 29/31

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 311x 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 {CurrentScope} from "../_current_scope";
import {TypedIdentifier} from "../../types/_typed_identifier";
import {StructureType, TableType, CharacterType, TableKeyType} from "../../types/basic";
import {BasicTypes} from "../basic_types";
import {StatementSyntax} from "../_statement_syntax";
 
export class Ranges implements StatementSyntax {
  public runSyntax(node: StatementNode, scope: CurrentScope, filename: string) {
    const nameToken = node.findFirstExpression(Expressions.SimpleName)?.getFirstToken();
 
    const typeExpression = node.findFirstExpression(Expressions.FieldSub);
    if (typeExpression === undefined) {
      throw new Error("Ranges, unexpected node");
    }
 
    const found = new BasicTypes(filename, scope).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, filename, type);
      scope.addIdentifier(id);
    }
  }
}