open Support.Pervasive open Support.Error open Cpp2str open Parser open Printf open Unix open Parser_misc let _ = let inFile = parseArgs() in let std_ds = parseFile "stdlib.g" in let orig_ds = parseFile inFile in let (std_ds,_,env) = Type_check.typecheck_decls true G_ast.init_env std_ds in let (ds,fwd_ds,env) = Type_check.typecheck_decls true env orig_ds in let ds = Lower_fun.lower_fun_decls (std_ds@ds) in let outFile = sprintf "%s.cpp" (Filename.chop_extension inFile) in let outf = open_out outFile in let prog = sprintf "#include \"fun_stdlib.h\"\n#include \n#include \n#include \"any_pointer.hpp\"\n#include \n#include \n\ntemplate\nboost::mpl::int_ __make_int() {\nreturn boost::mpl::int_();\n}\n%s" (cpp2str ds) in output_string outf prog; close_out outf; let outFile = sprintf "%s.fwd" (Filename.chop_extension inFile) in let outf = open_out outFile in let fwd_decls = (String.concat "\n\n" (map G2str.g2string_decl fwd_ds)) in output_string outf fwd_decls; close_out outf