compiler: do not exit early, when given -o x.c or -o x.js

pull/4788/head
Delyan Angelov 2020-05-08 15:31:03 +03:00
parent 4c320e1512
commit e08566d571
4 changed files with 12 additions and 2 deletions

View File

@ -28,6 +28,10 @@ const (
) )
fn main() { fn main() {
main_v()
}
fn main_v() {
args := os.args[1..] args := os.args[1..]
// args = 123 // args = 123
if args.len == 0 || args[0] in ['-', 'repl'] { if args.len == 0 || args[0] in ['-', 'repl'] {

View File

@ -40,6 +40,7 @@ fn (mut v Builder) cc() {
ends_with_c := v.pref.out_name.ends_with('.c') ends_with_c := v.pref.out_name.ends_with('.c')
ends_with_js := v.pref.out_name.ends_with('.js') ends_with_js := v.pref.out_name.ends_with('.js')
if ends_with_c || ends_with_js { if ends_with_c || ends_with_js {
v.pref.skip_running = true
// Translating V code to JS by launching vjs. // Translating V code to JS by launching vjs.
// Using a separate process for V.js is for performance mostly, // Using a separate process for V.js is for performance mostly,
// to avoid constant is_js checks. // to avoid constant is_js checks.
@ -69,7 +70,7 @@ fn (mut v Builder) cc() {
os.mv_by_cp(v.out_name_c, v.pref.out_name) or { os.mv_by_cp(v.out_name_c, v.pref.out_name) or {
panic(err) panic(err)
} }
exit(0) return
} }
// Cross compiling for Windows // Cross compiling for Windows
if v.pref.os == .windows { if v.pref.os == .windows {

View File

@ -40,10 +40,11 @@ pub fn compile(command string, pref &pref.Preferences) {
if pref.is_stats { if pref.is_stats {
println('compilation took: ${sw.elapsed().milliseconds()} ms') println('compilation took: ${sw.elapsed().milliseconds()} ms')
} }
// running does not require the parsers anymore
b.myfree()
if pref.is_test || pref.is_run { if pref.is_test || pref.is_run {
b.run_compiled_executable_and_exit() b.run_compiled_executable_and_exit()
} }
b.myfree()
} }
// Temporary, will be done by -autofree // Temporary, will be done by -autofree
@ -54,6 +55,9 @@ fn (mut b Builder) myfree() {
} }
fn (mut b Builder) run_compiled_executable_and_exit() { fn (mut b Builder) run_compiled_executable_and_exit() {
if b.pref.skip_running {
return
}
if b.pref.is_verbose { if b.pref.is_verbose {
println('============ running $b.pref.out_name ============') println('============ running $b.pref.out_name ============')
} }

View File

@ -83,6 +83,7 @@ pub mut:
run_args []string // `v run x.v 1 2 3` => `1 2 3` run_args []string // `v run x.v 1 2 3` => `1 2 3`
printfn_list []string // a list of generated function names, whose source should be shown, for debugging printfn_list []string // a list of generated function names, whose source should be shown, for debugging
print_v_files bool // when true, just print the list of all parsed .v files then stop. print_v_files bool // when true, just print the list of all parsed .v files then stop.
skip_running bool // when true, do no try to run the produced file (set by b.cc(), when -o x.c or -o x.js)
} }
pub fn backend_from_string(s string) ?Backend { pub fn backend_from_string(s string) ?Backend {