public LambdaResultTypeInferrer(function_header lambdaHeader, proc_block lambdaBody, syntax_tree_visitor syntaxTreeVisitor) { this.lambdaBody = lambdaBody; this.lambdaHeader = lambdaHeader; this.syntaxTreeVisitor = syntaxTreeVisitor; resultExpressionsTypes = new List <Tuple <type_node, expression, expression_node> >(); }
/// <summary> /// Вывод типа возвращаемого значения лямбды /// </summary> public static void InferResultType(function_header funcHeader, proc_block procBody, syntax_tree_visitor visitor) { var retType = funcHeader.return_type as lambda_inferred_type; if (retType != null && retType.real_type is lambda_any_type_node) { retType.real_type = new LambdaResultTypeInferrer(funcHeader, procBody, visitor).InferResultType(); } }
public override void visit(proc_block _proc_block) { }
public virtual void visit(proc_block _proc_block) { DefaultVisit(_proc_block); }
public virtual void post_do_visit(proc_block _proc_block) { }
public override void visit(proc_block _proc_block) { DefaultVisit(_proc_block); pre_do_visit(_proc_block); post_do_visit(_proc_block); }
public virtual void visit(proc_block _proc_block) { }
public override void visit(proc_block _proc_block) { throw new NotImplementedException(); }
public override void visit(proc_block _proc_block) { executer.visit(_proc_block); }