Revision: 4542 http://trac.macosforge.org/projects/ruby/changeset/4542 Author: watson1978@gmail.com Date: 2010-09-27 05:18:53 -0700 (Mon, 27 Sep 2010) Log Message: ----------- Added the example that execute JavaScript. Added Paths: ----------- MacRuby/trunk/sample-macruby/Scripts/javascript.rb Added: MacRuby/trunk/sample-macruby/Scripts/javascript.rb =================================================================== --- MacRuby/trunk/sample-macruby/Scripts/javascript.rb (rev 0) +++ MacRuby/trunk/sample-macruby/Scripts/javascript.rb 2010-09-27 12:18:53 UTC (rev 4542) @@ -0,0 +1,68 @@ +#!/usr/local/bin/macruby +# -*- coding: utf-8 -*- +framework "JavaScriptCore" + +module JSC + module_function + + def eval(program) + kJSPropertyAttributeNone = 0 unless(kJSPropertyAttributeNone) + + callback = Proc.new do |ctx, obj, this, len, args, exp| + if(len > 0) + tmp = args.cast!('^{OpaqueJSValue=}') + string = JSValueToStringCopy(ctx, tmp[0], exp) + size = JSStringGetMaximumUTF8CStringSize(string) + buffer = Pointer.new('c', size) + ret = JSStringGetUTF8CString(string, buffer, size) + JSStringRelease(string) + + ary = [] + (ret - 1).times { |i| ary << buffer[i] } + puts ary.pack('c*') + end + nil + end + + ctx = JSGlobalContextCreate(nil) + global = JSContextGetGlobalObject(ctx) + + print = JSStringCreateWithUTF8CString("print") + print_f = JSObjectMakeFunctionWithCallback(ctx, print, callback) + JSObjectSetProperty(ctx, global, print, print_f, kJSPropertyAttributeNone, nil) + JSStringRelease(print) + + source = JSStringCreateWithUTF8CString(program) + exception = Pointer.new('^{OpaqueJSValue}') + + if(JSCheckScriptSyntax(ctx, source, nil, 0, exception)) + JSEvaluateScript(ctx, source, nil, nil, 0, exception) + else + raise "Syntax error." + end + + JSStringRelease(source) + JSGlobalContextRelease(ctx) + end +end + +if($0 == __FILE__) + program =<<EOS + var sum = 0; + + for(var i = 1; i <= 10; i++) { + sum += i; + } + print("sum : " + sum); + + function fib(n) { + if(n == 0) return 0; + if(n == 1) return 1; + return fib(n - 1) + fib(n - 2); + } + var ret = fib(7); + print("fib(7) : " + ret); +EOS + + JSC.eval(program) +end Property changes on: MacRuby/trunk/sample-macruby/Scripts/javascript.rb ___________________________________________________________________ Added: svn:executable + *