Reviewers: Igor Sheludko,

Description:
Handlify BasicJsonStringifier.

[email protected]

Please review this at https://codereview.chromium.org/238273005/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+33, -22 lines):
  M src/json-stringifier.h
  M src/runtime.cc


Index: src/json-stringifier.h
diff --git a/src/json-stringifier.h b/src/json-stringifier.h
index c4f6b1fc07377dbb6cbd17531b5314641b60a36c..75b42e9531b9a54b1d6967cc0110d83687ebee9b 100644
--- a/src/json-stringifier.h
+++ b/src/json-stringifier.h
@@ -39,10 +39,11 @@ class BasicJsonStringifier BASE_EMBEDDED {
  public:
   explicit BasicJsonStringifier(Isolate* isolate);

-  MaybeObject* Stringify(Handle<Object> object);
+  MUST_USE_RESULT MaybeHandle<Object> Stringify(Handle<Object> object);

-  INLINE(static MaybeObject* StringifyString(Isolate* isolate,
-                                             Handle<String> object));
+  MUST_USE_RESULT INLINE(static MaybeHandle<Object> StringifyString(
+      Isolate* isolate,
+      Handle<String> object));

  private:
   static const int kInitialPartLength = 32;
@@ -91,9 +92,9 @@ class BasicJsonStringifier BASE_EMBEDDED {
                           bool deferred_key);

   template <typename ResultType, typename Char>
-  INLINE(static MaybeObject* StringifyString_(Isolate* isolate,
-                                              Vector<Char> vector,
-                                              Handle<String> result));
+  INLINE(static Handle<String> StringifyString_(Isolate* isolate,
+                                                Vector<Char> vector,
+                                                Handle<String> result));

   // Entry point to serialize the object.
   INLINE(Result SerializeObject(Handle<Object> obj)) {
@@ -272,29 +273,33 @@ BasicJsonStringifier::BasicJsonStringifier(Isolate* isolate)
 }


-MaybeObject* BasicJsonStringifier::Stringify(Handle<Object> object) {
+MaybeHandle<Object> BasicJsonStringifier::Stringify(Handle<Object> object) {
   switch (SerializeObject(object)) {
     case UNCHANGED:
-      return isolate_->heap()->undefined_value();
+      return isolate_->factory()->undefined_value();
     case SUCCESS: {
       ShrinkCurrentPart();
       Accumulate();
-      if (overflowed_) return isolate_->ThrowInvalidStringLength();
-      return *accumulator();
+      if (overflowed_) {
+        return isolate_->Throw<Object>(
+            isolate_->factory()->NewInvalidStringLengthError());
+      }
+      return accumulator();
     }
     case CIRCULAR:
-      return isolate_->Throw(*factory_->NewTypeError(
-                 "circular_structure", HandleVector<Object>(NULL, 0)));
+      return isolate_->Throw<Object>(factory_->NewTypeError(
+          "circular_structure", HandleVector<Object>(NULL, 0)));
     case STACK_OVERFLOW:
-      return isolate_->StackOverflow();
+      isolate_->StackOverflow();
+      return MaybeHandle<Object>();
     default:
-      return Failure::Exception();
+      return MaybeHandle<Object>();
   }
 }


-MaybeObject* BasicJsonStringifier::StringifyString(Isolate* isolate,
-                                                   Handle<String> object) {
+MaybeHandle<Object> BasicJsonStringifier::StringifyString(
+    Isolate* isolate,  Handle<String> object) {
   static const int kJsonQuoteWorstCaseBlowup = 6;
   static const int kSpaceForQuotes = 2;
   int worst_case_length =
@@ -328,9 +333,9 @@ MaybeObject* BasicJsonStringifier::StringifyString(Isolate* isolate,


 template <typename ResultType, typename Char>
-MaybeObject* BasicJsonStringifier::StringifyString_(Isolate* isolate,
-                                                    Vector<Char> vector,
- Handle<String> result) {
+Handle<String> BasicJsonStringifier::StringifyString_(Isolate* isolate,
+                                                      Vector<Char> vector,
+ Handle<String> result) {
   DisallowHeapAllocation no_gc;
   int final_size = 0;
   ResultType* dest = ResultType::cast(*result);
@@ -339,7 +344,7 @@ MaybeObject* BasicJsonStringifier::StringifyString_(Isolate* isolate,
                                           dest->GetChars() + 1,
                                           vector.length());
   dest->Set(final_size++, '\"');
-  return *SeqString::Truncate(Handle<SeqString>::cast(result), final_size);
+  return SeqString::Truncate(Handle<SeqString>::cast(result), final_size);
 }


Index: src/runtime.cc
diff --git a/src/runtime.cc b/src/runtime.cc
index 5bcf5a586f8fb213ad119372a5e45dcd630784b6..a88284ef6d3b359e5c7714985eb46a0c90a04883 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -6279,7 +6279,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONString) {
   HandleScope scope(isolate);
   CONVERT_ARG_HANDLE_CHECKED(String, string, 0);
   ASSERT(args.length() == 1);
-  return BasicJsonStringifier::StringifyString(isolate, string);
+  Handle<Object> result;
+  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
+ isolate, result, BasicJsonStringifier::StringifyString(isolate, string));
+  return *result;
 }


@@ -6287,7 +6290,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_BasicJSONStringify) {
   HandleScope scope(isolate);
   ASSERT(args.length() == 1);
   BasicJsonStringifier stringifier(isolate);
-  return stringifier.Stringify(Handle<Object>(args[0], isolate));
+  Handle<Object> result;
+  ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
+      isolate, result, stringifier.Stringify(args.at<Object>(0)));
+  return *result;
 }




--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to