我编写了一个非常简单的程序,它使用 JavaScriptCore 来评估 JS:
#import <CoreFoundation/CoreFoundation.h>
#import <JavaScriptCore/JavaScriptCore.h>
int main(int argc, const char * argv[])
{
JSGlobalContextRef ctx = JSGlobalContextCreate(NULL);
FILE *f = fopen(argv[1],"r");
char * buffer = malloc(10000000);
fread(buffer,1,10000000,f);
CFStringRef strs = CFStringCreateWithCString(NULL, buffer, kCFStringEncodingASCII);
JSStringRef jsstr = JSStringCreateWithCFString(strs);
JSValueRef result = JSEvaluateScript(ctx, jsstr, NULL, NULL, 0, NULL);
double res = JSValueToNumber(ctx, result, NULL);
JSGlobalContextRelease(ctx);
printf("%lf\n", res);
return 0;
}
这里的想法是最后一个值应该是 a Number
,并且该值被打印出来。这适用于有效的 javascript 代码,例如
var square = function(x) { return x*x; }; square(4)
但是,如果代码尝试执行 a console.log
,则程序会出现段错误。JSC 中是否有可用的日志功能,还是我必须自己推出?