示例#1
0
static knh_fieldn_t knh_getname(Ctx *ctx, knh_bytes_t n, knh_fieldn_t def)
{
	OLD_LOCK(ctx, LOCK_SYSTBL, NULL);
	knh_index_t idx = knh_DictCaseSet_index(DP(ctx->sys)->nameDictCaseSet, n);
	if(idx == -1) {
		if(def == FN_NEWID) {
			idx = knh_addname(ctx, new_S(ctx, n), knh_DictCaseSet_set);
		}
		else {
			idx = def - MN_OPSIZE;
		}
	}
	else {
		idx = knh_DictCaseSet_valueAt(DP(ctx->sys)->nameDictCaseSet, idx) - 1;
	}
	OLD_UNLOCK(ctx, LOCK_SYSTBL, NULL);
	return (knh_fieldn_t)idx + MN_OPSIZE;
}
示例#2
0
文件: system.c 项目: shidasan/konoha2
static ksymbol_t addSymbol(CTX, kbytes_t t)
{
	char symbuf[K_SYMBOL_MAXSIZ];
	size_t i, pos = 0;
	int toLower = isupper(t.buf[0]) ? 1 : 0;
	for(i = 0; i < t.len; i++) {
		int ch = t.buf[i];
		if(ch == '_') {
			toLower = 1; continue;
		}
		symbuf[pos] = (toLower) ? tolower(ch) : ch;
		toLower = 0;
		pos++;
		if(!(pos < sizeof(symbuf) - 2)) break;
	}
	symbuf[pos] = 0;
	return knh_addname(_ctx, new_kString((const char*)symbuf, pos, SPOL_ASCII|SPOL_POOL), knh_DictSet_set);
}