1
0
mirror of https://github.com/twiglet/cs2j.git synced 2025-01-18 13:15:17 +01:00

add option -experimental-unsigned-to-bigger-signed

This commit is contained in:
Kevin Glynn 2011-09-06 15:04:03 +02:00
parent cf49dd694f
commit 47607a041e
5 changed files with 113 additions and 7 deletions

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is
Copyright 2007,2008,2009,2010 Rustici Software, LLC
Copyright 2010,2011 Kevin Glynn (kevin.glynn@twigletsoftware.com)
-->
<Class xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:www.twigletsoftware.com:schemas:txtemplate:1:0">
<Imports />
<Java>byte</Java>
<Name>System.SByte</Name>
<Uses />
<Inherits>
<Type>System.Number</Type>
<Type>System.IComparable</Type>
<Type>System.IFormattable</Type>
<Type>System.IConvertible</Type>
</Inherits>
<Methods>
<Method>
<Imports />
<Java>String.valueOf(${this})</Java>
<Params />
<Name>ToString</Name>
<Return>System.String</Return>
</Method>
<Method>
<Imports />
<Java>Byte.valueOf(${str})</Java>
<Params>
<Param>
<Type>System.String</Type>
<Name>str</Name>
</Param>
</Params>
<Name>Parse</Name>
<Return>System.Byte</Return>
</Method>
</Methods>
<Properties>
<Property>
<Imports />
<Java>Byte.MIN_VALUE</Java>
<Type>System.Byte</Type>
<Name>MinValue</Name>
<Get>Byte.MIN_VALUE</Get>
<Set>${this:16}.setMinValue(${value})</Set>
</Property>
<Property>
<Imports />
<Java>Byte.MAX_VALUE</Java>
<Type>System.Byte</Type>
<Name>MaxValue</Name>
<Get>Byte.MAX_VALUE</Get>
<Set>${this:16}.setMaxValue(${value})</Set>
</Property>
</Properties>
<Events />
<Indexers />
<Constructors />
<Fields />
<Casts>
<!--
<Cast>
<Imports />
<Java>((Number)${expr}).byteValue()</Java>
<From>System.Object</From>
<To>System.Byte</To>
</Cast>
-->
</Casts>
<UnaryOps />
<BinaryOps />
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>9UV0KDy27dm2PgLpXQYexqZHgrI=</DigestValue></Reference></SignedInfo><SignatureValue>hK2py13asxC+KdyfudqYmjri02cTXjfeJE0dZPGWELurbR2AdYFni3yJapmhPErkXLGfmjVBr9nr/mWl+Xq1NbmYhfV20A5+AnKwcA9V6qhQb/qLg10+J0HpCQItZOgUmGXjkZ3uqMEGxHuyUilxYoYz6HPOl0OdU3UlZl8kxvg=</SignatureValue></Signature></Class>

View File

@ -141,7 +141,8 @@ namespace Twiglet.CS2J.Translator
.Add ("translator-make-javadoc-comments=", v => cfg.TranslatorMakeJavadocComments = Boolean.Parse(v))
.Add ("translator-make-java-naming-conventions=", v => cfg.TranslatorMakeJavaNamingConventions = Boolean.Parse(v))
.Add ("experimental-enums-numericconsts=", v => cfg.EnumsAsNumericConsts = Boolean.Parse(v))
.Add ("experimental-unsigned-translatesigned=", v => cfg.UnsignedNumbersToSigned = Boolean.Parse(v))
.Add ("experimental-unsigned-to-signed=", v => cfg.UnsignedNumbersToSigned = Boolean.Parse(v))
.Add ("experimental-unsigned-to-bigger-signed=", v => cfg.UnsignedNumbersToBiggerSignedNumbers = Boolean.Parse(v))
.Add ("experimental-transforms=", v => cfg.ExperimentalTransforms = Boolean.Parse(v))
.Add ("internal-isjavaish", v => cfg.InternalIsJavaish = true)
;

View File

