From 813a028ed0c8b3387436d959b4faa924117edab2 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Mon, 17 Apr 2017 22:17:16 +0100 Subject: [PATCH] Fix procedure calls from non-regular addressing modes --- core/os_windows.odin | 6 ++++++ src/check_expr.c | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/core/os_windows.odin b/core/os_windows.odin index 84c8587ea..8d0d7f32e 100644 --- a/core/os_windows.odin +++ b/core/os_windows.odin @@ -110,6 +110,9 @@ close :: proc(fd: Handle) { } write :: proc(fd: Handle, data: []byte) -> (int, Errno) { + if len(data) == 0 { + return 0, ERROR_NONE; + } bytes_written: i32; e := win32.WriteFile(cast(win32.Handle)fd, ^data[0], cast(i32)len(data), ^bytes_written, nil); if e == win32.FALSE { @@ -120,6 +123,9 @@ write :: proc(fd: Handle, data: []byte) -> (int, Errno) { } read :: proc(fd: Handle, data: []byte) -> (int, Errno) { + if len(data) == 0 { + return 0, ERROR_NONE; + } bytes_read: i32; e := win32.ReadFile(cast(win32.Handle)fd, ^data[0], cast(u32)len(data), ^bytes_read, nil); if e == win32.FALSE { diff --git a/src/check_expr.c b/src/check_expr.c index e5c88d66a..a60193dae 100644 --- a/src/check_expr.c +++ b/src/check_expr.c @@ -4764,11 +4764,13 @@ ExprKind check_call_expr(Checker *c, Operand *operand, AstNode *call) { Type *proc_type = base_type(operand->type); if (operand->mode != Addressing_Overload) { bool valid_type = (proc_type != NULL) && is_type_proc(proc_type); - bool valid_mode = (operand->mode == Addressing_Value) || (operand->mode == Addressing_Variable); + bool valid_mode = is_operand_value(*operand); if (!valid_type || !valid_mode) { AstNode *e = operand->expr; gbString str = expr_to_string(e); - error_node(e, "Cannot call a non-procedure: `%s` %d", str, operand->mode); + gbString type_str = type_to_string(operand->type); + error_node(e, "Cannot call a non-procedure: `%s` of type `%s`", str, type_str); + gb_string_free(type_str); gb_string_free(str); operand->mode = Addressing_Invalid;