strings
This commit is contained in:
@@ -2617,6 +2617,9 @@ pub const CodeGen = struct {
|
||||
'0' => {
|
||||
result[j] = 0;
|
||||
},
|
||||
'`' => {
|
||||
result[j] = '`';
|
||||
},
|
||||
else => {
|
||||
result[j] = raw[i];
|
||||
},
|
||||
@@ -2648,10 +2651,10 @@ pub const CodeGen = struct {
|
||||
return c.LLVMConstInt(i1_type, if (lit.value) 1 else 0, 0);
|
||||
},
|
||||
.string_literal => |lit| {
|
||||
const unescaped = try unescapeString(self.allocator, lit.raw);
|
||||
const str_z = try self.allocator.dupeZ(u8, unescaped);
|
||||
const content = if (lit.is_raw) lit.raw else try unescapeString(self.allocator, lit.raw);
|
||||
const str_z = try self.allocator.dupeZ(u8, content);
|
||||
const ptr = c.LLVMBuildGlobalStringPtr(self.builder, str_z.ptr, "str");
|
||||
return self.buildStringSlice(ptr, @intCast(unescaped.len));
|
||||
return self.buildStringSlice(ptr, @intCast(content.len));
|
||||
},
|
||||
.identifier => |ident| {
|
||||
if (self.named_values.get(ident.name)) |entry| {
|
||||
@@ -3251,8 +3254,9 @@ pub const CodeGen = struct {
|
||||
|
||||
// String literal → pointer context: produce raw pointer directly (no {ptr, len} wrapping)
|
||||
if (node.data == .string_literal and target_ty.isPointer()) {
|
||||
const unescaped = try unescapeString(self.allocator, node.data.string_literal.raw);
|
||||
const str_z = try self.allocator.dupeZ(u8, unescaped);
|
||||
const lit = node.data.string_literal;
|
||||
const content = if (lit.is_raw) lit.raw else try unescapeString(self.allocator, lit.raw);
|
||||
const str_z = try self.allocator.dupeZ(u8, content);
|
||||
return c.LLVMBuildGlobalStringPtr(self.builder, str_z.ptr, "str");
|
||||
}
|
||||
|
||||
@@ -5329,13 +5333,14 @@ pub const CodeGen = struct {
|
||||
if (self.comptime_param_nodes) |cpn| {
|
||||
if (cpn.get(param.name)) |node| {
|
||||
if (node.data == .string_literal) {
|
||||
const raw = node.data.string_literal.raw;
|
||||
const inner = if (raw.len >= 2 and raw[0] == '"' and raw[raw.len - 1] == '"')
|
||||
const slit = node.data.string_literal;
|
||||
const raw = slit.raw;
|
||||
const inner = if (!slit.is_raw and raw.len >= 2 and raw[0] == '"' and raw[raw.len - 1] == '"')
|
||||
raw[1 .. raw.len - 1]
|
||||
else
|
||||
raw;
|
||||
const unescaped = try unescapeString(self.allocator, inner);
|
||||
const str_val = self.buildConstStr(unescaped);
|
||||
const content = if (slit.is_raw) inner else try unescapeString(self.allocator, inner);
|
||||
const str_val = self.buildConstStr(content);
|
||||
const param_name_z = try self.allocator.dupeZ(u8, param.name);
|
||||
const alloca = c.LLVMBuildAlloca(self.builder, self.getStringStructType(), param_name_z.ptr);
|
||||
_ = c.LLVMBuildStore(self.builder, str_val, alloca);
|
||||
|
||||
Reference in New Issue
Block a user