Skip to content

Commit 0879146

Browse files
committed
Generator: compiler now could accept path for saving the resulting assembly (useful for tests).
1 parent 75b14b2 commit 0879146

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

Naggum.Test/CompilerTest.fs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
namespace Naggum.Test
22

3+
open System
34
open System.Diagnostics
45
open System.IO
5-
open System.Reflection
66

77
open Xunit
88

@@ -20,7 +20,8 @@ type CompilerTest() =
2020
let basePath = Path.Combine(directory, testName)
2121
let testPath = Path.ChangeExtension(basePath, testExtension)
2222
let resultPath = Path.ChangeExtension(basePath, resultExtension)
23-
let executablePath = Path.ChangeExtension(testName, executableExtension)
23+
let executableName = Path.ChangeExtension (testName, executableExtension)
24+
let executablePath = Path.Combine (Environment.CurrentDirectory, executableName)
2425

2526
use stream = File.Open(testPath, FileMode.Open)
2627
Generator.compile stream testName executablePath []

ngc/Generator.fs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,14 @@ let compileMethod context (generatorFactory : IGeneratorFactory) body (methodBui
2828

2929
epilogue context ilGenerator
3030

31-
let compile (source : Stream) (assemblyName : string) (fileName : string) (asmRefs:string list): unit =
32-
let assemblyName = new AssemblyName(assemblyName)
33-
let assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
31+
let compile (source : Stream) (assemblyName : string) (filePath : string) (asmRefs:string list): unit =
32+
let assemblyName = AssemblyName assemblyName
33+
let path = Path.GetDirectoryName filePath
34+
let assemblyPath = if path = "" then null else path
35+
let fileName = Path.GetFileName filePath
36+
let appDomain = AppDomain.CurrentDomain
37+
38+
let assemblyBuilder = appDomain.DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Save, assemblyPath)
3439
Globals.ModuleBuilder <- assemblyBuilder.DefineDynamicModule(assemblyBuilder.GetName().Name, fileName)
3540
let typeBuilder = Globals.ModuleBuilder.DefineType("Program", TypeAttributes.Public ||| TypeAttributes.Class ||| TypeAttributes.BeforeFieldInit)
3641
let methodBuilder = typeBuilder.DefineMethod ("Main",

0 commit comments

Comments
 (0)