vweb: return $vweb.html()
parent
e41ddab3b0
commit
1d8d19c977
|
@ -28,13 +28,13 @@ pub fn (mut app App) json_endpoint() {
|
||||||
app.vweb.json('{"a": 3}')
|
app.vweb.json('{"a": 3}')
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut app App) index() {
|
pub fn (mut app App) index() vweb.Result {
|
||||||
app.cnt++
|
app.cnt++
|
||||||
show := true
|
show := true
|
||||||
//app.vweb.text('Hello world from vweb')
|
//app.vweb.text('Hello world from vweb')
|
||||||
hello := 'Hello world from vweb'
|
hello := 'Hello world from vweb'
|
||||||
numbers := [1,2,3]
|
numbers := [1,2,3]
|
||||||
$vweb.html()
|
return $vweb.html()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (mut app App) text() {
|
pub fn (mut app App) text() {
|
||||||
|
|
|
@ -518,14 +518,6 @@ pub:
|
||||||
pos token.Position
|
pos token.Position
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
pub struct ReturnStmt {
|
|
||||||
pub:
|
|
||||||
tok_kind token.Kind // or pos
|
|
||||||
results []Expr
|
|
||||||
pos token.Position
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
// #include etc
|
// #include etc
|
||||||
pub struct HashStmt {
|
pub struct HashStmt {
|
||||||
pub:
|
pub:
|
||||||
|
|
|
@ -1929,7 +1929,8 @@ pub fn (mut c Checker) expr(node ast.Expr) table.Type {
|
||||||
c.nr_warnings += c2.nr_warnings
|
c.nr_warnings += c2.nr_warnings
|
||||||
c.nr_errors += c2.nr_errors
|
c.nr_errors += c2.nr_errors
|
||||||
}
|
}
|
||||||
return table.void_type
|
return c.table.find_type_idx('vweb.Result')
|
||||||
|
// return table.void_type
|
||||||
}
|
}
|
||||||
ast.ConcatExpr {
|
ast.ConcatExpr {
|
||||||
return c.concat_expr(mut node)
|
return c.concat_expr(mut node)
|
||||||
|
|
|
@ -2296,6 +2296,14 @@ fn (mut g Gen) return_statement(node ast.Return) {
|
||||||
g.writeln('return 0;')
|
g.writeln('return 0;')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if node.exprs.len > 0 {
|
||||||
|
// skip `retun $vweb.html()`
|
||||||
|
if node.exprs[0] is ast.ComptimeCall {
|
||||||
|
g.expr(node.exprs[0])
|
||||||
|
g.writeln(';')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
// got to do a correct check for multireturn
|
// got to do a correct check for multireturn
|
||||||
sym := g.table.get_type_symbol(g.fn_decl.return_type)
|
sym := g.table.get_type_symbol(g.fn_decl.return_type)
|
||||||
fn_return_is_multi := sym.kind == .multi_return
|
fn_return_is_multi := sym.kind == .multi_return
|
||||||
|
|
|
@ -23,8 +23,11 @@ fn (g &Gen) comptime_call(node ast.ComptimeCall) {
|
||||||
}
|
}
|
||||||
g.writeln('// $' + 'method call. sym="$node.sym.name"')
|
g.writeln('// $' + 'method call. sym="$node.sym.name"')
|
||||||
mut j := 0
|
mut j := 0
|
||||||
|
result_type := g.table.find_type_idx('vweb.Result')
|
||||||
|
println('!!!!! $result_type')
|
||||||
for method in node.sym.methods {
|
for method in node.sym.methods {
|
||||||
if method.return_type != table.void_type {
|
// if method.return_type != table.void_type {
|
||||||
|
if method.return_type != result_type {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// receiver := method.args[0]
|
// receiver := method.args[0]
|
||||||
|
@ -36,7 +39,7 @@ fn (g &Gen) comptime_call(node ast.ComptimeCall) {
|
||||||
g.write(' else ')
|
g.write(' else ')
|
||||||
}
|
}
|
||||||
g.write('if (string_eq($node.method_name, tos_lit("$method.name"))) ')
|
g.write('if (string_eq($node.method_name, tos_lit("$method.name"))) ')
|
||||||
g.write('${node.sym.name}_$method.name ($amp ')
|
g.write('${node.sym.name}_${method.name}($amp ')
|
||||||
g.expr(node.left)
|
g.expr(node.left)
|
||||||
g.writeln(');')
|
g.writeln(');')
|
||||||
j++
|
j++
|
||||||
|
@ -46,29 +49,21 @@ fn (g &Gen) comptime_call(node ast.ComptimeCall) {
|
||||||
fn (mut g Gen) comp_if(it ast.CompIf) {
|
fn (mut g Gen) comp_if(it ast.CompIf) {
|
||||||
ifdef := g.comp_if_to_ifdef(it.val, it.is_opt)
|
ifdef := g.comp_if_to_ifdef(it.val, it.is_opt)
|
||||||
if it.is_not {
|
if it.is_not {
|
||||||
g.writeln('\n// \$if !${it.val} {\n#ifndef ' + ifdef)
|
g.writeln('\n// \$if !$it.val {\n#ifndef ' + ifdef)
|
||||||
} else {
|
} else {
|
||||||
g.writeln('\n// \$if ${it.val} {\n#ifdef ' + ifdef)
|
g.writeln('\n// \$if $it.val {\n#ifdef ' + ifdef)
|
||||||
}
|
}
|
||||||
// NOTE: g.defer_ifdef is needed for defers called witin an ifdef
|
// NOTE: g.defer_ifdef is needed for defers called witin an ifdef
|
||||||
// in v1 this code would be completely excluded
|
// in v1 this code would be completely excluded
|
||||||
g.defer_ifdef = if it.is_not {
|
g.defer_ifdef = if it.is_not { '\n#ifndef ' + ifdef } else { '\n#ifdef ' + ifdef }
|
||||||
'\n#ifndef ' + ifdef
|
|
||||||
} else {
|
|
||||||
'\n#ifdef ' + ifdef
|
|
||||||
}
|
|
||||||
// println('comp if stmts $g.file.path:$it.pos.line_nr')
|
// println('comp if stmts $g.file.path:$it.pos.line_nr')
|
||||||
g.stmts(it.stmts)
|
g.stmts(it.stmts)
|
||||||
g.defer_ifdef = ''
|
g.defer_ifdef = ''
|
||||||
if it.has_else {
|
if it.has_else {
|
||||||
g.writeln('\n#else')
|
g.writeln('\n#else')
|
||||||
g.defer_ifdef = if it.is_not {
|
g.defer_ifdef = if it.is_not { '\n#ifdef ' + ifdef } else { '\n#ifndef ' + ifdef }
|
||||||
'\n#ifdef ' + ifdef
|
|
||||||
} else {
|
|
||||||
'\n#ifndef ' + ifdef
|
|
||||||
}
|
|
||||||
g.stmts(it.else_stmts)
|
g.stmts(it.else_stmts)
|
||||||
g.defer_ifdef = ''
|
g.defer_ifdef = ''
|
||||||
}
|
}
|
||||||
g.writeln('\n// } ${it.val}\n#endif\n')
|
g.writeln('\n// } $it.val\n#endif\n')
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,13 @@ pub fn (mut p Parser) expr(precedence int) ast.Expr {
|
||||||
// .enum_val
|
// .enum_val
|
||||||
node = p.enum_val()
|
node = p.enum_val()
|
||||||
}
|
}
|
||||||
|
.dollar {
|
||||||
|
if p.peek_tok.kind == .name {
|
||||||
|
return p.vweb()
|
||||||
|
} else {
|
||||||
|
p.error('unexpected $')
|
||||||
|
}
|
||||||
|
}
|
||||||
.chartoken {
|
.chartoken {
|
||||||
node = ast.CharLiteral{
|
node = ast.CharLiteral{
|
||||||
val: p.tok.lit
|
val: p.tok.lit
|
||||||
|
|
|
@ -49,6 +49,8 @@ pub mut:
|
||||||
done bool
|
done bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct Result {}
|
||||||
|
|
||||||
fn (mut ctx Context) send_response_to_client(mimetype string, res string) bool {
|
fn (mut ctx Context) send_response_to_client(mimetype string, res string) bool {
|
||||||
if ctx.done { return false }
|
if ctx.done { return false }
|
||||||
ctx.done = true
|
ctx.done = true
|
||||||
|
@ -372,6 +374,7 @@ pub fn (mut ctx Context) handle_static(directory_path string) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn (mut ctx Context) serve_static(url, file_path, mime_type string) {
|
pub fn (mut ctx Context) serve_static(url, file_path, mime_type string) {
|
||||||
ctx.static_files[url] = file_path
|
ctx.static_files[url] = file_path
|
||||||
ctx.static_mime_types[url] = mime_type
|
ctx.static_mime_types[url] = mime_type
|
||||||
|
|
Loading…
Reference in New Issue