Removed the print, load, quit and version extensions from the VM. Moved the print...
authorsgjesse@chromium.org <sgjesse@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 3 Oct 2008 08:30:22 +0000 (08:30 +0000)
committersgjesse@chromium.org <sgjesse@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 3 Oct 2008 08:30:22 +0000 (08:30 +0000)
This also gets rid of 8 static initializers.
Review URL: http://codereview.chromium.org/6233

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@417 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/execution.cc
src/execution.h
src/serialize.cc
test/cctest/test-api.cc
test/cctest/test-compiler.cc
test/cctest/test-serialize.cc

index 3213a341cde09b81b1f117c487d31a68cc82937d..d10a3abfb2134095eb6ef04977c7d0edf9f930da 100644 (file)
@@ -504,146 +504,6 @@ Handle<String> Execution::GetStackTraceLine(Handle<Object> recv,
 }
 
 
-// --- P r i n t   E x t e n s i o n ---
-
-const char* PrintExtension::kSource = "native function print();";
-
-
-v8::Handle<v8::FunctionTemplate> PrintExtension::GetNativeFunction(
-    v8::Handle<v8::String> str) {
-  return v8::FunctionTemplate::New(PrintExtension::Print);
-}
-
-
-v8::Handle<v8::Value> PrintExtension::Print(const v8::Arguments& args) {
-  for (int i = 0; i < args.Length(); i++) {
-    if (i != 0) printf(" ");
-    v8::HandleScope scope;
-    v8::Handle<v8::Value> arg = args[i];
-    v8::Handle<v8::String> string_obj = arg->ToString();
-    if (string_obj.IsEmpty()) return string_obj;
-    int length = string_obj->Length();
-    uint16_t* string = NewArray<uint16_t>(length + 1);
-    string_obj->Write(string);
-    for (int j = 0; j < length; j++)
-      printf("%lc", string[j]);
-    DeleteArray(string);
-  }
-  printf("\n");
-  return v8::Undefined();
-}
-
-
-static PrintExtension kPrintExtension;
-v8::DeclareExtension kPrintExtensionDeclaration(&kPrintExtension);
-
-
-// --- L o a d   E x t e n s i o n ---
-
-const char* LoadExtension::kSource = "native function load();";
-
-
-v8::Handle<v8::FunctionTemplate> LoadExtension::GetNativeFunction(
-    v8::Handle<v8::String> str) {
-  return v8::FunctionTemplate::New(LoadExtension::Load);
-}
-
-
-v8::Handle<v8::Value> LoadExtension::Load(const v8::Arguments& args) {
-  v8::Handle<v8::String> path = args[0]->ToString();
-
-  // Create a handle for the result. Keep the result empty to be
-  // useful as the return value in case of exceptions.
-  v8::Handle<Value> result;
-
-  if (path.IsEmpty()) return result;  // Exception was thrown in ToString.
-
-  // Check that the length of the file name is within bounds.
-  static const int kMaxPathLength = 255;
-  if (path->Length() > kMaxPathLength) {
-    v8::Handle<v8::String> message = v8::String::New("Path name too long");
-    v8::ThrowException(v8::Exception::RangeError(message));
-    return result;
-  }
-
-  // Convert the JavaScript string path into a C string and read the
-  // corresponding script from the file system.
-  char path_buffer[kMaxPathLength + 1];
-  path->WriteAscii(path_buffer);
-  bool exists;
-  Vector<const char> script = ReadFile(path_buffer, &exists, false);
-
-  // Find the base file name from the path.
-  char* file_name_buffer = path_buffer;
-  for (char* p = path_buffer; *p; p++) {
-    if (*p == '/' || *p == '\\') file_name_buffer = p + 1;
-  }
-
-  // Throw an exception in case the script couldn't be read.
-  if (script.is_empty()) {
-    static const char* kErrorPrefix = "Unable to read from file ";
-    static const size_t kErrorPrefixLength = 25;  // strlen is not constant
-    ASSERT(strlen(kErrorPrefix) == kErrorPrefixLength);
-    static const int kMaxErrorLength = kMaxPathLength + kErrorPrefixLength;
-    EmbeddedVector<char, kMaxErrorLength + 1> error_buffer;
-    OS::SNPrintF(error_buffer, "%s%s", kErrorPrefix, file_name_buffer);
-    v8::Handle<v8::String> error =
-        v8::String::New(error_buffer.start(), error_buffer.length());
-    v8::ThrowException(v8::Exception::Error(error));
-    return result;
-  }
-
-  // Convert the file name buffer into a script origin
-  v8::ScriptOrigin origin =
-      v8::ScriptOrigin(v8::String::New(file_name_buffer));
-
-  // Compile and run script.
-  v8::Handle<v8::String> source =
-      v8::String::New(script.start(), script.length());
-  v8::Handle<v8::Script> code =
-      v8::Script::Compile(source, &origin);
-
-  // Run the code if no exception occurred during the compilation. In
-  // case of syntax errors, the code is empty and the exception is
-  // scheduled and will be thrown when returning to JavaScript.
-  if (!code.IsEmpty()) result = code->Run();
-  script.Dispose();
-  return result;
-}
-
-
-static LoadExtension kLoadExtension;
-v8::DeclareExtension kLoadExtensionDeclaration(&kLoadExtension);
-
-
-// --- Q u i t   E x t e n s i o n ---
-
-const char* QuitExtension::kSource = "native function quit();";
-
-
-v8::Handle<v8::FunctionTemplate> QuitExtension::GetNativeFunction(
-    v8::Handle<v8::String> str) {
-  return v8::FunctionTemplate::New(QuitExtension::Quit);
-}
-
-
-v8::Handle<v8::Value> QuitExtension::Quit(const v8::Arguments& args) {
-  exit(args.Length() == 0 ? 0 : args[0]->Int32Value());
-  return v8::Undefined();
-}
-
-
-static QuitExtension kQuitExtension;
-v8::DeclareExtension kQuitExtensionDeclaration(&kQuitExtension);
-
-
-// --- V e r s i o n   E x t e n s i o n ---
-
-static Extension kVersionExtension("v8/version",
-                                   "function version(){ return 150; }");
-v8::DeclareExtension kVersionExtensionDeclaration(&kVersionExtension);
-
-
 // --- G C   E x t e n s i o n ---
 
 const char* GCExtension::kSource = "native function gc();";
