public static string AsString(NetRuby ruby, object x) { if (x == null) return String.Empty; if (x is string) return (string)x; if (x is RString) return x.ToString(); object o = ruby.Funcall(x, "to_s", null); return o.ToString(); }
static public RClass ClassNew(NetRuby ruby, RMetaObject spr, object[] o) { if (spr == null) { spr = ruby.cObject; } else if (spr is RSingletonClass) { throw new eTypeError("can't make subclass of virtual class"); } RClass klass = new RClass(ruby, spr); klass.klass = new RSingletonClass(spr.klass); klass.klass.AttachSingleton(klass); ruby.CallInit(klass, o); ruby.Funcall(spr, "inherited", new object[1] { klass }); return klass; }
// create new instance(INFECTED) RString public static RString AsRString(NetRuby ruby, object x) { if (x == null) return new RString(ruby, String.Empty); if (x is string) return new RString(ruby, (string)x, false); if (x is RString) return (RString)x; object o = ruby.Funcall(x, "to_s", null); if (o is string) return new RString(ruby, (string)o); if (o is RString) { RString r = (RString)o; if (x is RBasic && ((RBasic)x).IsTainted) r.Set(FL.TAINT); return r; } else if (o is RBasic) return ((RBasic)o).ToRString(); else return new RString(ruby, o.ToString()); }