From: <ac...@us...> - 2010-03-31 21:15:35
|
Revision: 29 http://clibinutils.svn.sourceforge.net/clibinutils/?rev=29&view=rev Author: aco Date: 2010-03-31 21:15:28 +0000 (Wed, 31 Mar 2010) Log Message: ----------- improve traicing of ReferenceGetters Modified Paths: -------------- mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/IReferenceGetters.cs mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGetters.cs mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGettersCached.cs mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGettersTracer.cs Modified: mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/IReferenceGetters.cs =================================================================== --- mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/IReferenceGetters.cs 2010-03-31 21:08:23 UTC (rev 28) +++ mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/IReferenceGetters.cs 2010-03-31 21:15:28 UTC (rev 29) @@ -6,6 +6,8 @@ public interface IReferenceGetters { + IReferenceGetters RGRecursiveCalls { set; } + void MapTypeReferences (ICollection types, TypeReference new_type); ModuleReference GetModuleReference (ModuleReference module); Modified: mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGetters.cs =================================================================== --- mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGetters.cs 2010-03-31 21:08:23 UTC (rev 28) +++ mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGetters.cs 2010-03-31 21:15:28 UTC (rev 29) @@ -15,6 +15,8 @@ ModuleDefinition m_module; + internal IReferenceGetters rf; + bool m_aea; // allowExternalAssembly readonly string ExternalAssemblyName = CFile.ExternalAssemblyName; @@ -25,6 +27,7 @@ m_cfile = cfile; m_module = module; m_aea = allowExternalAssembly; + rf = this; } public ReferenceGetters (CFileModifier cfile, bool allowExternalAssembly) @@ -42,6 +45,10 @@ { } + public IReferenceGetters RGRecursiveCalls { + set { rf = value; } + } + Hashtable mapped_types = new Hashtable (); //Dictionary<string,TypeReference> public void MapTypeReferences (ICollection types, TypeReference new_type) @@ -70,20 +77,20 @@ if (type is FunctionPointerType) { FunctionPointerType fpt = type as FunctionPointerType; - fpt.ElementType = GetTypeReference (fpt.ElementType); - fpt.ReturnType.ReturnType = GetTypeReference (fpt.ReturnType.ReturnType); + fpt.ElementType = rf.GetTypeReference (fpt.ElementType); + fpt.ReturnType.ReturnType = rf.GetTypeReference (fpt.ReturnType.ReturnType); for (int i = 0; i < fpt.Parameters.Count ; ++i) { - fpt.Parameters[i].ParameterType = GetTypeReference (fpt.Parameters[i].ParameterType); + fpt.Parameters[i].ParameterType = rf.GetTypeReference (fpt.Parameters[i].ParameterType); } result = fpt; } else if (type is ModType) { ModType spec = type as ModType; - spec.ElementType = GetTypeReference (spec.ElementType); - spec.ModifierType = GetTypeReference (spec.ModifierType); + spec.ElementType = rf.GetTypeReference (spec.ElementType); + spec.ModifierType = rf.GetTypeReference (spec.ModifierType); result = spec; } else if (type is TypeSpecification) { TypeSpecification spec = type as TypeSpecification; - spec.ElementType = GetTypeReference (spec.ElementType); + spec.ElementType = rf.GetTypeReference (spec.ElementType); result = spec; } else { string fullname = type.FullName; @@ -137,8 +144,8 @@ MethodReference duplicate_VarargMethodReference (MethodReference m_sig, MethodReference base_method) { MethodReference result = new MethodReference (base_method.Name, - GetTypeReference (base_method.DeclaringType), - GetTypeReference (base_method.ReturnType.ReturnType), + rf.GetTypeReference (base_method.DeclaringType), + rf.GetTypeReference (base_method.ReturnType.ReturnType), base_method.HasThis, base_method.ExplicitThis, base_method.CallingConvention); @@ -148,18 +155,18 @@ int i = 0; for (; i<bm_argsNum ; ++i) { - TypeReference param_type = GetTypeReference (base_method.Parameters[i].ParameterType); + TypeReference param_type = rf.GetTypeReference (base_method.Parameters[i].ParameterType); ParameterDefinition p = new ParameterDefinition (param_type); result.Parameters.Add (p); } if (i<m_argsNum) { - TypeReference param_type = GetTypeReference (m_sig.Parameters[i].ParameterType); + TypeReference param_type = rf.GetTypeReference (m_sig.Parameters[i].ParameterType); ParameterDefinition p = new ParameterDefinition (new SentinelType (param_type)); result.Parameters.Add (p); ++i; for (; i<m_argsNum ; ++i) { - param_type = GetTypeReference (m_sig.Parameters[i].ParameterType); + param_type = rf.GetTypeReference (m_sig.Parameters[i].ParameterType); p = new ParameterDefinition (param_type); result.Parameters.Add (p); } @@ -172,7 +179,7 @@ { MethodReference result = null; - TypeReference type = GetTypeReference (method.DeclaringType); + TypeReference type = rf.GetTypeReference (method.DeclaringType); if (type is TypeDefinition) { TypeDefinition td = type as TypeDefinition; @@ -225,7 +232,7 @@ MethodReference result = null; if (m_cfile != null - && GetTypeReference (method.DeclaringType) == m_cfile.MainType) { + && rf.GetTypeReference (method.DeclaringType) == m_cfile.MainType) { string name = method.Name; MethodReference base_method = null; @@ -246,11 +253,11 @@ } if (result != null) { - result.DeclaringType = GetTypeReference (result.DeclaringType); - result.ReturnType.ReturnType = GetTypeReference (result.ReturnType.ReturnType); + result.DeclaringType = rf.GetTypeReference (result.DeclaringType); + result.ReturnType.ReturnType = rf.GetTypeReference (result.ReturnType.ReturnType); foreach (ParameterDefinition parameter in result.Parameters) { TypeReference tp = parameter.ParameterType; - parameter.ParameterType = GetTypeReference (parameter.ParameterType); + parameter.ParameterType = rf.GetTypeReference (parameter.ParameterType); if (tp is SentinelType) parameter.ParameterType = new SentinelType (parameter.ParameterType); } @@ -261,13 +268,13 @@ && method.DeclaringType.Name == ExternalTypeName) { result = new MethodReference (method.Name, GetExternalTypeDef (), - GetTypeReference (method.ReturnType.ReturnType), + rf.GetTypeReference (method.ReturnType.ReturnType), method.HasThis, method.ExplicitThis, method.CallingConvention); foreach (ParameterDefinition param in method.Parameters) { - TypeReference tp = GetTypeReference (param.ParameterType); + TypeReference tp = rf.GetTypeReference (param.ParameterType); if (param.ParameterType is SentinelType) tp = new SentinelType (tp); result.Parameters.Add (new ParameterDefinition (tp)); @@ -286,7 +293,7 @@ { FieldReference result = null; - TypeReference type = GetTypeReference (field.DeclaringType); + TypeReference type = rf.GetTypeReference (field.DeclaringType); if (type is TypeDefinition) { TypeDefinition td = type as TypeDefinition; result = td.Fields.GetField (field.Name); @@ -319,7 +326,7 @@ && field.DeclaringType.Name == ExternalTypeName) { result = new FieldReference (field.Name, GetExternalTypeDef (), - GetTypeReference (field.FieldType)); + rf.GetTypeReference (field.FieldType)); m_module.MemberReferences.Add (result); } @@ -332,9 +339,9 @@ public virtual CallSite GetCallSite (CallSite cs) { - cs.ReturnType.ReturnType = GetTypeReference (cs.ReturnType.ReturnType); + cs.ReturnType.ReturnType = rf.GetTypeReference (cs.ReturnType.ReturnType); for (int i = 0; i < cs.Parameters.Count ; ++i) { - cs.Parameters[i].ParameterType = GetTypeReference (cs.Parameters[i].ParameterType); + cs.Parameters[i].ParameterType = rf.GetTypeReference (cs.Parameters[i].ParameterType); } return cs; } Modified: mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGettersCached.cs =================================================================== --- mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGettersCached.cs 2010-03-31 21:08:23 UTC (rev 28) +++ mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGettersCached.cs 2010-03-31 21:15:28 UTC (rev 29) @@ -20,6 +20,7 @@ public ReferenceGettersCached (IReferenceGetters _wrapped) { wrapped = _wrapped; + wrapped.RGRecursiveCalls = this; } public void MapTypeReferences (ICollection types, TypeReference new_type) @@ -32,6 +33,10 @@ return wrapped.GetModuleReference (module); } + public IReferenceGetters RGRecursiveCalls { + set { wrapped.RGRecursiveCalls = value; } + } + void Add (string name, TypeReference type) { types_cache[name] = type; Modified: mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGettersTracer.cs =================================================================== --- mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGettersTracer.cs 2010-03-31 21:08:23 UTC (rev 28) +++ mono-based-binutils/branches/aco-dev/tools/gcc4cli/utils/ReferenceGettersTracer.cs 2010-03-31 21:15:28 UTC (rev 29) @@ -19,6 +19,7 @@ wrapped = _wrapped; level = _level; header = _header; + wrapped.RGRecursiveCalls = this; } public ReferenceGettersTracer (IReferenceGetters _wrapped) @@ -26,6 +27,10 @@ { } + public IReferenceGetters RGRecursiveCalls { + set { wrapped.RGRecursiveCalls = value; } + } + public void MapTypeReferences (ICollection types, TypeReference new_type) { wrapped.MapTypeReferences (types, new_type); @@ -34,45 +39,45 @@ public ModuleReference GetModuleReference (ModuleReference module) { ModuleReference result = null; - Tracer.Trace (level, header + "Searching: " + module.ToString ()); + Tracer.Trace (level, header + "Searching Module: " + module.ToString ()); result = wrapped.GetModuleReference (module); - Tracer.Trace (level, header + "Returning: " + result.ToString ()); + Tracer.Trace (level, header + "Returning Module: " + result.ToString ()); return result; } public TypeReference GetTypeReference (TypeReference type) { TypeReference result = null; - Tracer.Trace (level, header + "Searching: " + type.FullName); + Tracer.Trace (level, header + "Searching Type: " + type.FullName); result = wrapped.GetTypeReference (type); - Tracer.Trace (level, header + "Returning: " + result.ToString ()); + Tracer.Trace (level, header + "Returning Type: " + result.ToString ()); return result; } public MethodReference GetMethodReference (MethodReference method) { MethodReference result = null; - Tracer.Trace(level, header + "Searching: " + method.ToString ()); + Tracer.Trace (level, header + "Searching Method: " + method.ToString ()); result = wrapped.GetMethodReference (method); - Tracer.Trace(level, header + "Returning: " + result.ToString()); + Tracer.Trace (level, header + "Returning Method: " + result.ToString()); return result; } public FieldReference GetFieldReference (FieldReference field) { FieldReference result = null; - Tracer.Trace(level, header + "Searching: " + field.ToString ()); + Tracer.Trace (level, header + "Searching Field: " + field.ToString ()); result = wrapped.GetFieldReference (field); - Tracer.Trace(level, header + "Returning: " + result.ToString()); + Tracer.Trace (level, header + "Returning Field: " + result.ToString()); return result; } public CallSite GetCallSite (CallSite sig) { CallSite result = null; - Tracer.Trace(level, header + "Searching: " + sig.ToString ()); + Tracer.Trace (level, header + "Searching CallSite: " + sig.ToString ()); result = wrapped.GetCallSite (sig); - Tracer.Trace(level, header + "Returning: " + result.ToString()); + Tracer.Trace (level, header + "Returning CallSite: " + result.ToString()); return result; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |