bugfixes
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Fri, 1 Apr 2022 21:44:06 +0000 (16:44 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Fri, 1 Apr 2022 21:44:06 +0000 (16:44 -0500)
core/runtime/onyx_run.onyx
core/stdio.onyx
include/bh.h
src/checker.c

index c61a5ca84156452fff77798bf428bec9552cf7c4..d5f4961995245f4f820685f5d0ef35a267fdef9f 100644 (file)
@@ -17,6 +17,7 @@ __output_string :: (s: str) -> u32 {
 
 __read_from_input :: (buffer: [] u8) -> i32 {
     err, read := io.stream_read(^__stdin, buffer);
+    if err == .ReadPending do return 0;
     if err != .None do return -1;
     return read;
 }
index 6e7b19ff79172d1480f48ac556ee5ea44f2cd13a..e7af56a7f4cfd415c1496af8c15455ac2b18cd6b 100644 (file)
@@ -128,7 +128,8 @@ __flush_stdio :: () {
 #local stdin_vtable := io.Stream_Vtable.{
     read = (_: ^io.Stream, buffer: [] u8) -> (io.Error, u32) {
         bytes_read := runtime.__read_from_input(buffer);
-        if bytes_read <= 0 do return .EOF, 0;
+        if bytes_read == 0 do return .ReadPending, 0;
+        if bytes_read <  0 do return .EOF, 0;
 
         return .None, bytes_read;
     },
index 65276923c8b961b43568804f7c358908f59b4426..b187b96de7456ce6efc74eb506a2e789ee3331fc 100644 (file)
@@ -1471,6 +1471,13 @@ b32 bh_file_read_at(bh_file* file, i64 offset, void* buffer, isize buff_size, is
     else     return 0;
 
 #elif defined(_BH_LINUX)
+    if (file->fd == 0) {
+        isize res = read(file->fd, buffer, buff_size);
+        if (res < 0) return 0;
+        if (bytes_read) *bytes_read = res;
+        return 1;
+    }
+
     isize res = pread(file->fd, buffer, buff_size, offset);
     if (res < 0) return 0;
     if (bytes_read) *bytes_read = res;
index 7cc6f445fbcb4dc442ab3c7cf8011700d4468453..23e2389f0f21038c47da565e0b8d5b5a6bd9e0d6 100644 (file)
@@ -216,6 +216,7 @@ CheckStatus check_while(AstIfWhile* whilenode) {
 }
 
 CheckStatus check_for(AstFor* fornode) {
+    b32 old_inside_for_iterator;
     if (fornode->flags & Ast_Flag_Has_Been_Checked) goto fornode_expr_checked;
 
     CHECK(expression, &fornode->iter);