cgen: do not #include signal.h, on -os wasm32 and -d no_segfault_handler
parent
2fa64f1471
commit
5a2c271bd4
|
@ -212,6 +212,7 @@ mut:
|
|||
autofree_methods map[int]bool
|
||||
generated_free_methods map[int]bool
|
||||
autofree_scope_stmts []string
|
||||
use_segfault_handler bool = true
|
||||
}
|
||||
|
||||
pub fn gen(files []&ast.File, table &ast.Table, pref &pref.Preferences) string {
|
||||
|
@ -267,6 +268,7 @@ pub fn gen(files []&ast.File, table &ast.Table, pref &pref.Preferences) string {
|
|||
field_data_type: ast.Type(table.find_type_idx('FieldData'))
|
||||
init: strings.new_builder(100)
|
||||
is_cc_msvc: pref.ccompiler == 'msvc'
|
||||
use_segfault_handler: !('no_segfault_handler' in pref.compile_defines || pref.os == .wasm32)
|
||||
}
|
||||
// anon fn may include assert and thus this needs
|
||||
// to be included before any test contents are written
|
||||
|
@ -429,6 +431,9 @@ pub fn gen(files []&ast.File, table &ast.Table, pref &pref.Preferences) string {
|
|||
|
||||
mut b := strings.new_builder(640000)
|
||||
b.write_string(g.hashes())
|
||||
if g.use_segfault_handler {
|
||||
b.writeln('\n#define V_USE_SIGNAL_H')
|
||||
}
|
||||
b.writeln('\n// V comptime_definitions:')
|
||||
b.write_string(g.comptime_definitions.str())
|
||||
b.writeln('\n// V typedefs:')
|
||||
|
@ -575,6 +580,7 @@ fn cgen_process_one_file_cb(p &pool.PoolProcessor, idx int, wid int) &Gen {
|
|||
is_autofree: global_g.pref.autofree
|
||||
referenced_fns: global_g.referenced_fns
|
||||
is_cc_msvc: global_g.is_cc_msvc
|
||||
use_segfault_handler: global_g.use_segfault_handler
|
||||
}
|
||||
g.gen_file()
|
||||
return g
|
||||
|
@ -781,7 +787,9 @@ pub fn (mut g Gen) init() {
|
|||
// we know that this is being called before the multi-threading starts
|
||||
// and this is being called in the main thread, so we can mutate the table
|
||||
mut muttable := unsafe { &ast.Table(g.table) }
|
||||
muttable.used_fns['v_segmentation_fault_handler'] = true
|
||||
if g.use_segfault_handler {
|
||||
muttable.used_fns['v_segmentation_fault_handler'] = true
|
||||
}
|
||||
muttable.used_fns['eprintln'] = true
|
||||
muttable.used_fns['print_backtrace'] = true
|
||||
muttable.used_fns['exit'] = true
|
||||
|
@ -4734,7 +4742,7 @@ fn (mut g Gen) write_init_function() {
|
|||
// ___argv is declared as voidptr here, because that unifies the windows/unix logic
|
||||
g.writeln('void _vinit(int ___argc, voidptr ___argv) {')
|
||||
|
||||
if 'no_segfault_handler' !in g.pref.compile_defines || g.pref.os == .wasm32 {
|
||||
if g.use_segfault_handler {
|
||||
// 11 is SIGSEGV. It is hardcoded here, to avoid FreeBSD compilation errors for trivial examples.
|
||||
g.writeln('#if __STDC_HOSTED__ == 1\n\tsignal(11, v_segmentation_fault_handler);\n#endif')
|
||||
}
|
||||
|
|
|
@ -554,7 +554,9 @@ voidptr memdup(voidptr src, int sz);
|
|||
|
||||
#include <io.h> // _waccess
|
||||
#include <direct.h> // _wgetcwd
|
||||
#ifdef V_USE_SIGNAL_H
|
||||
#include <signal.h> // signal and SIGSEGV for segmentation fault handler
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// On MSVC these are the same (as long as /volatile:ms is passed)
|
||||
|
|
Loading…
Reference in New Issue