diff options
author | Shawn O. Pearce <sop@google.com> | 2011-06-17 10:39:29 -0700 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2011-06-17 12:40:28 -0700 |
commit | 82df66f59d071d963c2e15a1c3a0798ca43cfce2 (patch) | |
tree | 8c79865e5642380bb35acbc46c44a1c0ded570a2 | |
parent | ee2b172e401c7ae0a07f50f0b1ede441a218a550 (diff) | |
download | prolog-cafe-82df66f59d071d963c2e15a1c3a0798ca43cfce2.tar.gz |
Avoid allocating an empty register array
If the PrologControl has configured the maximum predicate arity
to <= 8, the standard areg1..areg8 will handle these and there
is no need for an overflow array. Use a constant empty array.
-rw-r--r-- | src/lang/Prolog.java | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/lang/Prolog.java b/src/lang/Prolog.java index 12876f1..cccb2f8 100644 --- a/src/lang/Prolog.java +++ b/src/lang/Prolog.java @@ -24,9 +24,12 @@ public final class Prolog { /** Prolog thread */ public PrologControl control; + /** Argument registers */ public Term areg1, areg2, areg3, areg4, areg5, areg6, areg7, areg8; public Term[] aregs; + private static final Term[] NO_REGISTERS = {}; + /** Continuation goal register */ public Operation cont; /** Choice point frame stack */ @@ -163,8 +166,12 @@ public final class Prolog { * <li><code>streamManager</code> * </ul> */ - protected void initOnce() { - aregs = new Term[Math.max(0, maxArity - 8)]; + private void initOnce() { + if (8 < maxArity) + aregs = new Term[maxArity - 8]; + else + aregs = NO_REGISTERS; + if (pcl == null) pcl = new PrologClassLoader(); if (internalDB == null) internalDB = new InternalDatabase(); |