<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>bs_struct_readers.c</filename>
    </added>
    <added>
      <filename>gen_bs_struct_readers.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -8298,32 +8298,8 @@ rb_vm_resolve_const_value(VALUE v, VALUE klass, ID id)
     return v;
 }
 
-#define GEN_STRUCT_READER(idx) \
-    static VALUE rb_vm_struct_reader_##idx (VALUE self, SEL sel) { \
-	VALUE *data; \
-	Data_Get_Struct(self, VALUE, data); \
-	return data[idx]; \
-    } \
-
-GEN_STRUCT_READER(0);  GEN_STRUCT_READER(1);  GEN_STRUCT_READER(2);
-GEN_STRUCT_READER(3);  GEN_STRUCT_READER(4);  GEN_STRUCT_READER(5);
-GEN_STRUCT_READER(6);  GEN_STRUCT_READER(7);  GEN_STRUCT_READER(8);
-GEN_STRUCT_READER(9);  GEN_STRUCT_READER(10); GEN_STRUCT_READER(11);
-GEN_STRUCT_READER(12); GEN_STRUCT_READER(13); GEN_STRUCT_READER(14);
-GEN_STRUCT_READER(15); GEN_STRUCT_READER(16); GEN_STRUCT_READER(17);
-GEN_STRUCT_READER(18); GEN_STRUCT_READER(19);
-
-#define BS_STRUCT_MAX_FIELDS 20
-typedef VALUE rb_vm_struct_reader_t(VALUE, SEL);
-static rb_vm_struct_reader_t *struct_readers[] = {
-    rb_vm_struct_reader_0,  rb_vm_struct_reader_1,  rb_vm_struct_reader_2,
-    rb_vm_struct_reader_3,  rb_vm_struct_reader_4,  rb_vm_struct_reader_5,
-    rb_vm_struct_reader_6,  rb_vm_struct_reader_7,  rb_vm_struct_reader_8,
-    rb_vm_struct_reader_9,  rb_vm_struct_reader_10, rb_vm_struct_reader_11,
-    rb_vm_struct_reader_12, rb_vm_struct_reader_13, rb_vm_struct_reader_14,
-    rb_vm_struct_reader_15, rb_vm_struct_reader_16, rb_vm_struct_reader_17,
-    rb_vm_struct_reader_18, rb_vm_struct_reader_19
-};
+// Readers are statically generated.
+#include &quot;bs_struct_readers.c&quot;
 
 static bool
 register_bs_boxed(bs_element_type_t type, void *value)
@@ -8347,7 +8323,7 @@ register_bs_boxed(bs_element_type_t type, void *value)
 	    rb_cBoxed);
 
     if (type == BS_ELEMENT_STRUCT) {
-	assert(boxed-&gt;as.s-&gt;fields_count &lt; BS_STRUCT_MAX_FIELDS);
+	assert(boxed-&gt;as.s-&gt;fields_count &lt;= BS_STRUCT_MAX_FIELDS);
 	for (unsigned i = 0; i &lt; boxed-&gt;as.s-&gt;fields_count; i++) {
 	    rb_objc_define_method(boxed-&gt;klass, boxed-&gt;as.s-&gt;fields[i].name,
 		    (void *)struct_readers[i], 0);</diff>
      <filename>roxor.cpp</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>3817c9db76fe539b52f376039e6f6578aaac33d7</id>
    </parent>
  </parents>
  <author>
    <name>lsansonetti@apple.com</name>
    <email>lsansonetti@apple.com@23306eb0-4c56-4727-a40e-e92c0eb68959</email>
  </author>
  <url>http://github.com/masterkain/macruby/commit/4088357c6dab5dcff50f43067d517e6c150af3ee</url>
  <id>4088357c6dab5dcff50f43067d517e6c150af3ee</id>
  <committed-date>2009-04-22T17:55:53-07:00</committed-date>
  <authored-date>2009-04-22T17:55:53-07:00</authored-date>
  <message>statically generate the struct reader methods, 128 seems necessary at least for OpenGL

git-svn-id: http://svn.macosforge.org/repository/ruby/MacRuby/branches/experimental@1473 23306eb0-4c56-4727-a40e-e92c0eb68959</message>
  <tree>c5b0b347ace77e1a619e7aa7205106ee697579fc</tree>
  <committer>
    <name>lsansonetti@apple.com</name>
    <email>lsansonetti@apple.com@23306eb0-4c56-4727-a40e-e92c0eb68959</email>
  </committer>
</commit>
