Esempio n. 1
0
static struct kstr *kpool_insert(struct ymd_mach *vm, const char *z,
                                 int count) {
	struct kpool *kt = &vm->kpool;
	struct kstr *kz = kstr_new(vm, 1, z, count);
	struct gc_node **list;
	if (kt->used >= (1 << kt->shift))
		kpool_resize(vm, kt->shift + 1);
	list = kt->slot + kstr_hash(kz) % (1 << kt->shift);
	kz->next = *list;
	*list = gcx(kz);
	kt->used++;
	return kz;
}
Esempio n. 2
0
File: state.c Progetto: dongh11/ymd
struct variable *vm_mem(struct ymd_mach *vm, void *o, const char *field) {
	struct variable k, *v = NULL;
	switch (gcx(o)->type) {
	case T_HMAP:
		setv_kstr(&k, kstr_fetch(vm, field, -1));
		v = hmap_get(o, &k);
		break;
	case T_SKLS:
		setv_kstr(&k, kstr_fetch(vm, field, -1));
		v = skls_get(vm, o, &k);
		break;
	default:
		assert(!"No reached.");
		break;
	}
	return v;
}