From 08b50f7c595edcd2045d25d6903536c075cf3409 Mon Sep 17 00:00:00 2001 From: hns Date: Wed, 30 Jul 2003 17:06:04 +0000 Subject: [PATCH] Use WrappedMap copyOnWrite feature to do lazy copying of parameter map only when it is actually modified by the macro. --- src/helma/framework/core/Skin.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/helma/framework/core/Skin.java b/src/helma/framework/core/Skin.java index b7e3f05b..332cfe74 100644 --- a/src/helma/framework/core/Skin.java +++ b/src/helma/framework/core/Skin.java @@ -22,6 +22,7 @@ import helma.objectmodel.INode; import helma.scripting.*; import helma.util.HtmlEncoder; import helma.util.SystemMap; +import helma.util.WrappedMap; import java.io.*; import java.net.URLEncoder; import java.util.*; @@ -478,14 +479,14 @@ public final class Skin { } // System.err.println ("Getting macro from function"); - // pass a clone of the parameter map so if the script changes it, - // Map param = ; - // if (parameters == null) - // parameters = new HashMap (); - Object[] arguments = { - (parameters == null) ? new SystemMap() - : new SystemMap(parameters) - }; + // pass a clone/copy of the parameter map so if the script changes it, + Object[] arguments = new Object[1]; + if (parameters == null) { + arguments[0] = new SystemMap(0); + } else { + arguments[0] = new WrappedMap(parameters, WrappedMap.COPY_ON_WRITE); + // arguments[0] = new SystemMap(parameters); + } Object value = reval.scriptingEngine.invoke(handlerObject, funcName, arguments,