tools/fast: add "V lines" and "V lines/s"
parent
d236d6a473
commit
e949d4b26c
|
@ -38,6 +38,7 @@ fn main() {
|
|||
// exec('git checkout $commit')
|
||||
println(' Building vprod...')
|
||||
exec('v -o $vdir/vprod -prod $vdir/cmd/v')
|
||||
// exec('v -o $vdir/vprod $vdir/cmd/v') // for faster debugging
|
||||
diff1 := measure('$vdir/vprod -cc clang -o v.c -show-timings $vdir/cmd/v', 'v.c')
|
||||
mut tcc_path := 'tcc'
|
||||
$if freebsd {
|
||||
|
@ -48,7 +49,7 @@ fn main() {
|
|||
diff4 := measure('$vdir/vprod -cc clang $vdir/examples/hello_world.v', 'hello.v')
|
||||
vc_size := os.file_size('v.c') / 1000
|
||||
// scan/parse/check/cgen
|
||||
scan, parse, check, cgen := measure_steps(vdir)
|
||||
scan, parse, check, cgen, vlines := measure_steps(vdir)
|
||||
// println('Building V took ${diff}ms')
|
||||
commit_date := exec('git log -n1 --pretty="format:%at" $commit')
|
||||
date := time.unix(commit_date.int())
|
||||
|
@ -69,6 +70,8 @@ fn main() {
|
|||
<td>${check}ms</td>
|
||||
<td>${cgen}ms</td>
|
||||
<td>${scan}ms</td>
|
||||
<td>$vlines</td>
|
||||
<td>${int(f64(vlines) / f64(diff1) * 1000.0)} lines/s</td>
|
||||
</tr>\n' +
|
||||
table.trim_space()
|
||||
out.writeln(table) ?
|
||||
|
@ -116,9 +119,10 @@ fn measure(cmd string, description string) int {
|
|||
return int(sum / 3)
|
||||
}
|
||||
|
||||
fn measure_steps(vdir string) (int, int, int, int) {
|
||||
resp := os.execute_or_panic('$vdir/vprod -o v.c -show-timings $vdir/cmd/v')
|
||||
mut scan, mut parse, mut check, mut cgen := 0, 0, 0, 0
|
||||
fn measure_steps(vdir string) (int, int, int, int, int) {
|
||||
resp := os.execute_or_panic('$vdir/vprod -o v.c -show-timings -stats $vdir/cmd/v')
|
||||
|
||||
mut scan, mut parse, mut check, mut cgen, mut vlines := 0, 0, 0, 0, 0
|
||||
lines := resp.output.split_into_lines()
|
||||
if lines.len == 3 {
|
||||
parse = lines[0].before('.').int()
|
||||
|
@ -140,8 +144,16 @@ fn measure_steps(vdir string) (int, int, int, int) {
|
|||
if line[1] == 'C GEN' {
|
||||
cgen = line[0].int()
|
||||
}
|
||||
} else {
|
||||
// Fetch number of V lines
|
||||
if line[0].contains('V') && line[0].contains('source') && line[0].contains('size') {
|
||||
start := line[0].index(':') or { 0 }
|
||||
end := line[0].index('lines,') or { 0 }
|
||||
s := line[0][start + 1..end]
|
||||
vlines = s.trim_space().int()
|
||||
}
|
||||
}
|
||||
}
|
||||
return scan, parse, check, cgen
|
||||
}
|
||||
return scan, parse, check, cgen, vlines
|
||||
}
|
||||
|
|
|
@ -60,4 +60,6 @@ Source code: <a target=blank href='https://github.com/vlang/v/blob/master/cmd/to
|
|||
<td style='width:55px'>check</td>
|
||||
<td style='width:55px'>cgen</td>
|
||||
<td style='width:55px'>scan</td>
|
||||
<td style='width:55px'>V lines</td>
|
||||
<td style='width:55px'>V lines/s</td>
|
||||
</tr>
|
||||
|
|
|
@ -551,8 +551,8 @@ pub struct File {
|
|||
pub:
|
||||
path string // absolute path of the source file - '/projects/v/file.v'
|
||||
path_base string // file name - 'file.v' (useful for tracing)
|
||||
lines int // number of source code lines in the file (including newlines and comments)
|
||||
bytes int // number of processed source code bytes
|
||||
nr_lines int // number of source code lines in the file (including newlines and comments)
|
||||
nr_bytes int // number of processed source code bytes
|
||||
mod Module // the module of the source file (from `module xyz` at the top)
|
||||
global_scope &Scope
|
||||
is_test bool // true for _test.v files
|
||||
|
|
|
@ -49,8 +49,8 @@ pub fn compile(command string, pref &pref.Preferences) {
|
|||
scompilation_time_ms := util.bold('${f64(compilation_time_micros) / 1000.0:6.3f}')
|
||||
mut all_v_source_lines, mut all_v_source_bytes := 0, 0
|
||||
for mut pf in b.parsed_files {
|
||||
all_v_source_lines += pf.lines
|
||||
all_v_source_bytes += pf.bytes
|
||||
all_v_source_lines += pf.nr_lines
|
||||
all_v_source_bytes += pf.nr_bytes
|
||||
}
|
||||
mut sall_v_source_lines := all_v_source_lines.str()
|
||||
mut sall_v_source_bytes := all_v_source_bytes.str()
|
||||
|
|
|
@ -1959,6 +1959,7 @@ fn (mut c Checker) array_builtin_method_call(mut call_expr ast.CallExpr, left_ty
|
|||
} else if method_name == 'sort' {
|
||||
call_expr.return_type = ast.void_type
|
||||
} else if method_name == 'contains' {
|
||||
// c.warn('use `value in arr` instead of `arr.contains(value)`', call_expr.pos)
|
||||
call_expr.return_type = ast.bool_type
|
||||
} else if method_name == 'index' {
|
||||
call_expr.return_type = ast.int_type
|
||||
|
|
|
@ -283,8 +283,8 @@ pub fn (mut p Parser) parse() ast.File {
|
|||
path: p.file_name
|
||||
path_base: p.file_base
|
||||
is_test: p.inside_test_file
|
||||
lines: p.scanner.line_nr
|
||||
bytes: p.scanner.text.len
|
||||
nr_lines: p.scanner.line_nr
|
||||
nr_bytes: p.scanner.text.len
|
||||
mod: module_decl
|
||||
imports: p.ast_imports
|
||||
imported_symbols: p.imported_symbols
|
||||
|
|
Loading…
Reference in New Issue