authorgravatar for codroid@gmail.comhryx <codroid@gmail.com> 2019-06-23 15:06:16-07:00
committergravatar for codroid@gmail.comhryx <codroid@gmail.com> 2019-06-23 15:06:16-07:00
log69b90e0681bb42980eeb8364e50686a1f9702eb5
treec717f2e9981f10b75c60dac5c3f81b368ffaf2a4
parentb2e06c3bf41669e02f07525bb483efedf2d77b95
signature Commit is signed but in an unrecognized format.

transStringLiteral


2 files changed, 39 insertions(+), 0 deletions(-)

src-self-hosted/clang.zig+3
......@@ -965,3 +965,6 @@ pub extern fn ZigClangBinaryOperator_getOpcode(*const ZigClangBinaryOperator) Zi
965965pub extern fn ZigClangBinaryOperator_getBeginLoc(*const ZigClangBinaryOperator) ZigClangSourceLocation;
966966pub extern fn ZigClangBinaryOperator_getLHS(*const ZigClangBinaryOperator) *const ZigClangExpr;
967967pub extern fn ZigClangBinaryOperator_getRHS(*const ZigClangBinaryOperator) *const ZigClangExpr;
968
969pub extern fn ZigClangStringLiteral_getKind(*const ZigClangStringLiteral) ZigClangStringLiteral_StringKind;
970pub extern fn ZigClangStringLiteral_getString_bytes_begin_size(*const ZigClangStringLiteral, *usize) [*c]const u8;
src-self-hosted/translate_c.zig+36
......@@ -336,6 +336,7 @@ fn transStmt(
336336 .ImplicitCastExprClass => return transImplicitCastExpr(rp, scope, @ptrCast(*const ZigClangImplicitCastExpr, stmt), result_used),
337337 .IntegerLiteralClass => return transIntegerLiteral(rp, scope, @ptrCast(*const ZigClangIntegerLiteral, stmt), result_used),
338338 .ReturnStmtClass => return transReturnStmt(rp, scope, @ptrCast(*const ZigClangReturnStmt, stmt)),
339 .StringLiteralClass => return transStringLiteral(rp, scope, @ptrCast(*const ZigClangStringLiteral, stmt), result_used),
339340 else => {
340341 return revertAndWarn(
341342 rp,
......@@ -647,6 +648,41 @@ fn transReturnStmt(
647648 };
648649}
649650
651fn transStringLiteral(
652 rp: RestorePoint,
653 scope: *Scope,
654 stmt: *const ZigClangStringLiteral,
655 result_used: ResultUsed,
656) !TransResult {
657 const kind = ZigClangStringLiteral_getKind(stmt);
658 switch (kind) {
659 .Ascii, .UTF8 => {
660 var len: usize = undefined;
661 const cstr = ZigClangStringLiteral_getString_bytes_begin_size(stmt, &len);
662 const zstr = try rp.c.str(cstr);
663 const token = try appendToken(rp.c, .StringLiteral, zstr);
664 const node = try rp.c.a().create(ast.Node.StringLiteral);
665 node.* = ast.Node.StringLiteral{
666 .base = ast.Node{ .id = .StringLiteral },
667 .token = token,
668 };
669 const res = TransResult{
670 .node = &node.base,
671 .child_scope = scope,
672 .node_scope = scope,
673 };
674 return maybeSuppressResult(rp, scope, result_used, res);
675 },
676 .UTF16, .UTF32, .Wide => return revertAndWarn(
677 rp,
678 error.UnsupportedTranslation,
679 ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt)),
680 "TODO: support string literal kind {}",
681 kind,
682 ),
683 }
684}
685
650686fn transCCast(
651687 rp: RestorePoint,
652688 scope: *Scope,