Revision
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

Diff

Added: MacRuby/trunk/sample-macruby/Scripts/javascript.rb (0 => 4542)


--- 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