Commit 52b24d5725

Andrew Kelley <andrew@ziglang.org>
2020-11-30 02:02:13
stage1: add some code comments for ConstValSpecial
1 parent 3fb0cc0
Changed files (1)
src
src/stage1/all_types.hpp
@@ -338,9 +338,22 @@ struct ConstArgTuple {
 };
 
 enum ConstValSpecial {
+    // The value is only available at runtime. However there may be runtime hints
+    // narrowing the possible values down via the `data.rh_*` fields.
     ConstValSpecialRuntime,
+    // The value is comptime-known and resolved. The `data.x_*` fields can be
+    // accessed.
     ConstValSpecialStatic,
+    // The value is comptime-known to be `undefined`.
     ConstValSpecialUndef,
+    // The value is comptime-known, but not yet resolved. The lazy value system
+    // helps avoid dependency loops by providing answers to certain questions
+    // about values without forcing them to be resolved. For example, the
+    // equation `@sizeOf(Foo) == 0` can be resolved without forcing the struct
+    // layout of `Foo` because we can know whether `Foo` is zero bits without
+    // performing field layout.
+    // A `ZigValue` can be converted from Lazy to Static/Undef by calling the
+    // appropriate resolve function.
     ConstValSpecialLazy,
 };
 
@@ -484,6 +497,8 @@ struct LazyValueErrUnionType {
 
 struct ZigValue {
     ZigType *type;
+    // This field determines how the value is stored. It must be checked
+    // before accessing the `data` union.
     ConstValSpecial special;
     uint32_t llvm_align;
     ConstParent parent;