| Index: test/cctest/test-alloc.cc
|
| ===================================================================
|
| --- test/cctest/test-alloc.cc (revision 655)
|
| +++ test/cctest/test-alloc.cc (working copy)
|
| @@ -26,6 +26,7 @@
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| #include "v8.h"
|
| +#include "accessors.h"
|
| #include "top.h"
|
|
|
| #include "cctest.h"
|
| @@ -87,12 +88,13 @@
|
| return Smi::FromInt(42);
|
| }
|
|
|
| +
|
| static Handle<Object> Test() {
|
| CALL_HEAP_FUNCTION(AllocateAfterFailures(), Object);
|
| }
|
|
|
|
|
| -TEST(Stress) {
|
| +TEST(StressHandles) {
|
| v8::Persistent<v8::Context> env = v8::Context::New();
|
| v8::HandleScope scope;
|
| env->Enter();
|
| @@ -100,3 +102,45 @@
|
| CHECK(o->IsSmi() && Smi::cast(*o)->value() == 42);
|
| env->Exit();
|
| }
|
| +
|
| +
|
| +static Object* TestAccessorGet(Object* object, void*) {
|
| + return AllocateAfterFailures();
|
| +}
|
| +
|
| +
|
| +const AccessorDescriptor kDescriptor = {
|
| + TestAccessorGet,
|
| + 0,
|
| + 0
|
| +};
|
| +
|
| +
|
| +TEST(StressJS) {
|
| + v8::Persistent<v8::Context> env = v8::Context::New();
|
| + v8::HandleScope scope;
|
| + env->Enter();
|
| + Handle<JSFunction> function =
|
| + Factory::NewFunction(Factory::function_symbol(), Factory::null_value());
|
| + // Force the creation of an initial map and set the code to
|
| + // something empty.
|
| + Factory::NewJSObject(function);
|
| + function->set_code(Builtins::builtin(Builtins::EmptyFunction));
|
| + // Patch the map to have an accessor for "get".
|
| + Handle<Map> map(function->initial_map());
|
| + Handle<DescriptorArray> instance_descriptors(map->instance_descriptors());
|
| + Handle<Proxy> proxy = Factory::NewProxy(&kDescriptor);
|
| + instance_descriptors = Factory::CopyAppendProxyDescriptor(
|
| + instance_descriptors,
|
| + Factory::NewStringFromAscii(Vector<const char>("get", 3)),
|
| + proxy,
|
| + static_cast<PropertyAttributes>(0));
|
| + map->set_instance_descriptors(*instance_descriptors);
|
| + // Add the Foo constructor the global object.
|
| + env->Global()->Set(v8::String::New("Foo"), v8::Utils::ToLocal(function));
|
| + // Call the accessor through JavaScript.
|
| + v8::Handle<v8::Value> result =
|
| + v8::Script::Compile(v8::String::New("(new Foo).get"))->Run();
|
| + CHECK_EQ(42, result->Int32Value());
|
| + env->Exit();
|
| +}
|
|
|