diff --git a/src/ezic_generator.erl b/src/ezic_generator.erl index 7b1e4de..6aede55 100644 --- a/src/ezic_generator.erl +++ b/src/ezic_generator.erl @@ -3,26 +3,32 @@ -include("include/ezic.hrl"). generate() -> - {ok, Zones, Rules, _, _} = ezic_record:separate(ezic_loader:load()), + {ok, Zones, Rules, _, Links} = ezic_record:separate(ezic_loader:load()), FlatZones = ezic_flatten:flatten(Zones, Rules), filelib:ensure_dir("zones/"), {ok, MapFile} = file:open("zones/ezic_zone_map.erl", [write]), file:write(MapFile, "-module(ezic_zone_map).\n"), file:write(MapFile, "-export([find/1]).\n"), - generate_files(FlatZones, MapFile, []), + generate_zones(FlatZones, MapFile, []), + generate_links(Links, MapFile), + + file:write(MapFile, "find(Z) -> throw({zone_not_found, Z}).\n"), + file:close(MapFile), ok. -generate_files([], MapFile, Files) -> +generate_links([], _) -> ok; +generate_links([#link{from = From, to = To} | Rest], MapFile) -> + file:write(MapFile, io_lib:format("find(~p) -> find(~p);\n", [To, From])), + generate_links(Rest, MapFile). + +generate_zones([], MapFile, Files) -> lists:foreach(fun({_, File}) -> file:write(File, "]."), file:close(File) - end, Files), + end, Files); - file:write(MapFile, "find(Z) -> throw({zone_not_found, Z}).\n"), - file:close(MapFile); - -generate_files([FlatZone = #flatzone{tzname = Name} | Rest], MapFile, Files) -> +generate_zones([FlatZone = #flatzone{tzname = Name} | Rest], MapFile, Files) -> {File, NewFiles} = case orddict:find(Name, Files) of error -> IO = create_file(Name, MapFile), @@ -32,7 +38,7 @@ generate_files([FlatZone = #flatzone{tzname = Name} | Rest], MapFile, Files) -> {IO, Files} end, file:write(File, io_lib:format("~1000p", [FlatZone])), - generate_files(Rest, MapFile, NewFiles). + generate_zones(Rest, MapFile, NewFiles). create_file(ZoneName, MapFile) -> io:format("Creating file for zone ~p~n", [ZoneName]),