Skip to content

Commit fbc1234

Browse files
committed
CLJCLR-196 Make compilation respect *compile-path*
1 parent 32c0bd8 commit fbc1234

2 files changed

Lines changed: 21 additions & 14 deletions

File tree

Clojure/Clojure/CljCompiler/Context/GenContext.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
**/
1010

1111
using clojure.lang.Runtime;
12-
using Microsoft.Scripting.Generation;
1312
using System;
14-
using System.Collections;
1513
using System.Collections.Generic;
1614
using System.Diagnostics.SymbolStore;
1715
using System.Linq.Expressions;
@@ -197,10 +195,16 @@ private GenContext(AssemblyType assemblyType, string directory, AssemblyName ana
197195

198196
#if NETFRAMEWORK
199197
if (_isDebuggable)
198+
{
200199
_docWriter = ModuleBuilder.DefineDocument(sourceName, ClojureContext.Default.LanguageGuid, ClojureContext.Default.VendorGuid, Guid.Empty);
200+
//_assyGen.DocWriter = _docWriter;
201+
}
201202
#elif NET9_0_OR_GREATER
202203
if (_isDebuggable && assemblyType == AssemblyType.External)
204+
{
203205
_docWriter = ModuleBuilder.DefineDocument(sourceName, ClojureContext.Default.LanguageGuid);
206+
_assyGen.SetDocWriter(_docWriter);
207+
}
204208
#endif
205209
}
206210

@@ -245,7 +249,7 @@ public GenContext WithTypeBuilder(TypeBuilder tb)
245249
return newContext;
246250
}
247251

248-
#endregion
252+
#endregion
249253

250254
#region Other
251255

Clojure/Clojure/CljCompiler/Context/MyAssemblyGen.cs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public sealed class MyAssemblyGen
5151
#if NET9_0_OR_GREATER
5252
MethodBuilder _entryPointMethodBuilder; // non-null means we have an entry point
5353
ISymbolDocumentWriter _docWriter = null; // non-null means we are writing debug info
54+
public void SetDocWriter(ISymbolDocumentWriter dw) => _docWriter = dw;
5455
#endif
5556

5657
internal AssemblyBuilder AssemblyBuilder => _myAssembly;
@@ -196,29 +197,31 @@ public string SaveAssembly()
196197
}
197198

198199
#if NETFRAMEWORK
199-
_myAssembly.Save(_outFileName, PortableExecutableKinds.ILOnly, ImageFileMachine.I386);
200-
return Path.Combine(_outDir, _outFileName);
200+
var savePath = Path.Combine(_outDir, _outFileName);
201+
_myAssembly.Save(savePath, PortableExecutableKinds.ILOnly, ImageFileMachine.I386);
202+
return savePath;
201203
#elif NET9_0_OR_GREATER
204+
var savePath = Path.Combine(_outDir, _outFileName);
202205
if ( _entryPointMethodBuilder is not null || _docWriter is not null)
203-
SavePersistedAssemblyHard();
206+
SavePersistedAssemblyHard(savePath);
204207
else
205-
((PersistedAssemblyBuilder)_myAssembly).Save(_outFileName);
206-
return Path.Combine(_outDir, _outFileName);
208+
((PersistedAssemblyBuilder)_myAssembly).Save(savePath);
209+
return savePath;
207210
#else
208211
return null;
209212
#endif
210213

211214
}
212215

213216
#if NET9_0_OR_GREATER
214-
private void SavePersistedAssemblyHard()
217+
private void SavePersistedAssemblyHard(string savePath )
215218
{
216219
PersistedAssemblyBuilder ab = (PersistedAssemblyBuilder)_myAssembly;
217220
MetadataBuilder metadataBuilder = ab.GenerateMetadata(out BlobBuilder ilStream, out BlobBuilder fieldData, out MetadataBuilder pdbBuilder);
218221

219222
MethodDefinitionHandle entryPointHandle =
220223
_entryPointMethodBuilder is null
221-
? default(MethodDefinitionHandle)
224+
? default
222225
: MetadataTokens.MethodDefinitionHandle(_entryPointMethodBuilder.MetadataToken);
223226
DebugDirectoryBuilder debugDirectoryBuilder = GeneratePdb(pdbBuilder, metadataBuilder.GetRowCounts(), entryPointHandle);
224227

@@ -234,7 +237,7 @@ _entryPointMethodBuilder is null
234237
peBuilder.Serialize(peBlob);
235238

236239
// Create the executable:
237-
using FileStream fileStream = new(_outFileName, FileMode.Create, FileAccess.Write);
240+
using FileStream fileStream = new(savePath, FileMode.Create, FileAccess.Write);
238241
peBlob.WriteContentTo(fileStream);
239242
}
240243

@@ -244,13 +247,13 @@ static DebugDirectoryBuilder GeneratePdb(MetadataBuilder pdbBuilder, ImmutableAr
244247
PortablePdbBuilder portablePdbBuilder = new PortablePdbBuilder(pdbBuilder, rowCounts, entryPointHandle);
245248
BlobContentId pdbContentId = portablePdbBuilder.Serialize(portablePdbBlob);
246249
// In case saving PDB to a file
247-
using FileStream fileStream = new FileStream("MyAssemblyEmbeddedSource.pdb", FileMode.Create, FileAccess.Write);
248-
portablePdbBlob.WriteContentTo(fileStream);
250+
//using FileStream fileStream = new FileStream("MyAssemblyEmbeddedSource.pdb", FileMode.Create, FileAccess.Write);
251+
//portablePdbBlob.WriteContentTo(fileStream);
249252

250253
DebugDirectoryBuilder debugDirectoryBuilder = new DebugDirectoryBuilder();
251254
debugDirectoryBuilder.AddCodeViewEntry("MyAssemblyEmbeddedSource.pdb", pdbContentId, portablePdbBuilder.FormatVersion);
252255
// In case embedded in PE:
253-
// debugDirectoryBuilder.AddEmbeddedPortablePdbEntry(portablePdbBlob, portablePdbBuilder.FormatVersion);
256+
debugDirectoryBuilder.AddEmbeddedPortablePdbEntry(portablePdbBlob, portablePdbBuilder.FormatVersion);
254257
return debugDirectoryBuilder;
255258
}
256259
#endif

0 commit comments

Comments
 (0)