File tree 4 files changed +27
-4
lines changed
4 files changed +27
-4
lines changed Original file line number Diff line number Diff line change @@ -192,7 +192,10 @@ class Crystal::Command
192
192
output_filename = Crystal .tempfile(config.output_filename)
193
193
194
194
result = config.compile output_filename
195
- execute output_filename, config.arguments unless config.compiler.no_codegen?
195
+
196
+ unless config.compiler.no_codegen?
197
+ execute output_filename, config.arguments, config.compiler
198
+ end
196
199
end
197
200
198
201
private def types
@@ -211,7 +214,7 @@ class Crystal::Command
211
214
{config, result}
212
215
end
213
216
214
- private def execute (output_filename , run_args )
217
+ private def execute (output_filename , run_args , compiler )
215
218
time? = @time && ! @progress_tracker .stats?
216
219
status, elapsed_time = @progress_tracker .stage(" Execute" ) do
217
220
begin
@@ -224,6 +227,13 @@ class Crystal::Command
224
227
{$? , Time .now - start_time}
225
228
ensure
226
229
File .delete(output_filename) rescue nil
230
+
231
+ # Delete related dwarf generated by dsymutil, if any exists
232
+ {% if flag?(:darwin ) % }
233
+ unless compiler.debug.none?
234
+ File .delete(" #{ output_filename } .dwarf" ) rescue nil
235
+ end
236
+ {% end % }
227
237
end
228
238
end
229
239
Original file line number Diff line number Diff line change @@ -27,6 +27,6 @@ class Crystal::Command
27
27
output_filename = Crystal .tempfile " eval"
28
28
29
29
result = compiler.compile sources, output_filename
30
- execute output_filename, program_args
30
+ execute output_filename, program_args, compiler
31
31
end
32
32
end
Original file line number Diff line number Diff line change @@ -68,6 +68,6 @@ class Crystal::Command
68
68
output_filename = Crystal .tempfile " spec"
69
69
70
70
result = compiler.compile sources, output_filename
71
- execute output_filename, options
71
+ execute output_filename, options, compiler
72
72
end
73
73
end
Original file line number Diff line number Diff line change @@ -254,13 +254,26 @@ module Crystal
254
254
cross_compile program, units, output_filename
255
255
else
256
256
result = codegen program, units, output_filename, output_dir
257
+
258
+ {% if flag?(:darwin ) % }
259
+ run_dsymutil(output_filename) unless debug.none?
260
+ {% end % }
257
261
end
258
262
259
263
CacheDir .instance.cleanup if @cleanup
260
264
261
265
result
262
266
end
263
267
268
+ private def run_dsymutil (filename )
269
+ dsymutil = Process .find_executable(" dsymutil" )
270
+ return unless dsymutil
271
+
272
+ @progress_tracker .stage(" dsymutil" ) do
273
+ Process .run(dsymutil, [" --flat" , filename])
274
+ end
275
+ end
276
+
264
277
private def cross_compile (program , units , output_filename )
265
278
llvm_mod = units.first.llvm_mod
266
279
object_name = " #{ output_filename } .o"
You can’t perform that action at this time.
0 commit comments