comptime: fix $(field.name) in $for; vweb: shared fields
parent
b2e2a53f98
commit
eacdd0d7e1
|
@ -113,11 +113,12 @@ pub:
|
||||||
// FieldData holds information about a field. Fields reside on structs.
|
// FieldData holds information about a field. Fields reside on structs.
|
||||||
pub struct FieldData {
|
pub struct FieldData {
|
||||||
pub:
|
pub:
|
||||||
name string
|
name string
|
||||||
attrs []string
|
attrs []string
|
||||||
is_pub bool
|
is_pub bool
|
||||||
is_mut bool
|
is_mut bool
|
||||||
typ int
|
is_shared bool
|
||||||
|
typ int
|
||||||
}
|
}
|
||||||
|
|
||||||
enum AttributeKind {
|
enum AttributeKind {
|
||||||
|
|
|
@ -3973,12 +3973,7 @@ fn (mut c Checker) stmt(node ast.Stmt) {
|
||||||
c.branch_stmt(node)
|
c.branch_stmt(node)
|
||||||
}
|
}
|
||||||
ast.CompFor {
|
ast.CompFor {
|
||||||
typ := c.unwrap_generic(node.typ)
|
c.comp_for(node)
|
||||||
sym := c.table.get_type_symbol(typ)
|
|
||||||
if sym.kind == .placeholder || typ.has_flag(.generic) {
|
|
||||||
c.error('unknown type `$sym.name`', node.typ_pos)
|
|
||||||
}
|
|
||||||
c.stmts(node.stmts)
|
|
||||||
}
|
}
|
||||||
ast.ConstDecl {
|
ast.ConstDecl {
|
||||||
c.inside_const = true
|
c.inside_const = true
|
||||||
|
@ -4149,6 +4144,18 @@ fn (mut c Checker) for_c_stmt(node ast.ForCStmt) {
|
||||||
c.in_for_count--
|
c.in_for_count--
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (mut c Checker) comp_for(node ast.CompFor) {
|
||||||
|
typ := c.unwrap_generic(node.typ)
|
||||||
|
sym := c.table.get_type_symbol(typ)
|
||||||
|
if sym.kind == .placeholder || typ.has_flag(.generic) {
|
||||||
|
c.error('unknown type `$sym.name`', node.typ_pos)
|
||||||
|
}
|
||||||
|
if node.kind == .fields {
|
||||||
|
c.comptime_fields_type[node.val_var] = node.typ
|
||||||
|
}
|
||||||
|
c.stmts(node.stmts)
|
||||||
|
}
|
||||||
|
|
||||||
fn (mut c Checker) for_in_stmt(mut node ast.ForInStmt) {
|
fn (mut c Checker) for_in_stmt(mut node ast.ForInStmt) {
|
||||||
c.in_for_count++
|
c.in_for_count++
|
||||||
prev_loop_label := c.loop_label
|
prev_loop_label := c.loop_label
|
||||||
|
|
|
@ -500,6 +500,7 @@ fn (mut g Gen) comp_for(node ast.CompFor) {
|
||||||
g.writeln('\t${node.val_var}.typ = $styp;')
|
g.writeln('\t${node.val_var}.typ = $styp;')
|
||||||
g.writeln('\t${node.val_var}.is_pub = $field.is_pub;')
|
g.writeln('\t${node.val_var}.is_pub = $field.is_pub;')
|
||||||
g.writeln('\t${node.val_var}.is_mut = $field.is_mut;')
|
g.writeln('\t${node.val_var}.is_mut = $field.is_mut;')
|
||||||
|
g.writeln('\t${node.val_var}.is_shared = ${field.typ.has_flag(.shared_f)};')
|
||||||
g.comptime_var_type_map['${node.val_var}.typ'] = styp
|
g.comptime_var_type_map['${node.val_var}.typ'] = styp
|
||||||
g.stmts(node.stmts)
|
g.stmts(node.stmts)
|
||||||
i++
|
i++
|
||||||
|
|
|
@ -10,8 +10,13 @@ const (
|
||||||
|
|
||||||
struct App {
|
struct App {
|
||||||
vweb.Context
|
vweb.Context
|
||||||
port int
|
port int
|
||||||
timeout int
|
timeout int
|
||||||
|
global_config shared Config
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Config {
|
||||||
|
max_ping int
|
||||||
}
|
}
|
||||||
|
|
||||||
fn exit_after_timeout(timeout_in_ms int) {
|
fn exit_after_timeout(timeout_in_ms int) {
|
||||||
|
@ -30,9 +35,13 @@ fn main() {
|
||||||
assert timeout > 0
|
assert timeout > 0
|
||||||
go exit_after_timeout(timeout)
|
go exit_after_timeout(timeout)
|
||||||
//
|
//
|
||||||
|
shared config := &Config{
|
||||||
|
max_ping: 50
|
||||||
|
}
|
||||||
app := &App{
|
app := &App{
|
||||||
port: http_port
|
port: http_port
|
||||||
timeout: timeout
|
timeout: timeout
|
||||||
|
global_config: config
|
||||||
}
|
}
|
||||||
eprintln('>> webserver: started on http://127.0.0.1:$app.port/ , with maximum runtime of $app.timeout milliseconds.')
|
eprintln('>> webserver: started on http://127.0.0.1:$app.port/ , with maximum runtime of $app.timeout milliseconds.')
|
||||||
// vweb.run<App>(mut app, http_port)
|
// vweb.run<App>(mut app, http_port)
|
||||||
|
@ -43,6 +52,7 @@ fn main() {
|
||||||
//}
|
//}
|
||||||
|
|
||||||
pub fn (mut app App) index() vweb.Result {
|
pub fn (mut app App) index() vweb.Result {
|
||||||
|
assert app.global_config.max_ping == 50
|
||||||
return app.text('Welcome to VWeb')
|
return app.text('Welcome to VWeb')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -324,6 +324,14 @@ pub fn run<T>(global_app &T, port int) {
|
||||||
} $else {
|
} $else {
|
||||||
// println('vweb no db')
|
// println('vweb no db')
|
||||||
}
|
}
|
||||||
|
$for field in T.fields {
|
||||||
|
// if field.is_shared {
|
||||||
|
// println(field)
|
||||||
|
//}
|
||||||
|
//$if field.typ is string {
|
||||||
|
request_app.$(field.name) = global_app.$(field.name)
|
||||||
|
//}
|
||||||
|
}
|
||||||
request_app.Context = global_app.Context // copy the context ref that contains static files map etc
|
request_app.Context = global_app.Context // copy the context ref that contains static files map etc
|
||||||
// request_app.Context = Context{
|
// request_app.Context = Context{
|
||||||
// conn: 0
|
// conn: 0
|
||||||
|
|
Loading…
Reference in New Issue