move more instructions as intrinsics
This commit is contained in:
@@ -88,4 +88,19 @@ setGlobalPrototypes({
|
||||
uint8: Uint8Array.prototype,
|
||||
int32: Int32Array.prototype,
|
||||
});
|
||||
setIntrinsic("regex", RegExp);
|
||||
setIntrinsic("regex", RegExp);
|
||||
setIntrinsic("keys", (obj: object, own: boolean, onlyEnumerable: boolean) => {
|
||||
const members = object.getMembers(obj, own, onlyEnumerable);
|
||||
|
||||
let i = 0;
|
||||
return () => {
|
||||
if (i >= members.length) return { done: true };
|
||||
else return { value: members[i++] };
|
||||
};
|
||||
});
|
||||
setIntrinsic("defGetter", (obj: object, key: any, func: Function) => {
|
||||
object.defineProperty(obj, key, { g: func, e: true, c: true });
|
||||
});
|
||||
setIntrinsic("defSetter", (obj: object, key: any, func: Function) => {
|
||||
object.defineProperty(obj, key, { s: func, e: true, c: true });
|
||||
});
|
||||
@@ -39,8 +39,8 @@ export interface ObjectPrimordials {
|
||||
defineProperty(obj: object, key: string | number | symbol, conf: { g?: Function, s?: Function, e?: boolean, c?: boolean }): boolean;
|
||||
defineField(obj: object, key: string | number | symbol, conf: { v?: any, e?: boolean, c?: boolean, w?: boolean }): boolean;
|
||||
getOwnMember(obj: object, key: any): PropertyDescriptor | undefined;
|
||||
getOwnMembers(obj: object, onlyEnumerable: boolean): string[];
|
||||
getOwnSymbolMembers(obj: object, onlyEnumerable: boolean): symbol[];
|
||||
getMembers(obj: object, own: boolean, onlyEnumerable: boolean): string[];
|
||||
getSymbolMembers(obj: object, own: boolean, onlyEnumerable: boolean): symbol[];
|
||||
getPrototype(obj: object): object | undefined;
|
||||
setPrototype(obj: object, proto?: object): object;
|
||||
preventExt(obj: object): void;
|
||||
|
||||
@@ -55,10 +55,10 @@ export const Object = (() => {
|
||||
return object.getOwnMember(obj, key);
|
||||
}
|
||||
public static getOwnPropertyNames(obj: object): string[] {
|
||||
return object.getOwnMembers(obj, false);
|
||||
return object.getMembers(obj, true, false);
|
||||
}
|
||||
public static getOwnPropertySymbols(obj: object): symbol[] {
|
||||
return object.getOwnSymbolMembers(obj, false);
|
||||
return object.getSymbolMembers(obj, true, false);
|
||||
}
|
||||
|
||||
public static defineProperty(obj: object, key: string | symbol, desc: PropertyDescriptor) {
|
||||
@@ -98,8 +98,8 @@ export const Object = (() => {
|
||||
return obj;
|
||||
}
|
||||
public static defineProperties(obj: object, desc: PropertyDescriptorMap) {
|
||||
const keys = object.getOwnMembers(desc, true) as ((keyof typeof obj) & string)[];
|
||||
const symbols = object.getOwnSymbolMembers(desc, true) as ((keyof typeof obj) & symbol)[];
|
||||
const keys = object.getMembers(desc, true, true) as ((keyof typeof obj) & string)[];
|
||||
const symbols = object.getSymbolMembers(desc, true, true) as ((keyof typeof obj) & symbol)[];
|
||||
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
Object.defineProperty(obj, keys[i], desc[keys[i]]);
|
||||
@@ -119,8 +119,8 @@ export const Object = (() => {
|
||||
public static assign(target: any) {
|
||||
for (let i = 1; i < arguments.length; i++) {
|
||||
const obj = arguments[i];
|
||||
const keys = object.getOwnMembers(obj, false);
|
||||
const symbols = object.getOwnSymbolMembers(obj, false);
|
||||
const keys = object.getMembers(obj, true, false);
|
||||
const symbols = object.getSymbolMembers(obj, true, false);
|
||||
|
||||
for (let j = 0; j < keys.length; j++) {
|
||||
target[keys[j]] = obj[keys[j]];
|
||||
@@ -142,8 +142,8 @@ export const Object = (() => {
|
||||
|
||||
public static keys(obj: any) {
|
||||
const res: any[] = [];
|
||||
const keys = object.getOwnMembers(obj, true);
|
||||
const symbols = object.getOwnSymbolMembers(obj, true);
|
||||
const keys = object.getMembers(obj, true, true);
|
||||
const symbols = object.getSymbolMembers(obj, true, true);
|
||||
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
res[res.length] = keys[i];
|
||||
@@ -156,8 +156,8 @@ export const Object = (() => {
|
||||
}
|
||||
public static values(obj: any) {
|
||||
const res: any[] = [];
|
||||
const keys = object.getOwnMembers(obj, true);
|
||||
const symbols = object.getOwnSymbolMembers(obj, true);
|
||||
const keys = object.getMembers(obj, true, true);
|
||||
const symbols = object.getSymbolMembers(obj, true, true);
|
||||
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
res[res.length] = obj[keys[i]];
|
||||
@@ -170,8 +170,8 @@ export const Object = (() => {
|
||||
}
|
||||
public static entries(obj: any) {
|
||||
const res: [any, any][] = [];
|
||||
const keys = object.getOwnMembers(obj, true);
|
||||
const symbols = object.getOwnSymbolMembers(obj, true);
|
||||
const keys = object.getMembers(obj, true, true);
|
||||
const symbols = object.getSymbolMembers(obj, true, true);
|
||||
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
res[res.length] = [keys[i], obj[keys[i]]];
|
||||
|
||||
Reference in New Issue
Block a user