// generated from https://github.com/microsoft/TypeScript/blob/5d0d7ae85d1ff52d3ef4cb6cac653f33f7e76724/src/lib/es2015.iterable.d.ts
// (for license information of original file see https://github.com/microsoft/TypeScript/blob/main/LICENSE.txt)

@@Global @@ProvidedByRuntime

@Polyfill
@EcmaScript
export external public class Symbol extends Symbol {}

export external public interface ~IteratorYieldResult<TYield> {
	done?: false;
	value: TYield;
}

export external public interface ~IteratorReturnResult<TReturn> {
	done: true;
	value: TReturn;
}

export external public type IteratorResult<T,TReturn> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;

@Polyfill
@EcmaScript
export external public class Array<T=any> extends Array<T> {
	public entries(): IterableIterator<[number,T]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<T>;
}

export external public interface ~IArguments {
	[Symbol.iterator](): IterableIterator<any>;
}

@Polyfill
@EcmaScript
export external public class Map<K,V> extends Map<K,V> {
	public [Symbol.iterator](): IterableIterator<[K,V]>;
	public entries(): IterableIterator<[K,V]>;
	public keys(): IterableIterator<K>;
	public values(): IterableIterator<V>;
}

@Polyfill
@EcmaScript
export external public class WeakMap<K extends Object,V> extends WeakMap<K,V> {}

@Polyfill
@EcmaScript
export external public class Set<T> extends Set<T> {
	public [Symbol.iterator](): IterableIterator<T>;
	public entries(): IterableIterator<[T,T]>;
	public keys(): IterableIterator<T>;
	public values(): IterableIterator<T>;
}

@Polyfill
@EcmaScript
export external public class WeakSet<T extends Object> extends WeakSet<T> {}

@Polyfill
@EcmaScript
export external public class String extends String {}

@Polyfill
@EcmaScript
export external public class Int8Array extends Int8Array {
	public [Symbol.iterator](): IterableIterator<number>;
	public entries(): IterableIterator<[number,number]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<number>;
}

@Polyfill
@EcmaScript
export external public class Uint8Array extends Uint8Array {
	public [Symbol.iterator](): IterableIterator<number>;
	public entries(): IterableIterator<[number,number]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<number>;
}

@Polyfill
@EcmaScript
export external public class Uint8ClampedArray extends Uint8ClampedArray {
	public [Symbol.iterator](): IterableIterator<number>;
	public entries(): IterableIterator<[number,number]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<number>;
}

@Polyfill
@EcmaScript
export external public class Int16Array extends Int16Array {
	public [Symbol.iterator](): IterableIterator<number>;
	public entries(): IterableIterator<[number,number]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<number>;
}

@Polyfill
@EcmaScript
export external public class Uint16Array extends Uint16Array {
	public [Symbol.iterator](): IterableIterator<number>;
	public entries(): IterableIterator<[number,number]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<number>;
}

@Polyfill
@EcmaScript
export external public class Int32Array extends Int32Array {
	public [Symbol.iterator](): IterableIterator<number>;
	public entries(): IterableIterator<[number,number]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<number>;
}

@Polyfill
@EcmaScript
export external public class Uint32Array extends Uint32Array {
	public [Symbol.iterator](): IterableIterator<number>;
	public entries(): IterableIterator<[number,number]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<number>;
}

@Polyfill
@EcmaScript
export external public class Float32Array extends Float32Array {
	public [Symbol.iterator](): IterableIterator<number>;
	public entries(): IterableIterator<[number,number]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<number>;
}

@Polyfill
@EcmaScript
export external public class Float64Array extends Float64Array {
	public [Symbol.iterator](): IterableIterator<number>;
	public entries(): IterableIterator<[number,number]>;
	public keys(): IterableIterator<number>;
	public values(): IterableIterator<number>;
}

export external public interface ~IterableIterator<out T> extends Iterator<T>, Iterable<T> {
	@Override
	[Symbol.iterator](): IterableIterator<T>;
}
