Author: [EMAIL PROTECTED]
Date: Tue Sep  9 00:54:30 2008
New Revision: 225

Added:
    changes/[EMAIL PROTECTED]/internal-object-fields/
     
changes/[EMAIL PROTECTED]/internal-object-fields/bleeding_edge/
       - copied from r224, /branches/bleeding_edge/
Modified:
     
changes/[EMAIL PROTECTED]/internal-object-fields/bleeding_edge/src/api.cc
     
changes/[EMAIL 
PROTECTED]/internal-object-fields/bleeding_edge/test/cctest/test-api.cc

Log:
Fixed issue 54, under some circumstances internal field count set on
object templates did not take effect.



Modified:  
changes/[EMAIL PROTECTED]/internal-object-fields/bleeding_edge/src/api.cc
==============================================================================
--- /branches/bleeding_edge/src/api.cc  (original)
+++  
changes/[EMAIL PROTECTED]/internal-object-fields/bleeding_edge/src/api.cc       
 
Tue Sep  9 00:54:30 2008
@@ -979,6 +979,12 @@
                  "Invalid internal field count")) {
      return;
    }
+  if (value > 0) {
+    // The internal field count is set by the constructor function's
+    // construct code, so we ensure that there is a constructor
+    // function to do the setting.
+    EnsureConstructor(this);
+  }
     
Utils::OpenHandle(this)->set_internal_field_count(i::Smi::FromInt(value));
  }


Modified:  
changes/[EMAIL 
PROTECTED]/internal-object-fields/bleeding_edge/test/cctest/test-api.cc
==============================================================================
--- /branches/bleeding_edge/test/cctest/test-api.cc     (original)
+++  
changes/[EMAIL 
PROTECTED]/internal-object-fields/bleeding_edge/test/cctest/test-api.cc   
Tue Sep  9 00:54:30 2008
@@ -4825,3 +4825,21 @@
      inner->Exit();
    }
  }
+
+
+// Regression test for issue 54, object templates with internal fields
+// but no accessors or interceptors did not get their internal field
+// count set on instances.
+THREADED_TEST(Regress54) {
+  v8::HandleScope outer;
+  LocalContext context;
+  static v8::Persistent<v8::ObjectTemplate> templ;
+  if (templ.IsEmpty()) {
+    v8::HandleScope inner;
+    v8::Handle<v8::ObjectTemplate> local = v8::ObjectTemplate::New();
+    local->SetInternalFieldCount(1);
+    templ = v8::Persistent<v8::ObjectTemplate>::New(inner.Close(local));
+  }
+  v8::Handle<v8::Object> result = templ->NewInstance();
+  CHECK_EQ(1, result->InternalFieldCount());
+}

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to