1 // Copyright 2021 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 #ifndef INCLUDE_V8_EXTENSION_H_ 6 #define INCLUDE_V8_EXTENSION_H_ 7 8 #include <memory> 9 10 #include "v8-local-handle.h" // NOLINT(build/include_directory) 11 #include "v8-primitive.h" // NOLINT(build/include_directory) 12 #include "v8config.h" // NOLINT(build/include_directory) 13 14 namespace v8 { 15 16 class FunctionTemplate; 17 18 // --- Extensions --- 19 20 /** 21 * Ignore 22 */ 23 class V8_EXPORT Extension { 24 public: 25 // Note that the strings passed into this constructor must live as long 26 // as the Extension itself. 27 Extension(const char* name, const char* source = nullptr, int dep_count = 0, 28 const char** deps = nullptr, int source_length = -1); ~Extension()29 virtual ~Extension() { delete source_; } GetNativeFunctionTemplate(Isolate * isolate,Local<String> name)30 virtual Local<FunctionTemplate> GetNativeFunctionTemplate( 31 Isolate* isolate, Local<String> name) { 32 return Local<FunctionTemplate>(); 33 } 34 name()35 const char* name() const { return name_; } source_length()36 size_t source_length() const { return source_length_; } source()37 const String::ExternalOneByteStringResource* source() const { 38 return source_; 39 } dependency_count()40 int dependency_count() const { return dep_count_; } dependencies()41 const char** dependencies() const { return deps_; } set_auto_enable(bool value)42 void set_auto_enable(bool value) { auto_enable_ = value; } auto_enable()43 bool auto_enable() { return auto_enable_; } 44 45 // Disallow copying and assigning. 46 Extension(const Extension&) = delete; 47 void operator=(const Extension&) = delete; 48 49 private: 50 const char* name_; 51 size_t source_length_; // expected to initialize before source_ 52 String::ExternalOneByteStringResource* source_; 53 int dep_count_; 54 const char** deps_; 55 bool auto_enable_; 56 }; 57 58 void V8_EXPORT RegisterExtension(std::unique_ptr<Extension>); 59 60 } // namespace v8 61 62 #endif // INCLUDE_V8_EXTENSION_H_ 63