Commit 207862647c

Andrew Kelley <superjoe30@gmail.com>
2016-02-09 17:51:25
std: fix parse_u64 implementation and add test
also codegen implement comparision with pure errors
1 parent 1d92700
Changed files (4)
src/codegen.cpp
@@ -1269,6 +1269,9 @@ static LLVMValueRef gen_cmp_expr(CodeGen *g, AstNode *node) {
         } else {
             zig_unreachable();
         }
+    } else if (op1_type->id == TypeTableEntryIdPureError) {
+        LLVMIntPredicate pred = cmp_op_to_int_predicate(node->data.bin_op_expr.bin_op, false);
+        return LLVMBuildICmp(g->builder, pred, val1, val2, "");
     } else {
         zig_unreachable();
     }
std/std.zig
@@ -158,7 +158,7 @@ pub fn parse_u64(buf: []u8, radix: u8) -> %u64 {
     for (buf) |c| {
         const digit = char_to_digit(c);
 
-        if (digit > radix) {
+        if (digit >= radix) {
             return error.InvalidChar;
         }
 
@@ -342,3 +342,12 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize {
 
     len
 }
+
+#attribute("test")
+fn parse_u64_digit_too_big() {
+    parse_u64("123a", 10) %% |err| {
+        if (err == error.InvalidChar) return;
+        unreachable{};
+    };
+    unreachable{};
+}
test/self_hosted.zig
@@ -1,3 +1,5 @@
+import "test_std.zig";
+
 #attribute("test")
 fn empty_function() {}
 
test/test_std.zig
@@ -0,0 +1,1 @@
+import "std.zig";