diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-05-24 15:32:12 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-24 15:32:12 -0400 |
| commit | 60f0acd9b9c2bced47ba1c214460f34b73738f95 (patch) | |
| tree | 7cc1ba371eab54fb84d5f56a67c3dab0d035bf7a /src/codegen.zig | |
| parent | 8171972cbb477672ee1a99d953df4aaecb744a0c (diff) | |
| parent | 953e2778d4402cf85b99061ef9bdb89aa3e5f2db (diff) | |
| download | zig-60f0acd9b9c2bced47ba1c214460f34b73738f95.tar.gz zig-60f0acd9b9c2bced47ba1c214460f34b73738f95.zip | |
Merge pull request #11706 from ziglang/string-literal-interning
stage2: string literal interning
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index def69d952f..bd556baa5e 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -203,11 +203,23 @@ pub fn generateSymbol( }, .Array => switch (typed_value.val.tag()) { .bytes => { - const payload = typed_value.val.castTag(.bytes).?; + const bytes = typed_value.val.castTag(.bytes).?.data; const len = @intCast(usize, typed_value.ty.arrayLenIncludingSentinel()); // The bytes payload already includes the sentinel, if any try code.ensureUnusedCapacity(len); - code.appendSliceAssumeCapacity(payload.data[0..len]); + code.appendSliceAssumeCapacity(bytes[0..len]); + return Result{ .appended = {} }; + }, + .str_lit => { + const str_lit = typed_value.val.castTag(.str_lit).?.data; + const mod = bin_file.options.module.?; + const bytes = mod.string_literal_bytes.items[str_lit.index..][0..str_lit.len]; + try code.ensureUnusedCapacity(bytes.len + 1); + code.appendSliceAssumeCapacity(bytes); + if (typed_value.ty.sentinel()) |sent_val| { + const byte = @intCast(u8, sent_val.toUnsignedInt(target)); + code.appendAssumeCapacity(byte); + } return Result{ .appended = {} }; }, .aggregate => { |
