public override GraceObject Request(EvaluationContext ctx, MethodRequest req, GraceObject receiver) { var part = req[0]; var isAssign = false; if (req.Count > 1) { if (req[1].Name == ":=(_)") { part = req[1]; isAssign = true; } } object[] args = new object[part.Arguments.Count]; int i = 0; foreach (var a in part.Arguments) { var d = a as DomObject; var s = a as GraceString; if (d != null) { args[i++] = new int[1] { d.key } } ; else if (s != null) { args[i++] = s.Value; } else { args[i++] = a; } } // Request names include arities, which // the DOM doesn't understand. var name = req.Name; var idx = name.IndexOf('('); if (idx != -1) { name = name.Substring(0, idx); } if (isAssign) { return(sink.SendRPCNoResult(key, name, args)); } if (ignoredMethodResults != null) { if (ignoredMethodResults.Contains(name)) { return(sink.SendRPCNoResult(key, name, args)); } } var ret = sink.SendRPC(key, name, args); var gfo = ret as GraceForeignObject; if (gfo == null) { return(ret); } int okey = (int)gfo.IdentifyingData; return(new DomObject(okey, sink)); }