You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1181 lines
49 KiB
1181 lines
49 KiB
/* |
|
* The main header file for SIP. |
|
* |
|
* Copyright (c) 2010 Riverbank Computing Limited <info@riverbankcomputing.com> |
|
* |
|
* This file is part of SIP. |
|
* |
|
* This copy of SIP is licensed for use under the terms of the SIP License |
|
* Agreement. See the file LICENSE for more details. |
|
* |
|
* This copy of SIP may also used under the terms of the GNU General Public |
|
* License v2 or v3 as published by the Free Software Foundation which can be |
|
* found in the files LICENSE-GPL2 and LICENSE-GPL3 included in this package. |
|
* |
|
* SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
|
*/ |
|
|
|
|
|
#ifndef SIP_H |
|
#define SIP_H |
|
|
|
#include <stdio.h> |
|
#include <sys/types.h> |
|
|
|
#include <tqt.h> |
|
|
|
#ifdef TRUE |
|
#undef TRUE |
|
#endif |
|
|
|
#ifdef FALSE |
|
#undef FALSE |
|
#endif |
|
|
|
#define TRUE 1 |
|
#define FALSE 0 |
|
|
|
|
|
#define DEFAULT_OFILE_EXT ".o" /* Default object file extension. */ |
|
|
|
#define MAX_NR_ARGS 20 /* Max. nr. args. to a function or template. */ |
|
|
|
|
|
/* For convenience. */ |
|
|
|
#define classBaseName(cd) scopedNameTail((cd)->iff->fqcname) |
|
#define classFTQCName(cd) ((cd)->iff->fqcname) |
|
|
|
|
|
/* Handle module flags. */ |
|
|
|
#define MOD_HAS_DELAYED_DTORS 0x0001 /* It has a class with a delayed dtor. */ |
|
#define MOD_IS_CONSOLIDATED 0x0002 /* It is a consolidated module. */ |
|
#define MOD_IS_COMPOSITE 0x0004 /* It is a composite module. */ |
|
#define MOD_IS_TRANSFORMED 0x0008 /* It's types have been transformed. */ |
|
|
|
#define hasDelayedDtors(m) ((m)->modflags & MOD_HAS_DELAYED_DTORS) |
|
#define setHasDelayedDtors(m) ((m)->modflags |= MOD_HAS_DELAYED_DTORS) |
|
#define isConsolidated(m) ((m)->modflags & MOD_IS_CONSOLIDATED) |
|
#define setIsConsolidated(m) ((m)->modflags |= MOD_IS_CONSOLIDATED) |
|
#define isComposite(m) ((m)->modflags & MOD_IS_COMPOSITE) |
|
#define setIsComposite(m) ((m)->modflags |= MOD_IS_COMPOSITE) |
|
#define isContainer(m) ((m)->modflags & (MOD_IS_CONSOLIDATED | MOD_IS_COMPOSITE)) |
|
#define setIsTransformed(m) ((m)->modflags |= MOD_IS_TRANSFORMED) |
|
#define isTransformed(m) ((m)->modflags & MOD_IS_TRANSFORMED) |
|
|
|
|
|
/* Handle section flags. */ |
|
|
|
#define SECT_IS_PUBLIC 0x01 /* It is public. */ |
|
#define SECT_IS_PROT 0x02 /* It is protected. */ |
|
#define SECT_IS_PRIVATE 0x04 /* It is private. */ |
|
#define SECT_IS_SLOT 0x08 /* It is a slot. */ |
|
#define SECT_IS_SIGNAL 0x10 /* It is a signal. */ |
|
#define SECT_MASK 0x1f /* The mask of all flags. */ |
|
|
|
|
|
/* Handle class flags. These are combined with the section flags. */ |
|
|
|
#define CLASS_HAS_SIGSLOTS 0x00000200 /* It has signals or slots. */ |
|
#define CLASS_IS_ABSTRACT 0x00000400 /* It is an abstract class. */ |
|
#define CLASS_HAS_SHADOW 0x00000800 /* It is has a shadow class. */ |
|
#define CLASS_IS_OPAQUE 0x00001000 /* It is opaque. */ |
|
#define CLASS_HAS_VAR_HANDLERS 0x00002000 /* It has variable handlers. */ |
|
#define CLASS_DTOR_RELEASE_GIL 0x00004000 /* The dtor releases the GIL. */ |
|
#define CLASS_IS_PROTECTED 0x00008000 /* It is protected. */ |
|
#define CLASS_IS_PROTECTED_SAV 0x00010000 /* It is protected (saved). */ |
|
#define CLASS_IS_INCOMPLETE 0x00020000 /* The specification is incomplete. */ |
|
#define CLASS_CAN_CREATE 0x00040000 /* It has usable ctors. */ |
|
#define CLASS_IS_EXTERNAL 0x00080000 /* It is external. */ |
|
#define CLASS_IS_DELAYED_DTOR 0x00100000 /* The dtor is delayed. */ |
|
#define CLASS_NO_DEFAULT_CTORS 0x00200000 /* Don't create default ctors. */ |
|
#define CLASS_TQOBJECT_SUB 0x00400000 /* It is derived from TQObject. */ |
|
#define CLASS_DTOR_HOLD_GIL 0x00800000 /* The dtor holds the GIL. */ |
|
#define CLASS_ASSIGN_HELPER 0x01000000 /* Generate an assignment helper. */ |
|
#define CLASS_NO_TQMETAOBJECT 0x02000000 /* It has no TQMetaObject. */ |
|
#define CLASS_IS_TEMPLATE 0x04000000 /* It is a template class. */ |
|
#define CLASS_IS_DEPRECATED 0x08000000 /* It is deprecated. */ |
|
#define CLASS_CANNOT_COPY 0x10000000 /* It cannot be copied. */ |
|
#define CLASS_CANNOT_ASSIGN 0x20000000 /* It cannot be assigned. */ |
|
#define CLASS_ALLOW_NONE 0x40000000 /* The class will handle None. */ |
|
|
|
#define hasSigSlots(cd) ((cd)->classflags & CLASS_HAS_SIGSLOTS) |
|
#define setHasSigSlots(cd) ((cd)->classflags |= CLASS_HAS_SIGSLOTS) |
|
#define isAbstractClass(cd) ((cd)->classflags & CLASS_IS_ABSTRACT) |
|
#define setIsAbstractClass(cd) ((cd)->classflags |= CLASS_IS_ABSTRACT) |
|
#define hasShadow(cd) ((cd)->classflags & CLASS_HAS_SHADOW) |
|
#define setHasShadow(cd) ((cd)->classflags |= CLASS_HAS_SHADOW) |
|
#define resetHasShadow(cd) ((cd)->classflags &= ~CLASS_HAS_SHADOW) |
|
#define isOpaque(cd) ((cd)->classflags & CLASS_IS_OPAQUE) |
|
#define setIsOpaque(cd) ((cd)->classflags |= CLASS_IS_OPAQUE) |
|
#define hasVarHandlers(cd) ((cd)->classflags & CLASS_HAS_VAR_HANDLERS) |
|
#define setHasVarHandlers(cd) ((cd)->classflags |= CLASS_HAS_VAR_HANDLERS) |
|
#define isProtectedClass(cd) ((cd)->classflags & CLASS_IS_PROTECTED) |
|
#define setIsProtectedClass(cd) ((cd)->classflags |= CLASS_IS_PROTECTED) |
|
#define resetIsProtectedClass(cd) ((cd)->classflags &= ~CLASS_IS_PROTECTED) |
|
#define wasProtectedClass(cd) ((cd)->classflags & CLASS_IS_PROTECTED_SAV) |
|
#define setWasProtectedClass(cd) ((cd)->classflags |= CLASS_IS_PROTECTED_SAV) |
|
#define resetWasProtectedClass(cd) ((cd)->classflags &= ~CLASS_IS_PROTECTED_SAV) |
|
#define isReleaseGILDtor(cd) ((cd)->classflags & CLASS_DTOR_RELEASE_GIL) |
|
#define setIsReleaseGILDtor(cd) ((cd)->classflags |= CLASS_DTOR_RELEASE_GIL) |
|
#define isIncomplete(cd) ((cd)->classflags & CLASS_IS_INCOMPLETE) |
|
#define setIsIncomplete(cd) ((cd)->classflags |= CLASS_IS_INCOMPLETE) |
|
#define canCreate(cd) ((cd)->classflags & CLASS_CAN_CREATE) |
|
#define setCanCreate(cd) ((cd)->classflags |= CLASS_CAN_CREATE) |
|
#define resetCanCreate(cd) ((cd)->classflags &= ~CLASS_CAN_CREATE) |
|
#define isExternal(cd) ((cd)->classflags & CLASS_IS_EXTERNAL) |
|
#define setIsExternal(cd) ((cd)->classflags |= CLASS_IS_EXTERNAL) |
|
#define isDelayedDtor(cd) ((cd)->classflags & CLASS_IS_DELAYED_DTOR) |
|
#define setIsDelayedDtor(cd) ((cd)->classflags |= CLASS_IS_DELAYED_DTOR) |
|
#define noDefaultCtors(cd) ((cd)->classflags & CLASS_NO_DEFAULT_CTORS) |
|
#define setNoDefaultCtors(cd) ((cd)->classflags |= CLASS_NO_DEFAULT_CTORS) |
|
#define isTQObjectSubClass(cd) ((cd)->classflags & CLASS_TQOBJECT_SUB) |
|
#define setIsTQObjectSubClass(cd) ((cd)->classflags |= CLASS_TQOBJECT_SUB) |
|
#define isHoldGILDtor(cd) ((cd)->classflags & CLASS_DTOR_HOLD_GIL) |
|
#define setIsHoldGILDtor(cd) ((cd)->classflags |= CLASS_DTOR_HOLD_GIL) |
|
#define assignmentHelper(cd) ((cd)->classflags & CLASS_ASSIGN_HELPER) |
|
#define setAssignmentHelper(cd) ((cd)->classflags |= CLASS_ASSIGN_HELPER) |
|
#define noPyTQt4TQMetaObject(cd) ((cd)->classflags & CLASS_NO_TQMETAOBJECT) |
|
#define setPyTQt4NoTQMetaObject(cd) ((cd)->classflags |= CLASS_NO_TQMETAOBJECT) |
|
#define isTemplateClass(cd) ((cd)->classflags & CLASS_IS_TEMPLATE) |
|
#define setIsTemplateClass(cd) ((cd)->classflags |= CLASS_IS_TEMPLATE) |
|
#define resetIsTemplateClass(cd) ((cd)->classflags &= ~CLASS_IS_TEMPLATE) |
|
#define isDeprecatedClass(cd) ((cd)->classflags & CLASS_IS_DEPRECATED) |
|
#define setIsDeprecatedClass(cd) ((cd)->classflags |= CLASS_IS_DEPRECATED) |
|
#define cannotCopy(cd) ((cd)->classflags & CLASS_CANNOT_COPY) |
|
#define setCannotCopy(cd) ((cd)->classflags |= CLASS_CANNOT_COPY) |
|
#define cannotAssign(cd) ((cd)->classflags & CLASS_CANNOT_ASSIGN) |
|
#define setCannotAssign(cd) ((cd)->classflags |= CLASS_CANNOT_ASSIGN) |
|
#define classHandlesNone(cd) ((cd)->classflags & CLASS_ALLOW_NONE) |
|
#define setClassHandlesNone(cd) ((cd)->classflags |= CLASS_ALLOW_NONE) |
|
|
|
#define isPublicDtor(cd) ((cd)->classflags & SECT_IS_PUBLIC) |
|
#define setIsPublicDtor(cd) ((cd)->classflags |= SECT_IS_PUBLIC) |
|
#define isProtectedDtor(cd) ((cd)->classflags & SECT_IS_PROT) |
|
#define isPrivateDtor(cd) ((cd)->classflags & SECT_IS_PRIVATE) |
|
|
|
#define isDtor(cd) ((cd)->classflags & (SECT_IS_PUBLIC | SECT_IS_PROT | SECT_IS_PRIVATE)) |
|
|
|
|
|
/* Handle ctor flags. These are combined with the section flags. */ |
|
|
|
#define CTOR_RELEASE_GIL 0x00000100 /* The ctor releases the GIL. */ |
|
#define CTOR_EXPLICIT 0x00000200 /* The ctor is explicit. */ |
|
#define CTOR_CAST 0x00000400 /* The ctor is a cast. */ |
|
#define CTOR_HOLD_GIL 0x00000800 /* The ctor holds the GIL. */ |
|
#define CTOR_XFERRED 0x00001000 /* Ownership is transferred. */ |
|
#define CTOR_IS_DEPRECATED 0x00002000 /* The ctor is deprecated. */ |
|
#define CTOR_KEYWORD_ARGS 0x00004000 /* The ctor allows keyword arguments. */ |
|
|
|
#define isPublicCtor(c) ((c)->ctorflags & SECT_IS_PUBLIC) |
|
#define setIsPublicCtor(c) ((c)->ctorflags |= SECT_IS_PUBLIC) |
|
#define isProtectedCtor(c) ((c)->ctorflags & SECT_IS_PROT) |
|
#define setIsProtectedCtor(c) ((c)->ctorflags |= SECT_IS_PROT) |
|
#define isPrivateCtor(c) ((c)->ctorflags & SECT_IS_PRIVATE) |
|
#define setIsPrivateCtor(c) ((c)->ctorflags |= SECT_IS_PRIVATE) |
|
|
|
#define isReleaseGILCtor(c) ((c)->ctorflags & CTOR_RELEASE_GIL) |
|
#define setIsReleaseGILCtor(c) ((c)->ctorflags |= CTOR_RELEASE_GIL) |
|
#define isExplicitCtor(c) ((c)->ctorflags & CTOR_EXPLICIT) |
|
#define setIsExplicitCtor(c) ((c)->ctorflags |= CTOR_EXPLICIT) |
|
#define isCastCtor(c) ((c)->ctorflags & CTOR_CAST) |
|
#define isHoldGILCtor(c) ((c)->ctorflags & CTOR_HOLD_GIL) |
|
#define setIsHoldGILCtor(c) ((c)->ctorflags |= CTOR_HOLD_GIL) |
|
#define isResultTransferredCtor(c) ((c)->ctorflags & CTOR_XFERRED) |
|
#define setIsResultTransferredCtor(c) ((c)->ctorflags |= CTOR_XFERRED) |
|
#define isDeprecatedCtor(c) ((c)->ctorflags & CTOR_IS_DEPRECATED) |
|
#define setIsDeprecatedCtor(c) ((c)->ctorflags |= CTOR_IS_DEPRECATED) |
|
#define useKeywordArgsCtor(c) ((c)->ctorflags & CTOR_KEYWORD_ARGS) |
|
#define setUseKeywordArgsCtor(c) ((c)->ctorflags |= CTOR_KEYWORD_ARGS) |
|
|
|
|
|
/* Handle member flags. */ |
|
|
|
#define MEMBR_NUMERIC 0x0001 /* It is a numeric slot. */ |
|
#define MEMBR_NO_ARG_PARSER 0x0002 /* Don't generate an argument parser. */ |
|
#define MEMBR_NOT_VERSIONED 0x0004 /* There is an unversioned overload. */ |
|
#define MEMBR_KEYWORD_ARGS 0x0008 /* It allows keyword arguments. */ |
|
|
|
#define isNumeric(m) ((m)->memberflags & MEMBR_NUMERIC) |
|
#define setIsNumeric(m) ((m)->memberflags |= MEMBR_NUMERIC) |
|
#define noArgParser(m) ((m)->memberflags & MEMBR_NO_ARG_PARSER) |
|
#define setNoArgParser(m) ((m)->memberflags |= MEMBR_NO_ARG_PARSER) |
|
#define notVersioned(m) ((m)->memberflags & MEMBR_NOT_VERSIONED) |
|
#define setNotVersioned(m) ((m)->memberflags |= MEMBR_NOT_VERSIONED) |
|
#define useKeywordArgsFunction(m) ((m)->memberflags & MEMBR_KEYWORD_ARGS) |
|
#define setUseKeywordArgsFunction(m) ((m)->memberflags |= MEMBR_KEYWORD_ARGS) |
|
|
|
|
|
/* Handle enum flags. These are combined with the section flags. */ |
|
|
|
#define ENUM_WAS_PROT 0x00000100 /* It was defined as protected. */ |
|
|
|
#define isProtectedEnum(e) ((e)->enumflags & SECT_IS_PROT) |
|
#define setIsProtectedEnum(e) ((e)->enumflags |= SECT_IS_PROT) |
|
#define resetIsProtectedEnum(e) ((e)->enumflags &= ~SECT_IS_PROT) |
|
|
|
#define wasProtectedEnum(e) ((e)->enumflags & ENUM_WAS_PROT) |
|
#define setWasProtectedEnum(e) ((e)->enumflags |= ENUM_WAS_PROT) |
|
#define resetWasProtectedEnum(e) ((e)->enumflags &= ~ENUM_WAS_PROT) |
|
|
|
|
|
/* Handle hierarchy flags. */ |
|
|
|
#define HIER_IS_DUPLICATE 0x0001 /* It is a super class duplicate. */ |
|
#define HIER_HAS_DUPLICATE 0x0002 /* It has a super class duplicate. */ |
|
#define HIER_BEING_SET 0x0004 /* The MRO is being set. */ |
|
|
|
#define isDuplicateSuper(m) ((m)->mroflags & HIER_IS_DUPLICATE) |
|
#define setIsDuplicateSuper(m) ((m)->mroflags |= HIER_IS_DUPLICATE) |
|
#define hasDuplicateSuper(m) ((m)->mroflags & HIER_HAS_DUPLICATE) |
|
#define setHasDuplicateSuper(m) ((m)->mroflags |= HIER_HAS_DUPLICATE) |
|
#define hierBeingSet(m) ((m)->mroflags & HIER_BEING_SET) |
|
#define setHierBeingSet(m) ((m)->mroflags |= HIER_BEING_SET) |
|
#define resetHierBeingSet(m) ((m)->mroflags &= ~HIER_BEING_SET) |
|
|
|
|
|
/* Handle overload flags. These are combined with the section flags. */ |
|
|
|
#define OVER_IS_VIRTUAL 0x00000100 /* It is virtual. */ |
|
#define OVER_IS_ABSTRACT 0x00000200 /* It is abstract. */ |
|
#define OVER_IS_CONST 0x00000400 /* It is a const function. */ |
|
#define OVER_IS_STATIC 0x00000800 /* It is a static function. */ |
|
#define OVER_IS_AUTOGEN 0x00001000 /* It is auto-generated. */ |
|
#define OVER_IS_NEW_THREAD 0x00002000 /* It is in a new thread. */ |
|
#define OVER_IS_FACTORY 0x00004000 /* It is a factory method. */ |
|
#define OVER_XFERRED_BACK 0x00008000 /* Ownership is transferred back. */ |
|
#define OVER_XFERRED 0x00010000 /* Ownership is transferred. */ |
|
#define OVER_IS_VIRTUAL_REIMP 0x00020000 /* It is a re-implementation of a virtual. */ |
|
#define OVER_DONT_DEREF_SELF 0x00040000 /* For comparison operators, don't dereference self. */ |
|
#define OVER_HOLD_GIL 0x00080000 /* The function holds the GIL. */ |
|
#define OVER_RELEASE_GIL 0x00100000 /* The function releases the GIL. */ |
|
#define OVER_THIS_XFERRED 0x00200000 /* Ownership of this is transferred. */ |
|
#define OVER_IS_GLOBAL 0x00400000 /* It is a global operator. */ |
|
#define OVER_IS_COMPLEMENTARY 0x00800000 /* It is a complementary operator. */ |
|
#define OVER_IS_DEPRECATED 0x01000000 /* It is deprecated. */ |
|
#define OVER_KEYWORD_ARGS 0x02000000 /* It allows keyword arguments. */ |
|
#define OVER_REALLY_PROT 0x04000000 /* It really is protected. */ |
|
|
|
#define isPublic(o) ((o)->overflags & SECT_IS_PUBLIC) |
|
#define setIsPublic(o) ((o)->overflags |= SECT_IS_PUBLIC) |
|
#define isProtected(o) ((o)->overflags & SECT_IS_PROT) |
|
#define setIsProtected(o) ((o)->overflags |= SECT_IS_PROT) |
|
#define isPrivate(o) ((o)->overflags & SECT_IS_PRIVATE) |
|
#define setIsPrivate(o) ((o)->overflags |= SECT_IS_PRIVATE) |
|
#define isSlot(o) ((o)->overflags & SECT_IS_SLOT) |
|
#define setIsSlot(o) ((o)->overflags |= SECT_IS_SLOT) |
|
#define resetIsSlot(o) ((o)->overflags &= ~SECT_IS_SLOT) |
|
#define isSignal(o) ((o)->overflags & SECT_IS_SIGNAL) |
|
#define setIsSignal(o) ((o)->overflags |= SECT_IS_SIGNAL) |
|
#define resetIsSignal(o) ((o)->overflags &= ~SECT_IS_SIGNAL) |
|
|
|
#define isVirtual(o) ((o)->overflags & OVER_IS_VIRTUAL) |
|
#define setIsVirtual(o) ((o)->overflags |= OVER_IS_VIRTUAL) |
|
#define resetIsVirtual(o) ((o)->overflags &= ~OVER_IS_VIRTUAL) |
|
#define isAbstract(o) ((o)->overflags & OVER_IS_ABSTRACT) |
|
#define setIsAbstract(o) ((o)->overflags |= OVER_IS_ABSTRACT) |
|
#define isConst(o) ((o)->overflags & OVER_IS_CONST) |
|
#define setIsConst(o) ((o)->overflags |= OVER_IS_CONST) |
|
#define isStatic(o) ((o)->overflags & OVER_IS_STATIC) |
|
#define setIsStatic(o) ((o)->overflags |= OVER_IS_STATIC) |
|
#define isAutoGen(o) ((o)->overflags & OVER_IS_AUTOGEN) |
|
#define setIsAutoGen(o) ((o)->overflags |= OVER_IS_AUTOGEN) |
|
#define resetIsAutoGen(o) ((o)->overflags &= ~OVER_IS_AUTOGEN) |
|
#define isNewThread(o) ((o)->overflags & OVER_IS_NEW_THREAD) |
|
#define setIsNewThread(o) ((o)->overflags |= OVER_IS_NEW_THREAD) |
|
#define isFactory(o) ((o)->overflags & OVER_IS_FACTORY) |
|
#define setIsFactory(o) ((o)->overflags |= OVER_IS_FACTORY) |
|
#define isResultTransferredBack(o) ((o)->overflags & OVER_XFERRED_BACK) |
|
#define setIsResultTransferredBack(o) ((o)->overflags |= OVER_XFERRED_BACK) |
|
#define isResultTransferred(o) ((o)->overflags & OVER_XFERRED) |
|
#define setIsResultTransferred(o) ((o)->overflags |= OVER_XFERRED) |
|
#define isVirtualReimp(o) ((o)->overflags & OVER_IS_VIRTUAL_REIMP) |
|
#define setIsVirtualReimp(o) ((o)->overflags |= OVER_IS_VIRTUAL_REIMP) |
|
#define dontDerefSelf(o) ((o)->overflags & OVER_DONT_DEREF_SELF) |
|
#define setDontDerefSelf(o) ((o)->overflags |= OVER_DONT_DEREF_SELF) |
|
#define isHoldGIL(o) ((o)->overflags & OVER_HOLD_GIL) |
|
#define setIsHoldGIL(o) ((o)->overflags |= OVER_HOLD_GIL) |
|
#define isReleaseGIL(o) ((o)->overflags & OVER_RELEASE_GIL) |
|
#define setIsReleaseGIL(o) ((o)->overflags |= OVER_RELEASE_GIL) |
|
#define isThisTransferredMeth(o) ((o)->overflags & OVER_THIS_XFERRED) |
|
#define setIsThisTransferredMeth(o) ((o)->overflags |= OVER_THIS_XFERRED) |
|
#define isGlobal(o) ((o)->overflags & OVER_IS_GLOBAL) |
|
#define setIsGlobal(o) ((o)->overflags |= OVER_IS_GLOBAL) |
|
#define isComplementary(o) ((o)->overflags & OVER_IS_COMPLEMENTARY) |
|
#define setIsComplementary(o) ((o)->overflags |= OVER_IS_COMPLEMENTARY) |
|
#define isDeprecated(o) ((o)->overflags & OVER_IS_DEPRECATED) |
|
#define setIsDeprecated(o) ((o)->overflags |= OVER_IS_DEPRECATED) |
|
#define useKeywordArgs(o) ((o)->overflags & OVER_KEYWORD_ARGS) |
|
#define setUseKeywordArgs(o) ((o)->overflags |= OVER_KEYWORD_ARGS) |
|
#define isReallyProtected(o) ((o)->overflags & OVER_REALLY_PROT) |
|
#define setIsReallyProtected(o) ((o)->overflags |= OVER_REALLY_PROT) |
|
|
|
|
|
/* Handle variable flags. */ |
|
|
|
#define VAR_IS_STATIC 0x01 /* It is a static variable. */ |
|
#define VAR_NEEDS_HANDLER 0x02 /* It the variable needs a handler. */ |
|
|
|
#define isStaticVar(v) ((v)->varflags & VAR_IS_STATIC) |
|
#define setIsStaticVar(v) ((v)->varflags |= VAR_IS_STATIC) |
|
#define needsHandler(v) ((v)->varflags & VAR_NEEDS_HANDLER) |
|
#define setNeedsHandler(v) ((v)->varflags |= VAR_NEEDS_HANDLER) |
|
|
|
|
|
/* Handle argument flags. */ |
|
|
|
#define ARG_IS_REF 0x0001 /* It is a reference. */ |
|
#define ARG_IS_CONST 0x0002 /* It is a const. */ |
|
#define ARG_XFERRED 0x0004 /* Ownership is transferred. */ |
|
#define ARG_THIS_XFERRED 0x0008 /* Ownership of this is transferred. */ |
|
#define ARG_XFERRED_BACK 0x0010 /* Ownership is transferred back. */ |
|
#define ARG_ARRAY 0x0020 /* Used as an array. */ |
|
#define ARG_ARRAY_SIZE 0x0040 /* Used as an array size. */ |
|
#define ARG_ALLOW_NONE 0x0080 /* Allow None as a value. */ |
|
#define ARG_GET_WRAPPER 0x0100 /* Get the wrapper object. */ |
|
#define ARG_IN 0x0200 /* It passes an argument. */ |
|
#define ARG_OUT 0x0400 /* It returns a result. */ |
|
#define ARG_CONSTRAINED 0x0800 /* Suppress type conversion. */ |
|
#define ARG_SINGLE_SHOT 0x1000 /* The slot is only ever fired once. */ |
|
#define ARG_RESULT_SIZE 0x2000 /* It defines the result size. */ |
|
#define ARG_KEEP_REF 0x4000 /* Keep a reference. */ |
|
#define ARG_NO_COPY 0x8000 /* Disable copying of const references. */ |
|
|
|
#define isReference(a) ((a)->argflags & ARG_IS_REF) |
|
#define setIsReference(a) ((a)->argflags |= ARG_IS_REF) |
|
#define resetIsReference(a) ((a)->argflags &= ~ARG_IS_REF) |
|
#define isConstArg(a) ((a)->argflags & ARG_IS_CONST) |
|
#define setIsConstArg(a) ((a)->argflags |= ARG_IS_CONST) |
|
#define resetIsConstArg(a) ((a)->argflags &= ~ARG_IS_CONST) |
|
#define isTransferred(a) ((a)->argflags & ARG_XFERRED) |
|
#define setIsTransferred(a) ((a)->argflags |= ARG_XFERRED) |
|
#define isThisTransferred(a) ((a)->argflags & ARG_THIS_XFERRED) |
|
#define setIsThisTransferred(a) ((a)->argflags |= ARG_THIS_XFERRED) |
|
#define isTransferredBack(a) ((a)->argflags & ARG_XFERRED_BACK) |
|
#define setIsTransferredBack(a) ((a)->argflags |= ARG_XFERRED_BACK) |
|
#define isArray(a) ((a)->argflags & ARG_ARRAY) |
|
#define setArray(a) ((a)->argflags |= ARG_ARRAY) |
|
#define isArraySize(a) ((a)->argflags & ARG_ARRAY_SIZE) |
|
#define setArraySize(a) ((a)->argflags |= ARG_ARRAY_SIZE) |
|
#define isAllowNone(a) ((a)->argflags & ARG_ALLOW_NONE) |
|
#define setAllowNone(a) ((a)->argflags |= ARG_ALLOW_NONE) |
|
#define isGetWrapper(a) ((a)->argflags & ARG_GET_WRAPPER) |
|
#define setGetWrapper(a) ((a)->argflags |= ARG_GET_WRAPPER) |
|
#define isInArg(a) ((a)->argflags & ARG_IN) |
|
#define setIsInArg(a) ((a)->argflags |= ARG_IN) |
|
#define isOutArg(a) ((a)->argflags & ARG_OUT) |
|
#define setIsOutArg(a) ((a)->argflags |= ARG_OUT) |
|
#define isConstrained(a) ((a)->argflags & ARG_CONSTRAINED) |
|
#define setIsConstrained(a) ((a)->argflags |= ARG_CONSTRAINED) |
|
#define resetIsConstrained(a) ((a)->argflags &= ~ARG_CONSTRAINED) |
|
#define isSingleShot(a) ((a)->argflags & ARG_SINGLE_SHOT) |
|
#define isResultSize(a) ((a)->argflags & ARG_RESULT_SIZE) |
|
#define setResultSize(a) ((a)->argflags |= ARG_RESULT_SIZE) |
|
#define keepReference(a) ((a)->argflags & ARG_KEEP_REF) |
|
#define setKeepReference(a) ((a)->argflags |= ARG_KEEP_REF) |
|
#define noCopy(a) ((a)->argflags & ARG_NO_COPY) |
|
#define setNoCopy(a) ((a)->argflags |= ARG_NO_COPY) |
|
|
|
|
|
/* Handle name flags. */ |
|
|
|
#define NAME_IS_USED 0x01 /* It is used in the main module. */ |
|
#define NAME_IS_SUBSTR 0x02 /* It is a substring of another. */ |
|
|
|
#define isUsedName(n) ((n)->nameflags & NAME_IS_USED) |
|
#define setIsUsedName(n) ((n)->nameflags |= NAME_IS_USED) |
|
#define resetIsUsedName(n) ((n)->nameflags &= ~NAME_IS_USED) |
|
#define isSubstring(n) ((n)->nameflags & NAME_IS_SUBSTR) |
|
#define setIsSubstring(n) ((n)->nameflags |= NAME_IS_SUBSTR) |
|
|
|
|
|
/* Handle virtual handler flags. */ |
|
|
|
#define VH_IS_DUPLICATE 0x01 /* It is a duplicate. */ |
|
#define VH_TRANSFERS 0x02 /* It transfers ownership of the result. */ |
|
|
|
#define isDuplicateVH(vh) ((vh)->vhflags & VH_IS_DUPLICATE) |
|
#define setIsDuplicateVH(vh) ((vh)->vhflags |= VH_IS_DUPLICATE) |
|
#define resetIsDuplicateVH(vh) ((vh)->vhflags &= ~VH_IS_DUPLICATE) |
|
#define isTransferVH(vh) ((vh)->vhflags & VH_TRANSFERS) |
|
#define setIsTransferVH(vh) ((vh)->vhflags |= VH_TRANSFERS) |
|
|
|
|
|
/* Handle mapped type flags. */ |
|
|
|
#define MT_NO_RELEASE 0x01 /* Do not generate a release function. */ |
|
#define MT_ALLOW_NONE 0x02 /* The mapped type will handle None. */ |
|
|
|
#define noRelease(mt) ((mt)->mtflags & MT_NO_RELEASE) |
|
#define setNoRelease(mt) ((mt)->mtflags |= MT_NO_RELEASE) |
|
#define handlesNone(mt) ((mt)->mtflags & MT_ALLOW_NONE) |
|
#define setHandlesNone(mt) ((mt)->mtflags |= MT_ALLOW_NONE) |
|
|
|
|
|
/* Handle typedef flags. */ |
|
|
|
#define TD_NO_TYPE_NAME 0x01 /* Do not use the typedef name. */ |
|
|
|
#define noTypeName(td) ((td)->tdflags & TD_NO_TYPE_NAME) |
|
#define setNoTypeName(td) ((td)->tdflags |= TD_NO_TYPE_NAME) |
|
|
|
|
|
/* Slot types. */ |
|
|
|
typedef enum { |
|
str_slot, |
|
unicode_slot, |
|
int_slot, |
|
long_slot, |
|
float_slot, |
|
len_slot, |
|
contains_slot, |
|
add_slot, |
|
concat_slot, |
|
sub_slot, |
|
mul_slot, |
|
repeat_slot, |
|
div_slot, |
|
mod_slot, |
|
floordiv_slot, |
|
truediv_slot, |
|
and_slot, |
|
or_slot, |
|
xor_slot, |
|
lshift_slot, |
|
rshift_slot, |
|
iadd_slot, |
|
iconcat_slot, |
|
isub_slot, |
|
imul_slot, |
|
irepeat_slot, |
|
idiv_slot, |
|
imod_slot, |
|
ifloordiv_slot, |
|
itruediv_slot, |
|
iand_slot, |
|
ior_slot, |
|
ixor_slot, |
|
ilshift_slot, |
|
irshift_slot, |
|
invert_slot, |
|
call_slot, |
|
getitem_slot, |
|
setitem_slot, |
|
delitem_slot, |
|
lt_slot, |
|
le_slot, |
|
eq_slot, |
|
ne_slot, |
|
gt_slot, |
|
ge_slot, |
|
cmp_slot, |
|
bool_slot, |
|
neg_slot, |
|
pos_slot, |
|
abs_slot, |
|
repr_slot, |
|
hash_slot, |
|
index_slot, |
|
iter_slot, |
|
next_slot, |
|
no_slot |
|
} slotType; |
|
|
|
|
|
/* |
|
* Argument types. Always add new ones at the end because the numeric values |
|
* can appear in generated code. |
|
*/ |
|
typedef enum { |
|
no_type, |
|
defined_type, |
|
class_type, |
|
struct_type, |
|
void_type, |
|
enum_type, |
|
template_type, |
|
signal_type, |
|
slot_type, |
|
rxcon_type, |
|
rxdis_type, |
|
slotcon_type, |
|
slotdis_type, |
|
ustring_type, |
|
string_type, |
|
short_type, |
|
ushort_type, |
|
cint_type, |
|
int_type, |
|
uint_type, |
|
long_type, |
|
ulong_type, |
|
float_type, |
|
cfloat_type, |
|
double_type, |
|
cdouble_type, |
|
bool_type, |
|
mapped_type, |
|
pyobject_type, |
|
pytuple_type, |
|
pylist_type, |
|
pydict_type, |
|
pycallable_type, |
|
pyslice_type, |
|
qobject_type, |
|
function_type, |
|
pytype_type, |
|
ellipsis_type, |
|
longlong_type, |
|
ulonglong_type, |
|
anyslot_type, |
|
cbool_type, |
|
sstring_type, |
|
wstring_type, |
|
fake_void_type, |
|
ssize_type, |
|
ascii_string_type, |
|
latin1_string_type, |
|
utf8_string_type |
|
} argType; |
|
|
|
|
|
/* Value types. */ |
|
|
|
typedef enum { |
|
qchar_value, |
|
string_value, |
|
numeric_value, |
|
real_value, |
|
scoped_value, |
|
fcall_value |
|
} valueType; |
|
|
|
|
|
/* Version types. */ |
|
|
|
typedef enum { |
|
time_qualifier, |
|
platform_qualifier, |
|
feature_qualifier |
|
} qualType; |
|
|
|
|
|
/* Interface file types. */ |
|
|
|
typedef enum { |
|
exception_iface, |
|
mappedtype_iface, |
|
namespace_iface, |
|
class_iface |
|
} ifaceFileType; |
|
|
|
|
|
/* A software license. */ |
|
|
|
typedef struct { |
|
char *type; /* The license type. */ |
|
char *licensee; /* The licensee. */ |
|
char *timestamp; /* The timestamp. */ |
|
char *sig; /* The signature. */ |
|
} licenseDef; |
|
|
|
|
|
/* A version qualifier. */ |
|
|
|
typedef struct _qualDef { |
|
char *name; /* The qualifier name. */ |
|
qualType qtype; /* The qualifier type. */ |
|
struct _moduleDef *module; /* The defining module. */ |
|
int line; /* Timeline if it is a time. */ |
|
int order; /* Order if it is a time. */ |
|
struct _qualDef *next; /* Next in the list. */ |
|
} qualDef; |
|
|
|
|
|
/* A scoped name. */ |
|
|
|
typedef struct _scopedNameDef { |
|
char *name; /* The name. */ |
|
struct _scopedNameDef *next; /* Next in the scope list. */ |
|
} scopedNameDef; |
|
|
|
|
|
/* A name. */ |
|
|
|
typedef struct _nameDef { |
|
int nameflags; /* The name flags. */ |
|
const char *text; /* The text of the name. */ |
|
size_t len; /* The length of the name. */ |
|
size_t offset; /* The offset in the string pool. */ |
|
struct _nameDef *next; /* Next in the list. */ |
|
} nameDef; |
|
|
|
|
|
/* A literal code block. */ |
|
|
|
typedef struct _codeBlock { |
|
char *frag; /* The code itself. */ |
|
const char *filename; /* The original file. */ |
|
int linenr; /* The line in the file. */ |
|
struct _codeBlock *next; /* Next in the list. */ |
|
} codeBlock; |
|
|
|
|
|
/* The arguments to a throw specifier. */ |
|
|
|
typedef struct _throwArgs { |
|
int nrArgs; /* The number of arguments. */ |
|
struct _exceptionDef *args[MAX_NR_ARGS]; /* The arguments. */ |
|
} throwArgs; |
|
|
|
|
|
/* An exception. */ |
|
|
|
typedef struct _exceptionDef { |
|
int exceptionnr; /* The exception number. */ |
|
struct _ifaceFileDef *iff; /* The interface file. */ |
|
const char *pyname; /* The exception Python name. */ |
|
struct _classDef *cd; /* The exception class. */ |
|
char *bibase; /* The builtin base exception. */ |
|
struct _exceptionDef *base; /* The defined base exception. */ |
|
codeBlock *raisecode; /* Raise exception code. */ |
|
struct _exceptionDef *next; /* The next in the list. */ |
|
} exceptionDef; |
|
|
|
|
|
/* A value. */ |
|
|
|
typedef struct _valueDef { |
|
valueType vtype; /* The type. */ |
|
char vunop; /* Any unary operator. */ |
|
char vbinop; /* Any binary operator. */ |
|
union { |
|
char vqchar; /* Quoted character value. */ |
|
long vnum; /* Numeric value. */ |
|
double vreal; /* Real value. */ |
|
char *vstr; /* String value. */ |
|
scopedNameDef *vscp; /* Scoped value. */ |
|
struct _fcallDef *fcd; /* Function call. */ |
|
} u; |
|
struct _valueDef *next; /* Next in the expression. */ |
|
} valueDef; |
|
|
|
|
|
/* A member function argument (or result). */ |
|
|
|
typedef struct { |
|
argType atype; /* The type. */ |
|
nameDef *name; /* The name. */ |
|
const char *doctype; /* The documented type. */ |
|
int argflags; /* The argument flags. */ |
|
int nrderefs; /* Nr. of dereferences. */ |
|
valueDef *defval; /* The default value. */ |
|
const char *docval; /* The documented value. */ |
|
int key; /* The optional /KeepReference/ key. */ |
|
struct _typedefDef *original_type; /* The original type if typedef'd. */ |
|
union { |
|
struct _signatureDef *sa; /* If it is a function. */ |
|
struct _templateDef *td; /* If it is a template. */ |
|
struct _scopedNameDef *snd; /* If it is a defined type. */ |
|
struct _classDef *cd; /* If it is a class. */ |
|
struct _enumDef *ed; /* If it is an enum. */ |
|
struct _scopedNameDef *sname; /* If it is a struct. */ |
|
struct _mappedTypeDef *mtd; /* If it is a mapped type. */ |
|
} u; |
|
} argDef; |
|
|
|
|
|
|
|
/* An entry in a linked argument list. */ |
|
typedef struct _argList { |
|
argDef arg; /* The argument itself. */ |
|
struct _argList *next; /* Next in the list. */ |
|
} argList; |
|
|
|
|
|
/* A function call. */ |
|
|
|
typedef struct _fcallDef { |
|
argDef type; /* The type. */ |
|
int nrArgs; /* The number of arguments. */ |
|
struct _valueDef *args[MAX_NR_ARGS]; /* The arguments. */ |
|
} fcallDef; |
|
|
|
|
|
/* An API version range definition. */ |
|
typedef struct _apiVersionRangeDef { |
|
nameDef *api_name; /* The API name. */ |
|
int from; /* The lower bound. */ |
|
int to; /* The upper bound. */ |
|
int index; /* The range index. */ |
|
struct _apiVersionRangeDef *next; /* The next in the list. */ |
|
} apiVersionRangeDef; |
|
|
|
|
|
/* A module definition. */ |
|
typedef struct _moduleDef { |
|
nameDef *fullname; /* The full module name. */ |
|
const char *name; /* The module base name. */ |
|
int version; /* The module version. */ |
|
apiVersionRangeDef *api_versions; /* The defined APIs. */ |
|
apiVersionRangeDef *api_ranges; /* The list of API version ranges. */ |
|
int modflags; /* The module flags. */ |
|
int qobjclass; /* TQObject class, -1 if none. */ |
|
struct _memberDef *othfuncs; /* List of other functions. */ |
|
struct _overDef *overs; /* Global overloads. */ |
|
argType encoding; /* The default string encoding. */ |
|
nameDef *defmetatype; /* The optional default meta-type. */ |
|
nameDef *defsupertype; /* The optional default super-type. */ |
|
struct _exceptionDef *defexception; /* The default exception. */ |
|
codeBlock *hdrcode; /* Header code. */ |
|
codeBlock *cppcode; /* Global C++ code. */ |
|
codeBlock *copying; /* Software license. */ |
|
codeBlock *preinitcode; /* Pre-initialisation code. */ |
|
codeBlock *initcode; /* Initialisation code. */ |
|
codeBlock *postinitcode; /* Post-initialisation code. */ |
|
codeBlock *unitcode; /* Compilation unit code. */ |
|
int parts; /* The number of parts generated. */ |
|
char *file; /* The filename. */ |
|
qualDef *qualifiers; /* The list of qualifiers. */ |
|
argDef *types; /* The array of numbered types. */ |
|
int nrtypes; /* The number of numbered types. */ |
|
int nrtimelines; /* The nr. of timelines. */ |
|
int nrexceptions; /* The nr. of exceptions. */ |
|
int nrtypedefs; /* The nr. of typedefs. */ |
|
int nrvirthandlers; /* The nr. of virtual handlers. */ |
|
int next_key; /* The next key to allocate. */ |
|
struct _virtHandlerDef *virthandlers; /* The virtual handlers. */ |
|
licenseDef *license; /* The software license. */ |
|
struct _classDef *proxies; /* The list of proxy classes. */ |
|
struct _moduleDef *container; /* The container module, if any. */ |
|
struct _ifaceFileList *used; /* Interface files used. */ |
|
struct _moduleListDef *allimports; /* The list of all imports. */ |
|
struct _moduleListDef *imports; /* The list of direct imports. */ |
|
struct _moduleDef *next; /* Next in the list. */ |
|
} moduleDef; |
|
|
|
|
|
/* An entry in a linked module list. */ |
|
typedef struct _moduleListDef { |
|
moduleDef *module; /* The module itself. */ |
|
struct _moduleListDef *next; /* The next in the list. */ |
|
} moduleListDef; |
|
|
|
|
|
/* An interface file definition. */ |
|
|
|
typedef struct _ifaceFileDef { |
|
nameDef *name; /* The name. */ |
|
apiVersionRangeDef *api_range; /* The optional API version range. */ |
|
struct _ifaceFileDef *first_alt; /* The first alternate API. */ |
|
struct _ifaceFileDef *next_alt; /* The next alternate API. */ |
|
ifaceFileType type; /* Interface file type. */ |
|
int ifacenr; /* The index into the types table. */ |
|
scopedNameDef *fqcname; /* The fully qualified C++ name. */ |
|
moduleDef *module; /* The owning module. */ |
|
codeBlock *hdrcode; /* Header code. */ |
|
struct _ifaceFileList *used; /* Interface files used. */ |
|
struct _ifaceFileDef *next; /* Next in the list. */ |
|
} ifaceFileDef; |
|
|
|
|
|
/* An entry in a linked interface file list. */ |
|
|
|
typedef struct _ifaceFileList { |
|
ifaceFileDef *iff; /* The interface file itself. */ |
|
struct _ifaceFileList *next; /* Next in the list. */ |
|
} ifaceFileList; |
|
|
|
|
|
/* A mapped type. */ |
|
|
|
typedef struct _mappedTypeDef { |
|
int mtflags; /* The mapped type flags. */ |
|
argDef type; /* The type being mapped. */ |
|
nameDef *pyname; /* The Python name. */ |
|
nameDef *cname; /* The C/C++ name. */ |
|
const char *doctype; /* The documented type. */ |
|
ifaceFileDef *iff; /* The interface file. */ |
|
struct _memberDef *members; /* The static member functions. */ |
|
struct _overDef *overs; /* The static overloads. */ |
|
codeBlock *convfromcode; /* Convert from C++ code. */ |
|
codeBlock *convtocode; /* Convert to C++ code. */ |
|
struct _mappedTypeDef *next; /* Next in the list. */ |
|
} mappedTypeDef; |
|
|
|
|
|
/* A function signature. */ |
|
|
|
typedef struct _signatureDef { |
|
argDef result; /* The result. */ |
|
int nrArgs; /* The number of arguments. */ |
|
argDef args[MAX_NR_ARGS]; /* The arguments. */ |
|
} signatureDef; |
|
|
|
|
|
/* A list of function signatures. */ |
|
|
|
typedef struct _signatureList { |
|
struct _signatureDef *sd; /* The signature. */ |
|
struct _signatureList *next; /* Next in the list. */ |
|
} signatureList; |
|
|
|
|
|
/* A template type. */ |
|
|
|
typedef struct _templateDef { |
|
scopedNameDef *fqname; /* The name. */ |
|
signatureDef types; /* The types. */ |
|
} templateDef; |
|
|
|
|
|
/* A list of virtual handlers. */ |
|
|
|
typedef struct _virtHandlerDef { |
|
int virthandlernr; /* The nr. of the virtual handler. */ |
|
int vhflags; /* The virtual handler flags. */ |
|
signatureDef *pysig; /* The Python signature. */ |
|
signatureDef *cppsig; /* The C++ signature. */ |
|
struct _moduleDef *module; /* The defining module. */ |
|
codeBlock *virtcode; /* Virtual handler code. */ |
|
struct _virtHandlerDef *next; /* Next in the list. */ |
|
} virtHandlerDef; |
|
|
|
|
|
/* A typedef definition. */ |
|
|
|
typedef struct _typedefDef { |
|
int tdflags; /* The typedef flags. */ |
|
scopedNameDef *fqname; /* The fully qualified name. */ |
|
struct _classDef *ecd; /* The enclosing class. */ |
|
moduleDef *module; /* The owning module. */ |
|
argDef type; /* The actual type. */ |
|
struct _typedefDef *next; /* Next in the list. */ |
|
} typedefDef; |
|
|
|
|
|
/* A variable definition. */ |
|
|
|
typedef struct _varDef { |
|
nameDef *pyname; /* The variable Python name. */ |
|
scopedNameDef *fqcname; /* The fully qualified C/C++ name. */ |
|
struct _classDef *ecd; /* The enclosing class. */ |
|
moduleDef *module; /* The owning module. */ |
|
int varflags; /* The variable flags. */ |
|
argDef type; /* The actual type. */ |
|
codeBlock *accessfunc; /* The access function. */ |
|
codeBlock *getcode; /* The get code. */ |
|
codeBlock *setcode; /* The set code. */ |
|
struct _varDef *next; /* Next in the list. */ |
|
} varDef; |
|
|
|
|
|
/* An overloaded member function definition. */ |
|
|
|
typedef struct _overDef { |
|
char *cppname; /* The C++ name. */ |
|
int overflags; /* The overload flags. */ |
|
struct _memberDef *common; /* Common parts. */ |
|
apiVersionRangeDef *api_range; /* The optional API version range. */ |
|
signatureDef pysig; /* The Python signature. */ |
|
signatureDef *cppsig; /* The C++ signature. */ |
|
throwArgs *exceptions; /* The exceptions. */ |
|
codeBlock *methodcode; /* Method code. */ |
|
virtHandlerDef *virthandler; /* The virtual handler. */ |
|
char *prehook; /* The pre-hook name. */ |
|
char *posthook; /* The post-hook name. */ |
|
struct _overDef *next; /* Next in the list. */ |
|
} overDef; |
|
|
|
|
|
/* An overloaded constructor definition. */ |
|
|
|
typedef struct _ctorDef { |
|
int ctorflags; /* The ctor flags. */ |
|
apiVersionRangeDef *api_range; /* The optional API version range. */ |
|
signatureDef pysig; /* The Python signature. */ |
|
signatureDef *cppsig; /* The C++ signature, NULL if /NoDerived/. */ |
|
throwArgs *exceptions; /* The exceptions. */ |
|
codeBlock *methodcode; /* Method code. */ |
|
char *prehook; /* The pre-hook name. */ |
|
char *posthook; /* The post-hook name. */ |
|
struct _ctorDef *next; /* Next in the list. */ |
|
} ctorDef; |
|
|
|
|
|
/* An enumerated type member definition. */ |
|
|
|
typedef struct _enumMemberDef { |
|
nameDef *pyname; /* The Python name. */ |
|
char *cname; /* The C/C++ name. */ |
|
struct _enumDef *ed; /* The enclosing enum. */ |
|
struct _enumMemberDef *next; /* Next in the list. */ |
|
} enumMemberDef; |
|
|
|
|
|
/* An enumerated type definition. */ |
|
|
|
typedef struct _enumDef { |
|
int enumflags; /* The enum flags. */ |
|
nameDef *pyname; /* The Python name (may be NULL). */ |
|
scopedNameDef *fqcname; /* The C/C++ name (may be NULL). */ |
|
nameDef *cname; /* The C/C++ name (may be NULL). */ |
|
struct _enumDef *first_alt; /* The first alternate API. */ |
|
struct _enumDef *next_alt; /* The next alternate API. */ |
|
int enumnr; /* The enum number. */ |
|
int enum_idx; /* The enum index within the module. */ |
|
struct _classDef *ecd; /* The enclosing class, if any. */ |
|
struct _mappedTypeDef *emtd; /* The enclosing mapped type, if any. */ |
|
moduleDef *module; /* The owning module. */ |
|
enumMemberDef *members; /* The list of members. */ |
|
struct _memberDef *slots; /* The list of slots. */ |
|
struct _overDef *overs; /* The list of slot overloads. */ |
|
struct _enumDef *next; /* Next in the list. */ |
|
} enumDef; |
|
|
|
|
|
/* An member function definition. */ |
|
|
|
typedef struct _memberDef { |
|
nameDef *pyname; /* The Python name. */ |
|
int memberflags; /* The member flags. */ |
|
int membernr; /* The index in the method table. */ |
|
slotType slot; /* The slot type. */ |
|
moduleDef *module; /* The owning module. */ |
|
codeBlock *docstring; /* The overloads docstrings. */ |
|
struct _memberDef *next; /* Next in the list. */ |
|
} memberDef; |
|
|
|
|
|
/* A list of visible member functions. */ |
|
|
|
typedef struct _visibleList { |
|
memberDef *m; /* The member definition. */ |
|
struct _classDef *cd; /* The class. */ |
|
struct _visibleList *next; /* Next in the list. */ |
|
} visibleList; |
|
|
|
|
|
/* An entry in a linked class list. */ |
|
|
|
typedef struct _classList { |
|
struct _classDef *cd; /* The class itself. */ |
|
struct _classList *next; /* Next in the list. */ |
|
} classList; |
|
|
|
|
|
/* A virtual overload definition. */ |
|
|
|
typedef struct _virtOverDef { |
|
overDef o; /* The overload. */ |
|
struct _classDef *scope; /* The overload scope. */ |
|
struct _virtOverDef *next; /* Next in the list. */ |
|
} virtOverDef; |
|
|
|
|
|
/* A class that appears in a class's hierarchy. */ |
|
|
|
typedef struct _mroDef { |
|
struct _classDef *cd; /* The class. */ |
|
int mroflags; /* The hierarchy flags. */ |
|
struct _mroDef *next; /* The next in the list. */ |
|
} mroDef; |
|
|
|
|
|
/* A class definition. */ |
|
|
|
typedef struct _classDef { |
|
int classflags; /* The class flags. */ |
|
int pyqt4_flags; /* The PyTQt4 specific flags. */ |
|
nameDef *pyname; /* The Python name. */ |
|
ifaceFileDef *iff; /* The interface file. */ |
|
struct _classDef *ecd; /* The enclosing scope. */ |
|
struct _classDef *real; /* The real class if this is a proxy or extender. */ |
|
classList *supers; /* The parent classes. */ |
|
mroDef *mro; /* The super-class hierarchy. */ |
|
nameDef *metatype; /* The meta-type. */ |
|
nameDef *supertype; /* The super-type. */ |
|
templateDef *td; /* The instantiated template. */ |
|
ctorDef *ctors; /* The constructors. */ |
|
ctorDef *defctor; /* The default ctor. */ |
|
codeBlock *dealloccode; /* Handwritten dealloc code. */ |
|
codeBlock *dtorcode; /* Handwritten dtor code. */ |
|
throwArgs *dtorexceptions; /* The dtor exceptions. */ |
|
memberDef *members; /* The member functions. */ |
|
overDef *overs; /* The overloads. */ |
|
argList *casts; /* The operator casts. */ |
|
virtOverDef *vmembers; /* The virtual members. */ |
|
visibleList *visible; /* The visible members. */ |
|
codeBlock *cppcode; /* Class C++ code. */ |
|
codeBlock *convtosubcode; /* Convert to sub C++ code. */ |
|
struct _classDef *subbase; /* Sub-class base class. */ |
|
codeBlock *docstring; /* Ctor docstrings. */ |
|
codeBlock *convtocode; /* Convert to C++ code. */ |
|
codeBlock *travcode; /* Traverse code. */ |
|
codeBlock *clearcode; /* Clear code. */ |
|
codeBlock *getbufcode; /* Get buffer code (Python v3). */ |
|
codeBlock *releasebufcode; /* Release buffer code (Python v3). */ |
|
codeBlock *readbufcode; /* Read buffer code (Python v2). */ |
|
codeBlock *writebufcode; /* Write buffer code (Python v2). */ |
|
codeBlock *segcountcode; /* Segment count code (Python v2). */ |
|
codeBlock *charbufcode; /* Character buffer code (Python v2). */ |
|
codeBlock *picklecode; /* Pickle code. */ |
|
struct _classDef *next; /* Next in the list. */ |
|
} classDef; |
|
|
|
|
|
/* A class template definition. */ |
|
|
|
typedef struct _classTmplDef { |
|
signatureDef sig; /* The template arguments. */ |
|
classDef *cd; /* The class itself. */ |
|
struct _classTmplDef *next; /* The next in the list. */ |
|
} classTmplDef; |
|
|
|
|
|
/* A mapped type template definition. */ |
|
|
|
typedef struct _mappedTypeTmplDef { |
|
signatureDef sig; /* The template arguments. */ |
|
mappedTypeDef *mt; /* The mapped type itself. */ |
|
struct _mappedTypeTmplDef *next; /* The next in the list. */ |
|
} mappedTypeTmplDef; |
|
|
|
|
|
/* The parse tree corresponding to the specification file. */ |
|
|
|
typedef struct { |
|
moduleDef *module; /* The module being generated. */ |
|
moduleDef *modules; /* The list of modules. */ |
|
nameDef *namecache; /* The name cache. */ |
|
ifaceFileDef *ifacefiles; /* The list of interface files. */ |
|
classDef *classes; /* The list of classes. */ |
|
classTmplDef *classtemplates; /* The list of class templates. */ |
|
exceptionDef *exceptions; /* The list of exceptions. */ |
|
mappedTypeDef *mappedtypes; /* The mapped types. */ |
|
mappedTypeTmplDef *mappedtypetemplates; /* The list of mapped type templates. */ |
|
enumDef *enums; /* List of enums. */ |
|
varDef *vars; /* List of variables. */ |
|
typedefDef *typedefs; /* List of typedefs. */ |
|
codeBlock *exphdrcode; /* Exported header code. */ |
|
codeBlock *docs; /* Documentation. */ |
|
int sigslots; /* Set if signals or slots are used. */ |
|
int genc; /* Set if we are generating C code. */ |
|
struct _stringList *plugins; /* The list of plugins. */ |
|
} sipSpec; |
|
|
|
|
|
/* A list of strings. */ |
|
|
|
typedef struct _stringList { |
|
const char *s; /* The string. */ |
|
struct _stringList *next; /* The next in the list. */ |
|
} stringList; |
|
|
|
|
|
/* File specific context information for the parser. */ |
|
|
|
typedef struct _parserContext { |
|
const char *filename; /* The %Import or %Include filename. */ |
|
int ifdepth; /* The depth of nested if's. */ |
|
moduleDef *prevmod; /* The previous module. */ |
|
} parserContext; |
|
|
|
|
|
extern char *sipVersion; /* The version of SIP. */ |
|
extern stringList *includeDirList; /* The include directory list for SIP files. */ |
|
|
|
|
|
void parse(sipSpec *, FILE *, char *, stringList *, stringList *, int, int); |
|
void parserEOF(char *,parserContext *); |
|
void transform(sipSpec *); |
|
void generateCode(sipSpec *, char *, char *, char *, const char *, int, int, |
|
int, int, stringList *, const char *, int); |
|
void generateAPI(sipSpec *pt, moduleDef *mod, const char *apiFile); |
|
void generateXML(sipSpec *pt, moduleDef *mod, const char *xmlFile); |
|
void generateExpression(valueDef *vd, int in_str, FILE *fp); |
|
void warning(char *,...); |
|
void fatal(char *,...); |
|
void fatalScopedName(scopedNameDef *); |
|
int setInputFile(FILE *open_fp, parserContext *pc, int optional); |
|
void *sipMalloc(size_t n); |
|
void *sipCalloc(size_t nr, size_t n); |
|
char *sipStrdup(const char *); |
|
char *concat(const char *, ...); |
|
void append(char **, const char *); |
|
void addToUsedList(ifaceFileList **, ifaceFileDef *); |
|
int excludedFeature(stringList *,qualDef *); |
|
int sameSignature(signatureDef *,signatureDef *,int); |
|
int sameTemplateSignature(signatureDef *tmpl_sd, signatureDef *args_sd, |
|
int deep); |
|
int compareScopedNames(scopedNameDef *snd1, scopedNameDef *snd2); |
|
int sameBaseType(argDef *,argDef *); |
|
char *scopedNameTail(scopedNameDef *); |
|
scopedNameDef *copyScopedName(scopedNameDef *); |
|
void appendScopedName(scopedNameDef **,scopedNameDef *); |
|
void freeScopedName(scopedNameDef *); |
|
void appendToClassList(classList **,classDef *); |
|
void appendCodeBlock(codeBlock **headp, codeBlock *new); |
|
void prcode(FILE *fp, const char *fmt, ...); |
|
void prOverloadName(FILE *fp, overDef *od); |
|
void prOverloadDecl(FILE *fp, ifaceFileDef *scope, overDef *od, int defval); |
|
void prScopedPythonName(FILE *fp, classDef *scope, const char *pyname); |
|
int prPythonSignature(sipSpec *pt, FILE *fp, signatureDef *sd, int sec, |
|
int names, int defaults, int in_str, int is_signal); |
|
void searchTypedefs(sipSpec *pt, scopedNameDef *snd, argDef *ad); |
|
int isIntReturnSlot(memberDef *md); |
|
int isSSizeReturnSlot(memberDef *md); |
|
int isLongReturnSlot(memberDef *md); |
|
int isVoidReturnSlot(memberDef *md); |
|
int isNumberSlot(memberDef *md); |
|
int isRichCompareSlot(memberDef *md); |
|
mappedTypeDef *allocMappedType(sipSpec *pt, argDef *type); |
|
void appendString(stringList **headp, const char *s); |
|
void appendTypeStrings(scopedNameDef *ename, signatureDef *patt, signatureDef *src, signatureDef *known, scopedNameDef **names, scopedNameDef **values); |
|
codeBlock *templateCode(sipSpec *pt, ifaceFileList **used, codeBlock *ocb, scopedNameDef *names, scopedNameDef *values); |
|
ifaceFileDef *findIfaceFile(sipSpec *pt, moduleDef *mod, |
|
scopedNameDef *fqname, ifaceFileType iftype, |
|
apiVersionRangeDef *api_range, argDef *ad); |
|
int pluginPyTQt3(sipSpec *pt); |
|
int pluginPyTQt4(sipSpec *pt); |
|
void yywarning(char *); |
|
nameDef *cacheName(sipSpec *pt, const char *name); |
|
scopedNameDef *encodedTemplateName(templateDef *td); |
|
apiVersionRangeDef *findAPI(sipSpec *pt, const char *name); |
|
|
|
|
|
/* These are only here because bison publically references them. */ |
|
|
|
/* Represent a set of option flags. */ |
|
|
|
#define MAX_NR_FLAGS 5 |
|
|
|
typedef enum { |
|
bool_flag, |
|
string_flag, |
|
name_flag, |
|
opt_name_flag, |
|
dotted_name_flag, |
|
integer_flag, |
|
api_range_flag |
|
} flagType; |
|
|
|
typedef struct { |
|
char *fname; /* The flag name. */ |
|
flagType ftype; /* The flag type. */ |
|
union { /* The flag value. */ |
|
char *sval; /* A string value. */ |
|
long ival; /* An integer value. */ |
|
apiVersionRangeDef *aval; /* An API range value. */ |
|
} fvalue; |
|
} optFlag; |
|
|
|
typedef struct { |
|
int nrFlags; /* The number of flags. */ |
|
optFlag flags[MAX_NR_FLAGS]; /* Each flag. */ |
|
} optFlags; |
|
|
|
#endif
|
|
|