[前][次][番号順一覧][スレッド一覧][生データ]

yarv-diff:320

From: ko1 atdot.net
Date: 11 Apr 2006 02:31:22 -0000
Subject: [yarv-diff:320] r485 - in trunk: . rb

Author: ko1
Date: 2006-04-11 11:31:21 +0900 (Tue, 11 Apr 2006)
New Revision: 485

Modified:
   trunk/
   trunk/ChangeLog
   trunk/compile.c
   trunk/rb/yasm.rb
   trunk/yarvcore.c
Log:
 r748@lermite:  ko1 | 2006-04-09 03:05:39 +0900
 	* compile.c : change to accept method iseq object when loading from
 	simple data
 
 	* yarvcore.c : add a debug output
 
 	* rb/yasm.rb : change some interfaces
 



Property changes on: trunk
___________________________________________________________________
Name: svk:merge
   - 81cd9672-7512-7e48-ae48-6936450e977d:/local/yarv/trunk:747
   + 81cd9672-7512-7e48-ae48-6936450e977d:/local/yarv/trunk:748

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2006-04-11 02:30:45 UTC (rev 484)
+++ trunk/ChangeLog	2006-04-11 02:31:21 UTC (rev 485)
@@ -4,6 +4,16 @@
 #  from Mon, 03 May 2004 01:24:19 +0900
 #
 
+2006-04-09(Sun) 03:04:04 +0900  Koichi Sasada  <ko1 atdot.net>
+
+	* compile.c : change to accept method iseq object when loading from
+	simple data
+
+	* yarvcore.c : add a debug output
+
+	* rb/yasm.rb : change some interfaces
+
+
 2006-04-07(Fri) 20:25:03 +0900  Koichi Sasada  <ko1 atdot.net>
 
 	* compile.c : fix miss about range of catch "next"

