v.markused: handle compiling vweb, `-live` and orm example programs

pull/10979/head
Delyan Angelov 2021-07-27 15:42:25 +03:00
parent e98817e5ce
commit ef0161c233
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
2 changed files with 35 additions and 3 deletions

View File

@ -13,6 +13,7 @@ pub mut:
type_symbols []TypeSymbol type_symbols []TypeSymbol
type_idxs map[string]int type_idxs map[string]int
fns map[string]Fn fns map[string]Fn
iface_types map[string][]Type
dumps map[int]string // needed for efficiently generating all _v_dump_expr_TNAME() functions dumps map[int]string // needed for efficiently generating all _v_dump_expr_TNAME() functions
imports []string // List of all imports imports []string // List of all imports
modules []string // Topologically sorted list of all modules registered by the application modules []string // Topologically sorted list of all modules registered by the application
@ -1111,7 +1112,12 @@ pub fn (mut t Table) complete_interface_check() {
&& tsym.mod != t.get_type_symbol(idecl.typ).mod { && tsym.mod != t.get_type_symbol(idecl.typ).mod {
continue continue
} }
t.does_type_implement_interface(tk, idecl.typ) if t.does_type_implement_interface(tk, idecl.typ) {
$if trace_types_implementing_each_interface ? {
eprintln('>>> tsym.mod: $tsym.mod | tsym.name: $tsym.name | tk: $tk | idecl.name: $idecl.name | idecl.typ: $idecl.typ')
}
t.iface_types[idecl.name] << tk
}
} }
} }
} }

View File

@ -271,19 +271,45 @@ pub fn mark_used(mut table ast.Table, pref &pref.Preferences, ast_files []&ast.F
// handle vweb magic router methods: // handle vweb magic router methods:
typ_vweb_result := table.find_type_idx('vweb.Result') typ_vweb_result := table.find_type_idx('vweb.Result')
if typ_vweb_result != 0 { if typ_vweb_result != 0 {
all_fn_root_names << 'vweb.filter'
typ_vweb_context := ast.Type(table.find_type_idx('vweb.Context')).set_nr_muls(1)
all_fn_root_names << '${int(typ_vweb_context)}.html'
for vgt in table.used_vweb_types { for vgt in table.used_vweb_types {
sym_app := table.get_type_symbol(vgt) sym_app := table.get_type_symbol(vgt)
for m in sym_app.methods { for m in sym_app.methods {
if m.return_type == typ_vweb_result { if m.return_type == typ_vweb_result {
pvgt := vgt.set_nr_muls(1) pvgt := vgt.set_nr_muls(1)
// eprintln('vgt: $vgt | pvgt: $pvgt | sym_app.name: $sym_app.name | m.name: $m.name') // eprintln('vgt: $vgt | pvgt: $pvgt | sym_app.name: $sym_app.name | m.name: $m.name')
all_fn_root_names << '${pvgt}.$m.name' all_fn_root_names << '${int(pvgt)}.$m.name'
} }
} }
} }
} }
// // handle ORM drivers:
orm_connection_implementations := table.iface_types['orm.Connection'] or { []ast.Type{} }
if orm_connection_implementations.len > 0 {
for k, _ in all_fns {
if k.starts_with('orm.') {
all_fn_root_names << k
}
}
for orm_type in orm_connection_implementations {
all_fn_root_names << '${int(orm_type)}.select'
all_fn_root_names << '${int(orm_type)}.insert'
all_fn_root_names << '${int(orm_type)}.update'
all_fn_root_names << '${int(orm_type)}.delete'
all_fn_root_names << '${int(orm_type)}.create'
all_fn_root_names << '${int(orm_type)}.drop'
all_fn_root_names << '${int(orm_type)}.last_id'
}
}
// handle -live main programs:
if pref.is_livemain {
all_fn_root_names << 'v.live.executable.start_reloader'
all_fn_root_names << 'v.live.executable.new_live_reload_info'
}
mut walker := Walker{ mut walker := Walker{
table: table table: table