Ejemplo n.º 1
0
 public RCUserOperator(RCReference reference)
 {
     if (reference == null)
     {
         throw new ArgumentNullException("reference");
     }
     _reference = reference;
 }
Ejemplo n.º 2
0
 public static void WriteReference(RCArray <byte> result, RCReference reference)
 {
     result.Write((byte)'r');
     WriteScalarInt(result, reference.Parts.Count);
     for (int i = 0; i < reference.Parts.Count; ++i)
     {
         Binary.WriteScalarString(reference.Parts[i], result);
     }
 }
Ejemplo n.º 3
0
 public static void DoFormat(RCReference reference,
                             StringBuilder builder,
                             RCFormat args,
                             RCColmap colmap,
                             int level)
 {
     builder.Append("$");
     builder.Append(reference.Name);
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Find and return the value referenced by name. Return null if not found.
        /// </summary>
        public static RCValue Resolve(RCBlock context,
                                      RCClosure closure,
                                      RCArray <string> name,
                                      RCArray <RCBlock> @this,
                                      bool returnNull)
        {
            if (context != null)
            {
                RCValue result = context.Get(name, @this);
                if (result != null)
                {
                    return(result);
                }
            }
            RCClosure parent = closure;
            RCValue   val    = null;

            while (parent != null)
            {
                RCRefable result = parent.Result;
                if (result != null && !parent.NoResolve)
                {
                    val = result.Get(name, @this);
                }
                if (val != null)
                {
                    break;
                }
                if (!parent.NoClimb)
                {
                    parent = parent.Parent;
                }
                else
                {
                    break;
                }
            }
            if (val == null && !returnNull)
            {
                // Delimit thing is annoying.
                throw new RCException(closure,
                                      RCErrors.Name,
                                      "Unable to resolve name " + RCReference.Delimit(name, "."));
            }
            return(val);
        }
Ejemplo n.º 5
0
        public void EvalEval(RCRunner runner, RCClosure closure, RCBlock left, RCReference right)
        {
            RCClosure parent = UserOpClosure(closure, right, new RCArray <RCBlock> (left), noClimb: true);

            DoEval(runner, parent, right);
        }
Ejemplo n.º 6
0
 public void EvalEval(RCRunner runner, RCClosure closure, RCReference right)
 {
     DoEval(runner, closure, right);
 }
Ejemplo n.º 7
0
 public static void DoEval(RCRunner runner,
                           RCClosure closure,
                           RCReference reference)
 {
     runner.Yield(closure, Resolve(reference._static, closure, reference.Parts, null));
 }
Ejemplo n.º 8
0
        public void EvalApply(RCRunner runner, RCClosure closure, RCReference left, object right)
        {
            RCClosure parent = UserOpClosure(closure, left, null, null, (RCValue)right);

            DoEval(runner, parent, left);
        }