Radix100.cs:
authorMichael Welch <michaelgwelch@gmail.com>
Wed, 27 Dec 2006 02:18:02 +0000 (02:18 +0000)
committerMichael Welch <michaelgwelch@gmail.com>
Wed, 27 Dec 2006 02:18:02 +0000 (02:18 +0000)
Added Round, ToNormalDecimalForm, ToScientificForm methods. These methods give results exactly as required by the TI Basic specs for printing numbers.

Also, fixed Add method (adding zero, and handling carryover)

Print.cs:
Fixed it to use the new ToString method of Radix100 which uses the methods mentioned above.

TiBasicRuntime/Radix100.cs
TiBasicRuntime/TestRadix100.cs
mbasic/SyntaxTree/Print.cs
mbasic/helloworld.mbas

index b6ce8f4..c936566 100644 (file)
@@ -25,7 +25,7 @@ using System.Text;
 \r
 namespace TiBasicRuntime\r
 {\r
-    struct Radix100\r
+    public struct Radix100\r
     {\r
         // Radix 100 is laid out like this\r
         //      7   6   5   4   3   2   1\r
@@ -97,7 +97,7 @@ namespace TiBasicRuntime
             Radix100 roundUpValue = new Radix100(0);\r
             if (roundUp)\r
             {\r
-                // Create a Radix100 with same input with a 1 in the least significant\r
+                // Create a Radix100 with same exponent with a 1 in the least significant\r
                 // digit of the mantissa. This can then be added to our result.\r
                 ulong r = 0;\r
                 SetByte(ref r, 7, biasedExponent);\r
@@ -144,7 +144,7 @@ namespace TiBasicRuntime
 \r
                 if (expValue < 0 || expValue > 6) return false;\r
 \r
-                // else use maks to see if this is an int --\r
+                // else use masks to see if this is an int --\r
 \r
                 // if expValue = 0 then only digit 7 can have a value and this still be an int\r
                 // if expValue = 1 then only digits 7 and 6 can have a value and this still be an int\r
@@ -156,6 +156,13 @@ namespace TiBasicRuntime
                 return (mask & val) == 0;\r
             }\r
         }\r
+\r
+        /// <summary>\r
+        /// Returns the number of digits in this number. It does not count leading\r
+        /// or trailing zeros. This is not just the significant digits. It is the\r
+        /// total number of digits (e.g.  1237637000000 has 13 digits).\r
+        /// </summary>\r
+        /// <returns></returns>\r
         public int GetNumberOfDigits()\r
         {\r
             // Each byte is one Radix 100 digit and can therefore\r
@@ -203,11 +210,6 @@ namespace TiBasicRuntime
 \r
         #endregion\r
 \r
-        //private byte GetByte(int index)\r
-        //{\r
-        //    return (byte) ((val & digitMasks[index]) >> (index * 8));\r
-        //}\r
-\r
 \r
 \r
         #region Helper functions, masks, constants,\r
@@ -264,39 +266,240 @@ namespace TiBasicRuntime
 \r
         #region String Processing\r
 \r
-        const string normalDecimalFormat = " ##########.##########;-##########.##########;0";\r
-        const string scientificFormatString = " 0.#####E+00;-0.#####E+00";\r
+        /// <summary>\r
+        /// Converts the specified double to an instance of Radix100 and then converts\r
+        /// that to a string.\r
+        /// </summary>\r
+        /// <param name="d"></param>\r
+        /// <returns></returns>\r
+        public static string ToString(double d)\r
+        {\r
+            return ((Radix100)d).ToString();\r
+        }\r
+\r
+        const string normalDecimalFormat = " ##########.########## ;-##########.########## ;0 ";\r
+        const string scientificFormatString = " 0.#####E+00 ;-0.#####E+00 ";\r
         public override string ToString()\r
         {\r
             int numDigits = GetNumberOfDigits();\r
-            if (numDigits <= 10) return ((double)this).ToString(normalDecimalFormat);\r
-            if (IsInteger)\r
-            {\r
-                double d = (double)this;\r
-                return d.ToString(scientificFormatString);\r
-            }\r
+            if (numDigits <= 10) return ToNormalDecimalForm();\r
+            if (IsInteger) return ToScientificForm();\r
             else\r
             {\r
                 int exponent = GetExponent(this);\r
                 if (Math.Abs(exponent) >= 50)\r
                 {\r
                     double mantissa = GetMantissa10(this);\r
-                    if (mantissa < 0 && exponent < 0) return String.Format("{0:0.#####}E-**", mantissa);\r
-                    else if (mantissa < 0) return String.Format("{0:0.#####}E+**", mantissa);\r
-                    else if (exponent > 0) return String.Format(" {0:0.#####}E+**", mantissa);\r
-                    else return String.Format(" {0:0.#####}E-**", mantissa);\r
+                    if (mantissa < 0 && exponent < 0) return String.Format("{0:0.#####}E-** ", mantissa);\r
+                    else if (mantissa < 0) return String.Format("{0:0.#####}E+** ", mantissa);\r
+                    else if (exponent > 0) return String.Format(" {0:0.#####}E+** ", mantissa);\r
+                    else return String.Format(" {0:0.#####}E-** ", mantissa);\r
                 }\r
-                if (exponent < -4 || exponent > 5) return ((double)this).ToString(scientificFormatString);\r
-                if (Radix100.Sign(this) >= 0) return String.Format(" {0:G10}", ((double)this));\r
-                return String.Format("{0:G10}", ((double)this));\r
+                if (exponent < -4 || exponent > 5) return ToScientificForm();\r
+                return ToNormalDecimalForm();\r
                 \r
             }\r
         }\r
 \r
+        public string ToScientificForm()\r
+        {\r
+            StringBuilder bldr = new StringBuilder();\r
+            if (Math.Sign(this) >= 0) bldr.Append(" ");\r
+            else bldr.Append("-");\r
+\r
+            Radix100 rounded = Radix100.Round(this, 6);\r
+            sbyte exponent = GetExponent(this);\r
+            int decimalExponent = exponent * 2;\r
+            string stringFormat = "##";\r
+\r
+            ulong rawBytes = rounded.val & 0x00FFFFFFFFFFFFFF;\r
+            ulong integerPart;\r
+            ulong fractionalPart;\r
+\r
+            integerPart = (rawBytes & (~isIntMasks[0])) << 8;\r
+            fractionalPart = (rawBytes & (isIntMasks[0])) << 16;\r
+\r
+            // format integer part\r
+            if (integerPart != 0)\r
+            {\r
+                byte theByte = GetByte(integerPart, 7);\r
+                if (theByte > 9)\r
+                {\r
+                    bldr.Append(theByte / 10);\r
+                    bldr.Append(".");\r
+                    bldr.Append(theByte % 10);\r
+                    decimalExponent++;\r
+                }\r
+                else\r
+                {\r
+                    bldr.Append(theByte.ToString(stringFormat));\r
+                    bldr.Append(".");\r
+                }\r
+            }\r
+\r
+            // format fractional part\r
+            if (fractionalPart != 0)\r
+            {\r
+                stringFormat = "00";\r
+                int firstNonZeroByte = 0;\r
+                for (int i = 0; i < 8; i++)\r
+                {\r
+                    if (GetByte(fractionalPart, i) != 0)\r
+                    {\r
+                        firstNonZeroByte = i;\r
+                        break;\r
+                    }\r
+                }\r
+                for (int i = 7; i > firstNonZeroByte; i--)\r
+                {\r
+                    bldr.Append(GetByte(fractionalPart, i).ToString(stringFormat));\r
+                }\r
+                int lastByte = GetByte(fractionalPart, firstNonZeroByte);\r
+                int firstDigit = lastByte / 10;\r
+                int secondDigit = lastByte % 10;\r
+                bldr.Append(firstDigit);\r
+                bldr.Append(secondDigit.ToString("#")); // if it is zero it won't print.\r
+            }\r
+\r
+            bldr.Append("E");\r
+            bldr.Append(decimalExponent.ToString("+00;-00"));\r
+            bldr.Append(" ");\r
+            return bldr.ToString();\r
+\r
+        }\r
+\r
+        public string ToNormalDecimalForm()\r
+        {\r
+            StringBuilder bldr = new StringBuilder();\r
+            if (Math.Sign(this) >= 0) bldr.Append(" ");\r
+            else bldr.Append("-");\r
+\r
+            Radix100 rounded = Radix100.Round(this, 10);\r
+            bool isInteger = IsInteger;\r
+\r
+            sbyte exponent = GetExponent(this);\r
+            string stringFormat = "##";\r
+\r
+            ulong rawBytes = rounded.val & 0x00FFFFFFFFFFFFFF;\r
+            ulong integerPart;\r
+            ulong fractionalPart;\r
+            if (exponent < 0)\r
+            {\r
+                integerPart = 0;\r
+                fractionalPart = rawBytes << 8;\r
+            }\r
+            else\r
+            {\r
+                integerPart = (rawBytes & (~isIntMasks[exponent])) << 8;\r
+                fractionalPart = (rawBytes & (isIntMasks[exponent])) << ((exponent + 2) * 8);\r
+            }\r
+\r
+            // format integer part\r
+            if (integerPart != 0)\r
+            {\r
+                for (int i = 7; i >= (7 - exponent); i--)\r
+                {\r
+                    byte theByte = GetByte(integerPart, i);\r
+                    bldr.Append(theByte.ToString(stringFormat));\r
+                    if (theByte > 0) stringFormat = "00"; // print all the digits of the rest of the values\r
+                }\r
+            }\r
+\r
+            if (!IsInteger) bldr.Append(".");\r
+            if (exponent < 0)\r
+            {\r
+                for (int i = 0; i > exponent+1; i--) bldr.Append("00");\r
+            }\r
+\r
+            // format fractional part\r
+            if (fractionalPart != 0)\r
+            {\r
+                stringFormat = "00";\r
+                int firstNonZeroByte = 0;\r
+                for (int i = 0; i < 8; i++)\r
+                {\r
+                    if (GetByte(fractionalPart, i) != 0)\r
+                    {\r
+                        firstNonZeroByte = i;\r
+                        break;\r
+                    }\r
+                }\r
+                for (int i = 7; i > firstNonZeroByte; i--)\r
+                {\r
+                    bldr.Append(GetByte(fractionalPart, i).ToString(stringFormat));\r
+                }\r
+                int lastByte = GetByte(fractionalPart, firstNonZeroByte);\r
+                int firstDigit = lastByte / 10;\r
+                int secondDigit = lastByte % 10;\r
+                bldr.Append(firstDigit);\r
+                bldr.Append(secondDigit.ToString("#")); // if it is zero it won't print.\r
+            }\r
+            bldr.Append(" ");\r
+            return bldr.ToString();\r
+\r
+        }\r
+\r
         #endregion String Processing\r
 \r
         #region Math Operations\r
-        \r
+        public static Radix100 Round(Radix100 r, int numOfDecimalDigits)\r
+        {\r
+            // We need to find the byte that controls rounding. This depends\r
+            // on the input - numOfDecimalDigits, and also on the number of\r
+            // decimal digits in the most significant Radix100 digit of r.\r
+\r
+            int numOfDigitsInMsd = GetByte(r.val, 6) > 10 ? 2 : 1;\r
+\r
+            // This "normalizes" the digit we are looking for, If the most\r
+            // significant Radix100 digit of r had only 1 decimal digit, then it\r
+            // is like we are looking for the digit numOfDecimalDigits + 1. (This\r
+            // accounts for the leading 0 digit in the MSD).\r
+            numOfDecimalDigits = numOfDecimalDigits + (2 - numOfDigitsInMsd);\r
+\r
+            // The digit that controls rounding is in the byte we grab here:\r
+            byte bytePos = (byte) (7 - (numOfDecimalDigits + 2) / 2);\r
+            byte byteOfConcern = GetByte(r.val, bytePos);\r
+\r
+            // Now the digit that controls rounding is either in the 10s position\r
+            // or 1s position of the byte we just grabbed.\r
+            bool onesPosition = (numOfDecimalDigits % 2) != 0;\r
+            byte digitOfConcern =(byte) (onesPosition ? (byteOfConcern % 10) : (byteOfConcern / 10));\r
+\r
+            Radix100 roundUpVal = Radix100.Zero;\r
+            if (digitOfConcern >= 5)\r
+            {\r
+                // Create a Radix100 that can be added to the truncted value\r
+                // we create below to get the rounded value.\r
+                ulong newVal = 0;\r
+                SetByte(ref newVal, 7, GetByte(r.val, 7));\r
+                // If our rounding digit was in onesPosition, then we need to put a\r
+                // 1 in the tens position. Else put a 1 in the ones position of next higher byte.\r
+                if (onesPosition) SetByte(ref newVal, bytePos, 10);\r
+                else SetByte(ref newVal, bytePos + 1, 1);\r
+                roundUpVal = new Radix100(newVal);\r
+            }\r
+\r
+            // the last decimal digit is in the byte we are going to grab:\r
+            bytePos = (byte)(7 - (numOfDecimalDigits + 1) / 2);\r
+            byteOfConcern = GetByte(r.val, bytePos);\r
+            onesPosition = (numOfDecimalDigits % 2) == 0;\r
+            digitOfConcern = (byte)(onesPosition ? (byteOfConcern % 10) : (byteOfConcern / 10));\r
+\r
+            ulong truncatedValue = 0;\r
+            for (int i = 7; i > bytePos; i--)\r
+            {\r
+                SetByte(ref truncatedValue, i, GetByte(r.val, i));\r
+            }\r
+\r
+            if (onesPosition) SetByte(ref truncatedValue, bytePos, GetByte(r.val, bytePos));\r
+            else SetByte(ref truncatedValue, bytePos, (byte)(digitOfConcern*10));\r
+\r
+            Radix100 result = new Radix100(truncatedValue);\r
+            return result + roundUpVal;\r
+\r
+\r
+        }\r
+\r
         public static int Sign(Radix100 r)\r
         {\r
             if (r.Equals(Radix100.Zero)) return 0;\r
@@ -306,8 +509,12 @@ namespace TiBasicRuntime
 \r
         public static Radix100 operator +(Radix100 r1, Radix100 r2)\r
         {\r
+            if (r1.Equals(Zero)) return r2;\r
+            if (r2.Equals(Zero)) return r1;\r
+\r
             sbyte exp1 = GetExponent(r1);\r
             sbyte exp2 = GetExponent(r2);\r
+            sbyte exp = Math.Max(exp1, exp2);\r
             sbyte diff = (sbyte)(exp1 - exp2);\r
 \r
             ulong m1 = GetMantissa100(r1);\r
@@ -316,23 +523,26 @@ namespace TiBasicRuntime
             if (diff > 0) m2 = m2 >> (diff * 8);\r
             else m1 = m1 >> (-diff * 8);\r
 \r
-            ulong sum = (ulong)(Math.Max(exp1, exp2) + 0x40);\r
-            for (int i = 6; i >= 0; i--)\r
+            ulong sum = 0;\r
+            byte carryOver = 0;\r
+            for (int i = 0; i < 7; i++)\r
             {\r
                 byte b1 = (byte)((m1 & digitMasks[i]) >> (i * 8));\r
                 byte b2 = (byte)((m2 & digitMasks[i]) >> (i * 8));\r
-                byte digitSum = (byte)(b1 + b2);\r
-                sum <<= 8;\r
+                ulong digitSum = (ulong)(b1 + b2 + carryOver);\r
                 if (digitSum != 0)\r
                 {\r
                     if (digitSum > 99)\r
                     {\r
                         digitSum -= 100;\r
-                        sum += (1 << 8); // a carry over bit.\r
+                        carryOver = 1;\r
                     }\r
-                    sum += digitSum;\r
+                    else carryOver = 0;\r
+                    sum += (digitSum << (i * 8));\r
                 }\r
             }\r
+            if (carryOver == 1) exp++;\r
+            sum += ((ulong)(exp + 0x40)) << exponentShift;\r
 \r
             return new Radix100(sum);\r
 \r
index 646939e..a3fba51 100644 (file)
@@ -34,6 +34,10 @@ namespace TiBasicRuntime
             Radix100 r2 = 7892;\r
             Radix100 r3 = r1 + r2;\r
             Assert.AreEqual((double)127394 + 7892, r3, Radix100.Epsilon);\r
+\r
+            r1 = Radix100.FromDouble(0.000000001);\r
+            Assert.AreEqual(r1, r1 + Radix100.Zero);\r
+            Assert.AreEqual(r1, Radix100.Zero + r1);\r
         }\r
 \r
         [Test]\r
@@ -55,36 +59,62 @@ namespace TiBasicRuntime
             Radix100 x = -10;\r
             Radix100 y = (Radix100)7.1;\r
 \r
-            Assert.AreEqual("-10", x.ToString());\r
-            Assert.AreEqual(" 7.1", y.ToString()); \r
-            Assert.AreEqual(" 9.34277E+10", Radix100.FromInteger(93427685127).ToString());\r
-            Assert.AreEqual(" .0000000001", Radix100.FromDouble(1e-10).ToString());\r
-            Assert.AreEqual(" 1.2E-10", Radix100.FromDouble(1.2e-10).ToString());\r
-            Assert.AreEqual(" 2.46E-10", Radix100.FromDouble(.000000000246).ToString());\r
-            Assert.AreEqual(" 15", Radix100.FromInteger(15).ToString());\r
-            Assert.AreEqual("-3", Radix100.FromInteger(-3).ToString());\r
-            Assert.AreEqual(" 3.35", Radix100.FromDouble(3.350).ToString());\r
-            Assert.AreEqual("-46.1", Radix100.FromDouble(-46.1).ToString());\r
-            Assert.AreEqual(" 791.1234568", Radix100.FromDouble(791.123456789).ToString());\r
-            Assert.AreEqual(" 7.91123E+10", Radix100.FromDouble(79112345678).ToString());\r
-            Assert.AreEqual(" 7911234568", Radix100.FromDouble(7911234567.8).ToString());\r
-            Assert.AreEqual("-7911234568", Radix100.FromDouble(-7911234567.8).ToString());\r
-            Assert.AreEqual("-.0127", Radix100.FromDouble(-12.7E-3).ToString());\r
-            Assert.AreEqual(" .64", Radix100.FromDouble(0.64).ToString());\r
-            Assert.AreEqual(" 1.97853E-10", Radix100.FromDouble(.0000000001978531).ToString());\r
-            Assert.AreEqual("-9.877E+22", Radix100.FromDouble(-98.77E21).ToString());\r
-            Assert.AreEqual(" 7.364E+12", Radix100.FromDouble(736.400E10).ToString());\r
-            Assert.AreEqual(" 1.23659E-14", Radix100.FromDouble(12.36587E-15).ToString());\r
-            Assert.AreEqual(" 1.25E-09", Radix100.FromDouble(1.25e-9).ToString());\r
-            Assert.AreEqual("-4.36E+13", Radix100.FromDouble(-43.6e12).ToString());\r
-            Assert.AreEqual(" 7.6E+**", Radix100.FromDouble(.76E126).ToString());\r
-            Assert.AreEqual(" 8.1E-**", Radix100.FromDouble(81e-115).ToString());\r
-            Assert.AreEqual("-7.6E+**", Radix100.FromDouble(-.76E126).ToString());\r
-            Assert.AreEqual("-8.1E-**", Radix100.FromDouble(-81e-115).ToString());\r
-\r
+            Assert.AreEqual("-10 ", x.ToString());\r
+            Assert.AreEqual(" 7.1 ", y.ToString()); \r
+            Assert.AreEqual(" 9.34277E+10 ", Radix100.FromInteger(93427685127).ToString());\r
+            Assert.AreEqual(" .0000000001 ", Radix100.FromDouble(1e-10).ToString());\r
+            Assert.AreEqual(" 1.2E-10 ", Radix100.FromDouble(1.2e-10).ToString());\r
+            Assert.AreEqual(" 2.46E-10 ", Radix100.FromDouble(.000000000246).ToString());\r
+            Assert.AreEqual(" 15 ", Radix100.FromInteger(15).ToString());\r
+            Assert.AreEqual("-3 ", Radix100.FromInteger(-3).ToString());\r
+            Assert.AreEqual(" 3.35 ", Radix100.FromDouble(3.350).ToString());\r
+            Assert.AreEqual("-46.1 ", Radix100.FromDouble(-46.1).ToString());\r
+            Assert.AreEqual(" 791.1234568 ", Radix100.FromDouble(791.123456789).ToString());\r
+            Assert.AreEqual(" 7.91123E+10 ", Radix100.FromDouble(79112345678).ToString());\r
+            Assert.AreEqual(" 7911234568. ", Radix100.FromDouble(7911234567.8).ToString());\r
+            Assert.AreEqual("-7911234568. ", Radix100.FromDouble(-7911234567.8).ToString());\r
+            Assert.AreEqual("-.0127 ", Radix100.FromDouble(-12.7E-3).ToString());\r
+            Assert.AreEqual(" .64 ", Radix100.FromDouble(0.64).ToString());\r
+            Assert.AreEqual(" 1.97853E-10 ", Radix100.FromDouble(.0000000001978531).ToString());\r
+            Assert.AreEqual("-9.877E+22 ", Radix100.FromDouble(-98.77E21).ToString());\r
+            Assert.AreEqual(" 7.364E+12 ", Radix100.FromDouble(736.400E10).ToString());\r
+            Assert.AreEqual(" 1.23659E-14 ", Radix100.FromDouble(12.36587E-15).ToString());\r
+            Assert.AreEqual(" 1.25E-09 ", Radix100.FromDouble(1.25e-9).ToString());\r
+            Assert.AreEqual("-4.36E+13 ", Radix100.FromDouble(-43.6e12).ToString());\r
+            Assert.AreEqual(" 7.6E+** ", Radix100.FromDouble(.76E126).ToString());\r
+            Assert.AreEqual(" 8.1E-** ", Radix100.FromDouble(81e-115).ToString());\r
+            Assert.AreEqual("-7.6E+** ", Radix100.FromDouble(-.76E126).ToString());\r
+            Assert.AreEqual("-8.1E-** ", Radix100.FromDouble(-81e-115).ToString());\r
+            Assert.AreEqual(" 2.E+10 ", Radix100.FromInteger(19999999999).ToString());\r
+            Assert.AreEqual(" 8.23498E+12 ", Radix100.FromDouble(8234983729385).ToString());\r
             double val = 1.000000000002;\r
             Radix100 r = Radix100.FromDouble(val);\r
-            Assert.AreEqual(" 1.", r.ToString());\r
+            Assert.AreEqual(" 1. ", r.ToString());\r
+        }\r
+\r
+        [Test]\r
+        public void Round()\r
+        {\r
+            Radix100 original = Radix100.FromInteger(12345678999);\r
+            Radix100 expected = Radix100.FromInteger(12345679000);\r
+            Radix100 actual = Radix100.Round(original, 10);\r
+            Assert.AreEqual(expected, actual);\r
+\r
+            original = Radix100.FromInteger(19);\r
+            expected = Radix100.FromInteger(20);\r
+            actual = Radix100.Round(original, 1);\r
+            Assert.AreEqual(expected, actual);\r
+\r
+            original = Radix100.FromInteger(199);\r
+            expected = Radix100.FromInteger(200);\r
+            actual = Radix100.Round(original, 2);\r
+            Assert.AreEqual(expected, actual);\r
+\r
+            original = Radix100.FromInteger(-199);\r
+            expected = Radix100.FromInteger(-199);\r
+            actual = Radix100.Round(original, 3);\r
+            Assert.AreEqual(expected, actual);\r
+\r
         }\r
     }\r
 }\r
