// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
info: |
    Assume F is a Function object. When the [[HasInstance]] method of F is called with value V and V is an object, the following steps are taken:
    i) Call the [[Get]] method of F with property name "prototype".
    ii) Let O be Result(i) and O is an object.
    iii) Let V be the value of the [[Prototype]] property of V.
    iv) If V is null, return false.
    v)  If O and V refer to the same object or if they refer to objects joined to each other (13.1.2), return true.
    vi) Go to step iii)
es5id: 15.3.5.3_A3_T2
description: F.prototype is Object.prototype, and V is empty object
---*/

var FAKEFACTORY;
FAKEFACTORY = Function();

var fakeinstance;
fakeinstance = {};

//CHECK#1
if (fakeinstance instanceof FAKEFACTORY) {
  $ERROR('#1: If O and V refer to the same object or if they refer to objects joined to each other (13.1.2), return true');
}

FAKEFACTORY.prototype=Object.prototype;

//CHECK#2
if (!(fakeinstance instanceof FAKEFACTORY)) {
  $ERROR('#2: If O and V refer to the same object or if they refer to objects joined to each other (13.1.2), return true');
}
