X-Git-Url: http://nitlanguage.org diff --git a/src/nitg.nit b/src/nitg.nit index 58872b0..4228a62 100644 --- a/src/nitg.nit +++ b/src/nitg.nit @@ -19,15 +19,28 @@ module nitg import modelbuilder import frontend +import transform import rapid_type_analysis import global_compiler import separate_erasure_compiler import separate_compiler +import android_platform +import compiler_ffi # Create a tool context to handle options and paths var toolcontext = new ToolContext + +# Create a new option for --global +var opt_global = new OptionBool("Use global compilation", "--global") +toolcontext.option_context.add_option(opt_global) + +var opt_mixins = new OptionArray("Additionals module to min-in", "-m") +toolcontext.option_context.add_option(opt_mixins) + +toolcontext.tooldescription = "Usage: nitg [OPTION]... file.nit\nCompiles Nit programs." + # We do not add other options, so process them now! -toolcontext.process_options +toolcontext.process_options(args) # We need a model to collect stufs var model = new Model @@ -35,33 +48,40 @@ var model = new Model var modelbuilder = new ModelBuilder(model, toolcontext) var arguments = toolcontext.option_context.rest -if arguments.is_empty then - toolcontext.option_context.usage - return -end if arguments.length > 1 then print "Too much arguments: {arguments.join(" ")}" - toolcontext.option_context.usage - return + print toolcontext.tooldescription + exit 1 end var progname = arguments.first # Here we load an process all modules passed on the command line var mmodules = modelbuilder.parse([progname]) +mmodules.add_all modelbuilder.parse(opt_mixins.value) + if mmodules.is_empty then return modelbuilder.run_phases -if toolcontext.opt_only_metamodel.value then exit(0) +var mainmodule +if mmodules.length == 1 then + mainmodule = mmodules.first +else + mainmodule = new MModule(model, null, mmodules.first.name, mmodules.first.location) + mainmodule.set_imported_mmodules(mmodules) +end -# Here we launch the interpreter on the main module -assert mmodules.length == 1 -var mainmodule = mmodules.first -var analysis = modelbuilder.do_rapid_type_analysis(mainmodule) +var platform = mainmodule.target_platform +if platform != null and not platform.supports_libunwind then + toolcontext.opt_no_stacktrace.value = true + toolcontext.opt_stacktrace.value = false +end if toolcontext.opt_erasure.value then - modelbuilder.run_separate_erasure_compiler(mainmodule, analysis) -else if toolcontext.opt_separate.value then - modelbuilder.run_separate_compiler(mainmodule, analysis) -else + modelbuilder.run_separate_erasure_compiler(mainmodule, null) +else if opt_global.value then + var analysis = modelbuilder.do_rapid_type_analysis(mainmodule) modelbuilder.run_global_compiler(mainmodule, analysis) +else + var analysis = modelbuilder.do_rapid_type_analysis(mainmodule) + modelbuilder.run_separate_compiler(mainmodule, analysis) end