mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -04:00
introduce ulong token type to better support hex numbers appearing in egg files
This commit is contained in:
parent
8e99a77974
commit
212bd64d9d
@ -275,7 +275,6 @@ eat_c_comment() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
// accept() is called below as each piece is pulled off and
|
||||
// accepted by the lexer; it increments the current column number.
|
||||
INLINE void accept() {
|
||||
@ -658,17 +657,17 @@ NUMERIC ([+-]?(([0-9]+[.]?)|([0-9]*[.][0-9]+))([eE][+-]?[0-9]+)?)
|
||||
{HEX} {
|
||||
// A hexadecimal integer number.
|
||||
accept();
|
||||
eggyylval._number = strtoul(yytext+2, NULL, 16);
|
||||
eggyylval._ulong = strtoul(yytext+2, NULL, 16);
|
||||
eggyylval._string = yytext;
|
||||
return NUMBER;
|
||||
return ULONG;
|
||||
}
|
||||
|
||||
{BINARY} {
|
||||
// A binary integer number.
|
||||
accept();
|
||||
eggyylval._number = strtoul(yytext+2, NULL, 2);
|
||||
eggyylval._ulong = strtoul(yytext+2, NULL, 2);
|
||||
eggyylval._string = yytext;
|
||||
return NUMBER;
|
||||
return ULONG;
|
||||
}
|
||||
|
||||
"nan"{HEX} {
|
||||
|
@ -111,6 +111,7 @@ egg_cleanup_parser() {
|
||||
%}
|
||||
|
||||
%token <_number> NUMBER
|
||||
%token <_ulong> ULONG
|
||||
%token <_string> STRING
|
||||
|
||||
%token BEZIERCURVE BFACE BILLBOARD BILLBOARDCENTER BUNDLE CLOSED
|
||||
@ -862,6 +863,7 @@ group_body:
|
||||
EggGroup *group = DCAST(EggGroup, egg_stack.back());
|
||||
string name = $3;
|
||||
double value = $<_number>5;
|
||||
unsigned long ulong_value = $<_ulong>5;
|
||||
string strval = $<_string>5;
|
||||
|
||||
if (cmp_nocase_uh(name, "fps") == 0) {
|
||||
@ -897,15 +899,15 @@ group_body:
|
||||
group->set_depth_test_mode(m);
|
||||
}
|
||||
} else if (cmp_nocase_uh(name, "draw_order") == 0) {
|
||||
group->set_draw_order((int)value);
|
||||
group->set_draw_order(ulong_value);
|
||||
} else if (cmp_nocase_uh(name, "bin") == 0) {
|
||||
group->set_bin(strval);
|
||||
} else if (cmp_nocase_uh(name, "collide_mask") == 0) {
|
||||
group->set_collide_mask((int)value);
|
||||
group->set_collide_mask(ulong_value);
|
||||
} else if (cmp_nocase_uh(name, "from_collide_mask") == 0) {
|
||||
group->set_from_collide_mask((int)value);
|
||||
group->set_from_collide_mask(ulong_value);
|
||||
} else if (cmp_nocase_uh(name, "into_collide_mask") == 0) {
|
||||
group->set_into_collide_mask((int)value);
|
||||
group->set_into_collide_mask(ulong_value);
|
||||
} else {
|
||||
eggyywarning("Unknown group scalar " + name);
|
||||
}
|
||||
@ -2291,6 +2293,10 @@ string:
|
||||
NUMBER
|
||||
{
|
||||
$$ = $<_string>1;
|
||||
}
|
||||
| ULONG
|
||||
{
|
||||
$$ = $<_string>1;
|
||||
}
|
||||
| STRING
|
||||
;
|
||||
@ -2344,24 +2350,37 @@ repeated_string_body:
|
||||
*/
|
||||
real:
|
||||
NUMBER
|
||||
| ULONG
|
||||
{
|
||||
$$ = $1;
|
||||
}
|
||||
;
|
||||
|
||||
/*
|
||||
* real_or_string
|
||||
*
|
||||
* enter:
|
||||
* exit: Returns a number as ($<_number>1) or a string (as $<_string>1).
|
||||
* exit: Returns a number as ($<_number>1) or as an unsigned long
|
||||
* ($<_ulong>1) or a string (as $<_string>1).
|
||||
*
|
||||
*/
|
||||
real_or_string:
|
||||
NUMBER
|
||||
{
|
||||
$<_number>$ = $1;
|
||||
$<_ulong>$ = (unsigned long)$1;
|
||||
$<_string>$ = $<_string>1;
|
||||
}
|
||||
| ULONG
|
||||
{
|
||||
$<_number>$ = $1;
|
||||
$<_ulong>$ = $1;
|
||||
$<_string>$ = $<_string>1;
|
||||
}
|
||||
| STRING
|
||||
{
|
||||
$<_number>$ = 0.0;
|
||||
$<_ulong>$ = 0;
|
||||
$<_string>$ = $1;
|
||||
}
|
||||
;
|
||||
@ -2382,6 +2401,10 @@ integer:
|
||||
eggyywarning("Integer expected.");
|
||||
$$ = (double)i;
|
||||
}
|
||||
}
|
||||
| ULONG
|
||||
{
|
||||
$$ = $1;
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -46,6 +46,7 @@ void egg_cleanup_parser();
|
||||
class EXPCL_PANDAEGG EggTokenType {
|
||||
public:
|
||||
double _number;
|
||||
unsigned long _ulong;
|
||||
string _string;
|
||||
PT(EggObject) _egg;
|
||||
PTA_double _number_list;
|
||||
|
Loading…
x
Reference in New Issue
Block a user