maxValue and minValue builtins return number literal

closes #170
This commit is contained in:
Andrew Kelley 2016-09-05 23:19:13 -04:00
parent cfaced3f73
commit 64034a3d1a
3 changed files with 18 additions and 4 deletions

View File

@ -4326,10 +4326,13 @@ static TypeTableEntry *analyze_min_max_value(CodeGen *g, ImportTableEntry *impor
if (type_entry->id == TypeTableEntryIdInvalid) {
return g->builtin_types.entry_invalid;
} else if (type_entry->id == TypeTableEntryIdInt ||
type_entry->id == TypeTableEntryIdFloat ||
type_entry->id == TypeTableEntryIdBool)
{
} else if (type_entry->id == TypeTableEntryIdInt) {
eval_min_max_value(g, type_entry, &get_resolved_expr(node)->const_val, is_max);
return g->builtin_types.entry_num_lit_int;
} else if (type_entry->id == TypeTableEntryIdFloat) {
eval_min_max_value(g, type_entry, &get_resolved_expr(node)->const_val, is_max);
return g->builtin_types.entry_num_lit_float;
} else if (type_entry->id == TypeTableEntryIdBool) {
eval_min_max_value(g, type_entry, &get_resolved_expr(node)->const_val, is_max);
return type_entry;
} else {

View File

@ -0,0 +1,10 @@
const assert = @import("std").debug.assert;
#attribute("test")
fn maxValueType() {
// If the type of @maxValue(i32) was i32 then this implicit cast to
// u32 would not work. But since the value is a number literal,
// it works fine.
const x: u32 = @maxValue(i32);
assert(x == 2147483647);
}

View File

@ -7,6 +7,7 @@ const test_return_type_type = @import("cases/return_type_type.zig");
const test_zeroes = @import("cases/zeroes.zig");
const test_sizeof_and_typeof = @import("cases/sizeof_and_typeof.zig");
const test_maybe_return = @import("cases/maybe_return.zig");
const test_max_value_type = @import("cases/max_value_type.zig");
// normal comment
/// this is a documentation comment