public override object Call0(Class last_class, object recv, Frame caller, Proc block) { ProcessStatus status = ((ProcessStatus)recv); System.Text.StringBuilder buf = new System.Text.StringBuilder(); buf.Append(string.Format(CultureInfo.InvariantCulture, "#<{0}: pid={1}", status.my_class._name, status.pid)); if (status.WIFSTOPPED()) { int stopsig = status.WSTOPSIG(); string signame = Signal.ruby_signal_name(stopsig); if (signame != null) buf.Append(string.Format(CultureInfo.InvariantCulture, ",stopped(SIG{0}={1})", signame, stopsig)); else buf.Append(string.Format(CultureInfo.InvariantCulture, ",stopped({0})", stopsig)); } if (status.WIFSIGNALED()) { int termsig = status.WTERMSIG(); string signame = Signal.ruby_signal_name(termsig); if (signame != null) buf.Append(string.Format(CultureInfo.InvariantCulture, ",signaled(SIG{0}={1})", signame, termsig)); else buf.Append(string.Format(CultureInfo.InvariantCulture, ",signaled({0})", termsig)); } if (status.WIFEXITED()) { buf.Append(string.Format(CultureInfo.InvariantCulture, ",exited({0})", status.WEXITSTATUS())); } buf.Append(">"); return new String(buf.ToString()); }
internal override object const_get(string name, bool recurse, Frame caller) { if (instance_vars.ContainsKey(name)) return instance_vars[name]; Class c = super; while (c != null) { if (c.instance_vars.ContainsKey(name)) return c.instance_vars[name]; c = c.super; } if (Init.rb_cClass.instance_vars.ContainsKey(name)) return Init.rb_cClass.instance_vars[name]; if (Init.rb_cModule.instance_vars.ContainsKey(name)) return Init.rb_cModule.instance_vars[name]; if (Init.rb_cObject.instance_vars.ContainsKey(name)) return Init.rb_cObject.instance_vars[name]; return Eval.CallPrivate(this, caller, "const_missing", null, new Symbol(name)); }
public override object Call0(Class last_class, object recv, Frame caller, Proc block) { Class klass0 = Class.CLASS_OF(recv); return klass0.class_real(); }
public override object Call(Class last_class, object recv, Frame caller, Proc block, Array rest) { if ((rest.Count == 0) || ((rest.Count == 0) && (rest.value[0].Equals(recv)))) return recv; return Eval.CallPrivate(rest.value[0], caller, "new", block, rest); }
internal static int Compare(object a, object b, Frame caller) //status: done { object value = Eval.CallPrivate(a, caller, "<=>", null, b); if (value == null) { throw new ArgumentError(string.Format(CultureInfo.InvariantCulture, "comparison of {0} with {1} failed", Class.rb_obj_classname(a), Class.rb_obj_classname(b))).raise(caller); } else if (value is int) { return (int)value; } else if (value is Bignum) { return ((Bignum)value).value >= 0 ? 1 : -1; } else if ((bool)Eval.CallPrivate(value, caller, ">", null, 0)) { return 1; } else if ((bool)Eval.CallPrivate(value, caller, "<", null, 0)) { return -1; } else { return 0; } }
internal static Float rb_Float(object o, Frame caller) { if (o is int) { return new Float((double)(int)o); } else if (o is double) { return new Float((double)o); } else if (o is Bignum) { return new Float((double)((Bignum)o).value); } else if (o is String) { return new Float(String.rb_str_to_dbl(caller, (String)o, true)); } else if (o == null) { throw new TypeError("cannot convert nil into Float").raise(caller); } else { Float f = Object.Convert<Float>(o, "to_f", caller); if (System.Double.IsNaN(f.value)) { throw new ArgumentError("invalid value for Float()").raise(caller); } else { return f; } } }
internal static int GETASTER(ref int t, ref int p, out int n, int end, string fmtString, ref int posArg, ref int nextArg, object nextValue, object tmp, Array argv, Frame caller) { t = p++; n = 0; for (; p < end && char.IsDigit(fmtString[p]); p++) { n = 10 * n + (fmtString[p] - '0'); } if (p >= end) { throw new ArgumentError("malformed format string - %*[0-9]").raise(caller); } if (fmtString[p] == '$') { tmp = GETPOSARG(caller, n, ref posArg, argv); } else { tmp = GETARG(caller, ref posArg, ref nextArg, nextValue, argv); p = t; } return Numeric.rb_num2long(tmp, caller); }
public override object Call(Class last_class, object recv, Frame caller, Proc block, Array rest) { object time, t; long seconds = 0; long uSeconds = 0; if (Class.rb_scan_args(caller, rest, 1, 1, false) == 2) { time = rest[0]; t = rest[1]; seconds = Numeric.rb_num2long(rest[0], caller); uSeconds = Numeric.rb_num2long(rest[1], caller); } else { time = rest[0]; Time.rb_time_timeval(rest[0], out seconds, out uSeconds, caller); } if (time is Time) { bool gmt = ((Time)time).gmt; t = Time.time_new_internal(seconds, uSeconds, gmt, caller); } else { t = Time.time_new_internal(seconds, uSeconds, false, caller); ((Time)t).value = ((Time)t).value.ToLocalTime(); } return t; }
public override object Call1(Class last_class, object recv, Frame caller, Proc block, object param0) { if (param0 is bool) return (bool)param0; return param0 != null; }
public override object Call0(Class last_class, object recv, Frame caller, Proc block) { // this functionality seems to be getting done in another method // could not find a testing sequence that made this fail. Although // Eval.getConst only calls it under certain circumstances. return Init.rb_cObject.get_constants(); }
// ------------------------------------------------------------- internal static void chmod_internal(string path, int mode, Frame caller) { if (chmod(path, mode) < 0) { throw SystemCallError.rb_sys_fail(path, new System.IO.IOException(), caller).raise(caller); } }
public override object Calln(Class last_class, object recv, Frame caller, ArgList args) { if (args.Length == 0) return Call1(last_class, recv, caller, args.block, 1); else return Call1(last_class, recv, caller, args.block, args[0]); }
internal override object getter(string id, Frame caller) { Match tilde; switch (aliased) { case "$&": tilde = caller.Tilde; if (tilde != null) return tilde.last_match(caller); else return null; case "$`": tilde = caller.Tilde; if (tilde != null) return tilde.match_pre(caller); else return null; case "$'": tilde = caller.Tilde; if (tilde != null) return tilde.match_post(caller); else return null; case "$+": tilde = caller.Tilde; if (tilde != null) return tilde.match_last(caller); else return null; default: break; } return Variables.gvar_get(aliased, caller); }
internal override void setter(string id, object val, Frame caller) { if ((val != null) && !(val is String)) throw new TypeError(string.Format(CultureInfo.InvariantCulture, "value of {0} must be String", id)).raise(caller); this.value = val; }
public override object Call(Class last_class, object str, Frame caller, Proc block, Array argv) { int argc = argv.Count; object result; if (argc < 1 || 2 < argc) { throw new ArgumentError(string.Format(CultureInfo.InvariantCulture, "wrong number of arguments ({0} for 1)", argc)).raise(caller); } Array buf = new Array(); int i; for (i = 0; i < argc; i++) { buf.Add(argv[i]); } result = rb_str_aref_m.singleton.Call(last_class, str, caller, null, buf); if (result != null) { buf.Add(new String()); rb_str_aset_m.singleton.Call(last_class, str, caller, null, buf); } return result; }
public override object Call1(Class last_class, object recv, Frame caller, Proc block, object p1) { string path = String.StringValue(p1, caller); Eval.rb_secure(2, caller); return new FileStat(path); }
public Frame(Frame caller) { this.caller = caller; // default visibility is private at toplevel if (caller == null) scope_vmode = Access.Private; }
public override object Call0(Class last_class, object recv, Frame caller, Proc block) { bool old = GC.dont_gc; GC.dont_gc = true; return old; }
public override object Call1(Class last_class, object recv, Frame caller, Proc block, object p1) { if (recv == p1) return true; else return Object.Equals(((ProcessStatus)recv).st, p1); }
public override object Call1(Class last_class, object recv, Frame caller, Proc block, object p1) { if (Numeric.random == null) rb_f_srand.singleton.Call0(last_class, recv, caller, null); int max; if (p1 == null) max = 0; else if (p1 is int) max = (int)p1; else if (p1 is Bignum) return rb_big_rand((Bignum)p1, Numeric.random.NextDouble()); else if (p1 is Float) { if (((Float)p1).value <= int.MaxValue && ((Float)p1).value >= int.MinValue) max = (int)((Float)p1).value; else return rb_big_rand(new Bignum(((Float)p1).value), Numeric.random.NextDouble()); } else { p1 = Integer.rb_Integer(p1, caller); if (p1 is Bignum) return rb_big_rand((Bignum)p1, Numeric.random.NextDouble()); max = (int)System.Math.Abs(Numeric.rb_num2long(p1, caller)); } if (max == 0) return new Float(Numeric.random.NextDouble()); else if (max < 0) max = -max; return (int)(max * Numeric.random.NextDouble()); }
public override object Call(Class klass, object recv, Frame caller, Proc block, Array rest) { int count = Class.rb_scan_args(caller, rest, 1, 1, false); if (block != null && count == 2) { Errors.rb_warn("block supersedes default value argument"); } object if_none = null; if (count == 2) if_none = rest[1]; string name = String.StringValue(rest[0], caller); string val = System.Environment.GetEnvironmentVariable(name); if (val == null) { if (block != null) return Proc.rb_yield(block, caller, rest[0]); if (if_none != null) return if_none; throw new IndexError("key not found").raise(caller); } else if (Env.PATH_ENV.Equals(name, System.StringComparison.OrdinalIgnoreCase) && !Env.rb_env_path_tainted()) return new String(val); else return Env.env_str_new2(caller, val); }
public override object Call1(Class last_class, object recv, Frame caller, Proc block, object p1) { Object.CheckType<Class>(caller, p1); Class.rb_define_singleton_method(p1, "induced_from", prec_induced_from.singleton, 1, caller); return recv; }
public override object Call0(Class last_class, object recv, Frame caller, Proc block) { if (Numeric.random == null) rb_f_srand.singleton.Call0(last_class, recv, caller, null); return new Float(Numeric.random.NextDouble()); }
public static object gvar_get(string gvar_name, Frame caller) { if (global_vars.ContainsKey(gvar_name)) return global_vars[gvar_name].getter(gvar_name, caller); else return null; }
internal static String env_str_new2(Frame caller, string str) { if (str == null) return null; else return env_str_new(caller, str); }
public override object Call0(Class last_class, object recv, Frame caller, Proc block) { Match md = (Match)recv; String str = new String(md.matched.Substring(0, md.value.Index)); if (md.Tainted) str.Tainted = true; return str; }
public override object Call1(Class last_class, object from, Frame caller, Proc block, object to) { if (from is int && to is int) { int end = (int)to; if (block == null) throw new LocalJumpError("no block given").raise(caller); for (int i = (int)from; i <= end; i++) Proc.rb_yield(block, caller, i); } else { object i = from; while (!(bool)Eval.CallPrivate(i, caller, ">", null, to)) { if (block == null) throw new LocalJumpError("no block given").raise(caller); Proc.rb_yield(block, caller, i); i = Eval.CallPrivate(i, caller, "+", null, 1); } } return from; }
internal static String env_str_new(Frame caller, string str) { String s = new String(str); s.Tainted = true; Object.rb_obj_freeze(caller, s); return s; }
internal static bool LT(object x, object y, Frame caller) { object result = Eval.CallPrivate(x, caller, "<=>", null, y); if (result is int) return 0 > (int)result; else return false; }
public override object Call1(Class last_class, object recv, Frame caller, Proc block, object param0) { String str = new String(((String)recv).value + String.StringValue(param0, caller)); if (((recv is Basic) && (((Basic)recv).Tainted)) || ((param0 is Basic) && (((Basic)param0).Tainted))) str.Tainted = true; return str; }