From: aandrey@chromium.org Date: Wed, 13 Aug 2014 13:06:30 +0000 (+0000) Subject: Expose Value::IsArgumentsObject in V8 API. X-Git-Tag: upstream/4.7.83~7626 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3a3d6bd4f61b679a87c30685e8ae8280570b3ec3;p=platform%2Fupstream%2Fv8.git Expose Value::IsArgumentsObject in V8 API. R=yangguo@chromium.org, svenpanne@chromium.org, yangguo Review URL: https://codereview.chromium.org/460333002 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23105 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/include/v8.h b/include/v8.h index ef0bda6..cb12947 100644 --- a/include/v8.h +++ b/include/v8.h @@ -1424,6 +1424,11 @@ class V8_EXPORT Value : public Data { bool IsDate() const; /** + * Returns true if this value is an Arguments object. + */ + bool IsArgumentsObject() const; + + /** * Returns true if this value is a Boolean object. */ bool IsBooleanObject() const; diff --git a/src/api.cc b/src/api.cc index 4a63459..6f6fb42 100644 --- a/src/api.cc +++ b/src/api.cc @@ -2383,6 +2383,14 @@ bool Value::IsNumber() const { } +bool Value::IsArgumentsObject() const { + i::Handle obj = Utils::OpenHandle(this); + if (!obj->IsHeapObject()) return false; + i::Isolate* isolate = i::HeapObject::cast(*obj)->GetIsolate(); + return obj->HasSpecificClassOf(isolate->heap()->Arguments_string()); +} + + bool Value::IsBoolean() const { return Utils::OpenHandle(this)->IsBoolean(); } diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc index 9ddc9db..f614007 100644 --- a/test/cctest/test-api.cc +++ b/test/cctest/test-api.cc @@ -1541,6 +1541,19 @@ THREADED_TEST(IsNativeError) { } +THREADED_TEST(ArgumentsObject) { + LocalContext env; + v8::HandleScope scope(env->GetIsolate()); + v8::Handle arguments_object = + CompileRun("var out = 0; (function(){ out = arguments; })(1,2,3); out;"); + CHECK(arguments_object->IsArgumentsObject()); + v8::Handle array = CompileRun("[1,2,3]"); + CHECK(!array->IsArgumentsObject()); + v8::Handle object = CompileRun("{a:42}"); + CHECK(!object->IsArgumentsObject()); +} + + THREADED_TEST(StringObject) { LocalContext env; v8::HandleScope scope(env->GetIsolate());