@ -85,6 +85,11 @@ namespace Twiglet.CS2J.Translator
get; set;
}
public bool UnsignedNumbersToBiggerSignedNumbers
{
get; set;
}
public bool ExperimentalTransforms
{
get; set;
@ -135,6 +140,7 @@ namespace Twiglet.CS2J.Translator
EnumsAsNumericConsts = false;
UnsignedNumbersToSigned = false;
UnsignedNumbersToBiggerSignedNumbers = false;
ExperimentalTransforms = false;

View File

@ -474,6 +474,14 @@ scope TypeContext {
{"ushort", "short"}
};
Dictionary<string, string> predefined_embiggen_unsigned_type_map = new Dictionary<string, string>()
{
{"byte", "short"},
{"ushort", "int"},
{"uint", "long"},
{"ulong", "long"}
};
protected CommonTree mkHole() {
return mkHole(null);
}
@ -2029,12 +2037,18 @@ predefined_type returns [string thetext]
if (predefined_type_map.TryGetValue($predefined_type.tree.Token.Text, out newText)) {
$predefined_type.tree.Token.Text = newText;
}
if (Cfg.UnsignedNumbersToSigned && predefined_unsigned_type_map.TryGetValue($predefined_type.tree.Token.Text, out newText)) {
if (Cfg.UnsignedNumbersToSigned && predefined_unsigned_type_map.TryGetValue($predefined_type.tree.Token.Text, out newText)) {
$predefined_type.tree.Token.Text = newText;
}
if (Cfg.UnsignedNumbersToBiggerSignedNumbers && predefined_embiggen_unsigned_type_map.TryGetValue($predefined_type.tree.Token.Text, out newText)) {
$predefined_type.tree.Token.Text = newText;
}
}:
'bool' { $thetext = "System.Boolean"; }
| 'byte' { $thetext = "System.Byte"; }
| 'byte' { $thetext = Cfg.UnsignedNumbersToSigned ? "System.SByte" : "System.Byte";
if (Cfg.UnsignedNumbersToBiggerSignedNumbers)
$thetext = "System.Short";
}
| 'char' { $thetext = "System.Char"; }
| 'decimal' { $thetext = "System.Decimal"; }
| 'double' { $thetext = "System.Double"; }
@ -2045,9 +2059,18 @@ predefined_type returns [string thetext]
| 'sbyte' { $thetext = "System.SByte"; }
| 'short' { $thetext = "System.Int16"; }
| 'string' { $thetext = "System.String"; }
| 'uint' { $thetext = Cfg.UnsignedNumbersToSigned ? "System.Int32" : "System.UInt32"; }
| 'ulong' { $thetext = Cfg.UnsignedNumbersToSigned ? "System.Int64" : "System.UInt64"; }
| 'ushort' { $thetext = Cfg.UnsignedNumbersToSigned ? "System.Int16" : "System.UInt16"; }
| 'uint' { $thetext = Cfg.UnsignedNumbersToSigned ? "System.Int32" : "System.UInt32";
if (Cfg.UnsignedNumbersToBiggerSignedNumbers)
$thetext = "System.Int64";
}
| 'ulong' { $thetext = Cfg.UnsignedNumbersToSigned ? "System.Int64" : "System.UInt64";
if (Cfg.UnsignedNumbersToBiggerSignedNumbers)
$thetext = "System.Int64";
}
| 'ushort' { $thetext = Cfg.UnsignedNumbersToSigned ? "System.Int16" : "System.UInt16";
if (Cfg.UnsignedNumbersToBiggerSignedNumbers)
$thetext = "System.Int32";
}
;
identifier returns [string thetext]

View File

@ -3062,7 +3062,7 @@ predefined_type returns [TypeRepTemplate dotNetType]
}:
'bool' { ns = "System.Boolean"; }
| 'byte' { ns = Cfg.UnsignedNumbersToSigned ? "System.Byte" : "System.Byte"; }
| 'byte' { ns = Cfg.UnsignedNumbersToSigned ? "System.Byte" : "System.SByte"; }
| 'char' { ns = "System.Char"; }
| 'decimal' { ns = "System.Decimal"; }
| 'double' { ns = "System.Double"; }