3838module Sakura = struct
3939 let compile_clause = Sakura. compile_clause
4040
41- module Lookup = Compiler .Lookup
41+ module Lookup = Database .Lookup
4242end
4343
4444type preprocessed_files = Ast.Clause .t BatFingerTree .t BatMap.String .t
4545type preprocessed_result = Preprocessor.DependencyGraph .t * preprocessed_files
4646
4747(* FIXME: hook up dependency information and sort the file list before compiling *)
4848(* TODO: compilation cache *)
49- let compile (persist : Compiler.Types.Persist.t ) (filepaths : string list ) :
49+ let compile ({ sakura_module_name } : Compiler.Types.cli )
50+ (persist : Compiler.Types.Persist.t ) (filepaths : string list ) :
5051 unit attempt =
52+ let is_sakura_file filepath = Filename. extension filepath = " .skr" in
53+ let sakura_filename = sakura_module_name ^ " .skr" in
54+ let sakura_files, karuta_files = BatList. partition is_sakura_file filepaths in
55+ let * sakura_output =
56+ sakura_files
57+ |> Error. fold (fun parsed filepath ->
58+ parse filepath |> Error. map (List. append parsed))
59+ ||> preprocess (Preprocessor. initialize sakura_filename)
60+ in
5161 let compile_one_file (preprocessed : preprocessed_files ) filepath externals =
52- let extension = Filename. extension filepath in
5362 let compiler_config =
54- if extension = " .skr " then
63+ if is_sakura_file filepath then
5564 (module Sakura : Compiler.Types.COMPILER_CONFIG )
5665 else (module Karuta : Compiler.Types.COMPILER_CONFIG )
5766 in
@@ -78,18 +87,20 @@ let compile (persist : Compiler.Types.Persist.t) (filepaths : string list) :
7887 in
7988 let * dependency_graph, preprocessed_files =
8089 List. fold_left preprocess_one
81- (ok (Preprocessor.DependencyGraph. empty, BatMap.String. empty))
90+ (ok
91+ ( sakura_output.dependencies,
92+ BatMap.String. singleton sakura_filename sakura_output.clauses ))
8293 filepaths
8394 in
8495 let * expanded_graph = Preprocessor.DependencyGraph. expand dependency_graph in
8596 let sorted_file_paths =
86- Preprocessor.DependencyGraph. sort expanded_graph filepaths
97+ Preprocessor.DependencyGraph. sort expanded_graph karuta_files
8798 in
8899 let rec compile_all imports = function
89100 | [] -> Ok ()
90101 | f :: files ->
91- Result. bind ( compile_one_file preprocessed_files f imports)
92- ( fun result -> compile_all result.externals files)
102+ let * result = compile_one_file preprocessed_files f imports in
103+ compile_all result.externals files
93104 in
94105 compile_all BatMap.String. empty sorted_file_paths
95106
0 commit comments