Browse Source

cppparser: prevent enum values having long chain of additions

See #1638

[skip ci]
rdb 1 year ago
parent
commit
d1c277ef6a
1 changed files with 8 additions and 0 deletions
  1. 8 0
      dtool/src/cppparser/cppEnumType.cxx

+ 8 - 0
dtool/src/cppparser/cppEnumType.cxx

@@ -117,6 +117,14 @@ add_element(const std::string &name, CPPExpression *value,
     } else if (_last_value->_type == CPPExpression::T_integer) {
     } else if (_last_value->_type == CPPExpression::T_integer) {
       value = new CPPExpression(_last_value->_u._integer + 1);
       value = new CPPExpression(_last_value->_u._integer + 1);
 
 
+    } else if (_last_value->_type == CPPExpression::T_binary_operation &&
+               _last_value->_u._op._operator == '+' &&
+               _last_value->_u._op._op2->_type == CPPExpression::T_integer) {
+      // Prevent an endless expansion of + expressions.
+      value = new CPPExpression('+',
+        _last_value->_u._op._op1,
+        new CPPExpression(_last_value->_u._op._op2->_u._integer + 1));
+
     } else {
     } else {
       // We may not be able to determine the value just yet.  No problem;
       // We may not be able to determine the value just yet.  No problem;
       // we'll just define it as another expression.
       // we'll just define it as another expression.