示例#1
0
文件: getsym.c 项目: nrnhines/nrn
Psym *hoc_getsym(const char* cp) {
	Symbol *sp, *sym;
	Symlist *symlist = (Symlist *)0;
	Inst *last, *pcsav;
	int i, n;
	char s[256];
	Psym *p=0;

	Sprintf(s, "{%s}\n", cp);
	sp = hoc_install("", PROCEDURE, 0., &symlist);
	sp->u.u_proc->defn.in = STOP;
	sp->u.u_proc->list = (Symlist *)0;
	sp->u.u_proc->nauto = 0;
	n = hoc_xopen_run(sp, s);
	last = (Inst *)sp->u.u_proc->defn.in + n;
	if (n < 5 || last[-3].pf != hoc_eval) {
		hoc_execerror(s, " not a variable");
	}
	last[-3].in = STOP;	/*before doing last EVAL*/
	pcsav = hoc_pc;
	hoc_execute(sp->u.u_proc->defn.in);
	hoc_pc = pcsav;
	
	sym = hoc_spop();
	switch(sym->type) {
	case UNDEF:
		hoc_execerror(s, " is undefined");
	case VAR:
		if (ISARRAY(sym)) {
			Arrayinfo* a;
			if (sym->subtype == NOTUSER) {
				a = OPARINFO(sym);
			}else{
				a = sym->arayinfo;
			}
			p = (Psym *)emalloc((unsigned)(sizeof(Psym) +
				a->nsub));
			p->arayinfo = a;
			++a->refcount;
			p->nsub = a->nsub;
			for (i=p->nsub; i > 0;) {
				p->sub[--i] = hoc_xpop();
			}
		} else {
			p = (Psym *)emalloc(sizeof(Psym));
			p->arayinfo = 0;
			p->nsub = 0;
		}
		p->sym = sym;
		break;
	case AUTO:
		hoc_execerror(s, " is local variable");
	default:
		hoc_execerror(s, " not a variable");
	}
	hoc_free_list(&symlist);
	return p;	
}
示例#2
0
JNIEXPORT jdouble JNICALL Java_neuron_Neuron_hDoubleMethod__JJI
  (JNIEnv *env, jclass, jlong jc, jlong mid, jint narg){
	jnisave
	Object* ho = (Object*)jc;
	Symbol* s = (Symbol*)mid;
//printf("hDoubleMethod %s.%s with %d args\n", hoc_object_name(ho), s->name, narg);
	call_ob_proc(ho, s, narg);
	jnirestore
	return hoc_xpop();
}
示例#3
0
void ob_sec_access(void) {double hoc_xpop(); hoc_xpop();}
示例#4
0
文件: getsym.c 项目: nrnhines/nrn
double hoc_getsymval(Psym* p) {
	arayonstack(p);
	hoc_pushs(p->sym);
	hoc_eval();
	return hoc_xpop();
}