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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x 6x 6x 14x 14x 6x 6x 6x 8x 8x 6x 6x 6x 6x 2x 2x 6x 6x 6x 8x 6x 6x 6x 4x 4x 4x 4x 4x 6x 6x 6x 1x 1x 1x 1x 1x 6x 6x 6x 1x 1x 1x 1x 1x 6x 6x 1x | import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {InlineData} from "../expressions/inline_data";
import {TimeType, DateType, PackedType, CharacterType, UTCLongType} from "../../types/basic";
import {Source} from "../expressions/source";
import {Target} from "../expressions/target";
import {StatementSyntax} from "../_statement_syntax";
import {SyntaxInput} from "../_syntax_input";
export class Convert implements StatementSyntax {
public runSyntax(node: StatementNode, input: SyntaxInput): void {
// todo, the source must be of a specific type
for (const s of node.findDirectExpressions(Expressions.Source)) {
Source.runSyntax(s, input);
}
const timeTargets = node.findExpressionsAfterToken("TIME");
for (const timeTarget of timeTargets) {
const concat = node.concatTokens().toUpperCase();
if (timeTarget?.get() instanceof Expressions.Target) {
const inline = timeTarget?.findDirectExpression(Expressions.InlineData);
if (inline) {
let targetType = new TimeType();
if (concat.includes("DAYLIGHT SAVING TIME " + inline.concatTokens().toUpperCase())) {
targetType = new CharacterType(1);
}
InlineData.runSyntax(inline, input, targetType);
} else {
Target.runSyntax(timeTarget, input);
}
}
}
const dateTarget = node.findExpressionAfterToken("DATE");
if (dateTarget?.get() instanceof Expressions.Target) {
const inline = dateTarget?.findDirectExpression(Expressions.InlineData);
if (inline) {
InlineData.runSyntax(inline, input, new DateType());
} else {
Target.runSyntax(dateTarget, input);
}
}
const stampTarget = node.findExpressionAfterToken("STAMP");
if (stampTarget?.get() instanceof Expressions.Target) {
const inline = stampTarget?.findDirectExpression(Expressions.InlineData);
if (inline) {
InlineData.runSyntax(inline, input, new PackedType(8, 0));
} else {
Target.runSyntax(stampTarget, input);
}
}
const utclongTarget = node.findExpressionAfterToken("UTCLONG");
if (utclongTarget?.get() instanceof Expressions.Target) {
const inline = utclongTarget?.findDirectExpression(Expressions.InlineData);
if (inline) {
InlineData.runSyntax(inline, input, new UTCLongType());
} else {
Target.runSyntax(utclongTarget, input);
}
}
}
}
|