OLD | NEW |
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2008 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 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 // The handlers are called as static functions that forward | 89 // The handlers are called as static functions that forward |
90 // to the instance specific virtual methods. | 90 // to the instance specific virtual methods. |
91 static void HandleGet(Local<String> key, | 91 static void HandleGet(Local<String> key, |
92 const v8::PropertyCallbackInfo<v8::Value>& info); | 92 const v8::PropertyCallbackInfo<v8::Value>& info); |
93 static void HandleSet(Local<String> key, | 93 static void HandleSet(Local<String> key, |
94 Local<Value> value, | 94 Local<Value> value, |
95 const v8::PropertyCallbackInfo<v8::Value>& info); | 95 const v8::PropertyCallbackInfo<v8::Value>& info); |
96 static void HandleQuery(Local<String> key, | 96 static void HandleQuery(Local<String> key, |
97 const v8::PropertyCallbackInfo<v8::Integer>& info); | 97 const v8::PropertyCallbackInfo<v8::Integer>& info); |
98 | 98 |
| 99 v8::Isolate* isolate() const { return CcTest::isolate(); } |
| 100 |
99 private: | 101 private: |
100 bool is_initialized_; | 102 bool is_initialized_; |
101 Persistent<Context> context_; | 103 Persistent<Context> context_; |
102 | 104 |
103 int get_count_; | 105 int get_count_; |
104 int set_count_; | 106 int set_count_; |
105 int query_count_; | 107 int query_count_; |
106 | 108 |
107 static DeclarationContext* GetInstance(Local<Value> data); | 109 static DeclarationContext* GetInstance(Local<Value> data); |
108 }; | 110 }; |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 1, // declaration | 239 1, // declaration |
238 2, // declaration + initialization | 240 2, // declaration + initialization |
239 EXPECT_RESULT, Undefined(CcTest::isolate())); | 241 EXPECT_RESULT, Undefined(CcTest::isolate())); |
240 } | 242 } |
241 | 243 |
242 { DeclarationContext context; | 244 { DeclarationContext context; |
243 context.Check("var x = 0; x", | 245 context.Check("var x = 0; x", |
244 1, // access | 246 1, // access |
245 2, // declaration + initialization | 247 2, // declaration + initialization |
246 2, // declaration + initialization | 248 2, // declaration + initialization |
247 EXPECT_RESULT, Number::New(0)); | 249 EXPECT_RESULT, Number::New(CcTest::isolate(), 0)); |
248 } | 250 } |
249 | 251 |
250 { DeclarationContext context; | 252 { DeclarationContext context; |
251 context.Check("function x() { }; x", | 253 context.Check("function x() { }; x", |
252 1, // access | 254 1, // access |
253 0, | 255 0, |
254 0, | 256 0, |
255 EXPECT_RESULT); | 257 EXPECT_RESULT); |
256 } | 258 } |
257 | 259 |
(...skipping 13 matching lines...) Expand all Loading... |
271 1, // declaration | 273 1, // declaration |
272 EXPECT_RESULT, Undefined(CcTest::isolate())); | 274 EXPECT_RESULT, Undefined(CcTest::isolate())); |
273 } | 275 } |
274 } | 276 } |
275 | 277 |
276 | 278 |
277 | 279 |
278 class PresentPropertyContext: public DeclarationContext { | 280 class PresentPropertyContext: public DeclarationContext { |
279 protected: | 281 protected: |
280 virtual v8::Handle<Integer> Query(Local<String> key) { | 282 virtual v8::Handle<Integer> Query(Local<String> key) { |
281 return Integer::New(v8::None); | 283 return Integer::New(isolate(), v8::None); |
282 } | 284 } |
283 }; | 285 }; |
284 | 286 |
285 | 287 |
286 | 288 |
287 TEST(Present) { | 289 TEST(Present) { |
288 HandleScope scope(CcTest::isolate()); | 290 HandleScope scope(CcTest::isolate()); |
289 | 291 |
290 { PresentPropertyContext context; | 292 { PresentPropertyContext context; |
291 context.Check("var x; x", | 293 context.Check("var x; x", |
292 1, // access | 294 1, // access |
293 0, | 295 0, |
294 2, // declaration + initialization | 296 2, // declaration + initialization |
295 EXPECT_EXCEPTION); // x is not defined! | 297 EXPECT_EXCEPTION); // x is not defined! |
296 } | 298 } |
297 | 299 |
298 { PresentPropertyContext context; | 300 { PresentPropertyContext context; |
299 context.Check("var x = 0; x", | 301 context.Check("var x = 0; x", |
300 1, // access | 302 1, // access |
301 1, // initialization | 303 1, // initialization |
302 2, // declaration + initialization | 304 2, // declaration + initialization |
303 EXPECT_RESULT, Number::New(0)); | 305 EXPECT_RESULT, Number::New(CcTest::isolate(), 0)); |
304 } | 306 } |
305 | 307 |
306 { PresentPropertyContext context; | 308 { PresentPropertyContext context; |
307 context.Check("function x() { }; x", | 309 context.Check("function x() { }; x", |
308 1, // access | 310 1, // access |
309 0, | 311 0, |
310 0, | 312 0, |
311 EXPECT_RESULT); | 313 EXPECT_RESULT); |
312 } | 314 } |
313 | 315 |
314 { PresentPropertyContext context; | 316 { PresentPropertyContext context; |
315 context.Check("const x; x", | 317 context.Check("const x; x", |
316 1, // access | 318 1, // access |
317 1, // initialization | 319 1, // initialization |
318 1, // (re-)declaration | 320 1, // (re-)declaration |
319 EXPECT_RESULT, Undefined(CcTest::isolate())); | 321 EXPECT_RESULT, Undefined(CcTest::isolate())); |
320 } | 322 } |
321 | 323 |
322 { PresentPropertyContext context; | 324 { PresentPropertyContext context; |
323 context.Check("const x = 0; x", | 325 context.Check("const x = 0; x", |
324 1, // access | 326 1, // access |
325 1, // initialization | 327 1, // initialization |
326 1, // (re-)declaration | 328 1, // (re-)declaration |
327 EXPECT_RESULT, Number::New(0)); | 329 EXPECT_RESULT, Number::New(CcTest::isolate(), 0)); |
328 } | 330 } |
329 } | 331 } |
330 | 332 |
331 | 333 |
332 | 334 |
333 class AbsentPropertyContext: public DeclarationContext { | 335 class AbsentPropertyContext: public DeclarationContext { |
334 protected: | 336 protected: |
335 virtual v8::Handle<Integer> Query(Local<String> key) { | 337 virtual v8::Handle<Integer> Query(Local<String> key) { |
336 return v8::Handle<Integer>(); | 338 return v8::Handle<Integer>(); |
337 } | 339 } |
(...skipping 11 matching lines...) Expand all Loading... |
349 1, // declaration | 351 1, // declaration |
350 2, // declaration + initialization | 352 2, // declaration + initialization |
351 EXPECT_RESULT, Undefined(isolate)); | 353 EXPECT_RESULT, Undefined(isolate)); |
352 } | 354 } |
353 | 355 |
354 { AbsentPropertyContext context; | 356 { AbsentPropertyContext context; |
355 context.Check("var x = 0; x", | 357 context.Check("var x = 0; x", |
356 1, // access | 358 1, // access |
357 2, // declaration + initialization | 359 2, // declaration + initialization |
358 2, // declaration + initialization | 360 2, // declaration + initialization |
359 EXPECT_RESULT, Number::New(0)); | 361 EXPECT_RESULT, Number::New(isolate, 0)); |
360 } | 362 } |
361 | 363 |
362 { AbsentPropertyContext context; | 364 { AbsentPropertyContext context; |
363 context.Check("function x() { }; x", | 365 context.Check("function x() { }; x", |
364 1, // access | 366 1, // access |
365 0, | 367 0, |
366 0, | 368 0, |
367 EXPECT_RESULT); | 369 EXPECT_RESULT); |
368 } | 370 } |
369 | 371 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 switch (state_) { | 411 switch (state_) { |
410 case DECLARE: | 412 case DECLARE: |
411 // Force declaration by returning that the | 413 // Force declaration by returning that the |
412 // property is absent. | 414 // property is absent. |
413 state_ = INITIALIZE_IF_ASSIGN; | 415 state_ = INITIALIZE_IF_ASSIGN; |
414 return Handle<Integer>(); | 416 return Handle<Integer>(); |
415 case INITIALIZE_IF_ASSIGN: | 417 case INITIALIZE_IF_ASSIGN: |
416 // Return that the property is present so we only get the | 418 // Return that the property is present so we only get the |
417 // setter called when initializing with a value. | 419 // setter called when initializing with a value. |
418 state_ = UNKNOWN; | 420 state_ = UNKNOWN; |
419 return Integer::New(v8::None); | 421 return Integer::New(isolate(), v8::None); |
420 default: | 422 default: |
421 CHECK(state_ == UNKNOWN); | 423 CHECK(state_ == UNKNOWN); |
422 break; | 424 break; |
423 } | 425 } |
424 // Do the lookup in the object. | 426 // Do the lookup in the object. |
425 return v8::Handle<Integer>(); | 427 return v8::Handle<Integer>(); |
426 } | 428 } |
427 | 429 |
428 private: | 430 private: |
429 State state_; | 431 State state_; |
(...skipping 10 matching lines...) Expand all Loading... |
440 1, // declaration | 442 1, // declaration |
441 2, // declaration + initialization | 443 2, // declaration + initialization |
442 EXPECT_RESULT, Undefined(CcTest::isolate())); | 444 EXPECT_RESULT, Undefined(CcTest::isolate())); |
443 } | 445 } |
444 | 446 |
445 { AppearingPropertyContext context; | 447 { AppearingPropertyContext context; |
446 context.Check("var x = 0; x", | 448 context.Check("var x = 0; x", |
447 1, // access | 449 1, // access |
448 2, // declaration + initialization | 450 2, // declaration + initialization |
449 2, // declaration + initialization | 451 2, // declaration + initialization |
450 EXPECT_RESULT, Number::New(0)); | 452 EXPECT_RESULT, Number::New(CcTest::isolate(), 0)); |
451 } | 453 } |
452 | 454 |
453 { AppearingPropertyContext context; | 455 { AppearingPropertyContext context; |
454 context.Check("function x() { }; x", | 456 context.Check("function x() { }; x", |
455 1, // access | 457 1, // access |
456 0, | 458 0, |
457 0, | 459 0, |
458 EXPECT_RESULT); | 460 EXPECT_RESULT); |
459 } | 461 } |
460 | 462 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 switch (state_) { | 497 switch (state_) { |
496 case DECLARE: | 498 case DECLARE: |
497 // Force the first declaration by returning that | 499 // Force the first declaration by returning that |
498 // the property is absent. | 500 // the property is absent. |
499 state_ = DONT_DECLARE; | 501 state_ = DONT_DECLARE; |
500 return Handle<Integer>(); | 502 return Handle<Integer>(); |
501 case DONT_DECLARE: | 503 case DONT_DECLARE: |
502 // Ignore the second declaration by returning | 504 // Ignore the second declaration by returning |
503 // that the property is already there. | 505 // that the property is already there. |
504 state_ = INITIALIZE; | 506 state_ = INITIALIZE; |
505 return Integer::New(v8::None); | 507 return Integer::New(isolate(), v8::None); |
506 case INITIALIZE: | 508 case INITIALIZE: |
507 // Force an initialization by returning that | 509 // Force an initialization by returning that |
508 // the property is absent. This will make sure | 510 // the property is absent. This will make sure |
509 // that the setter is called and it will not | 511 // that the setter is called and it will not |
510 // lead to redeclaration conflicts (yet). | 512 // lead to redeclaration conflicts (yet). |
511 state_ = UNKNOWN; | 513 state_ = UNKNOWN; |
512 return Handle<Integer>(); | 514 return Handle<Integer>(); |
513 default: | 515 default: |
514 CHECK(state_ == UNKNOWN); | 516 CHECK(state_ == UNKNOWN); |
515 break; | 517 break; |
(...skipping 16 matching lines...) Expand all Loading... |
532 0, | 534 0, |
533 3, // const declaration+initialization, var initialization | 535 3, // const declaration+initialization, var initialization |
534 3, // 2 x declaration + var initialization | 536 3, // 2 x declaration + var initialization |
535 EXPECT_RESULT, Undefined(CcTest::isolate())); | 537 EXPECT_RESULT, Undefined(CcTest::isolate())); |
536 } | 538 } |
537 } | 539 } |
538 | 540 |
539 | 541 |
540 | 542 |
541 class ExistsInPrototypeContext: public DeclarationContext { | 543 class ExistsInPrototypeContext: public DeclarationContext { |
| 544 public: |
| 545 ExistsInPrototypeContext() { InitializeIfNeeded(); } |
542 protected: | 546 protected: |
543 virtual v8::Handle<Integer> Query(Local<String> key) { | 547 virtual v8::Handle<Integer> Query(Local<String> key) { |
544 // Let it seem that the property exists in the prototype object. | 548 // Let it seem that the property exists in the prototype object. |
545 return Integer::New(v8::None); | 549 return Integer::New(isolate(), v8::None); |
546 } | 550 } |
547 | 551 |
548 // Use the prototype as the holder for the interceptors. | 552 // Use the prototype as the holder for the interceptors. |
549 virtual Local<ObjectTemplate> GetHolder(Local<FunctionTemplate> function) { | 553 virtual Local<ObjectTemplate> GetHolder(Local<FunctionTemplate> function) { |
550 return function->PrototypeTemplate(); | 554 return function->PrototypeTemplate(); |
551 } | 555 } |
552 }; | 556 }; |
553 | 557 |
554 | 558 |
555 TEST(ExistsInPrototype) { | 559 TEST(ExistsInPrototype) { |
556 i::FLAG_es52_globals = true; | 560 i::FLAG_es52_globals = true; |
557 HandleScope scope(CcTest::isolate()); | 561 HandleScope scope(CcTest::isolate()); |
558 | 562 |
559 // Sanity check to make sure that the holder of the interceptor | 563 // Sanity check to make sure that the holder of the interceptor |
560 // really is the prototype object. | 564 // really is the prototype object. |
561 { ExistsInPrototypeContext context; | 565 { ExistsInPrototypeContext context; |
562 context.Check("this.x = 87; this.x", | 566 context.Check("this.x = 87; this.x", |
563 0, | 567 0, |
564 0, | 568 0, |
565 0, | 569 0, |
566 EXPECT_RESULT, Number::New(87)); | 570 EXPECT_RESULT, Number::New(CcTest::isolate(), 87)); |
567 } | 571 } |
568 | 572 |
569 { ExistsInPrototypeContext context; | 573 { ExistsInPrototypeContext context; |
570 context.Check("var x; x", | 574 context.Check("var x; x", |
571 0, | 575 0, |
572 0, | 576 0, |
573 0, | 577 0, |
574 EXPECT_RESULT, Undefined(CcTest::isolate())); | 578 EXPECT_RESULT, Undefined(CcTest::isolate())); |
575 } | 579 } |
576 | 580 |
577 { ExistsInPrototypeContext context; | 581 { ExistsInPrototypeContext context; |
578 context.Check("var x = 0; x", | 582 context.Check("var x = 0; x", |
579 0, | 583 0, |
580 0, | 584 0, |
581 0, | 585 0, |
582 EXPECT_RESULT, Number::New(0)); | 586 EXPECT_RESULT, Number::New(CcTest::isolate(), 0)); |
583 } | 587 } |
584 | 588 |
585 { ExistsInPrototypeContext context; | 589 { ExistsInPrototypeContext context; |
586 context.Check("const x; x", | 590 context.Check("const x; x", |
587 0, | 591 0, |
588 0, | 592 0, |
589 0, | 593 0, |
590 EXPECT_RESULT, Undefined(CcTest::isolate())); | 594 EXPECT_RESULT, Undefined(CcTest::isolate())); |
591 } | 595 } |
592 | 596 |
593 { ExistsInPrototypeContext context; | 597 { ExistsInPrototypeContext context; |
594 context.Check("const x = 0; x", | 598 context.Check("const x = 0; x", |
595 0, | 599 0, |
596 0, | 600 0, |
597 0, | 601 0, |
598 EXPECT_RESULT, Number::New(0)); | 602 EXPECT_RESULT, Number::New(CcTest::isolate(), 0)); |
599 } | 603 } |
600 } | 604 } |
601 | 605 |
602 | 606 |
603 | 607 |
604 class AbsentInPrototypeContext: public DeclarationContext { | 608 class AbsentInPrototypeContext: public DeclarationContext { |
605 protected: | 609 protected: |
606 virtual v8::Handle<Integer> Query(Local<String> key) { | 610 virtual v8::Handle<Integer> Query(Local<String> key) { |
607 // Let it seem that the property is absent in the prototype object. | 611 // Let it seem that the property is absent in the prototype object. |
608 return Handle<Integer>(); | 612 return Handle<Integer>(); |
(...skipping 25 matching lines...) Expand all Loading... |
634 class ExistsInHiddenPrototypeContext: public DeclarationContext { | 638 class ExistsInHiddenPrototypeContext: public DeclarationContext { |
635 public: | 639 public: |
636 ExistsInHiddenPrototypeContext() { | 640 ExistsInHiddenPrototypeContext() { |
637 hidden_proto_ = FunctionTemplate::New(CcTest::isolate()); | 641 hidden_proto_ = FunctionTemplate::New(CcTest::isolate()); |
638 hidden_proto_->SetHiddenPrototype(true); | 642 hidden_proto_->SetHiddenPrototype(true); |
639 } | 643 } |
640 | 644 |
641 protected: | 645 protected: |
642 virtual v8::Handle<Integer> Query(Local<String> key) { | 646 virtual v8::Handle<Integer> Query(Local<String> key) { |
643 // Let it seem that the property exists in the hidden prototype object. | 647 // Let it seem that the property exists in the hidden prototype object. |
644 return Integer::New(v8::None); | 648 return Integer::New(isolate(), v8::None); |
645 } | 649 } |
646 | 650 |
647 // Install the hidden prototype after the global object has been created. | 651 // Install the hidden prototype after the global object has been created. |
648 virtual void PostInitializeContext(Handle<Context> context) { | 652 virtual void PostInitializeContext(Handle<Context> context) { |
649 Local<Object> global_object = context->Global(); | 653 Local<Object> global_object = context->Global(); |
650 Local<Object> hidden_proto = hidden_proto_->GetFunction()->NewInstance(); | 654 Local<Object> hidden_proto = hidden_proto_->GetFunction()->NewInstance(); |
651 Local<Object> inner_global = | 655 Local<Object> inner_global = |
652 Local<Object>::Cast(global_object->GetPrototype()); | 656 Local<Object>::Cast(global_object->GetPrototype()); |
653 inner_global->SetPrototype(hidden_proto); | 657 inner_global->SetPrototype(hidden_proto); |
654 } | 658 } |
(...skipping 18 matching lines...) Expand all Loading... |
673 0, | 677 0, |
674 2, // declaration + initialization | 678 2, // declaration + initialization |
675 EXPECT_EXCEPTION); // x is not defined! | 679 EXPECT_EXCEPTION); // x is not defined! |
676 } | 680 } |
677 | 681 |
678 { ExistsInHiddenPrototypeContext context; | 682 { ExistsInHiddenPrototypeContext context; |
679 context.Check("var x = 0; x", | 683 context.Check("var x = 0; x", |
680 1, // access | 684 1, // access |
681 1, // initialization | 685 1, // initialization |
682 2, // declaration + initialization | 686 2, // declaration + initialization |
683 EXPECT_RESULT, Number::New(0)); | 687 EXPECT_RESULT, Number::New(CcTest::isolate(), 0)); |
684 } | 688 } |
685 | 689 |
686 { ExistsInHiddenPrototypeContext context; | 690 { ExistsInHiddenPrototypeContext context; |
687 context.Check("function x() { }; x", | 691 context.Check("function x() { }; x", |
688 0, | 692 0, |
689 0, | 693 0, |
690 0, | 694 0, |
691 EXPECT_RESULT); | 695 EXPECT_RESULT); |
692 } | 696 } |
693 | 697 |
694 // TODO(mstarzinger): The semantics of global const is vague. | 698 // TODO(mstarzinger): The semantics of global const is vague. |
695 { ExistsInHiddenPrototypeContext context; | 699 { ExistsInHiddenPrototypeContext context; |
696 context.Check("const x; x", | 700 context.Check("const x; x", |
697 0, | 701 0, |
698 0, | 702 0, |
699 1, // (re-)declaration | 703 1, // (re-)declaration |
700 EXPECT_RESULT, Undefined(CcTest::isolate())); | 704 EXPECT_RESULT, Undefined(CcTest::isolate())); |
701 } | 705 } |
702 | 706 |
703 // TODO(mstarzinger): The semantics of global const is vague. | 707 // TODO(mstarzinger): The semantics of global const is vague. |
704 { ExistsInHiddenPrototypeContext context; | 708 { ExistsInHiddenPrototypeContext context; |
705 context.Check("const x = 0; x", | 709 context.Check("const x = 0; x", |
706 0, | 710 0, |
707 0, | 711 0, |
708 1, // (re-)declaration | 712 1, // (re-)declaration |
709 EXPECT_RESULT, Number::New(0)); | 713 EXPECT_RESULT, Number::New(CcTest::isolate(), 0)); |
710 } | 714 } |
711 } | 715 } |
712 | 716 |
713 | 717 |
714 | 718 |
715 class SimpleContext { | 719 class SimpleContext { |
716 public: | 720 public: |
717 SimpleContext() | 721 SimpleContext() |
718 : handle_scope_(CcTest::isolate()), | 722 : handle_scope_(CcTest::isolate()), |
719 context_(Context::New(CcTest::isolate())) { | 723 context_(Context::New(CcTest::isolate())) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
752 } | 756 } |
753 } | 757 } |
754 | 758 |
755 private: | 759 private: |
756 HandleScope handle_scope_; | 760 HandleScope handle_scope_; |
757 Local<Context> context_; | 761 Local<Context> context_; |
758 }; | 762 }; |
759 | 763 |
760 | 764 |
761 TEST(CrossScriptReferences) { | 765 TEST(CrossScriptReferences) { |
762 HandleScope scope(CcTest::isolate()); | 766 v8::Isolate* isolate = CcTest::isolate(); |
| 767 HandleScope scope(isolate); |
763 | 768 |
764 { SimpleContext context; | 769 { SimpleContext context; |
765 context.Check("var x = 1; x", | 770 context.Check("var x = 1; x", |
766 EXPECT_RESULT, Number::New(1)); | 771 EXPECT_RESULT, Number::New(isolate, 1)); |
767 context.Check("var x = 2; x", | 772 context.Check("var x = 2; x", |
768 EXPECT_RESULT, Number::New(2)); | 773 EXPECT_RESULT, Number::New(isolate, 2)); |
769 context.Check("const x = 3; x", | 774 context.Check("const x = 3; x", |
770 EXPECT_RESULT, Number::New(3)); | 775 EXPECT_RESULT, Number::New(isolate, 3)); |
771 context.Check("const x = 4; x", | 776 context.Check("const x = 4; x", |
772 EXPECT_RESULT, Number::New(4)); | 777 EXPECT_RESULT, Number::New(isolate, 4)); |
773 context.Check("x = 5; x", | 778 context.Check("x = 5; x", |
774 EXPECT_RESULT, Number::New(5)); | 779 EXPECT_RESULT, Number::New(isolate, 5)); |
775 context.Check("var x = 6; x", | 780 context.Check("var x = 6; x", |
776 EXPECT_RESULT, Number::New(6)); | 781 EXPECT_RESULT, Number::New(isolate, 6)); |
777 context.Check("this.x", | 782 context.Check("this.x", |
778 EXPECT_RESULT, Number::New(6)); | 783 EXPECT_RESULT, Number::New(isolate, 6)); |
779 context.Check("function x() { return 7 }; x()", | 784 context.Check("function x() { return 7 }; x()", |
780 EXPECT_RESULT, Number::New(7)); | 785 EXPECT_RESULT, Number::New(isolate, 7)); |
781 } | 786 } |
782 | 787 |
783 { SimpleContext context; | 788 { SimpleContext context; |
784 context.Check("const x = 1; x", | 789 context.Check("const x = 1; x", |
785 EXPECT_RESULT, Number::New(1)); | 790 EXPECT_RESULT, Number::New(isolate, 1)); |
786 context.Check("var x = 2; x", // assignment ignored | 791 context.Check("var x = 2; x", // assignment ignored |
787 EXPECT_RESULT, Number::New(1)); | 792 EXPECT_RESULT, Number::New(isolate, 1)); |
788 context.Check("const x = 3; x", | 793 context.Check("const x = 3; x", |
789 EXPECT_RESULT, Number::New(1)); | 794 EXPECT_RESULT, Number::New(isolate, 1)); |
790 context.Check("x = 4; x", // assignment ignored | 795 context.Check("x = 4; x", // assignment ignored |
791 EXPECT_RESULT, Number::New(1)); | 796 EXPECT_RESULT, Number::New(isolate, 1)); |
792 context.Check("var x = 5; x", // assignment ignored | 797 context.Check("var x = 5; x", // assignment ignored |
793 EXPECT_RESULT, Number::New(1)); | 798 EXPECT_RESULT, Number::New(isolate, 1)); |
794 context.Check("this.x", | 799 context.Check("this.x", |
795 EXPECT_RESULT, Number::New(1)); | 800 EXPECT_RESULT, Number::New(isolate, 1)); |
796 context.Check("function x() { return 7 }; x", | 801 context.Check("function x() { return 7 }; x", |
797 EXPECT_EXCEPTION); | 802 EXPECT_EXCEPTION); |
798 } | 803 } |
799 } | 804 } |
800 | 805 |
801 | 806 |
802 TEST(CrossScriptReferencesHarmony) { | 807 TEST(CrossScriptReferencesHarmony) { |
803 i::FLAG_use_strict = true; | 808 i::FLAG_use_strict = true; |
804 i::FLAG_harmony_scoping = true; | 809 i::FLAG_harmony_scoping = true; |
805 i::FLAG_harmony_modules = true; | 810 i::FLAG_harmony_modules = true; |
806 | 811 |
807 HandleScope scope(CcTest::isolate()); | 812 v8::Isolate* isolate = CcTest::isolate(); |
| 813 HandleScope scope(isolate); |
808 | 814 |
809 const char* decs[] = { | 815 const char* decs[] = { |
810 "var x = 1; x", "x", "this.x", | 816 "var x = 1; x", "x", "this.x", |
811 "function x() { return 1 }; x()", "x()", "this.x()", | 817 "function x() { return 1 }; x()", "x()", "this.x()", |
812 "let x = 1; x", "x", "this.x", | 818 "let x = 1; x", "x", "this.x", |
813 "const x = 1; x", "x", "this.x", | 819 "const x = 1; x", "x", "this.x", |
814 "module x { export let a = 1 }; x.a", "x.a", "this.x.a", | 820 "module x { export let a = 1 }; x.a", "x.a", "this.x.a", |
815 NULL | 821 NULL |
816 }; | 822 }; |
817 | 823 |
818 for (int i = 0; decs[i] != NULL; i += 3) { | 824 for (int i = 0; decs[i] != NULL; i += 3) { |
819 SimpleContext context; | 825 SimpleContext context; |
820 context.Check(decs[i], EXPECT_RESULT, Number::New(1)); | 826 context.Check(decs[i], EXPECT_RESULT, Number::New(isolate, 1)); |
821 context.Check(decs[i+1], EXPECT_RESULT, Number::New(1)); | 827 context.Check(decs[i+1], EXPECT_RESULT, Number::New(isolate, 1)); |
822 // TODO(rossberg): The current ES6 draft spec does not reflect lexical | 828 // TODO(rossberg): The current ES6 draft spec does not reflect lexical |
823 // bindings on the global object. However, this will probably change, in | 829 // bindings on the global object. However, this will probably change, in |
824 // which case we reactivate the following test. | 830 // which case we reactivate the following test. |
825 if (i/3 < 2) context.Check(decs[i+2], EXPECT_RESULT, Number::New(1)); | 831 if (i/3 < 2) { |
| 832 context.Check(decs[i+2], EXPECT_RESULT, Number::New(isolate, 1)); |
| 833 } |
826 } | 834 } |
827 } | 835 } |
828 | 836 |
829 | 837 |
830 TEST(CrossScriptConflicts) { | 838 TEST(CrossScriptConflicts) { |
831 i::FLAG_use_strict = true; | 839 i::FLAG_use_strict = true; |
832 i::FLAG_harmony_scoping = true; | 840 i::FLAG_harmony_scoping = true; |
833 i::FLAG_harmony_modules = true; | 841 i::FLAG_harmony_modules = true; |
834 | 842 |
835 HandleScope scope(CcTest::isolate()); | 843 HandleScope scope(CcTest::isolate()); |
(...skipping 11 matching lines...) Expand all Loading... |
847 "function x() { return 2 }; x()", | 855 "function x() { return 2 }; x()", |
848 "let x = 2; x", | 856 "let x = 2; x", |
849 "const x = 2; x", | 857 "const x = 2; x", |
850 "module x { export let a = 2 }; x.a", | 858 "module x { export let a = 2 }; x.a", |
851 NULL | 859 NULL |
852 }; | 860 }; |
853 | 861 |
854 for (int i = 0; firsts[i] != NULL; ++i) { | 862 for (int i = 0; firsts[i] != NULL; ++i) { |
855 for (int j = 0; seconds[j] != NULL; ++j) { | 863 for (int j = 0; seconds[j] != NULL; ++j) { |
856 SimpleContext context; | 864 SimpleContext context; |
857 context.Check(firsts[i], EXPECT_RESULT, Number::New(1)); | 865 context.Check(firsts[i], EXPECT_RESULT, |
| 866 Number::New(CcTest::isolate(), 1)); |
858 // TODO(rossberg): All tests should actually be errors in Harmony, | 867 // TODO(rossberg): All tests should actually be errors in Harmony, |
859 // but we currently do not detect the cases where the first declaration | 868 // but we currently do not detect the cases where the first declaration |
860 // is not lexical. | 869 // is not lexical. |
861 context.Check(seconds[j], | 870 context.Check(seconds[j], |
862 i < 2 ? EXPECT_RESULT : EXPECT_ERROR, Number::New(2)); | 871 i < 2 ? EXPECT_RESULT : EXPECT_ERROR, |
| 872 Number::New(CcTest::isolate(), 2)); |
863 } | 873 } |
864 } | 874 } |
865 } | 875 } |
OLD | NEW |