authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-11 22:58:06-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-11 22:58:06-04:00
log4bd23aefe7c96063b31433d26b7135b890996b02
tree4c14ee32fb0a3c041c382413cbac29d60081fe18
parent373785ae8d49d0ae3785020f05573763268ee9e1

local var


2 files changed, 21 insertions(+), 9 deletions(-)

src/parsec.cpp+19-7
...@@ -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}
190190
191static AstNode *trans_create_node_var_decl(Context *c, bool is_const, Buf *var_name, AstNode *type_node,191static 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}
202202
203static 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
209static 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
203215
204static AstNode *trans_create_node_inline_fn(Context *c, Buf *fn_name, Buf *var_name, AstNode *src_proto_node) {216static 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) {
268static AstNode *add_global_var(Context *c, Buf *var_name, AstNode *value_node) {280static 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;
11681180
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 }
23982410
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 }
24032415
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;
test/tests.zig+2-2
...@@ -776,7 +776,7 @@ pub const ParseCContext = struct {...@@ -776,7 +776,7 @@ pub const ParseCContext = struct {
776 });776 });
777 }777 }
778778
779 pub fn addExpectedError(self: &TestCase, text: []const u8) {779 pub fn addExpectedLine(self: &TestCase, text: []const u8) {
780 %%self.expected_lines.append(text);780 %%self.expected_lines.append(text);
781 }781 }
782 };782 };
...@@ -901,7 +901,7 @@ pub const ParseCContext = struct {...@@ -901,7 +901,7 @@ pub const ParseCContext = struct {
901 tc.addSourceFile("source.h", source);901 tc.addSourceFile("source.h", source);
902 comptime var arg_i = 0;902 comptime var arg_i = 0;
903 inline while (arg_i < expected_lines.len) : (arg_i += 1) {903 inline while (arg_i < expected_lines.len) : (arg_i += 1) {
904 tc.addExpectedError(expected_lines[arg_i]);904 tc.addExpectedLine(expected_lines[arg_i]);
905 }905 }
906 return tc;906 return tc;
907 }907 }