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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 64626x 64626x 64626x 64626x 64626x 64626x 64626x 64626x 64626x 64626x 64626x 39286x 39286x 64626x 1x 1x 66x 66x 1x 1x 20097x 20097x 1x 1x 1317x 1317x 1x 1x 611x 611x 1x 1x | import {AbstractToken} from "../1_lexer/tokens/abstract_token";
import {Identifier} from "../4_file_information/_identifier";
import {AbstractType} from "./basic/_abstract_type";
export const enum IdentifierMeta {
MethodImporting = "importing",
MethodExporting = "exporting",
MethodChanging = "changing",
MethodReturning = "returning",
EventParameter = "event_parameter",
FormParameter = "form_parameter",
ReadOnly = "read_only",
Tables = "tables",
Abstract = "abstract",
PassByValue = "pass_by_value",
InlineDefinition = "inline",
BuiltIn = "built-in",
DDIC = "ddic",
Static = "static",
Enum = "enum",
SelectionScreenTab = "selection_screen_tab",
// todo, MethodPreferred
// todo, Optional
}
export class TypedIdentifier extends Identifier {
private readonly type: AbstractType;
private readonly meta: readonly IdentifierMeta[];
private readonly value: string | {[index: string]: string} | undefined;
public [Symbol.for("debug.description")](){
return `${this.constructor.name} ${this.getName()}:${this.getType().constructor.name}`;
}
public static from(id: Identifier, type: TypedIdentifier | AbstractType, meta?: readonly IdentifierMeta[]): TypedIdentifier {
return new TypedIdentifier(id.getToken(), id.getFilename(), type, meta);
}
public constructor(token: AbstractToken, filename: string, type: TypedIdentifier | AbstractType,
meta?: readonly IdentifierMeta[], value?: string | {[index: string]: string}) {
super(token, filename);
if (type instanceof TypedIdentifier) {
this.type = type.getType();
} else {
this.type = type;
}
this.value = value;
this.meta = [];
if (meta) {
this.meta = meta;
}
}
public toText(): string {
return "Identifier: ```" + this.getName() + "```";
}
public getType(): AbstractType {
return this.type;
}
public getMeta(): readonly IdentifierMeta[] {
return this.meta;
}
public getValue() {
return this.value;
}
} |