@@ -69,7 +69,7 @@ char *gen_name_c(char *name) {
69
69
if (sym -> external_name ) {
70
70
gen_name = sym -> external_name ;
71
71
} else if (sym -> package -> external_name ) {
72
- gen_name = strf ("%s_ %s" , sym -> package -> external_name , sym -> name );
72
+ gen_name = strf ("%s %s" , sym -> package -> external_name , sym -> name );
73
73
} else {
74
74
gen_name = sym -> name ;
75
75
}
@@ -106,7 +106,7 @@ char *gen_type_c(Type *type, char *inner) {
106
106
case TYPE_STRUCT :
107
107
case TYPE_UNION :
108
108
case TYPE_ENUM : {
109
- return strf ("%s%s%s" , type -> sym -> name , sep , inner );
109
+ return strf ("%s%s%s" , gen_name_c ( type -> sym -> name ) , sep , inner );
110
110
}
111
111
112
112
case TYPE_PTR : {
@@ -243,21 +243,22 @@ char *gen_expr_c(Expr *expr) {
243
243
gen_expr_c (expr -> ternary .then_expr ),
244
244
gen_expr_c (expr -> ternary .else_expr ));
245
245
case EXPR_CALL : {
246
- char * name = gen_expr_c (expr -> call .expr );
246
+ Expr * call_expr = expr -> call .expr ;
247
+ char * name = gen_expr_c (call_expr );
247
248
Expr * * args = expr -> call .args ;
248
249
int num_args = expr -> call .num_args ;
249
250
BUF (char * str ) = NULL ;
250
251
251
- if (expr -> type -> sym -> kind == SYM_TYPE ) {
252
- // cast
253
- str = strf ("(%s)(%s)" , name , gen_expr_c (args [0 ]));
254
- } else {
252
+ if (call_expr -> type -> kind == TYPE_FUNC ) {
255
253
// function call
256
254
da_printf (str , "%s(" , name );
257
255
for (int i = 0 ; i < num_args ; ++ i ) {
258
256
da_printf (str , "%s%s" , gen_expr_c (args [i ]), i == num_args - 1 ? "" : ", " );
259
257
}
260
258
da_printf (str , ")" );
259
+ } else {
260
+ // cast
261
+ str = strf ("(%s)(%s)" , name , gen_expr_c (args [0 ]));
261
262
}
262
263
return str ;
263
264
}
@@ -294,8 +295,7 @@ char *gen_typespec_c(Typespec *typespec, char *inner) {
294
295
295
296
switch (typespec -> kind ) {
296
297
case TYPESPEC_NAME : {
297
-
298
- return strf ("%s%s%s" , typespec -> name , sep , inner );
298
+ return strf ("%s%s%s" , gen_name_c (typespec -> name ), sep , inner );
299
299
}
300
300
301
301
case TYPESPEC_ARRAY : {
@@ -338,7 +338,7 @@ char *gen_typespec_c(Typespec *typespec, char *inner) {
338
338
char * gen_decl_func_c (Decl * decl ) {
339
339
BUF (char * str ) = NULL ; // @LEAK
340
340
341
- da_printf (str , "%s(" , decl -> name );
341
+ da_printf (str , "%s(" , gen_name_c ( decl -> name ) );
342
342
343
343
int num_params = decl -> func .num_params ;
344
344
if (num_params == 0 ) {
@@ -595,10 +595,12 @@ char *gen_sym_decl_c(Sym *sym) {
595
595
596
596
switch (decl -> kind ) {
597
597
case DECL_CONST :
598
- return strf ("#define %s (%s)" , decl -> name , gen_expr_c (decl -> const_decl .expr ));
598
+ return strf ("#define %s (%s)" , gen_name_c ( decl -> name ) , gen_expr_c (decl -> const_decl .expr ));
599
599
break ;
600
- case DECL_TYPEDEF :
601
- return strf ("typedef %s;" , gen_typespec_c (decl -> typedef_decl .typespec , decl -> name ));
600
+ case DECL_TYPEDEF : {
601
+ char * decl_name = gen_name_c (decl -> name );
602
+ return strf ("typedef %s;" , gen_typespec_c (decl -> typedef_decl .typespec , decl_name ));
603
+ }
602
604
603
605
case DECL_UNION :
604
606
case DECL_STRUCT : {
@@ -609,7 +611,7 @@ char *gen_sym_decl_c(Sym *sym) {
609
611
}
610
612
611
613
BUF (char * str ) = NULL ; // @LEAK
612
- da_printf (str , "%s %s {" , decl -> kind == DECL_STRUCT ? "struct" : "union" , decl -> name );
614
+ da_printf (str , "%s %s {" , decl -> kind == DECL_STRUCT ? "struct" : "union" , gen_name_c ( decl -> name ) );
613
615
++ gen_indent ;
614
616
gen_newline (str );
615
617
@@ -629,7 +631,7 @@ char *gen_sym_decl_c(Sym *sym) {
629
631
BUF (char * str ) = NULL ; // @LEAK
630
632
da_printf (str , "enum " );
631
633
if (!decl -> enum_decl .is_anonymous ) {
632
- da_printf (str , "%s " , decl -> name );
634
+ da_printf (str , "%s " , gen_name_c ( decl -> name ) );
633
635
}
634
636
da_printf (str , "{" );
635
637
++ gen_indent ;
@@ -652,9 +654,10 @@ char *gen_sym_decl_c(Sym *sym) {
652
654
}
653
655
654
656
case DECL_VAR : {
657
+ char * decl_name = gen_name_c (decl -> name );
655
658
char * str = decl -> var .typespec
656
- ? gen_typespec_c (decl -> var .typespec , decl -> name )
657
- : gen_type_c (sym -> type , decl -> name );
659
+ ? gen_typespec_c (decl -> var .typespec , decl_name )
660
+ : gen_type_c (sym -> type , decl_name );
658
661
return strf ("extern %s;" , str );
659
662
}
660
663
@@ -693,9 +696,10 @@ char *gen_sym_def_c(Sym *sym) {
693
696
break ;
694
697
695
698
case DECL_VAR : {
699
+ char * decl_name = gen_name_c (decl -> name );
696
700
char * type = decl -> var .typespec
697
- ? gen_typespec_c (decl -> var .typespec , decl -> name )
698
- : gen_type_c (sym -> type , decl -> name );
701
+ ? gen_typespec_c (decl -> var .typespec , decl_name )
702
+ : gen_type_c (sym -> type , decl_name );
699
703
700
704
if (decl -> var .expr ) {
701
705
char * init_expr = (decl -> var .expr -> kind == EXPR_COMPOUND )
@@ -783,15 +787,16 @@ char *gen_forward_decls_c(void) {
783
787
if (!decl ) continue ;
784
788
if (is_foreign_decl (decl )) continue ;
785
789
if (sym -> kind == SYM_TYPE ) {
790
+ char * name = gen_name_c (sym -> name );
786
791
if (decl -> kind == DECL_STRUCT ) {
787
- da_printf (str , "typedef struct %s %s;" , sym -> name , sym -> name );
792
+ da_printf (str , "typedef struct %s %s;" , name , name );
788
793
gen_newline (str );
789
794
} else if (decl -> kind == DECL_UNION ) {
790
- da_printf (str , "typedef union %s %s;" , sym -> name , sym -> name );
795
+ da_printf (str , "typedef union %s %s;" , name , name );
791
796
gen_newline (str );
792
797
} else if (decl -> kind == DECL_ENUM ) {
793
798
if (!decl -> enum_decl .is_anonymous ) {
794
- da_printf (str , "typedef enum %s %s;" , sym -> name , sym -> name );
799
+ da_printf (str , "typedef enum %s %s;" , name , name );
795
800
gen_newline (str );
796
801
}
797
802
}
0 commit comments