12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using Esprima.Ast;
- using Jint.Native;
- using Jint.Pooling;
- namespace Jint.Runtime.Interpreter.Expressions
- {
- internal sealed class JintTemplateLiteralExpression : JintExpression
- {
- internal readonly TemplateLiteral _templateLiteralExpression;
- internal JintExpression[] _expressions;
- public JintTemplateLiteralExpression(Engine engine, TemplateLiteral expression) : base(engine, expression)
- {
- _templateLiteralExpression = expression;
- _initialized = false;
- }
- protected override void Initialize()
- {
- DoInitialize();
- }
- 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(_engine, exp);
- }
- _initialized = true;
- }
- private JsString BuildString()
- {
- using (var sb = StringBuilderPool.Rent())
- {
- for (var i = 0; i < _templateLiteralExpression.Quasis.Count; i++)
- {
- var quasi = _templateLiteralExpression.Quasis[i];
- sb.Builder.Append(quasi.Value.Cooked);
- if (i < _expressions.Length)
- {
- sb.Builder.Append(_expressions[i].GetValue());
- }
- }
- return JsString.Create(sb.ToString());
- }
- }
- protected override object EvaluateInternal()
- {
- return BuildString();
- }
- }
- }
|