From 6db571e89606e4daed2292b75b0dcc6927bc1db0 Mon Sep 17 00:00:00 2001 From: "yukoba@accelart.jp" Date: Sun, 27 Jan 2008 12:48:23 +0000 Subject: [PATCH] Bug fix of String."+" git-svn-id: http://hotruby.googlecode.com/svn/trunk@33 4fb8041d-b042-0410-9571-f50be27af959 --- src/RubyNative.js | 5 +- test/compile.bat | 1 + test/super2/super2.js | 1 + test/super2/super2.rb | 21 ++ test/super2/super2_pretty.json | 435 +++++++++++++++++++++++++++++++++ web/js/HotRuby.js | 5 +- web/js/test/super2.js | 1 + web/test-local/super2.html | 9 + 8 files changed, 476 insertions(+), 2 deletions(-) create mode 100644 test/super2/super2.js create mode 100644 test/super2/super2.rb create mode 100644 test/super2/super2_pretty.json create mode 100644 web/js/test/super2.js create mode 100644 web/test-local/super2.html diff --git a/src/RubyNative.js b/src/RubyNative.js index 620faaa..b197f9b 100644 --- a/src/RubyNative.js +++ b/src/RubyNative.js @@ -229,7 +229,10 @@ HotRuby.prototype.classes = { "String" : { "+" : function(recver, args) { - return this.createRubyString(recver.__native + args[0].__native); + if(typeof(args[0]) == "object") + return this.createRubyString(recver.__native + args[0].__native); + else + return this.createRubyString(recver.__native + args[0]); }, "*" : function(recver, args) { diff --git a/test/compile.bat b/test/compile.bat index 702803a..49b2e92 100644 --- a/test/compile.bat +++ b/test/compile.bat @@ -7,5 +7,6 @@ goto end :main ruby compile.rb %1\%1.rb -o %1\%1.js -p %1\%1_pretty.json +copy %1\%1.js ..\web\js\test :end diff --git a/test/super2/super2.js b/test/super2/super2.js new file mode 100644 index 0000000..ddaaa34 --- /dev/null +++ b/test/super2/super2.js @@ -0,0 +1 @@ +var src = ["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":5},"
","super2\\super2.rb","top",[],0,[],[1,["putnil"],["putnil"],["defineclass","Pi",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":1},"","super2\\super2.rb","class",[],0,[],[2,["putnil"],["definemethod","initialize",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":2,"local_size":3,"stack_max":2},"initialize","super2\\super2.rb","method",["hoge","hoge2"],2,[],[3,["putobject",352.0],["getlocal",3],["send","+",1,null,0,null],["getlocal",2],["send","+",1,null,0,null],["setinstancevariable","@a"],4,["putobject",3],["dup"],["setclassvariable","@@c"],["leave"]]],0],6,["putnil"],["definemethod","getA",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":1},"getA","super2\\super2.rb","method",[],0,[],[7,["getinstancevariable","@a"],["leave"]]],0],["putnil"],["leave"]]],0],["pop"],11,["putnil"],["putnil"],["getconstant","Pi"],["defineclass","Pi2",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":1},"","super2\\super2.rb","class",[],0,[],[12,["putnil"],["definemethod","initialize",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":2,"local_size":3,"stack_max":3},"initialize","super2\\super2.rb","method",["hoge","hoge2"],2,[],[13,["putobject",false],["getlocal",3],["getlocal",2],["invokesuper",2,null,0],["pop"],14,["putobject",110.0],["getclassvariable","@@c"],["send","+",1,null,0,null],["dup"],["setinstancevariable","@b"],["leave"]]],0],16,["putnil"],["definemethod","calc",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":2},"calc","super2\\super2.rb","method",[],0,[],[17,["putnil"],["send","getA",0,null,24,null],["getinstancevariable","@b"],["send","\/",1,null,0,null],["leave"]]],0],["putnil"],["leave"]]],0],["pop"],21,["putnil"],["putstring","335\/113 = "],["putnil"],["getconstant","Pi2"],["putobject",1],["putobject",2],["send","new",2,null,0,null],["send","calc",0,null,0,null],["send","+",1,null,0,null],["send","puts",1,null,8,null],["leave"]]]; diff --git a/test/super2/super2.rb b/test/super2/super2.rb new file mode 100644 index 0000000..74d1746 --- /dev/null +++ b/test/super2/super2.rb @@ -0,0 +1,21 @@ +class Pi + def initialize hoge, hoge2 + @a = 352.0 + hoge + hoge2 + @@c = 3 + end + def getA + @a + end +end + +class Pi2 < Pi + def initialize hoge, hoge2 + super + @b = 110.0 + @@c + end + def calc + getA / @b + end +end + +puts '335/113 = ' + Pi2.new(1, 2).calc diff --git a/test/super2/super2_pretty.json b/test/super2/super2_pretty.json new file mode 100644 index 0000000..2e90fa0 --- /dev/null +++ b/test/super2/super2_pretty.json @@ -0,0 +1,435 @@ +[ + "YARVInstructionSequence\/SimpleDataFormat", + 1, + 1, + 1, + { + "arg_size": 0, + "local_size": 1, + "stack_max": 5 + }, + "
", + "super2\\super2.rb", + "top", + [ + + ], + 0, + [ + + ], + [ + 1, + [ + "putnil" + ], + [ + "putnil" + ], + [ + "defineclass", + "Pi", + [ + "YARVInstructionSequence\/SimpleDataFormat", + 1, + 1, + 1, + { + "arg_size": 0, + "local_size": 1, + "stack_max": 1 + }, + "", + "super2\\super2.rb", + "class", + [ + + ], + 0, + [ + + ], + [ + 2, + [ + "putnil" + ], + [ + "definemethod", + "initialize", + [ + "YARVInstructionSequence\/SimpleDataFormat", + 1, + 1, + 1, + { + "arg_size": 2, + "local_size": 3, + "stack_max": 2 + }, + "initialize", + "super2\\super2.rb", + "method", + [ + "hoge", + "hoge2" + ], + 2, + [ + + ], + [ + 3, + [ + "putobject", + 352.0 + ], + [ + "getlocal", + 3 + ], + [ + "send", + "+", + 1, + null, + 0, + null + ], + [ + "getlocal", + 2 + ], + [ + "send", + "+", + 1, + null, + 0, + null + ], + [ + "setinstancevariable", + "@a" + ], + 4, + [ + "putobject", + 3 + ], + [ + "dup" + ], + [ + "setclassvariable", + "@@c" + ], + [ + "leave" + ] + ] + ], + 0 + ], + 6, + [ + "putnil" + ], + [ + "definemethod", + "getA", + [ + "YARVInstructionSequence\/SimpleDataFormat", + 1, + 1, + 1, + { + "arg_size": 0, + "local_size": 1, + "stack_max": 1 + }, + "getA", + "super2\\super2.rb", + "method", + [ + + ], + 0, + [ + + ], + [ + 7, + [ + "getinstancevariable", + "@a" + ], + [ + "leave" + ] + ] + ], + 0 + ], + [ + "putnil" + ], + [ + "leave" + ] + ] + ], + 0 + ], + [ + "pop" + ], + 11, + [ + "putnil" + ], + [ + "putnil" + ], + [ + "getconstant", + "Pi" + ], + [ + "defineclass", + "Pi2", + [ + "YARVInstructionSequence\/SimpleDataFormat", + 1, + 1, + 1, + { + "arg_size": 0, + "local_size": 1, + "stack_max": 1 + }, + "", + "super2\\super2.rb", + "class", + [ + + ], + 0, + [ + + ], + [ + 12, + [ + "putnil" + ], + [ + "definemethod", + "initialize", + [ + "YARVInstructionSequence\/SimpleDataFormat", + 1, + 1, + 1, + { + "arg_size": 2, + "local_size": 3, + "stack_max": 3 + }, + "initialize", + "super2\\super2.rb", + "method", + [ + "hoge", + "hoge2" + ], + 2, + [ + + ], + [ + 13, + [ + "putobject", + false + ], + [ + "getlocal", + 3 + ], + [ + "getlocal", + 2 + ], + [ + "invokesuper", + 2, + null, + 0 + ], + [ + "pop" + ], + 14, + [ + "putobject", + 110.0 + ], + [ + "getclassvariable", + "@@c" + ], + [ + "send", + "+", + 1, + null, + 0, + null + ], + [ + "dup" + ], + [ + "setinstancevariable", + "@b" + ], + [ + "leave" + ] + ] + ], + 0 + ], + 16, + [ + "putnil" + ], + [ + "definemethod", + "calc", + [ + "YARVInstructionSequence\/SimpleDataFormat", + 1, + 1, + 1, + { + "arg_size": 0, + "local_size": 1, + "stack_max": 2 + }, + "calc", + "super2\\super2.rb", + "method", + [ + + ], + 0, + [ + + ], + [ + 17, + [ + "putnil" + ], + [ + "send", + "getA", + 0, + null, + 24, + null + ], + [ + "getinstancevariable", + "@b" + ], + [ + "send", + "\/", + 1, + null, + 0, + null + ], + [ + "leave" + ] + ] + ], + 0 + ], + [ + "putnil" + ], + [ + "leave" + ] + ] + ], + 0 + ], + [ + "pop" + ], + 21, + [ + "putnil" + ], + [ + "putstring", + "335\/113 = " + ], + [ + "putnil" + ], + [ + "getconstant", + "Pi2" + ], + [ + "putobject", + 1 + ], + [ + "putobject", + 2 + ], + [ + "send", + "new", + 2, + null, + 0, + null + ], + [ + "send", + "calc", + 0, + null, + 0, + null + ], + [ + "send", + "+", + 1, + null, + 0, + null + ], + [ + "send", + "puts", + 1, + null, + 8, + null + ], + [ + "leave" + ] + ] +] diff --git a/web/js/HotRuby.js b/web/js/HotRuby.js index db26515..c416943 100644 --- a/web/js/HotRuby.js +++ b/web/js/HotRuby.js @@ -1339,7 +1339,10 @@ HotRuby.prototype.classes = { "String" : { "+" : function(recver, args) { - return this.createRubyString(recver.__native + args[0].__native); + if(typeof(args[0]) == "object") + return this.createRubyString(recver.__native + args[0].__native); + else + return this.createRubyString(recver.__native + args[0]); }, "*" : function(recver, args) { diff --git a/web/js/test/super2.js b/web/js/test/super2.js new file mode 100644 index 0000000..ddaaa34 --- /dev/null +++ b/web/js/test/super2.js @@ -0,0 +1 @@ +var src = ["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":5},"
","super2\\super2.rb","top",[],0,[],[1,["putnil"],["putnil"],["defineclass","Pi",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":1},"","super2\\super2.rb","class",[],0,[],[2,["putnil"],["definemethod","initialize",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":2,"local_size":3,"stack_max":2},"initialize","super2\\super2.rb","method",["hoge","hoge2"],2,[],[3,["putobject",352.0],["getlocal",3],["send","+",1,null,0,null],["getlocal",2],["send","+",1,null,0,null],["setinstancevariable","@a"],4,["putobject",3],["dup"],["setclassvariable","@@c"],["leave"]]],0],6,["putnil"],["definemethod","getA",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":1},"getA","super2\\super2.rb","method",[],0,[],[7,["getinstancevariable","@a"],["leave"]]],0],["putnil"],["leave"]]],0],["pop"],11,["putnil"],["putnil"],["getconstant","Pi"],["defineclass","Pi2",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":1},"","super2\\super2.rb","class",[],0,[],[12,["putnil"],["definemethod","initialize",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":2,"local_size":3,"stack_max":3},"initialize","super2\\super2.rb","method",["hoge","hoge2"],2,[],[13,["putobject",false],["getlocal",3],["getlocal",2],["invokesuper",2,null,0],["pop"],14,["putobject",110.0],["getclassvariable","@@c"],["send","+",1,null,0,null],["dup"],["setinstancevariable","@b"],["leave"]]],0],16,["putnil"],["definemethod","calc",["YARVInstructionSequence\/SimpleDataFormat",1,1,1,{"arg_size":0,"local_size":1,"stack_max":2},"calc","super2\\super2.rb","method",[],0,[],[17,["putnil"],["send","getA",0,null,24,null],["getinstancevariable","@b"],["send","\/",1,null,0,null],["leave"]]],0],["putnil"],["leave"]]],0],["pop"],21,["putnil"],["putstring","335\/113 = "],["putnil"],["getconstant","Pi2"],["putobject",1],["putobject",2],["send","new",2,null,0,null],["send","calc",0,null,0,null],["send","+",1,null,0,null],["send","puts",1,null,8,null],["leave"]]]; diff --git a/web/test-local/super2.html b/web/test-local/super2.html new file mode 100644 index 0000000..e8c9b8c --- /dev/null +++ b/web/test-local/super2.html @@ -0,0 +1,9 @@ + + + Super - HotRuby + + + + + + \ No newline at end of file