Changeset 3083

Show
Ignore:
Timestamp:
12/12/07 16:05:23 (5 years ago)
Author:
nshuyo
Message:

lang/javascript/jsruby: ensured javascript object wrapper

Location:
lang/javascript/jsruby/trunk
Files:
1 added
3 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/jsruby/trunk/src/builtinobjects.js

    r3046 r3083  
    2525  return undefined; 
    2626}; 
     27RubyEngine.RubyObject.js2r = function(obj){ 
     28  if (obj==undefined) return obj; 
     29  if (obj==null) return obj; // TODO: 
     30  var clzname = Object.prototype.toString.call(obj); 
     31  if (clzname == "[object String]") { 
     32    return new RubyEngine.RubyObject.String(obj); // string 
     33  } else if (typeof(obj)=="object" && ("length" in obj)) { 
     34    // like array (including collection) 
     35    var ary = [] 
     36    for (var i=0;i<obj.length;i++) ary.push(RubyEngine.RubyObject.js2r(obj[i])); 
     37    return ary 
     38  } else if (clzname == "[object Number]") { 
     39    return new RubyEngine.RubyObject.Numeric(obj); // number 
     40  } else if (clzname == "[object Boolean]") { 
     41    return obj; // TODO: boolean 
     42  } else { 
     43    return new RubyEngine.RubyObject.JSObject(obj); // others 
     44  } 
     45} 
    2746 
    2847 
     
    194213 "method_missing": function(self, args, block) { 
    195214    if (args.length==1) { 
    196       return new RubyEngine.RubyObject.JSObject(self.obj[args[0].str]); 
     215      return RubyEngine.RubyObject.js2r(self.obj[args[0].str]); 
    197216    } else { 
    198217      var jsargs = []; 
    199218      for (var i=1;i<args.length;i++) jsargs.push( args[i].toValue() ); 
    200       return new RubyEngine.RubyObject.JSObject(self.obj[args[0].str].apply(self.obj, jsargs)); 
     219      return RubyEngine.RubyObject.js2r(self.obj[args[0].str].apply(self.obj, jsargs)); 
    201220    } 
    202221 } 
  • lang/javascript/jsruby/trunk/src/parse.js

    r3082 r3083  
    147147        var prim = this.primary2(); 
    148148  while(prim != undefined) { 
    149     var y, z; 
     149    var y, z=null; 
    150150    var prebody = this.body; 
    151151 
     
    203203  // Args ( but only Method without arguments and block ) 
    204204  var y; 
    205   if (RubyEngine.Node.Method.prototype.isPrototypeOf(prim) && prim.args==null && prim.block==undefined && (y=this.args())!=undefined) prim.args = y; 
     205  if (RubyEngine.Node.Method.prototype.isPrototypeOf(prim) && prim.args==null && prim.block==undefined && (y=this.args())!=undefined) {console.log(y.toSource());prim.args = y;} 
    206206 
    207207  return prim; 
  • lang/javascript/jsruby/trunk/testsuite.html

    r2864 r3083  
    1313  newsuite.addTestPage('../tests/if.html'); 
    1414  newsuite.addTestPage('../tests/range.html'); 
     15  newsuite.addTestPage('../tests/jsobject.html'); 
    1516  return newsuite; 
    1617}