diff --git a/CS2JLibrary/NetFramework/System/SByte.xml b/CS2JLibrary/NetFramework/System/SByte.xml
new file mode 100644
index 0000000..e4e5fe8
--- /dev/null
+++ b/CS2JLibrary/NetFramework/System/SByte.xml
@@ -0,0 +1,76 @@
+
+
+
+
+ byte
+ System.SByte
+
+
+ System.Number
+ System.IComparable
+ System.IFormattable
+ System.IConvertible
+
+
+
+
+ String.valueOf(${this})
+
+ ToString
+ System.String
+
+
+
+ Byte.valueOf(${str})
+
+
+ System.String
+ str
+
+
+ Parse
+ System.Byte
+
+
+
+
+
+ Byte.MIN_VALUE
+ System.Byte
+ MinValue
+ Byte.MIN_VALUE
+ ${this:16}.setMinValue(${value})
+
+
+
+ Byte.MAX_VALUE
+ System.Byte
+ MaxValue
+ Byte.MAX_VALUE
+ ${this:16}.setMaxValue(${value})
+
+
+
+
+
+
+
+
+
+
+
+9UV0KDy27dm2PgLpXQYexqZHgrI=hK2py13asxC+KdyfudqYmjri02cTXjfeJE0dZPGWELurbR2AdYFni3yJapmhPErkXLGfmjVBr9nr/mWl+Xq1NbmYhfV20A5+AnKwcA9V6qhQb/qLg10+J0HpCQItZOgUmGXjkZ3uqMEGxHuyUilxYoYz6HPOl0OdU3UlZl8kxvg=
diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs
index 4c42ac8..b874c69 100644
--- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs
+++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JMain.cs
@@ -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)
;
diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs
index d3f3ec4..3a29fb8 100644
--- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs
+++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JMain/CS2JSettings.cs
@@ -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;
diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g
index d01b753..aa0d79a 100644
--- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g
+++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/JavaMaker.g
@@ -474,6 +474,14 @@ scope TypeContext {
{"ushort", "short"}
};
+ Dictionary predefined_embiggen_unsigned_type_map = new Dictionary()
+ {
+ {"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]
diff --git a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g
index cc9c080..bec63e5 100644
--- a/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g
+++ b/CSharpTranslator/antlr3/src/CS2JTranslator/CS2JTransform/NetMaker.g
@@ -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"; }