1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/v/builder/js.v

64 lines
1.3 KiB
V

module builder
import time
import os
import v.parser
import v.pref
import v.gen
import v.gen.js
pub fn (mut b Builder) gen_js(v_files []string) string {
t0 := time.ticks()
b.parsed_files = parser.parse_files(v_files, b.table, b.pref, b.global_scope)
b.parse_imports()
t1 := time.ticks()
parse_time := t1 - t0
b.timing_message('PARSE', parse_time)
b.checker.check_files(b.parsed_files)
t2 := time.ticks()
check_time := t2 - t1
b.timing_message('CHECK', check_time)
b.print_warnings_and_errors()
res := js.gen(b.parsed_files, b.table, b.pref)
t3 := time.ticks()
gen_time := t3 - t2
b.timing_message('JS GEN', gen_time)
return res
}
pub fn (mut b Builder) build_js(v_files []string, out_file string) {
b.out_name_js = out_file
b.info('build_js($out_file)')
output := b.gen_js(v_files)
mut f := os.create(out_file) or {
panic(err)
}
f.writeln(output)
f.close()
}
pub fn (mut b Builder) compile_js() {
mut files := b.get_user_files()
files << b.get_builtin_files()
b.set_module_lookup_paths()
if b.pref.is_verbose {
println('all .v files:')
println(files)
}
mut name := b.pref.out_name
if !name.ends_with('.js') {
name += '.js'
}
b.build_js(files, name)
}
fn (mut b Builder) run_js() {
cmd := 'node ' + b.pref.out_name + '.js'
res := os.exec(cmd) or {
println('JS compilation failed.')
verror(err)
return
}
println(res.output)
}