Modified: trunk/compile.c
===================================================================
--- trunk/compile.c	2006-04-11 02:30:45 UTC (rev 484)
+++ trunk/compile.c	2006-04-11 02:31:21 UTC (rev 485)
@@ -4633,8 +4633,18 @@
 		      case TS_ISEQ:
 			{
 			    if (op != Qnil) {
-				argv[j] =
-				  iseq_load_simpledata(0, op, iseq->self);
+				if (TYPE(op) == T_ARRAY) {
+				    argv[j] =
+				      iseq_load_simpledata(0, op, iseq->self);
+				}
+				else if (CLASS_OF(op) == cYarvISeq) {
+				    yarv_iseq_t *iseq;
+				    argv[j] = op;
+				}
+				else {
+				    /* TODO: exception */
+				    rb_bug("not an iseq");
+				}
 			    }
 			    else {
 				argv[j] = 0;

Modified: trunk/rb/yasm.rb
===================================================================
--- trunk/rb/yasm.rb	2006-04-11 02:30:45 UTC (rev 484)
+++ trunk/rb/yasm.rb	2006-04-11 02:31:21 UTC (rev 485)
@@ -8,25 +8,51 @@
 
 module YARVCore
   class Assembler
+    def self.simpledata_to_iseq sd
+      YARVCore::InstructionSequence.load_simpledata sd
+    end
+
     def self.toplevel vars = [], &b
-      sdb = SimpleDataBuilder.new(
-        :toplevel, "<toplevel@yasm>", "<yasm>",
-        [], vars, [nil], nil
-      )
-      sdb.instance_eval(&b)
-      sdb
+      simpledata_to_iseq  SimpleDataBuilder.toplevel(vars, &b)
     end
 
     def self.method name, args = [], vars = [], &b
-      sdb = SimpleDataBuilder.new(
-        :method, name, "TODO: filename",
-        args, vars, [nil], nil
-      )
-      sdb.instance_eval(&b)
-      sdb
+      simpledata_to_iseq SimpleDataBuilder.method(name, args, vars, &b)
     end
+
+    def self.class name, vars = [], &b
+      simpledata_to_iseq SimpleDataBuilder.class(name, vars = [], &b)
+    end
     
     class SimpleDataBuilder
+
+      def self.toplevel vars, &b
+        sdb = SimpleDataBuilder.new(
+          :toplevel, "<toplevel@yasm>", "<yasm>",
+          [], vars, [nil], nil
+        )
+        sdb.instance_eval(&b)
+        sdb.to_simpledata
+      end
+      
+      def self.method name, args = [], vars = [], &b
+        sdb = SimpleDataBuilder.new(
+          :method, name, "TODO: filename",
+          args, vars, [nil], nil
+        )
+        sdb.instance_eval(&b)
+        sdb.to_simpledata
+      end
+
+      def self.class name, vars = [], &b
+        sdb = SimpleDataBuilder.new(
+          :method, name, "TODO: filename",
+          args, vars, [nil], nil
+        )
+        sdb.instance_eval(&b)
+        sdb.to_simpledata
+      end
+      
       def initialize type, name, filename, args, vars, lopt, parent
         @type = type
         @name = name
@@ -54,10 +80,6 @@
          @type, @args, @vars, @exception, @body]
       end
 
-      def to_iseq
-        YARVCore::InstructionSequence.load_simpledata(self.to_simpledata)
-      end
-
       def method name, args=[], vars=[], &b
         YASM.method(name, args, vars, &b).to_simpledata
       end
@@ -144,7 +166,6 @@
 
 YASM = YARVCore::Assembler
 
-
 if __FILE__ == $0
 
 #
@@ -153,7 +174,7 @@
 
 ######################################################
 
-result = YASM.toplevel([:a, :b]){
+iseq = YASM.toplevel([:a, :b]){
   #
   # a = 10
   # b = 20
@@ -179,20 +200,17 @@
   }
   leave
 }
-data = result.to_simpledata
-iseq = result.to_iseq
-
-p data
+p iseq
 iseq.eval #=> 30
 
 ###########################################################
 
 #
-# def m1(a, b)
+# def show_args(a, b)
 #   p [a, b]
 # end
 # =>
-m1 = YASM.method(:m1, [:a, :b]){
+m_show_args = YASM.method(:show_args, [:a, :b]){
   putself
   getlocal :a
   getlocal :b
@@ -202,14 +220,14 @@
 }
 
 #
-# def m3(a)   # abs
+# def abs(a)
 #   if a > 0
 #     a
 #   else
 #     -a
 #   end
 # end
-m3 = YASM.method(:m3, [:a]){
+m_abs = YASM.method(:abs, [:a]){
   getlocal :a
   putobject 0
   send :>, 1
@@ -218,42 +236,37 @@
   jump :label_end
 _ :label_else
   getlocal :a
-  send :+@, 0
+  send :-@, 0
 _ :label_end
   leave
 }
 
 #
-# def m5(a)
-#   b = a * 2
-# end
-m5 = YASM.method(:m5, [:a], [:b]){
-  getlocal :a
-  putobject 2
-  send :*, 1
-  dup
-  setlocal :b
-  leave
-}
-
-
-#
-# def m1(...); ...; end
-#
-# m1(1, 2)
+# def show_args(...) ... end
+# def abs(a) ... end
+# show_args(1, -1)
 # =>
 top = YASM.toplevel{
   putnil
-  definemethod(:m1, m1.to_simpledata)
+  definemethod(:show_args, m_show_args)
+  putnil
+  definemethod(:abs, m_abs)
   putself
-  putobject 1
-  putobject 2
-  call :m1, 2
+    # abs(1)
+    putself
+    putobject 1
+    call :abs, 1
+    # abs(-1)
+    putself
+    putobject -1
+    call :abs, 1
+  # show_args(...)
+  call :show_args, 2
   leave
 }
 
 #=> run
-top.to_iseq.eval
+top.eval
 
 ###########################################################
 end

Modified: trunk/yarvcore.c
===================================================================
--- trunk/yarvcore.c	2006-04-11 02:30:45 UTC (rev 484)
+++ trunk/yarvcore.c	2006-04-11 02:31:21 UTC (rev 485)
@@ -516,6 +516,7 @@
 
     if (st_lookup(type_map,
 		  type, &iseq_type) == 0) {
+	dp(type);
 	rb_raise(rb_eTypeError, "unsupport type: %p", type);
     }
 


-- 
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]