fix: clean up extensions at some points

This commit is contained in:
TopchetoEU 2024-04-03 14:52:29 +03:00
parent 71872a8d64
commit a8775d212f
Signed by: topchetoeu
GPG Key ID: 6531B8583E5F6ED4
2 changed files with 3 additions and 20 deletions

View File

@ -14,43 +14,26 @@ public class Context implements Extensions {
public final Context parent; public final Context parent;
public final Extensions extensions; public final Extensions extensions;
public final Frame frame; public final Frame frame;
// public final Engine engine;
public final int stackSize; public final int stackSize;
@Override public <T> void add(Key<T> key, T obj) { @Override public <T> void add(Key<T> key, T obj) {
if (extensions != null) extensions.add(key, obj); if (extensions != null) extensions.add(key, obj);
// else if (engine != null) engine.add(key, obj);
} }
@Override public <T> T get(Key<T> key) { @Override public <T> T get(Key<T> key) {
if (extensions != null && extensions.has(key)) return extensions.get(key); if (extensions != null && extensions.has(key)) return extensions.get(key);
// else if (engine != null && engine.has(key)) return engine.get(key);
return null; return null;
} }
@Override public boolean has(Key<?> key) { @Override public boolean has(Key<?> key) {
return return extensions != null && extensions.has(key);
extensions != null && extensions.has(key);
// engine != null && engine.has(key);
} }
@Override public boolean remove(Key<?> key) { @Override public boolean remove(Key<?> key) {
var res = false; var res = false;
if (extensions != null) res |= extensions.remove(key); if (extensions != null) res |= extensions.remove(key);
// else if (engine != null) res |= engine.remove(key);
return res; return res;
} }
@Override public Iterable<Key<?>> keys() { @Override public Iterable<Key<?>> keys() {
if (extensions == null) return List.of(); if (extensions == null) return List.of();
else return extensions.keys(); else return extensions.keys();
// if (engine == null && environment == null) return List.of();
// if (engine == null) return environment.keys();
// if (environment == null) return engine.keys();
// return () -> Stream.concat(
// StreamSupport.stream(engine.keys().spliterator(), false),
// StreamSupport.stream(environment.keys().spliterator(), false)
// ).distinct().iterator();
} }
public FunctionValue compile(Filename filename, String raw) { public FunctionValue compile(Filename filename, String raw) {
@ -101,7 +84,7 @@ public class Context implements Extensions {
this(null, null, null, 0); this(null, null, null, 0);
} }
public Context(Extensions ext) { public Context(Extensions ext) {
this(null, ext, null, 0); this(null, clean(ext), null, 0);
} }
public static Context of(Extensions ext) { public static Context of(Extensions ext) {

View File

@ -44,7 +44,7 @@ public class CodeFunction extends FunctionValue {
public CodeFunction(Extensions extensions, String name, FunctionBody body, ValueVariable[] captures) { public CodeFunction(Extensions extensions, String name, FunctionBody body, ValueVariable[] captures) {
super(name, body.argsN); super(name, body.argsN);
this.captures = captures; this.captures = captures;
this.extensions = extensions; this.extensions = Context.clean(extensions);
this.body = body; this.body = body;
} }
} }