我用 JavaScript 编写了一个可移植的框架,我想在各种 JavaScript 解释器 shell 环境下运行一些性能测试。为了实现这一点,我需要能够将命令行参数 (argv) 传递给脚本上下文。默认情况下,Rhino 和 Spidermonkey 解释器已经这样做了,将脚本文件之后的所有参数公开为绑定到全局对象上的“参数”标识符的数组。最初我打算为 v8 示例 shell 以及 JavaScriptCore jsc shell 带来相同的功能,但我很快意识到这需要更多的努力,而且我真的只需要最后一个命令行参数即可运行我的测试。因此,我已经能够在 v8 中使用它,将 argv 中的最后一个 char* 元素转换为 v8::
不幸的是,我在用 JavaScriptCore 完成同样的事情时遇到了更多的麻烦。我找不到太多关于 JavaScriptCore C++ API 的文档,而且 JavaScriptCore jsc 解释器(在Source/JavaScriptCore/jsc.cpp 中)中的代码比 v8 示例 shell 中的代码更难理解。
具体来说,我会感谢任何可以帮助说明以下任务的资源(文档、教程、示例代码等):
- 从 char* 创建一个新的 JavaScriptCore JSString 实例
- 将 JSString 实例绑定到 GlobalObject 全局对象实例上的标识符。
我打算简单地修补 jsc.cpp 的函数 jscmain:
int jscmain(int argc, char** argv, JSGlobalData* globalData)
{
JSLock lock(SilenceAssertionsOnly);
Options options;
parseArguments(argc, argv, options, globalData);
GlobalObject* globalObject = GlobalObject::create(*globalData, GlobalObject::createStructure(*globalData, jsNull()), options.arguments);
//TODO: my patch would go here: create a new javascript string, and assign it to an identifier on globalObject instance
bool success = runWithScripts(globalObject, options.scripts, options.dump);
if (options.interactive && success)
runInteractive(globalObject);
return success ? 0 : 3;
}
我非常感谢任何人可以提供的任何指导。