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

Side by Side Diff: src/stub-cache.cc

Issue 8337008: Handlify upper layers of LoadIC. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix cast style. 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/stub-cache.h ('k') | no next file » | 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 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 *secondary = *primary; 102 *secondary = *primary;
103 } 103 }
104 104
105 // Update primary cache. 105 // Update primary cache.
106 primary->key = name; 106 primary->key = name;
107 primary->value = code; 107 primary->value = code;
108 return code; 108 return code;
109 } 109 }
110 110
111 111
112 MaybeObject* StubCache::ComputeLoadNonexistent(String* name, 112 Handle<Code> LoadStubCompiler::CompileLoadNonexistent(Handle<String> name,
113 JSObject* receiver) { 113 Handle<JSObject> object,
114 Handle<JSObject> last) {
115 CALL_HEAP_FUNCTION(isolate(),
116 CompileLoadNonexistent(*name, *object, *last),
117 Code);
118 }
119
120
121 Handle<Code> StubCache::ComputeLoadNonexistent(Handle<String> name,
122 Handle<JSObject> receiver) {
114 ASSERT(receiver->IsGlobalObject() || receiver->HasFastProperties()); 123 ASSERT(receiver->IsGlobalObject() || receiver->HasFastProperties());
115 // If no global objects are present in the prototype chain, the load 124 // If no global objects are present in the prototype chain, the load
116 // nonexistent IC stub can be shared for all names for a given map 125 // nonexistent IC stub can be shared for all names for a given map
117 // and we use the empty string for the map cache in that case. If 126 // and we use the empty string for the map cache in that case. If
118 // there are global objects involved, we need to check global 127 // there are global objects involved, we need to check global
119 // property cells in the stub and therefore the stub will be 128 // property cells in the stub and therefore the stub will be
120 // specific to the name. 129 // specific to the name.
121 String* cache_name = heap()->empty_string(); 130 Handle<String> cache_name = factory()->empty_string();
122 if (receiver->IsGlobalObject()) cache_name = name; 131 if (receiver->IsGlobalObject()) cache_name = name;
123 JSObject* last = receiver; 132 Handle<JSObject> last = receiver;
124 while (last->GetPrototype() != heap()->null_value()) { 133 while (last->GetPrototype() != heap()->null_value()) {
125 last = JSObject::cast(last->GetPrototype()); 134 last = Handle<JSObject>(JSObject::cast(last->GetPrototype()));
126 if (last->IsGlobalObject()) cache_name = name; 135 if (last->IsGlobalObject()) cache_name = name;
127 } 136 }
128 // Compile the stub that is either shared for all names or 137 // Compile the stub that is either shared for all names or
129 // name specific if there are global objects involved. 138 // name specific if there are global objects involved.
130 Code::Flags flags = 139 Code::Flags flags =
131 Code::ComputeMonomorphicFlags(Code::LOAD_IC, NONEXISTENT); 140 Code::ComputeMonomorphicFlags(Code::LOAD_IC, NONEXISTENT);
132 Object* code = receiver->map()->FindInCodeCache(cache_name, flags); 141 Handle<Object> probe(receiver->map()->FindInCodeCache(*cache_name, flags));
133 if (code->IsUndefined()) { 142 if (probe->IsCode()) return Handle<Code>::cast(probe);
134 LoadStubCompiler compiler; 143
135 { MaybeObject* maybe_code = 144 LoadStubCompiler compiler(isolate_);
136 compiler.CompileLoadNonexistent(cache_name, receiver, last); 145 Handle<Code> code =
137 if (!maybe_code->ToObject(&code)) return maybe_code; 146 compiler.CompileLoadNonexistent(cache_name, receiver, last);
138 } 147 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *cache_name));
139 PROFILE(isolate_, 148 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *cache_name, *code));
140 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), cache_name)); 149 JSObject::UpdateMapCodeCache(isolate_, receiver, cache_name, code);
141 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, cache_name, Code::cast(code)));
142 Object* result;
143 { MaybeObject* maybe_result =
144 receiver->UpdateMapCodeCache(cache_name, Code::cast(code));
145 if (!maybe_result->ToObject(&result)) return maybe_result;
146 }
147 }
148 return code; 150 return code;
149 } 151 }
150 152
151 153
152 MaybeObject* StubCache::ComputeLoadField(String* name, 154 Handle<Code> LoadStubCompiler::CompileLoadField(Handle<JSObject> object,
153 JSObject* receiver, 155 Handle<JSObject> holder,
154 JSObject* holder, 156 int index,
157 Handle<String> name) {
158 CALL_HEAP_FUNCTION(isolate(),
159 CompileLoadField(*object, *holder, index, *name),
160 Code);
161 }
162
163
164 Handle<Code> StubCache::ComputeLoadField(Handle<String> name,
165 Handle<JSObject> receiver,
166 Handle<JSObject> holder,
155 int field_index) { 167 int field_index) {
156 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 168 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
157 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD); 169 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, FIELD);
158 Object* code = receiver->map()->FindInCodeCache(name, flags); 170 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
159 if (code->IsUndefined()) { 171 if (probe->IsCode()) return Handle<Code>::cast(probe);
160 LoadStubCompiler compiler; 172
161 { MaybeObject* maybe_code = 173 LoadStubCompiler compiler(isolate_);
162 compiler.CompileLoadField(receiver, holder, field_index, name); 174 Handle<Code> code =
163 if (!maybe_code->ToObject(&code)) return maybe_code; 175 compiler.CompileLoadField(receiver, holder, field_index, name);
164 } 176 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
165 PROFILE(isolate_, 177 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
166 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 178 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
167 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
168 Object* result;
169 { MaybeObject* maybe_result =
170 receiver->UpdateMapCodeCache(name, Code::cast(code));
171 if (!maybe_result->ToObject(&result)) return maybe_result;
172 }
173 }
174 return code; 179 return code;
175 } 180 }
176 181
177 182
178 MaybeObject* StubCache::ComputeLoadCallback(String* name, 183 Handle<Code> LoadStubCompiler::CompileLoadCallback(
179 JSObject* receiver, 184 Handle<String> name,
180 JSObject* holder, 185 Handle<JSObject> object,
181 AccessorInfo* callback) { 186 Handle<JSObject> holder,
187 Handle<AccessorInfo> callback) {
188 CALL_HEAP_FUNCTION(isolate(),
189 CompileLoadCallback(*name, *object, *holder, *callback),
190 Code);
191 }
192
193
194 Handle<Code> StubCache::ComputeLoadCallback(Handle<String> name,
195 Handle<JSObject> receiver,
196 Handle<JSObject> holder,
197 Handle<AccessorInfo> callback) {
182 ASSERT(v8::ToCData<Address>(callback->getter()) != 0); 198 ASSERT(v8::ToCData<Address>(callback->getter()) != 0);
183 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 199 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
184 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS); 200 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS);
185 Object* code = receiver->map()->FindInCodeCache(name, flags); 201 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
186 if (code->IsUndefined()) { 202 if (probe->IsCode()) return Handle<Code>::cast(probe);
187 LoadStubCompiler compiler; 203
188 { MaybeObject* maybe_code = 204 LoadStubCompiler compiler(isolate_);
189 compiler.CompileLoadCallback(name, receiver, holder, callback); 205 Handle<Code> code =
190 if (!maybe_code->ToObject(&code)) return maybe_code; 206 compiler.CompileLoadCallback(name, receiver, holder, callback);
191 } 207 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
192 PROFILE(isolate_, 208 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
193 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 209 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
194 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
195 Object* result;
196 { MaybeObject* maybe_result =
197 receiver->UpdateMapCodeCache(name, Code::cast(code));
198 if (!maybe_result->ToObject(&result)) return maybe_result;
199 }
200 }
201 return code; 210 return code;
202 } 211 }
203 212
204 213
205 MaybeObject* StubCache::ComputeLoadConstant(String* name, 214 Handle<Code> LoadStubCompiler::CompileLoadConstant(Handle<JSObject> object,
206 JSObject* receiver, 215 Handle<JSObject> holder,
207 JSObject* holder, 216 Handle<Object> value,
208 Object* value) { 217 Handle<String> name) {
209 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 218 CALL_HEAP_FUNCTION(isolate(),
219 CompileLoadConstant(*object, *holder, *value, *name),
220 Code);
221 }
222
223
224 Handle<Code> StubCache::ComputeLoadConstant(Handle<String> name,
225 Handle<JSObject> receiver,
226 Handle<JSObject> holder,
227 Handle<Object> value) {
228 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
210 Code::Flags flags = 229 Code::Flags flags =
211 Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION); 230 Code::ComputeMonomorphicFlags(Code::LOAD_IC, CONSTANT_FUNCTION);
212 Object* code = receiver->map()->FindInCodeCache(name, flags); 231 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
213 if (code->IsUndefined()) { 232 if (probe->IsCode()) return Handle<Code>::cast(probe);
214 LoadStubCompiler compiler; 233
215 { MaybeObject* maybe_code = 234 LoadStubCompiler compiler(isolate_);
216 compiler.CompileLoadConstant(receiver, holder, value, name); 235 Handle<Code> code =
217 if (!maybe_code->ToObject(&code)) return maybe_code; 236 compiler.CompileLoadConstant(receiver, holder, value, name);
218 } 237 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
219 PROFILE(isolate_, 238 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
220 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 239 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
221 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
222 Object* result;
223 { MaybeObject* maybe_result =
224 receiver->UpdateMapCodeCache(name, Code::cast(code));
225 if (!maybe_result->ToObject(&result)) return maybe_result;
226 }
227 }
228 return code; 240 return code;
229 } 241 }
230 242
231 243
232 MaybeObject* StubCache::ComputeLoadInterceptor(String* name, 244 Handle<Code> LoadStubCompiler::CompileLoadInterceptor(Handle<JSObject> object,
233 JSObject* receiver, 245 Handle<JSObject> holder,
234 JSObject* holder) { 246 Handle<String> name) {
235 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 247 CALL_HEAP_FUNCTION(isolate(),
248 CompileLoadInterceptor(*object, *holder, *name),
249 Code);
250 }
251
252
253 Handle<Code> StubCache::ComputeLoadInterceptor(Handle<String> name,
254 Handle<JSObject> receiver,
255 Handle<JSObject> holder) {
256 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
236 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR); 257 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, INTERCEPTOR);
237 Object* code = receiver->map()->FindInCodeCache(name, flags); 258 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
238 if (code->IsUndefined()) { 259 if (probe->IsCode()) return Handle<Code>::cast(probe);
239 LoadStubCompiler compiler; 260
240 { MaybeObject* maybe_code = 261 LoadStubCompiler compiler(isolate_);
241 compiler.CompileLoadInterceptor(receiver, holder, name); 262 Handle<Code> code =
242 if (!maybe_code->ToObject(&code)) return maybe_code; 263 compiler.CompileLoadInterceptor(receiver, holder, name);
243 } 264 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
244 PROFILE(isolate_, 265 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
245 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name)); 266 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
246 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
247 Object* result;
248 { MaybeObject* maybe_result =
249 receiver->UpdateMapCodeCache(name, Code::cast(code));
250 if (!maybe_result->ToObject(&result)) return maybe_result;
251 }
252 }
253 return code; 267 return code;
254 } 268 }
255 269
256 270
257 MaybeObject* StubCache::ComputeLoadNormal() { 271 Handle<Code> StubCache::ComputeLoadNormal() {
258 return isolate_->builtins()->builtin(Builtins::kLoadIC_Normal); 272 return isolate_->builtins()->LoadIC_Normal();
259 } 273 }
260 274
275 Handle<Code> LoadStubCompiler::CompileLoadGlobal(
276 Handle<JSObject> object,
277 Handle<GlobalObject> holder,
278 Handle<JSGlobalPropertyCell> cell,
279 Handle<String> name,
280 bool is_dont_delete) {
281 CALL_HEAP_FUNCTION(isolate(),
282 CompileLoadGlobal(*object,
283 *holder,
284 *cell,
285 *name,
286 is_dont_delete),
287 Code);
288 }
289 Handle<Code> StubCache::ComputeLoadGlobal(Handle<String> name,
290 Handle<JSObject> receiver,
291 Handle<GlobalObject> holder,
292 Handle<JSGlobalPropertyCell> cell,
293 bool is_dont_delete) {
294 ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
295 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, NORMAL);
296 Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
297 if (probe->IsCode()) return Handle<Code>::cast(probe);
261 298
262 MaybeObject* StubCache::ComputeLoadGlobal(String* name, 299 LoadStubCompiler compiler(isolate_);
263 JSObject* receiver, 300 Handle<Code> code =
264 GlobalObject* holder, 301 compiler.CompileLoadGlobal(receiver, holder, cell, name, is_dont_delete);
265 JSGlobalPropertyCell* cell, 302 PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
266 bool is_dont_delete) { 303 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
267 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 304 JSObject::UpdateMapCodeCache(isolate_, receiver, name, code);
268 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, NORMAL);
269 Object* code = receiver->map()->FindInCodeCache(name, flags);
270 if (code->IsUndefined()) {
271 LoadStubCompiler compiler;
272 { MaybeObject* maybe_code = compiler.CompileLoadGlobal(receiver,
273 holder,
274 cell,
275 name,
276 is_dont_delete);
277 if (!maybe_code->ToObject(&code)) return maybe_code;
278 }
279 PROFILE(isolate_,
280 CodeCreateEvent(Logger::LOAD_IC_TAG, Code::cast(code), name));
281 GDBJIT(AddCode(GDBJITInterface::LOAD_IC, name, Code::cast(code)));
282 Object* result;
283 { MaybeObject* maybe_result =
284 receiver->UpdateMapCodeCache(name, Code::cast(code));
285 if (!maybe_result->ToObject(&result)) return maybe_result;
286 }
287 }
288 return code; 305 return code;
289 } 306 }
290 307
291 308
292 MaybeObject* StubCache::ComputeKeyedLoadField(String* name, 309 MaybeObject* StubCache::ComputeKeyedLoadField(String* name,
293 JSObject* receiver, 310 JSObject* receiver,
294 JSObject* holder, 311 JSObject* holder,
295 int field_index) { 312 int field_index) {
296 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 313 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
297 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD); 314 Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, FIELD);
298 Object* code = receiver->map()->FindInCodeCache(name, flags); 315 Object* code = receiver->map()->FindInCodeCache(name, flags);
299 if (code->IsUndefined()) { 316 if (code->IsUndefined()) {
300 KeyedLoadStubCompiler compiler; 317 HandleScope scope(isolate_);
318 KeyedLoadStubCompiler compiler(isolate_);
301 { MaybeObject* maybe_code = 319 { MaybeObject* maybe_code =
302 compiler.CompileLoadField(name, receiver, holder, field_index); 320 compiler.CompileLoadField(name, receiver, holder, field_index);
303 if (!maybe_code->ToObject(&code)) return maybe_code; 321 if (!maybe_code->ToObject(&code)) return maybe_code;
304 } 322 }
305 PROFILE(isolate_, 323 PROFILE(isolate_,
306 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 324 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
307 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 325 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
308 Object* result; 326 Object* result;
309 { MaybeObject* maybe_result = 327 { MaybeObject* maybe_result =
310 receiver->UpdateMapCodeCache(name, Code::cast(code)); 328 receiver->UpdateMapCodeCache(name, Code::cast(code));
311 if (!maybe_result->ToObject(&result)) return maybe_result; 329 if (!maybe_result->ToObject(&result)) return maybe_result;
312 } 330 }
313 } 331 }
314 return code; 332 return code;
315 } 333 }
316 334
317 335
318 MaybeObject* StubCache::ComputeKeyedLoadConstant(String* name, 336 MaybeObject* StubCache::ComputeKeyedLoadConstant(String* name,
319 JSObject* receiver, 337 JSObject* receiver,
320 JSObject* holder, 338 JSObject* holder,
321 Object* value) { 339 Object* value) {
322 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 340 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
323 Code::Flags flags = 341 Code::Flags flags =
324 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION); 342 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CONSTANT_FUNCTION);
325 Object* code = receiver->map()->FindInCodeCache(name, flags); 343 Object* code = receiver->map()->FindInCodeCache(name, flags);
326 if (code->IsUndefined()) { 344 if (code->IsUndefined()) {
327 KeyedLoadStubCompiler compiler; 345 HandleScope scope(isolate_);
346 KeyedLoadStubCompiler compiler(isolate_);
328 { MaybeObject* maybe_code = 347 { MaybeObject* maybe_code =
329 compiler.CompileLoadConstant(name, receiver, holder, value); 348 compiler.CompileLoadConstant(name, receiver, holder, value);
330 if (!maybe_code->ToObject(&code)) return maybe_code; 349 if (!maybe_code->ToObject(&code)) return maybe_code;
331 } 350 }
332 PROFILE(isolate_, 351 PROFILE(isolate_,
333 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 352 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
334 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 353 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
335 Object* result; 354 Object* result;
336 { MaybeObject* maybe_result = 355 { MaybeObject* maybe_result =
337 receiver->UpdateMapCodeCache(name, Code::cast(code)); 356 receiver->UpdateMapCodeCache(name, Code::cast(code));
338 if (!maybe_result->ToObject(&result)) return maybe_result; 357 if (!maybe_result->ToObject(&result)) return maybe_result;
339 } 358 }
340 } 359 }
341 return code; 360 return code;
342 } 361 }
343 362
344 363
345 MaybeObject* StubCache::ComputeKeyedLoadInterceptor(String* name, 364 MaybeObject* StubCache::ComputeKeyedLoadInterceptor(String* name,
346 JSObject* receiver, 365 JSObject* receiver,
347 JSObject* holder) { 366 JSObject* holder) {
348 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 367 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
349 Code::Flags flags = 368 Code::Flags flags =
350 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR); 369 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, INTERCEPTOR);
351 Object* code = receiver->map()->FindInCodeCache(name, flags); 370 Object* code = receiver->map()->FindInCodeCache(name, flags);
352 if (code->IsUndefined()) { 371 if (code->IsUndefined()) {
353 KeyedLoadStubCompiler compiler; 372 HandleScope scope(isolate_);
373 KeyedLoadStubCompiler compiler(isolate_);
354 { MaybeObject* maybe_code = 374 { MaybeObject* maybe_code =
355 compiler.CompileLoadInterceptor(receiver, holder, name); 375 compiler.CompileLoadInterceptor(receiver, holder, name);
356 if (!maybe_code->ToObject(&code)) return maybe_code; 376 if (!maybe_code->ToObject(&code)) return maybe_code;
357 } 377 }
358 PROFILE(isolate_, 378 PROFILE(isolate_,
359 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 379 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
360 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 380 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
361 Object* result; 381 Object* result;
362 { MaybeObject* maybe_result = 382 { MaybeObject* maybe_result =
363 receiver->UpdateMapCodeCache(name, Code::cast(code)); 383 receiver->UpdateMapCodeCache(name, Code::cast(code));
364 if (!maybe_result->ToObject(&result)) return maybe_result; 384 if (!maybe_result->ToObject(&result)) return maybe_result;
365 } 385 }
366 } 386 }
367 return code; 387 return code;
368 } 388 }
369 389
370 390
371 MaybeObject* StubCache::ComputeKeyedLoadCallback(String* name, 391 MaybeObject* StubCache::ComputeKeyedLoadCallback(String* name,
372 JSObject* receiver, 392 JSObject* receiver,
373 JSObject* holder, 393 JSObject* holder,
374 AccessorInfo* callback) { 394 AccessorInfo* callback) {
375 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP); 395 ASSERT(IC::GetCodeCacheForObject(receiver, holder) == OWN_MAP);
376 Code::Flags flags = 396 Code::Flags flags =
377 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 397 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
378 Object* code = receiver->map()->FindInCodeCache(name, flags); 398 Object* code = receiver->map()->FindInCodeCache(name, flags);
379 if (code->IsUndefined()) { 399 if (code->IsUndefined()) {
380 KeyedLoadStubCompiler compiler; 400 HandleScope scope(isolate_);
401 KeyedLoadStubCompiler compiler(isolate_);
381 { MaybeObject* maybe_code = 402 { MaybeObject* maybe_code =
382 compiler.CompileLoadCallback(name, receiver, holder, callback); 403 compiler.CompileLoadCallback(name, receiver, holder, callback);
383 if (!maybe_code->ToObject(&code)) return maybe_code; 404 if (!maybe_code->ToObject(&code)) return maybe_code;
384 } 405 }
385 PROFILE(isolate_, 406 PROFILE(isolate_,
386 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 407 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
387 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 408 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
388 Object* result; 409 Object* result;
389 { MaybeObject* maybe_result = 410 { MaybeObject* maybe_result =
390 receiver->UpdateMapCodeCache(name, Code::cast(code)); 411 receiver->UpdateMapCodeCache(name, Code::cast(code));
391 if (!maybe_result->ToObject(&result)) return maybe_result; 412 if (!maybe_result->ToObject(&result)) return maybe_result;
392 } 413 }
393 } 414 }
394 return code; 415 return code;
395 } 416 }
396 417
397 418
398 419
399 MaybeObject* StubCache::ComputeKeyedLoadArrayLength(String* name, 420 MaybeObject* StubCache::ComputeKeyedLoadArrayLength(String* name,
400 JSArray* receiver) { 421 JSArray* receiver) {
401 Code::Flags flags = 422 Code::Flags flags =
402 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 423 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
403 ASSERT(receiver->IsJSObject()); 424 ASSERT(receiver->IsJSObject());
404 Object* code = receiver->map()->FindInCodeCache(name, flags); 425 Object* code = receiver->map()->FindInCodeCache(name, flags);
405 if (code->IsUndefined()) { 426 if (code->IsUndefined()) {
406 KeyedLoadStubCompiler compiler; 427 HandleScope scope(isolate_);
428 KeyedLoadStubCompiler compiler(isolate_);
407 { MaybeObject* maybe_code = compiler.CompileLoadArrayLength(name); 429 { MaybeObject* maybe_code = compiler.CompileLoadArrayLength(name);
408 if (!maybe_code->ToObject(&code)) return maybe_code; 430 if (!maybe_code->ToObject(&code)) return maybe_code;
409 } 431 }
410 PROFILE(isolate_, 432 PROFILE(isolate_,
411 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 433 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
412 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 434 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
413 Object* result; 435 Object* result;
414 { MaybeObject* maybe_result = 436 { MaybeObject* maybe_result =
415 receiver->UpdateMapCodeCache(name, Code::cast(code)); 437 receiver->UpdateMapCodeCache(name, Code::cast(code));
416 if (!maybe_result->ToObject(&result)) return maybe_result; 438 if (!maybe_result->ToObject(&result)) return maybe_result;
417 } 439 }
418 } 440 }
419 return code; 441 return code;
420 } 442 }
421 443
422 444
423 MaybeObject* StubCache::ComputeKeyedLoadStringLength(String* name, 445 MaybeObject* StubCache::ComputeKeyedLoadStringLength(String* name,
424 String* receiver) { 446 String* receiver) {
425 Code::Flags flags = 447 Code::Flags flags =
426 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 448 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
427 Map* map = receiver->map(); 449 Map* map = receiver->map();
428 Object* code = map->FindInCodeCache(name, flags); 450 Object* code = map->FindInCodeCache(name, flags);
429 if (code->IsUndefined()) { 451 if (code->IsUndefined()) {
430 KeyedLoadStubCompiler compiler; 452 HandleScope scope(isolate_);
453 KeyedLoadStubCompiler compiler(isolate_);
431 { MaybeObject* maybe_code = compiler.CompileLoadStringLength(name); 454 { MaybeObject* maybe_code = compiler.CompileLoadStringLength(name);
432 if (!maybe_code->ToObject(&code)) return maybe_code; 455 if (!maybe_code->ToObject(&code)) return maybe_code;
433 } 456 }
434 PROFILE(isolate_, 457 PROFILE(isolate_,
435 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 458 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
436 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 459 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
437 Object* result; 460 Object* result;
438 { MaybeObject* maybe_result = map->UpdateCodeCache(name, Code::cast(code)); 461 { MaybeObject* maybe_result = map->UpdateCodeCache(name, Code::cast(code));
439 if (!maybe_result->ToObject(&result)) return maybe_result; 462 if (!maybe_result->ToObject(&result)) return maybe_result;
440 } 463 }
441 } 464 }
442 return code; 465 return code;
443 } 466 }
444 467
445 468
446 MaybeObject* StubCache::ComputeKeyedLoadFunctionPrototype( 469 MaybeObject* StubCache::ComputeKeyedLoadFunctionPrototype(
447 String* name, 470 String* name,
448 JSFunction* receiver) { 471 JSFunction* receiver) {
449 Code::Flags flags = 472 Code::Flags flags =
450 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS); 473 Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, CALLBACKS);
451 Object* code = receiver->map()->FindInCodeCache(name, flags); 474 Object* code = receiver->map()->FindInCodeCache(name, flags);
452 if (code->IsUndefined()) { 475 if (code->IsUndefined()) {
453 KeyedLoadStubCompiler compiler; 476 HandleScope scope(isolate_);
477 KeyedLoadStubCompiler compiler(isolate_);
454 { MaybeObject* maybe_code = compiler.CompileLoadFunctionPrototype(name); 478 { MaybeObject* maybe_code = compiler.CompileLoadFunctionPrototype(name);
455 if (!maybe_code->ToObject(&code)) return maybe_code; 479 if (!maybe_code->ToObject(&code)) return maybe_code;
456 } 480 }
457 PROFILE(isolate_, 481 PROFILE(isolate_,
458 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name)); 482 CodeCreateEvent(Logger::KEYED_LOAD_IC_TAG, Code::cast(code), name));
459 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code))); 483 GDBJIT(AddCode(GDBJITInterface::KEYED_LOAD_IC, name, Code::cast(code)));
460 Object* result; 484 Object* result;
461 { MaybeObject* maybe_result = 485 { MaybeObject* maybe_result =
462 receiver->UpdateMapCodeCache(name, Code::cast(code)); 486 receiver->UpdateMapCodeCache(name, Code::cast(code));
463 if (!maybe_result->ToObject(&result)) return maybe_result; 487 if (!maybe_result->ToObject(&result)) return maybe_result;
464 } 488 }
465 } 489 }
466 return code; 490 return code;
467 } 491 }
468 492
469 493
470 MaybeObject* StubCache::ComputeStoreField(String* name, 494 MaybeObject* StubCache::ComputeStoreField(String* name,
471 JSObject* receiver, 495 JSObject* receiver,
472 int field_index, 496 int field_index,
473 Map* transition, 497 Map* transition,
474 StrictModeFlag strict_mode) { 498 StrictModeFlag strict_mode) {
475 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION; 499 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
476 Code::Flags flags = Code::ComputeMonomorphicFlags( 500 Code::Flags flags = Code::ComputeMonomorphicFlags(
477 Code::STORE_IC, type, strict_mode); 501 Code::STORE_IC, type, strict_mode);
478 Object* code = receiver->map()->FindInCodeCache(name, flags); 502 Object* code = receiver->map()->FindInCodeCache(name, flags);
479 if (code->IsUndefined()) { 503 if (code->IsUndefined()) {
480 StoreStubCompiler compiler(strict_mode); 504 HandleScope scope(isolate_);
505 StoreStubCompiler compiler(isolate_, strict_mode);
481 { MaybeObject* maybe_code = 506 { MaybeObject* maybe_code =
482 compiler.CompileStoreField(receiver, field_index, transition, name); 507 compiler.CompileStoreField(receiver, field_index, transition, name);
483 if (!maybe_code->ToObject(&code)) return maybe_code; 508 if (!maybe_code->ToObject(&code)) return maybe_code;
484 } 509 }
485 PROFILE(isolate_, 510 PROFILE(isolate_,
486 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 511 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
487 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 512 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
488 Object* result; 513 Object* result;
489 { MaybeObject* maybe_result = 514 { MaybeObject* maybe_result =
490 receiver->UpdateMapCodeCache(name, Code::cast(code)); 515 receiver->UpdateMapCodeCache(name, Code::cast(code));
(...skipping 26 matching lines...) Expand all
517 UNREACHABLE(); 542 UNREACHABLE();
518 break; 543 break;
519 } 544 }
520 Object* maybe_code = receiver->map()->FindInCodeCache(name, flags); 545 Object* maybe_code = receiver->map()->FindInCodeCache(name, flags);
521 if (!maybe_code->IsUndefined()) return Code::cast(maybe_code); 546 if (!maybe_code->IsUndefined()) return Code::cast(maybe_code);
522 547
523 Map* receiver_map = receiver->map(); 548 Map* receiver_map = receiver->map();
524 MaybeObject* maybe_new_code = NULL; 549 MaybeObject* maybe_new_code = NULL;
525 switch (stub_kind) { 550 switch (stub_kind) {
526 case KeyedIC::LOAD: { 551 case KeyedIC::LOAD: {
527 KeyedLoadStubCompiler compiler; 552 HandleScope scope(isolate_);
553 KeyedLoadStubCompiler compiler(isolate_);
528 maybe_new_code = compiler.CompileLoadElement(receiver_map); 554 maybe_new_code = compiler.CompileLoadElement(receiver_map);
529 break; 555 break;
530 } 556 }
531 case KeyedIC::STORE_NO_TRANSITION: { 557 case KeyedIC::STORE_NO_TRANSITION: {
532 KeyedStoreStubCompiler compiler(strict_mode); 558 HandleScope scope(isolate_);
559 KeyedStoreStubCompiler compiler(isolate_, strict_mode);
533 maybe_new_code = compiler.CompileStoreElement(receiver_map); 560 maybe_new_code = compiler.CompileStoreElement(receiver_map);
534 break; 561 break;
535 } 562 }
536 default: 563 default:
537 UNREACHABLE(); 564 UNREACHABLE();
538 break; 565 break;
539 } 566 }
540 Code* code = NULL; 567 Code* code = NULL;
541 if (!maybe_new_code->To(&code)) return maybe_new_code; 568 if (!maybe_new_code->To(&code)) return maybe_new_code;
542 569
(...skipping 24 matching lines...) Expand all
567 594
568 595
569 MaybeObject* StubCache::ComputeStoreGlobal(String* name, 596 MaybeObject* StubCache::ComputeStoreGlobal(String* name,
570 GlobalObject* receiver, 597 GlobalObject* receiver,
571 JSGlobalPropertyCell* cell, 598 JSGlobalPropertyCell* cell,
572 StrictModeFlag strict_mode) { 599 StrictModeFlag strict_mode) {
573 Code::Flags flags = Code::ComputeMonomorphicFlags( 600 Code::Flags flags = Code::ComputeMonomorphicFlags(
574 Code::STORE_IC, NORMAL, strict_mode); 601 Code::STORE_IC, NORMAL, strict_mode);
575 Object* code = receiver->map()->FindInCodeCache(name, flags); 602 Object* code = receiver->map()->FindInCodeCache(name, flags);
576 if (code->IsUndefined()) { 603 if (code->IsUndefined()) {
577 StoreStubCompiler compiler(strict_mode); 604 HandleScope scope(isolate_);
605 StoreStubCompiler compiler(isolate_, strict_mode);
578 { MaybeObject* maybe_code = 606 { MaybeObject* maybe_code =
579 compiler.CompileStoreGlobal(receiver, cell, name); 607 compiler.CompileStoreGlobal(receiver, cell, name);
580 if (!maybe_code->ToObject(&code)) return maybe_code; 608 if (!maybe_code->ToObject(&code)) return maybe_code;
581 } 609 }
582 PROFILE(isolate_, 610 PROFILE(isolate_,
583 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 611 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
584 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 612 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
585 Object* result; 613 Object* result;
586 { MaybeObject* maybe_result = 614 { MaybeObject* maybe_result =
587 receiver->UpdateMapCodeCache(name, Code::cast(code)); 615 receiver->UpdateMapCodeCache(name, Code::cast(code));
588 if (!maybe_result->ToObject(&result)) return maybe_result; 616 if (!maybe_result->ToObject(&result)) return maybe_result;
589 } 617 }
590 } 618 }
591 return code; 619 return code;
592 } 620 }
593 621
594 622
595 MaybeObject* StubCache::ComputeStoreCallback( 623 MaybeObject* StubCache::ComputeStoreCallback(
596 String* name, 624 String* name,
597 JSObject* receiver, 625 JSObject* receiver,
598 AccessorInfo* callback, 626 AccessorInfo* callback,
599 StrictModeFlag strict_mode) { 627 StrictModeFlag strict_mode) {
600 ASSERT(v8::ToCData<Address>(callback->setter()) != 0); 628 ASSERT(v8::ToCData<Address>(callback->setter()) != 0);
601 Code::Flags flags = Code::ComputeMonomorphicFlags( 629 Code::Flags flags = Code::ComputeMonomorphicFlags(
602 Code::STORE_IC, CALLBACKS, strict_mode); 630 Code::STORE_IC, CALLBACKS, strict_mode);
603 Object* code = receiver->map()->FindInCodeCache(name, flags); 631 Object* code = receiver->map()->FindInCodeCache(name, flags);
604 if (code->IsUndefined()) { 632 if (code->IsUndefined()) {
605 StoreStubCompiler compiler(strict_mode); 633 HandleScope scope(isolate_);
634 StoreStubCompiler compiler(isolate_, strict_mode);
606 { MaybeObject* maybe_code = 635 { MaybeObject* maybe_code =
607 compiler.CompileStoreCallback(receiver, callback, name); 636 compiler.CompileStoreCallback(receiver, callback, name);
608 if (!maybe_code->ToObject(&code)) return maybe_code; 637 if (!maybe_code->ToObject(&code)) return maybe_code;
609 } 638 }
610 PROFILE(isolate_, 639 PROFILE(isolate_,
611 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 640 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
612 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 641 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
613 Object* result; 642 Object* result;
614 { MaybeObject* maybe_result = 643 { MaybeObject* maybe_result =
615 receiver->UpdateMapCodeCache(name, Code::cast(code)); 644 receiver->UpdateMapCodeCache(name, Code::cast(code));
616 if (!maybe_result->ToObject(&result)) return maybe_result; 645 if (!maybe_result->ToObject(&result)) return maybe_result;
617 } 646 }
618 } 647 }
619 return code; 648 return code;
620 } 649 }
621 650
622 651
623 MaybeObject* StubCache::ComputeStoreInterceptor( 652 MaybeObject* StubCache::ComputeStoreInterceptor(
624 String* name, 653 String* name,
625 JSObject* receiver, 654 JSObject* receiver,
626 StrictModeFlag strict_mode) { 655 StrictModeFlag strict_mode) {
627 Code::Flags flags = Code::ComputeMonomorphicFlags( 656 Code::Flags flags = Code::ComputeMonomorphicFlags(
628 Code::STORE_IC, INTERCEPTOR, strict_mode); 657 Code::STORE_IC, INTERCEPTOR, strict_mode);
629 Object* code = receiver->map()->FindInCodeCache(name, flags); 658 Object* code = receiver->map()->FindInCodeCache(name, flags);
630 if (code->IsUndefined()) { 659 if (code->IsUndefined()) {
631 StoreStubCompiler compiler(strict_mode); 660 HandleScope scope(isolate_);
661 StoreStubCompiler compiler(isolate_, strict_mode);
632 { MaybeObject* maybe_code = 662 { MaybeObject* maybe_code =
633 compiler.CompileStoreInterceptor(receiver, name); 663 compiler.CompileStoreInterceptor(receiver, name);
634 if (!maybe_code->ToObject(&code)) return maybe_code; 664 if (!maybe_code->ToObject(&code)) return maybe_code;
635 } 665 }
636 PROFILE(isolate_, 666 PROFILE(isolate_,
637 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name)); 667 CodeCreateEvent(Logger::STORE_IC_TAG, Code::cast(code), name));
638 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code))); 668 GDBJIT(AddCode(GDBJITInterface::STORE_IC, name, Code::cast(code)));
639 Object* result; 669 Object* result;
640 { MaybeObject* maybe_result = 670 { MaybeObject* maybe_result =
641 receiver->UpdateMapCodeCache(name, Code::cast(code)); 671 receiver->UpdateMapCodeCache(name, Code::cast(code));
642 if (!maybe_result->ToObject(&result)) return maybe_result; 672 if (!maybe_result->ToObject(&result)) return maybe_result;
643 } 673 }
644 } 674 }
645 return code; 675 return code;
646 } 676 }
647 677
648 678
649 MaybeObject* StubCache::ComputeKeyedStoreField(String* name, 679 MaybeObject* StubCache::ComputeKeyedStoreField(String* name,
650 JSObject* receiver, 680 JSObject* receiver,
651 int field_index, 681 int field_index,
652 Map* transition, 682 Map* transition,
653 StrictModeFlag strict_mode) { 683 StrictModeFlag strict_mode) {
654 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION; 684 PropertyType type = (transition == NULL) ? FIELD : MAP_TRANSITION;
655 Code::Flags flags = Code::ComputeMonomorphicFlags( 685 Code::Flags flags = Code::ComputeMonomorphicFlags(
656 Code::KEYED_STORE_IC, type, strict_mode); 686 Code::KEYED_STORE_IC, type, strict_mode);
657 Object* code = receiver->map()->FindInCodeCache(name, flags); 687 Object* code = receiver->map()->FindInCodeCache(name, flags);
658 if (code->IsUndefined()) { 688 if (code->IsUndefined()) {
659 KeyedStoreStubCompiler compiler(strict_mode); 689 HandleScope scope(isolate());
690 KeyedStoreStubCompiler compiler(isolate(), strict_mode);
660 { MaybeObject* maybe_code = 691 { MaybeObject* maybe_code =
661 compiler.CompileStoreField(receiver, field_index, transition, name); 692 compiler.CompileStoreField(receiver, field_index, transition, name);
662 if (!maybe_code->ToObject(&code)) return maybe_code; 693 if (!maybe_code->ToObject(&code)) return maybe_code;
663 } 694 }
664 PROFILE(isolate(), 695 PROFILE(isolate(),
665 CodeCreateEvent(Logger::KEYED_STORE_IC_TAG, 696 CodeCreateEvent(Logger::KEYED_STORE_IC_TAG,
666 Code::cast(code), name)); 697 Code::cast(code), name));
667 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, name, Code::cast(code))); 698 GDBJIT(AddCode(GDBJITInterface::KEYED_STORE_IC, name, Code::cast(code)));
668 Object* result; 699 Object* result;
669 { MaybeObject* maybe_result = 700 { MaybeObject* maybe_result =
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 cache_holder, 736 cache_holder,
706 argc); 737 argc);
707 Object* code = map_holder->map()->FindInCodeCache(name, flags); 738 Object* code = map_holder->map()->FindInCodeCache(name, flags);
708 if (code->IsUndefined()) { 739 if (code->IsUndefined()) {
709 // If the function hasn't been compiled yet, we cannot do it now 740 // If the function hasn't been compiled yet, we cannot do it now
710 // because it may cause GC. To avoid this issue, we return an 741 // because it may cause GC. To avoid this issue, we return an
711 // internal error which will make sure we do not update any 742 // internal error which will make sure we do not update any
712 // caches. 743 // caches.
713 if (!function->is_compiled()) return Failure::InternalError(); 744 if (!function->is_compiled()) return Failure::InternalError();
714 // Compile the stub - only create stubs for fully compiled functions. 745 // Compile the stub - only create stubs for fully compiled functions.
715 CallStubCompiler compiler(argc, kind, extra_ic_state, cache_holder); 746 HandleScope scope(isolate_);
747 CallStubCompiler compiler(isolate_,
748 argc,
749 kind,
750 extra_ic_state,
751 cache_holder);
716 { MaybeObject* maybe_code = 752 { MaybeObject* maybe_code =
717 compiler.CompileCallConstant(object, holder, function, name, check); 753 compiler.CompileCallConstant(object, holder, function, name, check);
718 if (!maybe_code->ToObject(&code)) return maybe_code; 754 if (!maybe_code->ToObject(&code)) return maybe_code;
719 } 755 }
720 Code::cast(code)->set_check_type(check); 756 Code::cast(code)->set_check_type(check);
721 ASSERT_EQ(flags, Code::cast(code)->flags()); 757 ASSERT_EQ(flags, Code::cast(code)->flags());
722 PROFILE(isolate_, 758 PROFILE(isolate_,
723 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 759 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
724 Code::cast(code), name)); 760 Code::cast(code), name));
725 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 761 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
(...skipping 26 matching lines...) Expand all
752 object = holder; 788 object = holder;
753 } 789 }
754 790
755 Code::Flags flags = Code::ComputeMonomorphicFlags(kind, 791 Code::Flags flags = Code::ComputeMonomorphicFlags(kind,
756 FIELD, 792 FIELD,
757 extra_ic_state, 793 extra_ic_state,
758 cache_holder, 794 cache_holder,
759 argc); 795 argc);
760 Object* code = map_holder->map()->FindInCodeCache(name, flags); 796 Object* code = map_holder->map()->FindInCodeCache(name, flags);
761 if (code->IsUndefined()) { 797 if (code->IsUndefined()) {
762 CallStubCompiler compiler(argc, kind, extra_ic_state, cache_holder); 798 HandleScope scope(isolate_);
799 CallStubCompiler compiler(isolate_,
800 argc,
801 kind,
802 extra_ic_state,
803 cache_holder);
763 { MaybeObject* maybe_code = 804 { MaybeObject* maybe_code =
764 compiler.CompileCallField(JSObject::cast(object), 805 compiler.CompileCallField(JSObject::cast(object),
765 holder, 806 holder,
766 index, 807 index,
767 name); 808 name);
768 if (!maybe_code->ToObject(&code)) return maybe_code; 809 if (!maybe_code->ToObject(&code)) return maybe_code;
769 } 810 }
770 ASSERT_EQ(flags, Code::cast(code)->flags()); 811 ASSERT_EQ(flags, Code::cast(code)->flags());
771 PROFILE(isolate_, 812 PROFILE(isolate_,
772 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 813 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
(...skipping 28 matching lines...) Expand all
801 object = holder; 842 object = holder;
802 } 843 }
803 844
804 Code::Flags flags = Code::ComputeMonomorphicFlags(kind, 845 Code::Flags flags = Code::ComputeMonomorphicFlags(kind,
805 INTERCEPTOR, 846 INTERCEPTOR,
806 extra_ic_state, 847 extra_ic_state,
807 cache_holder, 848 cache_holder,
808 argc); 849 argc);
809 Object* code = map_holder->map()->FindInCodeCache(name, flags); 850 Object* code = map_holder->map()->FindInCodeCache(name, flags);
810 if (code->IsUndefined()) { 851 if (code->IsUndefined()) {
811 CallStubCompiler compiler(argc, kind, extra_ic_state, cache_holder); 852 HandleScope scope(isolate());
853 CallStubCompiler compiler(isolate(),
854 argc,
855 kind,
856 extra_ic_state,
857 cache_holder);
812 { MaybeObject* maybe_code = 858 { MaybeObject* maybe_code =
813 compiler.CompileCallInterceptor(JSObject::cast(object), holder, name); 859 compiler.CompileCallInterceptor(JSObject::cast(object), holder, name);
814 if (!maybe_code->ToObject(&code)) return maybe_code; 860 if (!maybe_code->ToObject(&code)) return maybe_code;
815 } 861 }
816 ASSERT_EQ(flags, Code::cast(code)->flags()); 862 ASSERT_EQ(flags, Code::cast(code)->flags());
817 PROFILE(isolate(), 863 PROFILE(isolate(),
818 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 864 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
819 Code::cast(code), name)); 865 Code::cast(code), name));
820 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 866 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
821 Object* result; 867 Object* result;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 extra_ic_state, 903 extra_ic_state,
858 cache_holder, 904 cache_holder,
859 argc); 905 argc);
860 Object* code = map_holder->map()->FindInCodeCache(name, flags); 906 Object* code = map_holder->map()->FindInCodeCache(name, flags);
861 if (code->IsUndefined()) { 907 if (code->IsUndefined()) {
862 // If the function hasn't been compiled yet, we cannot do it now 908 // If the function hasn't been compiled yet, we cannot do it now
863 // because it may cause GC. To avoid this issue, we return an 909 // because it may cause GC. To avoid this issue, we return an
864 // internal error which will make sure we do not update any 910 // internal error which will make sure we do not update any
865 // caches. 911 // caches.
866 if (!function->is_compiled()) return Failure::InternalError(); 912 if (!function->is_compiled()) return Failure::InternalError();
867 CallStubCompiler compiler(argc, kind, extra_ic_state, cache_holder); 913 HandleScope scope(isolate());
914 CallStubCompiler compiler(isolate(),
915 argc,
916 kind,
917 extra_ic_state,
918 cache_holder);
868 { MaybeObject* maybe_code = 919 { MaybeObject* maybe_code =
869 compiler.CompileCallGlobal(receiver, holder, cell, function, name); 920 compiler.CompileCallGlobal(receiver, holder, cell, function, name);
870 if (!maybe_code->ToObject(&code)) return maybe_code; 921 if (!maybe_code->ToObject(&code)) return maybe_code;
871 } 922 }
872 ASSERT_EQ(flags, Code::cast(code)->flags()); 923 ASSERT_EQ(flags, Code::cast(code)->flags());
873 PROFILE(isolate(), 924 PROFILE(isolate(),
874 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG), 925 CodeCreateEvent(CALL_LOGGER_TAG(kind, CALL_IC_TAG),
875 Code::cast(code), name)); 926 Code::cast(code), name));
876 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code))); 927 GDBJIT(AddCode(GDBJITInterface::CALL_IC, name, Code::cast(code)));
877 Object* result; 928 Object* result;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 Code::Flags flags = Code::ComputeFlags(kind, 1011 Code::Flags flags = Code::ComputeFlags(kind,
961 UNINITIALIZED, 1012 UNINITIALIZED,
962 extra_state, 1013 extra_state,
963 NORMAL, 1014 NORMAL,
964 argc); 1015 argc);
965 Object* probe; 1016 Object* probe;
966 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1017 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
967 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1018 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
968 } 1019 }
969 if (!probe->IsUndefined()) return probe; 1020 if (!probe->IsUndefined()) return probe;
970 StubCompiler compiler; 1021 HandleScope scope(isolate_);
1022 StubCompiler compiler(isolate_);
971 return FillCache(isolate_, compiler.CompileCallInitialize(flags)); 1023 return FillCache(isolate_, compiler.CompileCallInitialize(flags));
972 } 1024 }
973 1025
974 1026
975 Handle<Code> StubCache::ComputeCallInitialize(int argc, 1027 Handle<Code> StubCache::ComputeCallInitialize(int argc,
976 RelocInfo::Mode mode) { 1028 RelocInfo::Mode mode) {
977 CALL_HEAP_FUNCTION(isolate_, 1029 CALL_HEAP_FUNCTION(isolate_,
978 ComputeCallInitialize(argc, mode, Code::CALL_IC), 1030 ComputeCallInitialize(argc, mode, Code::CALL_IC),
979 Code); 1031 Code);
980 } 1032 }
(...skipping 14 matching lines...) Expand all
995 Code::Flags flags = Code::ComputeFlags(kind, 1047 Code::Flags flags = Code::ComputeFlags(kind,
996 PREMONOMORPHIC, 1048 PREMONOMORPHIC,
997 extra_ic_state, 1049 extra_ic_state,
998 NORMAL, 1050 NORMAL,
999 argc); 1051 argc);
1000 Object* probe; 1052 Object* probe;
1001 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1053 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1002 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1054 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1003 } 1055 }
1004 if (!probe->IsUndefined()) return probe; 1056 if (!probe->IsUndefined()) return probe;
1005 StubCompiler compiler; 1057 HandleScope scope(isolate_);
1058 StubCompiler compiler(isolate_);
1006 return FillCache(isolate_, compiler.CompileCallPreMonomorphic(flags)); 1059 return FillCache(isolate_, compiler.CompileCallPreMonomorphic(flags));
1007 } 1060 }
1008 1061
1009 1062
1010 MaybeObject* StubCache::ComputeCallNormal(int argc, 1063 MaybeObject* StubCache::ComputeCallNormal(int argc,
1011 Code::Kind kind, 1064 Code::Kind kind,
1012 Code::ExtraICState extra_ic_state) { 1065 Code::ExtraICState extra_ic_state) {
1013 Code::Flags flags = Code::ComputeFlags(kind, 1066 Code::Flags flags = Code::ComputeFlags(kind,
1014 MONOMORPHIC, 1067 MONOMORPHIC,
1015 extra_ic_state, 1068 extra_ic_state,
1016 NORMAL, 1069 NORMAL,
1017 argc); 1070 argc);
1018 Object* probe; 1071 Object* probe;
1019 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1072 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1020 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1073 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1021 } 1074 }
1022 if (!probe->IsUndefined()) return probe; 1075 if (!probe->IsUndefined()) return probe;
1023 StubCompiler compiler; 1076 HandleScope scope(isolate_);
1077 StubCompiler compiler(isolate_);
1024 return FillCache(isolate_, compiler.CompileCallNormal(flags)); 1078 return FillCache(isolate_, compiler.CompileCallNormal(flags));
1025 } 1079 }
1026 1080
1027 1081
1028 MaybeObject* StubCache::ComputeCallArguments(int argc, Code::Kind kind) { 1082 MaybeObject* StubCache::ComputeCallArguments(int argc, Code::Kind kind) {
1029 ASSERT(kind == Code::KEYED_CALL_IC); 1083 ASSERT(kind == Code::KEYED_CALL_IC);
1030 Code::Flags flags = Code::ComputeFlags(kind, 1084 Code::Flags flags = Code::ComputeFlags(kind,
1031 MEGAMORPHIC, 1085 MEGAMORPHIC,
1032 Code::kNoExtraICState, 1086 Code::kNoExtraICState,
1033 NORMAL, 1087 NORMAL,
1034 argc); 1088 argc);
1035 Object* probe; 1089 Object* probe;
1036 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1090 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1037 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1091 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1038 } 1092 }
1039 if (!probe->IsUndefined()) return probe; 1093 if (!probe->IsUndefined()) return probe;
1040 StubCompiler compiler; 1094 HandleScope scope(isolate_);
1095 StubCompiler compiler(isolate_);
1041 return FillCache(isolate_, compiler.CompileCallArguments(flags)); 1096 return FillCache(isolate_, compiler.CompileCallArguments(flags));
1042 } 1097 }
1043 1098
1044 1099
1045 MaybeObject* StubCache::ComputeCallMegamorphic( 1100 MaybeObject* StubCache::ComputeCallMegamorphic(
1046 int argc, 1101 int argc,
1047 Code::Kind kind, 1102 Code::Kind kind,
1048 Code::ExtraICState extra_ic_state) { 1103 Code::ExtraICState extra_ic_state) {
1049 Code::Flags flags = Code::ComputeFlags(kind, 1104 Code::Flags flags = Code::ComputeFlags(kind,
1050 MEGAMORPHIC, 1105 MEGAMORPHIC,
1051 extra_ic_state, 1106 extra_ic_state,
1052 NORMAL, 1107 NORMAL,
1053 argc); 1108 argc);
1054 Object* probe; 1109 Object* probe;
1055 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1110 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1056 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1111 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1057 } 1112 }
1058 if (!probe->IsUndefined()) return probe; 1113 if (!probe->IsUndefined()) return probe;
1059 StubCompiler compiler; 1114 HandleScope scope(isolate_);
1115 StubCompiler compiler(isolate_);
1060 return FillCache(isolate_, compiler.CompileCallMegamorphic(flags)); 1116 return FillCache(isolate_, compiler.CompileCallMegamorphic(flags));
1061 } 1117 }
1062 1118
1063 1119
1064 MaybeObject* StubCache::ComputeCallMiss(int argc, 1120 MaybeObject* StubCache::ComputeCallMiss(int argc,
1065 Code::Kind kind, 1121 Code::Kind kind,
1066 Code::ExtraICState extra_ic_state) { 1122 Code::ExtraICState extra_ic_state) {
1067 // MONOMORPHIC_PROTOTYPE_FAILURE state is used to make sure that miss stubs 1123 // MONOMORPHIC_PROTOTYPE_FAILURE state is used to make sure that miss stubs
1068 // and monomorphic stubs are not mixed up together in the stub cache. 1124 // and monomorphic stubs are not mixed up together in the stub cache.
1069 Code::Flags flags = Code::ComputeFlags(kind, 1125 Code::Flags flags = Code::ComputeFlags(kind,
1070 MONOMORPHIC_PROTOTYPE_FAILURE, 1126 MONOMORPHIC_PROTOTYPE_FAILURE,
1071 extra_ic_state, 1127 extra_ic_state,
1072 NORMAL, 1128 NORMAL,
1073 argc, 1129 argc,
1074 OWN_MAP); 1130 OWN_MAP);
1075 Object* probe; 1131 Object* probe;
1076 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1132 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1077 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1133 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1078 } 1134 }
1079 if (!probe->IsUndefined()) return probe; 1135 if (!probe->IsUndefined()) return probe;
1080 StubCompiler compiler; 1136 HandleScope scope(isolate_);
1137 StubCompiler compiler(isolate_);
1081 return FillCache(isolate_, compiler.CompileCallMiss(flags)); 1138 return FillCache(isolate_, compiler.CompileCallMiss(flags));
1082 } 1139 }
1083 1140
1084 1141
1085 #ifdef ENABLE_DEBUGGER_SUPPORT 1142 #ifdef ENABLE_DEBUGGER_SUPPORT
1086 MaybeObject* StubCache::ComputeCallDebugBreak( 1143 MaybeObject* StubCache::ComputeCallDebugBreak(
1087 int argc, 1144 int argc,
1088 Code::Kind kind) { 1145 Code::Kind kind) {
1089 // Extra IC state is irrelevant for debug break ICs. They jump to 1146 // Extra IC state is irrelevant for debug break ICs. They jump to
1090 // the actual call ic to carry out the work. 1147 // the actual call ic to carry out the work.
1091 Code::Flags flags = Code::ComputeFlags(kind, 1148 Code::Flags flags = Code::ComputeFlags(kind,
1092 DEBUG_BREAK, 1149 DEBUG_BREAK,
1093 Code::kNoExtraICState, 1150 Code::kNoExtraICState,
1094 NORMAL, 1151 NORMAL,
1095 argc); 1152 argc);
1096 Object* probe; 1153 Object* probe;
1097 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1154 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1098 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1155 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1099 } 1156 }
1100 if (!probe->IsUndefined()) return probe; 1157 if (!probe->IsUndefined()) return probe;
1101 StubCompiler compiler; 1158 HandleScope scope(isolate_);
1159 StubCompiler compiler(isolate_);
1102 return FillCache(isolate_, compiler.CompileCallDebugBreak(flags)); 1160 return FillCache(isolate_, compiler.CompileCallDebugBreak(flags));
1103 } 1161 }
1104 1162
1105 1163
1106 MaybeObject* StubCache::ComputeCallDebugPrepareStepIn( 1164 MaybeObject* StubCache::ComputeCallDebugPrepareStepIn(
1107 int argc, 1165 int argc,
1108 Code::Kind kind) { 1166 Code::Kind kind) {
1109 // Extra IC state is irrelevant for debug break ICs. They jump to 1167 // Extra IC state is irrelevant for debug break ICs. They jump to
1110 // the actual call ic to carry out the work. 1168 // the actual call ic to carry out the work.
1111 Code::Flags flags = Code::ComputeFlags(kind, 1169 Code::Flags flags = Code::ComputeFlags(kind,
1112 DEBUG_PREPARE_STEP_IN, 1170 DEBUG_PREPARE_STEP_IN,
1113 Code::kNoExtraICState, 1171 Code::kNoExtraICState,
1114 NORMAL, 1172 NORMAL,
1115 argc); 1173 argc);
1116 Object* probe; 1174 Object* probe;
1117 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags); 1175 { MaybeObject* maybe_probe = ProbeCache(isolate_, flags);
1118 if (!maybe_probe->ToObject(&probe)) return maybe_probe; 1176 if (!maybe_probe->ToObject(&probe)) return maybe_probe;
1119 } 1177 }
1120 if (!probe->IsUndefined()) return probe; 1178 if (!probe->IsUndefined()) return probe;
1121 StubCompiler compiler; 1179 HandleScope scope(isolate_);
1180 StubCompiler compiler(isolate_);
1122 return FillCache(isolate_, compiler.CompileCallDebugPrepareStepIn(flags)); 1181 return FillCache(isolate_, compiler.CompileCallDebugPrepareStepIn(flags));
1123 } 1182 }
1124 #endif 1183 #endif
1125 1184
1126 1185
1127 void StubCache::Clear() { 1186 void StubCache::Clear() {
1128 Code* empty = isolate_->builtins()->builtin(Builtins::kIllegal); 1187 Code* empty = isolate_->builtins()->builtin(Builtins::kIllegal);
1129 for (int i = 0; i < kPrimaryTableSize; i++) { 1188 for (int i = 0; i < kPrimaryTableSize; i++) {
1130 primary_[i].key = heap()->empty_string(); 1189 primary_[i].key = heap()->empty_string();
1131 primary_[i].value = empty; 1190 primary_[i].value = empty;
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
1697 return result; 1756 return result;
1698 } 1757 }
1699 1758
1700 1759
1701 void KeyedStoreStubCompiler::GenerateStoreDictionaryElement( 1760 void KeyedStoreStubCompiler::GenerateStoreDictionaryElement(
1702 MacroAssembler* masm) { 1761 MacroAssembler* masm) {
1703 KeyedStoreIC::GenerateSlow(masm); 1762 KeyedStoreIC::GenerateSlow(masm);
1704 } 1763 }
1705 1764
1706 1765
1707 CallStubCompiler::CallStubCompiler(int argc, 1766 CallStubCompiler::CallStubCompiler(Isolate* isolate,
1767 int argc,
1708 Code::Kind kind, 1768 Code::Kind kind,
1709 Code::ExtraICState extra_ic_state, 1769 Code::ExtraICState extra_ic_state,
1710 InlineCacheHolderFlag cache_holder) 1770 InlineCacheHolderFlag cache_holder)
1711 : arguments_(argc), 1771 : StubCompiler(isolate),
1772 arguments_(argc),
1712 kind_(kind), 1773 kind_(kind),
1713 extra_ic_state_(extra_ic_state), 1774 extra_ic_state_(extra_ic_state),
1714 cache_holder_(cache_holder) { 1775 cache_holder_(cache_holder) {
1715 } 1776 }
1716 1777
1717 1778
1718 bool CallStubCompiler::HasCustomCallGenerator(JSFunction* function) { 1779 bool CallStubCompiler::HasCustomCallGenerator(JSFunction* function) {
1719 SharedFunctionInfo* info = function->shared(); 1780 SharedFunctionInfo* info = function->shared();
1720 if (info->HasBuiltinFunctionId()) { 1781 if (info->HasBuiltinFunctionId()) {
1721 BuiltinFunctionId id = info->builtin_function_id(); 1782 BuiltinFunctionId id = info->builtin_function_id();
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1858 expected_receiver_type_ = 1919 expected_receiver_type_ =
1859 FunctionTemplateInfo::cast(signature->receiver()); 1920 FunctionTemplateInfo::cast(signature->receiver());
1860 } 1921 }
1861 } 1922 }
1862 1923
1863 is_simple_api_call_ = true; 1924 is_simple_api_call_ = true;
1864 } 1925 }
1865 1926
1866 1927
1867 } } // namespace v8::internal 1928 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/stub-cache.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698