[macruby-changes] [4542] MacRuby/trunk/sample-macruby/Scripts/javascript.rb

source_changes at macosforge.org source_changes at macosforge.org
Mon Sep 27 05:18:54 PDT 2010


Revision: 4542
          http://trac.macosforge.org/projects/ruby/changeset/4542
Author:   watson1978 at 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
   + *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100927/2a665740/attachment.html>


More information about the macruby-changes mailing list