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

main: vrepl interactive shell update

This commit is contained in:
Shivanjan Chakravorty 2019-07-06 15:37:44 +05:30 committed by Alexander Medvednikov
parent 0f8682d2f0
commit f630d3f342

View File

@ -963,6 +963,7 @@ fn run_repl() []string {
println('Use Ctrl-C or `exit` to exit') println('Use Ctrl-C or `exit` to exit')
println('For now you have to use println() to print values, this will be fixed soon\n') println('For now you have to use println() to print values, this will be fixed soon\n')
file := TmpPath + '/vrepl.v' file := TmpPath + '/vrepl.v'
temp_file := TmpPath + '/vrepl_temp.v'
mut lines := []string mut lines := []string
for { for {
print('>>> ') print('>>> ')
@ -982,13 +983,52 @@ fn run_repl() []string {
lines << void_line lines << void_line
source_code := lines.join('\n') + '\n' + line source_code := lines.join('\n') + '\n' + line
os.write_file(file, source_code) os.write_file(file, source_code)
mut v := new_v( ['v', '-repl', file]) s := os.exec('v run '+TmpPath+'/vrepl.v')
v.compile() mut vals := s.split('\n')
s := os.exec(TmpPath + '/vrepl') if s.contains('panic: ') {
println(s) if !s.contains('declared and not used') {
for i:=1; i<vals.len; i++ {
println(vals[i])
}
}
else {
println(s)
}
}
else {
for i:=0; i<vals.len-1; i++ {
println(vals[i])
}
}
} }
else { else {
lines << line mut temp_line := line
mut temp_flag := false
if !(line.contains(' ') || line.contains(':') || line.contains('=') || line.contains(',') ){
temp_line = 'println('+line+')'
temp_flag = true
}
temp_source_code := lines.join('\n') + '\n' + temp_line
os.write_file(temp_file, temp_source_code)
s := os.exec('v run '+TmpPath+'/vrepl_temp.v')
if s.contains('panic: ') {
if !s.contains('declared and not used') {
mut vals := s.split('\n')
for i:=1; i<vals.len; i++ {
println(vals[i])
}
}
else {
lines << line
}
}
else {
lines << line
mut vals := s.split('\n')
for i:=0; i<vals.len-1; i++ {
println(vals[i])
}
}
} }
} }
return lines return lines