If it's not a recognised directive the scanner now emits MODULO and then rescans what follows, and if the parser then gives a syntax error we report it as an unknown directive. This means that `a%b` is now allowed in an expression, and that things like `%std::vector<std::string>` now give an error rather than being quietly ignored. Fixes #300 Fixes #368
26 lines
583 B
OpenEdge ABL
26 lines
583 B
OpenEdge ABL
%module constant_expr;
|
|
/* Tests of constant expressions (C++ version). */
|
|
|
|
%include "constant_expr_c.i"
|
|
|
|
%inline %{
|
|
|
|
// Testcase from https://sourceforge.net/p/swig/bugs/1139/
|
|
template<typename Tp>
|
|
struct SizeInfo {
|
|
enum {
|
|
isLarge = (sizeof(Tp)>sizeof(void*)),
|
|
isPointer = false
|
|
};
|
|
};
|
|
|
|
/* Regression test for #300, fixed in 4.1.0.
|
|
*
|
|
* Now `a%b` without a space after the `%` is handled as a modulus operator,
|
|
* but it gave a cryptic `Syntax error in input(1)` before SWIG 3.0.4, and from
|
|
* SWIG 3.0.4 until 4.1.0, `Unknown directive '%a'`.
|
|
*/
|
|
int a;
|
|
int test2(int b = 9%a);
|
|
|
|
%}
|