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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 95x 71x 71x 73x 73x 72x 72x 2x 2x 2x 2x 72x 73x 69x 95x 8x 8x 93x 93x 93x 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 {SyntaxInput, syntaxIssue} from "../_syntax_input"; import {Source} from "./source"; export class FieldAssignment { public runSyntax( node: ExpressionNode | StatementNode, input: SyntaxInput, targetType: AbstractType | undefined): void { const fieldSub = node.findDirectExpression(Expressions.FieldSub); if (fieldSub === undefined) { const message = "FieldAssignment, FieldSub node not found"; input.issues.push(syntaxIssue(input, node.getFirstToken(), message)); return; } const s = node.findDirectExpression(Expressions.Source); if (s === undefined) { const message = "FieldAssignment, Source node not found"; input.issues.push(syntaxIssue(input, node.getFirstToken(), message)); return; } 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) { const message = `field ${text} does not exist in structure`; input.issues.push(syntaxIssue(input, node.getFirstToken(), message)); return; } } } type = context; } else if (targetType instanceof VoidType) { type = targetType; } new Source().runSyntax(s, input, type); } } |