Commit 69b90e0681
Changed files (2)
src-self-hosted
src-self-hosted/clang.zig
@@ -965,3 +965,6 @@ pub extern fn ZigClangBinaryOperator_getOpcode(*const ZigClangBinaryOperator) Zi
pub extern fn ZigClangBinaryOperator_getBeginLoc(*const ZigClangBinaryOperator) ZigClangSourceLocation;
pub extern fn ZigClangBinaryOperator_getLHS(*const ZigClangBinaryOperator) *const ZigClangExpr;
pub extern fn ZigClangBinaryOperator_getRHS(*const ZigClangBinaryOperator) *const ZigClangExpr;
+
+pub extern fn ZigClangStringLiteral_getKind(*const ZigClangStringLiteral) ZigClangStringLiteral_StringKind;
+pub extern fn ZigClangStringLiteral_getString_bytes_begin_size(*const ZigClangStringLiteral, *usize) [*c]const u8;
src-self-hosted/translate_c.zig
@@ -336,6 +336,7 @@ fn transStmt(
.ImplicitCastExprClass => return transImplicitCastExpr(rp, scope, @ptrCast(*const ZigClangImplicitCastExpr, stmt), result_used),
.IntegerLiteralClass => return transIntegerLiteral(rp, scope, @ptrCast(*const ZigClangIntegerLiteral, stmt), result_used),
.ReturnStmtClass => return transReturnStmt(rp, scope, @ptrCast(*const ZigClangReturnStmt, stmt)),
+ .StringLiteralClass => return transStringLiteral(rp, scope, @ptrCast(*const ZigClangStringLiteral, stmt), result_used),
else => {
return revertAndWarn(
rp,
@@ -647,6 +648,41 @@ fn transReturnStmt(
};
}
+fn transStringLiteral(
+ rp: RestorePoint,
+ scope: *Scope,
+ stmt: *const ZigClangStringLiteral,
+ result_used: ResultUsed,
+) !TransResult {
+ const kind = ZigClangStringLiteral_getKind(stmt);
+ switch (kind) {
+ .Ascii, .UTF8 => {
+ var len: usize = undefined;
+ const cstr = ZigClangStringLiteral_getString_bytes_begin_size(stmt, &len);
+ const zstr = try rp.c.str(cstr);
+ const token = try appendToken(rp.c, .StringLiteral, zstr);
+ const node = try rp.c.a().create(ast.Node.StringLiteral);
+ node.* = ast.Node.StringLiteral{
+ .base = ast.Node{ .id = .StringLiteral },
+ .token = token,
+ };
+ const res = TransResult{
+ .node = &node.base,
+ .child_scope = scope,
+ .node_scope = scope,
+ };
+ return maybeSuppressResult(rp, scope, result_used, res);
+ },
+ .UTF16, .UTF32, .Wide => return revertAndWarn(
+ rp,
+ error.UnsupportedTranslation,
+ ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt)),
+ "TODO: support string literal kind {}",
+ kind,
+ ),
+ }
+}
+
fn transCCast(
rp: RestorePoint,
scope: *Scope,