v2 / vlib / v / builder / jsbuilder / jsbuilder.v
47 lines · 42 sloc · 1.12 KB · 667f65bb5fde05bcf1148784049cc28088efd4fa
Raw
1module jsbuilder
2
3import os
4import v.pref
5import v.util
6import v.builder
7import v.gen.js
8
9pub fn start() {
10 mut args_and_flags := util.join_env_vflags_and_os_args()[1..]
11 prefs, _ := pref.parse_args([], args_and_flags)
12 builder.compile('build', prefs, compile_js)
13}
14
15pub fn compile_js(mut b builder.Builder) {
16 mut files := b.get_builtin_files()
17 files << b.get_user_files()
18 b.set_module_lookup_paths()
19 if b.pref.is_verbose {
20 println('all .v files:')
21 println(files)
22 }
23 mut name := b.pref.out_name
24 if !name.ends_with('.js') {
25 name += '.js'
26 }
27 build_js(mut b, files, name)
28}
29
30pub fn build_js(mut b builder.Builder, v_files []string, out_file string) {
31 b.out_name_js = out_file
32 b.info('build_js(${out_file})')
33 output := gen_js(mut b, v_files)
34 os.write_file(out_file, output) or { panic(err) }
35 if b.pref.is_stats {
36 b.stats_lines = output.count('\n') + 1
37 b.stats_bytes = output.len
38 }
39}
40
41pub fn gen_js(mut b builder.Builder, v_files []string) string {
42 b.front_and_middle_stages(v_files) or { return '' }
43 util.timing_start('JS GEN')
44 res := js.gen(b.parsed_files, mut b.table, b.pref)
45 util.timing_measure('JS GEN')
46 return res
47}
48