removed some unneeded code holding class-level variables
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
hyung-hwan 2024-10-19 14:15:18 +09:00
parent 0b65671adb
commit 001472fe4f
2 changed files with 48 additions and 90 deletions

View File

@ -241,16 +241,21 @@ static void kill_temporary_variable_at_offset (hcl_t* hcl, hcl_oow_t offset)
hcl->c->tv.s.ptr[offset] = '('; /* HACK!! put a special character which can't form a variable name */ hcl->c->tv.s.ptr[offset] = '('; /* HACK!! put a special character which can't form a variable name */
} }
static int init_class_level_variable_buffer (hcl_t* hcl, hcl_oocsc_t* dst) static int init_class_level_variable_buffer (hcl_t* hcl, hcl_oocsc_t* dst, const hcl_ooch_t* ivptr, hcl_oow_t ivlen)
{ {
hcl_ooch_t* tmp; hcl_ooch_t* tmp;
hcl_oow_t capa = 128;
tmp = (hcl_ooch_t*)hcl_allocmem(hcl, 1 * HCL_SIZEOF(*dst->ptr)); if (ivlen > capa) capa = ivlen;
tmp = (hcl_ooch_t*)hcl_allocmem(hcl, (capa + 1) * HCL_SIZEOF(*dst->ptr));
if (HCL_UNLIKELY(!tmp)) return -1; if (HCL_UNLIKELY(!tmp)) return -1;
dst->ptr = tmp; dst->ptr = tmp;
dst->len = 0; dst->len = ivlen;
dst->capa = 0; dst->capa = capa;
if (ivlen > 0) hcl_copy_oochars_to_oocstr(dst->ptr, dst->capa + 1, ivptr, ivlen);
return 0; return 0;
} }
@ -355,79 +360,62 @@ static int find_variable_backward_with_word (hcl_t* hcl, const hcl_oocs_t* name,
#endif #endif
cbi = &hcl->c->clsblk.info[fbi->clsblk_top]; cbi = &hcl->c->clsblk.info[fbi->clsblk_top];
#if 0 /* find the name in the instance variables */
if (cbi->ivars_str) haystack.ptr = cbi->ivars.ptr;
{ haystack.len = cbi->ivars.len;
haystack.ptr = cbi->ivars_str;
haystack.len = hcl_count_oocstr(cbi->ivars_str);
#else
haystack.ptr = cbi->ivars.ptr;
haystack.len = cbi->ivars.len;
#endif
if (__find_word_in_string(&haystack, name, 1, &index) >= 0)
{
hcl_oow_t fi;
if (i >= hcl->c->funblk.depth) if (__find_word_in_string(&haystack, name, 1, &index) >= 0)
{
hcl_oow_t fi;
if (i >= hcl->c->funblk.depth)
{
/* instance variables are accessible only in an instance method defintion scope.
* it is in class initialization scope */
hcl_setsynerrbfmt (hcl, HCL_SYNERR_BANNED, loc, name, "prohibited access to instance variable");
return -1;
}
for (fi = hcl->c->funblk.depth + 1; fi > i; ) /* TOOD: review this loop for correctness */
{
/* 'i' is the function level that holds the class defintion block. the check must not go past it */
if ((hcl->c->funblk.info[--fi].fun_type & 0xFF) == FUN_CM)
{ {
/* instance variables are accessible only in an instance method defintion scope. /* the function where this variable is defined is a class method or an plain function block within a class method*/
* it is in class initialization scope */ hcl_setsynerrbfmt (hcl, HCL_SYNERR_BANNED, loc, name, "prohibited access to instance variable in class method context");
hcl_setsynerrbfmt (hcl, HCL_SYNERR_BANNED, loc, name, "prohibited access to instance variable");
return -1; return -1;
} }
for (fi = hcl->c->funblk.depth + 1; fi > i; ) /* TOOD: review this loop for correctness */ /* instance methods and instantiation methods can access instance variables */
{ if ((hcl->c->funblk.info[fi].fun_type & 0xFF) != FUN_PLAIN) break;
/* 'i' is the function level that holds the class defintion block. the check must not go past it */ }
if ((hcl->c->funblk.info[--fi].fun_type & 0xFF) == FUN_CM)
{
/* the function where this variable is defined is a class method or an plain function block within a class method*/
hcl_setsynerrbfmt (hcl, HCL_SYNERR_BANNED, loc, name, "prohibited access to instance variable in class method context");
return -1;
}
/* instance methods and instantiation methods can access instance variables */ vi->type = VAR_INST;
if ((hcl->c->funblk.info[fi].fun_type & 0xFF) != FUN_PLAIN) break; vi->ctx_offset = 0;
} vi->index_in_ctx = index;
vi->type = VAR_INST;
vi->ctx_offset = 0;
vi->index_in_ctx = index;
/* /*
HCL_INFO6 (hcl, "FOUND INST VAR [%.*js]...[%.*js]................ ===> ctx_offset %d index %d\n", HCL_INFO6 (hcl, "FOUND INST VAR [%.*js]...[%.*js]................ ===> ctx_offset %d index %d\n",
haystack.len, haystack.ptr, name->len, name->ptr, (int)(vi->ctx_offset), (int)vi->index_in_ctx); haystack.len, haystack.ptr, name->len, name->ptr, (int)(vi->ctx_offset), (int)vi->index_in_ctx);
*/ */
return 1; return 1;
}
#if 0
} }
#endif
#if 0 /* find the name in the class variables */
if (cbi->cvars_str) haystack.ptr = cbi->cvars.ptr;
haystack.len = cbi->cvars.len;
if (__find_word_in_string(&haystack, name, 1, &index) >= 0)
{ {
haystack.ptr = cbi->cvars_str; /* TODO: VAR_CLASS_CM vs VAR_CLASS_IM, need to know if it's an instance method or a class method */
haystack.len = hcl_count_oocstr(cbi->cvars_str);
#else
haystack.ptr = cbi->cvars.ptr;
haystack.len = cbi->cvars.len;
#endif
if (__find_word_in_string(&haystack, name, 1, &index) >= 0)
{
/* TODO: VAR_CLASS_CM vs VAR_CLASS_IM, need to know if it's an instance method or a class method */
/* TODO: check if it's in the class variable .... */ /* TODO: check if it's in the class variable .... */
vi->type = (i >= hcl->c->funblk.depth? VAR_CLASS_I: VAR_CLASS_IM); vi->type = (i >= hcl->c->funblk.depth? VAR_CLASS_I: VAR_CLASS_IM);
vi->ctx_offset = 0; vi->ctx_offset = 0;
vi->index_in_ctx = index; vi->index_in_ctx = index;
/* /*
HCL_INFO6 (hcl, "FOUND CLASS VAR [%.*js]...[%.*js]................ ===> ctx_offset %d index %d\n", HCL_INFO6 (hcl, "FOUND CLASS VAR [%.*js]...[%.*js]................ ===> ctx_offset %d index %d\n",
haystack.len, haystack.ptr, name->len, name->ptr, (int)(vi->ctx_offset), (int)vi->index_in_ctx); haystack.len, haystack.ptr, name->len, name->ptr, (int)(vi->ctx_offset), (int)vi->index_in_ctx);
*/ */
return 1; return 1;
}
#if 0
} }
#endif
#if 0 #if 0
} }
@ -1123,25 +1111,8 @@ static int push_clsblk (
ci->nivars = nivars; ci->nivars = nivars;
ci->ncvars = ncvars; ci->ncvars = ncvars;
if (init_class_level_variable_buffer(hcl, &ci->ivars) <= -1) return -1; if (init_class_level_variable_buffer(hcl, &ci->ivars, ivars_str, ivars_strlen) <= -1) return -1;
if (init_class_level_variable_buffer(hcl, &ci->cvars) <= -1) return -1; if (init_class_level_variable_buffer(hcl, &ci->cvars, cvars_str, cvars_strlen) <= -1) return -1;
if (nivars > 0)
{
HCL_ASSERT (hcl, ivars_str != HCL_NULL);
ci->ivars_str = hcl_dupoochars(hcl, ivars_str, ivars_strlen);
if (HCL_UNLIKELY(!ci->ivars_str)) return -1;
}
if (ncvars > 0)
{
HCL_ASSERT (hcl, cvars_str != HCL_NULL);
ci->cvars_str = hcl_dupoochars(hcl, cvars_str, cvars_strlen);
if (HCL_UNLIKELY(!ci->cvars_str))
{
if (ci->ivars_str) hcl_freemem (hcl, ci->ivars_str);
return -1;
}
}
/* remember the function block depth before the class block is entered */ /* remember the function block depth before the class block is entered */
ci->funblk_base = hcl->c->funblk.depth; ci->funblk_base = hcl->c->funblk.depth;
@ -1178,17 +1149,6 @@ static void pop_clsblk (hcl_t* hcl)
} }
cbi = &hcl->c->clsblk.info[hcl->c->clsblk.depth]; cbi = &hcl->c->clsblk.info[hcl->c->clsblk.depth];
if (cbi->cvars_str)
{
hcl_freemem (hcl, cbi->cvars_str);
cbi->cvars_str = HCL_NULL;
}
if (cbi->ivars_str)
{
hcl_freemem (hcl, cbi->ivars_str);
cbi->ivars_str = HCL_NULL;
}
fini_class_level_variable_buffer (hcl, &cbi->ivars); fini_class_level_variable_buffer (hcl, &cbi->ivars);
fini_class_level_variable_buffer (hcl, &cbi->cvars); fini_class_level_variable_buffer (hcl, &cbi->cvars);
hcl->c->clsblk.depth--; hcl->c->clsblk.depth--;

View File

@ -746,8 +746,6 @@ struct hcl_clsblk_info_t
hcl_oow_t nivars; hcl_oow_t nivars;
hcl_oow_t ncvars; hcl_oow_t ncvars;
hcl_ooch_t* ivars_str;
hcl_ooch_t* cvars_str;
hcl_oow_t spec; /* TODO: byte indexed, word indexed? */ hcl_oow_t spec; /* TODO: byte indexed, word indexed? */
hcl_ooi_t funblk_base; hcl_ooi_t funblk_base;