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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 744x 744x 744x 744x 744x 744x 744x 3x 3x 741x 744x 125x 125x 741x 741x 744x 149x 744x 592x 592x 592x 741x 741x 741x 741x 741x 741x 744x 81x 81x 741x 741x 741x 1x | import {StatementNode} from "../../nodes"; import {CurrentScope} from "../_current_scope"; import {ObjectOriented} from "../_object_oriented"; import {ObjectReferenceType, VoidType} from "../../types/basic"; import {Identifier} from "../../1_lexer/tokens"; import {TypedIdentifier} from "../../types/_typed_identifier"; import {Position} from "../../../position"; import {BuiltIn} from "../_builtin"; import {ScopeType} from "../_scope_type"; import {StatementSyntax} from "../_statement_syntax"; export class ClassImplementation implements StatementSyntax { public runSyntax(node: StatementNode, scope: CurrentScope, filename: string): void { const helper = new ObjectOriented(scope); const className = helper.findClassName(node); scope.push(ScopeType.ClassImplementation, className, node.getFirstToken().getStart(), filename); const classDefinition = scope.findClassDefinition(className); if (classDefinition === undefined) { throw new Error("Class definition for \"" + className + "\" not found"); } for (const t of classDefinition.getTypeDefinitions().getAll()) { scope.addType(t.type); } const sup = scope.findClassDefinition(classDefinition.getSuperClass()); if (sup) { scope.addIdentifier(new TypedIdentifier(new Identifier(new Position(1, 1), "super"), BuiltIn.filename, new ObjectReferenceType(sup))); } else { // todo: instead of the void type, do proper typing, ie. only empty constructor method scope.addIdentifier(new TypedIdentifier(new Identifier(new Position(1, 1), "super"), BuiltIn.filename, new VoidType("noSuper"))); } scope.addIdentifier(new TypedIdentifier(new Identifier(new Position(1, 1), "me"), BuiltIn.filename, new ObjectReferenceType(classDefinition))); helper.addAliasedAttributes(classDefinition); // todo, this is not correct, take care of instance vs static const classAttributes = classDefinition.getAttributes(); scope.addList(classAttributes.getConstants()); scope.addList(classAttributes.getStatic()); for (const i of classAttributes.getInstance()) { scope.addExtraLikeType(i); } helper.fromSuperClassesAndInterfaces(classDefinition); } } |