index 2dc7540cb2c2fc1766bed3b3beb1b740d2042ddf..25a987f7b1e5c220fca33db9b164840159e7f5b2 100644 (file)
@@ -246,39 +246,6 @@ class PostponeInterruptsScope BASE_EMBEDDED {
 };
 
 
-class PrintExtension : public v8::Extension {
- public:
-  PrintExtension() : v8::Extension("v8/print", kSource) { }
-  virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
-      v8::Handle<v8::String> name);
-  static v8::Handle<v8::Value> Print(const v8::Arguments& args);
- private:
-  static const char* kSource;
-};
-
-
-class LoadExtension : public v8::Extension {
- public:
-  LoadExtension() : v8::Extension("v8/load", kSource) { }
-  virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
-      v8::Handle<v8::String> name);
-  static v8::Handle<v8::Value> Load(const v8::Arguments& args);
- private:
-  static const char* kSource;
-};
-
-
-class QuitExtension : public v8::Extension {
- public:
-  QuitExtension() : v8::Extension("v8/quit", kSource) {}
-  virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
-      v8::Handle<v8::String> name);
-  static v8::Handle<v8::Value> Quit(const v8::Arguments& args);
- private:
-  static const char* kSource;
-};
-
-
 class GCExtension : public v8::Extension {
  public:
   GCExtension() : v8::Extension("v8/gc", kSource) {}
index b26e2622a6c601aa304148d25c47ce86ba0e6e2e..df3c7af0246c19165f711ce84a5ea5cae0ac43d9 100644 (file)
@@ -537,12 +537,6 @@ ExternalReferenceTable::ExternalReferenceTable() : refs_(64) {
   // Extensions
   Add(FUNCTION_ADDR(GCExtension::GC), EXTENSION, 1,
       "GCExtension::GC");
-  Add(FUNCTION_ADDR(PrintExtension::Print), EXTENSION, 2,
-      "PrintExtension::Print");
-  Add(FUNCTION_ADDR(LoadExtension::Load), EXTENSION, 3,
-      "LoadExtension::Load");
-  Add(FUNCTION_ADDR(QuitExtension::Quit), EXTENSION, 4,
-      "QuitExtension::Quit");
 
   // Accessors
 #define ACCESSOR_DESCRIPTOR_DECLARATION(name) \
index f0fd82f6573c52a3cf1ddf27cd9f77a6ca11a0c4..c45ccf8f328e28870dfc6dd373b369e694bff053 100644 (file)
@@ -4774,14 +4774,6 @@ TEST(DontLeakGlobalObjects) {
       v8_compile("gc();")->Run();
     }
     CHECK_EQ(count, GetSurvivingGlobalObjectsCount());
-
-    { v8::HandleScope scope;
-      const char* extension_list[] = { "v8/print" };
-      v8::ExtensionConfiguration extensions(1, extension_list);
-      LocalContext context(&extensions);
-      v8_compile("print('hest');")->Run();
-    }
-    CHECK_EQ(count, GetSurvivingGlobalObjectsCount());
   }
 }
 
