diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-01-31 21:05:17 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-01-31 21:05:17 -0700 |
| commit | e74a7264ad3b221dfef0c959c1fdd6275f7c70ef (patch) | |
| tree | 915b1d379b4dbe803f89d26242ba1d876229a9fa /src/analyze.cpp | |
| parent | 954afe5d9a5ae634f7db22641ebac6e755cdaba7 (diff) | |
| download | zig-e74a7264ad3b221dfef0c959c1fdd6275f7c70ef.tar.gz zig-e74a7264ad3b221dfef0c959c1fdd6275f7c70ef.zip | |
support casting between int and float types
Diffstat (limited to 'src/analyze.cpp')
| -rw-r--r-- | src/analyze.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp index 756f12251e..785bad9ff2 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -3417,6 +3417,14 @@ static void eval_const_expr_implicit_cast(CodeGen *g, AstNode *node, AstNode *ex const_val->ok = true; break; } + case CastOpIntToFloat: + bignum_cast_to_float(&const_val->data.x_bignum, &other_val->data.x_bignum); + const_val->ok = true; + break; + case CastOpFloatToInt: + bignum_cast_to_int(&const_val->data.x_bignum, &other_val->data.x_bignum); + const_val->ok = true; + break; } } @@ -3478,6 +3486,24 @@ static TypeTableEntry *analyze_cast_expr(CodeGen *g, ImportTableEntry *import, B return wanted_type; } + // explicit cast from int to float + if (wanted_type->id == TypeTableEntryIdFloat && + actual_type->id == TypeTableEntryIdInt) + { + node->data.fn_call_expr.cast_op = CastOpIntToFloat; + eval_const_expr_implicit_cast(g, node, expr_node); + return wanted_type; + } + + // explicit cast from float to int + if (wanted_type->id == TypeTableEntryIdInt && + actual_type->id == TypeTableEntryIdFloat) + { + node->data.fn_call_expr.cast_op = CastOpFloatToInt; + eval_const_expr_implicit_cast(g, node, expr_node); + return wanted_type; + } + // explicit cast from fixed size array to unknown size array if (wanted_type->id == TypeTableEntryIdStruct && wanted_type->data.structure.is_unknown_size_array && |
