mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 08:44:19 -04:00
use int64 in parsing
This commit is contained in:
parent
9b3a2b9f98
commit
30ae40c21b
@ -130,7 +130,7 @@ input_chars(char *buffer, int &result, int max_size) {
|
||||
// from the stream, copy it into the current_line array. This
|
||||
// is because the \n.* rule below, which fills current_line
|
||||
// normally, doesn't catch the first line.
|
||||
strncpy(current_line, yytext, max_error_width);
|
||||
strncpy(current_line, dcyytext, max_error_width);
|
||||
current_line[max_error_width] = '\0';
|
||||
line_number++;
|
||||
col_number = 0;
|
||||
@ -318,7 +318,7 @@ REALNUM ([+-]?(([0-9]+[.])|([0-9]*[.][0-9]+))([eE][+-]?[0-9]+)?)
|
||||
// New line. Save a copy of the line so we can print it out for the
|
||||
// benefit of the user in case we get an error.
|
||||
|
||||
strncpy(current_line, yytext+1, max_error_width);
|
||||
strncpy(current_line, dcyytext+1, max_error_width);
|
||||
current_line[max_error_width] = '\0';
|
||||
line_number++;
|
||||
col_number=0;
|
||||
@ -464,7 +464,7 @@ mol[0-9]+ {
|
||||
// A molecular keyword.
|
||||
accept();
|
||||
dcyylval.u.integer = atoi(dcyytext + 3);
|
||||
dcyylval.str = yytext;
|
||||
dcyylval.str = dcyytext;
|
||||
return KW_MOL;
|
||||
}
|
||||
|
||||
@ -515,17 +515,47 @@ mol[0-9]+ {
|
||||
|
||||
{INTEGERNUM} {
|
||||
// An integer number.
|
||||
accept();
|
||||
dcyylval.u.integer = atoi(dcyytext);
|
||||
dcyylval.str = yytext;
|
||||
accept();
|
||||
|
||||
// atoll isn't fully portable, so we'll decode the integer by hand.
|
||||
dcyylval.u.integer = 0;
|
||||
bool neg = false;
|
||||
const char *p = dcyytext;
|
||||
if (*p == '-') {
|
||||
neg = true;
|
||||
++p;
|
||||
} else if (*p == '+') {
|
||||
++p;
|
||||
}
|
||||
while (*p != '\0') {
|
||||
dcyylval.u.integer = dcyylval.u.integer * 10 + (*p - '0');
|
||||
++p;
|
||||
}
|
||||
if (neg) {
|
||||
dcyylval.u.integer = -dcyylval.u.integer;
|
||||
}
|
||||
|
||||
dcyylval.str = dcyytext;
|
||||
return INTEGER;
|
||||
}
|
||||
|
||||
{HEXNUM} {
|
||||
// A hexadecimal integer number.
|
||||
accept();
|
||||
dcyylval.u.integer = strtoul(yytext+2, NULL, 16);
|
||||
dcyylval.str = yytext;
|
||||
|
||||
// As above, we'll decode the hex string by hand.
|
||||
dcyylval.u.integer = 0;
|
||||
const char *p = dcyytext + 2;
|
||||
while (*p != '\0') {
|
||||
if (isalpha(*p)) {
|
||||
dcyylval.u.integer = dcyylval.u.integer * 16 + (tolower(*p) - 'a' + 10);
|
||||
} else {
|
||||
dcyylval.u.integer = dcyylval.u.integer * 16 + (*p - '0');
|
||||
}
|
||||
++p;
|
||||
}
|
||||
|
||||
dcyylval.str = dcyytext;
|
||||
return INTEGER;
|
||||
}
|
||||
|
||||
@ -533,7 +563,7 @@ mol[0-9]+ {
|
||||
// A floating-point number.
|
||||
accept();
|
||||
dcyylval.u.real = atof(dcyytext);
|
||||
dcyylval.str = yytext;
|
||||
dcyylval.str = dcyytext;
|
||||
return REAL;
|
||||
}
|
||||
|
||||
@ -554,7 +584,7 @@ mol[0-9]+ {
|
||||
[A-Za-z_][A-Za-z_0-9]* {
|
||||
// Identifier.
|
||||
accept();
|
||||
dcyylval.str = yytext;
|
||||
dcyylval.str = dcyytext;
|
||||
return IDENTIFIER;
|
||||
}
|
||||
|
||||
|
@ -386,7 +386,7 @@ parameter_definition:
|
||||
parameter_value:
|
||||
INTEGER
|
||||
{
|
||||
current_packer->pack_int($1);
|
||||
current_packer->pack_int64($1);
|
||||
}
|
||||
| REAL
|
||||
{
|
||||
@ -427,7 +427,7 @@ parameter_value:
|
||||
| INTEGER '*' INTEGER
|
||||
{
|
||||
for (int i = 0; i < $3; i++) {
|
||||
current_packer->pack_int($1);
|
||||
current_packer->pack_int64($1);
|
||||
}
|
||||
}
|
||||
| REAL '*' INTEGER
|
||||
|
@ -44,7 +44,7 @@ int dcyyparse();
|
||||
class DCTokenType {
|
||||
public:
|
||||
union U {
|
||||
int integer;
|
||||
PN_int64 integer;
|
||||
double real;
|
||||
DCClass *dclass;
|
||||
DCAtomicField *atomic;
|
||||
|
Loading…
x
Reference in New Issue
Block a user