[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