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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 406x 406x 406x 406x 406x 397x 397x 406x 406x 1573x 1573x 1564x 733x 733x 733x 733x 1564x 19x 19x 6x 19x 13x 13x 19x 1573x 9x 9x 9x 9x 9x 1573x 406x 406x 6x 406x 400x 400x 400x 406x 87x 87x 400x 400x 400x 1x | import * as Expressions from "../../2_statements/expressions";
import * as Statements from "../../2_statements/statements";
import * as Structures from "../../3_structures/structures";
import {StructureNode, StatementNode} from "../../nodes";
import {TypedIdentifier} from "../../types/_typed_identifier";
import {IStructureComponent, VoidType} from "../../types/basic";
import {IncludeType} from "../statements/include_type";
import {Type} from "../statements/type";
import * as Basic from "../../types/basic";
import {ScopeType} from "../_scope_type";
import {SyntaxInput} from "../_syntax_input";
export class Types {
public runSyntax(node: StructureNode, input: SyntaxInput, qualifiedNamePrefix?: string): TypedIdentifier | undefined {
const name = node.findFirstExpression(Expressions.NamespaceSimpleName)!.getFirstToken();
const components: IStructureComponent[] = [];
let voidd: VoidType | Basic.UnknownType | undefined = undefined;
if (qualifiedNamePrefix === undefined) {
qualifiedNamePrefix = "";
}
for (const c of node.getChildren()) {
const ctyp = c.get();
if (c instanceof StatementNode) {
if (ctyp instanceof Statements.Type) {
const found = new Type().runSyntax(c, input, qualifiedNamePrefix + name.getStr() + "-");
if (found) {
components.push({name: found.getName(), type: found.getType()});
}
} else if (ctyp instanceof Statements.IncludeType) {
const found = new IncludeType().runSyntax(c, input);
if (found instanceof VoidType || found instanceof Basic.UnknownType) {
voidd = found;
} else {
components.push(...found);
}
}
} else if (c instanceof StructureNode && ctyp instanceof Structures.Types) {
const found = new Types().runSyntax(c, input, qualifiedNamePrefix + name.getStr() + "-");
if (found) {
components.push({name: found.getName(), type: found.getType()});
}
}
}
if (voidd) {
return new TypedIdentifier(name, input.filename, voidd);
} else if (components.length === 0) { // todo, remove this check
return undefined;
}
let qualifiedName = qualifiedNamePrefix + name.getStr();
if (input.scope.getType() === ScopeType.ClassDefinition
|| input.scope.getType() === ScopeType.Interface) {
qualifiedName = input.scope.getName() + "=>" + qualifiedName;
}
return new TypedIdentifier(name, input.filename, new Basic.StructureType(components, qualifiedName));
}
} |