authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-04-16 20:59:48+02:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-04-19 11:50:30+02:00
log19b8278f91caaa25f05fe4dd7f51fdd1f0780e1e
treefd86b96ef2f05263f83f4361124fd0ba397313a4
parent6d95c5d15c93faf1ac2bed4059b9278f5a997654

translate-c: Convert char literals


1 files changed, 13 insertions(+), 1 deletions(-)

src/translate_c.cpp+13-1
...@@ -1334,6 +1334,17 @@ static AstNode *trans_floating_literal(Context *c, ResultUsed result_used, const...@@ -1334,6 +1334,17 @@ static AstNode *trans_floating_literal(Context *c, ResultUsed result_used, const
1334 return maybe_suppress_result(c, result_used, node);1334 return maybe_suppress_result(c, result_used, node);
1335}1335}
13361336
1337static AstNode *trans_character_literal(Context *c, ResultUsed result_used, const clang::CharacterLiteral *stmt) {
1338 clang::Expr::EvalResult result;
1339 if (!stmt->EvaluateAsInt(result, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
1340 emit_warning(c, bitcast(stmt->getBeginLoc()), "invalid character literal");
1341 return nullptr;
1342 }
1343 AstNode *node = trans_create_node(c, NodeTypeCharLiteral);
1344 node->data.char_literal.value = result.Val.getInt().getExtValue();
1345 return maybe_suppress_result(c, result_used, node);
1346}
1347
1337static AstNode *trans_constant_expr(Context *c, ResultUsed result_used, const clang::ConstantExpr *expr) {1348static AstNode *trans_constant_expr(Context *c, ResultUsed result_used, const clang::ConstantExpr *expr) {
1338 clang::Expr::EvalResult result;1349 clang::Expr::EvalResult result;
1339 if (!expr->EvaluateAsConstantExpr(result, clang::Expr::EvaluateForCodeGen,1350 if (!expr->EvaluateAsConstantExpr(result, clang::Expr::EvaluateForCodeGen,
...@@ -3531,7 +3542,8 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *s...@@ -3531,7 +3542,8 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *s
3531 emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCBridgedCastExprClass");3542 emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCBridgedCastExprClass");
3532 return ErrorUnexpected;3543 return ErrorUnexpected;
3533 case ZigClangStmt_CharacterLiteralClass:3544 case ZigClangStmt_CharacterLiteralClass:
3534 emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CharacterLiteralClass");3545 return wrap_stmt(out_node, out_child_scope, scope,
3546 trans_character_literal(c, result_used, (const clang::CharacterLiteral *)stmt));
3535 return ErrorUnexpected;3547 return ErrorUnexpected;
3536 case ZigClangStmt_ChooseExprClass:3548 case ZigClangStmt_ChooseExprClass:
3537 emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ChooseExprClass");3549 emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ChooseExprClass");