All files / src/abap/2_statements/statements type.ts

100% Statements 34/34
100% Branches 1/1
100% Functions 1/1
100% Lines 34/34

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 341x 1x 1x 1x 1x 1x 1x 1x 1x 1x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 28x 1x 1x
import {IStatement} from "./_statement";
import {seq, alt, per, opt, ver, altPrio, plus} from "../combi";
import * as Expressions from "../expressions";
import {Release} from "../../../version";
import {IStatementRunnable} from "../statement_runnable";
import {lobHandleType, lobKind, lobColumns} from "../expressions/_lob_handle_type";
 
export class Type implements IStatement {
 
  public getMatcher(): IStatementRunnable {
    const simple = per(Expressions.Type, Expressions.Decimals, Expressions.Length);
 
    const clientSpecified = ver(Release.v760, seq("TYPE", Expressions.TypeName, "CLIENT", "SPECIFIED",
                                                  Expressions.FieldChain,
                                                  opt(plus(seq(lobKind(), lobColumns())))));
 
    const anyStructure = ver(Release.v916, seq("TYPE", "ANY", "STRUCTURE",
                                               opt(seq("CONTAINING",
                                                       plus(seq(Expressions.DefinitionName, "TYPE", Expressions.TypeSimpleRef))))));
 
    const def = seq(Expressions.NamespaceSimpleName,
                    opt(Expressions.ConstantFieldLength),
                    opt(altPrio(ver(Release.v731, lobHandleType()), clientSpecified, anyStructure,
                                alt(simple, Expressions.TypeTable, Expressions.TypeStructure))));
 
// todo, BOXED is only allowed with structures inside structures?
    const boxed = ver(Release.v702, "BOXED");
 
    const ret = seq("TYPES", def, opt(boxed));
 
    return ret;
  }
 
}