equal
deleted
inserted
replaced
317 handle Option => error ("Unknown statement name: " ^ labelled_name name); |
317 handle Option => error ("Unknown statement name: " ^ labelled_name name); |
318 in (deresolver, hs_program) end; |
318 in (deresolver, hs_program) end; |
319 |
319 |
320 fun serialize_haskell module_prefix raw_module_name string_classes labelled_name |
320 fun serialize_haskell module_prefix raw_module_name string_classes labelled_name |
321 raw_reserved includes raw_module_alias |
321 raw_reserved includes raw_module_alias |
322 syntax_class syntax_tyco syntax_const program cs destination = |
322 syntax_class syntax_tyco syntax_const (code_of_pretty, code_writeln) program cs destination = |
323 let |
323 let |
324 val stmt_names = Code_Target.stmt_names_of_destination destination; |
324 val stmt_names = Code_Target.stmt_names_of_destination destination; |
325 val module_name = if null stmt_names then raw_module_name else SOME "Code"; |
325 val module_name = if null stmt_names then raw_module_name else SOME "Code"; |
326 val reserved = fold (insert (op =) o fst) includes raw_reserved; |
326 val reserved = fold (insert (op =) o fst) includes raw_reserved; |
327 val (deresolver, hs_program) = haskell_program_of_program labelled_name |
327 val (deresolver, hs_program) = haskell_program_of_program labelled_name |
365 fun print_import_include (name, _) = str ("import qualified " ^ name ^ ";"); |
365 fun print_import_include (name, _) = str ("import qualified " ^ name ^ ";"); |
366 fun print_import_module name = str ((if qualified |
366 fun print_import_module name = str ((if qualified |
367 then "import qualified " |
367 then "import qualified " |
368 else "import ") ^ name ^ ";"); |
368 else "import ") ^ name ^ ";"); |
369 val import_ps = map print_import_include includes @ map print_import_module imports |
369 val import_ps = map print_import_include includes @ map print_import_module imports |
370 val content = Pretty.chunks2 (if null import_ps then [] else [Pretty.chunks import_ps] |
370 val content = Pretty.chunks2 ((if null import_ps then [] else [Pretty.chunks import_ps]) |
371 @ map_filter |
371 @ map_filter |
372 (fn (name, (_, SOME stmt)) => SOME (print_stmt qualified (name, stmt)) |
372 (fn (name, (_, SOME stmt)) => SOME (print_stmt qualified (name, stmt)) |
373 | (_, (_, NONE)) => NONE) stmts |
373 | (_, (_, NONE)) => NONE) stmts |
374 ); |
374 ); |
375 in print_module module_name' content end; |
375 in print_module module_name' content end; |
391 o Long_Name.explode) modlname; |
391 o Long_Name.explode) modlname; |
392 val pathname = Path.append destination filename; |
392 val pathname = Path.append destination filename; |
393 val _ = File.mkdir (Path.dir pathname); |
393 val _ = File.mkdir (Path.dir pathname); |
394 in File.write pathname |
394 in File.write pathname |
395 ("{-# OPTIONS_GHC -fglasgow-exts #-}\n\n" |
395 ("{-# OPTIONS_GHC -fglasgow-exts #-}\n\n" |
396 ^ Code_Target.code_of_pretty content) |
396 ^ code_of_pretty content) |
397 end |
397 end |
398 in |
398 in |
399 Code_Target.mk_serialization target NONE |
399 Code_Target.mk_serialization target NONE |
400 (fn NONE => K () o map (Code_Target.code_writeln o snd) | SOME file => K () o map |
400 (fn NONE => K () o map (code_writeln o snd) | SOME file => K () o map |
401 (write_module (check_destination file))) |
401 (write_module (check_destination file))) |
402 (rpair [] o cat_lines o map (Code_Target.code_of_pretty o snd)) |
402 (rpair [] o cat_lines o map (code_of_pretty o snd)) |
403 (map (uncurry print_module) includes |
403 (map (uncurry print_module) includes |
404 @ map serialize_module (Symtab.dest hs_program)) |
404 @ map serialize_module (Symtab.dest hs_program)) |
405 destination |
405 destination |
406 end; |
406 end; |
407 |
407 |