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

Side by Side Diff: src/accessors.cc

Issue 459413002: Support symbol-named properties in API (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Include a bit that was missing from the previous patch Created 6 years, 4 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/accessors.h ('k') | src/api.h » ('j') | src/api.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/contexts.h" 10 #include "src/contexts.h"
11 #include "src/deoptimizer.h" 11 #include "src/deoptimizer.h"
12 #include "src/execution.h" 12 #include "src/execution.h"
13 #include "src/factory.h" 13 #include "src/factory.h"
14 #include "src/frames-inl.h" 14 #include "src/frames-inl.h"
15 #include "src/isolate.h" 15 #include "src/isolate.h"
16 #include "src/list-inl.h" 16 #include "src/list-inl.h"
17 #include "src/property-details.h" 17 #include "src/property-details.h"
18 #include "src/prototype.h" 18 #include "src/prototype.h"
19 19
20 namespace v8 { 20 namespace v8 {
21 namespace internal { 21 namespace internal {
22 22
23 23
24 Handle<AccessorInfo> Accessors::MakeAccessor( 24 Handle<AccessorInfo> Accessors::MakeAccessor(
25 Isolate* isolate, 25 Isolate* isolate,
26 Handle<String> name, 26 Handle<Name> name,
27 AccessorGetterCallback getter, 27 AccessorNameGetterCallback getter,
28 AccessorSetterCallback setter, 28 AccessorNameSetterCallback setter,
29 PropertyAttributes attributes) { 29 PropertyAttributes attributes) {
30 Factory* factory = isolate->factory(); 30 Factory* factory = isolate->factory();
31 Handle<ExecutableAccessorInfo> info = factory->NewExecutableAccessorInfo(); 31 Handle<ExecutableAccessorInfo> info = factory->NewExecutableAccessorInfo();
32 info->set_property_attributes(attributes); 32 info->set_property_attributes(attributes);
33 info->set_all_can_read(false); 33 info->set_all_can_read(false);
34 info->set_all_can_write(false); 34 info->set_all_can_write(false);
35 info->set_name(*name); 35 info->set_name(*name);
36 Handle<Object> get = v8::FromCData(isolate, getter); 36 Handle<Object> get = v8::FromCData(isolate, getter);
37 Handle<Object> set = v8::FromCData(isolate, setter); 37 Handle<Object> set = v8::FromCData(isolate, setter);
38 info->set_getter(*get); 38 info->set_getter(*get);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 131
132 132
133 template 133 template
134 bool Accessors::IsJSObjectFieldAccessor<HeapType>(Handle<HeapType> type, 134 bool Accessors::IsJSObjectFieldAccessor<HeapType>(Handle<HeapType> type,
135 Handle<Name> name, 135 Handle<Name> name,
136 int* object_offset); 136 int* object_offset);
137 137
138 138
139 bool SetPropertyOnInstanceIfInherited( 139 bool SetPropertyOnInstanceIfInherited(
140 Isolate* isolate, const v8::PropertyCallbackInfo<void>& info, 140 Isolate* isolate, const v8::PropertyCallbackInfo<void>& info,
141 v8::Local<v8::String> name, Handle<Object> value) { 141 v8::Local<v8::Name> name, Handle<Object> value) {
142 Handle<Object> holder = Utils::OpenHandle(*info.Holder()); 142 Handle<Object> holder = Utils::OpenHandle(*info.Holder());
143 Handle<Object> receiver = Utils::OpenHandle(*info.This()); 143 Handle<Object> receiver = Utils::OpenHandle(*info.This());
144 if (*holder == *receiver) return false; 144 if (*holder == *receiver) return false;
145 if (receiver->IsJSObject()) { 145 if (receiver->IsJSObject()) {
146 Handle<JSObject> object = Handle<JSObject>::cast(receiver); 146 Handle<JSObject> object = Handle<JSObject>::cast(receiver);
147 // This behaves sloppy since we lost the actual strict-mode. 147 // This behaves sloppy since we lost the actual strict-mode.
148 // TODO(verwaest): Fix by making ExecutableAccessorInfo behave like data 148 // TODO(verwaest): Fix by making ExecutableAccessorInfo behave like data
149 // properties. 149 // properties.
150 if (!object->map()->is_extensible()) return true; 150 if (!object->map()->is_extensible()) return true;
151 JSObject::SetOwnPropertyIgnoreAttributes(object, Utils::OpenHandle(*name), 151 JSObject::SetOwnPropertyIgnoreAttributes(object, Utils::OpenHandle(*name),
(...skipping 17 matching lines...) Expand all
169 has_initial_map()); 169 has_initial_map());
170 if (wrapper->map() == isolate->number_function()->initial_map()) { 170 if (wrapper->map() == isolate->number_function()->initial_map()) {
171 return handle(wrapper->value(), isolate); 171 return handle(wrapper->value(), isolate);
172 } 172 }
173 173
174 return value; 174 return value;
175 } 175 }
176 176
177 177
178 void Accessors::ArrayLengthGetter( 178 void Accessors::ArrayLengthGetter(
179 v8::Local<v8::String> name, 179 v8::Local<v8::Name> name,
180 const v8::PropertyCallbackInfo<v8::Value>& info) { 180 const v8::PropertyCallbackInfo<v8::Value>& info) {
181 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 181 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
182 DisallowHeapAllocation no_allocation; 182 DisallowHeapAllocation no_allocation;
183 HandleScope scope(isolate); 183 HandleScope scope(isolate);
184 JSArray* holder = JSArray::cast(*Utils::OpenHandle(*info.Holder())); 184 JSArray* holder = JSArray::cast(*Utils::OpenHandle(*info.Holder()));
185 Object* result = holder->length(); 185 Object* result = holder->length();
186 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(result, isolate))); 186 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(result, isolate)));
187 } 187 }
188 188
189 189
190 void Accessors::ArrayLengthSetter( 190 void Accessors::ArrayLengthSetter(
191 v8::Local<v8::String> name, 191 v8::Local<v8::Name> name,
192 v8::Local<v8::Value> val, 192 v8::Local<v8::Value> val,
193 const v8::PropertyCallbackInfo<void>& info) { 193 const v8::PropertyCallbackInfo<void>& info) {
194 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 194 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
195 HandleScope scope(isolate); 195 HandleScope scope(isolate);
196 Handle<JSObject> object = Utils::OpenHandle(*info.This()); 196 Handle<JSObject> object = Utils::OpenHandle(*info.This());
197 Handle<Object> value = Utils::OpenHandle(*val); 197 Handle<Object> value = Utils::OpenHandle(*val);
198 if (SetPropertyOnInstanceIfInherited(isolate, info, name, value)) { 198 if (SetPropertyOnInstanceIfInherited(isolate, info, name, value)) {
199 return; 199 return;
200 } 200 }
201 201
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 attributes); 237 attributes);
238 } 238 }
239 239
240 240
241 241
242 // 242 //
243 // Accessors::StringLength 243 // Accessors::StringLength
244 // 244 //
245 245
246 void Accessors::StringLengthGetter( 246 void Accessors::StringLengthGetter(
247 v8::Local<v8::String> name, 247 v8::Local<v8::Name> name,
248 const v8::PropertyCallbackInfo<v8::Value>& info) { 248 const v8::PropertyCallbackInfo<v8::Value>& info) {
249 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 249 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
250 DisallowHeapAllocation no_allocation; 250 DisallowHeapAllocation no_allocation;
251 HandleScope scope(isolate); 251 HandleScope scope(isolate);
252 252
253 // We have a slight impedance mismatch between the external API and the way we 253 // We have a slight impedance mismatch between the external API and the way we
254 // use callbacks internally: Externally, callbacks can only be used with 254 // use callbacks internally: Externally, callbacks can only be used with
255 // v8::Object, but internally we have callbacks on entities which are higher 255 // v8::Object, but internally we have callbacks on entities which are higher
256 // in the hierarchy, in this case for String values. 256 // in the hierarchy, in this case for String values.
257 257
258 Object* value = *Utils::OpenHandle(*v8::Local<v8::Value>(info.This())); 258 Object* value = *Utils::OpenHandle(*v8::Local<v8::Value>(info.This()));
259 if (!value->IsString()) { 259 if (!value->IsString()) {
260 // Not a string value. That means that we either got a String wrapper or 260 // Not a string value. That means that we either got a String wrapper or
261 // a Value with a String wrapper in its prototype chain. 261 // a Value with a String wrapper in its prototype chain.
262 value = JSValue::cast(*Utils::OpenHandle(*info.Holder()))->value(); 262 value = JSValue::cast(*Utils::OpenHandle(*info.Holder()))->value();
263 } 263 }
264 Object* result = Smi::FromInt(String::cast(value)->length()); 264 Object* result = Smi::FromInt(String::cast(value)->length());
265 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(result, isolate))); 265 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(result, isolate)));
266 } 266 }
267 267
268 268
269 void Accessors::StringLengthSetter( 269 void Accessors::StringLengthSetter(
270 v8::Local<v8::String> name, 270 v8::Local<v8::Name> name,
271 v8::Local<v8::Value> value, 271 v8::Local<v8::Value> value,
272 const v8::PropertyCallbackInfo<void>& info) { 272 const v8::PropertyCallbackInfo<void>& info) {
273 UNREACHABLE(); 273 UNREACHABLE();
274 } 274 }
275 275
276 276
277 Handle<AccessorInfo> Accessors::StringLengthInfo( 277 Handle<AccessorInfo> Accessors::StringLengthInfo(
278 Isolate* isolate, PropertyAttributes attributes) { 278 Isolate* isolate, PropertyAttributes attributes) {
279 return MakeAccessor(isolate, 279 return MakeAccessor(isolate,
280 isolate->factory()->length_string(), 280 isolate->factory()->length_string(),
281 &StringLengthGetter, 281 &StringLengthGetter,
282 &StringLengthSetter, 282 &StringLengthSetter,
283 attributes); 283 attributes);
284 } 284 }
285 285
286 286
287 // 287 //
288 // Accessors::ScriptColumnOffset 288 // Accessors::ScriptColumnOffset
289 // 289 //
290 290
291 291
292 void Accessors::ScriptColumnOffsetGetter( 292 void Accessors::ScriptColumnOffsetGetter(
293 v8::Local<v8::String> name, 293 v8::Local<v8::Name> name,
294 const v8::PropertyCallbackInfo<v8::Value>& info) { 294 const v8::PropertyCallbackInfo<v8::Value>& info) {
295 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 295 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
296 DisallowHeapAllocation no_allocation; 296 DisallowHeapAllocation no_allocation;
297 HandleScope scope(isolate); 297 HandleScope scope(isolate);
298 Object* object = *Utils::OpenHandle(*info.This()); 298 Object* object = *Utils::OpenHandle(*info.This());
299 Object* res = Script::cast(JSValue::cast(object)->value())->column_offset(); 299 Object* res = Script::cast(JSValue::cast(object)->value())->column_offset();
300 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 300 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
301 } 301 }
302 302
303 303
304 void Accessors::ScriptColumnOffsetSetter( 304 void Accessors::ScriptColumnOffsetSetter(
305 v8::Local<v8::String> name, 305 v8::Local<v8::Name> name,
306 v8::Local<v8::Value> value, 306 v8::Local<v8::Value> value,
307 const v8::PropertyCallbackInfo<void>& info) { 307 const v8::PropertyCallbackInfo<void>& info) {
308 UNREACHABLE(); 308 UNREACHABLE();
309 } 309 }
310 310
311 311
312 Handle<AccessorInfo> Accessors::ScriptColumnOffsetInfo( 312 Handle<AccessorInfo> Accessors::ScriptColumnOffsetInfo(
313 Isolate* isolate, PropertyAttributes attributes) { 313 Isolate* isolate, PropertyAttributes attributes) {
314 Handle<String> name(isolate->factory()->InternalizeOneByteString( 314 Handle<String> name(isolate->factory()->InternalizeOneByteString(
315 STATIC_ASCII_VECTOR("column_offset"))); 315 STATIC_ASCII_VECTOR("column_offset")));
316 return MakeAccessor(isolate, 316 return MakeAccessor(isolate,
317 name, 317 name,
318 &ScriptColumnOffsetGetter, 318 &ScriptColumnOffsetGetter,
319 &ScriptColumnOffsetSetter, 319 &ScriptColumnOffsetSetter,
320 attributes); 320 attributes);
321 } 321 }
322 322
323 323
324 // 324 //
325 // Accessors::ScriptId 325 // Accessors::ScriptId
326 // 326 //
327 327
328 328
329 void Accessors::ScriptIdGetter( 329 void Accessors::ScriptIdGetter(
330 v8::Local<v8::String> name, 330 v8::Local<v8::Name> name,
331 const v8::PropertyCallbackInfo<v8::Value>& info) { 331 const v8::PropertyCallbackInfo<v8::Value>& info) {
332 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 332 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
333 DisallowHeapAllocation no_allocation; 333 DisallowHeapAllocation no_allocation;
334 HandleScope scope(isolate); 334 HandleScope scope(isolate);
335 Object* object = *Utils::OpenHandle(*info.This()); 335 Object* object = *Utils::OpenHandle(*info.This());
336 Object* id = Script::cast(JSValue::cast(object)->value())->id(); 336 Object* id = Script::cast(JSValue::cast(object)->value())->id();
337 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(id, isolate))); 337 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(id, isolate)));
338 } 338 }
339 339
340 340
341 void Accessors::ScriptIdSetter( 341 void Accessors::ScriptIdSetter(
342 v8::Local<v8::String> name, 342 v8::Local<v8::Name> name,
343 v8::Local<v8::Value> value, 343 v8::Local<v8::Value> value,
344 const v8::PropertyCallbackInfo<void>& info) { 344 const v8::PropertyCallbackInfo<void>& info) {
345 UNREACHABLE(); 345 UNREACHABLE();
346 } 346 }
347 347
348 348
349 Handle<AccessorInfo> Accessors::ScriptIdInfo( 349 Handle<AccessorInfo> Accessors::ScriptIdInfo(
350 Isolate* isolate, PropertyAttributes attributes) { 350 Isolate* isolate, PropertyAttributes attributes) {
351 Handle<String> name(isolate->factory()->InternalizeOneByteString( 351 Handle<String> name(isolate->factory()->InternalizeOneByteString(
352 STATIC_ASCII_VECTOR("id"))); 352 STATIC_ASCII_VECTOR("id")));
353 return MakeAccessor(isolate, 353 return MakeAccessor(isolate,
354 name, 354 name,
355 &ScriptIdGetter, 355 &ScriptIdGetter,
356 &ScriptIdSetter, 356 &ScriptIdSetter,
357 attributes); 357 attributes);
358 } 358 }
359 359
360 360
361 // 361 //
362 // Accessors::ScriptName 362 // Accessors::ScriptName
363 // 363 //
364 364
365 365
366 void Accessors::ScriptNameGetter( 366 void Accessors::ScriptNameGetter(
367 v8::Local<v8::String> name, 367 v8::Local<v8::Name> name,
368 const v8::PropertyCallbackInfo<v8::Value>& info) { 368 const v8::PropertyCallbackInfo<v8::Value>& info) {
369 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 369 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
370 DisallowHeapAllocation no_allocation; 370 DisallowHeapAllocation no_allocation;
371 HandleScope scope(isolate); 371 HandleScope scope(isolate);
372 Object* object = *Utils::OpenHandle(*info.This()); 372 Object* object = *Utils::OpenHandle(*info.This());
373 Object* source = Script::cast(JSValue::cast(object)->value())->name(); 373 Object* source = Script::cast(JSValue::cast(object)->value())->name();
374 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(source, isolate))); 374 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(source, isolate)));
375 } 375 }
376 376
377 377
378 void Accessors::ScriptNameSetter( 378 void Accessors::ScriptNameSetter(
379 v8::Local<v8::String> name, 379 v8::Local<v8::Name> name,
380 v8::Local<v8::Value> value, 380 v8::Local<v8::Value> value,
381 const v8::PropertyCallbackInfo<void>& info) { 381 const v8::PropertyCallbackInfo<void>& info) {
382 UNREACHABLE(); 382 UNREACHABLE();
383 } 383 }
384 384
385 385
386 Handle<AccessorInfo> Accessors::ScriptNameInfo( 386 Handle<AccessorInfo> Accessors::ScriptNameInfo(
387 Isolate* isolate, PropertyAttributes attributes) { 387 Isolate* isolate, PropertyAttributes attributes) {
388 return MakeAccessor(isolate, 388 return MakeAccessor(isolate,
389 isolate->factory()->name_string(), 389 isolate->factory()->name_string(),
390 &ScriptNameGetter, 390 &ScriptNameGetter,
391 &ScriptNameSetter, 391 &ScriptNameSetter,
392 attributes); 392 attributes);
393 } 393 }
394 394
395 395
396 // 396 //
397 // Accessors::ScriptSource 397 // Accessors::ScriptSource
398 // 398 //
399 399
400 400
401 void Accessors::ScriptSourceGetter( 401 void Accessors::ScriptSourceGetter(
402 v8::Local<v8::String> name, 402 v8::Local<v8::Name> name,
403 const v8::PropertyCallbackInfo<v8::Value>& info) { 403 const v8::PropertyCallbackInfo<v8::Value>& info) {
404 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 404 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
405 DisallowHeapAllocation no_allocation; 405 DisallowHeapAllocation no_allocation;
406 HandleScope scope(isolate); 406 HandleScope scope(isolate);
407 Object* object = *Utils::OpenHandle(*info.This()); 407 Object* object = *Utils::OpenHandle(*info.This());
408 Object* source = Script::cast(JSValue::cast(object)->value())->source(); 408 Object* source = Script::cast(JSValue::cast(object)->value())->source();
409 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(source, isolate))); 409 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(source, isolate)));
410 } 410 }
411 411
412 412
413 void Accessors::ScriptSourceSetter( 413 void Accessors::ScriptSourceSetter(
414 v8::Local<v8::String> name, 414 v8::Local<v8::Name> name,
415 v8::Local<v8::Value> value, 415 v8::Local<v8::Value> value,
416 const v8::PropertyCallbackInfo<void>& info) { 416 const v8::PropertyCallbackInfo<void>& info) {
417 UNREACHABLE(); 417 UNREACHABLE();
418 } 418 }
419 419
420 420
421 Handle<AccessorInfo> Accessors::ScriptSourceInfo( 421 Handle<AccessorInfo> Accessors::ScriptSourceInfo(
422 Isolate* isolate, PropertyAttributes attributes) { 422 Isolate* isolate, PropertyAttributes attributes) {
423 return MakeAccessor(isolate, 423 return MakeAccessor(isolate,
424 isolate->factory()->source_string(), 424 isolate->factory()->source_string(),
425 &ScriptSourceGetter, 425 &ScriptSourceGetter,
426 &ScriptSourceSetter, 426 &ScriptSourceSetter,
427 attributes); 427 attributes);
428 } 428 }
429 429
430 430
431 // 431 //
432 // Accessors::ScriptLineOffset 432 // Accessors::ScriptLineOffset
433 // 433 //
434 434
435 435
436 void Accessors::ScriptLineOffsetGetter( 436 void Accessors::ScriptLineOffsetGetter(
437 v8::Local<v8::String> name, 437 v8::Local<v8::Name> name,
438 const v8::PropertyCallbackInfo<v8::Value>& info) { 438 const v8::PropertyCallbackInfo<v8::Value>& info) {
439 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 439 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
440 DisallowHeapAllocation no_allocation; 440 DisallowHeapAllocation no_allocation;
441 HandleScope scope(isolate); 441 HandleScope scope(isolate);
442 Object* object = *Utils::OpenHandle(*info.This()); 442 Object* object = *Utils::OpenHandle(*info.This());
443 Object* res = Script::cast(JSValue::cast(object)->value())->line_offset(); 443 Object* res = Script::cast(JSValue::cast(object)->value())->line_offset();
444 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 444 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
445 } 445 }
446 446
447 447
448 void Accessors::ScriptLineOffsetSetter( 448 void Accessors::ScriptLineOffsetSetter(
449 v8::Local<v8::String> name, 449 v8::Local<v8::Name> name,
450 v8::Local<v8::Value> value, 450 v8::Local<v8::Value> value,
451 const v8::PropertyCallbackInfo<void>& info) { 451 const v8::PropertyCallbackInfo<void>& info) {
452 UNREACHABLE(); 452 UNREACHABLE();
453 } 453 }
454 454
455 455
456 Handle<AccessorInfo> Accessors::ScriptLineOffsetInfo( 456 Handle<AccessorInfo> Accessors::ScriptLineOffsetInfo(
457 Isolate* isolate, PropertyAttributes attributes) { 457 Isolate* isolate, PropertyAttributes attributes) {
458 Handle<String> name(isolate->factory()->InternalizeOneByteString( 458 Handle<String> name(isolate->factory()->InternalizeOneByteString(
459 STATIC_ASCII_VECTOR("line_offset"))); 459 STATIC_ASCII_VECTOR("line_offset")));
460 return MakeAccessor(isolate, 460 return MakeAccessor(isolate,
461 name, 461 name,
462 &ScriptLineOffsetGetter, 462 &ScriptLineOffsetGetter,
463 &ScriptLineOffsetSetter, 463 &ScriptLineOffsetSetter,
464 attributes); 464 attributes);
465 } 465 }
466 466
467 467
468 // 468 //
469 // Accessors::ScriptType 469 // Accessors::ScriptType
470 // 470 //
471 471
472 472
473 void Accessors::ScriptTypeGetter( 473 void Accessors::ScriptTypeGetter(
474 v8::Local<v8::String> name, 474 v8::Local<v8::Name> name,
475 const v8::PropertyCallbackInfo<v8::Value>& info) { 475 const v8::PropertyCallbackInfo<v8::Value>& info) {
476 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 476 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
477 DisallowHeapAllocation no_allocation; 477 DisallowHeapAllocation no_allocation;
478 HandleScope scope(isolate); 478 HandleScope scope(isolate);
479 Object* object = *Utils::OpenHandle(*info.This()); 479 Object* object = *Utils::OpenHandle(*info.This());
480 Object* res = Script::cast(JSValue::cast(object)->value())->type(); 480 Object* res = Script::cast(JSValue::cast(object)->value())->type();
481 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 481 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
482 } 482 }
483 483
484 484
485 void Accessors::ScriptTypeSetter( 485 void Accessors::ScriptTypeSetter(
486 v8::Local<v8::String> name, 486 v8::Local<v8::Name> name,
487 v8::Local<v8::Value> value, 487 v8::Local<v8::Value> value,
488 const v8::PropertyCallbackInfo<void>& info) { 488 const v8::PropertyCallbackInfo<void>& info) {
489 UNREACHABLE(); 489 UNREACHABLE();
490 } 490 }
491 491
492 492
493 Handle<AccessorInfo> Accessors::ScriptTypeInfo( 493 Handle<AccessorInfo> Accessors::ScriptTypeInfo(
494 Isolate* isolate, PropertyAttributes attributes) { 494 Isolate* isolate, PropertyAttributes attributes) {
495 Handle<String> name(isolate->factory()->InternalizeOneByteString( 495 Handle<String> name(isolate->factory()->InternalizeOneByteString(
496 STATIC_ASCII_VECTOR("type"))); 496 STATIC_ASCII_VECTOR("type")));
497 return MakeAccessor(isolate, 497 return MakeAccessor(isolate,
498 name, 498 name,
499 &ScriptTypeGetter, 499 &ScriptTypeGetter,
500 &ScriptTypeSetter, 500 &ScriptTypeSetter,
501 attributes); 501 attributes);
502 } 502 }
503 503
504 504
505 // 505 //
506 // Accessors::ScriptCompilationType 506 // Accessors::ScriptCompilationType
507 // 507 //
508 508
509 509
510 void Accessors::ScriptCompilationTypeGetter( 510 void Accessors::ScriptCompilationTypeGetter(
511 v8::Local<v8::String> name, 511 v8::Local<v8::Name> name,
512 const v8::PropertyCallbackInfo<v8::Value>& info) { 512 const v8::PropertyCallbackInfo<v8::Value>& info) {
513 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 513 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
514 DisallowHeapAllocation no_allocation; 514 DisallowHeapAllocation no_allocation;
515 HandleScope scope(isolate); 515 HandleScope scope(isolate);
516 Object* object = *Utils::OpenHandle(*info.This()); 516 Object* object = *Utils::OpenHandle(*info.This());
517 Object* res = Smi::FromInt( 517 Object* res = Smi::FromInt(
518 Script::cast(JSValue::cast(object)->value())->compilation_type()); 518 Script::cast(JSValue::cast(object)->value())->compilation_type());
519 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 519 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
520 } 520 }
521 521
522 522
523 void Accessors::ScriptCompilationTypeSetter( 523 void Accessors::ScriptCompilationTypeSetter(
524 v8::Local<v8::String> name, 524 v8::Local<v8::Name> name,
525 v8::Local<v8::Value> value, 525 v8::Local<v8::Value> value,
526 const v8::PropertyCallbackInfo<void>& info) { 526 const v8::PropertyCallbackInfo<void>& info) {
527 UNREACHABLE(); 527 UNREACHABLE();
528 } 528 }
529 529
530 530
531 Handle<AccessorInfo> Accessors::ScriptCompilationTypeInfo( 531 Handle<AccessorInfo> Accessors::ScriptCompilationTypeInfo(
532 Isolate* isolate, PropertyAttributes attributes) { 532 Isolate* isolate, PropertyAttributes attributes) {
533 Handle<String> name(isolate->factory()->InternalizeOneByteString( 533 Handle<String> name(isolate->factory()->InternalizeOneByteString(
534 STATIC_ASCII_VECTOR("compilation_type"))); 534 STATIC_ASCII_VECTOR("compilation_type")));
535 return MakeAccessor(isolate, 535 return MakeAccessor(isolate,
536 name, 536 name,
537 &ScriptCompilationTypeGetter, 537 &ScriptCompilationTypeGetter,
538 &ScriptCompilationTypeSetter, 538 &ScriptCompilationTypeSetter,
539 attributes); 539 attributes);
540 } 540 }
541 541
542 542
543 // 543 //
544 // Accessors::ScriptGetLineEnds 544 // Accessors::ScriptGetLineEnds
545 // 545 //
546 546
547 547
548 void Accessors::ScriptLineEndsGetter( 548 void Accessors::ScriptLineEndsGetter(
549 v8::Local<v8::String> name, 549 v8::Local<v8::Name> name,
550 const v8::PropertyCallbackInfo<v8::Value>& info) { 550 const v8::PropertyCallbackInfo<v8::Value>& info) {
551 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 551 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
552 HandleScope scope(isolate); 552 HandleScope scope(isolate);
553 Handle<Object> object = Utils::OpenHandle(*info.This()); 553 Handle<Object> object = Utils::OpenHandle(*info.This());
554 Handle<Script> script( 554 Handle<Script> script(
555 Script::cast(Handle<JSValue>::cast(object)->value()), isolate); 555 Script::cast(Handle<JSValue>::cast(object)->value()), isolate);
556 Script::InitLineEnds(script); 556 Script::InitLineEnds(script);
557 DCHECK(script->line_ends()->IsFixedArray()); 557 DCHECK(script->line_ends()->IsFixedArray());
558 Handle<FixedArray> line_ends(FixedArray::cast(script->line_ends())); 558 Handle<FixedArray> line_ends(FixedArray::cast(script->line_ends()));
559 // We do not want anyone to modify this array from JS. 559 // We do not want anyone to modify this array from JS.
560 DCHECK(*line_ends == isolate->heap()->empty_fixed_array() || 560 DCHECK(*line_ends == isolate->heap()->empty_fixed_array() ||
561 line_ends->map() == isolate->heap()->fixed_cow_array_map()); 561 line_ends->map() == isolate->heap()->fixed_cow_array_map());
562 Handle<JSArray> js_array = 562 Handle<JSArray> js_array =
563 isolate->factory()->NewJSArrayWithElements(line_ends); 563 isolate->factory()->NewJSArrayWithElements(line_ends);
564 info.GetReturnValue().Set(Utils::ToLocal(js_array)); 564 info.GetReturnValue().Set(Utils::ToLocal(js_array));
565 } 565 }
566 566
567 567
568 void Accessors::ScriptLineEndsSetter( 568 void Accessors::ScriptLineEndsSetter(
569 v8::Local<v8::String> name, 569 v8::Local<v8::Name> name,
570 v8::Local<v8::Value> value, 570 v8::Local<v8::Value> value,
571 const v8::PropertyCallbackInfo<void>& info) { 571 const v8::PropertyCallbackInfo<void>& info) {
572 UNREACHABLE(); 572 UNREACHABLE();
573 } 573 }
574 574
575 575
576 Handle<AccessorInfo> Accessors::ScriptLineEndsInfo( 576 Handle<AccessorInfo> Accessors::ScriptLineEndsInfo(
577 Isolate* isolate, PropertyAttributes attributes) { 577 Isolate* isolate, PropertyAttributes attributes) {
578 Handle<String> name(isolate->factory()->InternalizeOneByteString( 578 Handle<String> name(isolate->factory()->InternalizeOneByteString(
579 STATIC_ASCII_VECTOR("line_ends"))); 579 STATIC_ASCII_VECTOR("line_ends")));
580 return MakeAccessor(isolate, 580 return MakeAccessor(isolate,
581 name, 581 name,
582 &ScriptLineEndsGetter, 582 &ScriptLineEndsGetter,
583 &ScriptLineEndsSetter, 583 &ScriptLineEndsSetter,
584 attributes); 584 attributes);
585 } 585 }
586 586
587 587
588 // 588 //
589 // Accessors::ScriptSourceUrl 589 // Accessors::ScriptSourceUrl
590 // 590 //
591 591
592 592
593 void Accessors::ScriptSourceUrlGetter( 593 void Accessors::ScriptSourceUrlGetter(
594 v8::Local<v8::String> name, 594 v8::Local<v8::Name> name,
595 const v8::PropertyCallbackInfo<v8::Value>& info) { 595 const v8::PropertyCallbackInfo<v8::Value>& info) {
596 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 596 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
597 DisallowHeapAllocation no_allocation; 597 DisallowHeapAllocation no_allocation;
598 HandleScope scope(isolate); 598 HandleScope scope(isolate);
599 Object* object = *Utils::OpenHandle(*info.This()); 599 Object* object = *Utils::OpenHandle(*info.This());
600 Object* url = Script::cast(JSValue::cast(object)->value())->source_url(); 600 Object* url = Script::cast(JSValue::cast(object)->value())->source_url();
601 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(url, isolate))); 601 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(url, isolate)));
602 } 602 }
603 603
604 604
605 void Accessors::ScriptSourceUrlSetter( 605 void Accessors::ScriptSourceUrlSetter(
606 v8::Local<v8::String> name, 606 v8::Local<v8::Name> name,
607 v8::Local<v8::Value> value, 607 v8::Local<v8::Value> value,
608 const v8::PropertyCallbackInfo<void>& info) { 608 const v8::PropertyCallbackInfo<void>& info) {
609 UNREACHABLE(); 609 UNREACHABLE();
610 } 610 }
611 611
612 612
613 Handle<AccessorInfo> Accessors::ScriptSourceUrlInfo( 613 Handle<AccessorInfo> Accessors::ScriptSourceUrlInfo(
614 Isolate* isolate, PropertyAttributes attributes) { 614 Isolate* isolate, PropertyAttributes attributes) {
615 return MakeAccessor(isolate, 615 return MakeAccessor(isolate,
616 isolate->factory()->source_url_string(), 616 isolate->factory()->source_url_string(),
617 &ScriptSourceUrlGetter, 617 &ScriptSourceUrlGetter,
618 &ScriptSourceUrlSetter, 618 &ScriptSourceUrlSetter,
619 attributes); 619 attributes);
620 } 620 }
621 621
622 622
623 // 623 //
624 // Accessors::ScriptSourceMappingUrl 624 // Accessors::ScriptSourceMappingUrl
625 // 625 //
626 626
627 627
628 void Accessors::ScriptSourceMappingUrlGetter( 628 void Accessors::ScriptSourceMappingUrlGetter(
629 v8::Local<v8::String> name, 629 v8::Local<v8::Name> name,
630 const v8::PropertyCallbackInfo<v8::Value>& info) { 630 const v8::PropertyCallbackInfo<v8::Value>& info) {
631 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 631 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
632 DisallowHeapAllocation no_allocation; 632 DisallowHeapAllocation no_allocation;
633 HandleScope scope(isolate); 633 HandleScope scope(isolate);
634 Object* object = *Utils::OpenHandle(*info.This()); 634 Object* object = *Utils::OpenHandle(*info.This());
635 Object* url = 635 Object* url =
636 Script::cast(JSValue::cast(object)->value())->source_mapping_url(); 636 Script::cast(JSValue::cast(object)->value())->source_mapping_url();
637 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(url, isolate))); 637 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(url, isolate)));
638 } 638 }
639 639
640 640
641 void Accessors::ScriptSourceMappingUrlSetter( 641 void Accessors::ScriptSourceMappingUrlSetter(
642 v8::Local<v8::String> name, 642 v8::Local<v8::Name> name,
643 v8::Local<v8::Value> value, 643 v8::Local<v8::Value> value,
644 const v8::PropertyCallbackInfo<void>& info) { 644 const v8::PropertyCallbackInfo<void>& info) {
645 UNREACHABLE(); 645 UNREACHABLE();
646 } 646 }
647 647
648 648
649 Handle<AccessorInfo> Accessors::ScriptSourceMappingUrlInfo( 649 Handle<AccessorInfo> Accessors::ScriptSourceMappingUrlInfo(
650 Isolate* isolate, PropertyAttributes attributes) { 650 Isolate* isolate, PropertyAttributes attributes) {
651 return MakeAccessor(isolate, 651 return MakeAccessor(isolate,
652 isolate->factory()->source_mapping_url_string(), 652 isolate->factory()->source_mapping_url_string(),
653 &ScriptSourceMappingUrlGetter, 653 &ScriptSourceMappingUrlGetter,
654 &ScriptSourceMappingUrlSetter, 654 &ScriptSourceMappingUrlSetter,
655 attributes); 655 attributes);
656 } 656 }
657 657
658 658
659 // 659 //
660 // Accessors::ScriptGetContextData 660 // Accessors::ScriptGetContextData
661 // 661 //
662 662
663 663
664 void Accessors::ScriptContextDataGetter( 664 void Accessors::ScriptContextDataGetter(
665 v8::Local<v8::String> name, 665 v8::Local<v8::Name> name,
666 const v8::PropertyCallbackInfo<v8::Value>& info) { 666 const v8::PropertyCallbackInfo<v8::Value>& info) {
667 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 667 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
668 DisallowHeapAllocation no_allocation; 668 DisallowHeapAllocation no_allocation;
669 HandleScope scope(isolate); 669 HandleScope scope(isolate);
670 Object* object = *Utils::OpenHandle(*info.This()); 670 Object* object = *Utils::OpenHandle(*info.This());
671 Object* res = Script::cast(JSValue::cast(object)->value())->context_data(); 671 Object* res = Script::cast(JSValue::cast(object)->value())->context_data();
672 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate))); 672 info.GetReturnValue().Set(Utils::ToLocal(Handle<Object>(res, isolate)));
673 } 673 }
674 674
675 675
676 void Accessors::ScriptContextDataSetter( 676 void Accessors::ScriptContextDataSetter(
677 v8::Local<v8::String> name, 677 v8::Local<v8::Name> name,
678 v8::Local<v8::Value> value, 678 v8::Local<v8::Value> value,
679 const v8::PropertyCallbackInfo<void>& info) { 679 const v8::PropertyCallbackInfo<void>& info) {
680 UNREACHABLE(); 680 UNREACHABLE();
681 } 681 }
682 682
683 683
684 Handle<AccessorInfo> Accessors::ScriptContextDataInfo( 684 Handle<AccessorInfo> Accessors::ScriptContextDataInfo(
685 Isolate* isolate, PropertyAttributes attributes) { 685 Isolate* isolate, PropertyAttributes attributes) {
686 Handle<String> name(isolate->factory()->InternalizeOneByteString( 686 Handle<String> name(isolate->factory()->InternalizeOneByteString(
687 STATIC_ASCII_VECTOR("context_data"))); 687 STATIC_ASCII_VECTOR("context_data")));
688 return MakeAccessor(isolate, 688 return MakeAccessor(isolate,
689 name, 689 name,
690 &ScriptContextDataGetter, 690 &ScriptContextDataGetter,
691 &ScriptContextDataSetter, 691 &ScriptContextDataSetter,
692 attributes); 692 attributes);
693 } 693 }
694 694
695 695
696 // 696 //
697 // Accessors::ScriptGetEvalFromScript 697 // Accessors::ScriptGetEvalFromScript
698 // 698 //
699 699
700 700
701 void Accessors::ScriptEvalFromScriptGetter( 701 void Accessors::ScriptEvalFromScriptGetter(
702 v8::Local<v8::String> name, 702 v8::Local<v8::Name> name,
703 const v8::PropertyCallbackInfo<v8::Value>& info) { 703 const v8::PropertyCallbackInfo<v8::Value>& info) {
704 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 704 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
705 HandleScope scope(isolate); 705 HandleScope scope(isolate);
706 Handle<Object> object = Utils::OpenHandle(*info.This()); 706 Handle<Object> object = Utils::OpenHandle(*info.This());
707 Handle<Script> script( 707 Handle<Script> script(
708 Script::cast(Handle<JSValue>::cast(object)->value()), isolate); 708 Script::cast(Handle<JSValue>::cast(object)->value()), isolate);
709 Handle<Object> result = isolate->factory()->undefined_value(); 709 Handle<Object> result = isolate->factory()->undefined_value();
710 if (!script->eval_from_shared()->IsUndefined()) { 710 if (!script->eval_from_shared()->IsUndefined()) {
711 Handle<SharedFunctionInfo> eval_from_shared( 711 Handle<SharedFunctionInfo> eval_from_shared(
712 SharedFunctionInfo::cast(script->eval_from_shared())); 712 SharedFunctionInfo::cast(script->eval_from_shared()));
713 if (eval_from_shared->script()->IsScript()) { 713 if (eval_from_shared->script()->IsScript()) {
714 Handle<Script> eval_from_script(Script::cast(eval_from_shared->script())); 714 Handle<Script> eval_from_script(Script::cast(eval_from_shared->script()));
715 result = Script::GetWrapper(eval_from_script); 715 result = Script::GetWrapper(eval_from_script);
716 } 716 }
717 } 717 }
718 718
719 info.GetReturnValue().Set(Utils::ToLocal(result)); 719 info.GetReturnValue().Set(Utils::ToLocal(result));
720 } 720 }
721 721
722 722
723 void Accessors::ScriptEvalFromScriptSetter( 723 void Accessors::ScriptEvalFromScriptSetter(
724 v8::Local<v8::String> name, 724 v8::Local<v8::Name> name,
725 v8::Local<v8::Value> value, 725 v8::Local<v8::Value> value,
726 const v8::PropertyCallbackInfo<void>& info) { 726 const v8::PropertyCallbackInfo<void>& info) {
727 UNREACHABLE(); 727 UNREACHABLE();
728 } 728 }
729 729
730 730
731 Handle<AccessorInfo> Accessors::ScriptEvalFromScriptInfo( 731 Handle<AccessorInfo> Accessors::ScriptEvalFromScriptInfo(
732 Isolate* isolate, PropertyAttributes attributes) { 732 Isolate* isolate, PropertyAttributes attributes) {
733 Handle<String> name(isolate->factory()->InternalizeOneByteString( 733 Handle<String> name(isolate->factory()->InternalizeOneByteString(
734 STATIC_ASCII_VECTOR("eval_from_script"))); 734 STATIC_ASCII_VECTOR("eval_from_script")));
735 return MakeAccessor(isolate, 735 return MakeAccessor(isolate,
736 name, 736 name,
737 &ScriptEvalFromScriptGetter, 737 &ScriptEvalFromScriptGetter,
738 &ScriptEvalFromScriptSetter, 738 &ScriptEvalFromScriptSetter,
739 attributes); 739 attributes);
740 } 740 }
741 741
742 742
743 // 743 //
744 // Accessors::ScriptGetEvalFromScriptPosition 744 // Accessors::ScriptGetEvalFromScriptPosition
745 // 745 //
746 746
747 747
748 void Accessors::ScriptEvalFromScriptPositionGetter( 748 void Accessors::ScriptEvalFromScriptPositionGetter(
749 v8::Local<v8::String> name, 749 v8::Local<v8::Name> name,
750 const v8::PropertyCallbackInfo<v8::Value>& info) { 750 const v8::PropertyCallbackInfo<v8::Value>& info) {
751 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 751 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
752 HandleScope scope(isolate); 752 HandleScope scope(isolate);
753 Handle<Object> object = Utils::OpenHandle(*info.This()); 753 Handle<Object> object = Utils::OpenHandle(*info.This());
754 Handle<Script> script( 754 Handle<Script> script(
755 Script::cast(Handle<JSValue>::cast(object)->value()), isolate); 755 Script::cast(Handle<JSValue>::cast(object)->value()), isolate);
756 Handle<Object> result = isolate->factory()->undefined_value(); 756 Handle<Object> result = isolate->factory()->undefined_value();
757 if (script->compilation_type() == Script::COMPILATION_TYPE_EVAL) { 757 if (script->compilation_type() == Script::COMPILATION_TYPE_EVAL) {
758 Handle<Code> code(SharedFunctionInfo::cast( 758 Handle<Code> code(SharedFunctionInfo::cast(
759 script->eval_from_shared())->code()); 759 script->eval_from_shared())->code());
760 result = Handle<Object>( 760 result = Handle<Object>(
761 Smi::FromInt(code->SourcePosition(code->instruction_start() + 761 Smi::FromInt(code->SourcePosition(code->instruction_start() +
762 script->eval_from_instructions_offset()->value())), 762 script->eval_from_instructions_offset()->value())),
763 isolate); 763 isolate);
764 } 764 }
765 info.GetReturnValue().Set(Utils::ToLocal(result)); 765 info.GetReturnValue().Set(Utils::ToLocal(result));
766 } 766 }
767 767
768 768
769 void Accessors::ScriptEvalFromScriptPositionSetter( 769 void Accessors::ScriptEvalFromScriptPositionSetter(
770 v8::Local<v8::String> name, 770 v8::Local<v8::Name> name,
771 v8::Local<v8::Value> value, 771 v8::Local<v8::Value> value,
772 const v8::PropertyCallbackInfo<void>& info) { 772 const v8::PropertyCallbackInfo<void>& info) {
773 UNREACHABLE(); 773 UNREACHABLE();
774 } 774 }
775 775
776 776
777 Handle<AccessorInfo> Accessors::ScriptEvalFromScriptPositionInfo( 777 Handle<AccessorInfo> Accessors::ScriptEvalFromScriptPositionInfo(
778 Isolate* isolate, PropertyAttributes attributes) { 778 Isolate* isolate, PropertyAttributes attributes) {
779 Handle<String> name(isolate->factory()->InternalizeOneByteString( 779 Handle<String> name(isolate->factory()->InternalizeOneByteString(
780 STATIC_ASCII_VECTOR("eval_from_script_position"))); 780 STATIC_ASCII_VECTOR("eval_from_script_position")));
781 return MakeAccessor(isolate, 781 return MakeAccessor(isolate,
782 name, 782 name,
783 &ScriptEvalFromScriptPositionGetter, 783 &ScriptEvalFromScriptPositionGetter,
784 &ScriptEvalFromScriptPositionSetter, 784 &ScriptEvalFromScriptPositionSetter,
785 attributes); 785 attributes);
786 } 786 }
787 787
788 788
789 // 789 //
790 // Accessors::ScriptGetEvalFromFunctionName 790 // Accessors::ScriptGetEvalFromFunctionName
791 // 791 //
792 792
793 793
794 void Accessors::ScriptEvalFromFunctionNameGetter( 794 void Accessors::ScriptEvalFromFunctionNameGetter(
795 v8::Local<v8::String> name, 795 v8::Local<v8::Name> name,
796 const v8::PropertyCallbackInfo<v8::Value>& info) { 796 const v8::PropertyCallbackInfo<v8::Value>& info) {
797 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 797 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
798 HandleScope scope(isolate); 798 HandleScope scope(isolate);
799 Handle<Object> object = Utils::OpenHandle(*info.This()); 799 Handle<Object> object = Utils::OpenHandle(*info.This());
800 Handle<Script> script( 800 Handle<Script> script(
801 Script::cast(Handle<JSValue>::cast(object)->value()), isolate); 801 Script::cast(Handle<JSValue>::cast(object)->value()), isolate);
802 Handle<Object> result; 802 Handle<Object> result;
803 Handle<SharedFunctionInfo> shared( 803 Handle<SharedFunctionInfo> shared(
804 SharedFunctionInfo::cast(script->eval_from_shared())); 804 SharedFunctionInfo::cast(script->eval_from_shared()));
805 // Find the name of the function calling eval. 805 // Find the name of the function calling eval.
806 if (!shared->name()->IsUndefined()) { 806 if (!shared->name()->IsUndefined()) {
807 result = Handle<Object>(shared->name(), isolate); 807 result = Handle<Object>(shared->name(), isolate);
808 } else { 808 } else {
809 result = Handle<Object>(shared->inferred_name(), isolate); 809 result = Handle<Object>(shared->inferred_name(), isolate);
810 } 810 }
811 info.GetReturnValue().Set(Utils::ToLocal(result)); 811 info.GetReturnValue().Set(Utils::ToLocal(result));
812 } 812 }
813 813
814 814
815 void Accessors::ScriptEvalFromFunctionNameSetter( 815 void Accessors::ScriptEvalFromFunctionNameSetter(
816 v8::Local<v8::String> name, 816 v8::Local<v8::Name> name,
817 v8::Local<v8::Value> value, 817 v8::Local<v8::Value> value,
818 const v8::PropertyCallbackInfo<void>& info) { 818 const v8::PropertyCallbackInfo<void>& info) {
819 UNREACHABLE(); 819 UNREACHABLE();
820 } 820 }
821 821
822 822
823 Handle<AccessorInfo> Accessors::ScriptEvalFromFunctionNameInfo( 823 Handle<AccessorInfo> Accessors::ScriptEvalFromFunctionNameInfo(
824 Isolate* isolate, PropertyAttributes attributes) { 824 Isolate* isolate, PropertyAttributes attributes) {
825 Handle<String> name(isolate->factory()->InternalizeOneByteString( 825 Handle<String> name(isolate->factory()->InternalizeOneByteString(
826 STATIC_ASCII_VECTOR("eval_from_function_name"))); 826 STATIC_ASCII_VECTOR("eval_from_function_name")));
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
877 877
878 Handle<Object> Accessors::FunctionSetPrototype(Handle<JSFunction> function, 878 Handle<Object> Accessors::FunctionSetPrototype(Handle<JSFunction> function,
879 Handle<Object> prototype) { 879 Handle<Object> prototype) {
880 DCHECK(function->should_have_prototype()); 880 DCHECK(function->should_have_prototype());
881 Isolate* isolate = function->GetIsolate(); 881 Isolate* isolate = function->GetIsolate();
882 return SetFunctionPrototype(isolate, function, prototype); 882 return SetFunctionPrototype(isolate, function, prototype);
883 } 883 }
884 884
885 885
886 void Accessors::FunctionPrototypeGetter( 886 void Accessors::FunctionPrototypeGetter(
887 v8::Local<v8::String> name, 887 v8::Local<v8::Name> name,
888 const v8::PropertyCallbackInfo<v8::Value>& info) { 888 const v8::PropertyCallbackInfo<v8::Value>& info) {
889 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 889 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
890 HandleScope scope(isolate); 890 HandleScope scope(isolate);
891 Handle<JSFunction> function = 891 Handle<JSFunction> function =
892 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); 892 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
893 Handle<Object> result = GetFunctionPrototype(isolate, function); 893 Handle<Object> result = GetFunctionPrototype(isolate, function);
894 info.GetReturnValue().Set(Utils::ToLocal(result)); 894 info.GetReturnValue().Set(Utils::ToLocal(result));
895 } 895 }
896 896
897 897
898 void Accessors::FunctionPrototypeSetter( 898 void Accessors::FunctionPrototypeSetter(
899 v8::Local<v8::String> name, 899 v8::Local<v8::Name> name,
900 v8::Local<v8::Value> val, 900 v8::Local<v8::Value> val,
901 const v8::PropertyCallbackInfo<void>& info) { 901 const v8::PropertyCallbackInfo<void>& info) {
902 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 902 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
903 HandleScope scope(isolate); 903 HandleScope scope(isolate);
904 Handle<Object> value = Utils::OpenHandle(*val); 904 Handle<Object> value = Utils::OpenHandle(*val);
905 if (SetPropertyOnInstanceIfInherited(isolate, info, name, value)) { 905 if (SetPropertyOnInstanceIfInherited(isolate, info, name, value)) {
906 return; 906 return;
907 } 907 }
908 Handle<JSFunction> object = 908 Handle<JSFunction> object =
909 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); 909 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
(...skipping 10 matching lines...) Expand all
920 attributes); 920 attributes);
921 } 921 }
922 922
923 923
924 // 924 //
925 // Accessors::FunctionLength 925 // Accessors::FunctionLength
926 // 926 //
927 927
928 928
929 void Accessors::FunctionLengthGetter( 929 void Accessors::FunctionLengthGetter(
930 v8::Local<v8::String> name, 930 v8::Local<v8::Name> name,
931 const v8::PropertyCallbackInfo<v8::Value>& info) { 931 const v8::PropertyCallbackInfo<v8::Value>& info) {
932 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 932 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
933 HandleScope scope(isolate); 933 HandleScope scope(isolate);
934 Handle<JSFunction> function = 934 Handle<JSFunction> function =
935 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); 935 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
936 936
937 int length = 0; 937 int length = 0;
938 if (function->shared()->is_compiled()) { 938 if (function->shared()->is_compiled()) {
939 length = function->shared()->length(); 939 length = function->shared()->length();
940 } else { 940 } else {
941 // If the function isn't compiled yet, the length is not computed 941 // If the function isn't compiled yet, the length is not computed
942 // correctly yet. Compile it now and return the right length. 942 // correctly yet. Compile it now and return the right length.
943 if (Compiler::EnsureCompiled(function, KEEP_EXCEPTION)) { 943 if (Compiler::EnsureCompiled(function, KEEP_EXCEPTION)) {
944 length = function->shared()->length(); 944 length = function->shared()->length();
945 } 945 }
946 if (isolate->has_pending_exception()) { 946 if (isolate->has_pending_exception()) {
947 isolate->OptionalRescheduleException(false); 947 isolate->OptionalRescheduleException(false);
948 } 948 }
949 } 949 }
950 Handle<Object> result(Smi::FromInt(length), isolate); 950 Handle<Object> result(Smi::FromInt(length), isolate);
951 info.GetReturnValue().Set(Utils::ToLocal(result)); 951 info.GetReturnValue().Set(Utils::ToLocal(result));
952 } 952 }
953 953
954 954
955 void Accessors::FunctionLengthSetter( 955 void Accessors::FunctionLengthSetter(
956 v8::Local<v8::String> name, 956 v8::Local<v8::Name> name,
957 v8::Local<v8::Value> val, 957 v8::Local<v8::Value> val,
958 const v8::PropertyCallbackInfo<void>& info) { 958 const v8::PropertyCallbackInfo<void>& info) {
959 // Function length is non writable, non configurable. 959 // Function length is non writable, non configurable.
960 UNREACHABLE(); 960 UNREACHABLE();
961 } 961 }
962 962
963 963
964 Handle<AccessorInfo> Accessors::FunctionLengthInfo( 964 Handle<AccessorInfo> Accessors::FunctionLengthInfo(
965 Isolate* isolate, PropertyAttributes attributes) { 965 Isolate* isolate, PropertyAttributes attributes) {
966 return MakeAccessor(isolate, 966 return MakeAccessor(isolate,
967 isolate->factory()->length_string(), 967 isolate->factory()->length_string(),
968 &FunctionLengthGetter, 968 &FunctionLengthGetter,
969 &FunctionLengthSetter, 969 &FunctionLengthSetter,
970 attributes); 970 attributes);
971 } 971 }
972 972
973 973
974 // 974 //
975 // Accessors::FunctionName 975 // Accessors::FunctionName
976 // 976 //
977 977
978 978
979 void Accessors::FunctionNameGetter( 979 void Accessors::FunctionNameGetter(
980 v8::Local<v8::String> name, 980 v8::Local<v8::Name> name,
981 const v8::PropertyCallbackInfo<v8::Value>& info) { 981 const v8::PropertyCallbackInfo<v8::Value>& info) {
982 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 982 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
983 HandleScope scope(isolate); 983 HandleScope scope(isolate);
984 Handle<JSFunction> function = 984 Handle<JSFunction> function =
985 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); 985 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
986 Handle<Object> result(function->shared()->name(), isolate); 986 Handle<Object> result(function->shared()->name(), isolate);
987 info.GetReturnValue().Set(Utils::ToLocal(result)); 987 info.GetReturnValue().Set(Utils::ToLocal(result));
988 } 988 }
989 989
990 990
991 void Accessors::FunctionNameSetter( 991 void Accessors::FunctionNameSetter(
992 v8::Local<v8::String> name, 992 v8::Local<v8::Name> name,
993 v8::Local<v8::Value> val, 993 v8::Local<v8::Value> val,
994 const v8::PropertyCallbackInfo<void>& info) { 994 const v8::PropertyCallbackInfo<void>& info) {
995 // Function name is non writable, non configurable. 995 // Function name is non writable, non configurable.
996 UNREACHABLE(); 996 UNREACHABLE();
997 } 997 }
998 998
999 999
1000 Handle<AccessorInfo> Accessors::FunctionNameInfo( 1000 Handle<AccessorInfo> Accessors::FunctionNameInfo(
1001 Isolate* isolate, PropertyAttributes attributes) { 1001 Isolate* isolate, PropertyAttributes attributes) {
1002 return MakeAccessor(isolate, 1002 return MakeAccessor(isolate,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1107 return isolate->factory()->null_value(); 1107 return isolate->factory()->null_value();
1108 } 1108 }
1109 1109
1110 1110
1111 Handle<Object> Accessors::FunctionGetArguments(Handle<JSFunction> function) { 1111 Handle<Object> Accessors::FunctionGetArguments(Handle<JSFunction> function) {
1112 return GetFunctionArguments(function->GetIsolate(), function); 1112 return GetFunctionArguments(function->GetIsolate(), function);
1113 } 1113 }
1114 1114
1115 1115
1116 void Accessors::FunctionArgumentsGetter( 1116 void Accessors::FunctionArgumentsGetter(
1117 v8::Local<v8::String> name, 1117 v8::Local<v8::Name> name,
1118 const v8::PropertyCallbackInfo<v8::Value>& info) { 1118 const v8::PropertyCallbackInfo<v8::Value>& info) {
1119 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 1119 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
1120 HandleScope scope(isolate); 1120 HandleScope scope(isolate);
1121 Handle<JSFunction> function = 1121 Handle<JSFunction> function =
1122 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); 1122 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
1123 Handle<Object> result = GetFunctionArguments(isolate, function); 1123 Handle<Object> result = GetFunctionArguments(isolate, function);
1124 info.GetReturnValue().Set(Utils::ToLocal(result)); 1124 info.GetReturnValue().Set(Utils::ToLocal(result));
1125 } 1125 }
1126 1126
1127 1127
1128 void Accessors::FunctionArgumentsSetter( 1128 void Accessors::FunctionArgumentsSetter(
1129 v8::Local<v8::String> name, 1129 v8::Local<v8::Name> name,
1130 v8::Local<v8::Value> val, 1130 v8::Local<v8::Value> val,
1131 const v8::PropertyCallbackInfo<void>& info) { 1131 const v8::PropertyCallbackInfo<void>& info) {
1132 // Function arguments is non writable, non configurable. 1132 // Function arguments is non writable, non configurable.
1133 UNREACHABLE(); 1133 UNREACHABLE();
1134 } 1134 }
1135 1135
1136 1136
1137 Handle<AccessorInfo> Accessors::FunctionArgumentsInfo( 1137 Handle<AccessorInfo> Accessors::FunctionArgumentsInfo(
1138 Isolate* isolate, PropertyAttributes attributes) { 1138 Isolate* isolate, PropertyAttributes attributes) {
1139 return MakeAccessor(isolate, 1139 return MakeAccessor(isolate,
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 } 1250 }
1251 // Don't return caller from another security context. 1251 // Don't return caller from another security context.
1252 if (!AllowAccessToFunction(isolate->context(), caller)) { 1252 if (!AllowAccessToFunction(isolate->context(), caller)) {
1253 return MaybeHandle<JSFunction>(); 1253 return MaybeHandle<JSFunction>();
1254 } 1254 }
1255 return Handle<JSFunction>(caller); 1255 return Handle<JSFunction>(caller);
1256 } 1256 }
1257 1257
1258 1258
1259 void Accessors::FunctionCallerGetter( 1259 void Accessors::FunctionCallerGetter(
1260 v8::Local<v8::String> name, 1260 v8::Local<v8::Name> name,
1261 const v8::PropertyCallbackInfo<v8::Value>& info) { 1261 const v8::PropertyCallbackInfo<v8::Value>& info) {
1262 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate()); 1262 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
1263 HandleScope scope(isolate); 1263 HandleScope scope(isolate);
1264 Handle<JSFunction> function = 1264 Handle<JSFunction> function =
1265 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder())); 1265 Handle<JSFunction>::cast(Utils::OpenHandle(*info.Holder()));
1266 Handle<Object> result; 1266 Handle<Object> result;
1267 MaybeHandle<JSFunction> maybe_caller; 1267 MaybeHandle<JSFunction> maybe_caller;
1268 maybe_caller = FindCaller(isolate, function); 1268 maybe_caller = FindCaller(isolate, function);
1269 Handle<JSFunction> caller; 1269 Handle<JSFunction> caller;
1270 if (maybe_caller.ToHandle(&caller)) { 1270 if (maybe_caller.ToHandle(&caller)) {
1271 result = caller; 1271 result = caller;
1272 } else { 1272 } else {
1273 result = isolate->factory()->null_value(); 1273 result = isolate->factory()->null_value();
1274 } 1274 }
1275 info.GetReturnValue().Set(Utils::ToLocal(result)); 1275 info.GetReturnValue().Set(Utils::ToLocal(result));
1276 } 1276 }
1277 1277
1278 1278
1279 void Accessors::FunctionCallerSetter( 1279 void Accessors::FunctionCallerSetter(
1280 v8::Local<v8::String> name, 1280 v8::Local<v8::Name> name,
1281 v8::Local<v8::Value> val, 1281 v8::Local<v8::Value> val,
1282 const v8::PropertyCallbackInfo<void>& info) { 1282 const v8::PropertyCallbackInfo<void>& info) {
1283 // Function caller is non writable, non configurable. 1283 // Function caller is non writable, non configurable.
1284 UNREACHABLE(); 1284 UNREACHABLE();
1285 } 1285 }
1286 1286
1287 1287
1288 Handle<AccessorInfo> Accessors::FunctionCallerInfo( 1288 Handle<AccessorInfo> Accessors::FunctionCallerInfo(
1289 Isolate* isolate, PropertyAttributes attributes) { 1289 Isolate* isolate, PropertyAttributes attributes) {
1290 return MakeAccessor(isolate, 1290 return MakeAccessor(isolate,
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1354 info->set_data(Smi::FromInt(index)); 1354 info->set_data(Smi::FromInt(index));
1355 Handle<Object> getter = v8::FromCData(isolate, &ModuleGetExport); 1355 Handle<Object> getter = v8::FromCData(isolate, &ModuleGetExport);
1356 Handle<Object> setter = v8::FromCData(isolate, &ModuleSetExport); 1356 Handle<Object> setter = v8::FromCData(isolate, &ModuleSetExport);
1357 info->set_getter(*getter); 1357 info->set_getter(*getter);
1358 if (!(attributes & ReadOnly)) info->set_setter(*setter); 1358 if (!(attributes & ReadOnly)) info->set_setter(*setter);
1359 return info; 1359 return info;
1360 } 1360 }
1361 1361
1362 1362
1363 } } // namespace v8::internal 1363 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/accessors.h ('k') | src/api.h » ('j') | src/api.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698