mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
Allow const variables with initializers to be used in expressions (like enum definitions). Also fix compiler warning.
This commit is contained in:
parent
0e16497401
commit
5437a3e5a9
@ -132,10 +132,10 @@ void *CPPExpression::Result::
|
|||||||
as_pointer() const {
|
as_pointer() const {
|
||||||
switch (_type) {
|
switch (_type) {
|
||||||
case RT_integer:
|
case RT_integer:
|
||||||
return (void *)_u._integer;
|
return reinterpret_cast<void*>((long)_u._integer);
|
||||||
|
|
||||||
case RT_real:
|
case RT_real:
|
||||||
return (void *)(int)_u._real;
|
return reinterpret_cast<void*>((long)_u._real);
|
||||||
|
|
||||||
case RT_pointer:
|
case RT_pointer:
|
||||||
return _u._pointer;
|
return _u._pointer;
|
||||||
@ -400,6 +400,16 @@ evaluate() const {
|
|||||||
return Result();
|
return Result();
|
||||||
|
|
||||||
case T_variable:
|
case T_variable:
|
||||||
|
if (_u._variable->_type != NULL &&
|
||||||
|
_u._variable->_initializer != NULL) {
|
||||||
|
// A const variable. Fetch its assigned value.
|
||||||
|
CPPConstType *const_type = _u._variable->_type->as_const_type();
|
||||||
|
if (const_type != NULL) {
|
||||||
|
return _u._variable->_initializer->evaluate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Result();
|
||||||
|
|
||||||
case T_function:
|
case T_function:
|
||||||
return Result();
|
return Result();
|
||||||
|
|
||||||
@ -889,6 +899,14 @@ bool CPPExpression::
|
|||||||
is_tbd() const {
|
is_tbd() const {
|
||||||
switch (_type) {
|
switch (_type) {
|
||||||
case T_variable:
|
case T_variable:
|
||||||
|
if (_u._variable->_type != NULL &&
|
||||||
|
_u._variable->_initializer != NULL) {
|
||||||
|
CPPConstType *const_type = _u._variable->_type->as_const_type();
|
||||||
|
if (const_type != NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case T_typecast:
|
case T_typecast:
|
||||||
@ -978,6 +996,15 @@ output(ostream &out, int indent_level, CPPScope *scope, bool) const {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case T_variable:
|
case T_variable:
|
||||||
|
if (_u._variable->_type != NULL &&
|
||||||
|
_u._variable->_initializer != NULL) {
|
||||||
|
// A const variable. Fetch its assigned value.
|
||||||
|
CPPConstType *const_type = _u._variable->_type->as_const_type();
|
||||||
|
if (const_type != NULL) {
|
||||||
|
_u._variable->_initializer->output(out, indent_level, scope, false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
_u._variable->_ident->output(out, scope);
|
_u._variable->_ident->output(out, scope);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user