mirror of https://github.com/swig/swig
156 lines
4.9 KiB
OpenEdge ABL
156 lines
4.9 KiB
OpenEdge ABL
%module assign_const
|
|
|
|
%{
|
|
#if defined(_MSC_VER)
|
|
#pragma warning(disable : 4351) // warning C4351: new behavior: elements of array 'AssignArray::ArrayMember' will be default initialized
|
|
#endif
|
|
%}
|
|
|
|
// Similar to assign_reference.i testcase but reference member variables replaced by const members
|
|
|
|
%rename(Assign) *::operator=;
|
|
|
|
// (1) Test directly non-assignable member variables
|
|
%inline %{
|
|
struct AssignValue {
|
|
AssignValue() : ValueMember() {}
|
|
const int ValueMember;
|
|
};
|
|
|
|
struct AssignArray {
|
|
AssignArray() : ArrayMember() {}
|
|
const int ArrayMember[1];
|
|
};
|
|
|
|
struct AssignPtr {
|
|
AssignPtr() : PtrMember() {}
|
|
int *const PtrMember;
|
|
};
|
|
|
|
struct AssignMatrix {
|
|
AssignMatrix() : MatrixMember() {}
|
|
const int MatrixMember[2][2];
|
|
};
|
|
|
|
struct MemberVars {
|
|
// These will only have getters
|
|
AssignValue MemberValue;
|
|
AssignArray MemberArray;
|
|
AssignPtr MemberPtr;
|
|
AssignMatrix MemberMatrix;
|
|
};
|
|
|
|
// (2) Test indirectly non-assignable member variables via inheritance
|
|
struct AssignValueDerived : AssignValue {};
|
|
struct AssignArrayDerived : AssignArray {};
|
|
struct AssignPtrDerived : AssignPtr {};
|
|
struct AssignMatrixDerived : AssignMatrix {};
|
|
struct AssignValueDerivedSettable : AssignValue {
|
|
AssignValueDerivedSettable& operator=(const AssignValueDerivedSettable &) { return *this; }
|
|
};
|
|
struct AssignArrayDerivedSettable : AssignArray {
|
|
AssignArrayDerivedSettable& operator=(const AssignArrayDerivedSettable &) { return *this; }
|
|
};
|
|
struct AssignPtrDerivedSettable : AssignPtr {
|
|
AssignPtrDerivedSettable& operator=(const AssignPtrDerivedSettable &) { return *this; }
|
|
};
|
|
struct AssignMatrixDerivedSettable : AssignMatrix {
|
|
AssignMatrixDerivedSettable& operator=(const AssignMatrixDerivedSettable &) { return *this; }
|
|
};
|
|
|
|
struct InheritedMemberVars {
|
|
// These will only have getters
|
|
AssignValueDerived MemberValueDerived;
|
|
AssignArrayDerived MemberArrayDerived;
|
|
AssignPtrDerived MemberPtrDerived;
|
|
AssignMatrixDerived MemberMatrixDerived;
|
|
|
|
static AssignValueDerived StaticMemberValueDerived;
|
|
static AssignArrayDerived StaticMemberArrayDerived;
|
|
static AssignPtrDerived StaticMemberPtrDerived;
|
|
static AssignMatrixDerived StaticMemberMatrixDerived;
|
|
|
|
// These will have getters and setters
|
|
AssignValueDerivedSettable MemberValueDerivedSettable;
|
|
AssignArrayDerivedSettable MemberArrayDerivedSettable;
|
|
AssignPtrDerivedSettable MemberPtrDerivedSettable;
|
|
AssignMatrixDerivedSettable MemberMatrixDerivedSettable;
|
|
|
|
static AssignValueDerivedSettable StaticMemberValueDerivedSettable;
|
|
static AssignArrayDerivedSettable StaticMemberArrayDerivedSettable;
|
|
static AssignPtrDerivedSettable StaticMemberPtrDerivedSettable;
|
|
static AssignMatrixDerivedSettable StaticMemberMatrixDerivedSettable;
|
|
};
|
|
|
|
AssignValueDerived InheritedMemberVars::StaticMemberValueDerived;
|
|
AssignArrayDerived InheritedMemberVars::StaticMemberArrayDerived;
|
|
AssignPtrDerived InheritedMemberVars::StaticMemberPtrDerived;
|
|
AssignMatrixDerived InheritedMemberVars::StaticMemberMatrixDerived;
|
|
|
|
AssignValueDerivedSettable InheritedMemberVars::StaticMemberValueDerivedSettable;
|
|
AssignArrayDerivedSettable InheritedMemberVars::StaticMemberArrayDerivedSettable;
|
|
AssignPtrDerivedSettable InheritedMemberVars::StaticMemberPtrDerivedSettable;
|
|
AssignMatrixDerivedSettable InheritedMemberVars::StaticMemberMatrixDerivedSettable;
|
|
|
|
// These will only have getters
|
|
AssignValueDerived GlobalValueDerived;
|
|
AssignArrayDerived GlobalArrayDerived;
|
|
AssignPtrDerived GlobalPtrDerived;
|
|
AssignMatrixDerived GlobalMatrixDerived;
|
|
|
|
// These will have getters and setters
|
|
AssignValueDerivedSettable GlobalValueDerivedSettable;
|
|
AssignArrayDerivedSettable GlobalArrayDerivedSettable;
|
|
AssignPtrDerivedSettable GlobalPtrDerivedSettable;
|
|
AssignMatrixDerivedSettable GlobalMatrixDerivedSettable;
|
|
%}
|
|
|
|
// (3) Test indirectly non-assignable member variables via classes that themselves have non-assignable member variables
|
|
%inline %{
|
|
struct MemberValueVar {
|
|
AssignValue MemberValue;
|
|
};
|
|
|
|
struct MemberArrayVar {
|
|
AssignArray MemberArray;
|
|
};
|
|
|
|
struct MemberPtrVar {
|
|
AssignPtr MemberPtr;
|
|
};
|
|
|
|
struct MemberMatrixVar {
|
|
AssignMatrix MemberMatrix;
|
|
};
|
|
|
|
struct MembersMemberVars {
|
|
// These will only have getters
|
|
MemberValueVar MemberValue;
|
|
MemberArrayVar MemberArray;
|
|
MemberPtrVar MemberPtr;
|
|
MemberMatrixVar MemberMatrix;
|
|
};
|
|
|
|
struct StaticMembersMemberVars {
|
|
static MemberValueVar StaticMemberValue;
|
|
static MemberArrayVar StaticMemberArray;
|
|
static MemberPtrVar StaticMemberPtr;
|
|
static MemberMatrixVar StaticMemberMatrix;
|
|
};
|
|
MemberValueVar StaticMembersMemberVars::StaticMemberValue;
|
|
MemberArrayVar StaticMembersMemberVars::StaticMemberArray;
|
|
MemberPtrVar StaticMembersMemberVars::StaticMemberPtr;
|
|
MemberMatrixVar StaticMembersMemberVars::StaticMemberMatrix;
|
|
|
|
MemberValueVar GlobalMemberValue;
|
|
MemberArrayVar GlobalMemberArray;
|
|
MemberPtrVar GlobalMemberPtr;
|
|
MemberMatrixVar GlobalMemberMatrix;
|
|
|
|
// Setters and getters available
|
|
struct StaticMembersMemberVarsHolder {
|
|
StaticMembersMemberVars Member;
|
|
};
|
|
StaticMembersMemberVars GlobalStaticMembersMemberVars;
|
|
%}
|