1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

re-write $if os { and fix GCC segfaults on compilation

This commit is contained in:
Alexander Medvednikov
2019-06-24 13:51:11 +02:00
parent e604d5e2c8
commit b13f233521
4 changed files with 58 additions and 43 deletions

View File

@ -25,7 +25,7 @@ enum BuildMode {
}
fn vtmp_path() string {
return os.home_dir() + '/.vlang$Version/'
return os.home_dir() + '/.vlang/'
}
const (
@ -159,19 +159,6 @@ fn (c mut V) compile() {
}
// Main pass
cgen.run = RUN_MAIN
if c.os == MAC {
cgen.genln('#define mac (1) ')
// cgen.genln('#include <pthread.h>')
}
if c.os == LINUX {
cgen.genln('#define linux (1) ')
cgen.genln('#include <pthread.h>')
}
if c.os == WINDOWS {
cgen.genln('#define windows (1) ')
// cgen.genln('#include <WinSock2.h>')
cgen.genln('#include <windows.h> ')
}
if c.is_play {
cgen.genln('#define VPLAY (1) ')
}
@ -182,6 +169,22 @@ fn (c mut V) compile() {
#include <stdarg.h> // for va_list
#include <inttypes.h> // int64_t etc
#ifdef __linux__
#include <pthread.h>
#endif
#ifdef __APPLE__
#endif
#ifdef _WIN32
#include <windows.h>
//#include <WinSock2.h>
#endif
//================================== TYPEDEFS ================================*/
typedef unsigned char byte;

View File

@ -2494,6 +2494,16 @@ fn (p mut Parser) get_tmp_counter() int {
return p.tmp_cnt
}
fn os_name_to_ifdef(name string) string {
switch name {
case 'windows': return '_WIN32'
case 'mac': return '__APPLE__'
case 'linux': return '__linux__'
}
panic('bad os ifdef name "$name"')
return ''
}
fn (p mut Parser) comp_time() {
p.next()
if p.tok == IF {
@ -2504,11 +2514,12 @@ fn (p mut Parser) comp_time() {
}
name := p.check_name()
if name in SupportedPlatforms {
ifdef_name := os_name_to_ifdef(name)
if not {
p.genln('#ifndef $name')
p.genln('#ifndef $ifdef_name')
}
else {
p.genln('#ifdef $name')
p.genln('#ifdef $ifdef_name')
}
p.check(LCBR)
p.statements_no_curly_end()