From ece9cf68dcd964ef9a783ddadc419e98e695a40f Mon Sep 17 00:00:00 2001 From: TopchetoEU <36534413+TopchetoEU@users.noreply.github.com> Date: Tue, 2 Apr 2024 18:14:55 +0300 Subject: [PATCH] fix: correctly update proto chain --- .../utils/interop/NativeWrapperProvider.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/java/me/topchetoeu/jscript/utils/interop/NativeWrapperProvider.java b/src/java/me/topchetoeu/jscript/utils/interop/NativeWrapperProvider.java index 396133b..817b2b2 100644 --- a/src/java/me/topchetoeu/jscript/utils/interop/NativeWrapperProvider.java +++ b/src/java/me/topchetoeu/jscript/utils/interop/NativeWrapperProvider.java @@ -289,15 +289,18 @@ public class NativeWrapperProvider implements WrapperProvider { private void updateProtoChain(Class clazz, ObjectValue proto, FunctionValue constr) { var parent = clazz; - while (true) { - parent = parent.getSuperclass(); - if (parent == null) return; - + while (parent != null) { var parentProto = getProto(parent); var parentConstr = getConstr(parent); - if (parentProto != null) Values.setPrototype(Context.NULL, proto, parentProto); - if (parentConstr != null) Values.setPrototype(Context.NULL, constr, parentConstr); + if (parentProto != null && parentConstr != null) { + Values.setPrototype(Context.NULL, proto, parentProto); + Values.setPrototype(Context.NULL, constr, parentConstr); + + return; + } + + parent = parent.getSuperclass(); } }