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