ES6 Object and assignment destructors + object stuff #28
@ -195,6 +195,19 @@ public class SimpleRepl {
|
|||||||
args.get(0).setPrototype(env, proto);
|
args.get(0).setPrototype(env, proto);
|
||||||
return args.get(0);
|
return args.get(0);
|
||||||
}));
|
}));
|
||||||
|
res.defineOwnMember(env, "getOwnMembers", new NativeFunction(args -> {
|
||||||
|
var val = new ArrayValue();
|
||||||
|
|
||||||
|
for (var key : args.get(0).getOwnMembers(env, args.get(1).toBoolean())) {
|
||||||
|
val.set(val.size(), new StringValue(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}));
|
||||||
|
res.defineOwnMember(env, "getOwnSymbolMembers", new NativeFunction(args -> {
|
||||||
|
return ArrayValue.of(args.get(0).getOwnSymbolMembers(env, args.get(1).toBoolean()));
|
||||||
|
}));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,9 +307,18 @@ public class SimpleRepl {
|
|||||||
|
|
||||||
return Value.UNDEFINED;
|
return Value.UNDEFINED;
|
||||||
}));
|
}));
|
||||||
|
res.defineOwnMember(env, "setIntrinsic", new NativeFunction(args -> {
|
||||||
|
var name = args.get(0).toString(env).value;
|
||||||
|
var val = args.get(1);
|
||||||
|
|
||||||
|
Value.intrinsics(environment).put(name, val);
|
||||||
|
|
||||||
|
return Value.UNDEFINED;
|
||||||
|
}));
|
||||||
res.defineOwnMember(env, "compile", new NativeFunction(args -> {
|
res.defineOwnMember(env, "compile", new NativeFunction(args -> {
|
||||||
return Compiler.compileFunc(env, new Filename("jscript", "func" + i[0]++ + ".js"), args.get(0).toString(env).value);
|
return Compiler.compileFunc(env, new Filename("jscript", "func" + i[0]++ + ".js"), args.get(0).toString(env).value);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,10 +30,11 @@ const setConstructable = primordials.function.setConstructable;
|
|||||||
const setCallable = primordials.function.setCallable;
|
const setCallable = primordials.function.setCallable;
|
||||||
const invoke = primordials.function.invoke;
|
const invoke = primordials.function.invoke;
|
||||||
|
|
||||||
|
const json = primordials.json;
|
||||||
|
|
||||||
const setGlobalPrototype = primordials.setGlobalPrototype;
|
const setGlobalPrototype = primordials.setGlobalPrototype;
|
||||||
const compile = primordials.compile;
|
const compile = primordials.compile;
|
||||||
|
const setIntrinsic = primordials.setIntrinsic;
|
||||||
const json = primordials.json;
|
|
||||||
|
|
||||||
const valueKey = makeSymbol("Primitive.value");
|
const valueKey = makeSymbol("Primitive.value");
|
||||||
const undefined = ({}).definitelyDefined;
|
const undefined = ({}).definitelyDefined;
|
||||||
@ -304,6 +305,26 @@ defineField(Function.prototype, "valueOf", true, false, true, function() {
|
|||||||
|
|
||||||
target.Function = Function;
|
target.Function = Function;
|
||||||
|
|
||||||
|
let spread_obj;
|
||||||
|
|
||||||
|
setIntrinsic("spread_obj", spread_obj = (target, obj) => {
|
||||||
|
if (obj === null || obj === undefined) return;
|
||||||
|
const members = getOwnMembers(obj, true);
|
||||||
|
const symbols = getOwnSymbolMembers(obj, true);
|
||||||
|
|
||||||
|
for (let i = 0; i < members.length; i++) {
|
||||||
|
const member = members[i];
|
||||||
|
target[member] = obj[member];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < symbols.length; i++) {
|
||||||
|
const member = symbols[i];
|
||||||
|
target[member] = obj[member];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
target.spread_obj = spread_obj;
|
||||||
|
|
||||||
setGlobalPrototype("string", String.prototype);
|
setGlobalPrototype("string", String.prototype);
|
||||||
setGlobalPrototype("number", Number.prototype);
|
setGlobalPrototype("number", Number.prototype);
|
||||||
setGlobalPrototype("boolean", Boolean.prototype);
|
setGlobalPrototype("boolean", Boolean.prototype);
|
||||||
|
Loading…
Reference in New Issue
Block a user