| ... | @@ -188,11 +188,11 @@ static AstNode *trans_create_node_array_type(Context *c, AstNode *size_node, Ast | ... | @@ -188,11 +188,11 @@ static AstNode *trans_create_node_array_type(Context *c, AstNode *size_node, Ast |
| 188 | return node; | 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, | 191 | static AstNode *trans_create_node_var_decl(Context *c, VisibMod visib_mod, bool is_const, Buf *var_name, |
| 192 | AstNode *init_node) | 192 | AstNode *type_node, AstNode *init_node) |
| 193 | { | 193 | { |
| 194 | AstNode *node = trans_create_node(c, NodeTypeVariableDeclaration); | 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 | node->data.variable_declaration.symbol = var_name; | 196 | node->data.variable_declaration.symbol = var_name; |
| 197 | node->data.variable_declaration.is_const = is_const; | 197 | node->data.variable_declaration.is_const = is_const; |
| 198 | node->data.variable_declaration.type = type_node; | 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,6 +200,18 @@ static AstNode *trans_create_node_var_decl(Context *c, bool is_const, Buf *var_n |
| 200 | return node; | 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 | static AstNode *trans_create_node_inline_fn(Context *c, Buf *fn_name, Buf *var_name, AstNode *src_proto_node) { | 216 | static AstNode *trans_create_node_inline_fn(Context *c, Buf *fn_name, Buf *var_name, AstNode *src_proto_node) { |
| 205 | AstNode *fn_def = trans_create_node(c, NodeTypeFnDef); | 217 | AstNode *fn_def = trans_create_node(c, NodeTypeFnDef); |
| ... | @@ -268,7 +280,7 @@ static AstNode *get_global(Context *c, Buf *name) { | ... | @@ -268,7 +280,7 @@ static AstNode *get_global(Context *c, Buf *name) { |
| 268 | static AstNode *add_global_var(Context *c, Buf *var_name, AstNode *value_node) { | 280 | static AstNode *add_global_var(Context *c, Buf *var_name, AstNode *value_node) { |
| 269 | bool is_const = true; | 281 | bool is_const = true; |
| 270 | AstNode *type_node = nullptr; | 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 | c->root->data.root.top_level_decls.append(node); | 284 | c->root->data.root.top_level_decls.append(node); |
| 273 | return node; | 285 | return node; |
| 274 | } | 286 | } |
| ... | @@ -1166,7 +1178,7 @@ static AstNode *trans_local_declaration(Context *c, AstNode *block, DeclStmt *st | ... | @@ -1166,7 +1178,7 @@ static AstNode *trans_local_declaration(Context *c, AstNode *block, DeclStmt *st |
| 1166 | if (type_node == nullptr) | 1178 | if (type_node == nullptr) |
| 1167 | return nullptr; | 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 | buf_create_from_str(decl_name(var_decl)), type_node, init_node); | 1182 | buf_create_from_str(decl_name(var_decl)), type_node, init_node); |
| 1171 | block->data.block.statements.append(node); | 1183 | block->data.block.statements.append(node); |
| 1172 | continue; | 1184 | continue; |
| ... | @@ -2396,13 +2408,13 @@ static void visit_var_decl(Context *c, const VarDecl *var_decl) { | ... | @@ -2396,13 +2408,13 @@ static void visit_var_decl(Context *c, const VarDecl *var_decl) { |
| 2396 | init_node = trans_create_node_symbol_str(c, "undefined"); | 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 | c->root->data.root.top_level_decls.append(var_node); | 2412 | c->root->data.root.top_level_decls.append(var_node); |
| 2401 | return; | 2413 | return; |
| 2402 | } | 2414 | } |
| 2403 | | 2415 | |
| 2404 | if (is_extern) { | 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 | var_node->data.variable_declaration.is_extern = true; | 2418 | var_node->data.variable_declaration.is_extern = true; |
| 2407 | c->root->data.root.top_level_decls.append(var_node); | 2419 | c->root->data.root.top_level_decls.append(var_node); |
| 2408 | return; | 2420 | return; |