Home | History | Annotate | Download | only in runtime
      1 // Copyright 2014 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "src/runtime/runtime-utils.h"
      6 
      7 #include "src/arguments.h"
      8 #include "src/isolate-inl.h"
      9 #include "src/objects-inl.h"
     10 #include "src/string-builder.h"
     11 
     12 namespace v8 {
     13 namespace internal {
     14 
     15 RUNTIME_FUNCTION(Runtime_CreateSymbol) {
     16   HandleScope scope(isolate);
     17   DCHECK(args.length() == 1);
     18   CONVERT_ARG_HANDLE_CHECKED(Object, name, 0);
     19   CHECK(name->IsString() || name->IsUndefined(isolate));
     20   Handle<Symbol> symbol = isolate->factory()->NewSymbol();
     21   if (name->IsString()) symbol->set_name(*name);
     22   return *symbol;
     23 }
     24 
     25 
     26 RUNTIME_FUNCTION(Runtime_CreatePrivateSymbol) {
     27   HandleScope scope(isolate);
     28   DCHECK(args.length() == 1);
     29   CONVERT_ARG_HANDLE_CHECKED(Object, name, 0);
     30   CHECK(name->IsString() || name->IsUndefined(isolate));
     31   Handle<Symbol> symbol = isolate->factory()->NewPrivateSymbol();
     32   if (name->IsString()) symbol->set_name(*name);
     33   return *symbol;
     34 }
     35 
     36 
     37 RUNTIME_FUNCTION(Runtime_SymbolDescription) {
     38   SealHandleScope shs(isolate);
     39   DCHECK(args.length() == 1);
     40   CONVERT_ARG_CHECKED(Symbol, symbol, 0);
     41   return symbol->name();
     42 }
     43 
     44 
     45 RUNTIME_FUNCTION(Runtime_SymbolDescriptiveString) {
     46   HandleScope scope(isolate);
     47   DCHECK_EQ(1, args.length());
     48   CONVERT_ARG_HANDLE_CHECKED(Symbol, symbol, 0);
     49   IncrementalStringBuilder builder(isolate);
     50   builder.AppendCString("Symbol(");
     51   if (symbol->name()->IsString()) {
     52     builder.AppendString(handle(String::cast(symbol->name()), isolate));
     53   }
     54   builder.AppendCharacter(')');
     55   RETURN_RESULT_OR_FAILURE(isolate, builder.Finish());
     56 }
     57 
     58 
     59 RUNTIME_FUNCTION(Runtime_SymbolRegistry) {
     60   HandleScope scope(isolate);
     61   DCHECK(args.length() == 0);
     62   return *isolate->GetSymbolRegistry();
     63 }
     64 
     65 
     66 RUNTIME_FUNCTION(Runtime_SymbolIsPrivate) {
     67   SealHandleScope shs(isolate);
     68   DCHECK(args.length() == 1);
     69   CONVERT_ARG_CHECKED(Symbol, symbol, 0);
     70   return isolate->heap()->ToBoolean(symbol->is_private());
     71 }
     72 }  // namespace internal
     73 }  // namespace v8
     74