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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 101x 101x 101x 101x 101x 101x 101x 101x 101x 101x 101x 99x 99x 101x 101x 2x 2x 101x 47x 47x 101x 101x 101x 101x 1x 1x 1x 1x 100x 100x 100x 100x 100x 100x 100x 1x | import {ExpressionNode, StatementNode} from "../../nodes"; import {TypedIdentifier, IdentifierMeta} from "../../types/_typed_identifier"; import {Source} from "./source"; import * as Expressions from "../../2_statements/expressions"; import {AbstractType} from "../../types/basic/_abstract_type"; import {BasicTypes} from "../basic_types"; import {UnknownType} from "../../types/basic/unknown_type"; import {ReferenceType} from "../_reference"; import {CheckSyntaxKey, SyntaxInput, syntaxIssue} from "../_syntax_input"; import {VoidType} from "../../types/basic"; export class InlineFieldDefinition { public runSyntax( node: ExpressionNode | StatementNode, input: SyntaxInput, targetType?: AbstractType): AbstractType | undefined { let type: AbstractType | undefined = undefined; const field = node.findDirectExpression(Expressions.Field)?.getFirstToken(); if (field === undefined) { return undefined; } const source = node.findDirectExpression(Expressions.Source); if (source) { type = new Source().runSyntax(source, input); } const typeName = node.findDirectExpression(Expressions.TypeName); if (typeName) { type = new BasicTypes(input).parseType(typeName); } if (targetType !== undefined) { type = targetType; } if (type === undefined) { type = new UnknownType("InlineFieldDefinition, fallback"); } const name = field.getStr(); if (input.scope.findVariable(name) !== undefined) { const message = `Variable ${name} already defined`; input.issues.push(syntaxIssue(input, node.getFirstToken(), message)); return new VoidType(CheckSyntaxKey); } const identifier = new TypedIdentifier(field, input.filename, type, [IdentifierMeta.InlineDefinition]); input.scope.addReference(field, identifier, ReferenceType.DataWriteReference, input.filename); input.scope.addIdentifier(identifier); return type; } } |