|
@@ -2,56 +2,56 @@ using Esprima.Ast;
|
|
|
using Jint.Native;
|
|
|
using Jint.Pooling;
|
|
|
|
|
|
-namespace Jint.Runtime.Interpreter.Expressions
|
|
|
+namespace Jint.Runtime.Interpreter.Expressions;
|
|
|
+
|
|
|
+internal sealed class JintTemplateLiteralExpression : JintExpression
|
|
|
{
|
|
|
- internal sealed class JintTemplateLiteralExpression : JintExpression
|
|
|
+ internal readonly TemplateLiteral _templateLiteralExpression;
|
|
|
+ internal JintExpression[] _expressions = Array.Empty<JintExpression>();
|
|
|
+
|
|
|
+ public JintTemplateLiteralExpression(TemplateLiteral expression) : base(expression)
|
|
|
{
|
|
|
- internal readonly TemplateLiteral _templateLiteralExpression;
|
|
|
- internal JintExpression[] _expressions = Array.Empty<JintExpression>();
|
|
|
+ _templateLiteralExpression = expression;
|
|
|
+ _initialized = false;
|
|
|
+ }
|
|
|
|
|
|
- public JintTemplateLiteralExpression(TemplateLiteral expression) : base(expression)
|
|
|
- {
|
|
|
- _templateLiteralExpression = expression;
|
|
|
- _initialized = false;
|
|
|
- }
|
|
|
+ protected override void Initialize(EvaluationContext context)
|
|
|
+ {
|
|
|
+ DoInitialize();
|
|
|
+ }
|
|
|
|
|
|
- protected override void Initialize(EvaluationContext context)
|
|
|
+ internal void DoInitialize()
|
|
|
+ {
|
|
|
+ ref readonly var expressions = ref _templateLiteralExpression.Expressions;
|
|
|
+ _expressions = new JintExpression[expressions.Count];
|
|
|
+ for (var i = 0; i < expressions.Count; i++)
|
|
|
{
|
|
|
- DoInitialize();
|
|
|
+ _expressions[i] = Build(expressions[i]);
|
|
|
}
|
|
|
|
|
|
- internal void DoInitialize()
|
|
|
- {
|
|
|
- _expressions = new JintExpression[_templateLiteralExpression.Expressions.Count];
|
|
|
- for (var i = 0; i < _templateLiteralExpression.Expressions.Count; i++)
|
|
|
- {
|
|
|
- var exp = _templateLiteralExpression.Expressions[i];
|
|
|
- _expressions[i] = Build(exp);
|
|
|
- }
|
|
|
-
|
|
|
- _initialized = true;
|
|
|
- }
|
|
|
+ _initialized = true;
|
|
|
+ }
|
|
|
|
|
|
- private JsString BuildString(EvaluationContext context)
|
|
|
+ private JsString BuildString(EvaluationContext context)
|
|
|
+ {
|
|
|
+ using var sb = StringBuilderPool.Rent();
|
|
|
+ ref readonly var elements = ref _templateLiteralExpression.Quasis;
|
|
|
+ for (var i = 0; i < elements.Count; i++)
|
|
|
{
|
|
|
- using var sb = StringBuilderPool.Rent();
|
|
|
- for (var i = 0; i < _templateLiteralExpression.Quasis.Count; i++)
|
|
|
+ var quasi = elements[i];
|
|
|
+ sb.Builder.Append(quasi.Value.Cooked);
|
|
|
+ if (i < _expressions.Length)
|
|
|
{
|
|
|
- var quasi = _templateLiteralExpression.Quasis[i];
|
|
|
- sb.Builder.Append(quasi.Value.Cooked);
|
|
|
- if (i < _expressions.Length)
|
|
|
- {
|
|
|
- var completion = _expressions[i].GetValue(context);
|
|
|
- sb.Builder.Append(completion);
|
|
|
- }
|
|
|
+ var value = _expressions[i].GetValue(context);
|
|
|
+ sb.Builder.Append(TypeConverter.ToString(value));
|
|
|
}
|
|
|
-
|
|
|
- return JsString.Create(sb.ToString());
|
|
|
}
|
|
|
|
|
|
- protected override object EvaluateInternal(EvaluationContext context)
|
|
|
- {
|
|
|
- return BuildString(context);
|
|
|
- }
|
|
|
+ return JsString.Create(sb.ToString());
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override object EvaluateInternal(EvaluationContext context)
|
|
|
+ {
|
|
|
+ return BuildString(context);
|
|
|
}
|
|
|
}
|