cgen: add support for `v -printfn main file.v`
parent
900d96c638
commit
e0ab318f56
10
cmd/v/v.v
10
cmd/v/v.v
|
@ -145,6 +145,10 @@ fn parse_args(args []string) (&pref.Preferences, string) {
|
||||||
'-freestanding' {
|
'-freestanding' {
|
||||||
res.is_bare = true
|
res.is_bare = true
|
||||||
}
|
}
|
||||||
|
'-prof', '-profile' {
|
||||||
|
eprintln('TODO: -prof')
|
||||||
|
res.is_prof = true
|
||||||
|
}
|
||||||
'-prod' {
|
'-prod' {
|
||||||
res.is_prod = true
|
res.is_prod = true
|
||||||
}
|
}
|
||||||
|
@ -182,8 +186,12 @@ fn parse_args(args []string) (&pref.Preferences, string) {
|
||||||
}
|
}
|
||||||
res.os = target_os_kind
|
res.os = target_os_kind
|
||||||
}
|
}
|
||||||
|
'-printfn' {
|
||||||
|
res.printfn_list << cmdline.option(current_args, '-printfn', '')
|
||||||
|
i++
|
||||||
|
}
|
||||||
'-cflags' {
|
'-cflags' {
|
||||||
res.cflags = cmdline.option(current_args, '-cflags', '')
|
res.cflags += ' ' + cmdline.option(current_args, '-cflags', '')
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
'-define', '-d' {
|
'-define', '-d' {
|
||||||
|
|
|
@ -60,6 +60,7 @@ struct Gen {
|
||||||
mut:
|
mut:
|
||||||
file ast.File
|
file ast.File
|
||||||
fn_decl &ast.FnDecl // pointer to the FnDecl we are currently inside otherwise 0
|
fn_decl &ast.FnDecl // pointer to the FnDecl we are currently inside otherwise 0
|
||||||
|
last_fn_c_name string
|
||||||
tmp_count int
|
tmp_count int
|
||||||
variadic_args map[string]int
|
variadic_args map[string]int
|
||||||
is_c_call bool // e.g. `C.printf("v")`
|
is_c_call bool // e.g. `C.printf("v")`
|
||||||
|
@ -479,8 +480,12 @@ fn (mut g Gen) stmt(node ast.Stmt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ast.FnDecl {
|
ast.FnDecl {
|
||||||
|
fn_start_pos := g.out.len
|
||||||
g.fn_decl = it // &it
|
g.fn_decl = it // &it
|
||||||
g.gen_fn_decl(it)
|
g.gen_fn_decl(it)
|
||||||
|
if g.last_fn_c_name in g.pref.printfn_list {
|
||||||
|
println(g.out.after(fn_start_pos))
|
||||||
|
}
|
||||||
g.writeln('')
|
g.writeln('')
|
||||||
}
|
}
|
||||||
ast.ForCStmt {
|
ast.ForCStmt {
|
||||||
|
|
|
@ -19,12 +19,15 @@ fn (mut g Gen) gen_fn_decl(it ast.FnDecl) {
|
||||||
if g.is_gui_app() {
|
if g.is_gui_app() {
|
||||||
// GUI application
|
// GUI application
|
||||||
g.writeln('int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prev_instance, LPWSTR cmd_line, int show_cmd')
|
g.writeln('int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prev_instance, LPWSTR cmd_line, int show_cmd')
|
||||||
|
g.last_fn_c_name = 'wWinMain'
|
||||||
} else {
|
} else {
|
||||||
// Console application
|
// Console application
|
||||||
g.writeln('int wmain(int ___argc, wchar_t* ___argv[], wchar_t* ___envp[]')
|
g.writeln('int wmain(int ___argc, wchar_t* ___argv[], wchar_t* ___envp[]')
|
||||||
|
g.last_fn_c_name = 'wmain'
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
g.write('int ${it.name}(int ___argc, char** ___argv')
|
g.write('int ${it.name}(int ___argc, char** ___argv')
|
||||||
|
g.last_fn_c_name = it.name
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mut name := it.name
|
mut name := it.name
|
||||||
|
@ -46,6 +49,7 @@ fn (mut g Gen) gen_fn_decl(it ast.FnDecl) {
|
||||||
// type_name := g.table.Type_to_str(it.return_type)
|
// type_name := g.table.Type_to_str(it.return_type)
|
||||||
type_name := g.typ(it.return_type)
|
type_name := g.typ(it.return_type)
|
||||||
g.write('$type_name ${name}(')
|
g.write('$type_name ${name}(')
|
||||||
|
g.last_fn_c_name = name
|
||||||
g.definitions.write('$type_name ${name}(')
|
g.definitions.write('$type_name ${name}(')
|
||||||
}
|
}
|
||||||
// Receiver is the first argument
|
// Receiver is the first argument
|
||||||
|
|
|
@ -77,8 +77,8 @@ pub mut:
|
||||||
compile_defines_all []string // contains both: ['vfmt','another']
|
compile_defines_all []string // contains both: ['vfmt','another']
|
||||||
|
|
||||||
mod string
|
mod string
|
||||||
run_args []string // `v run x.v 1 2 3` => `1 2 3`
|
run_args []string // `v run x.v 1 2 3` => `1 2 3`
|
||||||
|
printfn_list []string // a list of generated function names, whose source should be shown, for debugging
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn backend_from_string(s string) ?Backend {
|
pub fn backend_from_string(s string) ?Backend {
|
||||||
|
@ -97,4 +97,3 @@ pub fn backend_from_string(s string) ?Backend {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue