Пример #1
0
        public Object eval(Env env)
        {
            DynamicEnv olddenv = DynamicEnv.current();

            try
            {
                for (int i = 0; i < binds.Length; i++)
                {
                    DynamicEnv.extend(binds[i].dvar.sym,
                                      binds[i].expr.eval(env));
                }
                return(body.eval(env));
            }
            catch (BacktraceException bex)
            {
                throw bex;
            }
            catch (Exception ex)
            {
                throw BacktraceException.push(ex, new BacktraceFrame(loc, "set", null), interpreter);
            }
            finally
            {
                DynamicEnv.restore(olddenv);
            }
        }
 internal static void extend(Symbol sym, Object val)
 {
     if (!sym.isDynamic)
     {
         throw new Exception("Dynamic vars must have prefix *");
     }
     denv = new DynamicEnv(sym, val, denv);
 }
Пример #3
0
        public void setval(Object val, Env env)
        {
            DynamicEnv d = DynamicEnv.find(sym);

            if (d != null)
            {
                d.val = val;
            }
            sym.setGlobalValue(val);
        }
Пример #4
0
        public Object eval(Env env)
        {
            DynamicEnv d = DynamicEnv.find(sym);

            if (d != null)
            {
                return(d.val);
            }
            return(sym.getGlobalValue());
        }
 internal static DynamicEnv find(Symbol s)
 {
     for (DynamicEnv d = denv; d != null; d = d.next)
     {
         if (d.sym == s)
         {
             return(d);
         }
     }
     return(null);
 }
 private DynamicEnv(Symbol sym, Object val, DynamicEnv next)
 {
     this.sym  = sym;
     this.val  = val;
     this.next = next;
 }
 internal static void restore(DynamicEnv olddenv)
 {
     denv = olddenv;
 }
Пример #8
0
	private DynamicEnv(Symbol sym,Object val, DynamicEnv next)
		{
		this.sym = sym;
		this.val = val;
		this.next = next;
		}
Пример #9
0
	internal static void extend(Symbol sym, Object val)
		{
		if(!sym.isDynamic)
			throw new Exception("Dynamic vars must have prefix *");
		denv = new DynamicEnv(sym,val,denv);
		}
Пример #10
0
	internal static void restore(DynamicEnv olddenv)
		{
		denv = olddenv;
		}