diff --git a/src/helpers.ts b/src/helpers.ts index be157ed7..a185e4b6 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -1,4 +1,4 @@ -import { BOOLEAN_MODULE, CLOSURE_EVALUATE_METHOD, CLOSURE_TO_STRING_METHOD, INITIALIZE_METHOD, KEYWORDS, NUMBER_MODULE, OBJECT_MODULE, STRING_MODULE, VOID_WKO, WOLLOK_BASE_PACKAGE } from './constants' +import { BOOLEAN_MODULE, CLOSURE_EVALUATE_METHOD, CLOSURE_MODULE, CLOSURE_TO_STRING_METHOD, INITIALIZE_METHOD, KEYWORDS, NUMBER_MODULE, OBJECT_MODULE, STRING_MODULE, VOID_WKO, WOLLOK_BASE_PACKAGE } from './constants' import { getPotentiallyUninitializedLazy } from './decorators' import { count, is, isEmpty, last, List, match, notEmpty, otherwise, valueAsListOrEmpty, when, excludeNullish } from './extensions' import { RuntimeObject, RuntimeValue } from './interpreter/runtimeModel' @@ -217,7 +217,7 @@ export const usesField = (node: Node, field: Field): boolean => match(node)( when(Singleton)(node => { if (!node.isClosure()) return false - const applyMethod = node.methods.find(method => method.name === CLOSURE_EVALUATE_METHOD) + const applyMethod = node.methods.find(isApplyMethodForClosures) return !!applyMethod && usesField(applyMethod, field) }), when(Variable)(node => usesField(node.value, field)), @@ -441,8 +441,14 @@ export const getNodeDefinition = (environment: Environment) => (node: Node): Nod } } +export const isApplyMethodForClosures = (method: Method): boolean => + method.name === CLOSURE_EVALUATE_METHOD && method.parent.fullyQualifiedName.startsWith(`${CLOSURE_MODULE}#`) // TODO: Maybe re-define isClosure() ? + export const superMethodDefinition = (superNode: Super, methodModule: Module): Method | undefined => { - const currentMethod = superNode.ancestors.find(is(Method))! + function isValidMethod(node: Node): node is Method { + return node.is(Method) && !isApplyMethodForClosures(node) + } + const currentMethod = superNode.ancestors.find(isValidMethod)! return methodModule.lookupMethod(currentMethod.name, superNode.args.length, { lookupStartFQN: currentMethod.parent.fullyQualifiedName }) } diff --git a/test/interpreter.test.ts b/test/interpreter.test.ts index a9d9b7e2..bbe0dd40 100644 --- a/test/interpreter.test.ts +++ b/test/interpreter.test.ts @@ -669,7 +669,6 @@ describe('Wollok Interpreter', () => { expect(errored).to.be.false }) - }) describe('DirectedInterpreter', () => {