| Index: src/v8natives.js
 | 
| diff --git a/src/v8natives.js b/src/v8natives.js
 | 
| index 7d8b78a6b2f4ee249510421725e05328a8de8159..9c6cc2aeab03fdea6c423e844afdd858a0172179 100644
 | 
| --- a/src/v8natives.js
 | 
| +++ b/src/v8natives.js
 | 
| @@ -218,7 +218,7 @@ function ObjectDefineGetter(name, fun) {
 | 
|    if (IS_NULL(receiver) || IS_UNDEFINED(receiver)) {
 | 
|      receiver = %GlobalProxy(ObjectDefineGetter);
 | 
|    }
 | 
| -  if (!IS_SPEC_FUNCTION(fun)) {
 | 
| +  if (!IS_CALLABLE(fun)) {
 | 
|      throw MakeTypeError(kObjectGetterExpectingFunction);
 | 
|    }
 | 
|    var desc = new PropertyDescriptor();
 | 
| @@ -243,7 +243,7 @@ function ObjectDefineSetter(name, fun) {
 | 
|    if (IS_NULL(receiver) || IS_UNDEFINED(receiver)) {
 | 
|      receiver = %GlobalProxy(ObjectDefineSetter);
 | 
|    }
 | 
| -  if (!IS_SPEC_FUNCTION(fun)) {
 | 
| +  if (!IS_CALLABLE(fun)) {
 | 
|      throw MakeTypeError(kObjectSetterExpectingFunction);
 | 
|    }
 | 
|    var desc = new PropertyDescriptor();
 | 
| @@ -369,7 +369,7 @@ function ToPropertyDescriptor(obj) {
 | 
|  
 | 
|    if ("get" in obj) {
 | 
|      var get = obj.get;
 | 
| -    if (!IS_UNDEFINED(get) && !IS_SPEC_FUNCTION(get)) {
 | 
| +    if (!IS_UNDEFINED(get) && !IS_CALLABLE(get)) {
 | 
|        throw MakeTypeError(kObjectGetterCallable, get);
 | 
|      }
 | 
|      desc.setGet(get);
 | 
| @@ -377,7 +377,7 @@ function ToPropertyDescriptor(obj) {
 | 
|  
 | 
|    if ("set" in obj) {
 | 
|      var set = obj.set;
 | 
| -    if (!IS_UNDEFINED(set) && !IS_SPEC_FUNCTION(set)) {
 | 
| +    if (!IS_UNDEFINED(set) && !IS_CALLABLE(set)) {
 | 
|        throw MakeTypeError(kObjectSetterCallable, set);
 | 
|      }
 | 
|      desc.setSet(set);
 | 
| @@ -537,7 +537,7 @@ function GetTrap(handler, name, defaultTrap) {
 | 
|        throw MakeTypeError(kProxyHandlerTrapMissing, handler, name);
 | 
|      }
 | 
|      trap = defaultTrap;
 | 
| -  } else if (!IS_SPEC_FUNCTION(trap)) {
 | 
| +  } else if (!IS_CALLABLE(trap)) {
 | 
|      throw MakeTypeError(kProxyHandlerTrapMustBeCallable, handler, name);
 | 
|    }
 | 
|    return trap;
 | 
| @@ -606,7 +606,7 @@ function Delete(obj, p, should_throw) {
 | 
|  function GetMethod(obj, p) {
 | 
|    var func = obj[p];
 | 
|    if (IS_NULL_OR_UNDEFINED(func)) return UNDEFINED;
 | 
| -  if (IS_SPEC_FUNCTION(func)) return func;
 | 
| +  if (IS_CALLABLE(func)) return func;
 | 
|    throw MakeTypeError(kCalledNonCallable, typeof func);
 | 
|  }
 | 
|  
 | 
| @@ -1659,7 +1659,7 @@ function FunctionToString() {
 | 
|  
 | 
|  // ES5 15.3.4.5
 | 
|  function FunctionBind(this_arg) { // Length is 1.
 | 
| -  if (!IS_SPEC_FUNCTION(this)) throw MakeTypeError(kFunctionBind);
 | 
| +  if (!IS_CALLABLE(this)) throw MakeTypeError(kFunctionBind);
 | 
|  
 | 
|    var boundFunction = function () {
 | 
|      // Poison .arguments and .caller, but is otherwise not detectable.
 | 
| @@ -1775,7 +1775,7 @@ function GetIterator(obj, method) {
 | 
|    if (IS_UNDEFINED(method)) {
 | 
|      method = obj[symbolIterator];
 | 
|    }
 | 
| -  if (!IS_SPEC_FUNCTION(method)) {
 | 
| +  if (!IS_CALLABLE(method)) {
 | 
|      throw MakeTypeError(kNotIterable, obj);
 | 
|    }
 | 
|    var iterator = %_CallFunction(obj, method);
 | 
| 
 |