Ejemplo n.º 1
0
ksymbol_t knh_getfnq(CTX, kbytes_t tname, ksymbol_t def)
{
	ksymbol_t mask = 0;
	kindex_t idx = knh_bytes_index(tname, ':');
	if(idx > 0) {
		tname = knh_bytes_first(tname, idx);
	}
	else if(knh_bytes_startsWith_(tname, STEXT("super."))) {
		mask = (def == FN_NONAME) ? 0 : KFLAG_FN_SUPER;
		tname = knh_bytes_last(tname, 6);
	}
	else if(!knh_bytes_endsWith_(tname, STEXT("__"))) {
		if(tname.utext[0] == '_' && def != FN_NONAME) {
			mask = KFLAG_FN_U1;
			tname = knh_bytes_last(tname, 1);
		}
		if(tname.utext[0] == '_' && def != FN_NONAME) {
			mask = KFLAG_FN_U2;
			tname = knh_bytes_last(tname, 1);
		}
		while(tname.utext[0] == '_') {
			tname = knh_bytes_last(tname, 1);
		}
	}
	return getSymbol(_ctx, tname, def) | mask;
}
Ejemplo n.º 2
0
void konoha_ginit(int argc, const char **argv)
{
	int n;
	stdlog = stderr;
	knh_syslog = pseudo_syslog;
	knh_vsyslog = pseudo_vsyslog;
	for(n = 1; n < argc; n++) {
		const char *t = argv[n];
		if(t[0] == '-' && (isalnum(t[1]) || t[1] == '-')) {
			knh_optdata_t *d = knh_getoptdata(t);
			int optnum = 1;              // default
			const char* optstr = NULL;   // default
			if(d == NULL) continue;
			if(d->type == OPT_NUMBER) {
				t += d->len;
				if(t[0] == '=') t++;
				if(isalnum(t[0])) {
					kint_t v = 0;
					knh_bytes_parseint(B((char*)t), &v);
					optnum = (int)v;
				}
			}
			else if(d->type == OPT_STRING) {
				t += d->len;
				if(t[0] == '=') {
					optstr = t + 1;
				}
				else if(t[0] != 0) {
					optstr = t;
				}
				else if(n + 1 < argc) {
					n++;
					optstr = argv[n];
					if(optstr[0] == '-') {
						n--; optstr = NULL;
					}
					if(knh_bytes_endsWith_(B(optstr), STEXT(".k"))) {
						break;
					}
				}
			}
			d->setopt(optnum, optstr);
			continue;
		}
	}
}