public static void RemoveLambdaInfoFromCompilationContext(compilation_context context, function_lambda_definition lambdaDefinition) { if (context.converted_namespace != null && context.converted_namespace.functions != null && context.converted_namespace.functions.Any()) // Если добавилось в глобальные функции, то удаляем оттуда { var lastIndex = context.converted_namespace.functions.Count - 1; if (context.converted_namespace.functions[lastIndex].name == lambdaDefinition.lambda_name) { context.converted_namespace.functions.remove_at(lastIndex); } } //else SSM 27/04/16 - грубое исправление ошибки #147 { // Если добавилась лямбда как метод класса, то удаляем оттуда if (context.converted_type != null && context.converted_type.methods != null && context.converted_type.methods.Any()) { var lastIndex = context.converted_type.methods.Count - 1; if (context.converted_type.methods[lastIndex].name == lambdaDefinition.lambda_name) { context.converted_type.methods.remove_at(lastIndex); } } } }
/// <summary> /// Конструктор /// </summary> /// <param name="root">Корень обходимого поддерева</param> /// <param name="context">Контекст. Необходим для поиска переменных</param> /// <param name="isForNode">True при обходе цикла, False при обходе секций</param> public VarFinderSyntaxVisitor(syntax_tree_node root, compilation_context context, bool isForNode) { this.isForNode = isForNode; this.context = context; ProcessNode(root); FixResultVar(); }