/*
 * Copyright (c) 2017 NumberFour AG.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   NumberFour AG - Initial API and implementation
 */
@@Global @@ProvidedByRuntime

export external public abstract class Reflect__ {
    private constructor();

    public apply(target: Function, thisArgument: Object, argumentsList: any[]): any;
    public construct(target: Function, argumentsList: any[], newTarget: Object=): Object;
    public defineProperty(target: Object, propertyKey: union{symbol, string}, descr: Object): boolean;
    public deleteProperty(target: Object, propertyKey: union{symbol, string}): boolean;
    public get(target: Object, propertyKey: union{symbol, string}, receiver: Object=): any;
    public getOwnPropertyDescriptor(target: Object, propertyKey: union{symbol, string}): Object;
    public getPrototypeOf(target: Object): Object;
    public has(target: Object, propertyKey: union{symbol, string}): boolean;
    public isExtensible(target: Object): boolean;
    public ownKeys(target: Object): union{symbol, string}[];
    public preventExtensions(target: Object): boolean;
    public set(target: Object, propertyKey: union{symbol, string}, value: any, receiver: Object=): boolean;
    public setPrototypeOf(target: Object, prototype): boolean;
}

export external public const Reflect: Reflect__;
