Skip to content

Commit feb2d1a

Browse files
committed
Bug fix Jass Parser converting -2147483648 to --2147483648
1 parent d9359e6 commit feb2d1a

File tree

5 files changed

+15
-5
lines changed

5 files changed

+15
-5
lines changed

src/War3Net.CodeAnalysis.Decompilers/Script/MapTriggersDecompiler.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ setVariableStatement.Indexer is JassVariableReferenceExpressionSyntax i &&
156156

157157
var variableDefinition = mapTriggers.Variables.Single(v => string.Equals(v.Name, variableName, StringComparison.Ordinal));
158158

159-
variableDefinition.ArraySize = arraySize;
159+
variableDefinition.ArraySize = (int)arraySize;
160160

161161
if (TryDecompileVariableDefinitionInitialValue(setVariableStatement.Value.Expression, variableDefinition.Type, out var initialValue))
162162
{

src/War3Net.CodeAnalysis.Jass/Extensions/ExpressionSyntaxExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static bool TryGetIntegerExpressionValue(this IExpressionSyntax expressio
2929
switch (expression)
3030
{
3131
case JassDecimalLiteralExpressionSyntax decimalLiteralExpression:
32-
value = decimalLiteralExpression.Value;
32+
value = (int)decimalLiteralExpression.Value;
3333
return true;
3434

3535
case JassOctalLiteralExpressionSyntax octalLiteralExpression:

src/War3Net.CodeAnalysis.Jass/Parser/DecimalLiteralExpressionParser.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal partial class JassParser
1717
{
1818
internal static Parser<char, IExpressionSyntax> GetDecimalLiteralExpressionParser()
1919
{
20-
return Try(UnsignedInt(10))
20+
return Try(Long(10))
2121
.Select<IExpressionSyntax>(value => new JassDecimalLiteralExpressionSyntax(value))
2222
.Labelled("decimal literal");
2323
}

src/War3Net.CodeAnalysis.Jass/Syntax/JassDecimalLiteralExpressionSyntax.cs

+9-2
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,25 @@
55
// </copyright>
66
// ------------------------------------------------------------------------------
77

8+
using System;
89
using System.Globalization;
910

1011
namespace War3Net.CodeAnalysis.Jass.Syntax
1112
{
1213
public class JassDecimalLiteralExpressionSyntax : IExpressionSyntax
1314
{
14-
public JassDecimalLiteralExpressionSyntax(int value)
15+
public JassDecimalLiteralExpressionSyntax(long value)
1516
{
17+
if (value < Int32.MinValue || value-1 > Int32.MaxValue)
18+
{
19+
//workaround to allow -2147483648 to be wrapped as new JassUnaryExpressionSyntax(UnaryOperatorType.Minus, new JassDecimalLiteralExpressionSyntax(2147483648))
20+
throw new ArgumentException();
21+
}
22+
1623
Value = value;
1724
}
1825

19-
public int Value { get; init; }
26+
public long Value { get; init; }
2027

2128
public bool Equals(IExpressionSyntax? other)
2229
{

tests/War3Net.CodeAnalysis.Jass.Tests/Parser/ExpressionParserTests.cs

+3
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ public void TestExpressionParser(string expression, IExpressionSyntax? expected
196196
#endregion
197197

198198
#region UnaryExpression
199+
yield return new object?[] { @"-2147483647", new JassUnaryExpressionSyntax(UnaryOperatorType.Minus, new JassDecimalLiteralExpressionSyntax(2147483647)) };
200+
yield return new object?[] { @"-2147483648", new JassUnaryExpressionSyntax(UnaryOperatorType.Minus, new JassDecimalLiteralExpressionSyntax(2147483648)) };
201+
yield return new object?[] { @"--2147483648", new JassUnaryExpressionSyntax(UnaryOperatorType.Minus, new JassUnaryExpressionSyntax(UnaryOperatorType.Minus, new JassDecimalLiteralExpressionSyntax(2147483648))) };
199202
yield return new object?[] { @"+6", new JassUnaryExpressionSyntax(UnaryOperatorType.Plus, new JassDecimalLiteralExpressionSyntax(6)) };
200203
yield return new object?[] { @"-7", new JassUnaryExpressionSyntax(UnaryOperatorType.Minus, new JassDecimalLiteralExpressionSyntax(7)) };
201204
yield return new object?[] { @"+ 6", new JassUnaryExpressionSyntax(UnaryOperatorType.Plus, new JassDecimalLiteralExpressionSyntax(6)) };

0 commit comments

Comments
 (0)