diff options
| author | Robin Voetter <robin@voetter.nl> | 2021-10-18 01:00:07 +0200 |
|---|---|---|
| committer | Robin Voetter <robin@voetter.nl> | 2021-10-20 03:44:02 +0200 |
| commit | 05c5c99a95c894d7e3241e1729e09aa7eacb6035 (patch) | |
| tree | 4593305c8204570abf179c260574cf775862d49f /src/codegen/c.zig | |
| parent | e5d6fe18b90cf2602e7e7712b4dd807b4e243356 (diff) | |
| download | zig-05c5c99a95c894d7e3241e1729e09aa7eacb6035.tar.gz zig-05c5c99a95c894d7e3241e1729e09aa7eacb6035.zip | |
stage2: air ptr_slice_len_ptr and ptr_slice_ptr_ptr
Diffstat (limited to 'src/codegen/c.zig')
| -rw-r--r-- | src/codegen/c.zig | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig index ad98dc87c1..1bb337743d 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -1075,6 +1075,9 @@ fn genBody(f: *Function, body: []const Air.Inst.Index) error{ AnalysisFail, OutO .slice_ptr => try airSliceField(f, inst, ".ptr;\n"), .slice_len => try airSliceField(f, inst, ".len;\n"), + .ptr_slice_len_ptr => try airPtrSliceFieldPtr(f, inst, ".len;\n"), + .ptr_slice_ptr_ptr => try airPtrSliceFieldPtr(f, inst, ".ptr;\n"), + .ptr_elem_val => try airPtrElemVal(f, inst, "["), .ptr_ptr_elem_val => try airPtrElemVal(f, inst, "[0]["), .ptr_elem_ptr => try airPtrElemPtr(f, inst), @@ -1114,6 +1117,21 @@ fn airSliceField(f: *Function, inst: Air.Inst.Index, suffix: []const u8) !CValue return local; } +fn airPtrSliceFieldPtr(f: *Function, inst: Air.Inst.Index, suffix: []const u8) !CValue { + if (f.liveness.isUnused(inst)) + return CValue.none; + + const ty_op = f.air.instructions.items(.data)[inst].ty_op; + const operand = try f.resolveInst(ty_op.operand); + const writer = f.object.writer(); + + _ = writer; + _ = operand; + _ = suffix; + + return f.fail("TODO: C backend: airPtrSliceFieldPtr", .{}); +} + fn airPtrElemVal(f: *Function, inst: Air.Inst.Index, prefix: []const u8) !CValue { const is_volatile = false; // TODO if (!is_volatile and f.liveness.isUnused(inst)) |
