procedure_definition lambda(function_lambda_definition _function_lambda_definition) { procedure_definition _func_def = new procedure_definition(); method_name _method_name1 = new method_name(null,null, new SyntaxTree.ident(_function_lambda_definition.lambda_name), null); parsertools.create_source_context(_method_name1, _method_name1.meth_name, _method_name1.meth_name); function_header _function_header1 = new function_header(); object rt1 = new object(); _function_header1.name = _method_name1; if (_function_header1.name.meth_name is template_type_name) { _function_header1.template_args = (_function_header1.name.meth_name as template_type_name).template_args; ident id = new ident(_function_header1.name.meth_name.name); parsertools.create_source_context(id, _function_header1.name.meth_name, _function_header1.name.meth_name); _function_header1.name.meth_name = id; } SyntaxTree.formal_parameters fps = new PascalABCCompiler.SyntaxTree.formal_parameters(); _function_header1.parameters = _function_lambda_definition.formal_parameters;//fps; /*SyntaxTree.named_type_reference _named_type_reference = new SyntaxTree.named_type_reference(); SyntaxTree.ident idtype = new SyntaxTree.ident("object"); _named_type_reference.source_context = idtype.source_context; _named_type_reference.names.Add(idtype); rt1 = _named_type_reference; _function_header1.return_type = (SyntaxTree.type_definition)_named_type_reference;*/ _function_header1.return_type = _function_lambda_definition.return_type; _function_header1.of_object = false; _function_header1.class_keyword = false; token_info _token_info = new token_info("function"); _token_info.source_context = parsertools.GetTokenSourceContext(); parsertools.create_source_context(_function_header1, _token_info, _token_info); SyntaxTree.block _block1 = new SyntaxTree.block(null, null); SyntaxTree.statement_list sl1 = new SyntaxTree.statement_list(); sl1.subnodes.Add(_function_lambda_definition.proc_body); _block1.program_code = sl1; _func_def.proc_header = _function_header1; _func_def.proc_body = (SyntaxTree.proc_block)_block1; if (_function_lambda_definition.defs != null) { if (((block)_func_def.proc_body).defs == null) ((block)_func_def.proc_body).defs = new declarations(); for (int l = 0; l < _function_lambda_definition.defs.Count; l++) ((block)_func_def.proc_body).defs.defs.Add(_function_lambda_definition.defs[l] as procedure_definition); } _function_lambda_definition.proc_definition = _func_def; parsertools.create_source_context(_func_def, _function_header1, _function_header1); return _func_def; }
public procedure_definition lambda(function_lambda_definition _function_lambda_definition) { SyntaxTree.procedure_definition _func_def = new PascalABCCompiler.SyntaxTree.procedure_definition(); SyntaxTree.method_name _method_name1 = new SyntaxTree.method_name(null, new SyntaxTree.ident(_function_lambda_definition.lambda_name), null); SyntaxTree.function_header _function_header1 = new SyntaxTree.function_header(); object rt1 = new object(); _function_header1.name = _method_name1; SyntaxTree.formal_parametres fps = new PascalABCCompiler.SyntaxTree.formal_parametres(); _function_header1.parametres = _function_lambda_definition.formal_parametres;//fps; SyntaxTree.named_type_reference _named_type_reference = new SyntaxTree.named_type_reference(); SyntaxTree.ident idtype = new SyntaxTree.ident("datatype"); _named_type_reference.source_context = idtype.source_context; _named_type_reference.names.Add(idtype); rt1 = _named_type_reference; _function_header1.return_type = (SyntaxTree.type_definition)_named_type_reference; _function_header1.of_object = false; _function_header1.class_keyword = false; SyntaxTree.block _block1 = new SyntaxTree.block(null, null); SyntaxTree.statement_list sl1 = new SyntaxTree.statement_list(); sl1.subnodes.Add(_function_lambda_definition.proc_body); _block1.program_code = sl1; _func_def.proc_header = _function_header1; _func_def.proc_body = (SyntaxTree.proc_block)_block1; _function_lambda_definition.proc_definition = _func_def; return _func_def; }