Esempio n. 1
0
        public MalType Get(MalSymbol key)
        {
            if (DictHasSymbol(key))
            {
                return(_dict[key]);
            }

            if (_outer != null)
            {
                return(_outer.Get(key));
            }

            return(null);
        }
Esempio n. 2
0
        public MalType Apply(MalSymbol firstItem, MalList <MalType> restItems)
        {
            if (FuncsHasSymbol(firstItem))
            {
                return(_funcs[firstItem](restItems));
            }

            if (_outer != null)
            {
                return(_outer.Apply(firstItem, restItems));
            }

            return(null);
        }
Esempio n. 3
0
 internal MalType GetSymbol(MalSymbol symbol)
 {
     if (DictHasSymbol(symbol))
     {
         return(_dict[symbol]);
     }
     if (FuncsHasSymbol(symbol))
     {
         return(symbol);
     }
     if (_outer != null && _outer.HasSymbol(symbol))
     {
         return(_outer.GetSymbol(symbol));
     }
     throw new SymbolNotFoundException("attempted to Environment with invalid symbol", null);
 }
Esempio n. 4
0
 internal bool FuncsHasSymbol(MalSymbol symbol)
 {
     return(_funcs.ContainsKey(symbol));
 }
Esempio n. 5
0
 internal bool DictHasSymbol(MalSymbol symbol)
 {
     return(_dict.ContainsKey(symbol));
 }
Esempio n. 6
0
 internal bool HasSymbol(MalSymbol symbol)
 {
     return(DictHasSymbol(symbol) || FuncsHasSymbol(symbol) || (_outer != null && _outer.HasSymbol(symbol)));
 }
Esempio n. 7
0
 public MalType Set(MalSymbol key, MalType value)
 {
     _dict[key] = value;
     return(value);
 }