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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 34x 34x 34x 34x 34x 2x 2x 34x 34x 34x 39x 32x 32x 32x 39x 39x 34x 34x 39x 34x 34x 34x 35x 35x 34x 34x 35x 33x 34x 33x 33x 33x 33x 33x 33x 33x 33x 33x 34x 34x 34x 33x 33x 33x 34x 34x 1x | import {ExpressionNode} from "../../nodes"; import {CurrentScope} from "../_current_scope"; import * as Expressions from "../../2_statements/expressions"; import {For} from "./for"; import {Source} from "./source"; import {AbstractType} from "../../types/basic/_abstract_type"; import {InlineFieldDefinition} from "./inline_field_definition"; import {UnknownType} from "../../types/basic/unknown_type"; import {ReduceNext} from "./reduce_next"; import {Let} from "./let"; import {ScopeType} from "../_scope_type"; export class ReduceBody { public runSyntax(node: ExpressionNode | undefined, scope: CurrentScope, filename: string): AbstractType | undefined { if (node === undefined) { return; } let scoped = false; const letNode = node.findDirectExpression(Expressions.Let); if (letNode) { scoped = new Let().runSyntax(letNode, scope, filename); } let first: AbstractType | undefined = undefined; for (const i of node.findDirectExpressions(Expressions.InlineFieldDefinition)) { if (scoped === false) { scope.push(ScopeType.Let, "LET", node.getFirstToken().getStart(), filename); scoped = true; } const found = new InlineFieldDefinition().runSyntax(i, scope, filename); if (found && first === undefined) { first = found; } } let forScopes = 0; for (const forNode of node.findDirectExpressions(Expressions.For) || []) { const scoped = new For().runSyntax(forNode, scope, filename); if (scoped === true) { forScopes++; } } for (const s of node.findDirectExpressions(Expressions.Source)) { new Source().runSyntax(s, scope, filename); } for (const s of node.findDirectExpressions(Expressions.ReduceNext)) { new ReduceNext().runSyntax(s, scope, filename); } if (scoped === true) { scope.pop(node.getLastToken().getEnd()); } for (let i = 0; i < forScopes; i++) { scope.pop(node.getLastToken().getEnd()); } if (first) { return first; } else { return new UnknownType("todo, ReduceBody"); } } } |