Skip to content

Commit 849cf50

Browse files
authored
Merge pull request #60 from robotpy/clear-template
Clear templates after using them
2 parents 266bf84 + b41f831 commit 849cf50

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

CppHeaderParser/CppHeaderParser.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2346,6 +2346,10 @@ def _evaluate_method_stack(self):
23462346
)
23472347
newMethod["parent"] = None
23482348
self.functions.append(newMethod)
2349+
2350+
# Reset template once it has been used
2351+
self.curTemplate = None
2352+
23492353
global parseHistory
23502354
parseHistory.append(
23512355
{
@@ -2549,6 +2553,7 @@ def _evaluate_class_stack(self):
25492553
self._get_location(self.nameStack),
25502554
self.curAccessSpecifier,
25512555
)
2556+
self.curTemplate = None
25522557
newClass["declaration_method"] = self.nameStack[0]
25532558
self.classes_order.append(newClass) # good idea to save ordering
25542559
self.stack = [] # fixes if class declared with ';' in closing brace

test/test_CppHeaderParser.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3978,5 +3978,37 @@ def test_fn(self):
39783978
self.assertEqual("N1::N2", c["namespace"])
39793979

39803980

3981+
class TemplateMustBeCleared(unittest.TestCase):
3982+
def setUp(self):
3983+
self.cppHeader = CppHeaderParser.CppHeader(
3984+
"""
3985+
template <int States, int Inputs> class LinearPlantInversionFeedforward {
3986+
public:
3987+
template <int Outputs>
3988+
LinearPlantInversionFeedforward(
3989+
const LinearSystem<States, Inputs, Outputs> &plant, units::second_t dt)
3990+
: LinearPlantInversionFeedforward(plant.A(), plant.B(), dt) {}
3991+
3992+
LinearPlantInversionFeedforward(
3993+
const Eigen::Matrix<double, States, States> &A,
3994+
const Eigen::Matrix<double, States, Inputs> &B, units::second_t dt)
3995+
: m_dt(dt) {
3996+
DiscretizeAB<States, Inputs>(A, B, dt, &m_A, &m_B);
3997+
3998+
m_r.setZero();
3999+
Reset(m_r);
4000+
}
4001+
};
4002+
""",
4003+
"string",
4004+
)
4005+
4006+
def test_fn(self):
4007+
c = self.cppHeader.classes["LinearPlantInversionFeedforward"]
4008+
self.assertEqual("LinearPlantInversionFeedforward", c["name"])
4009+
self.assertEqual("template<int Outputs>", c["methods"]["public"][0]["template"])
4010+
self.assertEqual(False, c["methods"]["public"][1]["template"])
4011+
4012+
39814013
if __name__ == "__main__":
39824014
unittest.main()

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy