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

yarv-diff:344

From: ko1 atdot.net
Date: 6 Jul 2006 04:46:58 -0000
Subject: [yarv-diff:344] r510 - in trunk: . lib

Author: ko1
Date: 2006-07-06 13:46:54 +0900 (Thu, 06 Jul 2006)
New Revision: 510

Modified:
   trunk/
   trunk/ChangeLog
   trunk/lib/yasm.rb
Log:
 r794@lermite:  ko1 | 2006-07-06 13:46:03 +0900
 	* lib/yasm.rb : pass builder object if block arity == 1
 



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

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2006-07-05 02:31:01 UTC (rev 509)
+++ trunk/ChangeLog	2006-07-06 04:46:54 UTC (rev 510)
@@ -4,6 +4,11 @@
 #  from Mon, 03 May 2004 01:24:19 +0900
 #
 
+2006-07-06(Thu) 13:45:20 +0900  Koichi Sasada  <ko1 atdot.net>
+
+	* lib/yasm.rb : pass builder object if block arity == 1
+
+
 2006-07-05(Wed) 11:23:50 +0900  Koichi Sasada  <ko1 atdot.net>
 
 	* lib/yasm.rb : fix method name

Modified: trunk/lib/yasm.rb
===================================================================
--- trunk/lib/yasm.rb	2006-07-05 02:31:01 UTC (rev 509)
+++ trunk/lib/yasm.rb	2006-07-06 04:46:54 UTC (rev 510)
@@ -31,8 +31,7 @@
           :toplevel, "<toplevel@yasm>", "<yasm>",
           [], vars, [nil], nil
         )
-        sdb.instance_eval(&b)
-        sdb.to_a
+        sdb.build(b)
       end
       
       def self.method name, args = [], vars = [], &b
@@ -40,8 +39,7 @@
           :method, name, "TODO: filename",
           args, vars, [nil], nil
         )
-        sdb.instance_eval(&b)
-        sdb.to_a
+        sdb.build(b)
       end
 
       def self.class name, vars = [], &b
@@ -49,8 +47,7 @@
           :method, name, "TODO: filename",
           args, vars, [nil], nil
         )
-        sdb.instance_eval(&b)
-        sdb.to_a
+        sdb.build(b)
       end
       
       def initialize type, name, filename, args, vars, lopt, parent
@@ -71,6 +68,17 @@
       attr_reader :locals
       attr_reader :local_sdb, :parent_sdb
 
+      def build b
+        raise LocalJumpError, "No block given" unless b
+        
+        if b.arity == 1
+          b.call self
+        else
+          self.instance_eval(&b)
+        end
+        to_a
+      end
+      
       def to_a
         # [magic, major_version, minor_version, format_type, misc,
         #  name, filename, line,
@@ -174,6 +182,13 @@
 
 ######################################################
 
+iseq = YASM.toplevel([:a, :b]){|ib|
+  # return :ok
+  ib.putobject :ok
+  ib.leave
+}
+p iseq.eval
+
 iseq = YASM.toplevel([:a, :b]){
   #
   # a = 10


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

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