Я собрал очень простую программу, которая использует 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;
}
Идея здесь в том, что последним значением считается Number
, и это значение печатается. Это работает для действительного кода javascript, например
var square = function(x) { return x*x; }; square(4)
Однако, если код пытается выполнить console.log
, программа segfaults. Есть ли функция журнала, доступная в АО, или мне нужно сворачивать самостоятельно?