@@ -711,24 +711,16 @@ def DefaultImpl(method, param_names):
711711 wrapper = self .info [method .name ].wrapper
712712 if not wrapper :
713713 # return the default implementation of the class
714- if method .abstract :
715- s = indent2 + 'PyErr_SetString(PyExc_RuntimeError, "pure virtual function called");\n ' + \
716- indent2 + 'throw_error_already_set();\n '
717- params = ', ' .join (param_names )
718- s += indent2 + '%s%s(%s);\n ' % \
719- (return_str , method .name , params )
720- return s
721- else :
722- return indent2 + '%s%s(%s);\n ' % \
723- (return_str , method .FullName (), ', ' .join (param_names ))
714+ return indent2 + '%s%s(%s);\n ' % \
715+ (return_str , method .FullName (), ', ' .join (param_names ))
724716 else :
725717 if wrapper .code :
726718 self .codeunit .Write ('declaration-outside' , wrapper .code )
727719 # return a call for the wrapper
728720 params = ', ' .join (['this' ] + param_names )
729721 return indent2 + '%s%s(%s);\n ' % (return_str , wrapper .FullName (), params )
730722
731- if method .visibility != Scope .private :
723+ if not method . abstract and method .visibility != Scope .private :
732724 minArgs = method .minArgs
733725 maxArgs = method .maxArgs
734726 impl_names = self .DefaultImplementationNames (method )
@@ -759,7 +751,9 @@ def MethodDefinition(self, method):
759751 # create a list of default-impl pointers
760752 minArgs = method .minArgs
761753 maxArgs = method .maxArgs
762- if is_method_unique :
754+ if method .abstract :
755+ default_pointers = []
756+ elif is_method_unique :
763757 default_pointers = ['&%s::%s' % (wrapper_name , x ) for x in default_names ]
764758 else :
765759 default_pointers = []
@@ -772,6 +766,8 @@ def MethodDefinition(self, method):
772766
773767 # get the pointer of the method
774768 pointer = method .PointerDeclaration ()
769+ if method .abstract :
770+ pointer = namespaces .python + ('pure_virtual(%s)' % pointer )
775771
776772 # Add policy to overloaded methods also
777773 policy = self .info [method .name ].policy or ''
@@ -781,9 +777,12 @@ def MethodDefinition(self, method):
781777 # generate the defs
782778 definitions = []
783779 # basic def
784- definitions .append ('.def("%s", %s, %s%s)' % (rename , pointer , default_pointers [- 1 ], policy ))
785- for default_pointer in default_pointers [:- 1 ]:
786- definitions .append ('.def("%s", %s%s)' % (rename , default_pointer , policy ))
780+ if default_pointers :
781+ definitions .append ('.def("%s", %s, %s%s)' % (rename , pointer , default_pointers [- 1 ], policy ))
782+ for default_pointer in default_pointers [:- 1 ]:
783+ definitions .append ('.def("%s", %s%s)' % (rename , default_pointer , policy ))
784+ else :
785+ definitions .append ('.def("%s", %s%s)' % (rename , pointer , policy ))
787786 return definitions
788787
789788
0 commit comments