26

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と、プログラムはセグメンテーション違反を起こします。JSC で利用できるログ機能はありますか、それとも自分でロールバックする必要がありますか?

4

5 に答える 5