diff options
author | Jan Kotas <jkotas@microsoft.com> | 2015-12-15 00:41:18 +0300 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2015-12-15 02:46:34 +0300 |
commit | a812c6d5a53f666674716a4488fefd628483dcca (patch) | |
tree | 118dde23bb0faaaddf911dbeebdf6a0a3bcd3c43 /src/ILCompiler.Compiler | |
parent | 964952dfbda231ab28e582ce4638488729e94e57 (diff) |
Use proper type nodes for RelatedType
Diffstat (limited to 'src/ILCompiler.Compiler')
-rw-r--r-- | src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/EETypeNode.cs | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/EETypeNode.cs b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/EETypeNode.cs index 23fadade0..8778a7587 100644 --- a/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/EETypeNode.cs +++ b/src/ILCompiler.Compiler/src/Compiler/DependencyAnalysis/EETypeNode.cs @@ -406,23 +406,33 @@ namespace ILCompiler.DependencyAnalysis private void OutputRelatedType(NodeFactory factory, ref ObjectDataBuilder objData) { - TypeDesc relatedType = _type.BaseType; + ISymbolNode relatedTypeNode = null; + if (_type.IsArray || _type.IsPointer) { - relatedType = ((ParameterizedType)_type).ParameterType; + var parameterType = ((ParameterizedType)_type).ParameterType; + relatedTypeNode = factory.NecessaryTypeSymbol(parameterType); } - - if (relatedType != null) + else { - if (_constructed) + TypeDesc baseType = _type.BaseType; + if (baseType != null) { - objData.EmitPointerReloc(factory.ConstructedTypeSymbol(relatedType)); - } - else - { - objData.EmitPointerReloc(factory.NecessaryTypeSymbol(relatedType)); + if (_constructed) + { + relatedTypeNode = factory.ConstructedTypeSymbol(baseType); + } + else + { + relatedTypeNode = factory.NecessaryTypeSymbol(baseType); + } } } + + if (relatedTypeNode != null) + { + objData.EmitPointerReloc(relatedTypeNode); + } else { objData.EmitZeroPointer(); |