public RCUserOperator(RCReference reference) { if (reference == null) { throw new ArgumentNullException("reference"); } _reference = reference; }
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); } }
public static void DoFormat(RCReference reference, StringBuilder builder, RCFormat args, RCColmap colmap, int level) { builder.Append("$"); builder.Append(reference.Name); }
/// <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); }
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); }
public void EvalEval(RCRunner runner, RCClosure closure, RCReference right) { DoEval(runner, closure, right); }
public static void DoEval(RCRunner runner, RCClosure closure, RCReference reference) { runner.Yield(closure, Resolve(reference._static, closure, reference.Parts, null)); }
public void EvalApply(RCRunner runner, RCClosure closure, RCReference left, object right) { RCClosure parent = UserOpClosure(closure, left, null, null, (RCValue)right); DoEval(runner, parent, left); }