aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2018-02-22 17:53:58 +0100
committerBen Noordhuis <info@bnoordhuis.nl>2018-02-22 19:54:02 +0100
commit0845cbe27783486feb5b4b57b2839326a2c86a6b (patch)
treeb84792ffb976bdad957943043b86c515d8905ad4 /src/ir.cpp
parent884b5fb4cfa81fba863f24cf5c6d9d7c2a21d11f (diff)
downloadzig-0845cbe27783486feb5b4b57b2839326a2c86a6b.tar.gz
zig-0845cbe27783486feb5b4b57b2839326a2c86a6b.zip
name types inside functions after variable
Before this commit: fn f() []const u8 { const S = struct {}; return @typeName(S); // "f()", unexpected. } And now: fn f() []const u8 { const S = struct {}; return @typeName(S); // "S", expected. } Fixes #675.
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index 7eac9e4d23..b276abff33 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -4172,7 +4172,13 @@ static IrInstruction *ir_gen_var_decl(IrBuilder *irb, Scope *scope, AstNode *nod
buf_sprintf("cannot set section of local variable '%s'", buf_ptr(variable_declaration->symbol)));
}
+ // Temporarily set the name of the IrExecutable to the VariableDeclaration
+ // so that the struct or enum from the init expression inherits the name.
+ Buf *old_exec_name = irb->exec->name;
+ irb->exec->name = variable_declaration->symbol;
IrInstruction *init_value = ir_gen_node(irb, variable_declaration->expr, scope);
+ irb->exec->name = old_exec_name;
+
if (init_value == irb->codegen->invalid_instruction)
return init_value;