aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2011-06-17 10:39:29 -0700
committerShawn O. Pearce <sop@google.com>2011-06-17 12:40:28 -0700
commit82df66f59d071d963c2e15a1c3a0798ca43cfce2 (patch)
tree8c79865e5642380bb35acbc46c44a1c0ded570a2
parentee2b172e401c7ae0a07f50f0b1ede441a218a550 (diff)
downloadprolog-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.java11
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();