ES6 Object and assignment destructors + object stuff #28

Merged
TopchetoEU merged 15 commits from TopchetoEU/destructing into master 2024-09-14 12:38:02 +00:00
2 changed files with 45 additions and 2 deletions
Showing only changes of commit 63ccd5757e - Show all commits

View File

@ -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;
} }

View File

@ -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);