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

cgen: add support for -d trace_gen too. Add v tracev command.

This commit is contained in:
Delyan Angelov 2020-07-20 12:36:27 +03:00
parent 587b9dd8aa
commit c858978348
4 changed files with 27 additions and 1 deletions

17
cmd/tools/vtracev.v Normal file
View File

@ -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')
}

View File

@ -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 <command>" for more information about a command, example: `v help build`, `v help build-c`
Use "v help other" to see less frequently used commands.

View File

@ -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',

View File

@ -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])