Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Jint.Benchmark/Scripts/dromaeo-object-string-modern.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

// Try to force real results
let ret;
const num = 80000;
const num = 5000;

// TESTS: String concatenation

Expand Down
2 changes: 1 addition & 1 deletion Jint.Benchmark/Scripts/dromaeo-object-string.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

// Try to force real results
var ret;
var num = 80000;
var num = 5000;

// TESTS: String concatenation

Expand Down
7 changes: 5 additions & 2 deletions Jint/Engine.Ast.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,7 @@ public void NodeVisitor(Node node, OnNodeContext _)
case NodeType.ArrowFunctionExpression:
case NodeType.FunctionDeclaration:
case NodeType.FunctionExpression:
var function = (IFunction) node;
node.UserData = JintFunctionDefinition.BuildState(function);
node.UserData = JintFunctionDefinition.BuildState((IFunction) node);
break;

case NodeType.Program:
Expand Down Expand Up @@ -151,6 +150,10 @@ public void NodeVisitor(Node node, OnNodeContext _)
}
}
break;

case NodeType.BlockStatement:
node.UserData = JintBlockStatement.BuildState((BlockStatement) node);
break;
}
}
}
Expand Down
11 changes: 8 additions & 3 deletions Jint/Engine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1149,11 +1149,14 @@ private void GlobalDeclarationInstantiation(

UpdateLexicalEnvironment(lexEnv);

if (configuration.LexicalDeclarations?.Declarations.Count > 0)
var declarations = configuration.LexicalDeclarations;
if (declarations?.Declarations.Count > 0)
{
var lexicalDeclarations = configuration.LexicalDeclarations.Value.Declarations;
var dictionary = lexEnv._dictionary ??= new HybridDictionary<Binding>(lexicalDeclarations.Count, checkExistingKeys: true);
var lexicalDeclarations = declarations.Value.Declarations;
var checkExistingKeys = (lexEnv._dictionary is not null && lexEnv._dictionary.Count > 0) || !declarations.Value.AllLexicalScoped;
var dictionary = lexEnv._dictionary ??= new HybridDictionary<Binding>(lexicalDeclarations.Count, checkExistingKeys);
dictionary.EnsureCapacity(dictionary.Count + lexicalDeclarations.Count);

for (var i = 0; i < lexicalDeclarations.Count; i++)
{
var declaration = lexicalDeclarations[i];
Expand All @@ -1169,6 +1172,8 @@ private void GlobalDeclarationInstantiation(
}
}
}

dictionary.CheckExistingKeys = true;
}

if (configuration.FunctionsToInitialize != null)
Expand Down
7 changes: 6 additions & 1 deletion Jint/Runtime/Interpreter/Statements/JintBlockStatement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public JintBlockStatement(NestedBlockStatement blockStatement) : base(blockState

protected override void Initialize(EvaluationContext context)
{
_lexicalDeclarations = DeclarationCacheBuilder.Build(_statement);
_lexicalDeclarations = (DeclarationCache) (_statement.UserData ??= BuildState(_statement));

if (_statement.Body.Count == 1)
{
Expand All @@ -27,6 +27,11 @@ protected override void Initialize(EvaluationContext context)
}
}

internal static DeclarationCache BuildState(BlockStatement blockStatement)
{
return DeclarationCacheBuilder.Build(blockStatement);
}

/// <summary>
/// Optimized for direct access without virtual dispatch.
/// </summary>
Expand Down