예제 #1
0
파일: env.c 프로젝트: localchart/yasfs
OBJ lookup_variable_value(OBJ name,OBJ env)
{
	OBJ find;

	while(!nullp(env))
	{
		find = assq(name,env_frame(env));
		if(!nullp(find))
			return cdr(find);
		env = env_base(env);
	}
	if(find == OBJ_NULL)
		fprintf(stderr,"undefined variable:%s\n",obj_symbol_data(name));
	return OBJ_NULL;
}
예제 #2
0
파일: compile.c 프로젝트: localchart/yasfs
static OBJ analyze_variable_cell(OBJ variable,OBJ env,int macro,OBJ params,OBJ macro_expand_env)
{
	OBJ tmp;
	OBJ ret;
	if(macro)
	{
		tmp = assq(variable,params);
		if(nullp(tmp)) /* if variable isn't params of macro,lookup it at macro_define_env */
			ret = lookup_variable_cell(variable,env);
		else	/* otherwise lookup variable at macro_expand_env...ie,current env */
			ret = lookup_variable_cell(cdr(tmp),macro_expand_env);
	}
	else
		ret = lookup_variable_cell(variable, env);
	return ret;
}
예제 #3
0
파일: env.c 프로젝트: localchart/yasfs
OBJ define(OBJ name,OBJ value,OBJ env)
{
	OBJ find;

	find = assq(name,env_frame(env));
	if(find == OBJ_NULL)
	{
		find = cons(name,value);
		env_frame(env) = cons(find,env_frame(env));
	}
	else
	{
		cdr(find) = value;
	}
	return find;
}
예제 #4
0
파일: slibu.c 프로젝트: UlricE/SiagOffice
static long longfield(char *name,LISP alist)
{LISP value,key = rintern(name);
 if NULLP(value = assq(key,alist))
   return(0);
 return(get_c_long(cdr(value)));}
예제 #5
0
파일: slibu.c 프로젝트: UlricE/SiagOffice
static char *strfield(char *name,LISP alist)
{LISP value,key = rintern(name);
 if NULLP(value = assq(key,alist))
   return("");
 return(get_c_string(cdr(value)));}