authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-02-09 09:51:25-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-02-09 09:51:25-07:00
log207862647c00ef824a6dd43be0bfc69d844fc075
tree8410cf97d4bdcd5e240278eb19ed03461a720932
parent1d92700d089eb2e225d1db6de780e4288fa68452

std: fix parse_u64 implementation and add test

also codegen implement comparision with pure errors

4 files changed, 16 insertions(+), 1 deletions(-)

src/codegen.cpp+3
......@@ -1269,6 +1269,9 @@ static LLVMValueRef gen_cmp_expr(CodeGen *g, AstNode *node) {
12691269 } else {
12701270 zig_unreachable();
12711271 }
1272 } else if (op1_type->id == TypeTableEntryIdPureError) {
1273 LLVMIntPredicate pred = cmp_op_to_int_predicate(node->data.bin_op_expr.bin_op, false);
1274 return LLVMBuildICmp(g->builder, pred, val1, val2, "");
12721275 } else {
12731276 zig_unreachable();
12741277 }
std/std.zig+10-1
......@@ -158,7 +158,7 @@ pub fn parse_u64(buf: []u8, radix: u8) -> %u64 {
158158 for (buf) |c| {
159159 const digit = char_to_digit(c);
160160
161 if (digit > radix) {
161 if (digit >= radix) {
162162 return error.InvalidChar;
163163 }
164164
......@@ -342,3 +342,12 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {
342342
343343 len
344344}
345
346#attribute("test")
347fn parse_u64_digit_too_big() {
348 parse_u64("123a", 10) %% |err| {
349 if (err == error.InvalidChar) return;
350 unreachable{};
351 };
352 unreachable{};
353}
test/self_hosted.zig+2
......@@ -1,3 +1,5 @@
1import "test_std.zig";
2
13#attribute("test")
24fn empty_function() {}
35
test/test_std.zig created+1
......@@ -0,0 +1 @@
1import "std.zig";