Bugfix: ReportException shouldn't forget the top frame.
authorRyan Dahl <ry@tinyclouds.org>
Sun, 13 Sep 2009 15:43:19 +0000 (17:43 +0200)
committerRyan Dahl <ry@tinyclouds.org>
Sun, 13 Sep 2009 15:43:19 +0000 (17:43 +0200)
src/node.cc

index 41e06f8..286e68d 100644 (file)
@@ -151,39 +151,38 @@ static void ReportException(TryCatch *try_catch) {
     fflush(stderr);
     return;
   }
+
   Handle<Value> error = try_catch->Exception();
   Handle<String> stack;
+
   if (error->IsObject()) {
     Handle<Object> obj = Handle<Object>::Cast(error);
     Handle<Value> raw_stack = obj->Get(String::New("stack"));
     if (raw_stack->IsString()) stack = Handle<String>::Cast(raw_stack);
   }
-  if (stack.IsEmpty()) {
-    String::Utf8Value exception(error);
-
-    // Print (filename):(line number): (message).
-    String::Utf8Value filename(message->GetScriptResourceName());
-    const char* filename_string = ToCString(filename);
-    int linenum = message->GetLineNumber();
-    fprintf(stderr, "%s:%i: %s\n", filename_string, linenum, *exception);
-    // Print line of source code.
-    String::Utf8Value sourceline(message->GetSourceLine());
-    const char* sourceline_string = ToCString(sourceline);
-    fprintf(stderr, "%s\n", sourceline_string);
-    // Print wavy underline (GetUnderline is deprecated).
-    int start = message->GetStartColumn();
-    for (int i = 0; i < start; i++) {
-      fprintf(stderr, " ");
-    }
-    int end = message->GetEndColumn();
-    for (int i = start; i < end; i++) {
-      fprintf(stderr, "^");
-    }
-    fprintf(stderr, "\n");
-
-    message->PrintCurrentStackTrace(stderr);
 
+  // Print (filename):(line number): (message).
+  String::Utf8Value filename(message->GetScriptResourceName());
+  const char* filename_string = ToCString(filename);
+  int linenum = message->GetLineNumber();
+  fprintf(stderr, "%s:%i\n", filename_string, linenum);
+  // Print line of source code.
+  String::Utf8Value sourceline(message->GetSourceLine());
+  const char* sourceline_string = ToCString(sourceline);
+  fprintf(stderr, "%s\n", sourceline_string);
+  // Print wavy underline (GetUnderline is deprecated).
+  int start = message->GetStartColumn();
+  for (int i = 0; i < start; i++) {
+    fprintf(stderr, " ");
+  }
+  int end = message->GetEndColumn();
+  for (int i = start; i < end; i++) {
+    fprintf(stderr, "^");
+  }
+  fprintf(stderr, "\n");
 
+  if (stack.IsEmpty()) {
+    message->PrintCurrentStackTrace(stderr);
   } else {
     String::Utf8Value trace(stack);
     fprintf(stderr, "%s\n", *trace);
@@ -265,15 +264,21 @@ Handle<Value> DLOpen(const v8::Arguments& args) {
 }
 
 v8::Handle<v8::Value> Compile(const v8::Arguments& args) {
-  if (args.Length() < 2)
-    return Undefined();
-
   HandleScope scope;
 
+  if (args.Length() < 2) {
+    return ThrowException(Exception::TypeError(
+          String::New("needs two arguments.")));
+  }
+
   Local<String> source = args[0]->ToString();
   Local<String> filename = args[1]->ToString();
 
-  Handle<Value> result = ExecuteString(source, filename);
+  Handle<Script> script = Script::Compile(source, filename);
+  if (script.IsEmpty()) return Undefined();
+
+  Handle<Value> result = script->Run();
+  if (result.IsEmpty()) return Undefined();
 
   return scope.Close(result);
 }