From 7eaebf5abd644154a8edcfa9e0982e7fcdcebfdd Mon Sep 17 00:00:00 2001 From: usev6 Date: Sat, 9 Dec 2017 21:55:49 +0100 Subject: [PATCH] [jvm] Fix off-by-one in multi cache --- .../org/perl6/nqp/sixmodel/reprs/MultiCacheInstance.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiCacheInstance.java b/src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiCacheInstance.java index 9fb504fded..46bc606b6a 100644 --- a/src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiCacheInstance.java +++ b/src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiCacheInstance.java @@ -96,9 +96,12 @@ public void add(CallCaptureInstance capture, SixModelObject result, ThreadContex if (numArgs >= MD_CACHE_MAX_ARITY) return; + /* The zero arity case was handled above. + * At index 0 we have the cache for arity 1 */ + ArityCache ac = this.arityCaches[numArgs - 1]; + /* If the cache is saturated, don't do anything (we could instead do a random * replacement). */ - ArityCache ac = this.arityCaches[numArgs]; if (ac != null && ac.numEntries == MD_CACHE_MAX_ENTRIES) return;