vweb fixes

pull/2902/head
Alexander Medvednikov 2019-11-26 13:54:41 +03:00
parent 53307597b3
commit a3b14e00a2
4 changed files with 38 additions and 22 deletions

View File

@ -587,7 +587,9 @@ fn (p mut Parser) check_unused_variables() {
if var.name == '' {
break
}
if !var.is_used && !p.pref.is_repl && !var.is_arg && !p.pref.translated {
if !var.is_used && !p.pref.is_repl && !var.is_arg &&
!p.pref.translated && var.name != 'tmpl_res'
{
p.production_error_with_token_index('`$var.name` declared and not used', var.token_idx )
}
if !var.is_changed && var.is_mut && !p.pref.is_repl &&

View File

@ -502,7 +502,9 @@ pub fn (v mut V) generate_main() {
else if v.table.main_exists() {
v.gen_main_start(true)
cgen.genln(' main__main();')
cgen.genln('free(g_str_buf);')
if !v.pref.is_bare {
cgen.genln('free(g_str_buf);')
}
v.gen_main_end('return 0')
}
}

View File

@ -318,3 +318,5 @@ pub fn (s Socket) get_port() int {
C.getsockname(s.sockfd, &addr, &size)
return C.ntohs(addr.sin_port)
}

View File

@ -143,7 +143,17 @@ pub fn run<T>(app mut T, port int) {
}
//}
if req.method in methods_with_form {
app.vweb.parse_form(s)
for {
line := conn.read_line()
if line == '' || line == '\r\n' {
break
}
//if line.contains('POST') || line == '' {
//break
//}
}
line := conn.read_line()
app.vweb.parse_form(line)
}
if vals.len < 2 {
$if debug {
@ -175,27 +185,27 @@ fn (ctx mut Context) parse_form(s string) {
if !(ctx.req.method in methods_with_form) {
return
}
pos := s.index('\r\n\r\n')
if pos > -1 {
mut str_form := s[pos..s.len]
str_form = str_form.replace('+', ' ')
words := str_form.split('&')
for word in words {
$if debug {
println('parse form keyval="$word"')
}
keyval := word.trim_space().split('=')
if keyval.len != 2 { continue }
key := keyval[0]
val := urllib.query_unescape(keyval[1]) or {
continue
}
$if debug {
println('http form "$key" => "$val"')
}
ctx.form[key] = val
//pos := s.index('\r\n\r\n')
//if pos > -1 {
mut str_form := s//[pos..s.len]
str_form = str_form.replace('+', ' ')
words := str_form.split('&')
for word in words {
$if debug {
println('parse form keyval="$word"')
}
keyval := word.trim_space().split('=')
if keyval.len != 2 { continue }
key := keyval[0]
val := urllib.query_unescape(keyval[1]) or {
continue
}
$if debug {
println('http form "$key" => "$val"')
}
ctx.form[key] = val
}
//}
}
fn (ctx mut Context) scan_static_directory(directory_path, mount_path string) {