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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11x 11x 11x 11x 11x 11x 11x 6x 11x 5x 5x 5x 5x 5x 5x 3x 3x 5x 5x 1x 1x 1x 1x 5x 11x 10x 11x 20x 20x 10x 10x 1x | import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {TableType, StringType, VoidType, UnknownType, TableKeyType} from "../../types/basic";
import {InlineData} from "../expressions/inline_data";
import {Source} from "../expressions/source";
import {Target} from "../expressions/target";
import {StatementSyntax} from "../_statement_syntax";
import {TypeUtils} from "../_type_utils";
import {SyntaxInput, syntaxIssue} from "../_syntax_input";
export class Split implements StatementSyntax {
public runSyntax(node: StatementNode, input: SyntaxInput): void {
const intoTable = node.findTokenSequencePosition("INTO", "TABLE") !== undefined;
const type = intoTable ? new TableType(StringType.get(), {withHeader: false, keyType: TableKeyType.default}) : StringType.get();
for (const target of node.findAllExpressions(Expressions.Target)) {
const inline = target.findDirectExpression(Expressions.InlineData);
if (inline) {
InlineData.runSyntax(inline, input, type);
} else {
let targetType = Target.runSyntax(target, input);
if (intoTable) {
if (!(targetType instanceof TableType)
&& !(targetType instanceof UnknownType)
&& !(targetType instanceof VoidType)) {
const message = "Into must be table typed";
input.issues.push(syntaxIssue(input, target.getFirstToken(), message));
return;
}
if (targetType instanceof TableType) {
targetType = targetType.getRowType();
}
}
if (new TypeUtils(input.scope).isCharLikeStrict(targetType) === false) {
const message = "Incompatible, target not character like";
input.issues.push(syntaxIssue(input, node.getFirstToken(), message));
return;
}
}
}
for (const s of node.findDirectExpressions(Expressions.Source)) {
Source.runSyntax(s, input);
}
}
} |