switched _ to . in a primitive method identifier

This commit is contained in:
hyunghwan.chung 2016-12-05 15:44:53 +00:00
parent b4a513cf40
commit 0cc0339158
9 changed files with 203 additions and 35 deletions

View File

@ -1,9 +1,9 @@
#class(#byte) Stdio(Object) from 'stdio' #class(#byte) Stdio(Object) from 'stdio'
{ {
#method(#class) _newInstSize ## #method(#class) _newInstSize
{ ## {
<primitive: #stdio_newInstSize> ## <primitive: #stdio._newInstSize>
} ## }
#method(#class) new: size #method(#class) new: size
{ {
@ -26,12 +26,12 @@
## #method open: name for: mode ## #method open: name for: mode
## { ## {
## <primitive: #stdio_open> ## <primitive: #stdio.open>
## } ## }
## #method close ## #method close
## { ## {
## <primitive: #stdio_close> ## <primitive: #stdio.close>
## } ## }
} }

View File

@ -2703,7 +2703,9 @@ static int compile_method_primitive (stix_t* stix)
{ {
/* /*
* method-primitive := "<" "primitive:" integer ">" | * method-primitive := "<" "primitive:" integer ">" |
* "<" "exception" ">" * "<" "primitive:" symbol ">" |
* "<" "exception" ">" |
* "<" "ensure" ">"
*/ */
stix_ooi_t pfnum; stix_ooi_t pfnum;
const stix_ooch_t* ptr, * end; const stix_ooch_t* ptr, * end;
@ -2752,8 +2754,10 @@ static int compile_method_primitive (stix_t* stix)
pfnum = stix_getpfnum (stix, tptr, tlen); pfnum = stix_getpfnum (stix, tptr, tlen);
if (pfnum <= -1) if (pfnum <= -1)
{ {
/* a built-in primitive function is not found
* check if it is a primitive function identifier */
#if 0
const stix_ooch_t* us; const stix_ooch_t* us;
/* the primitive function is not found */
us = stix_findoochar (tptr, tlen, '_'); us = stix_findoochar (tptr, tlen, '_');
if (us > tptr && us < tptr + tlen - 1) if (us > tptr && us < tptr + tlen - 1)
{ {
@ -2768,6 +2772,18 @@ static int compile_method_primitive (stix_t* stix)
break; break;
} }
} }
#else
stix_oow_t lit_idx;
if (add_symbol_literal(stix, TOKEN_NAME(stix), 1, &lit_idx) >= 0 &&
STIX_OOI_IN_METHOD_PREAMBLE_INDEX_RANGE(lit_idx))
{
stix->c->mth.pftype = 2; /* named primitive */
stix->c->mth.pfnum = lit_idx;
break;
}
#endif
/* wrong primitive number */ /* wrong primitive number */
set_syntax_error (stix, STIX_SYNERR_PFID, TOKEN_LOC(stix), TOKEN_NAME(stix)); set_syntax_error (stix, STIX_SYNERR_PFID, TOKEN_LOC(stix), TOKEN_NAME(stix));

View File

@ -2745,7 +2745,7 @@ int stix_getpfnum (stix_t* stix, const stix_ooch_t* ptr, stix_oow_t len)
for (i = 0; i < STIX_COUNTOF(pftab); i++) for (i = 0; i < STIX_COUNTOF(pftab); i++)
{ {
if (stix_compucxbcstr(ptr, len, pftab[i].name) == 0) if (stix_compucharsbcstr(ptr, len, pftab[i].name) == 0)
{ {
return i; return i;
} }

View File

@ -39,9 +39,10 @@ extern "C" {
# define stix_compoocbcstr(str1,str2) stix_compucbcstr(str1,str2) # define stix_compoocbcstr(str1,str2) stix_compucbcstr(str1,str2)
# define stix_compoocstr(str1,str2) stix_compucstr(str1,str2) # define stix_compoocstr(str1,str2) stix_compucstr(str1,str2)
# define stix_copyoochars(dst,src,len) stix_copyuchars(dst,src,len) # define stix_copyoochars(dst,src,len) stix_copyuchars(dst,src,len)
# define stix_copybchtooochars(dst,src,len) stix_copybchtouchars(dst,src,len) # define stix_copybctooochars(dst,src,len) stix_copybctouchars(dst,src,len)
# define stix_copyoocstr(dst,len,src) stix_copyucstr(dst,len,src) # define stix_copyoocstr(dst,len,src) stix_copyucstr(dst,len,src)
# define stix_findoochar(ptr,len,c) stix_finduchar(ptr,len,c) # define stix_findoochar(ptr,len,c) stix_finduchar(ptr,len,c)
# define stix_rfindoochar(ptr,len,c) stix_rfinduchar(ptr,len,c)
# define stix_countoocstr(str) stix_countucstr(str) # define stix_countoocstr(str) stix_countucstr(str)
#else #else
# define stix_hashchars(ptr,len) stix_hashbchars(ptr,len) # define stix_hashchars(ptr,len) stix_hashbchars(ptr,len)
@ -49,9 +50,10 @@ extern "C" {
# define stix_compoocbcstr(str1,str2) stix_compbcstr(str1,str2) # define stix_compoocbcstr(str1,str2) stix_compbcstr(str1,str2)
# define stix_compoocstr(str1,str2) stix_compbcstr(str1,str2) # define stix_compoocstr(str1,str2) stix_compbcstr(str1,str2)
# define stix_copyoochars(dst,src,len) stix_copybchars(dst,src,len) # define stix_copyoochars(dst,src,len) stix_copybchars(dst,src,len)
# define stix_copybchtooochars(dst,src,len) stix_copybchars(dst,src,len) # define stix_copybctooochars(dst,src,len) stix_copybchars(dst,src,len)
# define stix_copyoocstr(dst,len,src) stix_copybcstr(dst,len,src) # define stix_copyoocstr(dst,len,src) stix_copybcstr(dst,len,src)
# define stix_findoochar(ptr,len,c) stix_findbchar(ptr,len,c) # define stix_findoochar(ptr,len,c) stix_findbchar(ptr,len,c)
# define stix_rfindoochar(ptr,len,c) stix_rfindbchar(ptr,len,c)
# define stix_countoocstr(str) stix_countbcstr(str) # define stix_countoocstr(str) stix_countbcstr(str)
#endif #endif
@ -102,7 +104,7 @@ STIX_EXPORT int stix_compucbcstr (
const stix_bch_t* str2 const stix_bch_t* str2
); );
STIX_EXPORT int stix_compucxbcstr ( STIX_EXPORT int stix_compucharsbcstr (
const stix_uch_t* str1, const stix_uch_t* str1,
stix_oow_t len, stix_oow_t len,
const stix_bch_t* str2 const stix_bch_t* str2
@ -120,7 +122,7 @@ STIX_EXPORT void stix_copybchars (
stix_oow_t len stix_oow_t len
); );
STIX_EXPORT void stix_copybchtouchars ( STIX_EXPORT void stix_copybctouchars (
stix_uch_t* dst, stix_uch_t* dst,
const stix_bch_t* src, const stix_bch_t* src,
stix_oow_t len stix_oow_t len
@ -150,6 +152,19 @@ STIX_EXPORT stix_bch_t* stix_findbchar (
stix_bch_t c stix_bch_t c
); );
STIX_EXPORT stix_uch_t* stix_rfinduchar (
const stix_uch_t* ptr,
stix_oow_t len,
stix_uch_t c
);
STIX_EXPORT stix_bch_t* stix_rfindbchar (
const stix_bch_t* ptr,
stix_oow_t len,
stix_bch_t c
);
STIX_EXPORT stix_oow_t stix_countucstr ( STIX_EXPORT stix_oow_t stix_countucstr (
const stix_uch_t* str const stix_uch_t* str
); );
@ -158,6 +173,18 @@ STIX_EXPORT stix_oow_t stix_countbcstr (
const stix_bch_t* str const stix_bch_t* str
); );
STIX_EXPORT int stix_copyoocstrtosbuf (
stix_t* stix,
const stix_ooch_t* str,
int id
);
STIX_EXPORT int stix_concatoocstrtosbuf (
stix_t* stix,
const stix_ooch_t* str,
int id
);
STIX_EXPORT stix_cmgr_t* stix_getutf8cmgr ( STIX_EXPORT stix_cmgr_t* stix_getutf8cmgr (
void void
); );

View File

@ -137,6 +137,7 @@ static stix_rbt_walk_t unload_module (stix_rbt_t* rbt, stix_rbt_pair_t* pair, vo
void stix_fini (stix_t* stix) void stix_fini (stix_t* stix)
{ {
stix_cb_t* cb; stix_cb_t* cb;
stix_oow_t i;
if (stix->sem_list) if (stix->sem_list)
{ {
@ -176,6 +177,17 @@ void stix_fini (stix_t* stix)
/* deregister all callbacks */ /* deregister all callbacks */
while (stix->cblist) stix_deregcb (stix, stix->cblist); while (stix->cblist) stix_deregcb (stix, stix->cblist);
for (i = 0; i < STIX_COUNTOF(stix->sbuf); i++)
{
if (stix->sbuf[i].ptr)
{
stix_freemem (stix, stix->sbuf[i].ptr);
stix->sbuf[i].ptr = STIX_NULL;
stix->sbuf[i].len = 0;
stix->sbuf[i].capa = 0;
}
}
if (stix->log.ptr) if (stix->log.ptr)
{ {
/* make sure to flush your log message */ /* make sure to flush your log message */
@ -442,7 +454,7 @@ stix_mod_data_t* stix_openmod (stix_t* stix, const stix_ooch_t* name, stix_oow_t
stix_ooch_t buf[MOD_PREFIX_LEN + STIX_MOD_NAME_LEN_MAX + 1 + 1]; stix_ooch_t buf[MOD_PREFIX_LEN + STIX_MOD_NAME_LEN_MAX + 1 + 1];
/* the terminating null isn't needed in buf here */ /* the terminating null isn't needed in buf here */
stix_copybchtooochars (buf, MOD_PREFIX, MOD_PREFIX_LEN); stix_copybctooochars (buf, MOD_PREFIX, MOD_PREFIX_LEN);
if (namelen > STIX_COUNTOF(buf) - (MOD_PREFIX_LEN + 1 + 1)) if (namelen > STIX_COUNTOF(buf) - (MOD_PREFIX_LEN + 1 + 1))
{ {
@ -643,14 +655,14 @@ stix_pfimpl_t stix_querymod (stix_t* stix, const stix_ooch_t* pfid, stix_oow_t p
stix_oow_t mod_name_len; stix_oow_t mod_name_len;
stix_pfimpl_t handler; stix_pfimpl_t handler;
sep = stix_findoochar (pfid, pfidlen, '_'); sep = stix_findoochar (pfid, pfidlen, '.');
if (!sep) if (!sep)
{ {
/* i'm writing a conservative code here. the compiler should /* i'm writing a conservative code here. the compiler should
* guarantee that an underscore is included in an primitive identifer. * guarantee that an underscore is included in an primitive identifer.
* what if the compiler is broken? imagine a buggy compiler rewritten * what if the compiler is broken? imagine a buggy compiler rewritten
* in stix itself? */ * in stix itself? */
STIX_DEBUG2 (stix, "Internal error - no underscore in a primitive function identifier [%.*S] - buggy compiler?\n", pfidlen, pfid); STIX_DEBUG2 (stix, "Internal error - no period in a primitive function identifier [%.*S] - buggy compiler?\n", pfidlen, pfid);
stix->errnum = STIX_EINTERN; stix->errnum = STIX_EINTERN;
return STIX_NULL; return STIX_NULL;
} }
@ -694,9 +706,12 @@ int stix_genpfmethod (stix_t* stix, stix_mod_t* mod, stix_oop_t _class, stix_met
stix_oow_t tmp_count = 0, i; stix_oow_t tmp_count = 0, i;
stix_ooi_t arg_count = 0; stix_ooi_t arg_count = 0;
stix_oocs_t cs; stix_oocs_t cs;
static stix_ooch_t dot[] = { '.', '\0' };
STIX_ASSERT (STIX_CLASSOF(stix, _class) == stix->_class); STIX_ASSERT (STIX_CLASSOF(stix, _class) == stix->_class);
if (!pfname) pfname = mthname;
cls = (stix_oop_class_t)_class; cls = (stix_oop_class_t)_class;
stix_pushtmp (stix, (stix_oop_t*)&cls); tmp_count++; stix_pushtmp (stix, (stix_oop_t*)&cls); tmp_count++;
STIX_ASSERT (STIX_CLASSOF(stix, (stix_oop_t)cls->mthdic[type]) == stix->_method_dictionary); STIX_ASSERT (STIX_CLASSOF(stix, (stix_oop_t)cls->mthdic[type]) == stix->_method_dictionary);
@ -727,10 +742,22 @@ int stix_genpfmethod (stix_t* stix, stix_mod_t* mod, stix_oop_t _class, stix_met
if (!mnsym) goto oops; if (!mnsym) goto oops;
stix_pushtmp (stix, (stix_oop_t*)&mnsym); tmp_count++; stix_pushtmp (stix, (stix_oop_t*)&mnsym); tmp_count++;
/* TODO:... */ /* compose a full primitive function identifier to VM's string buffer.
/* pfid => mod->name + '_' + pfname */ * pfid => mod->name + '.' + pfname */
pfidsym = (stix_oop_char_t)stix_makesymbol (stix, pfname, stix_countoocstr(pfname)); if (stix_copyoocstrtosbuf(stix, mod->name, 0) <= -1 ||
if (!pfidsym) goto oops; stix_concatoocstrtosbuf(stix, dot, 0) <= -1 ||
stix_concatoocstrtosbuf(stix, pfname, 0) <= -1)
{
STIX_DEBUG2 (stix, "Cannot generate primitive function method [%S] in [%O] - VM memory shortage\n", mthname, cls->name);
return -1;
}
pfidsym = (stix_oop_char_t)stix_makesymbol (stix, stix->sbuf[0].ptr, stix->sbuf[0].len);
if (!pfidsym)
{
STIX_DEBUG2 (stix, "Cannot generate primitive function method [%S] in [%O] - symbol instantiation failure\n", mthname, cls->name);
goto oops;
}
stix_pushtmp (stix, (stix_oop_t*)&pfidsym); tmp_count++; stix_pushtmp (stix, (stix_oop_t*)&pfidsym); tmp_count++;
#if defined(STIX_USE_OBJECT_TRAILER) #if defined(STIX_USE_OBJECT_TRAILER)
@ -738,12 +765,16 @@ int stix_genpfmethod (stix_t* stix, stix_mod_t* mod, stix_oop_t _class, stix_met
#else #else
mth = (stix_oop_method_t)stix_instantiate (stix, stix->_method, STIX_NULL, 1); mth = (stix_oop_method_t)stix_instantiate (stix, stix->_method, STIX_NULL, 1);
#endif #endif
if (!mth) goto oops; if (!mth)
{
STIX_DEBUG2 (stix, "Cannot generate primitive function method [%S] in [%O] - method instantiation failure\n", mthname, cls->name);
goto oops;
}
/* store the primitive function name symbol to the literal frame */ /* store the primitive function name symbol to the literal frame */
mth->slot[0] = (stix_oop_t)pfidsym; mth->slot[0] = (stix_oop_t)pfidsym;
/* premable should contain the index to the literal frame - 0 */ /* premable should contain the index to the literal frame which is always 0 */
mth->owner = cls; mth->owner = cls;
mth->name = mnsym; mth->name = mnsym;
mth->preamble = STIX_SMOOI_TO_OOP(STIX_METHOD_MAKE_PREAMBLE(STIX_METHOD_PREAMBLE_NAMED_PRIMITIVE, 0)); mth->preamble = STIX_SMOOI_TO_OOP(STIX_METHOD_MAKE_PREAMBLE(STIX_METHOD_PREAMBLE_NAMED_PRIMITIVE, 0));
@ -751,12 +782,20 @@ int stix_genpfmethod (stix_t* stix, stix_mod_t* mod, stix_oop_t _class, stix_met
mth->preamble_data[1] = STIX_SMOOI_TO_OOP(0); mth->preamble_data[1] = STIX_SMOOI_TO_OOP(0);
mth->tmpr_count = STIX_SMOOI_TO_OOP(arg_count); mth->tmpr_count = STIX_SMOOI_TO_OOP(arg_count);
mth->tmpr_nargs = STIX_SMOOI_TO_OOP(arg_count); mth->tmpr_nargs = STIX_SMOOI_TO_OOP(arg_count);
stix_poptmps (stix, tmp_count); tmp_count = 0;
/* TODO: emit BCODE_RETURN_NIL ? */ /* TODO: emit BCODE_RETURN_NIL ? */
if (!stix_putatdic (stix, cls->mthdic[type], (stix_oop_t)mnsym, (stix_oop_t)mth)) goto oops; if (!stix_putatdic (stix, cls->mthdic[type], (stix_oop_t)mnsym, (stix_oop_t)mth))
{
STIX_DEBUG2 (stix, "Cannot generate primitive function method [%S] in [%O] - failed to add to method dictionary\n", mthname, cls->name);
goto oops;
}
STIX_DEBUG2 (stix, "Generated primitive function method [%S] in [%O]\n", mthname, cls->name);
stix_poptmps (stix, tmp_count); tmp_count = 0;
return 0; return 0;
oops: oops:

View File

@ -782,6 +782,14 @@ struct stix_mod_data_t
}; };
typedef struct stix_mod_data_t stix_mod_data_t; typedef struct stix_mod_data_t stix_mod_data_t;
struct stix_sbuf_t
{
stix_ooch_t* ptr;
stix_oow_t len;
stix_oow_t capa;
};
typedef struct stix_sbuf_t stix_sbuf_t;
/* ========================================================================= /* =========================================================================
* STIX VM * STIX VM
* ========================================================================= */ * ========================================================================= */
@ -912,6 +920,8 @@ struct stix_t
} rsrc; } rsrc;
/* == END RSRC MANAGEMENT == */ /* == END RSRC MANAGEMENT == */
stix_sbuf_t sbuf[64];
#if defined(STIX_INCLUDE_COMPILER) #if defined(STIX_INCLUDE_COMPILER)
stix_compiler_t* c; stix_compiler_t* c;
#endif #endif

View File

@ -175,7 +175,6 @@ stix_oop_t stix_makesymbol (stix_t* stix, const stix_ooch_t* ptr, stix_oow_t len
{ {
return find_or_make_symbol (stix, ptr, len, 1); return find_or_make_symbol (stix, ptr, len, 1);
} }
stix_oop_t stix_findsymbol (stix_t* stix, const stix_ooch_t* ptr, stix_oow_t len) stix_oop_t stix_findsymbol (stix_t* stix, const stix_ooch_t* ptr, stix_oow_t len)
{ {
return find_or_make_symbol (stix, ptr, len, 0); return find_or_make_symbol (stix, ptr, len, 0);

View File

@ -28,6 +28,12 @@
#define STIX_BCLEN_MAX 6 #define STIX_BCLEN_MAX 6
/* some naming conventions
* bchars, uchars -> pointer and length
* bcstr, ucstr -> null-terminated string pointer
* bctouchars -> bchars to uchars
*/
stix_oow_t stix_hashbytes (const stix_oob_t* ptr, stix_oow_t len) stix_oow_t stix_hashbytes (const stix_oob_t* ptr, stix_oow_t len)
{ {
stix_oow_t h = 0; stix_oow_t h = 0;
@ -101,7 +107,7 @@ int stix_compucbcstr (const stix_uch_t* str1, const stix_bch_t* str2)
return (*str1 > *str2)? 1: -1; return (*str1 > *str2)? 1: -1;
} }
int stix_compucxbcstr (const stix_uch_t* str1, stix_oow_t len, const stix_bch_t* str2) int stix_compucharsbcstr (const stix_uch_t* str1, stix_oow_t len, const stix_bch_t* str2)
{ {
const stix_uch_t* end = str1 + len; const stix_uch_t* end = str1 + len;
while (str1 < end && *str2 != '\0' && *str1 == *str2) str1++, str2++; while (str1 < end && *str2 != '\0' && *str1 == *str2) str1++, str2++;
@ -122,7 +128,7 @@ void stix_copybchars (stix_bch_t* dst, const stix_bch_t* src, stix_oow_t len)
for (i = 0; i < len; i++) dst[i] = src[i]; for (i = 0; i < len; i++) dst[i] = src[i];
} }
void stix_copybchtouchars (stix_uch_t* dst, const stix_bch_t* src, stix_oow_t len) void stix_copybctouchars (stix_uch_t* dst, const stix_bch_t* src, stix_oow_t len)
{ {
stix_oow_t i; stix_oow_t i;
for (i = 0; i < len; i++) dst[i] = src[i]; for (i = 0; i < len; i++) dst[i] = src[i];
@ -202,6 +208,73 @@ stix_bch_t* stix_findbchar (const stix_bch_t* ptr, stix_oow_t len, stix_bch_t c)
return STIX_NULL; return STIX_NULL;
} }
stix_uch_t* stix_rfinduchar (const stix_uch_t* ptr, stix_oow_t len, stix_uch_t c)
{
const stix_uch_t* cur;
cur = ptr + len;
while (cur > ptr)
{
--cur;
if (*cur == c) return (stix_uch_t*)cur;
}
return STIX_NULL;
}
stix_bch_t* stix_rfindbchar (const stix_bch_t* ptr, stix_oow_t len, stix_bch_t c)
{
const stix_bch_t* cur;
cur = ptr + len;
while (cur > ptr)
{
--cur;
if (*cur == c) return (stix_bch_t*)cur;
}
return STIX_NULL;
}
/* ----------------------------------------------------------------------- */
int stix_concatoocstrtosbuf (stix_t* stix, const stix_ooch_t* str, int id)
{
stix_sbuf_t* p;
stix_oow_t len;
p = &stix->sbuf[id];
len = stix_countoocstr (str);
if (len > p->capa - p->len)
{
stix_oow_t newcapa;
stix_ooch_t* tmp;
newcapa = STIX_ALIGN(p->len + len, 512); /* TODO: adjust this capacity */
/* +1 to handle line ending injection more easily */
tmp = stix_reallocmem (stix, p->ptr, (newcapa + 1) * STIX_SIZEOF(*tmp));
if (!tmp) return -1;
p->ptr = tmp;
p->capa = newcapa;
}
stix_copyoochars (&p->ptr[p->len], str, len);
p->len += len;
p->ptr[p->len] = '\0';
return 0;
}
int stix_copyoocstrtosbuf (stix_t* stix, const stix_ooch_t* str, int id)
{
stix->sbuf[id].len = 0;;
return stix_concatoocstrtosbuf (stix, str, id);
}
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */

View File

@ -116,29 +116,33 @@ static int pf_newinstsize (stix_t* stix, stix_ooi_t nargs)
typedef struct fnctab_t fnctab_t; typedef struct fnctab_t fnctab_t;
struct fnctab_t struct fnctab_t
{ {
const stix_bch_t* name; const stix_bch_t* mthname;
const stix_bch_t* pfname;
stix_pfimpl_t handler; stix_pfimpl_t handler;
}; };
static fnctab_t fnctab[] = static fnctab_t fnctab[] =
{ {
{ "close", pf_close }, { "_newInstSize", STIX_NULL, pf_newinstsize },
{ "newInstSize", pf_newinstsize }, { "close", STIX_NULL, pf_close },
{ "open", pf_open }, { "open:for:", STIX_NULL, pf_open },
{ "puts", pf_puts } { "puts", STIX_NULL, pf_puts }
}; };
static stix_ooch_t voca_open_for[] = { 'o','p','e','n',':','f','o','r',':','\0' }; static stix_ooch_t voca_open_for[] = { 'o','p','e','n',':','f','o','r',':','\0' };
static stix_ooch_t voca_open[] = { 'o','p','e','n','\0' }; static stix_ooch_t voca_open[] = { 'o','p','e','n','\0' };
static stix_ooch_t voca_close[] = { 'c','l','o','s','e','\0' }; static stix_ooch_t voca_close[] = { 'c','l','o','s','e','\0' };
static stix_ooch_t voca_newInstSize[] = { '_','n','e','w','I','n','s','t','S','i','z','e','\0' };
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
static int import (stix_t* stix, stix_mod_t* mod, stix_oop_t _class) static int import (stix_t* stix, stix_mod_t* mod, stix_oop_t _class)
{ {
stix_pushtmp (stix, &_class); stix_pushtmp (stix, &_class);
stix_genpfmethod (stix, mod, _class, STIX_METHOD_INSTANCE, voca_open_for, voca_open); stix_genpfmethod (stix, mod, _class, STIX_METHOD_CLASS, voca_newInstSize, STIX_NULL);
stix_genpfmethod (stix, mod, _class, STIX_METHOD_CLASS, voca_close, voca_close); stix_genpfmethod (stix, mod, _class, STIX_METHOD_INSTANCE, voca_open_for, STIX_NULL);
stix_genpfmethod (stix, mod, _class, STIX_METHOD_INSTANCE, voca_close, voca_close);
stix_poptmp (stix); stix_poptmp (stix);
return 0; return 0;
} }
@ -153,7 +157,7 @@ static stix_pfimpl_t query (stix_t* stix, stix_mod_t* mod, const stix_ooch_t* na
{ {
mid = (left + right) / 2; mid = (left + right) / 2;
n = stix_compoocbcstr (name, fnctab[mid].name); n = stix_compoocbcstr (name, fnctab[mid].mthname);
if (n < 0) right = mid - 1; if (n < 0) right = mid - 1;
else if (n > 0) left = mid + 1; else if (n > 0) left = mid + 1;
else else