diff options
author | Björn Gustavsson <[email protected]> | 2017-09-15 10:16:34 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2017-09-15 10:16:34 +0200 |
commit | 482120c97dc5c0419b92b6a5621886908abfd837 (patch) | |
tree | 7b21a03f7db55e911d2e1e8981daebd056e74516 /lib/compiler/src/compile.erl | |
parent | b991746008c0bd58b99dbff3ca4be99004798e03 (diff) | |
parent | 9bac40fb969bc23f0aa4e90618835fbd95b4dabc (diff) | |
download | otp-482120c97dc5c0419b92b6a5621886908abfd837.tar.gz otp-482120c97dc5c0419b92b6a5621886908abfd837.tar.bz2 otp-482120c97dc5c0419b92b6a5621886908abfd837.zip |
Merge pull request #1558 from josevalim/jv-compile-info
Add compile_info option to compile
OTP-14615
Diffstat (limited to 'lib/compiler/src/compile.erl')
-rw-r--r-- | lib/compiler/src/compile.erl | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl index ec7e7aed14..1b359d1e59 100644 --- a/lib/compiler/src/compile.erl +++ b/lib/compiler/src/compile.erl @@ -1448,15 +1448,33 @@ save_core_code(Code, St) -> beam_asm(Code0, #compile{ifile=File,extra_chunks=ExtraChunks,options=CompilerOpts}=St) -> case debug_info(St) of {ok,DebugInfo,Opts0} -> - Source = paranoid_absname(File), Opts1 = [O || O <- Opts0, effects_code_generation(O)], Chunks = [{<<"Dbgi">>, DebugInfo} | ExtraChunks], - {ok,Code} = beam_asm:module(Code0, Chunks, Source, Opts1, CompilerOpts), + CompileInfo = compile_info(File, Opts1), + {ok,Code} = beam_asm:module(Code0, Chunks, CompileInfo, CompilerOpts), {ok,Code,St#compile{abstract_code=[]}}; {error,Es} -> {error,St#compile{errors=St#compile.errors ++ [{File,Es}]}} end. +compile_info(File, Opts) -> + IsSlim = member(slim, Opts), + IsDeterministic = member(deterministic, Opts), + Info0 = proplists:get_value(compile_info, Opts, []), + Info1 = + case paranoid_absname(File) of + [_|_] = Source when not IsSlim, not IsDeterministic -> + [{source,Source} | Info0]; + _ -> + Info0 + end, + Info2 = + case IsDeterministic of + false -> [{options,proplists:delete(compile_info, Opts)} | Info1]; + true -> Info1 + end, + Info2. + paranoid_absname(""=File) -> File; paranoid_absname(File) -> |