// Bug 689101 - if the binary layout of jsval does not match between C and C++ // code, then calls to functions returning jsval may get compiled differently // than the callee, resulting in parameters being shifted over by one. // // An example is where on Windows, calling jsdValue.getWrappedValue() will // return a random floating point number instead of an object. // // This test must be run with debugging already enabled function run_test() { const Cc = Components.classes; const Ci = Components.interfaces; const DebuggerService = Cc["@mozilla.org/js/jsd/debugger-service;1"]; const jsdIDebuggerService = Ci.jsdIDebuggerService; var jsd = DebuggerService.getService(jsdIDebuggerService); do_check_true(jsd.isOn); var n = 0; function f() { n++; } jsd.enumerateScripts({ enumerateScript: function(script) { script.setBreakpoint(0); } }); jsd.breakpointHook = function(frame, type, dummy) { var scope = frame.scope; var parent = scope.jsParent; // Probably does not need to be called var wrapped = scope.getWrappedValue(); // Do not try to print 'wrapped'; it may be an internal Call object // that will crash when you toString it. Different bug. do_check_eq(typeof(wrapped), "object"); return Ci.jsdIExecutionHook.RETURN_CONTINUE; }; f(); jsd.breakpointHook = null; jsd = null; }