| Index: vm/symbols.h
|
| ===================================================================
|
| --- vm/symbols.h (revision 0)
|
| +++ vm/symbols.h (revision 0)
|
| @@ -0,0 +1,80 @@
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +#ifndef VM_SYMBOLS_H_
|
| +#define VM_SYMBOLS_H_
|
| +
|
| +#include "vm/object.h"
|
| +
|
| +namespace dart {
|
| +
|
| +// Forward declarations.
|
| +class Isolate;
|
| +class ObjectPointerVisitor;
|
| +
|
| +// Contains a list of frequently used strings in a canonicalized form. This
|
| +// list is kept in the vm_isolate in order to share the copy across isolates
|
| +// without having to maintain copies in each isolate.
|
| +class Symbols : public AllStatic {
|
| + public:
|
| + // List of strings that are pre created in the vm isolate.
|
| + static const char* kDot;
|
| +
|
| + // Access methods for symbols stored in the vm isolate.
|
| + static RawString* Dot() { return dot_; }
|
| +
|
| + // Initialize frequently used symbols in the vm isolate.
|
| + static void InitOnce(Isolate* isolate);
|
| +
|
| + // Initialize and setup a symbol table for the isolate.
|
| + static void SetupSymbolTable(Isolate* isolate);
|
| +
|
| + // Helper functions to create a symbol given a string or set of characters.
|
| + static RawString* New(const char* str);
|
| + template<typename T>
|
| + static RawString* New(const T* characters, intptr_t len);
|
| + static RawString* New(const String& str);
|
| + static RawString* New(const String& str,
|
| + intptr_t begin_index,
|
| + intptr_t length);
|
| +
|
| +
|
| + private:
|
| + static const int kInitialSymbolTableSize = 16;
|
| +
|
| + // Add the string into the VM isolate symbol table.
|
| + static void Add(const Array& symbol_table, const String& str);
|
| +
|
| + // Insert symbol into symbol table, growing it if necessary.
|
| + static void InsertIntoSymbolTable(const Array& symbol_table,
|
| + const String& symbol,
|
| + intptr_t index);
|
| +
|
| + // Grow the symbol table.
|
| + static void GrowSymbolTable(const Array& symbol_table);
|
| +
|
| + // Return index in symbol table if the symbol already exists or
|
| + // return the index into which the new symbol can be added.
|
| + template<typename T>
|
| + static intptr_t FindIndex(const Array& symbol_table,
|
| + const T* characters,
|
| + intptr_t len,
|
| + intptr_t hash);
|
| + static intptr_t FindIndex(const Array& symbol_table,
|
| + const String& str,
|
| + intptr_t begin_index,
|
| + intptr_t len,
|
| + intptr_t hash);
|
| +
|
| + // List of symbols that are stored in the vm isolate for easy access.
|
| + static RawString* dot_; // "." string.
|
| +
|
| + friend class SnapshotReader;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(Symbols);
|
| +};
|
| +
|
| +} // namespace dart
|
| +
|
| +#endif // VM_SYMBOLS_H_
|
|
|