2020-04-15 23:16:49 +02:00
|
|
|
module builder
|
|
|
|
|
2020-04-25 17:49:16 +02:00
|
|
|
import time
|
|
|
|
import os
|
|
|
|
import v.parser
|
|
|
|
import v.pref
|
|
|
|
import v.gen
|
|
|
|
import v.gen.js
|
2020-04-15 23:16:49 +02:00
|
|
|
|
2020-04-25 17:49:16 +02:00
|
|
|
pub fn (mut b Builder) gen_js(v_files []string) string {
|
2020-04-15 23:16:49 +02:00
|
|
|
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.info('PARSE: ${parse_time}ms')
|
|
|
|
b.checker.check_files(b.parsed_files)
|
|
|
|
t2 := time.ticks()
|
|
|
|
check_time := t2 - t1
|
|
|
|
b.info('CHECK: ${check_time}ms')
|
2020-04-29 12:04:09 +02:00
|
|
|
b.print_warnings_and_errors()
|
2020-04-15 23:16:49 +02:00
|
|
|
res := js.gen(b.parsed_files, b.table, b.pref)
|
|
|
|
t3 := time.ticks()
|
|
|
|
gen_time := t3 - t2
|
|
|
|
b.info('JS GEN: ${gen_time}ms')
|
|
|
|
return res
|
|
|
|
}
|
|
|
|
|
2020-04-25 17:49:16 +02:00
|
|
|
pub fn (mut b Builder) build_js(v_files []string, out_file string) {
|
2020-04-15 23:16:49 +02:00
|
|
|
b.out_name_js = out_file
|
|
|
|
b.info('build_js($out_file)')
|
2020-04-30 18:15:30 +02:00
|
|
|
output := b.gen_js(v_files)
|
2020-04-15 23:16:49 +02:00
|
|
|
mut f := os.create(out_file) or {
|
|
|
|
panic(err)
|
|
|
|
}
|
2020-04-30 18:15:30 +02:00
|
|
|
f.writeln(output)
|
2020-04-15 23:16:49 +02:00
|
|
|
f.close()
|
|
|
|
}
|
|
|
|
|
2020-04-25 17:49:16 +02:00
|
|
|
pub fn (mut b Builder) compile_js() {
|
2020-05-21 15:17:16 +02:00
|
|
|
mut files := b.get_user_files()
|
|
|
|
files << b.get_builtin_files()
|
2020-04-15 23:16:49 +02:00
|
|
|
b.set_module_lookup_paths()
|
2020-04-17 21:17:19 +02:00
|
|
|
if b.pref.is_verbose {
|
2020-04-15 23:16:49 +02:00
|
|
|
println('all .v files:')
|
|
|
|
println(files)
|
|
|
|
}
|
2020-04-17 21:17:19 +02:00
|
|
|
b.build_js(files, b.pref.out_name + '.js')
|
2020-04-15 23:16:49 +02:00
|
|
|
}
|
2020-05-21 15:17:16 +02:00
|
|
|
|
|
|
|
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)
|
2020-06-04 20:26:18 +02:00
|
|
|
}
|