authorgravatar for codroid@gmail.comhryx <codroid@gmail.com> 2019-05-26 19:14:50-07:00
committergravatar for codroid@gmail.comhryx <codroid@gmail.com> 2019-05-26 19:14:50-07:00
log9c437f90327880a195f1090f726118a8f6742bc6
tree9bab051fbf9cbc1761626b97fcc0e88d1b733e85
parent1a8f8c6262e68ece9dedd875b9a20b619f73035f
signature Commit is signed but in an unrecognized format.

var decl: ImplicitCastExpr


4 files changed, 37 insertions(+), 9 deletions(-)

src-self-hosted/clang.zig+2
......@@ -878,3 +878,5 @@ pub const ZigClangVarDecl_TLSKind = extern enum {
878878 Static,
879879 Dynamic,
880880};
881
882pub extern fn ZigClangImplicitCastExpr_getCastKind(*const ZigClangImplicitCastExpr) ZigClangCK;
src-self-hosted/translate_c.zig+27-9
......@@ -324,6 +324,7 @@ fn transStmt(
324324 switch (sc) {
325325 .CompoundStmtClass => return transCompoundStmt(rp, scope, @ptrCast(*const ZigClangCompoundStmt, stmt)),
326326 .DeclStmtClass => return transDeclStmt(rp, scope, @ptrCast(*const ZigClangDeclStmt, stmt)),
327 .ImplicitCastExprClass => return transImplicitCastExpr(rp, scope, @ptrCast(*const ZigClangImplicitCastExpr, stmt)),
327328 else => {
328329 return revertAndWarn(
329330 rp,
......@@ -409,7 +410,7 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe
409410
410411 const eq_token = try appendToken(c, .Equal, "=");
411412 const init_node = if (ZigClangVarDecl_getInit(var_decl)) |expr|
412 (try transExpr(rp, scope, expr)).node
413 (try transExpr(rp, scope, expr, .used, .r_value)).node
413414 else
414415 null;
415416 const semicolon_token = try appendToken(c, .Semicolon, ";");
......@@ -423,7 +424,7 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe
423424 .name_token = name_token,
424425 .eq_token = eq_token,
425426 .mut_token = mut_token,
426 .comptime_token = null, // TODO IsConstexpr ?
427 .comptime_token = null,
427428 .extern_export_token = null, // TODO ?TokenIndex,
428429 .lib_name = null, // TODO ?*Node,
429430 .type_node = null, // TODO ?*Node,
......@@ -452,13 +453,30 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe
452453 };
453454}
454455
455fn transExpr(rp: RestorePoint, scope: *Scope, expr: *const ZigClangExpr) !TransResult {
456 return revertAndWarn(
457 rp,
458 error.UnsupportedTranslation,
459 ZigClangExpr_getBeginLoc(expr),
460 "TODO implement translation of Expr",
461 );
456fn transImplicitCastExpr(
457 rp: RestorePoint,
458 scope: *Scope,
459 expr: *const ZigClangImplicitCastExpr,
460) !TransResult {
461 switch (ZigClangImplicitCastExpr_getCastKind(@ptrCast(*const ZigClangImplicitCastExpr, expr))) {
462 else => |kind| return revertAndWarn(
463 rp,
464 error.UnsupportedTranslation,
465 ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, expr)),
466 "TODO implement translation of CastKind {}",
467 @tagName(kind),
468 ),
469 }
470}
471
472fn transExpr(
473 rp: RestorePoint,
474 scope: *Scope,
475 expr: *const ZigClangExpr,
476 used: ResultUsed,
477 lrvalue: LRValue,
478) TransError!TransResult {
479 return transStmt(rp, scope, @ptrCast(*const ZigClangStmt, expr), used, lrvalue);
462480}
463481
464482fn findBlockScope(inner: *Scope) *Scope.Block {
src/zig_clang.cpp+5
......@@ -1919,3 +1919,8 @@ const struct ZigClangStringLiteral *ZigClangPredefinedExpr_getFunctionName(
19191919 const clang::StringLiteral *result = casted->getFunctionName();
19201920 return reinterpret_cast<const struct ZigClangStringLiteral *>(result);
19211921}
1922
1923enum ZigClangCK ZigClangImplicitCastExpr_getCastKind(const struct ZigClangImplicitCastExpr *self) {
1924 auto casted = reinterpret_cast<const clang::CastExpr *>(self);
1925 return (ZigClangCK)casted->getCastKind();
1926}
src/zig_clang.h+3
......@@ -869,4 +869,7 @@ ZIG_EXTERN_C const char *ZigClangStringLiteral_getString_bytes_begin_size(const
869869
870870ZIG_EXTERN_C const struct ZigClangStringLiteral *ZigClangPredefinedExpr_getFunctionName(
871871 const struct ZigClangPredefinedExpr *self);
872
873ZIG_EXTERN_C enum ZigClangCK ZigClangImplicitCastExpr_getCastKind(const struct ZigClangImplicitCastExpr *);
874
872875#endif