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 353x 353x 353x 353x 353x 46x 46x 353x 353x 353x 353x 353x 353x 3x 3x 3x 3x 353x 350x 353x 1x 1x 350x 353x 350x 350x 353x 1x 1x 353x 353x 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 = new 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) || []) { new FieldChain().runSyntax(s, input, ReferenceType.DataReadReference); } for (const s of node.findAllExpressions(Expressions.Dynamic)) { new Dynamic().runSyntax(s, input); } const target = node.findDirectExpression(Expressions.Target); if (target) { new Target().runSyntax(target, input); } } } |