Changeset 62


Ignore:
Timestamp:
07/13/09 05:34:59 (3 years ago)
Author:
dom
Message:

compiler now provides binaries when all ok.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/compiler.erl

    r61 r62  
    2525compile (Notify, Watcher, _, Modules) -> 
    2626    notify_totals (Modules, Notify), 
    27     {Processed, _} = dict: fold (fun process/3, {Modules, Notify}, Modules), 
     27    Init = {Modules, Notify, []}, 
     28    {Processed, _, Binaries} = dict: fold (fun process/3, Init, Modules), 
     29    notify_binaries (Binaries, Notify), 
    2830    loop (Notify, Watcher, Processed). 
    2931 
    30 process (File, found, {Modules, Notify}) -> 
     32process (File, found, {Modules, Notify, Binaries}) -> 
    3133    Result = modules: compile (File), 
    3234    notify_result (Result, Notify), 
    3335    New_modules = dict: store (File, Result, Modules), 
    3436    notify_totals (New_modules, Notify), 
    35     {New_modules, Notify}; 
     37    New_binaries = binaries (Result, Binaries), 
     38    {New_modules, Notify, New_binaries}; 
    3639process (_, _, Acc) -> 
    3740    Acc. 
     
    5760notify_result ({error, Errors, Warnings},Notify) -> 
    5861    Notify ({Errors, Warnings}). 
     62 
     63binaries (_, errors) -> 
     64    errors; 
     65binaries ({ok, _, B, _}, Bs) -> 
     66    [B | Bs]; 
     67binaries ({error, _, _}, _) -> 
     68    errors. 
     69 
     70notify_binaries (errors, _) -> 
     71    pass; 
     72notify_binaries (Bs, Notify) when is_list (Bs) -> 
     73    Notify ({binaries, Bs}). 
  • trunk/src/compiler_test.erl

    r61 r62  
    55-module (compiler_test). 
    66-test (exports). 
    7 -export ([compiles_and_reports_progress/0]). 
     7-export ([compiles_and_reports_progress_warnings_and_errors/0]). 
     8-export ([provides_binaries_when_all_compiled/0]). 
    89-include_lib("stdlib/include/ms_transform.hrl"). 
    910 
    10 compiles_and_reports_progress () -> 
    11 %%     dbg:tracer(), 
    12 %%     dbg:p(new,c), 
    13 %%     dbg:tpl(compiler, dbg:fun2ms(fun(_)->return_trace() end)), 
    14 %%     dbg:tpl(modules, dbg:fun2ms(fun(_)->return_trace() end)), 
     11compiles_and_reports_progress_warnings_and_errors () -> 
    1512    Compiler = spawn_link (compiler, init, [notify_me (), "fix"]), 
    1613    Ms = receive_all (), 
    1714    Compiler ! stop, 
    1815    ok = check (Ms, unknown). 
     16 
     17provides_binaries_when_all_compiled () -> 
     18    F = fun provides_binaries_when_all_compiled/2, 
     19    ok = fixtures: use_tree (good_erl_tree (), F). 
     20 
     21provides_binaries_when_all_compiled (Root, _) -> 
     22    Compiler = spawn_link (compiler, init, [notify_me (), Root]), 
     23    Ms = receive_all (), 
     24    Compiler ! stop, 
     25    ok = check (Ms, unknown), 
     26    {binaries, Bs} = lists: last (Ms), 
     27    Chunks = [ beam_lib: chunks (B, [exports]) || B <- Bs], 
     28    Modules = [M || {ok, {M, [{exports, [_, _, {run, 0}]}]}} <- Chunks], 
     29    [gdbye, hello] = lists: sort (Modules), 
     30    ok. 
     31 
     32%% stops 
     33 
     34%% empty tree 
     35 
    1936 
    2037check ([{Total, 0, 0} | _] = Xs, unknown) -> 
     
    2946  when M2 == M1+1, N2 == N1 -> 
    3047    check ([X | Xs], Total); 
    31 check ([{Total, Total, N}], Total) when N =< Total -> 
     48check ([{Total, Total, N}], Total) when N < Total -> 
     49    ok; 
     50check ([{Total, Total, Total}, {binaries, _}], Total) -> 
    3251    ok. 
     52 
     53good_erl_tree () -> 
     54    [{file, "hello.erl", "-module(hello). -export([run/0]). run()->hello."}, 
     55     {file, "gdbye.erl", "-module(gdbye). -export([run/0]). run()->gdbye."}]. 
    3356 
    3457notify_me () -> 
Note: See TracChangeset for help on using the changeset viewer.