index 38478cfac1abe1987191d0e5763d93eed1245b79..6bfd53b3554ae3ee30d3295dd57570efcee7f8eb 100644 (file)
@@ -40,6 +40,51 @@ using namespace v8::internal;
 
 static v8::Persistent<v8::Context> env;
 
+// --- P r i n t   E x t e n s i o n ---
+
+class PrintExtension : public v8::Extension {
+ public:
+  PrintExtension() : v8::Extension("v8/print", kSource) { }
+  virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
+      v8::Handle<v8::String> name);
+  static v8::Handle<v8::Value> Print(const v8::Arguments& args);
+ private:
+  static const char* kSource;
+};
+
+
+const char* PrintExtension::kSource = "native function print();";
+
+
+v8::Handle<v8::FunctionTemplate> PrintExtension::GetNativeFunction(
+    v8::Handle<v8::String> str) {
+  return v8::FunctionTemplate::New(PrintExtension::Print);
+}
+
+
+v8::Handle<v8::Value> PrintExtension::Print(const v8::Arguments& args) {
+  for (int i = 0; i < args.Length(); i++) {
+    if (i != 0) printf(" ");
+    v8::HandleScope scope;
+    v8::Handle<v8::Value> arg = args[i];
+    v8::Handle<v8::String> string_obj = arg->ToString();
+    if (string_obj.IsEmpty()) return string_obj;
+    int length = string_obj->Length();
+    uint16_t* string = NewArray<uint16_t>(length + 1);
+    string_obj->Write(string);
+    for (int j = 0; j < length; j++)
+      printf("%lc", string[j]);
+    DeleteArray(string);
+  }
+  printf("\n");
+  return v8::Undefined();
+}
+
+
+static PrintExtension kPrintExtension;
+v8::DeclareExtension kPrintExtensionDeclaration(&kPrintExtension);
+
+
 static void InitializeVM() {
   if (env.IsEmpty()) {
     v8::HandleScope scope;
index 7fc38a802e1174542041ed669ed7ecc7d09de123..f351bf09a8d26b0c4367526cdc547ca3510c6348 100644 (file)
@@ -154,9 +154,8 @@ static void Serialize() {
   StatsTable::SetCounterFunction(counter_function);
 
   v8::HandleScope scope;
-  const int kExtensionCount = 5;
-  const char* extension_list[kExtensionCount] =
-    { "v8/print", "v8/load", "v8/quit", "v8/version", "v8/gc" };
+  const int kExtensionCount = 1;
+  const char* extension_list[kExtensionCount] = { "v8/gc" };
   v8::ExtensionConfiguration extensions(kExtensionCount, extension_list);
   v8::Persistent<v8::Context> env = v8::Context::New(&extensions);
   env->Enter();
@@ -259,7 +258,7 @@ TEST(DeserializeExtensions) {
   v8::HandleScope scope;
 
   Deserialize();
-  const char* c_source = "print(\"abcd\");";
+  const char* c_source = "gc();";
   v8::Local<v8::String> source = v8::String::New(c_source);
   v8::Local<v8::Script> script = v8::Script::Compile(source);
   v8::Local<v8::Value> value = script->Run();