Revision: 15054
Author: [email protected]
Date: Tue Jun 11 00:42:12 2013
Log: make empty string returnable by ReturnValue
[email protected]
BUG=
Review URL: https://codereview.chromium.org/16621004
http://code.google.com/p/v8/source/detail?r=15054
Modified:
/branches/bleeding_edge/include/v8.h
/branches/bleeding_edge/test/cctest/test-api.cc
=======================================
--- /branches/bleeding_edge/include/v8.h Mon Jun 10 00:41:16 2013
+++ /branches/bleeding_edge/include/v8.h Tue Jun 11 00:42:12 2013
@@ -2845,6 +2845,7 @@
// Fast JS primitive setters
V8_INLINE(void SetNull());
V8_INLINE(void SetUndefined());
+ V8_INLINE(void SetEmptyString());
// Convenience getter for Isolate
V8_INLINE(Isolate* GetIsolate());
@@ -5728,6 +5729,12 @@
typedef internal::Internals I;
*value_ = *I::GetRoot(GetIsolate(), I::kUndefinedValueRootIndex);
}
+
+template<typename T>
+void ReturnValue<T>::SetEmptyString() {
+ typedef internal::Internals I;
+ *value_ = *I::GetRoot(GetIsolate(), I::kEmptyStringRootIndex);
+}
template<typename T>
Isolate* ReturnValue<T>::GetIsolate() {
=======================================
--- /branches/bleeding_edge/test/cctest/test-api.cc Mon Jun 10 00:41:16 2013
+++ /branches/bleeding_edge/test/cctest/test-api.cc Tue Jun 11 00:42:12 2013
@@ -1037,7 +1037,12 @@
static const double kFastReturnValueDouble = 2.7;
// variable return values
static bool fast_return_value_bool = false;
-static bool fast_return_value_void_is_null = false;
+enum ReturnValueOddball {
+ kNullReturnValue,
+ kUndefinedReturnValue,
+ kEmptyStringReturnValue
+};
+static ReturnValueOddball fast_return_value_void;
static bool fast_return_value_object_is_empty = false;
template<>
@@ -1072,10 +1077,16 @@
void FastReturnValueCallback<void>(
const v8::FunctionCallbackInfo<v8::Value>& info) {
CheckReturnValue(info);
- if (fast_return_value_void_is_null) {
- info.GetReturnValue().SetNull();
- } else {
- info.GetReturnValue().SetUndefined();
+ switch (fast_return_value_void) {
+ case kNullReturnValue:
+ info.GetReturnValue().SetNull();
+ break;
+ case kUndefinedReturnValue:
+ info.GetReturnValue().SetUndefined();
+ break;
+ case kEmptyStringReturnValue:
+ info.GetReturnValue().SetEmptyString();
+ break;
}
}
@@ -1135,13 +1146,25 @@
CHECK_EQ(fast_return_value_bool, value->ToBoolean()->Value());
}
// check oddballs
- for (int i = 0; i < 2; i++) {
- fast_return_value_void_is_null = i == 0;
+ ReturnValueOddball oddballs[] = {
+ kNullReturnValue,
+ kUndefinedReturnValue,
+ kEmptyStringReturnValue
+ };
+ for (size_t i = 0; i < ARRAY_SIZE(oddballs); i++) {
+ fast_return_value_void = oddballs[i];
value = TestFastReturnValues<void>();
- if (fast_return_value_void_is_null) {
- CHECK(value->IsNull());
- } else {
- CHECK(value->IsUndefined());
+ switch (fast_return_value_void) {
+ case kNullReturnValue:
+ CHECK(value->IsNull());
+ break;
+ case kUndefinedReturnValue:
+ CHECK(value->IsUndefined());
+ break;
+ case kEmptyStringReturnValue:
+ CHECK(value->IsString());
+ CHECK_EQ(0, v8::String::Cast(*value)->Length());
+ break;
}
}
// check handles
--
--
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/groups/opt_out.