Skip to content

Commit 7dafac5

Browse files
committed
Generate integer literal properly
1 parent ee1cdfc commit 7dafac5

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/c/CGenerator.java

+19-4
Original file line numberDiff line numberDiff line change
@@ -2403,24 +2403,39 @@ private CharSequence generateLiteral(final PrimitiveType type, final String valu
24032403
break;
24042404

24052405
case UINT32:
2406+
{
2407+
final long intValue = Long.parseLong(value);
2408+
literal = "UINT32_C(0x" + Integer.toHexString((int)intValue) + ")";
2409+
break;
2410+
}
2411+
24062412
case INT32:
2407-
literal = value;
2413+
{
2414+
final long intValue = Long.parseLong(value);
2415+
literal = "INT32_C(" + Integer.toString((int)intValue) + ")";
24082416
break;
2417+
}
24092418

24102419
case FLOAT:
24112420
literal = value.endsWith("NaN") ? "SBE_FLOAT_NAN" : value + "f";
24122421
break;
24132422

24142423
case INT64:
2415-
literal = value + "L";
2416-
if (value.equals("-9223372036854775808"))
2424+
{
2425+
final long longValue = Long.parseLong(value);
2426+
if (longValue == -9223372036854775808L)
24172427
{
24182428
literal = "INT64_MIN";
24192429
}
2430+
else
2431+
{
2432+
literal = "INT64_C(" + String.valueOf(longValue) + ")";
2433+
}
24202434
break;
2435+
}
24212436

24222437
case UINT64:
2423-
literal = "0x" + Long.toHexString(Long.parseLong(value)) + "L";
2438+
literal = "UINT64_C(0x" + Long.toHexString(Long.parseLong(value)) + ")";
24242439
break;
24252440

24262441
case DOUBLE:

0 commit comments

Comments
 (0)