diff options
| author | mlugg <mlugg@mlugg.co.uk> | 2023-08-11 14:02:52 +0100 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-08-11 11:02:24 -0700 |
| commit | 5e0107fbce8f33f84af232c3edc912a81615175f (patch) | |
| tree | 1e937c9434b6502df9eff05a8175f8171985c936 /src/Module.zig | |
| parent | 8b9161179d08a3f1dc22ea61e6165a0c638bfae3 (diff) | |
| download | zig-5e0107fbce8f33f84af232c3edc912a81615175f.tar.gz zig-5e0107fbce8f33f84af232c3edc912a81615175f.zip | |
Sema: remove redundant addConstant functions
After ff37ccd, interned values are trivial to convert to Air refs, using
`Air.internedToRef`. This made functions like `Sema.addConstant` effectively
redundant. This commit removes `Sema.addConstant` and `Sema.addType`, replacing
them with direct usages of `Air.internedToRef`.
Additionally, a new helper `Module.undefValue` is added, and the following
functions are moved into Module:
* `Sema.addConstUndef` -> `Module.undefRef`
* `Sema.addUnsignedInt` -> `Module.intRef` (now also works for signed types)
The general pattern here is that any `Module.xyzValue` helper may also have a
corresponding `Module.xyzRef` helper, which just wraps the call in
`Air.internedToRef`.
Diffstat (limited to 'src/Module.zig')
| -rw-r--r-- | src/Module.zig | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/Module.zig b/src/Module.zig index 4a62fd07ca..06976ae49c 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -6612,6 +6612,14 @@ pub fn enumValueFieldIndex(mod: *Module, ty: Type, field_index: u32) Allocator.E } })).toValue(); } +pub fn undefValue(mod: *Module, ty: Type) Allocator.Error!Value { + return (try mod.intern(.{ .undef = ty.toIntern() })).toValue(); +} + +pub fn undefRef(mod: *Module, ty: Type) Allocator.Error!Air.Inst.Ref { + return Air.internedToRef((try mod.undefValue(ty)).toIntern()); +} + pub fn intValue(mod: *Module, ty: Type, x: anytype) Allocator.Error!Value { if (std.math.cast(u64, x)) |casted| return intValue_u64(mod, ty, casted); if (std.math.cast(i64, x)) |casted| return intValue_i64(mod, ty, casted); @@ -6620,6 +6628,10 @@ pub fn intValue(mod: *Module, ty: Type, x: anytype) Allocator.Error!Value { return intValue_big(mod, ty, big_int.toConst()); } +pub fn intRef(mod: *Module, ty: Type, x: anytype) Allocator.Error!Air.Inst.Ref { + return Air.internedToRef((try mod.intValue(ty, x)).toIntern()); +} + pub fn intValue_big(mod: *Module, ty: Type, x: BigIntConst) Allocator.Error!Value { const i = try intern(mod, .{ .int = .{ .ty = ty.toIntern(), |
