From fe18991a4e933550a39eebf696d0e0ad683639bb Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Mon, 8 Sep 2025 10:16:43 +0900 Subject: [PATCH] minor code fixes --- go/cb.go | 2 +- lib/comp.c | 28 +++++++++++++++++++++------- src/kernel.hak | 15 +++++++++++---- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/go/cb.go b/go/cb.go index b0ec507..e49dc71 100644 --- a/go/cb.go +++ b/go/cb.go @@ -253,7 +253,7 @@ func hak_go_udi_handler(c *C.hak_t, cmd C.hak_io_cmd_t, arg unsafe.Pointer) C.in g.set_errmsg(C.HAK_EIOERR, err.Error()) return -1 } - ioarg.xlen = C.ulong(n) + ioarg.xlen = C.hak_oow_t(n) return 0 } diff --git a/lib/comp.c b/lib/comp.c index 8572d60..c70cfe7 100644 --- a/lib/comp.c +++ b/lib/comp.c @@ -210,7 +210,7 @@ static int __find_word_in_string (const hak_oocs_t* haystack, const hak_oocs_t* static int add_temporary_variable (hak_t* hak, const hak_cnode_t* var, hak_oow_t dup_check_start, const hak_bch_t* desc, const hak_oocs_t* tgt) { hak_oocs_t s; - hak_oocs_t* name; + const hak_oocs_t* name; int x; name = HAK_CNODE_GET_TOK(var); @@ -299,7 +299,7 @@ static int add_class_level_variable (hak_t* hak, hak_oocsc_t* dst, hak_oocsc_t* { /* it downcasts hak_oocsc_t* to hak_oocs_t*. take extra care to keep their type defintion * compatible for downcasting in hak-cmn.h */ - hak_oocs_t* name; + const hak_oocs_t* name; name = HAK_CNODE_GET_TOK(var); if (__find_word_in_string((hak_oocs_t*)dst, name, 0, HAK_NULL) >= 0 || @@ -1608,6 +1608,20 @@ static int collect_vardcl_for_class (hak_t* hak, hak_cnode_t* obj, hak_cnode_t** } while (1); + /* remove leading spaces if any */ + while (vardcl->ivar_len > 0) + { + if (hak->c->tv.s.ptr[vardcl->ivar_start] != ' ') break; + vardcl->ivar_start++; + vardcl->ivar_len--; + } + while (vardcl->cvar_len > 0) + { + if (hak->c->tv.s.ptr[vardcl->cvar_start] != ' ') break; + vardcl->cvar_start++; + vardcl->cvar_len--; + } + HAK_ASSERT(hak, vardcl->nivars + vardcl->ncvars == hak->c->tv.wcount - tv_wcount_saved); *nextobj = HAK_CNODE_CONS_CDR(obj); @@ -3048,8 +3062,8 @@ static HAK_INLINE int compile_class_p2 (hak_t* hak) /* two placeholder instructions have been pushed before push_clsblk() * in compile_class_p1(). - * push_literal long-param long-param <-- (1) position of first long-param - * push_literal long-param long-param <-- (2) position of first long-param + * push_literal long-param long-param <-- (1) position of first long-param (extended long) + * push_literal long-param long-param <-- (2) position of first long-param (extended long) * class_enter ... <-- class_enter_inst_pos */ patch_pos = cbi->class_enter_inst_pos - (HAK_CODE_LONG_PARAM_SIZE * 4 + 1); /* (1) */ @@ -3078,7 +3092,7 @@ static HAK_INLINE int compile_class_p2 (hak_t* hak) if (cbi->ncvars > 0) { /* patch the PUSH_LITERAL instruction for cvars */ - /* TODO: reduce space waste for fixed double-long param */ + /* TODO: reduce space waste for fixed extended long param */ hak_oop_t obj; hak_oow_t index; @@ -3224,7 +3238,7 @@ static int compile_fun (hak_t* hak, hak_cnode_t* src) hak_ooi_t jump_inst_pos, lfsize_pos; hak_oow_t saved_tv_wcount, tv_dup_start; hak_cnode_t* fun_name; - hak_ooi_t fun_name_lfindex; + hak_oow_t fun_name_lfindex; hak_cnode_t* class_name; hak_cnode_t* attr_list; hak_cnode_t* arg_list; @@ -4398,7 +4412,7 @@ static HAK_INLINE int compile_catch (hak_t* hak) if (check_block_expression_as_body(hak, obj, cmd, FOR_NONE) <= -1) return -1; /* jump_inst_pos hold the instruction pointer that skips the catch block at the end of the try block */ - patch_nearest_post_try(hak, &jump_inst_pos); + if (patch_nearest_post_try(hak, &jump_inst_pos) <= -1) return -1; /* produce an instruction to store the exception value to an exception variable pushed by the 'throw' instruction */ if (emit_variable_access(hak, VAR_ACCESS_POP, &vi, HAK_CNODE_GET_LOC(src)) <= -1) return -1; diff --git a/src/kernel.hak b/src/kernel.hak index 8fbad55..7478cef 100644 --- a/src/kernel.hak +++ b/src/kernel.hak @@ -172,10 +172,12 @@ fun c() { ##try { printf ">>>>>>>>>>>>>>>\n" - fun j(){ - (c) - } - (j) + d := ((fun (x){ + printf "<<%d>>\n" x + c + }) 90) + ##(j) + (d 10) ##} catch (e) { printf "EXCEPTION: %O\n" e @@ -185,3 +187,8 @@ fun c() { ## printf "EXCEPTION-X: %O\n" e ## } ##} + + +## if the assigne operator is seen +## a := (fun (x) { }) +## a := fun (x) { } <<--- can I support this syntax??