| ... | ... | @@ -188,11 +188,11 @@ static AstNode *trans_create_node_array_type(Context *c, AstNode *size_node, Ast |
| 188 | 188 | return node; |
| 189 | 189 | } |
| 190 | 190 | |
| 191 | | static AstNode *trans_create_node_var_decl(Context *c, bool is_const, Buf *var_name, AstNode *type_node, |
| 192 | | AstNode *init_node) |
| 191 | static AstNode *trans_create_node_var_decl(Context *c, VisibMod visib_mod, bool is_const, Buf *var_name, |
| 192 | AstNode *type_node, AstNode *init_node) |
| 193 | 193 | { |
| 194 | 194 | AstNode *node = trans_create_node(c, NodeTypeVariableDeclaration); |
| 195 | | node->data.variable_declaration.visib_mod = c->visib_mod; |
| 195 | node->data.variable_declaration.visib_mod = visib_mod; |
| 196 | 196 | node->data.variable_declaration.symbol = var_name; |
| 197 | 197 | node->data.variable_declaration.is_const = is_const; |
| 198 | 198 | node->data.variable_declaration.type = type_node; |
| ... | ... | @@ -200,6 +200,18 @@ static AstNode *trans_create_node_var_decl(Context *c, bool is_const, Buf *var_n |
| 200 | 200 | return node; |
| 201 | 201 | } |
| 202 | 202 | |
| 203 | static AstNode *trans_create_node_var_decl_global(Context *c, bool is_const, Buf *var_name, AstNode *type_node, |
| 204 | AstNode *init_node) |
| 205 | { |
| 206 | return trans_create_node_var_decl(c, c->visib_mod, is_const, var_name, type_node, init_node); |
| 207 | } |
| 208 | |
| 209 | static AstNode *trans_create_node_var_decl_local(Context *c, bool is_const, Buf *var_name, AstNode *type_node, |
| 210 | AstNode *init_node) |
| 211 | { |
| 212 | return trans_create_node_var_decl(c, VisibModPrivate, is_const, var_name, type_node, init_node); |
| 213 | } |
| 214 | |
| 203 | 215 | |
| 204 | 216 | static AstNode *trans_create_node_inline_fn(Context *c, Buf *fn_name, Buf *var_name, AstNode *src_proto_node) { |
| 205 | 217 | AstNode *fn_def = trans_create_node(c, NodeTypeFnDef); |
| ... | ... | @@ -268,7 +280,7 @@ static AstNode *get_global(Context *c, Buf *name) { |
| 268 | 280 | static AstNode *add_global_var(Context *c, Buf *var_name, AstNode *value_node) { |
| 269 | 281 | bool is_const = true; |
| 270 | 282 | AstNode *type_node = nullptr; |
| 271 | | AstNode *node = trans_create_node_var_decl(c, is_const, var_name, type_node, value_node); |
| 283 | AstNode *node = trans_create_node_var_decl_global(c, is_const, var_name, type_node, value_node); |
| 272 | 284 | c->root->data.root.top_level_decls.append(node); |
| 273 | 285 | return node; |
| 274 | 286 | } |
| ... | ... | @@ -1166,7 +1178,7 @@ static AstNode *trans_local_declaration(Context *c, AstNode *block, DeclStmt *st |
| 1166 | 1178 | if (type_node == nullptr) |
| 1167 | 1179 | return nullptr; |
| 1168 | 1180 | |
| 1169 | | AstNode *node = trans_create_node_var_decl(c, qual_type.isConstQualified(), |
| 1181 | AstNode *node = trans_create_node_var_decl_local(c, qual_type.isConstQualified(), |
| 1170 | 1182 | buf_create_from_str(decl_name(var_decl)), type_node, init_node); |
| 1171 | 1183 | block->data.block.statements.append(node); |
| 1172 | 1184 | continue; |
| ... | ... | @@ -2396,13 +2408,13 @@ static void visit_var_decl(Context *c, const VarDecl *var_decl) { |
| 2396 | 2408 | init_node = trans_create_node_symbol_str(c, "undefined"); |
| 2397 | 2409 | } |
| 2398 | 2410 | |
| 2399 | | AstNode *var_node = trans_create_node_var_decl(c, is_const, name, var_type, init_node); |
| 2411 | AstNode *var_node = trans_create_node_var_decl_global(c, is_const, name, var_type, init_node); |
| 2400 | 2412 | c->root->data.root.top_level_decls.append(var_node); |
| 2401 | 2413 | return; |
| 2402 | 2414 | } |
| 2403 | 2415 | |
| 2404 | 2416 | if (is_extern) { |
| 2405 | | AstNode *var_node = trans_create_node_var_decl(c, is_const, name, var_type, nullptr); |
| 2417 | AstNode *var_node = trans_create_node_var_decl_global(c, is_const, name, var_type, nullptr); |
| 2406 | 2418 | var_node->data.variable_declaration.is_extern = true; |
| 2407 | 2419 | c->root->data.root.top_level_decls.append(var_node); |
| 2408 | 2420 | return; |