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 69 70 71 72 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 38x 38x 38x 38x 38x 38x 38x 38x 38x 38x 2x 2x 38x 38x 38x 43x 36x 36x 36x 43x 43x 38x 38x 43x 38x 38x 38x 39x 39x 38x 38x 39x 37x 38x 37x 37x 37x 37x 37x 37x 37x 37x 37x 38x 38x 38x 37x 37x 37x 38x 38x 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, targetType: AbstractType | undefined): 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, targetType); 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"); } } } |