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

Side by Side Diff: src/bootstrapper.cc

Issue 8341009: Make the GC aware of JSReceiver pointers in LookupResults. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Inlined LookupResult constructor and destructor. Created 9 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ast.cc ('k') | src/hydrogen.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1047 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 // Note: length must be added as the first property and 1058 // Note: length must be added as the first property and
1059 // callee must be added as the second property. 1059 // callee must be added as the second property.
1060 SetLocalPropertyNoThrow(result, factory->length_symbol(), 1060 SetLocalPropertyNoThrow(result, factory->length_symbol(),
1061 factory->undefined_value(), 1061 factory->undefined_value(),
1062 DONT_ENUM); 1062 DONT_ENUM);
1063 SetLocalPropertyNoThrow(result, factory->callee_symbol(), 1063 SetLocalPropertyNoThrow(result, factory->callee_symbol(),
1064 factory->undefined_value(), 1064 factory->undefined_value(),
1065 DONT_ENUM); 1065 DONT_ENUM);
1066 1066
1067 #ifdef DEBUG 1067 #ifdef DEBUG
1068 LookupResult lookup; 1068 LookupResult lookup(isolate);
1069 result->LocalLookup(heap->callee_symbol(), &lookup); 1069 result->LocalLookup(heap->callee_symbol(), &lookup);
1070 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD)); 1070 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD));
1071 ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsCalleeIndex); 1071 ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsCalleeIndex);
1072 1072
1073 result->LocalLookup(heap->length_symbol(), &lookup); 1073 result->LocalLookup(heap->length_symbol(), &lookup);
1074 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD)); 1074 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD));
1075 ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsLengthIndex); 1075 ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsLengthIndex);
1076 1076
1077 ASSERT(result->map()->inobject_properties() > Heap::kArgumentsCalleeIndex); 1077 ASSERT(result->map()->inobject_properties() > Heap::kArgumentsCalleeIndex);
1078 ASSERT(result->map()->inobject_properties() > Heap::kArgumentsLengthIndex); 1078 ASSERT(result->map()->inobject_properties() > Heap::kArgumentsLengthIndex);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 // Allocate the arguments boilerplate object. 1155 // Allocate the arguments boilerplate object.
1156 Handle<JSObject> result = factory->NewJSObjectFromMap(map); 1156 Handle<JSObject> result = factory->NewJSObjectFromMap(map);
1157 global_context()->set_strict_mode_arguments_boilerplate(*result); 1157 global_context()->set_strict_mode_arguments_boilerplate(*result);
1158 1158
1159 // Add length property only for strict mode boilerplate. 1159 // Add length property only for strict mode boilerplate.
1160 SetLocalPropertyNoThrow(result, factory->length_symbol(), 1160 SetLocalPropertyNoThrow(result, factory->length_symbol(),
1161 factory->undefined_value(), 1161 factory->undefined_value(),
1162 DONT_ENUM); 1162 DONT_ENUM);
1163 1163
1164 #ifdef DEBUG 1164 #ifdef DEBUG
1165 LookupResult lookup; 1165 LookupResult lookup(isolate);
1166 result->LocalLookup(heap->length_symbol(), &lookup); 1166 result->LocalLookup(heap->length_symbol(), &lookup);
1167 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD)); 1167 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD));
1168 ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsLengthIndex); 1168 ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsLengthIndex);
1169 1169
1170 ASSERT(result->map()->inobject_properties() > Heap::kArgumentsLengthIndex); 1170 ASSERT(result->map()->inobject_properties() > Heap::kArgumentsLengthIndex);
1171 1171
1172 // Check the state of the object. 1172 // Check the state of the object.
1173 ASSERT(result->HasFastProperties()); 1173 ASSERT(result->HasFastProperties());
1174 ASSERT(result->HasFastElements()); 1174 ASSERT(result->HasFastElements());
1175 #endif 1175 #endif
(...skipping 905 matching lines...) Expand 10 before | Expand all | Expand 10 after
2081 } 2081 }
2082 case CONSTANT_FUNCTION: { 2082 case CONSTANT_FUNCTION: {
2083 HandleScope inner; 2083 HandleScope inner;
2084 Handle<String> key = Handle<String>(descs->GetKey(i)); 2084 Handle<String> key = Handle<String>(descs->GetKey(i));
2085 Handle<JSFunction> fun = 2085 Handle<JSFunction> fun =
2086 Handle<JSFunction>(descs->GetConstantFunction(i)); 2086 Handle<JSFunction>(descs->GetConstantFunction(i));
2087 SetLocalPropertyNoThrow(to, key, fun, details.attributes()); 2087 SetLocalPropertyNoThrow(to, key, fun, details.attributes());
2088 break; 2088 break;
2089 } 2089 }
2090 case CALLBACKS: { 2090 case CALLBACKS: {
2091 LookupResult result; 2091 LookupResult result(isolate());
2092 to->LocalLookup(descs->GetKey(i), &result); 2092 to->LocalLookup(descs->GetKey(i), &result);
2093 // If the property is already there we skip it 2093 // If the property is already there we skip it
2094 if (result.IsProperty()) continue; 2094 if (result.IsProperty()) continue;
2095 HandleScope inner; 2095 HandleScope inner;
2096 ASSERT(!to->HasFastProperties()); 2096 ASSERT(!to->HasFastProperties());
2097 // Add to dictionary. 2097 // Add to dictionary.
2098 Handle<String> key = Handle<String>(descs->GetKey(i)); 2098 Handle<String> key = Handle<String>(descs->GetKey(i));
2099 Handle<Object> callbacks(descs->GetCallbacksObject(i)); 2099 Handle<Object> callbacks(descs->GetCallbacksObject(i));
2100 PropertyDetails d = 2100 PropertyDetails d =
2101 PropertyDetails(details.attributes(), CALLBACKS, details.index()); 2101 PropertyDetails(details.attributes(), CALLBACKS, details.index());
(...skipping 17 matching lines...) Expand all
2119 } 2119 }
2120 } else { 2120 } else {
2121 Handle<StringDictionary> properties = 2121 Handle<StringDictionary> properties =
2122 Handle<StringDictionary>(from->property_dictionary()); 2122 Handle<StringDictionary>(from->property_dictionary());
2123 int capacity = properties->Capacity(); 2123 int capacity = properties->Capacity();
2124 for (int i = 0; i < capacity; i++) { 2124 for (int i = 0; i < capacity; i++) {
2125 Object* raw_key(properties->KeyAt(i)); 2125 Object* raw_key(properties->KeyAt(i));
2126 if (properties->IsKey(raw_key)) { 2126 if (properties->IsKey(raw_key)) {
2127 ASSERT(raw_key->IsString()); 2127 ASSERT(raw_key->IsString());
2128 // If the property is already there we skip it. 2128 // If the property is already there we skip it.
2129 LookupResult result; 2129 LookupResult result(isolate());
2130 to->LocalLookup(String::cast(raw_key), &result); 2130 to->LocalLookup(String::cast(raw_key), &result);
2131 if (result.IsProperty()) continue; 2131 if (result.IsProperty()) continue;
2132 // Set the property. 2132 // Set the property.
2133 Handle<String> key = Handle<String>(String::cast(raw_key)); 2133 Handle<String> key = Handle<String>(String::cast(raw_key));
2134 Handle<Object> value = Handle<Object>(properties->ValueAt(i)); 2134 Handle<Object> value = Handle<Object>(properties->ValueAt(i));
2135 if (value->IsJSGlobalPropertyCell()) { 2135 if (value->IsJSGlobalPropertyCell()) {
2136 value = Handle<Object>(JSGlobalPropertyCell::cast(*value)->value()); 2136 value = Handle<Object>(JSGlobalPropertyCell::cast(*value)->value());
2137 } 2137 }
2138 PropertyDetails details = properties->DetailsAt(i); 2138 PropertyDetails details = properties->DetailsAt(i);
2139 SetLocalPropertyNoThrow(to, key, value, details.attributes()); 2139 SetLocalPropertyNoThrow(to, key, value, details.attributes());
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2266 return from + sizeof(NestingCounterType); 2266 return from + sizeof(NestingCounterType);
2267 } 2267 }
2268 2268
2269 2269
2270 // Called when the top-level V8 mutex is destroyed. 2270 // Called when the top-level V8 mutex is destroyed.
2271 void Bootstrapper::FreeThreadResources() { 2271 void Bootstrapper::FreeThreadResources() {
2272 ASSERT(!IsActive()); 2272 ASSERT(!IsActive());
2273 } 2273 }
2274 2274
2275 } } // namespace v8::internal 2275 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/ast.cc ('k') | src/hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698