public NamedVariableBinder(DynamicBindingGuru dynamicBindingGuru, ESSymbol name, NamespaceObject environment)
        {
            this.dynamicBindingGuru = dynamicBindingGuru;
            objectSpace             = dynamicBindingGuru.ObjectSpace;
            this.name        = name;
            this.environment = environment;

            if (name != null)
            {
                nameString = name.PrimitiveValue;
            }
            addToUndeclared =
                () =>
            { var bindingRef = objectSpace.newBindingReference(NameString, new DirectBindingHandle((Object)null));
              objectSpace.UndeclaredNamespace.add(bindingRef);
              return(bindingRef); };
        }
Exemple #2
0
        public NamedValueDeclaration atIfAbsent(ESSymbol name, Functor0 <NamedValueDeclaration> notFoundAction)
        {
            StackResidentDeclaration localDeclaration;

            if (localBindings.TryGetValue(name, out localDeclaration))
            {
                return(localDeclaration);
            }
            NonLocalVariableDeclaration nonLocalVariableDeclaration;

            if (nonLocalBindings != null && nonLocalBindings.TryGetValue(name, out nonLocalVariableDeclaration))
            {
                return(nonLocalVariableDeclaration);
            }
            if (outerScope == null)
            {
                return(notFoundAction == null ? null : notFoundAction());
            }
            return(outerScope.atIfAbsent(name, notFoundAction));
        }