checker: do not allow extra () in if conditions
							parent
							
								
									1a751208ca
								
							
						
					
					
						commit
						473d9fef55
					
				|  | @ -1306,7 +1306,7 @@ pub fn (s string) strip_margin(del ...byte) string { | |||
| 	mut ret := malloc(s.len + 1) | ||||
| 	mut count := 0 | ||||
| 	for i := 0; i < s.len; i++ { | ||||
| 		if (s[i] in [`\n`, `\r`]) { | ||||
| 		if s[i] in [`\n`, `\r`] { | ||||
| 			ret[count] = s[i] | ||||
| 			count++ | ||||
| 			// CRLF
 | ||||
|  |  | |||
|  | @ -16,14 +16,14 @@ pub fn utf32_to_str(code u32) string { | |||
| 		buffer[0] = icode | ||||
| 		return tos(buffer, 1) | ||||
| 	} | ||||
| 	if (icode <= 2047/* 0x7FF */) { | ||||
| 	if icode <= 2047/* 0x7FF */ { | ||||
| 		buffer[0] = 192/*0xC0*/ | (icode>>6)/* 110xxxxx */ | ||||
| 
 | ||||
| 		buffer[1] = 128/*0x80*/ | (icode & 63/*0x3F*/)/* 10xxxxxx */ | ||||
| 
 | ||||
| 		return tos(buffer, 2) | ||||
| 	} | ||||
| 	if (icode <= 65535/* 0xFFFF */) { | ||||
| 	if icode <= 65535/* 0xFFFF */ { | ||||
| 		buffer[0] = 224/*0xE0*/ | (icode>>12)/* 1110xxxx */ | ||||
| 
 | ||||
| 		buffer[1] = 128/*0x80*/ | ((icode>>6) & 63/*0x3F*/)/* 10xxxxxx */ | ||||
|  | @ -32,7 +32,7 @@ pub fn utf32_to_str(code u32) string { | |||
| 
 | ||||
| 		return tos(buffer, 3) | ||||
| 	} | ||||
| 	if (icode <= 1114111/* 0x10FFFF */) { | ||||
| 	if icode <= 1114111/* 0x10FFFF */ { | ||||
| 		buffer[0] = 240/*0xF0*/ | (icode>>18)/* 11110xxx */ | ||||
| 
 | ||||
| 		buffer[1] = 128/*0x80*/ | ((icode>>12) & 63/*0x3F*/)/* 10xxxxxx */ | ||||
|  | @ -54,14 +54,14 @@ pub fn utf32_to_str_no_malloc(code u32, buf voidptr) string { | |||
| 		buffer[0] = icode | ||||
| 		return tos(buffer, 1) | ||||
| 	} | ||||
| 	if (icode <= 2047/* 0x7FF */) { | ||||
| 	if icode <= 2047/* 0x7FF */ { | ||||
| 		buffer[0] = 192/*0xC0*/ | (icode>>6)/* 110xxxxx */ | ||||
| 
 | ||||
| 		buffer[1] = 128/*0x80*/ | (icode & 63/*0x3F*/)/* 10xxxxxx */ | ||||
| 
 | ||||
| 		return tos(buffer, 2) | ||||
| 	} | ||||
| 	if (icode <= 65535/* 0xFFFF */) { | ||||
| 	if icode <= 65535/* 0xFFFF */ { | ||||
| 		buffer[0] = 224/*0xE0*/ | (icode>>12)/* 1110xxxx */ | ||||
| 
 | ||||
| 		buffer[1] = 128/*0x80*/ | ((icode>>6) & 63/*0x3F*/)/* 10xxxxxx */ | ||||
|  | @ -70,7 +70,7 @@ pub fn utf32_to_str_no_malloc(code u32, buf voidptr) string { | |||
| 
 | ||||
| 		return tos(buffer, 3) | ||||
| 	} | ||||
| 	if (icode <= 1114111/* 0x10FFFF */) { | ||||
| 	if icode <= 1114111/* 0x10FFFF */ { | ||||
| 		buffer[0] = 240/*0xF0*/ | (icode>>18)/* 11110xxx */ | ||||
| 
 | ||||
| 		buffer[1] = 128/*0x80*/ | ((icode>>12) & 63/*0x3F*/)/* 10xxxxxx */ | ||||
|  | @ -153,21 +153,21 @@ pub fn string_from_wide2(_wstr &u16, len int) string { | |||
| fn utf8_len(c byte) int { | ||||
| 	mut b := 0 | ||||
| 	mut x := c | ||||
| 	if ((x & 240) != 0) { | ||||
| 	if (x & 240) != 0 { | ||||
| 		// 0xF0
 | ||||
| 		x >>= 4 | ||||
| 	} | ||||
| 	else { | ||||
| 		b += 4 | ||||
| 	} | ||||
| 	if ((x & 12) != 0) { | ||||
| 	if (x & 12) != 0 { | ||||
| 		// 0x0C
 | ||||
| 		x >>= 2 | ||||
| 	} | ||||
| 	else { | ||||
| 		b += 2 | ||||
| 	} | ||||
| 	if ((x & 2) == 0) { | ||||
| 	if (x & 2) == 0 { | ||||
| 		// 0x02
 | ||||
| 		b++ | ||||
| 	} | ||||
|  |  | |||
|  | @ -64,10 +64,10 @@ fn (p mut Parser) gen_fn_decl(f Fn, typ, str_args string) { | |||
| 
 | ||||
| // blank identifer assignment `_ = 111`
 | ||||
| fn (p mut Parser) gen_blank_identifier_assign() { | ||||
| 	assign_error_tok_idx := p.token_idx | ||||
| 	//assign_error_tok_idx := p.token_idx
 | ||||
| 	p.check_name() | ||||
| 	p.check_space(.assign) | ||||
| 	is_indexer := p.peek() == .lsbr | ||||
| 	//is_indexer := p.peek() == .lsbr
 | ||||
| 	is_fn_call,next_expr := p.is_expr_fn_call(p.token_idx) | ||||
| 	pos := p.cgen.add_placeholder() | ||||
| 	expr_tok := p.cur_tok_index() | ||||
|  | @ -77,9 +77,9 @@ fn (p mut Parser) gen_blank_identifier_assign() { | |||
| 		p.error_with_token_index('${next_expr}() $err_used_as_value', expr_tok) | ||||
| 	} | ||||
| 	p.is_var_decl = false | ||||
| 	if !is_indexer && !is_fn_call { | ||||
| 		p.error_with_token_index('assigning `$next_expr` to `_` is redundant', assign_error_tok_idx) | ||||
| 	} | ||||
| 	//if !is_indexer && !is_fn_call {
 | ||||
| 		//p.error_with_token_index('assigning `$next_expr` to `_` is redundant', assign_error_tok_idx)
 | ||||
| 	//}
 | ||||
| 	// handle or
 | ||||
| 	if p.tok == .key_orelse { | ||||
| 		p.gen_handle_option_or_else(typ, '', pos) | ||||
|  |  | |||
|  | @ -9,10 +9,10 @@ fn (v &V) generate_hotcode_reloading_compiler_flags() []string { | |||
| 	mut a := []string | ||||
| 	if v.pref.is_live || v.pref.is_so { | ||||
| 		// See 'man dlopen', and test running a GUI program compiled with -live
 | ||||
| 		if (v.pref.os == .linux || os.user_os() == 'linux') { | ||||
| 		if v.pref.os == .linux || os.user_os() == 'linux' { | ||||
| 			a << '-rdynamic' | ||||
| 		} | ||||
| 		if (v.pref.os == .mac || os.user_os() == 'mac') { | ||||
| 		if v.pref.os == .mac || os.user_os() == 'mac' { | ||||
| 			a << '-flat_namespace' | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -388,7 +388,7 @@ fn (p &Parser) known_fn_in_mod(name string) bool { | |||
| 	existing_fn := p.table.find_fn(name) or { | ||||
| 		return false | ||||
| 	} | ||||
| 	if (existing_fn.mod == p.mod || existing_fn.mod == 'builtin') { | ||||
| 	if existing_fn.mod == p.mod || existing_fn.mod == 'builtin' { | ||||
| 		return true | ||||
| 	} | ||||
| 	return false | ||||
|  |  | |||
|  | @ -699,7 +699,7 @@ pub fn get_lines() []string { | |||
| 	mut inputstr := []string | ||||
| 	for { | ||||
| 		line = get_line() | ||||
| 		if (line.len <= 0) { | ||||
| 		if line.len <= 0 { | ||||
| 			break | ||||
| 		} | ||||
| 		line = line.trim_space() | ||||
|  |  | |||
|  | @ -334,7 +334,7 @@ fn parser(s string) (int,PrepNumber) { | |||
| 			result = parser_pzero | ||||
| 		} | ||||
| 	} | ||||
| 	else if (pn.exponent > 309) { | ||||
| 	else if pn.exponent > 309 { | ||||
| 		if pn.negative { | ||||
| 			result = parser_minf | ||||
| 		} | ||||
|  |  | |||
|  | @ -172,7 +172,7 @@ pub fn day_of_week(y, m, d int) int { | |||
| 	// https://stackoverflow.com/a/6385934
 | ||||
| 	t := [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4] | ||||
| 	mut sy := y | ||||
| 	if (m < 3) { | ||||
| 	if m < 3 { | ||||
| 		sy = sy - 1 | ||||
| 	} | ||||
| 	return (sy + sy / 4 - sy / 100 + sy / 400 + t[m - 1] + d - 1) % 7 + 1 | ||||
|  |  | |||
|  | @ -961,6 +961,12 @@ pub fn (c mut Checker) if_expr(node mut ast.IfExpr) table.Type { | |||
| 	} | ||||
| 	node.typ = table.void_type | ||||
| 	for i, branch in node.branches { | ||||
| 		match branch.cond { | ||||
| 			ast.ParExpr{ | ||||
| 				c.error('unnecessary `()` in an if condition. use `if expr {` instead of `if (expr) {`.',				node.pos) | ||||
| 			} | ||||
| 			else {} | ||||
| 		} | ||||
| 		typ := c.expr(branch.cond) | ||||
| 		if i < node.branches.len - 1 || !node.has_else { | ||||
| 			typ_sym := c.table.get_type_symbol(typ) | ||||
|  |  | |||
|  | @ -785,7 +785,7 @@ fn (g mut Gen) fn_args(args []table.Arg, is_variadic bool) { | |||
| 		is_varg := i == args.len - 1 && is_variadic | ||||
| 		if is_varg { | ||||
| 			varg_type_str := int(arg.typ).str() | ||||
| 			if (!varg_type_str in g.variadic_args) { | ||||
| 			if !(varg_type_str in g.variadic_args) { | ||||
| 				g.variadic_args[varg_type_str] = 0 | ||||
| 			} | ||||
| 			arg_type_name = 'varg_' + g.typ(arg.typ).replace('*', '_ptr') | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ fn (p mut Parser) comp_if() ast.CompIf { | |||
| 		if ((!is_not && os != p.pref.os) || (is_not && os == p.pref.os)) && !p.pref.output_cross_c { | ||||
| 			skip_os = true | ||||
| 			p.check(.lcbr) | ||||
| 			p.warn('SKIPPING $val os=$os p.pref.os=$p.pref.os') | ||||
| 			//p.warn('skipping $if $val os=$os p.pref.os=$p.pref.os')
 | ||||
| 			mut stack := 1 | ||||
| 			for { | ||||
| 				if p.tok.kind == .key_return { | ||||
|  | @ -74,6 +74,10 @@ fn (p mut Parser) comp_if() ast.CompIf { | |||
| 	return node | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
| todo_delete_me = pref.OS.linux   // TODO import warning bug
 | ||||
| ) | ||||
| 
 | ||||
| fn os_from_string(os string) pref.OS { | ||||
| 	match os { | ||||
| 		'linux' { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue