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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 566x 566x 566x 566x 150x 150x 566x 566x 566x 566x 566x 150x 150x 150x 41x 41x 150x 566x 566x 566x 564x 566x 433x 433x 2x 2x 433x 564x 564x 564x 1x | import {ExpressionNode, StatementNode} from "../../nodes";
import {TypedIdentifier} from "../../types/_typed_identifier";
import {BasicTypes} from "../basic_types";
import * as Expressions from "../../2_statements/expressions";
import {UnknownType} from "../../types/basic";
import {ScopeType} from "../_scope_type";
import {TypeTableKey} from "./type_table_key";
import {SyntaxInput} from "../_syntax_input";
export class TypeTable {
public static runSyntax(node: ExpressionNode | StatementNode, input: SyntaxInput,
qualifiedNamePrefix?: string): TypedIdentifier | undefined {
// todo, input is currently the statement, but should be the expression?
let nameExpr = node.findFirstExpression(Expressions.DefinitionName);
if (nameExpr === undefined) {
nameExpr = node.findFirstExpression(Expressions.NamespaceSimpleName);
}
if (nameExpr === undefined) {
return undefined;
}
const name = nameExpr.getFirstToken();
let qualifiedName = qualifiedNamePrefix || "";
if (node.getFirstToken().getStr().toUpperCase() === "TYPES") {
qualifiedName = qualifiedName + name.getStr();
if (input.scope.getType() === ScopeType.ClassDefinition
|| input.scope.getType() === ScopeType.Interface) {
qualifiedName = input.scope.getName() + "=>" + qualifiedName;
}
}
let type = new BasicTypes(input).parseTable(node, qualifiedName);
if (type === undefined) {
return new TypedIdentifier(name, input.filename, new UnknownType("TableType, fallback"));
}
for (const tt of node.findAllExpressions(Expressions.TypeTableKey)) {
const error = TypeTableKey.runSyntax(tt, type);
if (error) {
type = error;
}
}
return new TypedIdentifier(name, input.filename, type);
}
} |