From 5fdc4fc6937570dbff0d445cb18b9e8d81106f66 Mon Sep 17 00:00:00 2001 From: ik Date: Thu, 15 Oct 2015 17:34:08 -0700 Subject: [PATCH] Create decimal literals through decimal constructor (#871). --- JSIL/AST/JSLiteralTypes.cs | 16 ++++++++++++++-- JSIL/AST/JSNodeTypes.cs | 4 ++-- JSIL/JavascriptAstEmitter.cs | 5 +++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/JSIL/AST/JSLiteralTypes.cs b/JSIL/AST/JSLiteralTypes.cs index 89e6e37a4..13b8b806b 100644 --- a/JSIL/AST/JSLiteralTypes.cs +++ b/JSIL/AST/JSLiteralTypes.cs @@ -244,6 +244,20 @@ select em } } + public class JSDecimalLiteral : JSLiteralBase + { + public JSDecimalLiteral(decimal value) + : base(value) + { + } + + public override TypeReference GetActualType(TypeSystem typeSystem) + { + return new TypeReference(typeSystem.Double.Namespace, "Decimal", typeSystem.Double.Module, + typeSystem.Double.Scope, true); + } + } + public class JSNumberLiteral : JSLiteralBase { public readonly Type OriginalType; @@ -260,8 +274,6 @@ public override TypeReference GetActualType (TypeSystem typeSystem) { return typeSystem.Single; case "System.Double": return typeSystem.Double; - case "System.Decimal": - return new TypeReference(typeSystem.Double.Namespace, "Decimal", typeSystem.Double.Module, typeSystem.Double.Scope, true); default: throw new NotImplementedException(String.Format( "Unsupported number literal type: {0}", diff --git a/JSIL/AST/JSNodeTypes.cs b/JSIL/AST/JSNodeTypes.cs index 7a17c5b35..0c6e5281d 100644 --- a/JSIL/AST/JSNodeTypes.cs +++ b/JSIL/AST/JSNodeTypes.cs @@ -494,8 +494,8 @@ public static JSNumberLiteral New (double value) { return new JSNumberLiteral(value, typeof(double)); } - public static JSNumberLiteral New (decimal value) { - return new JSNumberLiteral((double)value, typeof(decimal)); + public static JSDecimalLiteral New (decimal value) { + return new JSDecimalLiteral(value); } public static JSDefaultValueLiteral DefaultValue (TypeReference type) { diff --git a/JSIL/JavascriptAstEmitter.cs b/JSIL/JavascriptAstEmitter.cs index c022a8289..1780faa7d 100644 --- a/JSIL/JavascriptAstEmitter.cs +++ b/JSIL/JavascriptAstEmitter.cs @@ -992,6 +992,11 @@ public void VisitNode (JSNumberLiteral number) { } } + public void VisitNode(JSDecimalLiteral number) + { + VisitNode(new JSNewExpression(number.GetActualType(TypeSystem), null, null, JSLiteral.New((double) number.Value))); + } + public void VisitNode (JSBooleanLiteral b) { Output.Value(b.Value); }