bug fix issue #110

This commit is contained in:
Бондарев Иван 2016-03-12 18:46:14 +01:00
parent cb7236ab16
commit 29682aa824
4 changed files with 20 additions and 2 deletions

View file

@ -2804,6 +2804,8 @@ namespace PascalABCCompiler.PCU
cnfn.ConnectedToType.base_type.Scope.AddSymbol(cnfn.name, new SymbolInfo(cnfn));
else if (cnfn.ConnectedToType is compiled_generic_instance_type_node && cnfn.ConnectedToType.original_generic.Scope != null)
cnfn.ConnectedToType.original_generic.Scope.AddSymbol(cnfn.name, new SymbolInfo(cnfn));
else if (cnfn.ConnectedToType != null && cnfn.ConnectedToType.IsDelegate && cnfn.ConnectedToType.base_type.IsDelegate)
compiled_type_node.get_type_node(typeof(Delegate)).Scope.AddSymbol(cnfn.name, new SymbolInfo(cnfn));
return cnfn;
}

View file

@ -1060,7 +1060,9 @@ namespace PascalABCCompiler.NetHelper
if (si.sym_info is common_namespace_function_node)
{
function_node fn = si.sym_info as function_node;
if (fn.return_value_type == to && fn.parameters.Count == 1 && fn.parameters[0].type == from)
if ((fn.return_value_type == to || fn.return_value_type.original_generic == to) &&
fn.parameters.Count == 1 &&
(fn.parameters[0].type == from || fn.parameters[0].type.original_generic == from))
{
return fn;
}

View file

@ -12171,6 +12171,8 @@ namespace PascalABCCompiler.TreeConverter
top_function.ConnectedToType.base_type.Scope.AddSymbol(top_function.name, new SymbolInfo(context.top_function));
else if (top_function.ConnectedToType is compiled_generic_instance_type_node && top_function.ConnectedToType.original_generic.Scope != null)
top_function.ConnectedToType.original_generic.Scope.AddSymbol(top_function.name, new SymbolInfo(context.top_function));
else if (top_function.ConnectedToType.IsDelegate && top_function.ConnectedToType.base_type.IsDelegate)
compiled_type_node.get_type_node(typeof(Delegate)).Scope.AddSymbol(top_function.name, new SymbolInfo(context.top_function));
break;
}
default:

View file

@ -3398,6 +3398,17 @@ namespace PascalABCCompiler.TreeRealization
fn = NetHelper.NetHelper.get_implicit_conversion(this, this, cctn, scope);
if (fn is compiled_function_node)
_implicit_convertions_to.Add(cctn, fn);
/*else if (_compiled_type.IsGenericType && !_compiled_type.IsGenericTypeDefinition)
{
compiled_type_node orig_generic = compiled_type_node.get_type_node(_compiled_type.GetGenericTypeDefinition());
compiled_type_node orig_generic2 = compiled_type_node.get_type_node(cctn.compiled_type.GetGenericTypeDefinition());
fn = NetHelper.NetHelper.get_implicit_conversion(orig_generic, orig_generic, orig_generic2, orig_generic.scope);
if (fn != null)
{
//fn = fn.get_instance(this.ge)
_implicit_convertions_to.Add(cctn, fn);
}
}*/
}
return fn;
@ -4317,7 +4328,8 @@ namespace PascalABCCompiler.TreeRealization
}
}
}
return null;
return compiled_type_node.get_type_node(typeof(Delegate)).find(name);
//return null;
}
public override SymbolInfo find_in_type(string name, SymbolTable.Scope CurrentScope)
{