public DmdRuntimeImpl(DmdEvaluator evaluator, DmdImageFileMachine machine) { appDomainsLockObj = new object(); appDomains = new List <DmdAppDomainImpl>(); Evaluator = evaluator ?? throw new ArgumentNullException(nameof(evaluator)); PointerSize = CalculatePointerSize(machine); Machine = machine; }
/// <summary> /// Creates a runtime /// </summary> /// <param name="evaluator">Evaluator</param> /// <param name="machine">Machine</param> /// <returns></returns> public static DmdRuntime CreateRuntime(DmdEvaluator evaluator, DmdImageFileMachine machine) { if (evaluator == null) { throw new ArgumentNullException(nameof(evaluator)); } return(new DmdRuntimeImpl(evaluator, machine)); }
static int CalculatePointerSize(DmdImageFileMachine machine) { switch (machine) { case DmdImageFileMachine.IA64: case DmdImageFileMachine.AMD64: case DmdImageFileMachine.ARM64: case DmdImageFileMachine.ALPHA64: return(8); default: return(4); } }
/// <summary> /// Gets PE information /// </summary> /// <param name="peKind">PE Kind</param> /// <param name="machine">Machine</param> public abstract void GetPEKind(out DmdPortableExecutableKinds peKind, out DmdImageFileMachine machine);
public override void GetPEKind(out DmdPortableExecutableKinds peKind, out DmdImageFileMachine machine) { peKind = DmdPortableExecutableKinds.ILOnly; machine = DmdImageFileMachine.I386; }
static DmdAssemblyNameFlags GetProcessorArchitecture(DmdPortableExecutableKinds peKind, DmdImageFileMachine machine) { if ((peKind & DmdPortableExecutableKinds.PE32Plus) == 0) { switch (machine) { case DmdImageFileMachine.I386: if ((peKind & DmdPortableExecutableKinds.Required32Bit) != 0) { return(DmdAssemblyNameFlags.PA_x86); } if ((peKind & DmdPortableExecutableKinds.ILOnly) != 0) { return(DmdAssemblyNameFlags.PA_MSIL); } return(DmdAssemblyNameFlags.PA_x86); case DmdImageFileMachine.ARM: return(DmdAssemblyNameFlags.PA_ARM); } } else { switch (machine) { case DmdImageFileMachine.I386: if ((peKind & DmdPortableExecutableKinds.ILOnly) != 0) { return(DmdAssemblyNameFlags.PA_MSIL); } break; case DmdImageFileMachine.AMD64: return(DmdAssemblyNameFlags.PA_AMD64); case DmdImageFileMachine.IA64: return(DmdAssemblyNameFlags.PA_IA64); } } return(DmdAssemblyNameFlags.PA_None); }