mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -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
|
// accept() is called below as each piece is pulled off and
|
||||||
// accepted by the lexer; it increments the current column number.
|
// accepted by the lexer; it increments the current column number.
|
||||||
INLINE void accept() {
|
INLINE void accept() {
|
||||||
@ -658,17 +657,17 @@ NUMERIC ([+-]?(([0-9]+[.]?)|([0-9]*[.][0-9]+))([eE][+-]?[0-9]+)?)
|
|||||||
{HEX} {
|
{HEX} {
|
||||||
// A hexadecimal integer number.
|
// A hexadecimal integer number.
|
||||||
accept();
|
accept();
|
||||||
eggyylval._number = strtoul(yytext+2, NULL, 16);
|
eggyylval._ulong = strtoul(yytext+2, NULL, 16);
|
||||||
eggyylval._string = yytext;
|
eggyylval._string = yytext;
|
||||||
return NUMBER;
|
return ULONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
{BINARY} {
|
{BINARY} {
|
||||||
// A binary integer number.
|
// A binary integer number.
|
||||||
accept();
|
accept();
|
||||||
eggyylval._number = strtoul(yytext+2, NULL, 2);
|
eggyylval._ulong = strtoul(yytext+2, NULL, 2);
|
||||||
eggyylval._string = yytext;
|
eggyylval._string = yytext;
|
||||||
return NUMBER;
|
return ULONG;
|
||||||
}
|
}
|
||||||
|
|
||||||
"nan"{HEX} {
|
"nan"{HEX} {
|
||||||
|
@ -111,6 +111,7 @@ egg_cleanup_parser() {
|
|||||||
%}
|
%}
|
||||||
|
|
||||||
%token <_number> NUMBER
|
%token <_number> NUMBER
|
||||||
|
%token <_ulong> ULONG
|
||||||
%token <_string> STRING
|
%token <_string> STRING
|
||||||
|
|
||||||
%token BEZIERCURVE BFACE BILLBOARD BILLBOARDCENTER BUNDLE CLOSED
|
%token BEZIERCURVE BFACE BILLBOARD BILLBOARDCENTER BUNDLE CLOSED
|
||||||
@ -862,6 +863,7 @@ group_body:
|
|||||||
EggGroup *group = DCAST(EggGroup, egg_stack.back());
|
EggGroup *group = DCAST(EggGroup, egg_stack.back());
|
||||||
string name = $3;
|
string name = $3;
|
||||||
double value = $<_number>5;
|
double value = $<_number>5;
|
||||||
|
unsigned long ulong_value = $<_ulong>5;
|
||||||
string strval = $<_string>5;
|
string strval = $<_string>5;
|
||||||
|
|
||||||
if (cmp_nocase_uh(name, "fps") == 0) {
|
if (cmp_nocase_uh(name, "fps") == 0) {
|
||||||
@ -897,15 +899,15 @@ group_body:
|
|||||||
group->set_depth_test_mode(m);
|
group->set_depth_test_mode(m);
|
||||||
}
|
}
|
||||||
} else if (cmp_nocase_uh(name, "draw_order") == 0) {
|
} 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) {
|
} else if (cmp_nocase_uh(name, "bin") == 0) {
|
||||||
group->set_bin(strval);
|
group->set_bin(strval);
|
||||||
} else if (cmp_nocase_uh(name, "collide_mask") == 0) {
|
} 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) {
|
} 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) {
|
} 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 {
|
} else {
|
||||||
eggyywarning("Unknown group scalar " + name);
|
eggyywarning("Unknown group scalar " + name);
|
||||||
}
|
}
|
||||||
@ -2291,6 +2293,10 @@ string:
|
|||||||
NUMBER
|
NUMBER
|
||||||
{
|
{
|
||||||
$$ = $<_string>1;
|
$$ = $<_string>1;
|
||||||
|
}
|
||||||
|
| ULONG
|
||||||
|
{
|
||||||
|
$$ = $<_string>1;
|
||||||
}
|
}
|
||||||
| STRING
|
| STRING
|
||||||
;
|
;
|
||||||
@ -2344,24 +2350,37 @@ repeated_string_body:
|
|||||||
*/
|
*/
|
||||||
real:
|
real:
|
||||||
NUMBER
|
NUMBER
|
||||||
|
| ULONG
|
||||||
|
{
|
||||||
|
$$ = $1;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* real_or_string
|
* real_or_string
|
||||||
*
|
*
|
||||||
* enter:
|
* 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:
|
real_or_string:
|
||||||
NUMBER
|
NUMBER
|
||||||
{
|
{
|
||||||
$<_number>$ = $1;
|
$<_number>$ = $1;
|
||||||
|
$<_ulong>$ = (unsigned long)$1;
|
||||||
|
$<_string>$ = $<_string>1;
|
||||||
|
}
|
||||||
|
| ULONG
|
||||||
|
{
|
||||||
|
$<_number>$ = $1;
|
||||||
|
$<_ulong>$ = $1;
|
||||||
$<_string>$ = $<_string>1;
|
$<_string>$ = $<_string>1;
|
||||||
}
|
}
|
||||||
| STRING
|
| STRING
|
||||||
{
|
{
|
||||||
$<_number>$ = 0.0;
|
$<_number>$ = 0.0;
|
||||||
|
$<_ulong>$ = 0;
|
||||||
$<_string>$ = $1;
|
$<_string>$ = $1;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
@ -2382,6 +2401,10 @@ integer:
|
|||||||
eggyywarning("Integer expected.");
|
eggyywarning("Integer expected.");
|
||||||
$$ = (double)i;
|
$$ = (double)i;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
| ULONG
|
||||||
|
{
|
||||||
|
$$ = $1;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@ void egg_cleanup_parser();
|
|||||||
class EXPCL_PANDAEGG EggTokenType {
|
class EXPCL_PANDAEGG EggTokenType {
|
||||||
public:
|
public:
|
||||||
double _number;
|
double _number;
|
||||||
|
unsigned long _ulong;
|
||||||
string _string;
|
string _string;
|
||||||
PT(EggObject) _egg;
|
PT(EggObject) _egg;
|
||||||
PTA_double _number_list;
|
PTA_double _number_list;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user