Last active
December 6, 2018 20:47
-
-
Save lahma/012cf97ca0677294242e547c26a89bc3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| internal class JintLiteralExpression : JintExpression | |
| { | |
| internal readonly JsValue _cachedValue; | |
| public JintLiteralExpression(Engine engine, Literal expression) : base(engine, expression) | |
| { | |
| _cachedValue = ConvertToJsValue(expression); | |
| } | |
| internal static JsValue ConvertToJsValue(Literal literal) | |
| { | |
| if (literal.TokenType == TokenType.BooleanLiteral) | |
| { | |
| return literal.NumericValue > 0.0 ? JsBoolean.True : JsBoolean.False; | |
| } | |
| if (literal.TokenType == TokenType.NullLiteral) | |
| { | |
| return JsValue.Null; | |
| } | |
| if (literal.TokenType == TokenType.NumericLiteral) | |
| { | |
| return JsNumber.Create(literal.NumericValue); | |
| } | |
| if (literal.TokenType == TokenType.StringLiteral) | |
| { | |
| return JsString.Create((string) literal.Value); | |
| } | |
| return null; | |
| } | |
| public override JsValue GetValue() | |
| { | |
| // need to notify correct node when taking shortcut | |
| _engine._lastSyntaxNode = _expression; | |
| return _cachedValue ?? ResolveValue(); | |
| } | |
| protected override object EvaluateInternal() | |
| { | |
| return GetValue(); | |
| } | |
| private JsValue ResolveValue() | |
| { | |
| var expression = (Literal) _expression; | |
| if (expression.TokenType == TokenType.RegularExpression) | |
| { | |
| return _engine.RegExp.Construct((System.Text.RegularExpressions.Regex) expression.Value, expression.Regex.Flags); | |
| } | |
| return JsValue.FromObject(_engine, expression.Value); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment