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
signaturelock-open 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 {...@@ -878,3 +878,5 @@ pub const ZigClangVarDecl_TLSKind = extern enum {
878 Static,878 Static,
879 Dynamic,879 Dynamic,
880};880};
881
882pub extern fn ZigClangImplicitCastExpr_getCastKind(*const ZigClangImplicitCastExpr) ZigClangCK;
src-self-hosted/translate_c.zig+27-9
...@@ -324,6 +324,7 @@ fn transStmt(...@@ -324,6 +324,7 @@ fn transStmt(
324 switch (sc) {324 switch (sc) {
325 .CompoundStmtClass => return transCompoundStmt(rp, scope, @ptrCast(*const ZigClangCompoundStmt, stmt)),325 .CompoundStmtClass => return transCompoundStmt(rp, scope, @ptrCast(*const ZigClangCompoundStmt, stmt)),
326 .DeclStmtClass => return transDeclStmt(rp, scope, @ptrCast(*const ZigClangDeclStmt, stmt)),326 .DeclStmtClass => return transDeclStmt(rp, scope, @ptrCast(*const ZigClangDeclStmt, stmt)),
327 .ImplicitCastExprClass => return transImplicitCastExpr(rp, scope, @ptrCast(*const ZigClangImplicitCastExpr, stmt)),
327 else => {328 else => {
328 return revertAndWarn(329 return revertAndWarn(
329 rp,330 rp,
...@@ -409,7 +410,7 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe...@@ -409,7 +410,7 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe
409410
410 const eq_token = try appendToken(c, .Equal, "=");411 const eq_token = try appendToken(c, .Equal, "=");
411 const init_node = if (ZigClangVarDecl_getInit(var_decl)) |expr|412 const init_node = if (ZigClangVarDecl_getInit(var_decl)) |expr|
412 (try transExpr(rp, scope, expr)).node413 (try transExpr(rp, scope, expr, .used, .r_value)).node
413 else414 else
414 null;415 null;
415 const semicolon_token = try appendToken(c, .Semicolon, ";");416 const semicolon_token = try appendToken(c, .Semicolon, ";");
...@@ -423,7 +424,7 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe...@@ -423,7 +424,7 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe
423 .name_token = name_token,424 .name_token = name_token,
424 .eq_token = eq_token,425 .eq_token = eq_token,
425 .mut_token = mut_token,426 .mut_token = mut_token,
426 .comptime_token = null, // TODO IsConstexpr ?427 .comptime_token = null,
427 .extern_export_token = null, // TODO ?TokenIndex,428 .extern_export_token = null, // TODO ?TokenIndex,
428 .lib_name = null, // TODO ?*Node,429 .lib_name = null, // TODO ?*Node,
429 .type_node = null, // TODO ?*Node,430 .type_node = null, // TODO ?*Node,
...@@ -452,13 +453,30 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe...@@ -452,13 +453,30 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe
452 };453 };
453}454}
454455
455fn transExpr(rp: RestorePoint, scope: *Scope, expr: *const ZigClangExpr) !TransResult {456fn transImplicitCastExpr(
456 return revertAndWarn(457 rp: RestorePoint,
457 rp,458 scope: *Scope,
458 error.UnsupportedTranslation,459 expr: *const ZigClangImplicitCastExpr,
459 ZigClangExpr_getBeginLoc(expr),460) !TransResult {
460 "TODO implement translation of Expr",461 switch (ZigClangImplicitCastExpr_getCastKind(@ptrCast(*const ZigClangImplicitCastExpr, expr))) {
461 );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);
462}480}
463481
464fn findBlockScope(inner: *Scope) *Scope.Block {482fn findBlockScope(inner: *Scope) *Scope.Block {
src/zig_clang.cpp+5
...@@ -1919,3 +1919,8 @@ const struct ZigClangStringLiteral *ZigClangPredefinedExpr_getFunctionName(...@@ -1919,3 +1919,8 @@ const struct ZigClangStringLiteral *ZigClangPredefinedExpr_getFunctionName(
1919 const clang::StringLiteral *result = casted->getFunctionName();1919 const clang::StringLiteral *result = casted->getFunctionName();
1920 return reinterpret_cast<const struct ZigClangStringLiteral *>(result);1920 return reinterpret_cast<const struct ZigClangStringLiteral *>(result);
1921}1921}
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...@@ -869,4 +869,7 @@ ZIG_EXTERN_C const char *ZigClangStringLiteral_getString_bytes_begin_size(const
869869
870ZIG_EXTERN_C const struct ZigClangStringLiteral *ZigClangPredefinedExpr_getFunctionName(870ZIG_EXTERN_C const struct ZigClangStringLiteral *ZigClangPredefinedExpr_getFunctionName(
871 const struct ZigClangPredefinedExpr *self);871 const struct ZigClangPredefinedExpr *self);
872
873ZIG_EXTERN_C enum ZigClangCK ZigClangImplicitCastExpr_getCastKind(const struct ZigClangImplicitCastExpr *);
874
872#endif875#endif