Xian,

I think it's expected behaviour.  You first create an empty array.
Then you create an array with a single element which is this empty
array.  Next you wrap it once again thus creating an endless chain of
nested arrays:

> a = new Array()

> a.length
0
> a = new Array(a)

> a.length
1
> a[0].length
0
> a = new Array(a)

> a.length
1
> a[0].length
1
> a[0][0].length
0
>

Eventually you exhaust the memory.

yours,
anton.

On Mon, Nov 23, 2009 at 12:51 PM, Xiang <[email protected]> wrote:
>
> Test sample:
> ----------------------------
>
> #include "v8.h"
> #include "stdio.h"
>
> #ifndef CRASH
> #define CRASH() do { \
>    *(int *)(unsigned int *)0xbbadbeef = 0; \
>    ((void(*)())0)(); /* More reliable, but doesn't say BBADBEEF */ \
> } while(false)
> #endif
>
> static void handleFatalErrorInV8()
> {
> //    CRASH();
> }
>
> static void reportFatalErrorInV8(const char* location, const char*
> message)
> {
>    printf("V8 error: %s (%s)\n", message, location);
>    handleFatalErrorInV8();
> }
>
> #define EXPECT(condition) if(!condition) printf("fail\n")
>
> void TestRunScriptOutOfMemory()
> {
>    static const int K = 1024;
>    v8::ResourceConstraints constraints;
>    constraints.set_max_young_space_size(256 * K);
>    constraints.set_max_old_space_size(4 * K * K);
>    v8::SetResourceConstraints(&constraints);
>
>    // Execute a script that causes out of memory.
>    v8::HandleScope scope;
>    v8::Persistent<v8::Context> context = v8::Context::New();
>    v8::Context::Scope contextScope(context);
>    v8::V8::IgnoreOutOfMemoryException();
>            v8::V8::SetFatalErrorHandler(reportFatalErrorInV8);
>    v8::Local<v8::Script> script =
>    v8::Script::Compile(v8::String::New("a = new Array(); while (1)
> { (a = new Array(a)).sort(); }"));
>    v8::Local<v8::Value> result = script->Run();
>    EXPECT(result.IsEmpty());
>    EXPECT(context->HasOutOfMemoryException());
>    context.Dispose();
> }
>
> int main()
> {
>    TestRunScriptOutOfMemory();
>    return 0;
> }
> >
>

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

Reply via email to