Example #1
0
 /// <summary>
 /// Initializes a new <see cref="RuntimeWrapperObj"/> bound to a <see cref="IAccessorVisitor"/>.
 /// </summary>
 /// <param name="v">The wrapped acess visitor.</param>
 public RuntimeWrapperObj(IAccessorVisitor v)
 {
     if (v == null)
     {
         throw new ArgumentNullException(nameof(v));
     }
     _value = v;
 }
Example #2
0
 public override Mutator AcceptExtract(IAccessorVisitor visitor)
 {
     return(visitor.Extract(this));
 }
Example #3
0
 public override Mutator AcceptAssignment(IAccessorVisitor visitor, Mutator value)
 {
     return(visitor.WithAssignment(this, value));
 }
Example #4
0
 public abstract Mutator AcceptExtract(IAccessorVisitor visitor);
Example #5
0
 public abstract Mutator AcceptAssignment(IAccessorVisitor visitor, Mutator value);
Example #6
0
 public override Mutator GetMutator(IAccessorVisitor visitor)
 {
     return(AcceptExtract(visitor));
 }
        /// <summary>
        /// Registers a external global object.
        /// </summary>
        /// <param name="name">
        /// Name of the object including an optional namespace prefix ("System.FileSystem.FileReader").
        /// Must be unique and none of its namespaces must be the same as as already registered object
        /// otherwise an exception is thrown.
        /// Must not ne null, empty, starts or ends with a dot nor contains double dots or space.
        /// </param>
        /// <param name="o">The object to register. Must not be null.</param>
        public void Register(string name, object o)
        {
            if (o == null)
            {
                throw new ArgumentNullException(nameof(o));
            }
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException(nameof(name));
            }
            if (name.IndexOfAny(_invalidNameChars) >= 0)
            {
                throw new ArgumentException("Invalid namespace (no white space, comma, parens allowed).", nameof(name));
            }

            var           nsName          = SplitNamespace(name);
            List <string> validNamespaces = null;

            if (!string.IsNullOrEmpty(nsName.Key))
            {
                validNamespaces = new List <string>();
                // Checks that none of the above parents are objects.
                string ns = nsName.Key;
                int    idx;
                for ( ; ;)
                {
                    if (_objects.ContainsKey(ns))
                    {
                        throw new ArgumentException($"Object '{nsName.Value}' cannot be registered in namespace '{nsName.Key}' since '{ns}' is already a registered object.", nameof(name));
                    }
                    validNamespaces.Add(ns);
                    idx = ns.LastIndexOf('.');
                    if (idx < 0)
                    {
                        break;
                    }
                    if (idx == 0 || idx == ns.Length - 1)
                    {
                        throw new ArgumentException("Invalid dots in namespace.", nameof(name));
                    }
                    ns = ns.Substring(0, idx);
                }
            }
            if (_namespaces.Contains(name))
            {
                throw new ArgumentException($"Object '{name}' is already registered as a namespace.", nameof(name));
            }
            var oR = o as RuntimeObj;

            if (oR == null)
            {
                IAccessorVisitor v = o as IAccessorVisitor;
                oR = v != null ? new RuntimeWrapperObj(v) : Create(o);
            }
            _objects.Add(name, oR);
            // Time to register the valid namespaces if any.
            if (validNamespaces != null)
            {
                foreach (var n in validNamespaces)
                {
                    _namespaces.Add(n);
                }
            }
        }
 /// <summary>
 /// Evaluate an accessor or just return a mutator
 /// </summary>
 /// <param name="visitor">The context for the evaluation</param>
 /// <returns></returns>
 public abstract Mutator GetMutator(IAccessorVisitor visitor);
Example #9
0
 public override Mutator GetMutator(IAccessorVisitor visitor)
 {
     return(this);
 }