mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 13:44:29 +01:00 
			
		
		
		
	* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
		
			
				
	
	
		
			111 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
function assert(b) {
 | 
						|
    if (!b)
 | 
						|
        throw new Error("Bad assertion!");
 | 
						|
}
 | 
						|
 | 
						|
{
 | 
						|
    let p = {};
 | 
						|
    let target = {__proto__: p};
 | 
						|
    let called = false;
 | 
						|
    let handler = {
 | 
						|
        get(target, key, receiver) {
 | 
						|
            called = true;
 | 
						|
            assert(key === "__proto__");
 | 
						|
            return target[key];
 | 
						|
        },
 | 
						|
 | 
						|
        getPrototypeOf() {
 | 
						|
            assert(false);
 | 
						|
        }
 | 
						|
    };
 | 
						|
    
 | 
						|
    let proxy = new Proxy(target, handler);
 | 
						|
    for (let i = 0; i < 500; i++) {
 | 
						|
        assert(proxy.__proto__ === p);
 | 
						|
        assert(called);
 | 
						|
        called = false;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
{
 | 
						|
    let p = {};
 | 
						|
    let target = {__proto__: p};
 | 
						|
    let called1 = false;
 | 
						|
    let called2 = false;
 | 
						|
    let handler = {
 | 
						|
        get(target, key, receiver) {
 | 
						|
            called1 = true;
 | 
						|
            assert(key === "__proto__");
 | 
						|
            return Reflect.get(target, key, receiver);
 | 
						|
        },
 | 
						|
 | 
						|
        getPrototypeOf(...args) {
 | 
						|
            called2 = true;
 | 
						|
            return Reflect.getPrototypeOf(...args);
 | 
						|
        }
 | 
						|
    };
 | 
						|
    
 | 
						|
    let proxy = new Proxy(target, handler);
 | 
						|
    for (let i = 0; i < 500; i++) {
 | 
						|
        assert(proxy.__proto__ === p);
 | 
						|
        assert(called1);
 | 
						|
        assert(called2);
 | 
						|
        called1 = false;
 | 
						|
        called2 = false;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
{
 | 
						|
    let p = {};
 | 
						|
    let target = {__proto__: null};
 | 
						|
    let called = false;
 | 
						|
    let handler = {
 | 
						|
        set(target, key, value, receiver) {
 | 
						|
            called = true;
 | 
						|
            assert(key === "__proto__");
 | 
						|
            return target[key] = value;
 | 
						|
        },
 | 
						|
 | 
						|
        setPrototypeOf() {
 | 
						|
            assert(false);
 | 
						|
        }
 | 
						|
    };
 | 
						|
    
 | 
						|
    let proxy = new Proxy(target, handler);
 | 
						|
    for (let i = 0; i < 500; i++) {
 | 
						|
        proxy.__proto__ = p;
 | 
						|
        assert(proxy.__proto__ === p);
 | 
						|
        assert(target.__proto__ === p);
 | 
						|
        target.__proto__ = null;
 | 
						|
        assert(called);
 | 
						|
        called = false;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
{
 | 
						|
    let p = {};
 | 
						|
    let target = {__proto__: null};
 | 
						|
    let called = false;
 | 
						|
    let handler = {
 | 
						|
        set(target, key, value, receiver) {
 | 
						|
            called = true;
 | 
						|
            assert(key === "__proto__");
 | 
						|
            return Reflect.set(target, key, value, receiver);
 | 
						|
        },
 | 
						|
 | 
						|
        setPrototypeOf() {
 | 
						|
            assert(false);
 | 
						|
        }
 | 
						|
    };
 | 
						|
    
 | 
						|
    let proxy = new Proxy(target, handler);
 | 
						|
    for (let i = 0; i < 500; i++) {
 | 
						|
        proxy.__proto__ = p;
 | 
						|
        assert(proxy.__proto__ === p);
 | 
						|
        assert(target.__proto__ === p);
 | 
						|
        target.__proto__ = null;
 | 
						|
        assert(called);
 | 
						|
        called = false;
 | 
						|
    }
 | 
						|
}
 |