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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 43x 43x 43x 43x 43x 43x 43x 43x 43x 10x 10x 43x 43x 45x 45x 43x 43x 43x 72x 41x 72x 31x 31x 72x 43x 43x 10x 10x 43x 43x 43x 1x | import {ExpressionNode} from "../../nodes";
import * as Expressions from "../../2_statements/expressions";
import {Source} from "./source";
import {Let} from "./let";
import {Cond} from "./cond";
import {AbstractType} from "../../types/basic/_abstract_type";
import {SyntaxInput} from "../_syntax_input";
export class CondBody {
public static runSyntax(
node: ExpressionNode | undefined,
input: SyntaxInput,
targetType: AbstractType | undefined): AbstractType | undefined {
if (node === undefined) {
return undefined;
}
let scoped = false;
const l = node.findDirectExpression(Expressions.Let);
if (l) {
scoped = Let.runSyntax(l, input);
}
for (const s of node.findDirectExpressions(Expressions.Cond)) {
Cond.runSyntax(s, input);
}
let type: AbstractType | undefined = undefined;
for (const s of node.findDirectExpressions(Expressions.Source)) {
if (type === undefined) {
type = Source.runSyntax(s, input, targetType);
} else {
Source.runSyntax(s, input, targetType ?? type);
}
}
if (scoped === true) {
input.scope.pop(node.getLastToken().getEnd());
}
return type;
}
}
|