var f = e.Thread.GetFrames () [0];
assert_location (e, "ss_recursive");
AssertValue (1, f.GetValue (f.Method.GetLocal ("n")));
+ req.Disable ();
+ // Check that single stepping doesn't clobber fp values
+ e = run_until ("ss_fp_clobber");
+ req = create_step (e);
+ while (true) {
+ f = e.Thread.GetFrames ()[0];
+ e = step_into ();
+ if ((e as StepEvent).Method.Name == "ss_fp_clobber_2")
+ break;
+ e = step_into ();
+ }
+ f = e.Thread.GetFrames ()[0];
+ AssertValue (7.0, f.GetValue (f.Method.GetParameters ()[0]));
req.Disable ();
}
StackFrame frame = e.Thread.GetFrames () [0];
var locals = frame.Method.GetLocals ();
- Assert.AreEqual (7, locals.Length);
- for (int i = 0; i < 7; ++i) {
+ Assert.AreEqual (8, locals.Length);
+ for (int i = 0; i < 8; ++i) {
if (locals [i].Name == "args") {
Assert.IsTrue (locals [i].IsArg);
Assert.AreEqual ("String[]", locals [i].Type.Name);
} else if (locals [i].Name == "rs") {
Assert.IsTrue (locals [i].IsArg);
Assert.AreEqual ("String", locals [i].Type.Name);
+ } else if (locals [i].Name == "astruct") {
} else {
Assert.Fail ();
}
v = this_obj.InvokeMethod (e.Thread, m, null);
AssertValue (42, v);
+#if NET_4_5
+ // instance
+ m = t.GetMethod ("invoke_pass_ref");
+ var task = this_obj.InvokeMethodAsync (e.Thread, m, new Value [] { vm.RootDomain.CreateString ("ABC") });
+ AssertValue ("ABC", task.Result);
+
+ // static
+ m = t.GetMethod ("invoke_static_pass_ref");
+ task = t.InvokeMethodAsync (e.Thread, m, new Value [] { vm.RootDomain.CreateString ("ABC") });
+ AssertValue ("ABC", task.Result);
+#endif
+
// Argument checking
// null thread
frame.SetValue (p, vm.RootDomain.CreateString ("DEF2"));
AssertValue ("DEF2", frame.GetValue (p));
+ // byref struct
+ p = frame.Method.GetParameters ()[4];
+ var v = frame.GetValue (p) as StructMirror;
+ v ["i"] = vm.CreateValue (43);
+ frame.SetValue (p, v);
+ v = frame.GetValue (p) as StructMirror;
+ AssertValue (43, v ["i"]);
+
// argument checking
// variable null