@@ -90,6 +90,17 @@ def callback_wrapper_code(self):
9090 """Return True if this parameter has callback wrapper code to generate."""
9191 return False
9292
93+ class StandardABIType (Type ):
94+
95+ @property
96+ def tmpname (self ):
97+ return f'{ self .name } _tmp'
98+
99+ @property
100+ def argument (self ):
101+ return self .tmpname
102+
103+
93104@Type .add_type ('ERROR_CLASS' , abi_type = ['ompi' ])
94105class TypeErrorClass (Type ):
95106
@@ -100,15 +111,90 @@ def return_code(self, name):
100111 return [f'return { name } ;' ]
101112
102113@Type .add_type ('ERROR_CLASS' , abi_type = ['standard' ])
103- class TypeErrorClass ( Type ):
114+ class TypeErrorClassStandard ( StandardABIType ):
104115
105116 def type_text (self , enable_count = False ):
106117 return 'int'
107118
119+ @property
120+ def init_code (self ):
121+ return [f'int { self .tmpname } = { ConvertFuncs .ERROR_CLASS } ({ self .name } );' ]
122+
108123 def return_code (self , name ):
109124 return [f'return { ConvertOMPIToStandard .ERROR_CLASS } ({ name } );' ]
110125
111126
127+ @Type .add_type ('ERROR_CLASS_OUT' , abi_type = ['ompi' ])
128+ class TypeErrorClassOut (Type ):
129+
130+ def type_text (self , enable_count = False ):
131+ return 'int *'
132+
133+ @Type .add_type ('ERROR_CLASS_OUT' , abi_type = ['standard' ])
134+ class TypeErrorClassOutStandard (StandardABIType ):
135+
136+ def type_text (self , enable_count = False ):
137+ return 'int *'
138+
139+ @property
140+ def final_code (self ):
141+ return [f'*{ self .name } = { ConvertOMPIToStandard .ERROR_CLASS } (*{ self .name } );' ]
142+
143+ @property
144+ def argument (self ):
145+ return f'{ self .name } '
146+
147+ #
148+ # types below seem duplicative of ERROR_CLASS but
149+ # are provided for clarity in the template files
150+ # to distinguish between classes and codes which can
151+ # have different values (in theory) if they are not
152+ # predeinfed by MPI
153+ #
154+ @Type .add_type ('ERROR_CODE' , abi_type = ['ompi' ])
155+ class TypeErrorCode (Type ):
156+
157+ def type_text (self , enable_count = False ):
158+ return 'int'
159+
160+ def return_code (self , name ):
161+ return [f'return { name } ;' ]
162+
163+ @Type .add_type ('ERROR_CODE' , abi_type = ['standard' ])
164+ class TypeErrorCodeStandard (StandardABIType ):
165+
166+ def type_text (self , enable_count = False ):
167+ return 'int'
168+
169+ @property
170+ def init_code (self ):
171+ return [f'int { self .tmpname } = { ConvertFuncs .ERROR_CLASS } ({ self .name } );' ]
172+
173+ def return_code (self , name ):
174+ return [f'return { ConvertOMPIToStandard .ERROR_CLASS } ({ name } );' ]
175+
176+
177+ @Type .add_type ('ERROR_CODE_OUT' , abi_type = ['ompi' ])
178+ class TypeErrorCodeOut (Type ):
179+
180+ def type_text (self , enable_count = False ):
181+ return 'int *'
182+
183+ @Type .add_type ('ERROR_CODE_OUT' , abi_type = ['standard' ])
184+ class TypeErrorCodeOutStandard (StandardABIType ):
185+
186+ def type_text (self , enable_count = False ):
187+ return 'int *'
188+
189+ @property
190+ def final_code (self ):
191+ return [f'*{ self .name } = { ConvertOMPIToStandard .ERROR_CLASS } (*{ self .name } );' ]
192+
193+ @property
194+ def argument (self ):
195+ return f'{ self .name } '
196+
197+
112198@Type .add_type ('BUFFER' )
113199class TypeBuffer (Type ):
114200
@@ -411,16 +497,6 @@ def type_text(self, enable_count=False):
411497 def parameter (self , enable_count = False , ** kwargs ):
412498 return f'{ self .type_text (enable_count = enable_count )} { self .name } []'
413499
414- class StandardABIType (Type ):
415-
416- @property
417- def tmpname (self ):
418- return f'{ self .name } _tmp'
419-
420- @property
421- def argument (self ):
422- return self .tmpname
423-
424500
425501@Type .add_type ('DATATYPE' , abi_type = ['standard' ])
426502class TypeDatatypeStandard (StandardABIType ):
0 commit comments