From 83fcfd088227a01f79f579e00c3913af29ae2ad1 Mon Sep 17 00:00:00 2001 From: Kevin Glynn Date: Wed, 6 Apr 2011 16:27:15 +0200 Subject: [PATCH] Add --experimental-transforms for undercooked implementations and add boxing of primitive types (see noise added to ScormEngine for aesthetic problems) --- .../antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs | 13 +++++++------ .../src/CS2JTranslator/CS2JMain/CS2JSettings.cs | 7 +++++++ .../src/CS2JTranslator/CS2JTransform/NetMaker.g | 4 ++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs index a597c79..0f500d9 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs @@ -128,6 +128,7 @@ namespace Twiglet.CS2J.Translator .Add ("translator-keep-parens=", v => cfg.TranslatorKeepParens = Boolean.Parse(v)) .Add ("translator-timestamp-files=", v => cfg.TranslatorAddTimeStamp = Boolean.Parse(v)) .Add ("translator-exception-is-throwable=", v => cfg.TranslatorExceptionIsThrowable = Boolean.Parse(v)) + .Add ("experimental-transforms=", v => cfg.ExperimentalTransforms = Boolean.Parse(v)) ; //TODO: fix enum dump @@ -315,7 +316,7 @@ namespace Twiglet.CS2J.Translator // Add the namespace. XmlNamespaceManager nsmgr = new XmlNamespaceManager(Doc.NameTable); nsmgr.AddNamespace("ss", "http://www.w3.org/2000/09/xmldsig#"); - + XmlNode root = Doc.DocumentElement; XmlNodeList nodeList = root.SelectNodes("/*/ss:Signature", nsmgr); // fail if no signature was found. @@ -342,10 +343,10 @@ namespace Twiglet.CS2J.Translator // Suck in translation file Stream txStream = new FileStream(fullName, FileMode.Open, FileAccess.Read); - - if (numLines < numLines - 1) + + if (numLines < numLines - 1) { - // TRIAL ONLY + // TRIAL ONLY // Create a new XML document. XmlDocument xmlDoc = new XmlDocument(); @@ -369,7 +370,7 @@ namespace Twiglet.CS2J.Translator } txStream.Seek(0, SeekOrigin.Begin); - } + } TypeRepTemplate t = TypeRepTemplate.newInstance(txStream); // Fullname has form: /.xml AppEnv[t.TypeName+(t.TypeParams != null && t.TypeParams.Length > 0 ? "'" + t.TypeParams.Length.ToString() : "")] = t; @@ -404,7 +405,7 @@ namespace Twiglet.CS2J.Translator private static string limit(string inp) { if (numLines > numLines - 1) return inp; - // TRIAL ONLY + // TRIAL ONLY String[] lines = inp.Split(newLines, numLines+1, StringSplitOptions.None); if (lines.Length <= numLines) { return inp; diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs index 8dc2cf7..fef08f8 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs @@ -56,6 +56,11 @@ namespace Twiglet.CS2J.Translator get; set; } + public bool ExperimentalTransforms + { + get; set; + } + public CS2JSettings () { @@ -88,6 +93,8 @@ namespace Twiglet.CS2J.Translator TranslatorKeepParens = true; TranslatorAddTimeStamp = true; TranslatorExceptionIsThrowable = false; + + ExperimentalTransforms = false; } } } diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g index 5a9c226..e1bc3e3 100644 --- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g +++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g @@ -631,7 +631,7 @@ scope { // We are calling a method on an expression. If it has a primitive type then cast it to // the appropriate Object type. - CommonTree e2InBox = expType.IsUnboxedType ? castToBoxedType(expType, $e2.tree, $d0.token) : $e2.tree; + CommonTree e2InBox = expType.IsUnboxedType && Cfg.ExperimentalTransforms ? castToBoxedType(expType, $e2.tree, $d0.token) : $e2.tree; MethodRepTemplate methodRep = methodResult.Result as MethodRepTemplate; Dictionary myMap = new Dictionary(); @@ -679,7 +679,7 @@ scope { // We are calling a method on an expression. If it has a primitive type then cast it to // the appropriate Object type. - CommonTree e1InBox = $e1.dotNetType.IsUnboxedType ? castToBoxedType($e1.dotNetType, $e1.tree, $d1.token) : $e1.tree; + CommonTree e1InBox = $e1.dotNetType.IsUnboxedType && Cfg.ExperimentalTransforms ? castToBoxedType($e1.dotNetType, $e1.tree, $d1.token) : $e1.tree; Dictionary myMap = new Dictionary(); myMap["this"] = wrapExpression(e1InBox, $i1.tree.Token);