Lines Matching refs:compile

20 -module(compile).  module
31 -export([compile/3,compile_beam/3,compile_asm/3,compile_core/3]).
146 -record(compile, {filename="", record
170 internal_comp(Ps, "", "", #compile{code=Forms,options=Opts});
173 Compile = #compile{options=Opts},
193 St1 = St0#compile{filename=File, dir=Dir, base=Base,
196 Run = case member(time, St1#compile.options) of
219 Es = [{St0#compile.ifile,[{none,?MODULE,{crash,Name,Reason}}]}],
220 {error,St0#compile{errors=St0#compile.errors ++ Es}};
222 Es = [{St0#compile.ifile,[{none,?MODULE,{bad_return,Name,Other}}]}],
223 {error,St0#compile{errors=St0#compile.errors ++ Es}}
250 comp_ret_ok(#compile{code=Code,warnings=Warn,module=Mod,options=Opts}=St) ->
265 case member(return_errors, St#compile.options) of
266 true -> {error,St#compile.errors,St#compile.warnings};
352 case catch Mod:module(St#compile.code, St#compile.options) of
354 {ok,St#compile{code=Code}};
356 {error,St#compile{errors=St#compile.errors ++ Es}}
487 file:delete(St#compile.ofile),
537 case file:consult(St#compile.ifile) of
540 {ok,St#compile{module=Module, code=Forms}};
542 Es = [{St#compile.ifile,[{none,?MODULE,{open,E}}]}],
543 {error,St#compile{errors=St#compile.errors ++ Es}}
547 case file:read_file(St#compile.ifile) of
549 Infile = St#compile.ifile,
552 {ok,St#compile{module=none,code=none}};
556 {ok,St#compile{module=Mod,code=Beam,ofile=Infile}}
559 Es = [{St#compile.ifile,[{none,?MODULE,{open,E}}]}],
560 {error,St#compile{errors=St#compile.errors ++ Es}}
573 Opts = St#compile.options,
575 IncludePath = [Cwd, St#compile.dir|inc_paths(Opts)],
578 R = epp:parse_file(St#compile.ifile, IncludePath, pre_defs(Opts)),
582 {ok,St#compile{code=Forms}};
584 Es = [{St#compile.ifile,[{none,?MODULE,{epp,E}}]}],
585 {error,St#compile{errors=St#compile.errors ++ Es}}
589 case file:read_file(St#compile.ifile) of
596 {ok,St#compile{module=Name,code=Mod}};
598 Es = [{St#compile.ifile,[E]}],
599 {error,St#compile{errors=St#compile.errors ++ Es}}
602 Es = [{St#compile.ifile,[E]}],
603 {error,St#compile{errors=St#compile.errors ++ Es}}
606 Es = [{St#compile.ifile,[{none,compile,{open,E}}]}],
607 {error,St#compile{errors=St#compile.errors ++ Es}}
610 compile_options([{attribute,_L,compile,C}|Fs]) when is_list(C) ->
612 compile_options([{attribute,_L,compile,C}|Fs]) ->
621 Ts = transforms(St#compile.options ++ compile_options(St#compile.code)),
626 Fun = fun(S) -> T:parse_transform(S#compile.code, S#compile.options) end,
627 Run = case member(time, St#compile.options) of
633 {error,St#compile{warnings=St#compile.warnings ++ Ws,
634 errors=St#compile.errors ++ Es}};
636 Es = [{St#compile.ifile,[{none,compile,{parse_transform,T,R}}]}],
637 {error,St#compile{errors=St#compile.errors ++ Es}};
639 foldl_transform(St#compile{code=Forms}, Ts)
648 Ts = get_core_transforms(St#compile.options),
653 Fun = fun(S) -> T:core_transform(S#compile.code, S#compile.options) end,
654 Run = case member(time, St#compile.options) of
660 Es = [{St#compile.ifile,[{none,compile,{core_transform,T,R}}]}],
661 {error,St#compile{errors=St#compile.errors ++ Es}};
663 foldl_core_transforms(St#compile{code=Forms}, Ts)
678 F = St#compile.filename,
682 St#compile{base = atom_to_list(M)};
688 case erl_lint:module(St#compile.code,
689 St#compile.ifile, St#compile.options) of
693 St1 = add_default_base(St, St#compile.code),
694 {ok,St1#compile{warnings=St1#compile.warnings ++ Ws}};
696 {error,St#compile{warnings=St#compile.warnings ++ Ws,
697 errors=St#compile.errors ++ Es}}
701 case core_lint:module(St#compile.code, St#compile.options) of
703 {ok,St#compile{warnings=St#compile.warnings ++ Ws}};
705 {error,St#compile{warnings=St#compile.warnings ++ Ws,
706 errors=St#compile.errors ++ Es}}
712 expand_module(#compile{code=Code,options=Opts0}=St0) ->
716 {ok,St0#compile{module=Mod,options=Opts,code={Mod,Exp,Forms}}}.
718 core_module(#compile{code=Code0,options=Opts,ifile=File}=St) ->
720 {ok,St#compile{code=Code,warnings=St#compile.warnings ++ [{File,Ws}]}}.
722 core_fold_module(#compile{code=Code0,options=Opts,ifile=File}=St) ->
724 {ok,St#compile{code=Code,warnings=St#compile.warnings ++ [{File,Ws}]}}.
726 test_old_inliner(#compile{options=Opts}) ->
739 test_core_inliner(#compile{options=Opts}) ->
750 core_old_inliner(#compile{code=Code0,options=Opts}=St) ->
753 {ok,St#compile{code=Code}};
755 {error,St#compile{errors=St#compile.errors ++ Es}}
758 core_inline_module(#compile{code=Code0,options=Opts}=St) ->
760 {ok,St#compile{code=Code}}.
762 core_dsetel_module(#compile{code=Code0,options=Opts}=St) ->
764 {ok,St#compile{code=Code}}.
766 kernel_module(#compile{code=Code0,options=Opts,ifile=File}=St) ->
768 {ok,St#compile{code=Code,warnings=St#compile.warnings ++ [{File,Ws}]}}.
771 {ok,St#compile{abstract_code=abstract_code(St)}}.
773 abstract_code(#compile{code=Code}) ->
781 {ok,St#compile{core_code=cerl:from_records(St#compile.code)}}.
783 beam_unused_labels(#compile{code=Code0}=St) ->
785 {ok,St#compile{code=Code}}.
787 beam_asm(#compile{ifile=File,code=Code0,abstract_code=Abst,options=Opts0}=St) ->
791 {ok,Code} -> {ok,St#compile{code=Code,abstract_code=[]}};
792 {error,Es} -> {error,St#compile{errors=St#compile.errors ++ Es}}
795 test_native(#compile{options=Opts}) ->
800 native_compile(#compile{code=none}=St) -> {ok,St};
804 Ws = [{St#compile.ifile,[{none,compile,no_native_support}]}],
805 {ok,St#compile{warnings=St#compile.warnings ++ Ws}};
811 Opts0 = [no_new_binaries|St#compile.options],
818 case catch hipe:compile(St#compile.module,
819 St#compile.core_code,
820 St#compile.code,
827 Ws = [{St#compile.ifile,[{none,?MODULE,{native,R}}]}],
828 {ok,St#compile{warnings=St#compile.warnings ++ Ws}};
830 Es = [{St#compile.ifile,[{none,?MODULE,{native,R}}]}],
831 {error,St#compile{errors=St#compile.errors ++ Es}}
836 Ws = [{St#compile.ifile,[{none,?MODULE,{native_crash,R}}]}],
837 {ok,St#compile{warnings=St#compile.warnings ++ Ws}};
844 {ok, _, Chunks0} = beam_lib:all_chunks(St#compile.code),
849 St#compile{code=BeamPlusNative}.
861 save_binary(#compile{code=none}=St) -> {ok,St};
863 Tfile = tmpfile(St#compile.ofile), %Temp working file
864 case write_binary(Tfile, St#compile.code, St) of
866 case file:rename(Tfile, St#compile.ofile) of
871 Es = [{St#compile.ofile,[{none,?MODULE,{rename,Tfile}}]}],
872 {error,St#compile{errors=St#compile.errors ++ Es}}
875 Es = [{Tfile,[{compile,write_error}]}],
876 {error,St#compile{errors=St#compile.errors ++ Es}}
880 Opts = case member(compressed, St#compile.options) of
893 case member(report_errors, St#compile.options) of
897 St#compile.errors);
901 report_warnings(#compile{options=Opts,warnings=Ws0}) ->
954 outfile(Base, "beam", St#compile.options).
987 Lfile = outfile(St#compile.base, Ext, St#compile.options),
990 LFun(Lf, St#compile.code),
994 Es = [{Lfile,[{none,compile,write_error}]}],
995 {error,St#compile{errors=St#compile.errors ++ Es}}
1033 compile(File0, _OutFile, Options) -> function