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 70x 70x 70x 70x 70x 70x 70x 70x 70x 70x 70x 70x 70x 55x 55x 57x 57x 56x 56x 2x 2x 56x 57x 53x 70x 8x 8x 68x 68x 68x 1x 1x | import * as Expressions from "../../2_statements/expressions"; import {ExpressionNode, StatementNode} from "../../nodes"; import {StructureType, VoidType} from "../../types/basic"; import {AbstractType} from "../../types/basic/_abstract_type"; import {CurrentScope} from "../_current_scope"; import {Source} from "./source"; export class FieldAssignment { public runSyntax( node: ExpressionNode | StatementNode, scope: CurrentScope, filename: string, targetType: AbstractType | undefined): void { const fieldSub = node.findDirectExpression(Expressions.FieldSub); if (fieldSub === undefined) { throw new Error("FieldAssignment, FieldSub node not found"); } const s = node.findDirectExpression(Expressions.Source); if (s === undefined) { throw new Error("FieldAssignment, Source node not found"); } let type: AbstractType | undefined = undefined; if (targetType instanceof StructureType) { let context: AbstractType | undefined = targetType; for (const c of fieldSub.getChildren()) { const text = c.concatTokens(); if (text !== "-" && context instanceof StructureType) { context = context.getComponentByName(text); if (context === undefined && targetType.containsVoid() === false) { throw new Error(`field ${text} does not exist in structure`); } } } type = context; } else if (targetType instanceof VoidType) { type = targetType; } new Source().runSyntax(s, scope, filename, type); } } |