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 380x 380x 380x 380x 380x 70x 70x 380x 380x 380x 380x 380x 380x 2x 2x 2x 2x 380x 377x 380x 1x 1x 377x 380x 377x 377x 380x 1x 1x 380x 380x 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);
}
}
} |