compiler: remove remaining switch statements and show a warning
parent
753fe32793
commit
36eb1b77d0
|
@ -271,18 +271,18 @@ fn build_thirdparty_obj_file(path string, moduleflags []CFlag) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn os_name_to_ifdef(name string) string {
|
fn os_name_to_ifdef(name string) string {
|
||||||
switch name {
|
match name {
|
||||||
case 'windows': return '_WIN32'
|
'windows' { return '_WIN32'}
|
||||||
case 'mac': return '__APPLE__'
|
'mac' { return '__APPLE__'}
|
||||||
case 'linux': return '__linux__'
|
'linux' { return '__linux__'}
|
||||||
case 'freebsd': return '__FreeBSD__'
|
'freebsd' { return '__FreeBSD__'}
|
||||||
case 'openbsd': return '__OpenBSD__'
|
'openbsd'{ return '__OpenBSD__'}
|
||||||
case 'netbsd': return '__NetBSD__'
|
'netbsd'{ return '__NetBSD__'}
|
||||||
case 'dragonfly': return '__DragonFly__'
|
'dragonfly'{ return '__DragonFly__'}
|
||||||
case 'msvc': return '_MSC_VER'
|
'msvc'{ return '_MSC_VER'}
|
||||||
case 'android': return '__BIONIC__'
|
'android'{ return '__BIONIC__'}
|
||||||
case 'js': return '_VJS'
|
'js' {return '_VJS'}
|
||||||
case 'solaris': return '__sun'
|
'solaris'{ return '__sun'}
|
||||||
}
|
}
|
||||||
verror('bad os ifdef name "$name"')
|
verror('bad os ifdef name "$name"')
|
||||||
return ''
|
return ''
|
||||||
|
|
|
@ -270,6 +270,8 @@ fn (s mut Scanner) eat_single_newline(){
|
||||||
if s.text[ s.pos ] == `\r` { s.pos ++ return }
|
if s.text[ s.pos ] == `\r` { s.pos ++ return }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
|
||||||
const (
|
const (
|
||||||
match_arrow_warning = '=> is no longer needed in match statements, use\n' +
|
match_arrow_warning = '=> is no longer needed in match statements, use\n' +
|
||||||
'match foo {
|
'match foo {
|
||||||
|
@ -277,4 +279,6 @@ const (
|
||||||
2 { baz }
|
2 { baz }
|
||||||
else { ... }
|
else { ... }
|
||||||
}'
|
}'
|
||||||
|
|
||||||
|
//make_receiver_mutable =
|
||||||
)
|
)
|
||||||
|
|
|
@ -512,22 +512,22 @@ fn type_default(typ string) string {
|
||||||
return '{0}'
|
return '{0}'
|
||||||
}
|
}
|
||||||
// Default values for other types are not needed because of mandatory initialization
|
// Default values for other types are not needed because of mandatory initialization
|
||||||
switch typ {
|
match typ {
|
||||||
case 'bool': return '0'
|
'bool'{ return '0'}
|
||||||
case 'string': return 'tos((byte *)"", 0)'
|
'string'{ return 'tos3("")'}
|
||||||
case 'i8': return '0'
|
'i8'{ return '0'}
|
||||||
case 'i16': return '0'
|
'i16'{ return '0'}
|
||||||
case 'i64': return '0'
|
'i64'{ return '0'}
|
||||||
case 'u16': return '0'
|
'u16'{ return '0'}
|
||||||
case 'u32': return '0'
|
'u32'{ return '0'}
|
||||||
case 'u64': return '0'
|
'u64'{ return '0'}
|
||||||
case 'byte': return '0'
|
'byte'{ return '0'}
|
||||||
case 'int': return '0'
|
'int'{ return '0'}
|
||||||
case 'rune': return '0'
|
'rune'{ return '0'}
|
||||||
case 'f32': return '0.0'
|
'f32'{ return '0.0'}
|
||||||
case 'f64': return '0.0'
|
'f64'{ return '0.0'}
|
||||||
case 'byteptr': return '0'
|
'byteptr'{ return '0'}
|
||||||
case 'voidptr': return '0'
|
'voidptr'{ return '0'}
|
||||||
}
|
}
|
||||||
return '{0}'
|
return '{0}'
|
||||||
}
|
}
|
||||||
|
|
|
@ -1081,21 +1081,22 @@ pub fn cescaped_path(s string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn os_from_string(os string) OS {
|
pub fn os_from_string(os string) OS {
|
||||||
switch os {
|
match os {
|
||||||
case 'linux': return .linux
|
'linux' { return .linux}
|
||||||
case 'windows': return .windows
|
'windows' { return .windows}
|
||||||
case 'mac': return .mac
|
'mac' { return .mac}
|
||||||
case 'freebsd': return .freebsd
|
'freebsd' { return .freebsd}
|
||||||
case 'openbsd': return .openbsd
|
'openbsd' { return .openbsd}
|
||||||
case 'netbsd': return .netbsd
|
'netbsd' { return .netbsd}
|
||||||
case 'dragonfly': return .dragonfly
|
'dragonfly' { return .dragonfly}
|
||||||
case 'js': return .js
|
'js' { return .js}
|
||||||
case 'solaris': return .solaris
|
'solaris' { return .solaris}
|
||||||
case 'android': return .android
|
'android' { return .android}
|
||||||
case 'msvc':
|
'msvc' {
|
||||||
// notice that `-os msvc` became `-cc msvc`
|
// notice that `-os msvc` became `-cc msvc`
|
||||||
verror('use the flag `-cc msvc` to build using msvc')
|
verror('use the flag `-cc msvc` to build using msvc')
|
||||||
}
|
}
|
||||||
|
}
|
||||||
println('bad os $os') // todo panic?
|
println('bad os $os') // todo panic?
|
||||||
return .linux
|
return .linux
|
||||||
}
|
}
|
||||||
|
|
|
@ -658,10 +658,10 @@ fn (p mut Parser) interface_method(field_name, receiver string) &Fn {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn key_to_type_cat(tok TokenKind) TypeCategory {
|
fn key_to_type_cat(tok TokenKind) TypeCategory {
|
||||||
switch tok {
|
match tok {
|
||||||
case TokenKind.key_interface: return TypeCategory.interface_
|
.key_interface { return TypeCategory.interface_ }
|
||||||
case TokenKind.key_struct: return TypeCategory.struct_
|
.key_struct { return TypeCategory.struct_ }
|
||||||
case TokenKind.key_union: return TypeCategory.union_
|
.key_union { return TypeCategory.union_ }
|
||||||
//TokenKind.key_ => return .interface_
|
//TokenKind.key_ => return .interface_
|
||||||
}
|
}
|
||||||
verror('Unknown token: $tok')
|
verror('Unknown token: $tok')
|
||||||
|
@ -2447,8 +2447,8 @@ fn (p mut Parser) term() string {
|
||||||
fn (p mut Parser) unary() string {
|
fn (p mut Parser) unary() string {
|
||||||
mut typ := ''
|
mut typ := ''
|
||||||
tok := p.tok
|
tok := p.tok
|
||||||
switch tok {
|
match tok {
|
||||||
case TokenKind.not:
|
.not {
|
||||||
p.gen('!')
|
p.gen('!')
|
||||||
p.check(.not)
|
p.check(.not)
|
||||||
// typ should be bool type
|
// typ should be bool type
|
||||||
|
@ -2456,29 +2456,32 @@ fn (p mut Parser) unary() string {
|
||||||
if typ != 'bool' {
|
if typ != 'bool' {
|
||||||
p.error('operator ! requires bool type, not `$typ`')
|
p.error('operator ! requires bool type, not `$typ`')
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case TokenKind.bit_not:
|
.bit_not {
|
||||||
p.gen('~')
|
p.gen('~')
|
||||||
p.check(.bit_not)
|
p.check(.bit_not)
|
||||||
typ = p.bool_expression()
|
typ = p.bool_expression()
|
||||||
default:
|
}
|
||||||
|
else {
|
||||||
typ = p.factor()
|
typ = p.factor()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return typ
|
return typ
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) factor() string {
|
fn (p mut Parser) factor() string {
|
||||||
mut typ := ''
|
mut typ := ''
|
||||||
tok := p.tok
|
tok := p.tok
|
||||||
switch tok {
|
match tok {
|
||||||
case .key_none:
|
.key_none {
|
||||||
if !p.expected_type.starts_with('Option_') {
|
if !p.expected_type.starts_with('Option_') {
|
||||||
p.error('need "$p.expected_type" got none')
|
p.error('need "$p.expected_type" got none')
|
||||||
}
|
}
|
||||||
p.gen('opt_none()')
|
p.gen('opt_none()')
|
||||||
p.check(.key_none)
|
p.check(.key_none)
|
||||||
return p.expected_type
|
return p.expected_type
|
||||||
case TokenKind.number:
|
}
|
||||||
|
.number {
|
||||||
typ = 'int'
|
typ = 'int'
|
||||||
// Check if float (`1.0`, `1e+3`) but not if is hexa
|
// Check if float (`1.0`, `1e+3`) but not if is hexa
|
||||||
if (p.lit.contains('.') || (p.lit.contains('e') || p.lit.contains('E'))) &&
|
if (p.lit.contains('.') || (p.lit.contains('e') || p.lit.contains('E'))) &&
|
||||||
|
@ -2496,13 +2499,15 @@ fn (p mut Parser) factor() string {
|
||||||
}
|
}
|
||||||
p.gen(p.lit)
|
p.gen(p.lit)
|
||||||
p.fgen(p.lit)
|
p.fgen(p.lit)
|
||||||
case TokenKind.minus:
|
}
|
||||||
|
.minus {
|
||||||
p.gen('-')
|
p.gen('-')
|
||||||
p.fgen('-')
|
p.fgen('-')
|
||||||
p.next()
|
p.next()
|
||||||
return p.factor()
|
return p.factor()
|
||||||
// Variable
|
// Variable
|
||||||
case TokenKind.key_sizeof:
|
}
|
||||||
|
.key_sizeof {
|
||||||
p.gen('sizeof(')
|
p.gen('sizeof(')
|
||||||
p.fgen('sizeof(')
|
p.fgen('sizeof(')
|
||||||
p.next()
|
p.next()
|
||||||
|
@ -2512,10 +2517,12 @@ fn (p mut Parser) factor() string {
|
||||||
p.gen('$sizeof_typ)')
|
p.gen('$sizeof_typ)')
|
||||||
p.fgen('$sizeof_typ)')
|
p.fgen('$sizeof_typ)')
|
||||||
return 'int'
|
return 'int'
|
||||||
case TokenKind.amp, TokenKind.dot, TokenKind.mul:
|
}
|
||||||
|
.amp, .dot, .mul {
|
||||||
// (dot is for enum vals: `.green`)
|
// (dot is for enum vals: `.green`)
|
||||||
return p.name_expr()
|
return p.name_expr()
|
||||||
case TokenKind.name:
|
}
|
||||||
|
.name {
|
||||||
// map[string]int
|
// map[string]int
|
||||||
if p.lit == 'map' && p.peek() == .lsbr {
|
if p.lit == 'map' && p.peek() == .lsbr {
|
||||||
return p.map_init()
|
return p.map_init()
|
||||||
|
@ -2532,7 +2539,8 @@ fn (p mut Parser) factor() string {
|
||||||
//}
|
//}
|
||||||
typ = p.name_expr()
|
typ = p.name_expr()
|
||||||
return typ
|
return typ
|
||||||
case TokenKind.key_default:
|
}
|
||||||
|
.key_default {
|
||||||
p.next()
|
p.next()
|
||||||
p.next()
|
p.next()
|
||||||
name := p.check_name()
|
name := p.check_name()
|
||||||
|
@ -2542,7 +2550,8 @@ fn (p mut Parser) factor() string {
|
||||||
p.gen('default(T)')
|
p.gen('default(T)')
|
||||||
p.next()
|
p.next()
|
||||||
return 'T'
|
return 'T'
|
||||||
case TokenKind.lpar:
|
}
|
||||||
|
.lpar {
|
||||||
//p.gen('(/*lpar*/')
|
//p.gen('(/*lpar*/')
|
||||||
p.gen('(')
|
p.gen('(')
|
||||||
p.check(.lpar)
|
p.check(.lpar)
|
||||||
|
@ -2556,41 +2565,50 @@ fn (p mut Parser) factor() string {
|
||||||
p.ptr_cast = false
|
p.ptr_cast = false
|
||||||
p.gen(')')
|
p.gen(')')
|
||||||
return typ
|
return typ
|
||||||
case TokenKind.chartoken:
|
}
|
||||||
|
.chartoken {
|
||||||
p.char_expr()
|
p.char_expr()
|
||||||
typ = 'byte'
|
typ = 'byte'
|
||||||
return typ
|
return typ
|
||||||
case TokenKind.str:
|
}
|
||||||
|
.str {
|
||||||
p.string_expr()
|
p.string_expr()
|
||||||
typ = 'string'
|
typ = 'string'
|
||||||
return typ
|
return typ
|
||||||
case TokenKind.key_false:
|
}
|
||||||
|
.key_false {
|
||||||
typ = 'bool'
|
typ = 'bool'
|
||||||
p.gen('0')
|
p.gen('0')
|
||||||
p.fgen('false')
|
p.fgen('false')
|
||||||
case TokenKind.key_true:
|
}
|
||||||
|
.key_true {
|
||||||
typ = 'bool'
|
typ = 'bool'
|
||||||
p.gen('1')
|
p.gen('1')
|
||||||
p.fgen('true')
|
p.fgen('true')
|
||||||
case TokenKind.lsbr:
|
}
|
||||||
|
.lsbr {
|
||||||
// `[1,2,3]` or `[]` or `[20]byte`
|
// `[1,2,3]` or `[]` or `[20]byte`
|
||||||
// TODO have to return because arrayInit does next()
|
// TODO have to return because arrayInit does next()
|
||||||
// everything should do next()
|
// everything should do next()
|
||||||
return p.array_init()
|
return p.array_init()
|
||||||
case TokenKind.lcbr:
|
}
|
||||||
|
.lcbr {
|
||||||
// `m := { 'one': 1 }`
|
// `m := { 'one': 1 }`
|
||||||
if p.peek() == .str {
|
if p.peek() == .str {
|
||||||
return p.map_init()
|
return p.map_init()
|
||||||
}
|
}
|
||||||
// { user | name :'new name' }
|
// { user | name :'new name' }
|
||||||
return p.assoc()
|
return p.assoc()
|
||||||
case TokenKind.key_if:
|
}
|
||||||
|
.key_if {
|
||||||
typ = p.if_st(true, 0)
|
typ = p.if_st(true, 0)
|
||||||
return typ
|
return typ
|
||||||
case TokenKind.key_match:
|
}
|
||||||
|
.key_match {
|
||||||
typ = p.match_statement(true)
|
typ = p.match_statement(true)
|
||||||
return typ
|
return typ
|
||||||
default:
|
}
|
||||||
|
else {
|
||||||
if p.pref.is_verbose || p.pref.is_debug {
|
if p.pref.is_verbose || p.pref.is_debug {
|
||||||
next := p.peek()
|
next := p.peek()
|
||||||
println('prev=${p.prev_tok.str()}')
|
println('prev=${p.prev_tok.str()}')
|
||||||
|
@ -2598,6 +2616,7 @@ fn (p mut Parser) factor() string {
|
||||||
}
|
}
|
||||||
p.error('unexpected token: `${p.tok.str()}`')
|
p.error('unexpected token: `${p.tok.str()}`')
|
||||||
}
|
}
|
||||||
|
}
|
||||||
p.next()// TODO everything should next()
|
p.next()// TODO everything should next()
|
||||||
return typ
|
return typ
|
||||||
}
|
}
|
||||||
|
@ -3316,6 +3335,8 @@ fn (p mut Parser) for_st() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) switch_statement() {
|
fn (p mut Parser) switch_statement() {
|
||||||
|
p.warn('`switch` statement has been deprecated, use `match` instead:\n' +
|
||||||
|
'https://vlang.io/docs#match')
|
||||||
if p.tok == .key_switch {
|
if p.tok == .key_switch {
|
||||||
p.check(.key_switch)
|
p.check(.key_switch)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -306,8 +306,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
return scan_res(.number, num)
|
return scan_res(.number, num)
|
||||||
}
|
}
|
||||||
// all other tokens
|
// all other tokens
|
||||||
switch c {
|
match c {
|
||||||
case `+`:
|
`+` {
|
||||||
if nextc == `+` {
|
if nextc == `+` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.inc, '')
|
return scan_res(.inc, '')
|
||||||
|
@ -317,7 +317,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
return scan_res(.plus_assign, '')
|
return scan_res(.plus_assign, '')
|
||||||
}
|
}
|
||||||
return scan_res(.plus, '')
|
return scan_res(.plus, '')
|
||||||
case `-`:
|
}
|
||||||
|
`-` {
|
||||||
if nextc == `-` {
|
if nextc == `-` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.dec, '')
|
return scan_res(.dec, '')
|
||||||
|
@ -327,47 +328,62 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
return scan_res(.minus_assign, '')
|
return scan_res(.minus_assign, '')
|
||||||
}
|
}
|
||||||
return scan_res(.minus, '')
|
return scan_res(.minus, '')
|
||||||
case `*`:
|
}
|
||||||
|
`*` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.mult_assign, '')
|
return scan_res(.mult_assign, '')
|
||||||
}
|
}
|
||||||
return scan_res(.mul, '')
|
return scan_res(.mul, '')
|
||||||
case `^`:
|
}
|
||||||
|
`^` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.xor_assign, '')
|
return scan_res(.xor_assign, '')
|
||||||
}
|
}
|
||||||
return scan_res(.xor, '')
|
return scan_res(.xor, '')
|
||||||
case `%`:
|
}
|
||||||
|
`%` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.mod_assign, '')
|
return scan_res(.mod_assign, '')
|
||||||
}
|
}
|
||||||
return scan_res(.mod, '')
|
return scan_res(.mod, '')
|
||||||
case `?`:
|
}
|
||||||
|
`?` {
|
||||||
return scan_res(.question, '')
|
return scan_res(.question, '')
|
||||||
case single_quote, double_quote:
|
}
|
||||||
|
single_quote, double_quote {
|
||||||
return scan_res(.str, s.ident_string())
|
return scan_res(.str, s.ident_string())
|
||||||
case `\``: // ` // apostrophe balance comment. do not remove
|
}
|
||||||
|
`\`` { // ` // apostrophe balance comment. do not remove
|
||||||
return scan_res(.chartoken, s.ident_char())
|
return scan_res(.chartoken, s.ident_char())
|
||||||
case `(`:
|
}
|
||||||
|
`(` {
|
||||||
|
|
||||||
return scan_res(.lpar, '')
|
return scan_res(.lpar, '')
|
||||||
case `)`:
|
}
|
||||||
|
`)` {
|
||||||
return scan_res(.rpar, '')
|
return scan_res(.rpar, '')
|
||||||
case `[`:
|
}
|
||||||
|
`[` {
|
||||||
return scan_res(.lsbr, '')
|
return scan_res(.lsbr, '')
|
||||||
case `]`:
|
}
|
||||||
|
`]` {
|
||||||
return scan_res(.rsbr, '')
|
return scan_res(.rsbr, '')
|
||||||
case `{`:
|
}
|
||||||
|
`{` {
|
||||||
// Skip { in ${ in strings
|
// Skip { in ${ in strings
|
||||||
|
// }
|
||||||
if s.inside_string {
|
if s.inside_string {
|
||||||
return s.scan()
|
return s.scan()
|
||||||
}
|
}
|
||||||
return scan_res(.lcbr, '')
|
return scan_res(.lcbr, '')
|
||||||
case `$`:
|
}
|
||||||
|
`$` {
|
||||||
return scan_res(.dollar, '')
|
return scan_res(.dollar, '')
|
||||||
case `}`:
|
}
|
||||||
|
`}` {
|
||||||
// s = `hello $name !`
|
// s = `hello $name !`
|
||||||
// s = `hello ${name} !`
|
// s = `hello ${name} !`
|
||||||
if s.inside_string {
|
if s.inside_string {
|
||||||
|
@ -382,7 +398,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
else {
|
else {
|
||||||
return scan_res(.rcbr, '')
|
return scan_res(.rcbr, '')
|
||||||
}
|
}
|
||||||
case `&`:
|
}
|
||||||
|
`&` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.and_assign, '')
|
return scan_res(.and_assign, '')
|
||||||
|
@ -392,7 +409,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
return scan_res(.and, '')
|
return scan_res(.and, '')
|
||||||
}
|
}
|
||||||
return scan_res(.amp, '')
|
return scan_res(.amp, '')
|
||||||
case `|`:
|
}
|
||||||
|
`|` {
|
||||||
if nextc == `|` {
|
if nextc == `|` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.logical_or, '')
|
return scan_res(.logical_or, '')
|
||||||
|
@ -402,9 +420,11 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
return scan_res(.or_assign, '')
|
return scan_res(.or_assign, '')
|
||||||
}
|
}
|
||||||
return scan_res(.pipe, '')
|
return scan_res(.pipe, '')
|
||||||
case `,`:
|
}
|
||||||
|
`,` {
|
||||||
return scan_res(.comma, '')
|
return scan_res(.comma, '')
|
||||||
case `@`:
|
}
|
||||||
|
`@` {
|
||||||
s.pos++
|
s.pos++
|
||||||
name := s.ident_name()
|
name := s.ident_name()
|
||||||
// @FN => will be substituted with the name of the current V function
|
// @FN => will be substituted with the name of the current V function
|
||||||
|
@ -424,6 +444,7 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
s.error('@ must be used before keywords (e.g. `@type string`)')
|
s.error('@ must be used before keywords (e.g. `@type string`)')
|
||||||
}
|
}
|
||||||
return scan_res(.name, name)
|
return scan_res(.name, name)
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
case `\r`:
|
case `\r`:
|
||||||
if nextc == `\n` {
|
if nextc == `\n` {
|
||||||
|
@ -431,11 +452,13 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
s.last_nl_pos = s.pos
|
s.last_nl_pos = s.pos
|
||||||
return scan_res(.nl, '')
|
return scan_res(.nl, '')
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case `\n`:
|
case `\n`:
|
||||||
s.last_nl_pos = s.pos
|
s.last_nl_pos = s.pos
|
||||||
return scan_res(.nl, '')
|
return scan_res(.nl, '')
|
||||||
|
}
|
||||||
*/
|
*/
|
||||||
case `.`:
|
`.` {
|
||||||
if nextc == `.` {
|
if nextc == `.` {
|
||||||
s.pos++
|
s.pos++
|
||||||
if s.text[s.pos+1] == `.` {
|
if s.text[s.pos+1] == `.` {
|
||||||
|
@ -445,7 +468,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
return scan_res(.dotdot, '')
|
return scan_res(.dotdot, '')
|
||||||
}
|
}
|
||||||
return scan_res(.dot, '')
|
return scan_res(.dot, '')
|
||||||
case `#`:
|
}
|
||||||
|
`#` {
|
||||||
start := s.pos + 1
|
start := s.pos + 1
|
||||||
s.ignore_line()
|
s.ignore_line()
|
||||||
if nextc == `!` {
|
if nextc == `!` {
|
||||||
|
@ -456,7 +480,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
}
|
}
|
||||||
hash := s.text.substr(start, s.pos)
|
hash := s.text.substr(start, s.pos)
|
||||||
return scan_res(.hash, hash.trim_space())
|
return scan_res(.hash, hash.trim_space())
|
||||||
case `>`:
|
}
|
||||||
|
`>` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.ge, '')
|
return scan_res(.ge, '')
|
||||||
|
@ -472,7 +497,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
else {
|
else {
|
||||||
return scan_res(.gt, '')
|
return scan_res(.gt, '')
|
||||||
}
|
}
|
||||||
case 0xE2:
|
}
|
||||||
|
0xE2 {
|
||||||
//case `≠`:
|
//case `≠`:
|
||||||
if nextc == 0x89 && s.text[s.pos + 2] == 0xA0 {
|
if nextc == 0x89 && s.text[s.pos + 2] == 0xA0 {
|
||||||
s.pos += 2
|
s.pos += 2
|
||||||
|
@ -488,7 +514,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
s.pos += 2
|
s.pos += 2
|
||||||
return scan_res(.ge, '')
|
return scan_res(.ge, '')
|
||||||
}
|
}
|
||||||
case `<`:
|
}
|
||||||
|
`<` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.le, '')
|
return scan_res(.le, '')
|
||||||
|
@ -504,7 +531,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
else {
|
else {
|
||||||
return scan_res(.lt, '')
|
return scan_res(.lt, '')
|
||||||
}
|
}
|
||||||
case `=`:
|
}
|
||||||
|
`=` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.eq, '')
|
return scan_res(.eq, '')
|
||||||
|
@ -516,7 +544,8 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
else {
|
else {
|
||||||
return scan_res(.assign, '')
|
return scan_res(.assign, '')
|
||||||
}
|
}
|
||||||
case `:`:
|
}
|
||||||
|
`:` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.decl_assign, '')
|
return scan_res(.decl_assign, '')
|
||||||
|
@ -524,9 +553,11 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
else {
|
else {
|
||||||
return scan_res(.colon, '')
|
return scan_res(.colon, '')
|
||||||
}
|
}
|
||||||
case `;`:
|
}
|
||||||
|
`;` {
|
||||||
return scan_res(.semicolon, '')
|
return scan_res(.semicolon, '')
|
||||||
case `!`:
|
}
|
||||||
|
`!` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.ne, '')
|
return scan_res(.ne, '')
|
||||||
|
@ -534,9 +565,11 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
else {
|
else {
|
||||||
return scan_res(.not, '')
|
return scan_res(.not, '')
|
||||||
}
|
}
|
||||||
case `~`:
|
}
|
||||||
|
`~` {
|
||||||
return scan_res(.bit_not, '')
|
return scan_res(.bit_not, '')
|
||||||
case `/`:
|
}
|
||||||
|
`/` {
|
||||||
if nextc == `=` {
|
if nextc == `=` {
|
||||||
s.pos++
|
s.pos++
|
||||||
return scan_res(.div_assign, '')
|
return scan_res(.div_assign, '')
|
||||||
|
@ -581,6 +614,7 @@ fn (s mut Scanner) scan() ScanRes {
|
||||||
return s.scan()
|
return s.scan()
|
||||||
}
|
}
|
||||||
return scan_res(.div, '')
|
return scan_res(.div, '')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$if windows {
|
$if windows {
|
||||||
if c == `\0` {
|
if c == `\0` {
|
||||||
|
|
|
@ -803,13 +803,13 @@ fn (table &Table) cgen_name_type_pair(name, typ string) string {
|
||||||
|
|
||||||
fn is_valid_int_const(val, typ string) bool {
|
fn is_valid_int_const(val, typ string) bool {
|
||||||
x := val.int()
|
x := val.int()
|
||||||
switch typ {
|
match typ {
|
||||||
case 'byte': return 0 <= x && x <= 255
|
'byte' { return 0 <= x && x <= 255 }
|
||||||
case 'u16': return 0 <= x && x <= 65535
|
'u16' { return 0 <= x && x <= 65535 }
|
||||||
//case 'u32': return 0 <= x && x <= math.MaxU32
|
//case 'u32': return 0 <= x && x <= math.MaxU32
|
||||||
//case 'u64': return 0 <= x && x <= math.MaxU64
|
//case 'u64': return 0 <= x && x <= math.MaxU64
|
||||||
//////////////
|
//////////////
|
||||||
case 'i8': return -128 <= x && x <= 127
|
'i8' { return -128 <= x && x <= 127 }
|
||||||
/*
|
/*
|
||||||
case 'i16': return math.min_i16 <= x && x <= math.max_i16
|
case 'i16': return math.min_i16 <= x && x <= math.max_i16
|
||||||
case 'int': return math.min_i32 <= x && x <= math.max_i32
|
case 'int': return math.min_i32 <= x && x <= math.max_i32
|
||||||
|
@ -826,22 +826,23 @@ fn (p mut Parser) typ_to_fmt(typ string, level int) string {
|
||||||
if t.cat == .enum_ {
|
if t.cat == .enum_ {
|
||||||
return '%d'
|
return '%d'
|
||||||
}
|
}
|
||||||
switch typ {
|
match typ {
|
||||||
case 'string': return '%.*s'
|
'string' { return '%.*s'}
|
||||||
//case 'bool': return '%.*s'
|
//case 'bool': return '%.*s'
|
||||||
case 'ustring': return '%.*s'
|
'ustring' { return '%.*s'}
|
||||||
case 'byte', 'bool', 'int', 'char', 'byte', 'i16', 'i8': return '%d'
|
'byte', 'bool', 'int', 'char', 'byte', 'i16', 'i8' { return '%d'}
|
||||||
case 'u16', 'u32': return '%u'
|
'u16', 'u32' { return '%u'}
|
||||||
case 'f64', 'f32': return '%f'
|
'f64', 'f32' { return '%f'}
|
||||||
case 'i64': return '%lld'
|
'i64' { return '%lld'}
|
||||||
case 'u64': return '%llu'
|
'u64' { return '%llu'}
|
||||||
case 'byte*', 'byteptr': return '%s'
|
'byte*', 'byteptr' { return '%s'}
|
||||||
// case 'array_string': return '%s'
|
// case 'array_string': return '%s'
|
||||||
// case 'array_int': return '%s'
|
// case 'array_int': return '%s'
|
||||||
case 'void': p.error('cannot interpolate this value')
|
'void' { p.error('cannot interpolate this value')}
|
||||||
default:
|
else {
|
||||||
if typ.ends_with('*') {
|
if typ.ends_with('*') {
|
||||||
return '%p'
|
return '%p'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if t.parent != '' && level == 0 {
|
if t.parent != '' && level == 0 {
|
||||||
|
|
49
vlib/os/os.v
49
vlib/os/os.v
|
@ -380,34 +380,33 @@ pub fn system(cmd string) int {
|
||||||
|
|
||||||
pub fn sigint_to_signal_name(si int) string {
|
pub fn sigint_to_signal_name(si int) string {
|
||||||
// POSIX signals:
|
// POSIX signals:
|
||||||
switch si {
|
match si {
|
||||||
case 1: return 'SIGHUP'
|
1 {return 'SIGHUP'}
|
||||||
case 2: return 'SIGINT'
|
2 {return 'SIGINT'}
|
||||||
case 3: return 'SIGQUIT'
|
3 {return 'SIGQUIT'}
|
||||||
case 4: return 'SIGILL'
|
4 {return 'SIGILL'}
|
||||||
case 6: return 'SIGABRT'
|
6 {return 'SIGABRT'}
|
||||||
case 8: return 'SIGFPE'
|
8 {return 'SIGFPE'}
|
||||||
case 9: return 'SIGKILL'
|
9 {return 'SIGKILL'}
|
||||||
case 11: return 'SIGSEGV'
|
11 {return 'SIGSEGV'}
|
||||||
case 13: return 'SIGPIPE'
|
13 {return 'SIGPIPE'}
|
||||||
case 14: return 'SIGALRM'
|
14 {return 'SIGALRM'}
|
||||||
case 15: return 'SIGTERM'
|
15 {return 'SIGTERM'}
|
||||||
}
|
}
|
||||||
///////////////////////////////////
|
|
||||||
$if linux {
|
$if linux {
|
||||||
// From `man 7 signal` on linux:
|
// From `man 7 signal` on linux:
|
||||||
switch si {
|
match si {
|
||||||
case 30,10,16: return 'SIGUSR1'
|
30,10,16{ return 'SIGUSR1'}
|
||||||
case 31,12,17: return 'SIGUSR2'
|
31,12,17{ return 'SIGUSR2'}
|
||||||
case 20,17,18: return 'SIGCHLD'
|
20,17,18{ return 'SIGCHLD'}
|
||||||
case 19,18,25: return 'SIGCONT'
|
19,18,25{ return 'SIGCONT'}
|
||||||
case 17,19,23: return 'SIGSTOP'
|
17,19,23{ return 'SIGSTOP'}
|
||||||
case 18,20,24: return 'SIGTSTP'
|
18,20,24{ return 'SIGTSTP'}
|
||||||
case 21,21,26: return 'SIGTTIN'
|
21,21,26{ return 'SIGTTIN'}
|
||||||
case 22,22,27: return 'SIGTTOU'
|
22,22,27{ return 'SIGTTOU'}
|
||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
case 5: return 'SIGTRAP'
|
5{ return 'SIGTRAP'}
|
||||||
case 7: return 'SIGBUS'
|
7{ return 'SIGBUS' }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 'unknown'
|
return 'unknown'
|
||||||
|
|
Loading…
Reference in New Issue