зеркало из https://github.com/mozilla/gecko-dev.git
43 строки
1.4 KiB
JavaScript
43 строки
1.4 KiB
JavaScript
// 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;
|
|
}
|