Skip to content

Commit

Permalink
Revert "don't use Esprima's AST to cache call expression data (sebast…
Browse files Browse the repository at this point in the history
…ienros#668)"

This reverts commit 97828eb.
  • Loading branch information
ruixiao-yu committed Feb 19, 2020
1 parent 8c3815a commit a6a4d9e
Showing 1 changed file with 6 additions and 9 deletions.
15 changes: 6 additions & 9 deletions Jint/Runtime/Interpreter/Expressions/JintCallExpression.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ internal sealed class JintCallExpression : JintExpression
private readonly bool _isDebugMode;
private readonly int _maxRecursionDepth;

private CachedArgumentsHolder _cachedArguments;
private bool _cached;

private readonly JintExpression _calleeExpression;
private bool _hasSpreads;

Expand Down Expand Up @@ -58,7 +55,7 @@ bool CanSpread(INode e)

if (cacheable)
{
_cached = true;
expression.Cached = true;
var arguments = ArrayExt.Empty<JsValue>();
if (cachedArgumentsHolder.JintArguments.Length > 0)
{
Expand All @@ -69,7 +66,7 @@ bool CanSpread(INode e)
cachedArgumentsHolder.CachedArguments = arguments;
}

_cachedArguments = cachedArgumentsHolder;
expression.CachedArguments = cachedArgumentsHolder;
}

protected override object EvaluateInternal()
Expand All @@ -84,9 +81,9 @@ protected override object EvaluateInternal()

// todo: implement as in http://www.ecma-international.org/ecma-262/5.1/#sec-11.2.4

var cachedArguments = _cachedArguments;
var cachedArguments = (CachedArgumentsHolder) expression.CachedArguments;
var arguments = ArrayExt.Empty<JsValue>();
if (_cached)
if (expression.Cached)
{
arguments = cachedArguments.CachedArguments;
}
Expand Down Expand Up @@ -177,7 +174,7 @@ protected override object EvaluateInternal()
_engine.CallStack.Pop();
}

if (!_cached && arguments.Length > 0)
if (!expression.Cached && arguments.Length > 0)
{
_engine._jsValueArrayPool.ReturnArray(arguments);
}
Expand All @@ -186,7 +183,7 @@ protected override object EvaluateInternal()
return result;
}

private class CachedArgumentsHolder
internal class CachedArgumentsHolder
{
internal JintExpression[] JintArguments;
internal JsValue[] CachedArguments;
Expand Down

0 comments on commit a6a4d9e

Please sign in to comment.