I've updated to the newest version of SpiderMonkey. That's the first upgrade, and to be fair, the API changed.
But it was small and simple changes.
I had to replace this
JS::RootedObject obj(ctx, JS_NewObjectWithGivenProto(ctx, &clazz, proto, global));
with this
JS::RootedObject obj(ctx, JS_NewObject(ctx, &clazz));
JS_SetPrototype(ctx, obj, proto);
SM's api, from a pure ABI standpoint, may change fairly constantly, but conceptually it certainly looks more stable than V8's.
***
I also have been working on WindowStyles. As with many of the old APIs, it's difficult to properly compare the performance of TurboSphere with Sphere 1.5, SphereSFML, or MiniSphere directly. The new API enforces caching by enforcing persistence of objects and state. In the Turbo runtime, drawing a WindowStyle no longer looks like this
// In the initialization
var window_style = LoadWindowStyle("windowstyle.rws");
// In the drawing loop...
window_style.drawWindow(16, 16, 128, 128);
Instead, it looks like this
// In the initialization
var window_style = new WindowStyle("windowstyle.rws");
var window = window_style.createWindow(16, 16, 128, 128);
// In the drawing loop...
window.draw();
The WindowStyle.createWindow() function generates a Group that contains the specified window, all cached into a new Surface and uploaded as an Image for convenience.
This is equivalent to drawing a WindowStyle to an Image and then only drawing that.