/*
Testcase to test %pythonprepend and %pythonappend %pythoncode %pythonbegin
*/

%module python_append 

%pythoncode %{
mypath = os.path.dirname("/a/b/c/d.txt")
funcpath = None
staticfuncpath = None
def grabpath():
    return funcpath
def grabstaticpath():
    return staticfuncpath
def clearstaticpath():
    global staticfuncpath
    staticfuncpath = None
%}

%pythonappend Test::funk %{
funcpath = os.path.dirname(funcpath)
%}

%pythonprepend Test::funk %{
global funcpath
funcpath = mypath
%}

%pythonappend Test::static_func %{
staticfuncpath = os.path.basename(staticfuncpath)
pass   
%}

%pythonprepend Test::static_func {
global staticfuncpath
staticfuncpath = mypath
pass
}

%pythonbegin %{
import os.path
%}

%inline %{
class Test {
public:
  static void static_func() {}
  void funk() {}
};
%}

// Github issue #1674
%extend ForSlots {
  %pythoncode %{
        __slots__ = ["this"]
    %}
}
// While __slots__ does not contain 'ValidVariable' in the list, it is still possible
// to set 'ValidVariable'. A little odd, but the whole attribute setting is bypassed
// for setting C/C++ member variables.
// Not sure how to test the equivalent for -builtin.
%inline %{
struct ForSlots {
  int ValidVariable;
  ForSlots() : ValidVariable(99) {}
};
%}

%inline %{
#ifdef SWIGPYTHON_BUILTIN
bool is_python_builtin() { return true; }
#else
bool is_python_builtin() { return false; }
#endif
%}

