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 363x 363x 363x 363x 363x 46x 46x 363x 363x 363x 363x 363x 363x 3x 3x 3x 3x 363x 359x 363x 1x 1x 359x 363x 359x 359x 363x 1x 1x 363x 363x 1x | import * as Expressions from "../../2_statements/expressions"; import {StatementNode} from "../../nodes"; import {Source} from "../expressions/source"; import {Target} from "../expressions/target"; import {StatementSyntax} from "../_statement_syntax"; import {Dynamic} from "../expressions/dynamic"; import {TypeUtils} from "../_type_utils"; import {FieldChain} from "../expressions/field_chain"; import {ReferenceType} from "../_reference"; import {SyntaxInput, syntaxIssue} from "../_syntax_input"; export class Write implements StatementSyntax { public runSyntax(node: StatementNode, input: SyntaxInput): void { // todo, more let second = node.getChildren()[1]; if (second.get() instanceof Expressions.WriteOffsetLength) { second = node.getChildren()[2]; } for (const s of node.findDirectExpressions(Expressions.Source)) { const type = Source.runSyntax(s, input); if (s === second && new TypeUtils(input.scope).isCharLike(type) === false && new TypeUtils(input.scope).isHexLike(type) === false) { const message = "Source not character like"; input.issues.push(syntaxIssue(input, s.getFirstToken(), message)); return; } } for (const s of node.findDirectExpression(Expressions.WriteOffsetLength)?.findDirectExpressions(Expressions.SimpleFieldChain2) || []) { FieldChain.runSyntax(s, input, ReferenceType.DataReadReference); } for (const s of node.findAllExpressions(Expressions.Dynamic)) { Dynamic.runSyntax(s, input); } const target = node.findDirectExpression(Expressions.Target); if (target) { Target.runSyntax(target, input); } } } |