aboutsummaryrefslogtreecommitdiff
path: root/src/value.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-04-30 11:07:31 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-04-30 11:07:31 -0700
commit2d8d681b5ee34663aa87f0583f7b1a012b17d5b4 (patch)
treefefb28fbbdc9ab0c94c41a8609402077307ce024 /src/value.zig
parent5d696b0706de2ac267cb774ef39e0d81131d5c38 (diff)
downloadzig-2d8d681b5ee34663aa87f0583f7b1a012b17d5b4.tar.gz
zig-2d8d681b5ee34663aa87f0583f7b1a012b17d5b4.zip
stage2: un-tangle memory management of Decl and Namespace
Before there was this "top_decl" and "tmp_namespace" stack values that were kludgy and buggy. Now Sema is slightly reworked so that files which are structs are analyzed with their own Decl and Namespace already set up. After this commit there are no memory leaks for a successful build-obj.
Diffstat (limited to 'src/value.zig')
-rw-r--r--src/value.zig8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/value.zig b/src/value.zig
index d2d7be3007..04608878c0 100644
--- a/src/value.zig
+++ b/src/value.zig
@@ -593,6 +593,14 @@ pub const Value = extern union {
unreachable;
}
+ /// Returns null if not a type or if the type has no namespace.
+ pub fn getTypeNamespace(self: Value) ?*Module.Scope.Namespace {
+ return switch (self.tag()) {
+ .ty => self.castTag(.ty).?.data.getNamespace(),
+ else => null,
+ };
+ }
+
/// Asserts that the value is representable as a type.
pub fn toType(self: Value, allocator: *Allocator) !Type {
return switch (self.tag()) {