cgen: simplify int(bool_var) casts; support [c_extern] tag for global declarations
							parent
							
								
									3d6d120d4c
								
							
						
					
					
						commit
						b387554840
					
				|  | @ -3961,9 +3961,9 @@ fn (mut g Gen) cast_expr(node ast.CastExpr) { | |||
| 		g.expr(node.expr) | ||||
| 	} else if node.expr_type == ast.bool_type && node.typ.is_int() { | ||||
| 		styp := g.typ(node.typ) | ||||
| 		g.write('($styp[]){(') | ||||
| 		g.write('($styp)(') | ||||
| 		g.expr(node.expr) | ||||
| 		g.write(')?1:0}[0]') | ||||
| 		g.write(')') | ||||
| 	} else { | ||||
| 		styp := g.typ(node.typ) | ||||
| 		if (g.pref.translated || g.file.is_translated) && sym.kind == .function { | ||||
|  | @ -4633,6 +4633,7 @@ fn (mut g Gen) global_decl(node ast.GlobalDecl) { | |||
| 	} | ||||
| 	// should the global be initialized now, not later in `vinit()`
 | ||||
| 	cinit := node.attrs.contains('cinit') | ||||
| 	cextern := node.attrs.contains('c_extern') | ||||
| 	should_init := (!g.pref.use_cache && g.pref.build_mode != .build_module) | ||||
| 		|| (g.pref.build_mode == .build_module && g.module_built == node.mod) | ||||
| 	mut attributes := '' | ||||
|  | @ -4656,8 +4657,9 @@ fn (mut g Gen) global_decl(node ast.GlobalDecl) { | |||
| 			g.definitions.writeln('$fn_type_name = ${g.table.sym(field.typ).name}; // global2') | ||||
| 			continue | ||||
| 		} | ||||
| 		extern := if cextern { 'extern ' } else { '' } | ||||
| 		modifier := if field.is_volatile { ' volatile ' } else { '' } | ||||
| 		g.definitions.write_string('$visibility_kw$modifier$styp $attributes $field.name') | ||||
| 		g.definitions.write_string('$extern$visibility_kw$modifier$styp $attributes $field.name') | ||||
| 		if field.has_expr || cinit { | ||||
| 			if g.pref.translated { | ||||
| 				g.definitions.write_string(' = ${g.expr_string(field.expr)}') | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue