From c858978348382dcc4a76e06a9af75d875e444997 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Mon, 20 Jul 2020 12:36:27 +0300 Subject: [PATCH] cgen: add support for `-d trace_gen` too. Add `v tracev` command. --- cmd/tools/vtracev.v | 17 +++++++++++++++++ cmd/v/help/default.txt | 3 +++ cmd/v/v.v | 2 +- vlib/v/gen/cgen.v | 6 ++++++ 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 cmd/tools/vtracev.v diff --git a/cmd/tools/vtracev.v b/cmd/tools/vtracev.v new file mode 100644 index 0000000000..16661881ae --- /dev/null +++ b/cmd/tools/vtracev.v @@ -0,0 +1,17 @@ +module main + +import os +import v.pref + +fn main() { + vexe := pref.vexe_path() + vroot := os.dir(vexe) + os.chdir(vroot) + os.setenv('VCOLORS', 'always', true) + self_idx := os.args.index('tracev') + args := os.args[1..self_idx] + args_str := args.join(' ') + options := if args.len > 0 { '($args_str)' } else { '' } + println('Compiling a `tracev` executable ${options}...') + os.system('$vexe -cg -d trace_parser -d trace_checker -d trace_gen -o tracev $args_str cmd/v') +} diff --git a/cmd/v/help/default.txt b/cmd/v/help/default.txt index d8ea51512b..c8026e8f73 100644 --- a/cmd/v/help/default.txt +++ b/cmd/v/help/default.txt @@ -35,6 +35,9 @@ V supports the following commands: * Others: build Build a V code in the provided path (the default, so you can skip the word `build`). translate Translate C code to V (coming soon in 0.3). + tracev Produce a tracing version of the v compiler. + Use `tracev yourfile.v` when the compiler panics. + NB: `tracev` is much slower and more verbose than ordinary `v` Use "v help " for more information about a command, example: `v help build`, `v help build-c` Use "v help other" to see less frequently used commands. diff --git a/cmd/v/v.v b/cmd/v/v.v index 13122a2064..d4fa7320b1 100644 --- a/cmd/v/v.v +++ b/cmd/v/v.v @@ -12,7 +12,7 @@ import v.builder const ( simple_cmd = [ 'fmt', 'up', 'vet', - 'self', 'symlink', 'bin2v', + 'self', 'tracev', 'symlink', 'bin2v', 'test', 'test-fmt', 'test-compiler', 'test-fixed', 'repl', 'build-tools', 'build-examples', diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 8e9cd14e2e..1b16567fff 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -559,6 +559,9 @@ pub fn (g Gen) save() { } pub fn (mut g Gen) write(s string) { + $if trace_gen ? { + eprintln('gen file: ${g.file.path:-30} | last_fn_c_name: ${g.last_fn_c_name:-45} | write: $s') + } if g.indent > 0 && g.empty_line { if g.indent < tabs.len { g.out.write(tabs[g.indent]) @@ -573,6 +576,9 @@ pub fn (mut g Gen) write(s string) { } pub fn (mut g Gen) writeln(s string) { + $if trace_gen ? { + eprintln('gen file: ${g.file.path:-30} | last_fn_c_name: ${g.last_fn_c_name:-45} | writeln: $s') + } if g.indent > 0 && g.empty_line { if g.indent < tabs.len { g.out.write(tabs[g.indent])