public JsValue EvaluateLiteral(Literal literal) { if (literal.Type == SyntaxNodes.RegularExpressionLiteral) { return _engine.RegExp.Construct(literal.Raw); } return JsValue.FromObject(_engine, literal.Value); }
/// <summary> /// http://www.ecma-international.org/ecma-262/5.1/#sec-11.2.1 /// </summary> /// <param name="memberExpression"></param> /// <returns></returns> public Reference EvaluateMemberExpression(MemberExpression memberExpression) { var baseReference = EvaluateExpression(memberExpression.Object); var baseValue = _engine.GetValue(baseReference); Expression expression = memberExpression.Property; if (!memberExpression.Computed) // index accessor ? { expression = new Literal { Type = SyntaxNodes.Literal, Value = memberExpression.Property.As<Identifier>().Name }; } var propertyNameReference = EvaluateExpression(expression); var propertyNameValue = _engine.GetValue(propertyNameReference); TypeConverter.CheckObjectCoercible(_engine, baseValue); var propertyNameString = TypeConverter.ToString(propertyNameValue); return new Reference(baseValue, propertyNameString, StrictModeScope.IsStrictModeCode); }
public JsValue EvaluateLiteral(Literal literal) { if(literal.Cached) { return literal.CachedValue; } if (literal.Type == SyntaxNodes.RegularExpressionLiteral) { literal.CachedValue = _engine.RegExp.Construct(literal.Raw); } else { literal.CachedValue = JsValue.FromObject(_engine, literal.Value); } literal.Cached = true; return literal.CachedValue; }