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
188188 return node;
189189}
190190
191static AstNode *trans_create_node_var_decl(Context *c, bool is_const, Buf *var_name, AstNode *type_node,
192 AstNode *init_node)
191static AstNode *trans_create_node_var_decl(Context *c, VisibMod visib_mod, bool is_const, Buf *var_name,
192 AstNode *type_node, AstNode *init_node)
193193{
194194 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;
196196 node->data.variable_declaration.symbol = var_name;
197197 node->data.variable_declaration.is_const = is_const;
198198 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
200200 return node;
201201}
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
204216static AstNode *trans_create_node_inline_fn(Context *c, Buf *fn_name, Buf *var_name, AstNode *src_proto_node) {
205217 AstNode *fn_def = trans_create_node(c, NodeTypeFnDef);
......@@ -268,7 +280,7 @@ static AstNode *get_global(Context *c, Buf *name) {
268280static AstNode *add_global_var(Context *c, Buf *var_name, AstNode *value_node) {
269281 bool is_const = true;
270282 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);
272284 c->root->data.root.top_level_decls.append(node);
273285 return node;
274286}
......@@ -1166,7 +1178,7 @@ static AstNode *trans_local_declaration(Context *c, AstNode *block, DeclStmt *st
11661178 if (type_node == nullptr)
11671179 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(),
11701182 buf_create_from_str(decl_name(var_decl)), type_node, init_node);
11711183 block->data.block.statements.append(node);
11721184 continue;
......@@ -2396,13 +2408,13 @@ static void visit_var_decl(Context *c, const VarDecl *var_decl) {
23962408 init_node = trans_create_node_symbol_str(c, "undefined");
23972409 }
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);
24002412 c->root->data.root.top_level_decls.append(var_node);
24012413 return;
24022414 }
24032415
24042416 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);
24062418 var_node->data.variable_declaration.is_extern = true;
24072419 c->root->data.root.top_level_decls.append(var_node);
24082420 return;
test/tests.zig+2-2
......@@ -776,7 +776,7 @@ pub const ParseCContext = struct {
776776 });
777777 }
778778
779 pub fn addExpectedError(self: &TestCase, text: []const u8) {
779 pub fn addExpectedLine(self: &TestCase, text: []const u8) {
780780 %%self.expected_lines.append(text);
781781 }
782782 };
......@@ -901,7 +901,7 @@ pub const ParseCContext = struct {
901901 tc.addSourceFile("source.h", source);
902902 comptime var arg_i = 0;
903903 inline while (arg_i < expected_lines.len) : (arg_i += 1) {
904 tc.addExpectedError(expected_lines[arg_i]);
904 tc.addExpectedLine(expected_lines[arg_i]);
905905 }
906906 return tc;
907907 }