| Index: test/cctest/test-api.cc | 
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc | 
| index fba07af8659806631fcf72a5ec218058fb0554b3..15cb651909b925663ede878e940e73775e298816 100644 | 
| --- a/test/cctest/test-api.cc | 
| +++ b/test/cctest/test-api.cc | 
| @@ -11654,6 +11654,54 @@ THREADED_TEST(CallableObject) { | 
| } | 
|  | 
|  | 
| +THREADED_TEST(Regress567998) { | 
| +  LocalContext env; | 
| +  v8::HandleScope scope(env->GetIsolate()); | 
| + | 
| +  Local<v8::FunctionTemplate> desc = | 
| +      v8::FunctionTemplate::New(env->GetIsolate()); | 
| +  desc->InstanceTemplate()->MarkAsUndetectable();  // undetectable | 
| +  desc->InstanceTemplate()->SetCallAsFunctionHandler(ReturnThis);  // callable | 
| + | 
| +  Local<v8::Object> obj = desc->GetFunction(env.local()) | 
| +                              .ToLocalChecked() | 
| +                              ->NewInstance(env.local()) | 
| +                              .ToLocalChecked(); | 
| +  CHECK( | 
| +      env->Global()->Set(env.local(), v8_str("undetectable"), obj).FromJust()); | 
| + | 
| +  ExpectString("undetectable.toString()", "[object Object]"); | 
| +  ExpectString("typeof undetectable", "undefined"); | 
| +  ExpectString("typeof(undetectable)", "undefined"); | 
| +  ExpectBoolean("typeof undetectable == 'undefined'", true); | 
| +  ExpectBoolean("typeof undetectable == 'object'", false); | 
| +  ExpectBoolean("if (undetectable) { true; } else { false; }", false); | 
| +  ExpectBoolean("!undetectable", true); | 
| + | 
| +  ExpectObject("true&&undetectable", obj); | 
| +  ExpectBoolean("false&&undetectable", false); | 
| +  ExpectBoolean("true||undetectable", true); | 
| +  ExpectObject("false||undetectable", obj); | 
| + | 
| +  ExpectObject("undetectable&&true", obj); | 
| +  ExpectObject("undetectable&&false", obj); | 
| +  ExpectBoolean("undetectable||true", true); | 
| +  ExpectBoolean("undetectable||false", false); | 
| + | 
| +  ExpectBoolean("undetectable==null", true); | 
| +  ExpectBoolean("null==undetectable", true); | 
| +  ExpectBoolean("undetectable==undefined", true); | 
| +  ExpectBoolean("undefined==undetectable", true); | 
| +  ExpectBoolean("undetectable==undetectable", true); | 
| + | 
| +  ExpectBoolean("undetectable===null", false); | 
| +  ExpectBoolean("null===undetectable", false); | 
| +  ExpectBoolean("undetectable===undefined", false); | 
| +  ExpectBoolean("undefined===undetectable", false); | 
| +  ExpectBoolean("undetectable===undetectable", true); | 
| +} | 
| + | 
| + | 
| static int Recurse(v8::Isolate* isolate, int depth, int iterations) { | 
| v8::HandleScope scope(isolate); | 
| if (depth == 0) return v8::HandleScope::NumberOfHandles(isolate); | 
|  |