index 32d473b..6d72f59 100644 (file)
@@ -24,6 +24,7 @@ using System.Collections.Generic;
 using System.Text;\r
 using System.Reflection.Emit;\r
 using System.Reflection;\r
+using TiBasicRuntime;\r
 namespace mbasic.SyntaxTree\r
 {\r
     internal class Print : Statement\r
@@ -31,8 +32,8 @@ namespace mbasic.SyntaxTree
         static readonly MethodInfo methodInfoString = \r
             typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) });\r
 \r
-        static readonly MethodInfo methodInfoNum =\r
-            typeof(Console).GetMethod("WriteLine", new Type[] { typeof(double) });\r
+        static readonly MethodInfo toStringMethod =\r
+            typeof(Radix100).GetMethod("ToString", new Type[] { typeof(double) });\r
 \r
         Expression value;\r
         BasicType printItemType;\r
@@ -51,9 +52,9 @@ namespace mbasic.SyntaxTree
             if (!labelSetAlready) MarkLabel(gen);\r
             MarkSequencePoint(gen);\r
             value.Emit(gen);\r
-            if (printItemType == BasicType.String) gen.EmitCall(OpCodes.Call, methodInfoString, new Type[0]);\r
-            else gen.EmitCall(OpCodes.Call, methodInfoNum, new Type[0]);\r
+            if (printItemType == BasicType.Number) gen.Emit(OpCodes.Call, toStringMethod);\r
 \r
+            gen.EmitCall(OpCodes.Call, methodInfoString, new Type[0]);\r
         }\r
 \r
         public override void CheckTypes()\r
index 42d04e9..2bbd3f3 100644 (file)
@@ -1,11 +1,6 @@
-50 REM Test End Statements\r
+50 REM PRINT Statements\r
 \r
-100 INPUT I\r
-110 IF I <> 0 Then 130 Else 150\r
-120 END\r
-130 INPUT I\r
-140 IF I <> 0 Then 160\r
-150 STOP\r
-160 PRINT "You made it"\r
-\r
-2100 INPUT I$
\ No newline at end of file
+100 print -10\r
+105 print 7.1\r
+110 print .0000000001978531\r
+120 print .0000000001978535
\ No newline at end of file