From: svenpanne@chromium.org Date: Tue, 21 Feb 2012 07:35:33 +0000 (+0000) Subject: Cleaned up runtime macros a bit. X-Git-Tag: upstream/4.7.83~17315 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9631dea19a4114bd79dbbfe6fca7b22d94062d68;p=platform%2Fupstream%2Fv8.git Cleaned up runtime macros a bit. The bulk of this CL is purely mechanical: Make the CONVERT_FOO macros more uniform by always using an index instead of an object. Apart from this, it includes a few minor changes like using CONVERT_SMI_ARG_CHECKED a bit more or introducing a new macro for PropertyDetails. Nothing spectacular, just something sitting on my disk for quite some time now... Review URL: https://chromiumcodereview.appspot.com/9395075 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10772 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/runtime.cc b/src/runtime.cc index 8a0915c89..15252ed19 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -69,20 +69,20 @@ namespace internal { // 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. -#define CONVERT_CHECKED(Type, name, obj) \ - RUNTIME_ASSERT(obj->Is##Type()); \ - Type* name = Type::cast(obj); - #define CONVERT_ARG_CHECKED(Type, name, index) \ + RUNTIME_ASSERT(args[index]->Is##Type()); \ + Type* name = Type::cast(args[index]); + +#define CONVERT_ARG_HANDLE_CHECKED(Type, name, index) \ RUNTIME_ASSERT(args[index]->Is##Type()); \ Handle name = args.at(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. -#define CONVERT_BOOLEAN_CHECKED(name, obj) \ - RUNTIME_ASSERT(obj->IsBoolean()); \ - bool name = (obj)->IsTrue(); +#define CONVERT_BOOLEAN_ARG_CHECKED(name, index) \ + RUNTIME_ASSERT(args[index]->IsBoolean()); \ + bool name = args[index]->IsTrue(); // 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 @@ -106,12 +106,20 @@ namespace internal { 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. +#define CONVERT_PROPERTY_DETAILS_CHECKED(name, index) \ + RUNTIME_ASSERT(args[index]->IsSmi()); \ + PropertyDetails name = PropertyDetails(Smi::cast(args[index])); + + // Assert that the given argument has a valid value for a StrictModeFlag // and store it in a StrictModeFlag variable with the given name. -#define CONVERT_STRICT_MODE_ARG(name, index) \ - ASSERT(args[index]->IsSmi()); \ - ASSERT(args.smi_at(index) == kStrictMode || \ - args.smi_at(index) == kNonStrictMode); \ +#define CONVERT_STRICT_MODE_ARG_CHECKED(name, index) \ + RUNTIME_ASSERT(args[index]->IsSmi()); \ + RUNTIME_ASSERT(args.smi_at(index) == kStrictMode || \ + args.smi_at(index) == kNonStrictMode); \ StrictModeFlag name = \ static_cast(args.smi_at(index)); @@ -558,9 +566,9 @@ static Handle CreateLiteralBoilerplate( RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateObjectLiteral) { HandleScope scope(isolate); ASSERT(args.length() == 4); - CONVERT_ARG_CHECKED(FixedArray, literals, 0); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, literals, 0); CONVERT_SMI_ARG_CHECKED(literals_index, 1); - CONVERT_ARG_CHECKED(FixedArray, constant_properties, 2); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, constant_properties, 2); CONVERT_SMI_ARG_CHECKED(flags, 3); bool should_have_fast_elements = (flags & ObjectLiteral::kFastElements) != 0; bool has_function_literal = (flags & ObjectLiteral::kHasFunction) != 0; @@ -584,9 +592,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateObjectLiteral) { RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateObjectLiteralShallow) { HandleScope scope(isolate); ASSERT(args.length() == 4); - CONVERT_ARG_CHECKED(FixedArray, literals, 0); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, literals, 0); CONVERT_SMI_ARG_CHECKED(literals_index, 1); - CONVERT_ARG_CHECKED(FixedArray, constant_properties, 2); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, constant_properties, 2); CONVERT_SMI_ARG_CHECKED(flags, 3); bool should_have_fast_elements = (flags & ObjectLiteral::kFastElements) != 0; bool has_function_literal = (flags & ObjectLiteral::kHasFunction) != 0; @@ -610,9 +618,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateObjectLiteralShallow) { RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateArrayLiteral) { HandleScope scope(isolate); ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(FixedArray, literals, 0); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, literals, 0); CONVERT_SMI_ARG_CHECKED(literals_index, 1); - CONVERT_ARG_CHECKED(FixedArray, elements, 2); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, elements, 2); // Check if boilerplate exists. If not, create it first. Handle boilerplate(literals->get(literals_index), isolate); @@ -630,9 +638,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateArrayLiteral) { RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateArrayLiteralShallow) { HandleScope scope(isolate); ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(FixedArray, literals, 0); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, literals, 0); CONVERT_SMI_ARG_CHECKED(literals_index, 1); - CONVERT_ARG_CHECKED(FixedArray, elements, 2); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, elements, 2); // Check if boilerplate exists. If not, create it first. Handle boilerplate(literals->get(literals_index), isolate); @@ -691,28 +699,28 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_IsJSFunctionProxy) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetHandler) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSProxy, proxy, args[0]); + CONVERT_ARG_CHECKED(JSProxy, proxy, 0); return proxy->handler(); } RUNTIME_FUNCTION(MaybeObject*, Runtime_GetCallTrap) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunctionProxy, proxy, args[0]); + CONVERT_ARG_CHECKED(JSFunctionProxy, proxy, 0); return proxy->call_trap(); } RUNTIME_FUNCTION(MaybeObject*, Runtime_GetConstructTrap) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunctionProxy, proxy, args[0]); + CONVERT_ARG_CHECKED(JSFunctionProxy, proxy, 0); return proxy->construct_trap(); } RUNTIME_FUNCTION(MaybeObject*, Runtime_Fix) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSProxy, proxy, args[0]); + CONVERT_ARG_CHECKED(JSProxy, proxy, 0); proxy->Fix(); return isolate->heap()->undefined_value(); } @@ -721,7 +729,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_Fix) { RUNTIME_FUNCTION(MaybeObject*, Runtime_SetInitialize) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSSet, holder, 0); + CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); Handle table = isolate->factory()->NewObjectHashSet(0); holder->set_table(*table); return *holder; @@ -731,7 +739,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetInitialize) { RUNTIME_FUNCTION(MaybeObject*, Runtime_SetAdd) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSSet, holder, 0); + CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); Handle key(args[1]); Handle table(ObjectHashSet::cast(holder->table())); table = ObjectHashSetAdd(table, key); @@ -743,7 +751,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetAdd) { RUNTIME_FUNCTION(MaybeObject*, Runtime_SetHas) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSSet, holder, 0); + CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); Handle key(args[1]); Handle table(ObjectHashSet::cast(holder->table())); return isolate->heap()->ToBoolean(table->Contains(*key)); @@ -753,7 +761,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetHas) { RUNTIME_FUNCTION(MaybeObject*, Runtime_SetDelete) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSSet, holder, 0); + CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); Handle key(args[1]); Handle table(ObjectHashSet::cast(holder->table())); table = ObjectHashSetRemove(table, key); @@ -765,7 +773,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetDelete) { RUNTIME_FUNCTION(MaybeObject*, Runtime_MapInitialize) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSMap, holder, 0); + CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); Handle table = isolate->factory()->NewObjectHashTable(0); holder->set_table(*table); return *holder; @@ -775,7 +783,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_MapInitialize) { RUNTIME_FUNCTION(MaybeObject*, Runtime_MapGet) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSMap, holder, 0); + CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); Handle key(args[1]); return ObjectHashTable::cast(holder->table())->Lookup(*key); } @@ -784,7 +792,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_MapGet) { RUNTIME_FUNCTION(MaybeObject*, Runtime_MapSet) { HandleScope scope(isolate); ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(JSMap, holder, 0); + CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); Handle key(args[1]); Handle value(args[2]); Handle table(ObjectHashTable::cast(holder->table())); @@ -797,7 +805,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_MapSet) { RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapInitialize) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSWeakMap, weakmap, 0); + CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); ASSERT(weakmap->map()->inobject_properties() == 0); Handle table = isolate->factory()->NewObjectHashTable(0); weakmap->set_table(*table); @@ -809,8 +817,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapInitialize) { RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapGet) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSWeakMap, weakmap, 0); - CONVERT_ARG_CHECKED(JSReceiver, key, 1); + CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); + CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); return ObjectHashTable::cast(weakmap->table())->Lookup(*key); } @@ -818,8 +826,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapGet) { RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapSet) { HandleScope scope(isolate); ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(JSWeakMap, weakmap, 0); - CONVERT_ARG_CHECKED(JSReceiver, key, 1); + CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0); + CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1); Handle value(args[2]); Handle table(ObjectHashTable::cast(weakmap->table())); Handle new_table = PutIntoObjectHashTable(table, key, value); @@ -840,7 +848,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ClassOf) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPrototype) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSReceiver, input_obj, args[0]); + CONVERT_ARG_CHECKED(JSReceiver, input_obj, 0); Object* obj = input_obj; // We don't expect access checks to be needed on JSProxy objects. ASSERT(!obj->IsAccessCheckNeeded() || obj->IsJSObject()); @@ -1009,8 +1017,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetOwnProperty) { Handle elms = isolate->factory()->NewFixedArray(DESCRIPTOR_SIZE); Handle desc = isolate->factory()->NewJSArrayWithElements(elms); LookupResult result(isolate); - CONVERT_ARG_CHECKED(JSObject, obj, 0); - CONVERT_ARG_CHECKED(String, name, 1); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(String, name, 1); // This could be an element. uint32_t index; @@ -1147,14 +1155,14 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetOwnProperty) { RUNTIME_FUNCTION(MaybeObject*, Runtime_PreventExtensions) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSObject, obj, args[0]); + CONVERT_ARG_CHECKED(JSObject, obj, 0); return obj->PreventExtensions(); } RUNTIME_FUNCTION(MaybeObject*, Runtime_IsExtensible) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSObject, obj, args[0]); + CONVERT_ARG_CHECKED(JSObject, obj, 0); if (obj->IsJSGlobalProxy()) { Object* proto = obj->GetPrototype(); if (proto->IsNull()) return isolate->heap()->false_value(); @@ -1168,9 +1176,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_IsExtensible) { RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpCompile) { HandleScope scope(isolate); ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(JSRegExp, re, 0); - CONVERT_ARG_CHECKED(String, pattern, 1); - CONVERT_ARG_CHECKED(String, flags, 2); + CONVERT_ARG_HANDLE_CHECKED(JSRegExp, re, 0); + CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1); + CONVERT_ARG_HANDLE_CHECKED(String, flags, 2); Handle result = RegExpImpl::Compile(re, pattern, flags); if (result.is_null()) return Failure::Exception(); return *result; @@ -1180,7 +1188,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpCompile) { RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateApiFunction) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(FunctionTemplateInfo, data, 0); + CONVERT_ARG_HANDLE_CHECKED(FunctionTemplateInfo, data, 0); return *isolate->factory()->CreateApiFunction(data); } @@ -1195,9 +1203,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_IsTemplate) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetTemplateField) { ASSERT(args.length() == 2); - CONVERT_CHECKED(HeapObject, templ, args[0]); - CONVERT_CHECKED(Smi, field, args[1]); - int index = field->value(); + CONVERT_ARG_CHECKED(HeapObject, templ, 0); + CONVERT_SMI_ARG_CHECKED(index, 1) int offset = index * kPointerSize + HeapObject::kHeaderSize; InstanceType type = templ->map()->instance_type(); RUNTIME_ASSERT(type == FUNCTION_TEMPLATE_INFO_TYPE || @@ -1214,7 +1221,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetTemplateField) { RUNTIME_FUNCTION(MaybeObject*, Runtime_DisableAccessChecks) { ASSERT(args.length() == 1); - CONVERT_CHECKED(HeapObject, object, args[0]); + CONVERT_ARG_CHECKED(HeapObject, object, 0); Map* old_map = object->map(); bool needs_access_checks = old_map->is_access_check_needed(); if (needs_access_checks) { @@ -1233,7 +1240,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DisableAccessChecks) { RUNTIME_FUNCTION(MaybeObject*, Runtime_EnableAccessChecks) { ASSERT(args.length() == 1); - CONVERT_CHECKED(HeapObject, object, args[0]); + CONVERT_ARG_CHECKED(HeapObject, object, 0); Map* old_map = object->map(); if (!old_map->is_access_check_needed()) { // Copy map so it won't interfere constructor's initial map. @@ -1269,7 +1276,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeclareGlobals) { isolate->context()->global()); Handle context = args.at(0); - CONVERT_ARG_CHECKED(FixedArray, pairs, 1); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, pairs, 1); CONVERT_SMI_ARG_CHECKED(flags, 2); // Traverse the name/value pairs and set the properties. @@ -1471,7 +1478,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeVarGlobal) { RUNTIME_ASSERT(args.length() == 2 || args.length() == 3); bool assign = args.length() == 3; - CONVERT_ARG_CHECKED(String, name, 0); + CONVERT_ARG_HANDLE_CHECKED(String, name, 0); GlobalObject* global = isolate->context()->global(); RUNTIME_ASSERT(args[1]->IsSmi()); CONVERT_LANGUAGE_MODE_ARG(language_mode, 1); @@ -1528,7 +1535,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeConstGlobal) { // of the constant is the first argument and the initial value // is the second. RUNTIME_ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(String, name, 0); + CONVERT_ARG_HANDLE_CHECKED(String, name, 0); Handle value = args.at(1); // Get the current global object from top. @@ -1700,7 +1707,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_OptimizeObjectForAddingMultipleProperties) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSObject, object, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); CONVERT_SMI_ARG_CHECKED(properties, 1); if (object->HasFastProperties()) { JSObject::NormalizeProperties(object, KEEP_INOBJECT_PROPERTIES, properties); @@ -1712,12 +1719,12 @@ RUNTIME_FUNCTION(MaybeObject*, RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpExec) { HandleScope scope(isolate); ASSERT(args.length() == 4); - CONVERT_ARG_CHECKED(JSRegExp, regexp, 0); - CONVERT_ARG_CHECKED(String, subject, 1); + CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0); + CONVERT_ARG_HANDLE_CHECKED(String, subject, 1); // Due to the way the JS calls are constructed this must be less than the // length of a string, i.e. it is always a Smi. We check anyway for security. CONVERT_SMI_ARG_CHECKED(index, 2); - CONVERT_ARG_CHECKED(JSArray, last_match_info, 3); + CONVERT_ARG_HANDLE_CHECKED(JSArray, last_match_info, 3); RUNTIME_ASSERT(last_match_info->HasFastElements()); RUNTIME_ASSERT(index >= 0); RUNTIME_ASSERT(index <= subject->length()); @@ -1769,8 +1776,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpConstructResult) { RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpInitializeObject) { AssertNoAllocation no_alloc; ASSERT(args.length() == 5); - CONVERT_CHECKED(JSRegExp, regexp, args[0]); - CONVERT_CHECKED(String, source, args[1]); + CONVERT_ARG_CHECKED(JSRegExp, regexp, 0); + CONVERT_ARG_CHECKED(String, source, 1); Object* global = args[2]; if (!global->IsTrue()) global = isolate->heap()->false_value(); @@ -1838,7 +1845,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpInitializeObject) { RUNTIME_FUNCTION(MaybeObject*, Runtime_FinishArrayPrototypeSetup) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSArray, prototype, 0); + CONVERT_ARG_HANDLE_CHECKED(JSArray, prototype, 0); // This is necessary to enable fast checks for absence of elements // on Array.prototype and below. prototype->set_elements(isolate->heap()->empty_fixed_array()); @@ -1867,7 +1874,7 @@ static Handle InstallBuiltin(Isolate* isolate, RUNTIME_FUNCTION(MaybeObject*, Runtime_SpecialArrayFunctions) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSObject, holder, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, holder, 0); InstallBuiltin(isolate, holder, "pop", Builtins::kArrayPop); InstallBuiltin(isolate, holder, "push", Builtins::kArrayPush); @@ -1883,7 +1890,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SpecialArrayFunctions) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetDefaultReceiver) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSReceiver, callable, args[0]); + CONVERT_ARG_CHECKED(JSReceiver, callable, 0); if (!callable->IsJSFunction()) { HandleScope scope(isolate); @@ -1911,7 +1918,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetDefaultReceiver) { RUNTIME_FUNCTION(MaybeObject*, Runtime_MaterializeRegExpLiteral) { HandleScope scope(isolate); ASSERT(args.length() == 4); - CONVERT_ARG_CHECKED(FixedArray, literals, 0); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, literals, 0); int index = args.smi_at(1); Handle pattern = args.at(2); Handle flags = args.at(3); @@ -1942,7 +1949,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionGetName) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, f, args[0]); + CONVERT_ARG_CHECKED(JSFunction, f, 0); return f->shared()->name(); } @@ -1951,8 +1958,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetName) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(JSFunction, f, args[0]); - CONVERT_CHECKED(String, name, args[1]); + CONVERT_ARG_CHECKED(JSFunction, f, 0); + CONVERT_ARG_CHECKED(String, name, 1); f->shared()->set_name(name); return isolate->heap()->undefined_value(); } @@ -1961,7 +1968,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetName) { RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionNameShouldPrintAsAnonymous) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, f, args[0]); + CONVERT_ARG_CHECKED(JSFunction, f, 0); return isolate->heap()->ToBoolean( f->shared()->name_should_print_as_anonymous()); } @@ -1970,7 +1977,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionNameShouldPrintAsAnonymous) { RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionMarkNameShouldPrintAsAnonymous) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, f, args[0]); + CONVERT_ARG_CHECKED(JSFunction, f, 0); f->shared()->set_name_should_print_as_anonymous(true); return isolate->heap()->undefined_value(); } @@ -1980,7 +1987,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionRemovePrototype) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, f, args[0]); + CONVERT_ARG_CHECKED(JSFunction, f, 0); Object* obj = f->RemovePrototype(); if (obj->IsFailure()) return obj; @@ -1992,7 +1999,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionGetScript) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, fun, args[0]); + CONVERT_ARG_CHECKED(JSFunction, fun, 0); Handle script = Handle(fun->shared()->script(), isolate); if (!script->IsScript()) return isolate->heap()->undefined_value(); @@ -2004,7 +2011,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionGetSourceCode) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSFunction, f, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, f, 0); Handle shared(f->shared()); return *shared->GetSourceCode(); } @@ -2014,7 +2021,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionGetScriptSourcePosition) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, fun, args[0]); + CONVERT_ARG_CHECKED(JSFunction, fun, 0); int pos = fun->shared()->start_position(); return Smi::FromInt(pos); } @@ -2023,7 +2030,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionGetScriptSourcePosition) { RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionGetPositionForOffset) { ASSERT(args.length() == 2); - CONVERT_CHECKED(Code, code, args[0]); + CONVERT_ARG_CHECKED(Code, code, 0); CONVERT_NUMBER_CHECKED(int, offset, Int32, args[1]); RUNTIME_ASSERT(0 <= offset && offset < code->Size()); @@ -2037,8 +2044,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetInstanceClassName) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(JSFunction, fun, args[0]); - CONVERT_CHECKED(String, name, args[1]); + CONVERT_ARG_CHECKED(JSFunction, fun, 0); + CONVERT_ARG_CHECKED(String, name, 1); fun->SetInstanceClassName(name); return isolate->heap()->undefined_value(); } @@ -2048,10 +2055,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetLength) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(JSFunction, fun, args[0]); - CONVERT_CHECKED(Smi, length, args[1]); - fun->shared()->set_length(length->value()); - return length; + CONVERT_ARG_CHECKED(JSFunction, fun, 0); + CONVERT_SMI_ARG_CHECKED(length, 1); + fun->shared()->set_length(length); + return isolate->heap()->undefined_value(); } @@ -2059,7 +2066,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetPrototype) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(JSFunction, fun, args[0]); + CONVERT_ARG_CHECKED(JSFunction, fun, 0); ASSERT(fun->should_have_prototype()); Object* obj; { MaybeObject* maybe_obj = @@ -2073,7 +2080,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetPrototype) { RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionSetReadOnlyPrototype) { NoHandleAllocation ha; RUNTIME_ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, function, args[0]); + CONVERT_ARG_CHECKED(JSFunction, function, 0); MaybeObject* maybe_name = isolate->heap()->AllocateStringFromAscii(CStrVector("prototype")); @@ -2129,7 +2136,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionIsAPIFunction) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, f, args[0]); + CONVERT_ARG_CHECKED(JSFunction, f, 0); return isolate->heap()->ToBoolean(f->shared()->IsApiFunction()); } @@ -2138,7 +2145,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionIsBuiltin) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, f, args[0]); + CONVERT_ARG_CHECKED(JSFunction, f, 0); return isolate->heap()->ToBoolean(f->IsBuiltin()); } @@ -2147,7 +2154,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetCode) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSFunction, target, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, target, 0); Handle code = args.at(1); Handle context(target->context()); @@ -2211,7 +2218,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetCode) { RUNTIME_FUNCTION(MaybeObject*, Runtime_SetExpectedNumberOfProperties) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSFunction, function, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); CONVERT_SMI_ARG_CHECKED(num, 1); RUNTIME_ASSERT(num >= 0); SetExpectedNofProperties(function, num); @@ -2235,7 +2242,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringCharCodeAt) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(String, subject, args[0]); + CONVERT_ARG_CHECKED(String, subject, 0); Object* index = args[1]; RUNTIME_ASSERT(index->IsNumber()); @@ -3212,7 +3219,7 @@ MUST_USE_RESULT static MaybeObject* StringReplaceRegExpWithEmptyString( RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceRegExpWithString) { ASSERT(args.length() == 4); - CONVERT_CHECKED(String, subject, args[0]); + CONVERT_ARG_CHECKED(String, subject, 0); if (!subject->IsFlat()) { Object* flat_subject; { MaybeObject* maybe_flat_subject = subject->TryFlatten(); @@ -3223,7 +3230,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceRegExpWithString) { subject = String::cast(flat_subject); } - CONVERT_CHECKED(String, replacement, args[2]); + CONVERT_ARG_CHECKED(String, replacement, 2); if (!replacement->IsFlat()) { Object* flat_replacement; { MaybeObject* maybe_flat_replacement = replacement->TryFlatten(); @@ -3234,8 +3241,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceRegExpWithString) { replacement = String::cast(flat_replacement); } - CONVERT_CHECKED(JSRegExp, regexp, args[1]); - CONVERT_CHECKED(JSArray, last_match_info, args[3]); + CONVERT_ARG_CHECKED(JSRegExp, regexp, 1); + CONVERT_ARG_CHECKED(JSArray, last_match_info, 3); ASSERT(last_match_info->HasFastElements()); @@ -3305,9 +3312,9 @@ Handle Runtime::StringReplaceOneCharWithString(Isolate* isolate, RUNTIME_FUNCTION(MaybeObject*, Runtime_StringReplaceOneCharWithString) { ASSERT(args.length() == 3); HandleScope scope(isolate); - CONVERT_ARG_CHECKED(String, subject, 0); - CONVERT_ARG_CHECKED(String, search, 1); - CONVERT_ARG_CHECKED(String, replace, 2); + CONVERT_ARG_HANDLE_CHECKED(String, subject, 0); + CONVERT_ARG_HANDLE_CHECKED(String, search, 1); + CONVERT_ARG_HANDLE_CHECKED(String, replace, 2); // If the cons string tree is too deep, we simply abort the recursion and // retry with a flattened subject string. @@ -3386,8 +3393,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringIndexOf) { HandleScope scope(isolate); // create a new handle scope ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(String, sub, 0); - CONVERT_ARG_CHECKED(String, pat, 1); + CONVERT_ARG_HANDLE_CHECKED(String, sub, 0); + CONVERT_ARG_HANDLE_CHECKED(String, pat, 1); Object* index = args[2]; uint32_t start_index; @@ -3438,8 +3445,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringLastIndexOf) { HandleScope scope(isolate); // create a new handle scope ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(String, sub, 0); - CONVERT_ARG_CHECKED(String, pat, 1); + CONVERT_ARG_HANDLE_CHECKED(String, sub, 0); + CONVERT_ARG_HANDLE_CHECKED(String, pat, 1); Object* index = args[2]; uint32_t start_index; @@ -3497,8 +3504,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringLocaleCompare) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(String, str1, args[0]); - CONVERT_CHECKED(String, str2, args[1]); + CONVERT_ARG_CHECKED(String, str1, 0); + CONVERT_ARG_CHECKED(String, str2, 1); if (str1 == str2) return Smi::FromInt(0); // Equal. int str1_length = str1->length(); @@ -3545,7 +3552,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SubString) { NoHandleAllocation ha; ASSERT(args.length() == 3); - CONVERT_CHECKED(String, value, args[0]); + CONVERT_ARG_CHECKED(String, value, 0); int start, end; // We have a fast integer-only case here to avoid a conversion to double in // the common case where from and to are Smis. @@ -3571,9 +3578,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SubString) { RUNTIME_FUNCTION(MaybeObject*, Runtime_StringMatch) { ASSERT_EQ(3, args.length()); - CONVERT_ARG_CHECKED(String, subject, 0); - CONVERT_ARG_CHECKED(JSRegExp, regexp, 1); - CONVERT_ARG_CHECKED(JSArray, regexp_info, 2); + CONVERT_ARG_HANDLE_CHECKED(String, subject, 0); + CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 1); + CONVERT_ARG_HANDLE_CHECKED(JSArray, regexp_info, 2); HandleScope handles; Handle match = RegExpImpl::Exec(regexp, subject, 0, regexp_info); @@ -3964,11 +3971,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpExecMultiple) { ASSERT(args.length() == 4); HandleScope handles(isolate); - CONVERT_ARG_CHECKED(String, subject, 1); + CONVERT_ARG_HANDLE_CHECKED(String, subject, 1); if (!subject->IsFlat()) FlattenString(subject); - CONVERT_ARG_CHECKED(JSRegExp, regexp, 0); - CONVERT_ARG_CHECKED(JSArray, last_match_info, 2); - CONVERT_ARG_CHECKED(JSArray, result_array, 3); + CONVERT_ARG_HANDLE_CHECKED(JSRegExp, regexp, 0); + CONVERT_ARG_HANDLE_CHECKED(JSArray, last_match_info, 2); + CONVERT_ARG_HANDLE_CHECKED(JSArray, result_array, 3); ASSERT(last_match_info->HasFastElements()); ASSERT(regexp->GetFlags().is_global()); @@ -4317,19 +4324,18 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_KeyedGetProperty) { RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineAccessorProperty) { ASSERT(args.length() == 5); HandleScope scope(isolate); - CONVERT_ARG_CHECKED(JSObject, obj, 0); - CONVERT_CHECKED(String, name, args[1]); - CONVERT_CHECKED(Smi, flag_setter, args[2]); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); + CONVERT_ARG_CHECKED(String, name, 1); + CONVERT_SMI_ARG_CHECKED(flag_setter, 2); Object* fun = args[3]; - CONVERT_CHECKED(Smi, flag_attr, args[4]); + CONVERT_SMI_ARG_CHECKED(unchecked, 4); - int unchecked = flag_attr->value(); RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); PropertyAttributes attr = static_cast(unchecked); RUNTIME_ASSERT(!obj->IsNull()); RUNTIME_ASSERT(fun->IsSpecFunction() || fun->IsUndefined()); - return obj->DefineAccessor(name, flag_setter->value() == 0, fun, attr); + return obj->DefineAccessor(name, flag_setter == 0, fun, attr); } // Implements part of 8.12.9 DefineOwnProperty. @@ -4341,12 +4347,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineAccessorProperty) { RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineDataProperty) { ASSERT(args.length() == 4); HandleScope scope(isolate); - CONVERT_ARG_CHECKED(JSObject, js_object, 0); - CONVERT_ARG_CHECKED(String, name, 1); + CONVERT_ARG_HANDLE_CHECKED(JSObject, js_object, 0); + CONVERT_ARG_HANDLE_CHECKED(String, name, 1); Handle obj_value = args.at(2); - CONVERT_CHECKED(Smi, flag, args[3]); + CONVERT_SMI_ARG_CHECKED(unchecked, 3); - int unchecked = flag->value(); RUNTIME_ASSERT((unchecked & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); PropertyAttributes attr = static_cast(unchecked); @@ -4667,7 +4672,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetProperty) { StrictModeFlag strict_mode = kNonStrictMode; if (args.length() == 5) { - CONVERT_STRICT_MODE_ARG(strict_mode_flag, 4); + CONVERT_STRICT_MODE_ARG_CHECKED(strict_mode_flag, 4); strict_mode = strict_mode_flag; } @@ -4715,10 +4720,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetNativeFlag) { RUNTIME_FUNCTION(MaybeObject*, Runtime_StoreArrayLiteralElement) { RUNTIME_ASSERT(args.length() == 5); - CONVERT_ARG_CHECKED(JSObject, object, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); CONVERT_SMI_ARG_CHECKED(store_index, 1); Handle value = args.at(2); - CONVERT_ARG_CHECKED(FixedArray, literals, 3); + CONVERT_ARG_HANDLE_CHECKED(FixedArray, literals, 3); CONVERT_SMI_ARG_CHECKED(literal_index, 4); HandleScope scope; @@ -4758,13 +4763,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StoreArrayLiteralElement) { RUNTIME_FUNCTION(MaybeObject*, Runtime_IgnoreAttributesAndSetProperty) { NoHandleAllocation ha; RUNTIME_ASSERT(args.length() == 3 || args.length() == 4); - CONVERT_CHECKED(JSObject, object, args[0]); - CONVERT_CHECKED(String, name, args[1]); + CONVERT_ARG_CHECKED(JSObject, object, 0); + CONVERT_ARG_CHECKED(String, name, 1); // Compute attributes. PropertyAttributes attributes = NONE; if (args.length() == 4) { - CONVERT_CHECKED(Smi, value_obj, args[3]); - int unchecked_value = value_obj->value(); + CONVERT_SMI_ARG_CHECKED(unchecked_value, 3); // Only attribute bits should be set. RUNTIME_ASSERT( (unchecked_value & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); @@ -4780,9 +4784,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeleteProperty) { NoHandleAllocation ha; ASSERT(args.length() == 3); - CONVERT_CHECKED(JSReceiver, object, args[0]); - CONVERT_CHECKED(String, key, args[1]); - CONVERT_STRICT_MODE_ARG(strict_mode, 2); + CONVERT_ARG_CHECKED(JSReceiver, object, 0); + CONVERT_ARG_CHECKED(String, key, 1); + CONVERT_STRICT_MODE_ARG_CHECKED(strict_mode, 2); return object->DeleteProperty(key, (strict_mode == kStrictMode) ? JSReceiver::STRICT_DELETION : JSReceiver::NORMAL_DELETION); @@ -4810,7 +4814,7 @@ static Object* HasLocalPropertyImplementation(Isolate* isolate, RUNTIME_FUNCTION(MaybeObject*, Runtime_HasLocalProperty) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(String, key, args[1]); + CONVERT_ARG_CHECKED(String, key, 1); uint32_t index; const bool key_is_array_index = key->AsArrayIndex(&index); @@ -4848,8 +4852,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_HasLocalProperty) { RUNTIME_FUNCTION(MaybeObject*, Runtime_HasProperty) { NoHandleAllocation na; ASSERT(args.length() == 2); - CONVERT_CHECKED(JSReceiver, receiver, args[0]); - CONVERT_CHECKED(String, key, args[1]); + CONVERT_ARG_CHECKED(JSReceiver, receiver, 0); + CONVERT_ARG_CHECKED(String, key, 1); bool result = receiver->HasProperty(key); if (isolate->has_pending_exception()) return Failure::Exception(); @@ -4860,10 +4864,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_HasProperty) { RUNTIME_FUNCTION(MaybeObject*, Runtime_HasElement) { NoHandleAllocation na; ASSERT(args.length() == 2); - CONVERT_CHECKED(JSReceiver, receiver, args[0]); - CONVERT_CHECKED(Smi, index, args[1]); + CONVERT_ARG_CHECKED(JSReceiver, receiver, 0); + CONVERT_SMI_ARG_CHECKED(index, 1); - bool result = receiver->HasElement(index->value()); + bool result = receiver->HasElement(index); if (isolate->has_pending_exception()) return Failure::Exception(); return isolate->heap()->ToBoolean(result); } @@ -4873,8 +4877,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_IsPropertyEnumerable) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(JSObject, object, args[0]); - CONVERT_CHECKED(String, key, args[1]); + CONVERT_ARG_CHECKED(JSObject, object, 0); + CONVERT_ARG_CHECKED(String, key, 1); uint32_t index; if (key->AsArrayIndex(&index)) { @@ -4919,7 +4923,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_IsPropertyEnumerable) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPropertyNames) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSReceiver, object, 0); + CONVERT_ARG_HANDLE_CHECKED(JSReceiver, object, 0); bool threw = false; Handle result = GetKeysFor(object, &threw); if (threw) return Failure::Exception(); @@ -4935,7 +4939,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPropertyNames) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetPropertyNamesFast) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSReceiver, raw_object, args[0]); + CONVERT_ARG_CHECKED(JSReceiver, raw_object, 0); if (raw_object->IsSimpleEnum()) return raw_object->map(); @@ -4976,7 +4980,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetLocalPropertyNames) { if (!args[0]->IsJSObject()) { return isolate->heap()->undefined_value(); } - CONVERT_ARG_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); // Skip the global proxy as it has no properties and always delegates to the // real global object. @@ -5063,7 +5067,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetLocalElementNames) { if (!args[0]->IsJSObject()) { return isolate->heap()->undefined_value(); } - CONVERT_ARG_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); int n = obj->NumberOfLocalElements(static_cast(NONE)); Handle names = isolate->factory()->NewFixedArray(n); @@ -5080,7 +5084,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetInterceptorInfo) { if (!args[0]->IsJSObject()) { return Smi::FromInt(0); } - CONVERT_ARG_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); int result = 0; if (obj->HasNamedInterceptor()) result |= 2; @@ -5095,7 +5099,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetInterceptorInfo) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetNamedInterceptorPropertyNames) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); if (obj->HasNamedInterceptor()) { v8::Handle result = GetKeysForNamedInterceptor(obj, obj); @@ -5110,7 +5114,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetNamedInterceptorPropertyNames) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetIndexedInterceptorElementNames) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); if (obj->HasIndexedInterceptor()) { v8::Handle result = GetKeysForIndexedInterceptor(obj, obj); @@ -5122,7 +5126,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetIndexedInterceptorElementNames) { RUNTIME_FUNCTION(MaybeObject*, Runtime_LocalKeys) { ASSERT_EQ(args.length(), 1); - CONVERT_CHECKED(JSObject, raw_object, args[0]); + CONVERT_ARG_CHECKED(JSObject, raw_object, 0); HandleScope scope(isolate); Handle object(raw_object); @@ -5314,7 +5318,7 @@ static int ParseDecimalInteger(const char*s, int from, int to) { RUNTIME_FUNCTION(MaybeObject*, Runtime_StringToNumber) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(String, subject, args[0]); + CONVERT_ARG_CHECKED(String, subject, 0); subject->TryFlatten(); // Fast case: short integer or some sorts of junk values. @@ -5370,7 +5374,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringFromCharCodeArray) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSArray, codes, args[0]); + CONVERT_ARG_CHECKED(JSArray, codes, 0); int length = Smi::cast(codes->length())->value(); // Check if the string can be ASCII. @@ -5450,7 +5454,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_URIEscape) { const char hex_chars[] = "0123456789ABCDEF"; NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(String, source, args[0]); + CONVERT_ARG_CHECKED(String, source, 0); source->TryFlatten(); @@ -5568,7 +5572,7 @@ static inline int Unescape(String* source, RUNTIME_FUNCTION(MaybeObject*, Runtime_URIUnescape) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(String, source, args[0]); + CONVERT_ARG_CHECKED(String, source, 0); source->TryFlatten(); @@ -5825,7 +5829,7 @@ static MaybeObject* QuoteJsonString(Isolate* isolate, RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONString) { NoHandleAllocation ha; - CONVERT_CHECKED(String, str, args[0]); + CONVERT_ARG_CHECKED(String, str, 0); if (!str->IsFlat()) { MaybeObject* try_flatten = str->TryFlatten(); Object* flat; @@ -5849,7 +5853,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONString) { RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONStringComma) { NoHandleAllocation ha; - CONVERT_CHECKED(String, str, args[0]); + CONVERT_ARG_CHECKED(String, str, 0); if (!str->IsFlat()) { MaybeObject* try_flatten = str->TryFlatten(); Object* flat; @@ -5926,7 +5930,7 @@ static MaybeObject* QuoteJsonStringArray(Isolate* isolate, RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONStringArray) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSArray, array, args[0]); + CONVERT_ARG_CHECKED(JSArray, array, 0); if (!array->HasFastElements()) return isolate->heap()->undefined_value(); FixedArray* elements = FixedArray::cast(array->elements()); @@ -5968,7 +5972,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_QuoteJSONStringArray) { RUNTIME_FUNCTION(MaybeObject*, Runtime_StringParseInt) { NoHandleAllocation ha; - CONVERT_CHECKED(String, s, args[0]); + CONVERT_ARG_CHECKED(String, s, 0); CONVERT_SMI_ARG_CHECKED(radix, 1); s->TryFlatten(); @@ -5981,7 +5985,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringParseInt) { RUNTIME_FUNCTION(MaybeObject*, Runtime_StringParseFloat) { NoHandleAllocation ha; - CONVERT_CHECKED(String, str, args[0]); + CONVERT_ARG_CHECKED(String, str, 0); // ECMA-262 section 15.1.2.3, empty string is NaN double value = StringToDouble(isolate->unicode_cache(), @@ -6230,7 +6234,7 @@ MUST_USE_RESULT static MaybeObject* ConvertCase( Isolate* isolate, unibrow::Mapping* mapping) { NoHandleAllocation ha; - CONVERT_CHECKED(String, s, args[0]); + CONVERT_ARG_CHECKED(String, s, 0); s = s->TryFlattenGetString(); const int length = s->length(); @@ -6292,9 +6296,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringTrim) { NoHandleAllocation ha; ASSERT(args.length() == 3); - CONVERT_CHECKED(String, s, args[0]); - CONVERT_BOOLEAN_CHECKED(trimLeft, args[1]); - CONVERT_BOOLEAN_CHECKED(trimRight, args[2]); + CONVERT_ARG_CHECKED(String, s, 0); + CONVERT_BOOLEAN_ARG_CHECKED(trimLeft, 1); + CONVERT_BOOLEAN_ARG_CHECKED(trimRight, 2); s->TryFlatten(); int length = s->length(); @@ -6319,8 +6323,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringTrim) { RUNTIME_FUNCTION(MaybeObject*, Runtime_StringSplit) { ASSERT(args.length() == 3); HandleScope handle_scope(isolate); - CONVERT_ARG_CHECKED(String, subject, 0); - CONVERT_ARG_CHECKED(String, pattern, 1); + CONVERT_ARG_HANDLE_CHECKED(String, subject, 0); + CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1); CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[2]); int subject_length = subject->length(); @@ -6441,7 +6445,7 @@ static int CopyCachedAsciiCharsToArray(Heap* heap, RUNTIME_FUNCTION(MaybeObject*, Runtime_StringToArray) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(String, s, 0); + CONVERT_ARG_HANDLE_CHECKED(String, s, 0); CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[1]); s = FlattenGetString(s); @@ -6492,7 +6496,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringToArray) { RUNTIME_FUNCTION(MaybeObject*, Runtime_NewStringWrapper) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(String, value, args[0]); + CONVERT_ARG_CHECKED(String, value, 0); return value->ToObject(); } @@ -6683,8 +6687,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberMod) { RUNTIME_FUNCTION(MaybeObject*, Runtime_StringAdd) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(String, str1, args[0]); - CONVERT_CHECKED(String, str2, args[1]); + CONVERT_ARG_CHECKED(String, str1, 0); + CONVERT_ARG_CHECKED(String, str2, 1); isolate->counters()->string_add_runtime()->Increment(); return isolate->heap()->AllocateConsString(str1, str2); } @@ -6732,13 +6736,13 @@ static inline void StringBuilderConcatHelper(String* special, RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat) { NoHandleAllocation ha; ASSERT(args.length() == 3); - CONVERT_CHECKED(JSArray, array, args[0]); + CONVERT_ARG_CHECKED(JSArray, array, 0); if (!args[1]->IsSmi()) { isolate->context()->mark_out_of_memory(); return Failure::OutOfMemoryException(); } int array_length = args.smi_at(1); - CONVERT_CHECKED(String, special, args[2]); + CONVERT_ARG_CHECKED(String, special, 2); // This assumption is used by the slice encoding in one or two smis. ASSERT(Smi::kMaxValue >= String::kMaxLength); @@ -6848,13 +6852,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderConcat) { RUNTIME_FUNCTION(MaybeObject*, Runtime_StringBuilderJoin) { NoHandleAllocation ha; ASSERT(args.length() == 3); - CONVERT_CHECKED(JSArray, array, args[0]); + CONVERT_ARG_CHECKED(JSArray, array, 0); if (!args[1]->IsSmi()) { isolate->context()->mark_out_of_memory(); return Failure::OutOfMemoryException(); } int array_length = args.smi_at(1); - CONVERT_CHECKED(String, separator, args[2]); + CONVERT_ARG_CHECKED(String, separator, 2); if (!array->HasFastElements()) { return isolate->Throw(isolate->heap()->illegal_argument_symbol()); @@ -6972,11 +6976,11 @@ static void JoinSparseArrayWithSeparator(FixedArray* elements, RUNTIME_FUNCTION(MaybeObject*, Runtime_SparseJoinWithSeparator) { NoHandleAllocation ha; ASSERT(args.length() == 3); - CONVERT_CHECKED(JSArray, elements_array, args[0]); + CONVERT_ARG_CHECKED(JSArray, elements_array, 0); RUNTIME_ASSERT(elements_array->HasFastElements() || elements_array->HasFastSmiOnlyElements()); CONVERT_NUMBER_CHECKED(uint32_t, array_length, Uint32, args[1]); - CONVERT_CHECKED(String, separator, args[2]); + CONVERT_ARG_CHECKED(String, separator, 2); // elements_array is fast-mode JSarray of alternating positions // (increasing order) and strings. // array_length is length of original array (used to add separators); @@ -6998,7 +7002,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SparseJoinWithSeparator) { FixedArray* elements = FixedArray::cast(elements_array->elements()); for (int i = 0; i < elements_length; i += 2) { RUNTIME_ASSERT(elements->get(i)->IsNumber()); - CONVERT_CHECKED(String, string, elements->get(i + 1)); + RUNTIME_ASSERT(elements->get(i + 1)->IsString()); + String* string = String::cast(elements->get(i + 1)); int length = string->length(); if (is_ascii && !string->IsAsciiRepresentation()) { is_ascii = false; @@ -7156,8 +7161,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringEquals) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(String, x, args[0]); - CONVERT_CHECKED(String, y, args[1]); + CONVERT_ARG_CHECKED(String, x, 0); + CONVERT_ARG_CHECKED(String, y, 1); bool not_equal = !x->Equals(y); // This is slightly convoluted because the value that signifies @@ -7188,12 +7193,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberCompare) { RUNTIME_FUNCTION(MaybeObject*, Runtime_SmiLexicographicCompare) { NoHandleAllocation ha; ASSERT(args.length() == 2); - - // Extract the integer values from the Smis. - CONVERT_CHECKED(Smi, x, args[0]); - CONVERT_CHECKED(Smi, y, args[1]); - int x_value = x->value(); - int y_value = y->value(); + CONVERT_SMI_ARG_CHECKED(x_value, 0); + CONVERT_SMI_ARG_CHECKED(y_value, 1); // If the integers are equal so are the string representations. if (x_value == y_value) return Smi::FromInt(EQUAL); @@ -7333,8 +7334,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StringCompare) { NoHandleAllocation ha; ASSERT(args.length() == 2); - CONVERT_CHECKED(String, x, args[0]); - CONVERT_CHECKED(String, y, args[1]); + CONVERT_ARG_CHECKED(String, x, 0); + CONVERT_ARG_CHECKED(String, y, 1); isolate->counters()->string_compare_runtime()->Increment(); @@ -7941,7 +7942,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DateYMDFromTime) { ASSERT(args.length() == 2); CONVERT_DOUBLE_ARG_CHECKED(t, 0); - CONVERT_CHECKED(JSArray, res_array, args[1]); + CONVERT_ARG_CHECKED(JSArray, res_array, 1); int year, month, day; DateYMDFromTime(static_cast(floor(t / 86400000)), year, month, day); @@ -8096,9 +8097,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NewStrictArgumentsFast) { RUNTIME_FUNCTION(MaybeObject*, Runtime_NewClosure) { HandleScope scope(isolate); ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(Context, context, 0); - CONVERT_ARG_CHECKED(SharedFunctionInfo, shared, 1); - CONVERT_BOOLEAN_CHECKED(pretenure, args[2]); + CONVERT_ARG_HANDLE_CHECKED(Context, context, 0); + CONVERT_ARG_HANDLE_CHECKED(SharedFunctionInfo, shared, 1); + CONVERT_BOOLEAN_ARG_CHECKED(pretenure, 2); // The caller ensures that we pretenure closures that are assigned // directly to properties. @@ -8164,7 +8165,7 @@ static SmartArrayPointer > GetCallerArguments( RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionBindArguments) { HandleScope scope(isolate); ASSERT(args.length() == 4); - CONVERT_ARG_CHECKED(JSFunction, bound_function, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, bound_function, 0); RUNTIME_ASSERT(args[3]->IsNumber()); Handle bindee = args.at(1); @@ -8222,7 +8223,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionBindArguments) { RUNTIME_FUNCTION(MaybeObject*, Runtime_BoundFunctionGetBindings) { HandleScope handles(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSReceiver, callable, 0); + CONVERT_ARG_HANDLE_CHECKED(JSReceiver, callable, 0); if (callable->IsJSFunction()) { Handle function = Handle::cast(callable); if (function->shared()->bound()) { @@ -8239,7 +8240,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NewObjectFromBound) { HandleScope scope(isolate); ASSERT(args.length() == 1); // First argument is a function to use as a constructor. - CONVERT_ARG_CHECKED(JSFunction, function, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); RUNTIME_ASSERT(function->shared()->bound()); // The argument is a bound function. Extract its bound arguments @@ -8380,7 +8381,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FinalizeInstanceSize) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSFunction, function, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); function->shared()->CompleteInobjectSlackTracking(); TrySettingInlineConstructStub(isolate, function); @@ -8569,7 +8570,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NotifyOSR) { RUNTIME_FUNCTION(MaybeObject*, Runtime_DeoptimizeFunction) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSFunction, function, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); if (!function->IsOptimized()) return isolate->heap()->undefined_value(); Deoptimizer::DeoptimizeFunction(*function); @@ -8590,7 +8591,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RunningInSimulator) { RUNTIME_FUNCTION(MaybeObject*, Runtime_OptimizeFunctionOnNextCall) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSFunction, function, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); if (!function->IsOptimizable()) return isolate->heap()->undefined_value(); function->MarkForLazyRecompilation(); return isolate->heap()->undefined_value(); @@ -8608,7 +8609,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetOptimizationStatus) { if (FLAG_always_opt) { return Smi::FromInt(3); // 3 == "always". } - CONVERT_ARG_CHECKED(JSFunction, function, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); return function->IsOptimized() ? Smi::FromInt(1) // 1 == "yes". : Smi::FromInt(2); // 2 == "no". } @@ -8617,7 +8618,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetOptimizationStatus) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetOptimizationCount) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSFunction, function, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); return Smi::FromInt(function->shared()->opt_count()); } @@ -8625,7 +8626,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetOptimizationCount) { RUNTIME_FUNCTION(MaybeObject*, Runtime_CompileForOnStackReplacement) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSFunction, function, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); // We're not prepared to handle a function with arguments object. ASSERT(!function->shared()->uses_arguments()); @@ -8754,9 +8755,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CheckIsBootstrapping) { RUNTIME_FUNCTION(MaybeObject*, Runtime_Call) { HandleScope scope(isolate); ASSERT(args.length() >= 2); - CONVERT_CHECKED(JSReceiver, fun, args[args.length() - 1]); - Object* receiver = args[0]; int argc = args.length() - 2; + CONVERT_ARG_CHECKED(JSReceiver, fun, argc + 1); + Object* receiver = args[0]; // If there are too many arguments, allocate argv via malloc. const int argv_small_size = 10; @@ -8790,9 +8791,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_Call) { RUNTIME_FUNCTION(MaybeObject*, Runtime_Apply) { HandleScope scope(isolate); ASSERT(args.length() == 5); - CONVERT_ARG_CHECKED(JSReceiver, fun, 0); + CONVERT_ARG_HANDLE_CHECKED(JSReceiver, fun, 0); Handle receiver = args.at(1); - CONVERT_ARG_CHECKED(JSObject, arguments, 2); + CONVERT_ARG_HANDLE_CHECKED(JSObject, arguments, 2); CONVERT_SMI_ARG_CHECKED(offset, 3); CONVERT_SMI_ARG_CHECKED(argc, 4); ASSERT(offset >= 0); @@ -8842,7 +8843,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_NewFunctionContext) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, function, args[0]); + CONVERT_ARG_CHECKED(JSFunction, function, 0); int length = function->shared()->scope_info()->ContextLength(); Object* result; { MaybeObject* maybe_result = @@ -8954,8 +8955,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeleteContextSlot) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(Context, context, 0); - CONVERT_ARG_CHECKED(String, name, 1); + CONVERT_ARG_HANDLE_CHECKED(Context, context, 0); + CONVERT_ARG_HANDLE_CHECKED(String, name, 1); int index; PropertyAttributes attributes; @@ -9147,8 +9148,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_StoreContextSlot) { ASSERT(args.length() == 4); Handle value(args[0], isolate); - CONVERT_ARG_CHECKED(Context, context, 1); - CONVERT_ARG_CHECKED(String, name, 2); + CONVERT_ARG_HANDLE_CHECKED(Context, context, 1); + CONVERT_ARG_HANDLE_CHECKED(String, name, 2); CONVERT_LANGUAGE_MODE_ARG(language_mode, 3); StrictModeFlag strict_mode = (language_mode == CLASSIC_MODE) ? kNonStrictMode : kStrictMode; @@ -9381,10 +9382,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DateParseString) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(String, str, 0); + CONVERT_ARG_HANDLE_CHECKED(String, str, 0); FlattenString(str); - CONVERT_ARG_CHECKED(JSArray, output, 1); + CONVERT_ARG_HANDLE_CHECKED(JSArray, output, 1); MaybeObject* maybe_result_array = output->EnsureCanContainHeapObjectElements(); @@ -9454,7 +9455,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GlobalReceiver) { RUNTIME_FUNCTION(MaybeObject*, Runtime_ParseJson) { HandleScope scope(isolate); ASSERT_EQ(1, args.length()); - CONVERT_ARG_CHECKED(String, source, 0); + CONVERT_ARG_HANDLE_CHECKED(String, source, 0); source = Handle(source->TryFlattenGetString()); // Optimized fast case where we only have ASCII characters. @@ -9493,7 +9494,7 @@ bool CodeGenerationFromStringsAllowed(Isolate* isolate, RUNTIME_FUNCTION(MaybeObject*, Runtime_CompileString) { HandleScope scope(isolate); ASSERT_EQ(1, args.length()); - CONVERT_ARG_CHECKED(String, source, 0); + CONVERT_ARG_HANDLE_CHECKED(String, source, 0); // Extract global context. Handle context(isolate->context()->global_context()); @@ -9584,7 +9585,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SetNewFunctionAttributes) { // as specified in ECMA262, 15.3.5.2. HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSFunction, func, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, func, 0); Handle map = func->shared()->is_classic_mode() ? isolate->function_instance_map() @@ -9602,7 +9603,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_AllocateInNewSpace) { // Use as fallback for allocation in generated code when NewSpace // is full. ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(Smi, size_smi, 0); + CONVERT_ARG_HANDLE_CHECKED(Smi, size_smi, 0); int size = size_smi->value(); RUNTIME_ASSERT(IsAligned(size, kPointerSize)); RUNTIME_ASSERT(size > 0); @@ -9624,8 +9625,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_AllocateInNewSpace) { // false otherwise. RUNTIME_FUNCTION(MaybeObject*, Runtime_PushIfAbsent) { ASSERT(args.length() == 2); - CONVERT_CHECKED(JSArray, array, args[0]); - CONVERT_CHECKED(JSObject, element, args[1]); + CONVERT_ARG_CHECKED(JSArray, array, 0); + CONVERT_ARG_CHECKED(JSObject, element, 1); RUNTIME_ASSERT(array->HasFastElements() || array->HasFastSmiOnlyElements()); int length = Smi::cast(array->length())->value(); FixedArray* elements = FixedArray::cast(array->elements()); @@ -10116,7 +10117,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ArrayConcat) { ASSERT(args.length() == 1); HandleScope handle_scope(isolate); - CONVERT_ARG_CHECKED(JSArray, arguments, 0); + CONVERT_ARG_HANDLE_CHECKED(JSArray, arguments, 0); int argument_count = static_cast(arguments->length()->Number()); RUNTIME_ASSERT(arguments->HasFastElements()); Handle elements(FixedArray::cast(arguments->elements())); @@ -10211,7 +10212,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GlobalPrint) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(String, string, args[0]); + CONVERT_ARG_CHECKED(String, string, 0); StringInputBuffer buffer(string); while (buffer.has_more()) { uint16_t character = buffer.GetNext(); @@ -10227,7 +10228,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GlobalPrint) { // Returns the number of non-undefined elements collected. RUNTIME_FUNCTION(MaybeObject*, Runtime_RemoveArrayHoles) { ASSERT(args.length() == 2); - CONVERT_CHECKED(JSObject, object, args[0]); + CONVERT_ARG_CHECKED(JSObject, object, 0); CONVERT_NUMBER_CHECKED(uint32_t, limit, Uint32, args[1]); return object->PrepareElementsForSort(limit); } @@ -10236,8 +10237,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_RemoveArrayHoles) { // Move contents of argument 0 (an array) to argument 1 (an array) RUNTIME_FUNCTION(MaybeObject*, Runtime_MoveArrayContents) { ASSERT(args.length() == 2); - CONVERT_CHECKED(JSArray, from, args[0]); - CONVERT_CHECKED(JSArray, to, args[1]); + CONVERT_ARG_CHECKED(JSArray, from, 0); + CONVERT_ARG_CHECKED(JSArray, to, 1); FixedArrayBase* new_elements = from->elements(); MaybeObject* maybe_new_map; ElementsKind elements_kind; @@ -10268,7 +10269,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_MoveArrayContents) { // How many elements does this object/array have? RUNTIME_FUNCTION(MaybeObject*, Runtime_EstimateNumberOfElements) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSObject, object, args[0]); + CONVERT_ARG_CHECKED(JSObject, object, 0); HeapObject* elements = object->elements(); if (elements->IsDictionary()) { int result = SeededNumberDictionary::cast(elements)->NumberOfElements(); @@ -10286,7 +10287,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SwapElements) { ASSERT_EQ(3, args.length()); - CONVERT_ARG_CHECKED(JSObject, object, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); Handle key1 = args.at(1); Handle key2 = args.at(2); @@ -10319,7 +10320,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SwapElements) { RUNTIME_FUNCTION(MaybeObject*, Runtime_GetArrayKeys) { ASSERT(args.length() == 2); HandleScope scope(isolate); - CONVERT_ARG_CHECKED(JSObject, array, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, array, 0); CONVERT_NUMBER_CHECKED(uint32_t, length, Uint32, args[1]); if (array->elements()->IsDictionary()) { // Create an array and get all the keys into it, then remove all the @@ -10368,27 +10369,26 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineAccessor) { // Compute attributes. PropertyAttributes attributes = NONE; if (args.length() == 5) { - CONVERT_CHECKED(Smi, attrs, args[4]); - int value = attrs->value(); + CONVERT_SMI_ARG_CHECKED(value, 4); // Only attribute bits should be set. ASSERT((value & ~(READ_ONLY | DONT_ENUM | DONT_DELETE)) == 0); attributes = static_cast(value); } - CONVERT_CHECKED(JSObject, obj, args[0]); - CONVERT_CHECKED(String, name, args[1]); - CONVERT_CHECKED(Smi, flag, args[2]); - CONVERT_CHECKED(JSFunction, fun, args[3]); - return obj->DefineAccessor(name, flag->value() == 0, fun, attributes); + CONVERT_ARG_CHECKED(JSObject, obj, 0); + CONVERT_ARG_CHECKED(String, name, 1); + CONVERT_SMI_ARG_CHECKED(flag, 2); + CONVERT_ARG_CHECKED(JSFunction, fun, 3); + return obj->DefineAccessor(name, flag == 0, fun, attributes); } RUNTIME_FUNCTION(MaybeObject*, Runtime_LookupAccessor) { ASSERT(args.length() == 3); - CONVERT_CHECKED(JSObject, obj, args[0]); - CONVERT_CHECKED(String, name, args[1]); - CONVERT_CHECKED(Smi, flag, args[2]); - return obj->LookupAccessor(name, flag->value() == 0); + CONVERT_ARG_CHECKED(JSObject, obj, 0); + CONVERT_ARG_CHECKED(String, name, 1); + CONVERT_SMI_ARG_CHECKED(flag, 2); + return obj->LookupAccessor(name, flag == 0); } @@ -10406,8 +10406,8 @@ static Smi* WrapFrameId(StackFrame::Id id) { } -static StackFrame::Id UnwrapFrameId(Smi* wrapped) { - return static_cast(wrapped->value() << 2); +static StackFrame::Id UnwrapFrameId(int wrapped) { + return static_cast(wrapped << 2); } @@ -10510,8 +10510,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugGetPropertyDetails) { ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSObject, obj, 0); - CONVERT_ARG_CHECKED(String, name, 1); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(String, name, 1); // Make sure to set the current context to the context before the debugger was // entered (if the debugger is entered). The reason for switching context here @@ -10608,8 +10608,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugGetProperty) { ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSObject, obj, 0); - CONVERT_ARG_CHECKED(String, name, 1); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(String, name, 1); LookupResult result(isolate); obj->Lookup(*name, &result); @@ -10624,9 +10624,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugGetProperty) { // args[0]: smi with property details. RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugPropertyTypeFromDetails) { ASSERT(args.length() == 1); - CONVERT_CHECKED(Smi, details, args[0]); - PropertyType type = PropertyDetails(details).type(); - return Smi::FromInt(static_cast(type)); + CONVERT_PROPERTY_DETAILS_CHECKED(details, 0); + return Smi::FromInt(static_cast(details.type())); } @@ -10634,9 +10633,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugPropertyTypeFromDetails) { // args[0]: smi with property details. RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugPropertyAttributesFromDetails) { ASSERT(args.length() == 1); - CONVERT_CHECKED(Smi, details, args[0]); - PropertyAttributes attributes = PropertyDetails(details).attributes(); - return Smi::FromInt(static_cast(attributes)); + CONVERT_PROPERTY_DETAILS_CHECKED(details, 0); + return Smi::FromInt(static_cast(details.attributes())); } @@ -10644,9 +10642,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugPropertyAttributesFromDetails) { // args[0]: smi with property details. RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugPropertyIndexFromDetails) { ASSERT(args.length() == 1); - CONVERT_CHECKED(Smi, details, args[0]); - int index = PropertyDetails(details).index(); - return Smi::FromInt(index); + CONVERT_PROPERTY_DETAILS_CHECKED(details, 0); + return Smi::FromInt(details.index()); } @@ -10656,9 +10653,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugPropertyIndexFromDetails) { RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugNamedInterceptorPropertyValue) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); RUNTIME_ASSERT(obj->HasNamedInterceptor()); - CONVERT_ARG_CHECKED(String, name, 1); + CONVERT_ARG_HANDLE_CHECKED(String, name, 1); PropertyAttributes attributes; return obj->GetPropertyWithInterceptor(*obj, *name, &attributes); @@ -10671,7 +10668,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugNamedInterceptorPropertyValue) { RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugIndexedInterceptorElementValue) { HandleScope scope(isolate); ASSERT(args.length() == 2); - CONVERT_ARG_CHECKED(JSObject, obj, 0); + CONVERT_ARG_HANDLE_CHECKED(JSObject, obj, 0); RUNTIME_ASSERT(obj->HasIndexedInterceptor()); CONVERT_NUMBER_CHECKED(uint32_t, index, Uint32, args[1]); @@ -11607,7 +11604,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetScopeCount) { RUNTIME_ARGUMENTS(isolate, args)); if (!maybe_check->ToObject(&check)) return maybe_check; } - CONVERT_CHECKED(Smi, wrapped_id, args[1]); + CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); // Get the frame where the debugging is performed. StackFrame::Id id = UnwrapFrameId(wrapped_id); @@ -11649,7 +11646,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetScopeDetails) { RUNTIME_ARGUMENTS(isolate, args)); if (!maybe_check->ToObject(&check)) return maybe_check; } - CONVERT_CHECKED(Smi, wrapped_id, args[1]); + CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); CONVERT_NUMBER_CHECKED(int, index, Int32, args[3]); @@ -11789,7 +11786,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetThreadDetails) { RUNTIME_FUNCTION(MaybeObject*, Runtime_SetDisableBreak) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_BOOLEAN_CHECKED(disable_break, args[0]); + CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 0); isolate->debug()->set_disable_break(disable_break); return isolate->heap()->undefined_value(); } @@ -11799,7 +11796,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetBreakLocations) { HandleScope scope(isolate); ASSERT(args.length() == 1); - CONVERT_ARG_CHECKED(JSFunction, fun, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); Handle shared(fun->shared()); // Find the number of break points Handle break_locations = Debug::GetSourceBreakLocations(shared); @@ -11817,7 +11814,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetBreakLocations) { RUNTIME_FUNCTION(MaybeObject*, Runtime_SetFunctionBreakPoint) { HandleScope scope(isolate); ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(JSFunction, fun, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); Handle shared(fun->shared()); CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]); RUNTIME_ASSERT(source_position >= 0); @@ -11923,7 +11920,7 @@ Object* Runtime::FindSharedFunctionInfoInScript(Isolate* isolate, RUNTIME_FUNCTION(MaybeObject*, Runtime_SetScriptBreakPoint) { HandleScope scope(isolate); ASSERT(args.length() == 3); - CONVERT_ARG_CHECKED(JSValue, wrapper, 0); + CONVERT_ARG_HANDLE_CHECKED(JSValue, wrapper, 0); CONVERT_NUMBER_CHECKED(int32_t, source_position, Int32, args[1]); RUNTIME_ASSERT(source_position >= 0); Handle break_point_object_arg = args.at(2); @@ -11973,7 +11970,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ChangeBreakOnException) { HandleScope scope(isolate); ASSERT(args.length() == 2); RUNTIME_ASSERT(args[0]->IsNumber()); - CONVERT_BOOLEAN_CHECKED(enable, args[1]); + CONVERT_BOOLEAN_ARG_CHECKED(enable, 1); // If the number doesn't match an enum value, the ChangeBreakOnException // function will default to affecting caught exceptions. @@ -12188,10 +12185,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugEvaluate) { return maybe_check_result; } } - CONVERT_CHECKED(Smi, wrapped_id, args[1]); + CONVERT_SMI_ARG_CHECKED(wrapped_id, 1); CONVERT_NUMBER_CHECKED(int, inlined_jsframe_index, Int32, args[2]); - CONVERT_ARG_CHECKED(String, source, 3); - CONVERT_BOOLEAN_CHECKED(disable_break, args[4]); + CONVERT_ARG_HANDLE_CHECKED(String, source, 3); + CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 4); Handle additional_context(args[5]); // Handle the processing of break. @@ -12327,8 +12324,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugEvaluateGlobal) { return maybe_check_result; } } - CONVERT_ARG_CHECKED(String, source, 1); - CONVERT_BOOLEAN_CHECKED(disable_break, args[2]); + CONVERT_ARG_HANDLE_CHECKED(String, source, 1); + CONVERT_BOOLEAN_ARG_CHECKED(disable_break, 2); Handle additional_context(args[3]); // Handle the processing of break. @@ -12501,7 +12498,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugReferencedBy) { // Object* locals that are not protected by handles. // Check parameters. - CONVERT_CHECKED(JSObject, target, args[0]); + CONVERT_ARG_CHECKED(JSObject, target, 0); Object* instance_filter = args[1]; RUNTIME_ASSERT(instance_filter->IsUndefined() || instance_filter->IsJSObject()); @@ -12589,7 +12586,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugConstructedBy) { "%DebugConstructedBy"); // Check parameters. - CONVERT_CHECKED(JSFunction, constructor, args[0]); + CONVERT_ARG_CHECKED(JSFunction, constructor, 0); CONVERT_NUMBER_CHECKED(int32_t, max_references, Int32, args[1]); RUNTIME_ASSERT(max_references >= 0); @@ -12633,7 +12630,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugConstructedBy) { RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugGetPrototype) { ASSERT(args.length() == 1); - CONVERT_CHECKED(JSObject, obj, args[0]); + CONVERT_ARG_CHECKED(JSObject, obj, 0); // Use the __proto__ accessor. return Accessors::ObjectPrototype.getter(obj, NULL); @@ -12652,7 +12649,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugDisassembleFunction) { HandleScope scope(isolate); ASSERT(args.length() == 1); // Get the function and make sure it is compiled. - CONVERT_ARG_CHECKED(JSFunction, func, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, func, 0); Handle shared(func->shared()); if (!SharedFunctionInfo::EnsureCompiled(shared, KEEP_EXCEPTION)) { return Failure::Exception(); @@ -12668,7 +12665,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugDisassembleConstructor) { HandleScope scope(isolate); ASSERT(args.length() == 1); // Get the function and make sure it is compiled. - CONVERT_ARG_CHECKED(JSFunction, func, 0); + CONVERT_ARG_HANDLE_CHECKED(JSFunction, func, 0); Handle shared(func->shared()); if (!SharedFunctionInfo::EnsureCompiled(shared, KEEP_EXCEPTION)) { return Failure::Exception(); @@ -12683,7 +12680,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_FunctionGetInferredName) { NoHandleAllocation ha; ASSERT(args.length() == 1); - CONVERT_CHECKED(JSFunction, f, args[0]); + CONVERT_ARG_CHECKED(JSFunction, f, 0); return f->shared()->inferred_name(); } @@ -12720,7 +12717,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_LiveEditFindSharedFunctionInfosForScript) { ASSERT(args.length() == 1); HandleScope scope(isolate); - CONVERT_CHECKED(JSValue, script_value, args[0]); + CONVERT_ARG_CHECKED(JSValue, script_value, 0); Handle