summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/Compiler.java11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 8ce076d4..2b382989 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -2816,8 +2816,15 @@ static class InvokeExpr implements Expr{
if(this.protocolOn != null)
{
IPersistentMap mmap = (IPersistentMap) RT.get(pvar.get(), methodMapKey);
- String mname = munge(((Keyword) mmap.valAt(Keyword.intern(fvar.sym))).sym.toString());
- List methods = Reflector.getMethods(protocolOn, args.count() - 1, mname, false);
+ Keyword mmapVal = (Keyword) mmap.valAt(Keyword.intern(fvar.sym));
+ if (mmapVal == null) {
+ throw new IllegalArgumentException(
+ "No method of interface: " + protocolOn.getName() +
+ " found for function: " + fvar.sym + " of protocol: " + pvar.sym +
+ " (The protocol method may have been defined before and removed.)");
+ }
+ String mname = munge(mmapVal.sym.toString());
+ List methods = Reflector.getMethods(protocolOn, args.count() - 1, mname, false);
if(methods.size() != 1)
throw new IllegalArgumentException(
"No single method: " + mname + " of interface: " + protocolOn.getName() +