Index: src/runtime/runtime-utils.h |
diff --git a/src/runtime/runtime-utils.h b/src/runtime/runtime-utils.h |
index 5cdf0430817a9769e018b3062b2fc1d50a8736e7..c203b68d151861fb38cc62de024c60bd4cae606d 100644 |
--- a/src/runtime/runtime-utils.h |
+++ b/src/runtime/runtime-utils.h |
@@ -11,117 +11,83 @@ |
namespace v8 { |
namespace internal { |
-#ifdef DEBUG |
- |
-#define RUNTIME_ASSERT(value) \ |
- do { \ |
- if (!(value)) { \ |
- V8_RuntimeError(__FILE__, __LINE__, #value); \ |
- return isolate->ThrowIllegalOperation(); \ |
- } \ |
- } while (0) |
- |
-#else |
- |
-#define RUNTIME_ASSERT(value) \ |
- do { \ |
- if (!(value)) { \ |
- return isolate->ThrowIllegalOperation(); \ |
- } \ |
- } while (0) |
- |
-#endif |
- |
// Cast the given object to a value of the specified type and store |
// it in a variable with the given name. If the object is not of the |
-// expected type call IllegalOperation and return. |
+// expected type we crash safely. |
#define CONVERT_ARG_CHECKED(Type, name, index) \ |
- RUNTIME_ASSERT(args[index]->Is##Type()); \ |
+ CHECK(args[index]->Is##Type()); \ |
Type* name = Type::cast(args[index]); |
#define CONVERT_ARG_HANDLE_CHECKED(Type, name, index) \ |
- RUNTIME_ASSERT(args[index]->Is##Type()); \ |
+ CHECK(args[index]->Is##Type()); \ |
Handle<Type> name = args.at<Type>(index); |
#define CONVERT_NUMBER_ARG_HANDLE_CHECKED(name, index) \ |
- RUNTIME_ASSERT(args[index]->IsNumber()); \ |
+ CHECK(args[index]->IsNumber()); \ |
Handle<Object> name = args.at<Object>(index); |
// Cast the given object to a boolean and store it in a variable with |
-// the given name. If the object is not a boolean call IllegalOperation |
-// and return. |
+// the given name. If the object is not a boolean we crash safely. |
#define CONVERT_BOOLEAN_ARG_CHECKED(name, index) \ |
- RUNTIME_ASSERT(args[index]->IsBoolean()); \ |
+ CHECK(args[index]->IsBoolean()); \ |
bool name = args[index]->IsTrue(isolate); |
// Cast the given argument to a Smi and store its value in an int variable |
-// with the given name. If the argument is not a Smi call IllegalOperation |
-// and return. |
+// with the given name. If the argument is not a Smi we crash safely. |
#define CONVERT_SMI_ARG_CHECKED(name, index) \ |
- RUNTIME_ASSERT(args[index]->IsSmi()); \ |
+ CHECK(args[index]->IsSmi()); \ |
int name = args.smi_at(index); |
// Cast the given argument to a double and store it in a variable with |
// the given name. If the argument is not a number (as opposed to |
-// the number not-a-number) call IllegalOperation and return. |
+// the number not-a-number) we crash safely. |
#define CONVERT_DOUBLE_ARG_CHECKED(name, index) \ |
- RUNTIME_ASSERT(args[index]->IsNumber()); \ |
+ CHECK(args[index]->IsNumber()); \ |
double name = args.number_at(index); |
- |
// Cast the given argument to a size_t and store its value in a variable with |
-// the given name. If the argument is not a size_t call IllegalOperation and |
-// return. |
+// the given name. If the argument is not a size_t we crash safely. |
#define CONVERT_SIZE_ARG_CHECKED(name, index) \ |
- RUNTIME_ASSERT(args[index]->IsNumber()); \ |
+ CHECK(args[index]->IsNumber()); \ |
Handle<Object> name##_object = args.at<Object>(index); \ |
size_t name = 0; \ |
- RUNTIME_ASSERT(TryNumberToSize(isolate, *name##_object, &name)); |
- |
+ CHECK(TryNumberToSize(isolate, *name##_object, &name)); |
// Call the specified converter on the object *comand store the result in |
// a variable of the specified type with the given name. If the |
-// object is not a Number call IllegalOperation and return. |
+// object is not a Number we crash safely. |
#define CONVERT_NUMBER_CHECKED(type, name, Type, obj) \ |
- RUNTIME_ASSERT(obj->IsNumber()); \ |
+ CHECK(obj->IsNumber()); \ |
type name = NumberTo##Type(obj); |
- |
// Cast the given argument to PropertyDetails and store its value in a |
-// variable with the given name. If the argument is not a Smi call |
-// IllegalOperation and return. |
+// variable with the given name. If the argument is not a Smi we crash safely. |
#define CONVERT_PROPERTY_DETAILS_CHECKED(name, index) \ |
- RUNTIME_ASSERT(args[index]->IsSmi()); \ |
+ CHECK(args[index]->IsSmi()); \ |
PropertyDetails name = PropertyDetails(Smi::cast(args[index])); |
- |
// Assert that the given argument has a valid value for a LanguageMode |
// and store it in a LanguageMode variable with the given name. |
-#define CONVERT_LANGUAGE_MODE_ARG_CHECKED(name, index) \ |
- RUNTIME_ASSERT(args[index]->IsSmi()); \ |
- RUNTIME_ASSERT(is_valid_language_mode(args.smi_at(index))); \ |
+#define CONVERT_LANGUAGE_MODE_ARG_CHECKED(name, index) \ |
+ CHECK(args[index]->IsSmi()); \ |
+ CHECK(is_valid_language_mode(args.smi_at(index))); \ |
LanguageMode name = static_cast<LanguageMode>(args.smi_at(index)); |
- |
// Assert that the given argument is a number within the Int32 range |
-// and convert it to int32_t. If the argument is not an Int32 call |
-// IllegalOperation and return. |
+// and convert it to int32_t. If the argument is not an Int32 we crash safely. |
#define CONVERT_INT32_ARG_CHECKED(name, index) \ |
- RUNTIME_ASSERT(args[index]->IsNumber()); \ |
+ CHECK(args[index]->IsNumber()); \ |
int32_t name = 0; \ |
- RUNTIME_ASSERT(args[index]->ToInt32(&name)); |
- |
+ CHECK(args[index]->ToInt32(&name)); |
// Cast the given argument to PropertyAttributes and store its value in a |
-// variable with the given name. If the argument is not a Smi call or the |
-// enum value is out of range, call IllegalOperation and return. |
-#define CONVERT_PROPERTY_ATTRIBUTES_CHECKED(name, index) \ |
- RUNTIME_ASSERT(args[index]->IsSmi()); \ |
- RUNTIME_ASSERT( \ |
- (args.smi_at(index) & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); \ |
+// variable with the given name. If the argument is not a Smi or the |
+// enum value is out of range, we crash safely. |
+#define CONVERT_PROPERTY_ATTRIBUTES_CHECKED(name, index) \ |
+ CHECK(args[index]->IsSmi()); \ |
+ CHECK((args.smi_at(index) & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); \ |
PropertyAttributes name = static_cast<PropertyAttributes>(args.smi_at(index)); |
- |
// A mechanism to return a pair of Object pointers in registers (if possible). |
// How this is achieved is calling convention-dependent. |
// All currently supported x86 compiles uses calling conventions that are cdecl |