Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 614 Handle<Object> name(args[0], isolate); | 614 Handle<Object> name(args[0], isolate); |
| 615 RUNTIME_ASSERT(name->IsString() || name->IsUndefined()); | 615 RUNTIME_ASSERT(name->IsString() || name->IsUndefined()); |
| 616 Symbol* symbol; | 616 Symbol* symbol; |
| 617 MaybeObject* maybe = isolate->heap()->AllocatePrivateSymbol(); | 617 MaybeObject* maybe = isolate->heap()->AllocatePrivateSymbol(); |
| 618 if (!maybe->To(&symbol)) return maybe; | 618 if (!maybe->To(&symbol)) return maybe; |
| 619 if (name->IsString()) symbol->set_name(*name); | 619 if (name->IsString()) symbol->set_name(*name); |
| 620 return symbol; | 620 return symbol; |
| 621 } | 621 } |
| 622 | 622 |
| 623 | 623 |
| 624 RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateGlobalPrivateSymbol) { | |
| 625 HandleScope scope(isolate); | |
| 626 ASSERT(args.length() == 1); | |
| 627 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); | |
| 628 Handle<JSObject> registry = handle(isolate->heap()->symbol_registry()); | |
| 629 Handle<String> part = handle(isolate->heap()->private_intern_string()); | |
| 630 Handle<Object> privates_val = JSReceiver::GetProperty(registry, part); | |
| 631 Handle<JSObject> privates; | |
| 632 if (privates_val->IsJSObject()) { | |
| 633 privates = Handle<JSObject>::cast(privates_val); | |
| 634 } else { | |
| 635 ASSERT(privates_val->IsUndefined()); | |
| 636 privates = | |
| 637 isolate->factory()->NewJSObject(isolate->object_function(), TENURED); | |
|
Michael Starzinger
2014/03/24 10:04:33
As discussed offline: This will create a JSObject
rossberg
2014/03/24 15:09:49
I moved the whole registry creation and initializa
| |
| 638 JSObject::SetPrototype(privates, isolate->factory()->null_value()); | |
| 639 JSObject::SetProperty(registry, part, privates, NONE, STRICT); | |
| 640 } | |
| 641 Handle<Object> symbol = JSObject::GetProperty(privates, name); | |
| 642 if (!symbol->IsSymbol()) { | |
| 643 ASSERT(symbol->IsUndefined()); | |
| 644 symbol = isolate->factory()->NewPrivateSymbol(); | |
| 645 Handle<Symbol>::cast(symbol)->set_name(*name); | |
| 646 JSObject::SetProperty(privates, name, symbol, NONE, STRICT); | |
| 647 } | |
| 648 return *symbol; | |
| 649 } | |
| 650 | |
| 651 | |
| 624 RUNTIME_FUNCTION(MaybeObject*, Runtime_NewSymbolWrapper) { | 652 RUNTIME_FUNCTION(MaybeObject*, Runtime_NewSymbolWrapper) { |
| 625 ASSERT(args.length() == 1); | 653 ASSERT(args.length() == 1); |
| 626 CONVERT_ARG_CHECKED(Symbol, symbol, 0); | 654 CONVERT_ARG_CHECKED(Symbol, symbol, 0); |
| 627 return symbol->ToObject(isolate); | 655 return symbol->ToObject(isolate); |
| 628 } | 656 } |
| 629 | 657 |
| 630 | 658 |
| 631 RUNTIME_FUNCTION(MaybeObject*, Runtime_SymbolDescription) { | 659 RUNTIME_FUNCTION(MaybeObject*, Runtime_SymbolDescription) { |
| 632 SealHandleScope shs(isolate); | 660 SealHandleScope shs(isolate); |
| 633 ASSERT(args.length() == 1); | 661 ASSERT(args.length() == 1); |
| (...skipping 14426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 15060 // Handle last resort GC and make sure to allow future allocations | 15088 // Handle last resort GC and make sure to allow future allocations |
| 15061 // to grow the heap without causing GCs (if possible). | 15089 // to grow the heap without causing GCs (if possible). |
| 15062 isolate->counters()->gc_last_resort_from_js()->Increment(); | 15090 isolate->counters()->gc_last_resort_from_js()->Increment(); |
| 15063 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 15091 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
| 15064 "Runtime::PerformGC"); | 15092 "Runtime::PerformGC"); |
| 15065 } | 15093 } |
| 15066 } | 15094 } |
| 15067 | 15095 |
| 15068 | 15096 |
| 15069 } } // namespace v8::internal | 15097 } } // namespace v8::internal |
| OLD | NEW |