Code Search for Developers
 
 
  

NameEnv.cs from p4shelf at Krugle


Show NameEnv.cs syntax highlighted

/* **********************************************************************************
 *
 * Copyright (c) Microsoft Corporation. All rights reserved.
 *
 * This source code is subject to terms and conditions of the Shared Source License
 * for IronPython. A copy of the license can be found in the License.html file
 * at the root of this distribution. If you can not locate the Shared Source License
 * for IronPython, please send an email to ironpy@microsoft.com.
 * By using this source code in any fashion, you are agreeing to be bound by
 * the terms of the Shared Source License for IronPython.
 *
 * You must not remove this notice, or any other, from this software.
 *
 * **********************************************************************************/

using System;
using System.Collections;
using System.Collections.Generic;

using IronPython.Compiler;
using IronPython.Runtime;
using IronPython.Runtime.Types;
using IronPython.Runtime.Calls;
using IronPython.Runtime.Operations;
using IronPython.Modules;

namespace IronPython.Compiler {
    public class NameEnvironment {
        private PythonModule globals;
        private object locals;
        private Dictionary<string, bool> globalNames = new Dictionary<string, bool>();
        private ReflectedType builtin;


        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "0#globals")]
        public NameEnvironment(PythonModule globals, object locals) {
            this.globals = globals;
            if (locals == null) locals = globals.__dict__;
            this.locals = locals;
            this.builtin = TypeCache.Builtin;
        }

        public PythonModule Globals {
            get { return globals; }
            set { globals = value; }
        }

        public void MarkGlobal(string name) {
            globalNames[name] = true;
        }

        public void Set(string name, object value) {
            if (globalNames.ContainsKey(name)) {
                globals.SetAttr(DefaultContext.Default, SymbolTable.StringToId(name), value);
            } else {
                Ops.SetIndex(locals, name, value);
            }
        }

        public object Get(string name) {
            try {
                return Ops.GetIndex(locals, name);
            } catch (KeyNotFoundException) {
            }

            SymbolId fieldId = SymbolTable.StringToId(name);
            object value;
            if (Ops.TryGetAttr(globals, fieldId, out value)) {
                return value;
            } else if (Ops.TryGetAttr(builtin, fieldId, out value)) {
                return value;
            } else return null;
        }
    }
}




See more files for this project here

p4shelf

A feature in Visual Studio Team Studio that was immediately appealing to me was shelving. The goal of this tool is replicate that general functionality in Perforce.

Project homepage: http://code.google.com/p/p4shelf/
Programming language(s): C#,C++,Python
License: gpl2

  AST/
    Binder.cs
    ClassDef.cs
    Expressions.cs
    FlowChecker.cs
    FuncDef.Generated.cs
    FuncDef.cs
    Node.cs
    Operator.Generated.cs
    Operator.cs
    ScopeStatement.Generated.cs
    ScopeStatement.cs
    Statements.cs
    Walker.Generated.cs
  Generation/
    AssemblyGen.cs
    CodeGen.cs
    EnvironmentFactory.cs
    EnvironmentNamespace.cs
    EnvironmentReference.cs
    Namespace.cs
    NewSubtypeMaker.cs
    NewTypeMaker.cs
    OutputGenerator.cs
    Slot.cs
    SlotFactory.cs
    TypeGen.cs
    UserTypeGenerator.cs
  CompiledModule.cs
  CompilerContext.cs
  CompilerHelpers.cs
  MethodBinder.cs
  MethodTracker.cs
  NameConverter.cs
  NameEnv.cs
  NewTypeInfo.cs
  Options.cs
  Parser.cs
  ParserSink.cs
  Token.cs
  TokenKind.Generated.cs
  Tokenizer.Generated.cs
  Tokenizer.cs