Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Unified Diff: src/builtins.cc

Issue 819001: Revert change to always call builtins for Array functions.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/bootstrapper.cc ('k') | src/contexts.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/builtins.cc
===================================================================
--- src/builtins.cc (revision 4073)
+++ src/builtins.cc (working copy)
@@ -319,24 +319,6 @@
}
-static bool IsJSArrayWithFastElements(Object* receiver,
- FixedArray** elements) {
- if (!receiver->IsJSArray()) {
- return false;
- }
-
- JSArray* array = JSArray::cast(receiver);
-
- HeapObject* elms = HeapObject::cast(array->elements());
- if (elms->map() != Heap::fixed_array_map()) {
- return false;
- }
-
- *elements = FixedArray::cast(elms);
- return true;
-}
-
-
static Object* CallJsBuiltin(const char* name,
BuiltinArguments<NO_EXTRA_ARGUMENTS> args) {
HandleScope handleScope;
@@ -364,12 +346,8 @@
BUILTIN(ArrayPush) {
- Object* receiver = *args.receiver();
- FixedArray* elms = NULL;
- if (!IsJSArrayWithFastElements(receiver, &elms)) {
- return CallJsBuiltin("ArrayPush", args);
- }
- JSArray* array = JSArray::cast(receiver);
+ JSArray* array = JSArray::cast(*args.receiver());
+ ASSERT(array->HasFastElements());
int len = Smi::cast(array->length())->value();
int to_add = args.length() - 1;
@@ -381,6 +359,7 @@
ASSERT(to_add <= (Smi::kMaxValue - len));
int new_length = len + to_add;
+ FixedArray* elms = FixedArray::cast(array->elements());
if (new_length > elms->length()) {
// New backing storage is needed.
@@ -411,17 +390,14 @@
BUILTIN(ArrayPop) {
- Object* receiver = *args.receiver();
- FixedArray* elms = NULL;
- if (!IsJSArrayWithFastElements(receiver, &elms)) {
- return CallJsBuiltin("ArrayPop", args);
- }
- JSArray* array = JSArray::cast(receiver);
+ JSArray* array = JSArray::cast(*args.receiver());
+ ASSERT(array->HasFastElements());
int len = Smi::cast(array->length())->value();
if (len == 0) return Heap::undefined_value();
// Get top element
+ FixedArray* elms = FixedArray::cast(array->elements());
Object* top = elms->get(len - 1);
// Set the length.
@@ -444,18 +420,18 @@
BUILTIN(ArrayShift) {
- Object* receiver = *args.receiver();
- FixedArray* elms = NULL;
- if (!IsJSArrayWithFastElements(receiver, &elms)
- || !ArrayPrototypeHasNoElements()) {
+ if (!ArrayPrototypeHasNoElements()) {
return CallJsBuiltin("ArrayShift", args);
}
- JSArray* array = JSArray::cast(receiver);
+
+ JSArray* array = JSArray::cast(*args.receiver());
ASSERT(array->HasFastElements());
int len = Smi::cast(array->length())->value();
if (len == 0) return Heap::undefined_value();
+ FixedArray* elms = FixedArray::cast(array->elements());
+
// Get first element
Object* first = elms->get(0);
if (first->IsTheHole()) {
@@ -475,13 +451,11 @@
BUILTIN(ArrayUnshift) {
- Object* receiver = *args.receiver();
- FixedArray* elms = NULL;
- if (!IsJSArrayWithFastElements(receiver, &elms)
- || !ArrayPrototypeHasNoElements()) {
+ if (!ArrayPrototypeHasNoElements()) {
return CallJsBuiltin("ArrayUnshift", args);
}
- JSArray* array = JSArray::cast(receiver);
+
+ JSArray* array = JSArray::cast(*args.receiver());
ASSERT(array->HasFastElements());
int len = Smi::cast(array->length())->value();
@@ -495,6 +469,8 @@
// we should never hit this case.
ASSERT(to_add <= (Smi::kMaxValue - len));
+ FixedArray* elms = FixedArray::cast(array->elements());
+
if (new_length > elms->length()) {
// New backing storage is needed.
int capacity = new_length + (new_length >> 1) + 16;
@@ -527,13 +503,11 @@
BUILTIN(ArraySlice) {
- Object* receiver = *args.receiver();
- FixedArray* elms = NULL;
- if (!IsJSArrayWithFastElements(receiver, &elms)
- || !ArrayPrototypeHasNoElements()) {
+ if (!ArrayPrototypeHasNoElements()) {
return CallJsBuiltin("ArraySlice", args);
}
- JSArray* array = JSArray::cast(receiver);
+
+ JSArray* array = JSArray::cast(*args.receiver());
ASSERT(array->HasFastElements());
int len = Smi::cast(array->length())->value();
@@ -584,6 +558,8 @@
if (result->IsFailure()) return result;
FixedArray* result_elms = FixedArray::cast(result);
+ FixedArray* elms = FixedArray::cast(array->elements());
+
AssertNoAllocation no_gc;
CopyElements(&no_gc, result_elms, 0, elms, k, result_len);
@@ -597,13 +573,11 @@
BUILTIN(ArraySplice) {
- Object* receiver = *args.receiver();
- FixedArray* elms = NULL;
- if (!IsJSArrayWithFastElements(receiver, &elms)
- || !ArrayPrototypeHasNoElements()) {
+ if (!ArrayPrototypeHasNoElements()) {
return CallJsBuiltin("ArraySplice", args);
}
- JSArray* array = JSArray::cast(receiver);
+
+ JSArray* array = JSArray::cast(*args.receiver());
ASSERT(array->HasFastElements());
int len = Smi::cast(array->length())->value();
@@ -644,6 +618,8 @@
}
int actual_delete_count = Min(Max(delete_count, 0), len - actual_start);
+ FixedArray* elms = FixedArray::cast(array->elements());
+
JSArray* result_array = NULL;
if (actual_delete_count == 0) {
Object* result = AllocateEmptyJSArray();
« no previous file with comments | « src/bootstrapper.cc ('k') | src/contexts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698