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 388x 388x 388x 388x 388x 75x 75x 388x 388x 388x 388x 388x 388x 2x 2x 2x 2x 388x 385x 388x 1x 1x 385x 388x 385x 385x 388x 1x 1x 388x 388x 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);
}
}
} |