|
@@ -12,6 +12,9 @@ namespace Jint.Runtime.Interpreter.Expressions
|
|
|
private readonly bool _isDebugMode;
|
|
|
private readonly int _maxRecursionDepth;
|
|
|
|
|
|
+ private CachedArgumentsHolder _cachedArguments;
|
|
|
+ private bool _cached;
|
|
|
+
|
|
|
private readonly JintExpression _calleeExpression;
|
|
|
private bool _hasSpreads;
|
|
|
|
|
@@ -55,7 +58,7 @@ namespace Jint.Runtime.Interpreter.Expressions
|
|
|
|
|
|
if (cacheable)
|
|
|
{
|
|
|
- expression.Cached = true;
|
|
|
+ _cached = true;
|
|
|
var arguments = ArrayExt.Empty<JsValue>();
|
|
|
if (cachedArgumentsHolder.JintArguments.Length > 0)
|
|
|
{
|
|
@@ -66,7 +69,7 @@ namespace Jint.Runtime.Interpreter.Expressions
|
|
|
cachedArgumentsHolder.CachedArguments = arguments;
|
|
|
}
|
|
|
|
|
|
- expression.CachedArguments = cachedArgumentsHolder;
|
|
|
+ _cachedArguments = cachedArgumentsHolder;
|
|
|
}
|
|
|
|
|
|
protected override object EvaluateInternal()
|
|
@@ -81,9 +84,9 @@ namespace Jint.Runtime.Interpreter.Expressions
|
|
|
|
|
|
// todo: implement as in http://www.ecma-international.org/ecma-262/5.1/#sec-11.2.4
|
|
|
|
|
|
- var cachedArguments = (CachedArgumentsHolder) expression.CachedArguments;
|
|
|
+ var cachedArguments = _cachedArguments;
|
|
|
var arguments = ArrayExt.Empty<JsValue>();
|
|
|
- if (expression.Cached)
|
|
|
+ if (_cached)
|
|
|
{
|
|
|
arguments = cachedArguments.CachedArguments;
|
|
|
}
|
|
@@ -174,7 +177,7 @@ namespace Jint.Runtime.Interpreter.Expressions
|
|
|
_engine.CallStack.Pop();
|
|
|
}
|
|
|
|
|
|
- if (!expression.Cached && arguments.Length > 0)
|
|
|
+ if (!_cached && arguments.Length > 0)
|
|
|
{
|
|
|
_engine._jsValueArrayPool.ReturnArray(arguments);
|
|
|
}
|
|
@@ -183,7 +186,7 @@ namespace Jint.Runtime.Interpreter.Expressions
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- internal class CachedArgumentsHolder
|
|
|
+ private class CachedArgumentsHolder
|
|
|
{
|
|
|
internal JintExpression[] JintArguments;
|
|
|
internal JsValue[] CachedArguments;
|