Fixed: #1838 AS3 - Properly handling of long unsigned values, hex values, default uint values etc.

Changed: AS3 integer values are internally (e.g. in the lib) handled as java int type instead of long.
This commit is contained in:
Jindra Petřík
2022-10-22 15:27:44 +02:00
parent ef673667e2
commit d3477d910c
28 changed files with 1402 additions and 1424 deletions

View File

@@ -20,6 +20,7 @@ import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import java.math.BigInteger;
%%
@@ -188,10 +189,10 @@ XmlSQuoteStringChar = [^\r\n\']
/* integer literals */
DecIntegerLiteral = 0 | [1-9][0-9]*
HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8}
HexIntegerLiteral = 0 [xX] 0* {HexDigit}+
HexDigit = [0-9a-fA-F]
OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15}
OctIntegerLiteral = 0+ [1-3]? {OctDigit}+
OctDigit = [0-7]
/* floating point literals */
@@ -355,17 +356,29 @@ RegExp = \/([^\r\n/]|\\\/)+\/[a-z]*
{DecIntegerLiteral} {
try{
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext()));
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext()));
} catch(NumberFormatException nfe){
//its too long for a Long var
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(yytext()));
}
}
{HexIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext().substring(2), 16)); }
{OctIntegerLiteral} { return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext(), 8)); }
{HexIntegerLiteral} {
try {
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext().substring(2), 16));
} catch (NumberFormatException nfe) {
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext().substring(2), 16).doubleValue());
}
}
{OctIntegerLiteral} {
try {
return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Integer.parseInt(yytext(), 8));
} catch (NumberFormatException nfe) {
//its too long for an Integer var
return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, new BigInteger(yytext(), 8).doubleValue());
}
}
{DoubleLiteral} { return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble(yytext())); }
/* comments */