From 68308583b7d9e86a215e06c18eb09fa942f45ec0 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Fri, 7 May 2010 19:10:41 +0000 Subject: [PATCH] Apply patch #2955146 from Sergey Satskiy to fix expressions containing divide by operator in constructor initialization lists. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12013 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- CHANGES.current | 4 ++++ Examples/test-suite/common.mk | 1 + Examples/test-suite/expressions.i | 10 ++++++++++ Source/Swig/scanner.c | 4 ++++ 4 files changed, 19 insertions(+) create mode 100644 Examples/test-suite/expressions.i diff --git a/CHANGES.current b/CHANGES.current index 7c57b7040..a9d580153 100644 --- a/CHANGES.current +++ b/CHANGES.current @@ -1,6 +1,10 @@ Version 2.0.0 (in progress) ============================ +2010-05-07: wsfulton + Apply patch #2955146 from Sergey Satskiy to fix expressions containing divide by + operator in constructor initialization lists. + 2010-05-05: wsfulton [R] Memory leak fix handling const std::string & inputs, reported by Will Nolan. diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index 831b1b78f..1701dd8ba 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -193,6 +193,7 @@ CPP_TEST_CASES += \ extern_c \ extern_namespace \ extern_throws \ + expressions \ features \ fragments \ friends \ diff --git a/Examples/test-suite/expressions.i b/Examples/test-suite/expressions.i new file mode 100644 index 000000000..7b907ec3b --- /dev/null +++ b/Examples/test-suite/expressions.i @@ -0,0 +1,10 @@ +%module expressions + +%inline %{ +struct A +{ + A() : k( 20/(5-1) ) {} + A(int i) : k( 20/(5-1)*i /* comment */ ) {} + int k; +}; +%} diff --git a/Source/Swig/scanner.c b/Source/Swig/scanner.c index db7f0a06e..7f6e3e149 100644 --- a/Source/Swig/scanner.c +++ b/Source/Swig/scanner.c @@ -1182,6 +1182,10 @@ int Scanner_skip_balanced(Scanner * s, int startchar, int endchar) { state = 11; else if (c == '*') state = 12; + else if (c == startchar) { + state = 0; + num_levels++;; + } else state = 0; break;