コード例 #1
0
ファイル: Symbol.cs プロジェクト: nguerrera/scheme
        public static Symbol For(string value)
        {
            Symbol result;
            if (Symbol.table.TryGetValue(value, out result))
                return result;

            result = new Symbol(value);
            Symbol.table.Add(value, result);
            return result;
        }
コード例 #2
0
ファイル: SchemeEnvironment.cs プロジェクト: nguerrera/scheme
 public SchemeObject GetValue(Symbol key)
 {
     for (SchemeEnvironment env = this; env != null; env = env.parent)
     {
         SchemeObject value;
         if (env.dictionary.TryGetValue(key, out value))
             return value;
     }
     throw new InvalidSyntaxException();
 }
コード例 #3
0
ファイル: SchemeEnvironment.cs プロジェクト: nguerrera/scheme
        public void SetValue(Symbol key, SchemeObject value, bool isDefinition)
        {
            SchemeEnvironment env = this;
            if (!isDefinition)
            {
                for (; env != null; env = env.parent)
                    if (env.dictionary.ContainsKey(key))
                        break;

                if (env == null)
                    throw new InvalidSyntaxException();
            }
            env.dictionary[key] = value;
        }
コード例 #4
0
ファイル: SchemeEnvironment.cs プロジェクト: nguerrera/scheme
 public void Add(Symbol key, SchemeObject value)
 {
     this.dictionary[key] = value;
 }
コード例 #5
0
ファイル: Continuation.cs プロジェクト: nguerrera/scheme
 internal AssignmentContinuation(Symbol destination, bool isDefinition, SchemeEnvironment environment)
     : base(environment, ContinuationKind.Assignment)
 {
     this.Destination = destination;
     this.IsDefinition = isDefinition;
 }