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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 186x 186x 186x 186x 57x 57x 57x 57x 57x 3x 3x 3x 3x 54x 54x 57x 57x 54x 54x 57x 57x 57x 57x 57x 57x 57x 57x 57x 1x 1x 1x 1x 57x 182x 182x 182x 1x | import {ExpressionNode} from "../../nodes"; import {AnyType, CLikeType, CharacterType, NumericGenericType, NumericType, StringType, StructureType, UnknownType, VoidType} from "../../types/basic"; import {AbstractType} from "../../types/basic/_abstract_type"; import * as Expressions from "../../2_statements/expressions"; import {Source} from "./source"; import {TypeUtils} from "../_type_utils"; import {CheckSyntaxKey, SyntaxInput, syntaxIssue} from "../_syntax_input"; export class StringTemplate { public static runSyntax(node: ExpressionNode, input: SyntaxInput): AbstractType { const typeUtils = new TypeUtils(input.scope); const ret = StringType.get(); for (const templateSource of node.findAllExpressions(Expressions.StringTemplateSource)) { const s = templateSource.findDirectExpression(Expressions.Source); const type = Source.runSyntax(s, input, ret); if (type === undefined) { const message = "No target type determined"; input.issues.push(syntaxIssue(input, node.getFirstToken(), message)); return VoidType.get(CheckSyntaxKey); } else if ((typeUtils.isCharLike(type) === false && typeUtils.isHexLike(type) === false) || type instanceof StructureType) { const message = "String template, not character like, " + type.constructor.name; input.issues.push(syntaxIssue(input, node.getFirstToken(), message)); return VoidType.get(CheckSyntaxKey); } const format = templateSource.findDirectExpression(Expressions.StringTemplateFormatting); const formatConcat = format?.concatTokens(); for (const formatSource of format?.findAllExpressions(Expressions.Source) || []) { Source.runSyntax(formatSource, input); } if (format && formatConcat?.includes("ALPHA = ") && !(type instanceof UnknownType) && !(type instanceof VoidType) && !(type instanceof StringType) && !(type instanceof CLikeType) && !(type instanceof CharacterType) && !(type instanceof NumericGenericType) && !(type instanceof NumericType) && !(type instanceof AnyType)) { const message = `Cannot apply ALPHA to this type (${type.constructor.name})`; input.issues.push(syntaxIssue(input, format.getFirstToken(), message)); return VoidType.get(CheckSyntaxKey); } } return ret; } } |