diff --git a/DoRunner/DefineVariableRunner.cs b/DoRunner/DefineVariableRunner.cs index 15d10b4..25f740a 100644 --- a/DoRunner/DefineVariableRunner.cs +++ b/DoRunner/DefineVariableRunner.cs @@ -84,22 +84,22 @@ namespace Convention.RScript.Runner else if (varTypeName == "int") { varType = typeof(int); - varDefaultValue = varInitExpression == null ? 0 : parser.Evaluate(varInitExpression); + varDefaultValue = varInitExpression == null ? 0 : Convert.ChangeType(parser.Evaluate(varInitExpression), typeof(int)); } else if (varTypeName == "double") { varType = typeof(double); - varDefaultValue = varInitExpression == null ? 0.0 : parser.Evaluate(varInitExpression); + varDefaultValue = varInitExpression == null ? 0.0 : Convert.ChangeType(parser.Evaluate(varInitExpression), typeof(double)); } else if (varTypeName == "float") { varType = typeof(float); - varDefaultValue = varInitExpression == null ? 0.0f : parser.Evaluate(varInitExpression); + varDefaultValue = varInitExpression == null ? 0.0f : Convert.ChangeType(parser.Evaluate(varInitExpression), typeof(float)); } else if (varTypeName == "bool") { varType = typeof(bool); - varDefaultValue = varInitExpression == null ? false : parser.Evaluate(varInitExpression); + varDefaultValue = varInitExpression == null ? false : Convert.ChangeType(parser.Evaluate(varInitExpression), typeof(bool)); } else if (varTypeName == "var") { diff --git a/Parser/ExpressionParser.cs b/Parser/ExpressionParser.cs index 4e717fa..2bee3e6 100644 --- a/Parser/ExpressionParser.cs +++ b/Parser/ExpressionParser.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System; using System.Linq; +using System.Diagnostics; namespace Convention.RScript { @@ -121,7 +122,10 @@ namespace Convention.RScript.Parser { if (CompileGenericExpression.TryGetValue(expression, out var result)) { - return (result as IGenericExpression).Evaluate(); + if (result is IGenericExpression genericExpression) + return genericExpression.Evaluate(); + else + return context.CompileGeneric(expression).Evaluate(); } return Compile(expression).Evaluate(); }