Skip to content

Commit

Permalink
- dnlib cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
tgiphil committed Jun 17, 2018
1 parent 511f069 commit f2b87ca
Show file tree
Hide file tree
Showing 12 changed files with 57 additions and 47 deletions.
2 changes: 0 additions & 2 deletions Source/Mosa.Compiler.MosaTypeSystem/IMetadata.cs
Expand Up @@ -4,8 +4,6 @@ namespace Mosa.Compiler.MosaTypeSystem
{
public interface IMetadata
{
void Initialize(TypeSystem system, ITypeSystemController controller);

void LoadMetadata();

string LookupUserString(MosaModule module, uint id);
Expand Down
11 changes: 0 additions & 11 deletions Source/Mosa.Compiler.MosaTypeSystem/IModuleLoader.cs

This file was deleted.

Expand Up @@ -2,7 +2,7 @@

namespace Mosa.Compiler.MosaTypeSystem
{
public interface ITypeSystemController
internal interface ITypeSystemController
{
MosaModule CreateModule();

Expand Down
8 changes: 6 additions & 2 deletions Source/Mosa.Compiler.MosaTypeSystem/Metadata/CLRMetadata.cs
Expand Up @@ -13,15 +13,15 @@ public CLRMetadata(MosaModuleLoader loader)

public TypeSystem TypeSystem { get; private set; }

public ITypeSystemController Controller { get; private set; }
internal ITypeSystemController Controller { get; private set; }

public MetadataCache Cache { get; private set; }

public MetadataLoader Loader { get; private set; }

public MetadataResolver Resolver { get; private set; }

public void Initialize(TypeSystem system, ITypeSystemController controller)
internal void Initialize(TypeSystem system, ITypeSystemController controller)
{
TypeSystem = system;
Controller = controller;
Expand All @@ -33,18 +33,22 @@ public void Initialize(TypeSystem system, ITypeSystemController controller)
public void LoadMetadata()
{
foreach (var module in moduleLoader.Modules)
{
Loader.Load(module);
}

Controller.SetCorLib(Loader.CorLib);

Resolver.Resolve();

foreach (var module in Cache.Modules.Values)
{
if (module.EntryPoint != null)
{
Controller.SetEntryPoint(module.EntryPoint);
break;
}
}
}

public string LookupUserString(MosaModule module, uint id)
Expand Down
Expand Up @@ -4,12 +4,12 @@
using System.Collections.Generic;
using dnlib.DotNet;

namespace Mosa.Compiler.MosaTypeSystem
namespace Mosa.Compiler.MosaTypeSystem.Metadata
{
/// <summary>
/// Resolves generic arguments
/// </summary>
public class GenericArgumentResolver
internal class GenericArgumentResolver
{
private GenericArguments genericArguments;
private RecursionCounter recursionCounter;
Expand Down Expand Up @@ -94,10 +94,11 @@ private MethodSig ResolveGenericArgs(MethodSig sig)
{
if (sig == null)
return null;

if (!recursionCounter.Increment())
return null;

MethodSig result = ResolveGenericArgs(new MethodSig(sig.GetCallingConvention()), sig);
var result = ResolveGenericArgs(new MethodSig(sig.GetCallingConvention()), sig);

recursionCounter.Decrement();
return result;
Expand All @@ -106,14 +107,18 @@ private MethodSig ResolveGenericArgs(MethodSig sig)
private MethodSig ResolveGenericArgs(MethodSig sig, MethodSig old)
{
sig.RetType = ResolveGenericArgs(old.RetType);

foreach (var p in old.Params)
sig.Params.Add(ResolveGenericArgs(p));

if (sig.ParamsAfterSentinel != null)
{
foreach (var p in old.ParamsAfterSentinel)
{
sig.ParamsAfterSentinel.Add(ResolveGenericArgs(p));
}
}

return sig;
}

Expand Down Expand Up @@ -144,15 +149,15 @@ private TypeSig ResolveGenericArgs(TypeSig typeSig)
case ElementType.FnPtr: throw new NotSupportedException("FnPtr is not supported.");

case ElementType.Array:
ArraySig arraySig = (ArraySig)typeSig;
List<uint> sizes = new List<uint>(arraySig.Sizes);
List<int> lbounds = new List<int>(arraySig.LowerBounds);
var arraySig = (ArraySig)typeSig;
var sizes = new List<uint>(arraySig.Sizes);
var lbounds = new List<int>(arraySig.LowerBounds);
result = new ArraySig(ResolveGenericArgs(typeSig.Next), arraySig.Rank, sizes, lbounds);
break;

case ElementType.GenericInst:
GenericInstSig gis = (GenericInstSig)typeSig;
List<TypeSig> genArgs = new List<TypeSig>(gis.GenericArguments.Count);
var gis = (GenericInstSig)typeSig;
var genArgs = new List<TypeSig>(gis.GenericArguments.Count);
foreach (TypeSig ga in gis.GenericArguments)
{
genArgs.Add(ResolveGenericArgs(ga));
Expand Down
Expand Up @@ -9,7 +9,7 @@ namespace Mosa.Compiler.MosaTypeSystem.Metadata
{
public class MetadataCache
{
public IDictionary<string, MosaModule> Modules { get; }
public Dictionary<string, MosaModule> Modules { get; }

public MosaModule LinkerModule { get; }

Expand Down
Expand Up @@ -81,9 +81,8 @@
</ItemGroup>
<ItemGroup>
<Compile Include="BuiltInType.cs" />
<Compile Include="GenericArgumentResolver.cs" />
<Compile Include="Metadata\GenericArgumentResolver.cs" />
<Compile Include="IMetadata.cs" />
<Compile Include="IModuleLoader.cs" />
<Compile Include="Metadata\MetadataResolver.cs" />
<Compile Include="ITypeSystemController.cs" />
<Compile Include="Metadata\DnlibExtension.cs" />
Expand Down
18 changes: 10 additions & 8 deletions Source/Mosa.Compiler.MosaTypeSystem/MosaModuleLoader.cs
Expand Up @@ -4,14 +4,15 @@
using Mosa.Compiler.MosaTypeSystem.Metadata;
using System.Collections.Generic;
using System.IO;
using System;

namespace Mosa.Compiler.MosaTypeSystem
{
public class MosaModuleLoader : IModuleLoader, System.IDisposable
public class MosaModuleLoader : IDisposable
{
public AssemblyResolver Resolver { get; }

internal IList<ModuleDefMD> Modules { get; }
internal List<ModuleDefMD> Modules { get; }

public MosaModuleLoader()
{
Expand All @@ -30,15 +31,19 @@ private void LoadDependencies(ModuleDefMD module)
{
if (seenModules.Contains(module.Location))
return;

seenModules.Add(module.Location);
Modules.Add(module);
Resolver.AddToCache(module);

foreach (var assemblyRef in module.GetAssemblyRefs())
{
AssemblyDef assembly = Resolver.ResolveThrow(assemblyRef, null);
var assembly = Resolver.ResolveThrow(assemblyRef, null);

foreach (var moduleRef in assembly.Modules)
{
LoadDependencies((ModuleDefMD)moduleRef);
}
}
}

Expand Down Expand Up @@ -80,11 +85,6 @@ public void LoadModuleFromFile(string file)
LoadDependencies(module);
}

void IModuleLoader.LoadModuleFromFile(string file)
{
LoadModuleFromFile(file);
}

public IMetadata CreateMetadata()
{
return new CLRMetadata(this);
Expand All @@ -93,7 +93,9 @@ public IMetadata CreateMetadata()
public void Dispose()
{
foreach (var module in Modules)
{
module.Dispose();
}

Modules.Clear();
}
Expand Down
13 changes: 13 additions & 0 deletions Source/Mosa.Compiler.MosaTypeSystem/MosaTypeExtension.cs
Expand Up @@ -9,6 +9,7 @@ public static class MosaTypeExtension
public static MosaType ToManagedPointer(this MosaType type)
{
var result = type.TypeSystem.Controller.CreateType();

using (var ptrType = type.TypeSystem.Controller.MutateType(result))
{
ptrType.Module = type.Module;
Expand All @@ -27,6 +28,7 @@ public static MosaType ToManagedPointer(this MosaType type)
public static MosaType ToUnmanagedPointer(this MosaType type)
{
var result = type.TypeSystem.Controller.CreateType();

using (var ptrType = type.TypeSystem.Controller.MutateType(result))
{
ptrType.Module = type.Module;
Expand All @@ -46,6 +48,7 @@ public static MosaType ToSZArray(this MosaType type)
{
var array = type.TypeSystem.GetTypeByName(type.TypeSystem.CorLib, "System", "Array");
var result = type.TypeSystem.Controller.CreateType();

using (var arrayType = type.TypeSystem.Controller.MutateType(result))
{
// See Partition II 14.1 Vectors
Expand All @@ -70,6 +73,7 @@ public static MosaType ToArray(this MosaType type, MosaArrayInfo info)
{
var array = type.TypeSystem.GetTypeByName(type.TypeSystem.CorLib, "System", "Array");
var result = type.TypeSystem.Controller.CreateType(array);

using (var arrayType = type.TypeSystem.Controller.MutateType(result))
{
// See Partition II 14.2 Arrays
Expand Down Expand Up @@ -103,6 +107,7 @@ private static void AddArrayMethods(TypeSystem typeSystem, MosaType arrayType, M
uint rank = info.Rank;

var methodGet = typeSystem.Controller.CreateMethod();

using (var method = typeSystem.Controller.MutateMethod(methodGet))
{
method.DeclaringType = arrayType;
Expand All @@ -113,6 +118,7 @@ private static void AddArrayMethods(TypeSystem typeSystem, MosaType arrayType, M
method.HasThis = true;

var parameters = new List<MosaParameter>();

for (uint i = 0; i < rank; i++)
{
var indexParam = typeSystem.Controller.CreateParameter();
Expand All @@ -127,9 +133,11 @@ private static void AddArrayMethods(TypeSystem typeSystem, MosaType arrayType, M
}
method.Signature = new MosaMethodSignature(arrayType.ElementType, parameters);
}

type.Methods.Add(methodGet);

var methodSet = typeSystem.Controller.CreateMethod();

using (var method = typeSystem.Controller.MutateMethod(methodSet))
{
method.DeclaringType = arrayType;
Expand Down Expand Up @@ -165,9 +173,11 @@ private static void AddArrayMethods(TypeSystem typeSystem, MosaType arrayType, M

method.Signature = new MosaMethodSignature(typeSystem.BuiltIn.Void, parameters);
}

type.Methods.Add(methodSet);

var methodAdrOf = typeSystem.Controller.CreateMethod();

using (var method = typeSystem.Controller.MutateMethod(methodAdrOf))
{
method.DeclaringType = arrayType;
Expand Down Expand Up @@ -195,6 +205,7 @@ private static void AddArrayMethods(TypeSystem typeSystem, MosaType arrayType, M
type.Methods.Add(methodAdrOf);

var methodCtor = typeSystem.Controller.CreateMethod();

using (var method = typeSystem.Controller.MutateMethod(methodCtor))
{
method.DeclaringType = arrayType;
Expand Down Expand Up @@ -225,6 +236,7 @@ private static void AddArrayMethods(TypeSystem typeSystem, MosaType arrayType, M
public static MosaType ToFnPtr(this TypeSystem typeSystem, MosaMethodSignature signature)
{
var result = typeSystem.Controller.CreateType();

using (var ptrType = typeSystem.Controller.MutateType(result))
{
ptrType.Module = typeSystem.LinkerModule;
Expand Down Expand Up @@ -274,6 +286,7 @@ public static MosaType RemoveModifiers(this MosaType type)
{
while (type.Modifier != null)
type = type.ElementType;

return type;
}
}
Expand Down
7 changes: 4 additions & 3 deletions Source/Mosa.Compiler.MosaTypeSystem/TypeSystem.cs
@@ -1,6 +1,7 @@
// Copyright (c) MOSA Project. Licensed under the New BSD License.

using Mosa.Compiler.Common.Exceptions;
using Mosa.Compiler.MosaTypeSystem.Metadata;
using System;
using System.Collections.Generic;

Expand Down Expand Up @@ -52,17 +53,17 @@ public IEnumerable<MosaType> AllTypes

internal ITypeSystemController Controller { get; private set; }

private readonly IMetadata metadata;
internal readonly CLRMetadata metadata;

private TypeSystem(IMetadata metadata)
private TypeSystem(CLRMetadata metadata)
{
this.metadata = metadata;
Modules = new List<MosaModule>();
}

public static TypeSystem Load(IMetadata metadata)
{
var result = new TypeSystem(metadata);
var result = new TypeSystem(metadata as CLRMetadata);
result.Load();
return result;
}
Expand Down
@@ -1,6 +1,5 @@
// Copyright (c) MOSA Project. Licensed under the New BSD License.

using Mosa.Compiler.Common;
using Mosa.Compiler.Common.Exceptions;

namespace Mosa.Compiler.MosaTypeSystem
Expand Down
16 changes: 8 additions & 8 deletions Source/Mosa.Compiler.MosaTypeSystem/Units/MosaArrayInfo.cs
Expand Up @@ -12,11 +12,11 @@ public class MosaArrayInfo : IEquatable<MosaArrayInfo>
{
public static readonly MosaArrayInfo Vector = new MosaArrayInfo(new List<int>(), 1, new List<uint>());

public IList<int> LowerBounds { get; private set; }
public IList<int> LowerBounds { get; }

public uint Rank { get; private set; }
public uint Rank { get; }

public IList<uint> Sizes { get; private set; }
public IList<uint> Sizes { get; }

public MosaArrayInfo(IList<int> lowerBounds, uint rank, IList<uint> sizes)
{
Expand All @@ -27,14 +27,14 @@ public MosaArrayInfo(IList<int> lowerBounds, uint rank, IList<uint> sizes)
Sizes = new List<uint>(sizes).AsReadOnly();
}

public bool Equals(MosaArrayInfo info)
public bool Equals(MosaArrayInfo other)
{
if (this == Vector && info == Vector)
if (this == Vector && other == Vector)
return true;

return Rank == info.Rank &&
LowerBounds.SequenceEquals(info.LowerBounds) &&
Sizes.SequenceEqual(info.Sizes);
return Rank == other.Rank &&
LowerBounds.SequenceEquals(other.LowerBounds) &&
Sizes.SequenceEqual(other.Sizes);
}

private string sig;
Expand Down

0 comments on commit f2b87ca

Please sign in to comment.