Unicode properties: support \p{(?:Is)?L&} as an alias for \pL.
[p5sagit/p5-mst-13.2.git] / pod / perlcall.pod
CommitLineData
a0d0e21e 1=head1 NAME
2
3perlcall - Perl calling conventions from C
4
5=head1 DESCRIPTION
6
d1b91892 7The purpose of this document is to show you how to call Perl subroutines
5f05dabc 8directly from C, i.e., how to write I<callbacks>.
a0d0e21e 9
d1b91892 10Apart from discussing the C interface provided by Perl for writing
11callbacks the document uses a series of examples to show how the
12interface actually works in practice. In addition some techniques for
13coding callbacks are covered.
a0d0e21e 14
d1b91892 15Examples where callbacks are necessary include
a0d0e21e 16
17=over 5
18
d1b91892 19=item * An Error Handler
a0d0e21e 20
21You have created an XSUB interface to an application's C API.
22
23A fairly common feature in applications is to allow you to define a C
d1b91892 24function that will be called whenever something nasty occurs. What we
25would like is to be able to specify a Perl subroutine that will be
26called instead.
a0d0e21e 27
d1b91892 28=item * An Event Driven Program
a0d0e21e 29
d1b91892 30The classic example of where callbacks are used is when writing an
31event driven program like for an X windows application. In this case
184e9718 32you register functions to be called whenever specific events occur,
5f05dabc 33e.g., a mouse button is pressed, the cursor moves into a window or a
d1b91892 34menu item is selected.
a0d0e21e 35
36=back
37
d1b91892 38Although the techniques described here are applicable when embedding
39Perl in a C program, this is not the primary goal of this document.
40There are other details that must be considered and are specific to
41embedding Perl. For details on embedding Perl in C refer to
42L<perlembed>.
a0d0e21e 43
d1b91892 44Before you launch yourself head first into the rest of this document,
45it would be a good idea to have read the following two documents -
8e07c86e 46L<perlxs> and L<perlguts>.
a0d0e21e 47
4929bf7b 48=head1 THE CALL_ FUNCTIONS
a0d0e21e 49
d1b91892 50Although this stuff is easier to explain using examples, you first need
51be aware of a few important definitions.
a0d0e21e 52
d1b91892 53Perl has a number of C functions that allow you to call Perl
54subroutines. They are
a0d0e21e 55
4929bf7b 56 I32 call_sv(SV* sv, I32 flags) ;
57 I32 call_pv(char *subname, I32 flags) ;
58 I32 call_method(char *methname, I32 flags) ;
59 I32 call_argv(char *subname, I32 flags, register char **argv) ;
a0d0e21e 60
4929bf7b 61The key function is I<call_sv>. All the other functions are
d1b91892 62fairly simple wrappers which make it easier to call Perl subroutines in
4929bf7b 63special cases. At the end of the day they will all call I<call_sv>
5f05dabc 64to invoke the Perl subroutine.
d1b91892 65
4929bf7b 66All the I<call_*> functions have a C<flags> parameter which is
d1b91892 67used to pass a bit mask of options to Perl. This bit mask operates
68identically for each of the functions. The settings available in the
69bit mask are discussed in L<FLAG VALUES>.
70
71Each of the functions will now be discussed in turn.
72
73=over 5
74
4929bf7b 75=item call_sv
d1b91892 76
4929bf7b 77I<call_sv> takes two parameters, the first, C<sv>, is an SV*.
d1b91892 78This allows you to specify the Perl subroutine to be called either as a
79C string (which has first been converted to an SV) or a reference to a
4929bf7b 80subroutine. The section, I<Using call_sv>, shows how you can make
81use of I<call_sv>.
d1b91892 82
4929bf7b 83=item call_pv
d1b91892 84
4929bf7b 85The function, I<call_pv>, is similar to I<call_sv> except it
d1b91892 86expects its first parameter to be a C char* which identifies the Perl
4929bf7b 87subroutine you want to call, e.g., C<call_pv("fred", 0)>. If the
d1b91892 88subroutine you want to call is in another package, just include the
5f05dabc 89package name in the string, e.g., C<"pkg::fred">.
d1b91892 90
4929bf7b 91=item call_method
d1b91892 92
4929bf7b 93The function I<call_method> is used to call a method from a Perl
d1b91892 94class. The parameter C<methname> corresponds to the name of the method
95to be called. Note that the class that the method belongs to is passed
96on the Perl stack rather than in the parameter list. This class can be
97either the name of the class (for a static method) or a reference to an
98object (for a virtual method). See L<perlobj> for more information on
4929bf7b 99static and virtual methods and L<Using call_method> for an example
100of using I<call_method>.
d1b91892 101
4929bf7b 102=item call_argv
d1b91892 103
4929bf7b 104I<call_argv> calls the Perl subroutine specified by the C string
d1b91892 105stored in the C<subname> parameter. It also takes the usual C<flags>
106parameter. The final parameter, C<argv>, consists of a NULL terminated
107list of C strings to be passed as parameters to the Perl subroutine.
4929bf7b 108See I<Using call_argv>.
d1b91892 109
110=back
111
112All the functions return an integer. This is a count of the number of
113items returned by the Perl subroutine. The actual items returned by the
114subroutine are stored on the Perl stack.
115
116As a general rule you should I<always> check the return value from
117these functions. Even if you are expecting only a particular number of
118values to be returned from the Perl subroutine, there is nothing to
19799a22 119stop someone from doing something unexpected--don't say you haven't
d1b91892 120been warned.
121
122=head1 FLAG VALUES
123
4929bf7b 124The C<flags> parameter in all the I<call_*> functions is a bit mask
d1b91892 125which can consist of any combination of the symbols defined below,
126OR'ed together.
127
128
54310121 129=head2 G_VOID
130
131Calls the Perl subroutine in a void context.
132
133This flag has 2 effects:
134
135=over 5
136
137=item 1.
138
139It indicates to the subroutine being called that it is executing in
140a void context (if it executes I<wantarray> the result will be the
141undefined value).
142
143=item 2.
144
145It ensures that nothing is actually returned from the subroutine.
146
147=back
148
4929bf7b 149The value returned by the I<call_*> function indicates how many
54310121 150items have been returned by the Perl subroutine - in this case it will
151be 0.
152
153
d1b91892 154=head2 G_SCALAR
155
156Calls the Perl subroutine in a scalar context. This is the default
4929bf7b 157context flag setting for all the I<call_*> functions.
d1b91892 158
184e9718 159This flag has 2 effects:
d1b91892 160
161=over 5
162
163=item 1.
164
184e9718 165It indicates to the subroutine being called that it is executing in a
d1b91892 166scalar context (if it executes I<wantarray> the result will be false).
a0d0e21e 167
d1b91892 168=item 2.
169
184e9718 170It ensures that only a scalar is actually returned from the subroutine.
d1b91892 171The subroutine can, of course, ignore the I<wantarray> and return a
172list anyway. If so, then only the last element of the list will be
173returned.
174
175=back
176
4929bf7b 177The value returned by the I<call_*> function indicates how many
d1b91892 178items have been returned by the Perl subroutine - in this case it will
179be either 0 or 1.
a0d0e21e 180
d1b91892 181If 0, then you have specified the G_DISCARD flag.
a0d0e21e 182
d1b91892 183If 1, then the item actually returned by the Perl subroutine will be
184stored on the Perl stack - the section I<Returning a Scalar> shows how
185to access this value on the stack. Remember that regardless of how
186many items the Perl subroutine returns, only the last one will be
187accessible from the stack - think of the case where only one value is
188returned as being a list with only one element. Any other items that
189were returned will not exist by the time control returns from the
4929bf7b 190I<call_*> function. The section I<Returning a list in a scalar
54310121 191context> shows an example of this behavior.
a0d0e21e 192
a0d0e21e 193
d1b91892 194=head2 G_ARRAY
a0d0e21e 195
d1b91892 196Calls the Perl subroutine in a list context.
a0d0e21e 197
184e9718 198As with G_SCALAR, this flag has 2 effects:
a0d0e21e 199
200=over 5
201
d1b91892 202=item 1.
203
90fdbbb7 204It indicates to the subroutine being called that it is executing in a
205list context (if it executes I<wantarray> the result will be true).
a0d0e21e 206
a0d0e21e 207
d1b91892 208=item 2.
a0d0e21e 209
184e9718 210It ensures that all items returned from the subroutine will be
4929bf7b 211accessible when control returns from the I<call_*> function.
a0d0e21e 212
d1b91892 213=back
a0d0e21e 214
4929bf7b 215The value returned by the I<call_*> function indicates how many
d1b91892 216items have been returned by the Perl subroutine.
a0d0e21e 217
184e9718 218If 0, then you have specified the G_DISCARD flag.
a0d0e21e 219
d1b91892 220If not 0, then it will be a count of the number of items returned by
221the subroutine. These items will be stored on the Perl stack. The
222section I<Returning a list of values> gives an example of using the
223G_ARRAY flag and the mechanics of accessing the returned items from the
224Perl stack.
a0d0e21e 225
d1b91892 226=head2 G_DISCARD
a0d0e21e 227
4929bf7b 228By default, the I<call_*> functions place the items returned from
d1b91892 229by the Perl subroutine on the stack. If you are not interested in
230these items, then setting this flag will make Perl get rid of them
231automatically for you. Note that it is still possible to indicate a
232context to the Perl subroutine by using either G_SCALAR or G_ARRAY.
a0d0e21e 233
d1b91892 234If you do not set this flag then it is I<very> important that you make
5f05dabc 235sure that any temporaries (i.e., parameters passed to the Perl
d1b91892 236subroutine and values returned from the subroutine) are disposed of
237yourself. The section I<Returning a Scalar> gives details of how to
5f05dabc 238dispose of these temporaries explicitly and the section I<Using Perl to
d1b91892 239dispose of temporaries> discusses the specific circumstances where you
240can ignore the problem and let Perl deal with it for you.
a0d0e21e 241
d1b91892 242=head2 G_NOARGS
a0d0e21e 243
4929bf7b 244Whenever a Perl subroutine is called using one of the I<call_*>
d1b91892 245functions, it is assumed by default that parameters are to be passed to
246the subroutine. If you are not passing any parameters to the Perl
247subroutine, you can save a bit of time by setting this flag. It has
248the effect of not creating the C<@_> array for the Perl subroutine.
a0d0e21e 249
d1b91892 250Although the functionality provided by this flag may seem
251straightforward, it should be used only if there is a good reason to do
252so. The reason for being cautious is that even if you have specified
253the G_NOARGS flag, it is still possible for the Perl subroutine that
254has been called to think that you have passed it parameters.
a0d0e21e 255
d1b91892 256In fact, what can happen is that the Perl subroutine you have called
257can access the C<@_> array from a previous Perl subroutine. This will
4929bf7b 258occur when the code that is executing the I<call_*> function has
d1b91892 259itself been called from another Perl subroutine. The code below
260illustrates this
a0d0e21e 261
769c2898 262 sub fred {
263 print "@_\n";
264 }
a0d0e21e 265
769c2898 266 sub joe {
267 &fred;
268 }
a0d0e21e 269
769c2898 270 &joe(1,2,3);
a0d0e21e 271
272This will print
273
d1b91892 274 1 2 3
275
276What has happened is that C<fred> accesses the C<@_> array which
277belongs to C<joe>.
a0d0e21e 278
a0d0e21e 279
54310121 280=head2 G_EVAL
a0d0e21e 281
d1b91892 282It is possible for the Perl subroutine you are calling to terminate
5f05dabc 283abnormally, e.g., by calling I<die> explicitly or by not actually
268118b2 284existing. By default, when either of these events occurs, the
285process will terminate immediately. If you want to trap this
d1b91892 286type of event, specify the G_EVAL flag. It will put an I<eval { }>
287around the subroutine call.
a0d0e21e 288
4929bf7b 289Whenever control returns from the I<call_*> function you need to
d1b91892 290check the C<$@> variable as you would in a normal Perl script.
291
4929bf7b 292The value returned from the I<call_*> function is dependent on
d1b91892 293what other flags have been specified and whether an error has
184e9718 294occurred. Here are all the different cases that can occur:
d1b91892 295
296=over 5
297
298=item *
299
4929bf7b 300If the I<call_*> function returns normally, then the value
d1b91892 301returned is as specified in the previous sections.
302
303=item *
304
305If G_DISCARD is specified, the return value will always be 0.
306
307=item *
308
309If G_ARRAY is specified I<and> an error has occurred, the return value
310will always be 0.
311
312=item *
a0d0e21e 313
d1b91892 314If G_SCALAR is specified I<and> an error has occurred, the return value
315will be 1 and the value on the top of the stack will be I<undef>. This
316means that if you have already detected the error by checking C<$@> and
317you want the program to continue, you must remember to pop the I<undef>
318from the stack.
a0d0e21e 319
320=back
321
54310121 322See I<Using G_EVAL> for details on using G_EVAL.
d1b91892 323
c07a80fd 324=head2 G_KEEPERR
325
326You may have noticed that using the G_EVAL flag described above will
327B<always> clear the C<$@> variable and set it to a string describing
328the error iff there was an error in the called code. This unqualified
329resetting of C<$@> can be problematic in the reliable identification of
330errors using the C<eval {}> mechanism, because the possibility exists
331that perl will call other code (end of block processing code, for
332example) between the time the error causes C<$@> to be set within
333C<eval {}>, and the subsequent statement which checks for the value of
334C<$@> gets executed in the user's script.
335
336This scenario will mostly be applicable to code that is meant to be
337called from within destructors, asynchronous callbacks, signal
338handlers, C<__DIE__> or C<__WARN__> hooks, and C<tie> functions. In
339such situations, you will not want to clear C<$@> at all, but simply to
340append any new errors to any existing value of C<$@>.
341
342The G_KEEPERR flag is meant to be used in conjunction with G_EVAL in
4929bf7b 343I<call_*> functions that are used to implement such code. This flag
c07a80fd 344has no effect when G_EVAL is not used.
345
346When G_KEEPERR is used, any errors in the called code will be prefixed
347with the string "\t(in cleanup)", and appended to the current value
348of C<$@>.
349
350The G_KEEPERR flag was introduced in Perl version 5.002.
351
352See I<Using G_KEEPERR> for an example of a situation that warrants the
353use of this flag.
354
54310121 355=head2 Determining the Context
d1b91892 356
357As mentioned above, you can determine the context of the currently
54310121 358executing subroutine in Perl with I<wantarray>. The equivalent test
359can be made in C by using the C<GIMME_V> macro, which returns
90fdbbb7 360C<G_ARRAY> if you have been called in a list context, C<G_SCALAR> if
7a2e2cd6 361in a scalar context, or C<G_VOID> if in a void context (i.e. the
54310121 362return value will not be used). An older version of this macro is
363called C<GIMME>; in a void context it returns C<G_SCALAR> instead of
364C<G_VOID>. An example of using the C<GIMME_V> macro is shown in
365section I<Using GIMME_V>.
d1b91892 366
367=head1 KNOWN PROBLEMS
368
369This section outlines all known problems that exist in the
4929bf7b 370I<call_*> functions.
d1b91892 371
372=over 5
373
374=item 1.
375
376If you are intending to make use of both the G_EVAL and G_SCALAR flags
377in your code, use a version of Perl greater than 5.000. There is a bug
378in version 5.000 of Perl which means that the combination of these two
379flags will not work as described in the section I<FLAG VALUES>.
380
381Specifically, if the two flags are used when calling a subroutine and
382that subroutine does not call I<die>, the value returned by
4929bf7b 383I<call_*> will be wrong.
d1b91892 384
385
386=item 2.
387
4929bf7b 388In Perl 5.000 and 5.001 there is a problem with using I<call_*> if
d1b91892 389the Perl sub you are calling attempts to trap a I<die>.
390
391The symptom of this problem is that the called Perl sub will continue
392to completion, but whenever it attempts to pass control back to the
393XSUB, the program will immediately terminate.
394
395For example, say you want to call this Perl sub
396
769c2898 397 sub fred {
398 eval { die "Fatal Error" }
399 print "Trapped error: $@\n" if $@;
d1b91892 400 }
401
402via this XSUB
403
404 void
405 Call_fred()
406 CODE:
924508f0 407 PUSHMARK(SP) ;
4929bf7b 408 call_pv("fred", G_DISCARD|G_NOARGS) ;
d1b91892 409 fprintf(stderr, "back in Call_fred\n") ;
410
411When C<Call_fred> is executed it will print
412
413 Trapped error: Fatal Error
414
415As control never returns to C<Call_fred>, the C<"back in Call_fred">
416string will not get printed.
417
3fe9a6f1 418To work around this problem, you can either upgrade to Perl 5.002 or
4929bf7b 419higher, or use the G_EVAL flag with I<call_*> as shown below
d1b91892 420
421 void
422 Call_fred()
423 CODE:
924508f0 424 PUSHMARK(SP) ;
4929bf7b 425 call_pv("fred", G_EVAL|G_DISCARD|G_NOARGS) ;
d1b91892 426 fprintf(stderr, "back in Call_fred\n") ;
427
428=back
429
430
a0d0e21e 431
432=head1 EXAMPLES
433
434Enough of the definition talk, let's have a few examples.
435
d1b91892 436Perl provides many macros to assist in accessing the Perl stack.
437Wherever possible, these macros should always be used when interfacing
5f05dabc 438to Perl internals. We hope this should make the code less vulnerable
d1b91892 439to any changes made to Perl in the future.
a0d0e21e 440
d1b91892 441Another point worth noting is that in the first series of examples I
4929bf7b 442have made use of only the I<call_pv> function. This has been done
d1b91892 443to keep the code simpler and ease you into the topic. Wherever
4929bf7b 444possible, if the choice is between using I<call_pv> and
445I<call_sv>, you should always try to use I<call_sv>. See
446I<Using call_sv> for details.
a0d0e21e 447
d1b91892 448=head2 No Parameters, Nothing returned
a0d0e21e 449
d1b91892 450This first trivial example will call a Perl subroutine, I<PrintUID>, to
451print out the UID of the process.
a0d0e21e 452
769c2898 453 sub PrintUID {
454 print "UID is $<\n";
a0d0e21e 455 }
456
d1b91892 457and here is a C function to call it
a0d0e21e 458
d1b91892 459 static void
a0d0e21e 460 call_PrintUID()
461 {
d1b91892 462 dSP ;
a0d0e21e 463
924508f0 464 PUSHMARK(SP) ;
4929bf7b 465 call_pv("PrintUID", G_DISCARD|G_NOARGS) ;
a0d0e21e 466 }
467
d1b91892 468Simple, eh.
a0d0e21e 469
d1b91892 470A few points to note about this example.
a0d0e21e 471
472=over 5
473
d1b91892 474=item 1.
a0d0e21e 475
924508f0 476Ignore C<dSP> and C<PUSHMARK(SP)> for now. They will be discussed in
d1b91892 477the next example.
a0d0e21e 478
479=item 2.
480
d1b91892 481We aren't passing any parameters to I<PrintUID> so G_NOARGS can be
482specified.
a0d0e21e 483
d1b91892 484=item 3.
a0d0e21e 485
486We aren't interested in anything returned from I<PrintUID>, so
5f05dabc 487G_DISCARD is specified. Even if I<PrintUID> was changed to
a0d0e21e 488return some value(s), having specified G_DISCARD will mean that they
4929bf7b 489will be wiped by the time control returns from I<call_pv>.
a0d0e21e 490
d1b91892 491=item 4.
a0d0e21e 492
4929bf7b 493As I<call_pv> is being used, the Perl subroutine is specified as a
d1b91892 494C string. In this case the subroutine name has been 'hard-wired' into the
495code.
a0d0e21e 496
497=item 5.
498
d1b91892 499Because we specified G_DISCARD, it is not necessary to check the value
4929bf7b 500returned from I<call_pv>. It will always be 0.
a0d0e21e 501
502=back
503
d1b91892 504=head2 Passing Parameters
a0d0e21e 505
d1b91892 506Now let's make a slightly more complex example. This time we want to
19799a22 507call a Perl subroutine, C<LeftString>, which will take 2 parameters--a
508string ($s) and an integer ($n). The subroutine will simply
509print the first $n characters of the string.
a0d0e21e 510
d1b91892 511So the Perl subroutine would look like this
a0d0e21e 512
769c2898 513 sub LeftString {
514 my($s, $n) = @_ ;
515 print substr($s, 0, $n), "\n";
a0d0e21e 516 }
517
518The C function required to call I<LeftString> would look like this.
519
520 static void
521 call_LeftString(a, b)
522 char * a ;
523 int b ;
524 {
525 dSP ;
526
9b6570b4 527 ENTER ;
528 SAVETMPS ;
529
924508f0 530 PUSHMARK(SP) ;
a0d0e21e 531 XPUSHs(sv_2mortal(newSVpv(a, 0)));
532 XPUSHs(sv_2mortal(newSViv(b)));
533 PUTBACK ;
534
4929bf7b 535 call_pv("LeftString", G_DISCARD);
9b6570b4 536
537 FREETMPS ;
538 LEAVE ;
a0d0e21e 539 }
540
a0d0e21e 541Here are a few notes on the C function I<call_LeftString>.
542
543=over 5
544
d1b91892 545=item 1.
a0d0e21e 546
d1b91892 547Parameters are passed to the Perl subroutine using the Perl stack.
548This is the purpose of the code beginning with the line C<dSP> and
1e62ac33 549ending with the line C<PUTBACK>. The C<dSP> declares a local copy
924508f0 550of the stack pointer. This local copy should B<always> be accessed
551as C<SP>.
a0d0e21e 552
d1b91892 553=item 2.
a0d0e21e 554
555If you are going to put something onto the Perl stack, you need to know
19799a22 556where to put it. This is the purpose of the macro C<dSP>--it declares
d1b91892 557and initializes a I<local> copy of the Perl stack pointer.
a0d0e21e 558
559All the other macros which will be used in this example require you to
d1b91892 560have used this macro.
a0d0e21e 561
d1b91892 562The exception to this rule is if you are calling a Perl subroutine
563directly from an XSUB function. In this case it is not necessary to
19799a22 564use the C<dSP> macro explicitly--it will be declared for you
d1b91892 565automatically.
a0d0e21e 566
d1b91892 567=item 3.
a0d0e21e 568
569Any parameters to be pushed onto the stack should be bracketed by the
d1b91892 570C<PUSHMARK> and C<PUTBACK> macros. The purpose of these two macros, in
5f05dabc 571this context, is to count the number of parameters you are
572pushing automatically. Then whenever Perl is creating the C<@_> array for the
d1b91892 573subroutine, it knows how big to make it.
574
575The C<PUSHMARK> macro tells Perl to make a mental note of the current
576stack pointer. Even if you aren't passing any parameters (like the
577example shown in the section I<No Parameters, Nothing returned>) you
578must still call the C<PUSHMARK> macro before you can call any of the
4929bf7b 579I<call_*> functions--Perl still needs to know that there are no
d1b91892 580parameters.
581
582The C<PUTBACK> macro sets the global copy of the stack pointer to be
4929bf7b 583the same as our local copy. If we didn't do this I<call_pv>
19799a22 584wouldn't know where the two parameters we pushed were--remember that
d1b91892 585up to now all the stack pointer manipulation we have done is with our
586local copy, I<not> the global copy.
587
588=item 4.
589
a0d0e21e 590Next, we come to XPUSHs. This is where the parameters actually get
d1b91892 591pushed onto the stack. In this case we are pushing a string and an
592integer.
a0d0e21e 593
54310121 594See L<perlguts/"XSUBs and the Argument Stack"> for details
d1b91892 595on how the XPUSH macros work.
a0d0e21e 596
087fe227 597=item 5.
a0d0e21e 598
9b6570b4 599Because we created temporary values (by means of sv_2mortal() calls)
600we will have to tidy up the Perl stack and dispose of mortal SVs.
601
602This is the purpose of
603
604 ENTER ;
605 SAVETMPS ;
606
607at the start of the function, and
608
609 FREETMPS ;
610 LEAVE ;
611
612at the end. The C<ENTER>/C<SAVETMPS> pair creates a boundary for any
613temporaries we create. This means that the temporaries we get rid of
614will be limited to those which were created after these calls.
615
616The C<FREETMPS>/C<LEAVE> pair will get rid of any values returned by
617the Perl subroutine (see next example), plus it will also dump the
618mortal SVs we have created. Having C<ENTER>/C<SAVETMPS> at the
619beginning of the code makes sure that no other mortals are destroyed.
620
621Think of these macros as working a bit like using C<{> and C<}> in Perl
622to limit the scope of local variables.
623
624See the section I<Using Perl to dispose of temporaries> for details of
625an alternative to using these macros.
626
087fe227 627=item 6.
9b6570b4 628
087fe227 629Finally, I<LeftString> can now be called via the I<call_pv> function.
630The only flag specified this time is G_DISCARD. Because we are passing
6312 parameters to the Perl subroutine this time, we have not specified
632G_NOARGS.
a0d0e21e 633
634=back
635
d1b91892 636=head2 Returning a Scalar
a0d0e21e 637
d1b91892 638Now for an example of dealing with the items returned from a Perl
639subroutine.
a0d0e21e 640
5f05dabc 641Here is a Perl subroutine, I<Adder>, that takes 2 integer parameters
d1b91892 642and simply returns their sum.
a0d0e21e 643
769c2898 644 sub Adder {
645 my($a, $b) = @_;
646 $a + $b;
a0d0e21e 647 }
648
5f05dabc 649Because we are now concerned with the return value from I<Adder>, the C
d1b91892 650function required to call it is now a bit more complex.
a0d0e21e 651
652 static void
653 call_Adder(a, b)
654 int a ;
655 int b ;
656 {
657 dSP ;
658 int count ;
659
660 ENTER ;
661 SAVETMPS;
662
924508f0 663 PUSHMARK(SP) ;
a0d0e21e 664 XPUSHs(sv_2mortal(newSViv(a)));
665 XPUSHs(sv_2mortal(newSViv(b)));
666 PUTBACK ;
667
4929bf7b 668 count = call_pv("Adder", G_SCALAR);
a0d0e21e 669
670 SPAGAIN ;
671
d1b91892 672 if (count != 1)
673 croak("Big trouble\n") ;
a0d0e21e 674
d1b91892 675 printf ("The sum of %d and %d is %d\n", a, b, POPi) ;
a0d0e21e 676
677 PUTBACK ;
678 FREETMPS ;
679 LEAVE ;
680 }
681
a0d0e21e 682Points to note this time are
683
684=over 5
685
54310121 686=item 1.
a0d0e21e 687
d1b91892 688The only flag specified this time was G_SCALAR. That means the C<@_>
689array will be created and that the value returned by I<Adder> will
4929bf7b 690still exist after the call to I<call_pv>.
a0d0e21e 691
a0d0e21e 692=item 2.
693
a0d0e21e 694The purpose of the macro C<SPAGAIN> is to refresh the local copy of the
695stack pointer. This is necessary because it is possible that the memory
68dc0745 696allocated to the Perl stack has been reallocated whilst in the
4929bf7b 697I<call_pv> call.
a0d0e21e 698
d1b91892 699If you are making use of the Perl stack pointer in your code you must
54310121 700always refresh the local copy using SPAGAIN whenever you make use
4929bf7b 701of the I<call_*> functions or any other Perl internal function.
a0d0e21e 702
9b6570b4 703=item 3.
a0d0e21e 704
d1b91892 705Although only a single value was expected to be returned from I<Adder>,
4929bf7b 706it is still good practice to check the return code from I<call_pv>
d1b91892 707anyway.
a0d0e21e 708
d1b91892 709Expecting a single value is not quite the same as knowing that there
710will be one. If someone modified I<Adder> to return a list and we
711didn't check for that possibility and take appropriate action the Perl
712stack would end up in an inconsistent state. That is something you
5f05dabc 713I<really> don't want to happen ever.
a0d0e21e 714
9b6570b4 715=item 4.
a0d0e21e 716
d1b91892 717The C<POPi> macro is used here to pop the return value from the stack.
718In this case we wanted an integer, so C<POPi> was used.
a0d0e21e 719
720
d1b91892 721Here is the complete list of POP macros available, along with the types
722they return.
a0d0e21e 723
d1b91892 724 POPs SV
725 POPp pointer
726 POPn double
727 POPi integer
728 POPl long
a0d0e21e 729
9b6570b4 730=item 5.
a0d0e21e 731
d1b91892 732The final C<PUTBACK> is used to leave the Perl stack in a consistent
733state before exiting the function. This is necessary because when we
734popped the return value from the stack with C<POPi> it updated only our
735local copy of the stack pointer. Remember, C<PUTBACK> sets the global
736stack pointer to be the same as our local copy.
a0d0e21e 737
738=back
739
740
d1b91892 741=head2 Returning a list of values
a0d0e21e 742
d1b91892 743Now, let's extend the previous example to return both the sum of the
744parameters and the difference.
a0d0e21e 745
d1b91892 746Here is the Perl subroutine
a0d0e21e 747
769c2898 748 sub AddSubtract {
749 my($a, $b) = @_;
750 ($a+$b, $a-$b);
a0d0e21e 751 }
752
a0d0e21e 753and this is the C function
754
755 static void
756 call_AddSubtract(a, b)
757 int a ;
758 int b ;
759 {
760 dSP ;
761 int count ;
762
763 ENTER ;
764 SAVETMPS;
765
924508f0 766 PUSHMARK(SP) ;
a0d0e21e 767 XPUSHs(sv_2mortal(newSViv(a)));
768 XPUSHs(sv_2mortal(newSViv(b)));
769 PUTBACK ;
770
4929bf7b 771 count = call_pv("AddSubtract", G_ARRAY);
a0d0e21e 772
773 SPAGAIN ;
774
d1b91892 775 if (count != 2)
776 croak("Big trouble\n") ;
a0d0e21e 777
d1b91892 778 printf ("%d - %d = %d\n", a, b, POPi) ;
779 printf ("%d + %d = %d\n", a, b, POPi) ;
a0d0e21e 780
781 PUTBACK ;
782 FREETMPS ;
783 LEAVE ;
784 }
785
d1b91892 786If I<call_AddSubtract> is called like this
787
788 call_AddSubtract(7, 4) ;
789
790then here is the output
791
792 7 - 4 = 3
793 7 + 4 = 11
a0d0e21e 794
795Notes
796
797=over 5
798
799=item 1.
800
90fdbbb7 801We wanted list context, so G_ARRAY was used.
a0d0e21e 802
803=item 2.
804
d1b91892 805Not surprisingly C<POPi> is used twice this time because we were
806retrieving 2 values from the stack. The important thing to note is that
807when using the C<POP*> macros they come off the stack in I<reverse>
808order.
a0d0e21e 809
810=back
811
d1b91892 812=head2 Returning a list in a scalar context
813
814Say the Perl subroutine in the previous section was called in a scalar
815context, like this
816
817 static void
818 call_AddSubScalar(a, b)
819 int a ;
820 int b ;
821 {
822 dSP ;
823 int count ;
824 int i ;
825
826 ENTER ;
827 SAVETMPS;
828
924508f0 829 PUSHMARK(SP) ;
d1b91892 830 XPUSHs(sv_2mortal(newSViv(a)));
831 XPUSHs(sv_2mortal(newSViv(b)));
832 PUTBACK ;
833
4929bf7b 834 count = call_pv("AddSubtract", G_SCALAR);
d1b91892 835
836 SPAGAIN ;
837
838 printf ("Items Returned = %d\n", count) ;
839
840 for (i = 1 ; i <= count ; ++i)
841 printf ("Value %d = %d\n", i, POPi) ;
842
843 PUTBACK ;
844 FREETMPS ;
845 LEAVE ;
846 }
847
848The other modification made is that I<call_AddSubScalar> will print the
849number of items returned from the Perl subroutine and their value (for
850simplicity it assumes that they are integer). So if
851I<call_AddSubScalar> is called
852
853 call_AddSubScalar(7, 4) ;
854
855then the output will be
856
857 Items Returned = 1
858 Value 1 = 3
859
860In this case the main point to note is that only the last item in the
54310121 861list is returned from the subroutine, I<AddSubtract> actually made it back to
d1b91892 862I<call_AddSubScalar>.
863
864
865=head2 Returning Data from Perl via the parameter list
a0d0e21e 866
867It is also possible to return values directly via the parameter list -
868whether it is actually desirable to do it is another matter entirely.
869
d1b91892 870The Perl subroutine, I<Inc>, below takes 2 parameters and increments
871each directly.
a0d0e21e 872
769c2898 873 sub Inc {
874 ++$_[0];
875 ++$_[1];
a0d0e21e 876 }
877
878and here is a C function to call it.
879
880 static void
881 call_Inc(a, b)
882 int a ;
883 int b ;
884 {
885 dSP ;
886 int count ;
887 SV * sva ;
888 SV * svb ;
889
890 ENTER ;
891 SAVETMPS;
892
893 sva = sv_2mortal(newSViv(a)) ;
894 svb = sv_2mortal(newSViv(b)) ;
895
924508f0 896 PUSHMARK(SP) ;
a0d0e21e 897 XPUSHs(sva);
898 XPUSHs(svb);
899 PUTBACK ;
900
4929bf7b 901 count = call_pv("Inc", G_DISCARD);
a0d0e21e 902
903 if (count != 0)
d1b91892 904 croak ("call_Inc: expected 0 values from 'Inc', got %d\n",
905 count) ;
a0d0e21e 906
907 printf ("%d + 1 = %d\n", a, SvIV(sva)) ;
908 printf ("%d + 1 = %d\n", b, SvIV(svb)) ;
909
910 FREETMPS ;
d1b91892 911 LEAVE ;
a0d0e21e 912 }
913
d1b91892 914To be able to access the two parameters that were pushed onto the stack
4929bf7b 915after they return from I<call_pv> it is necessary to make a note
19799a22 916of their addresses--thus the two variables C<sva> and C<svb>.
a0d0e21e 917
d1b91892 918The reason this is necessary is that the area of the Perl stack which
919held them will very likely have been overwritten by something else by
4929bf7b 920the time control returns from I<call_pv>.
a0d0e21e 921
922
923
924
d1b91892 925=head2 Using G_EVAL
a0d0e21e 926
d1b91892 927Now an example using G_EVAL. Below is a Perl subroutine which computes
928the difference of its 2 parameters. If this would result in a negative
929result, the subroutine calls I<die>.
a0d0e21e 930
769c2898 931 sub Subtract {
932 my ($a, $b) = @_;
a0d0e21e 933
769c2898 934 die "death can be fatal\n" if $a < $b;
a0d0e21e 935
769c2898 936 $a - $b;
a0d0e21e 937 }
938
939and some C to call it
940
941 static void
942 call_Subtract(a, b)
943 int a ;
944 int b ;
945 {
946 dSP ;
947 int count ;
a0d0e21e 948
949 ENTER ;
950 SAVETMPS;
951
924508f0 952 PUSHMARK(SP) ;
a0d0e21e 953 XPUSHs(sv_2mortal(newSViv(a)));
954 XPUSHs(sv_2mortal(newSViv(b)));
955 PUTBACK ;
956
4929bf7b 957 count = call_pv("Subtract", G_EVAL|G_SCALAR);
a0d0e21e 958
d1b91892 959 SPAGAIN ;
960
961 /* Check the eval first */
9cde0e7f 962 if (SvTRUE(ERRSV))
d1b91892 963 {
2d8e6c8d 964 STRLEN n_a;
965 printf ("Uh oh - %s\n", SvPV(ERRSV, n_a)) ;
d1b91892 966 POPs ;
967 }
968 else
969 {
970 if (count != 1)
971 croak("call_Subtract: wanted 1 value from 'Subtract', got %d\n",
972 count) ;
a0d0e21e 973
d1b91892 974 printf ("%d - %d = %d\n", a, b, POPi) ;
975 }
a0d0e21e 976
977 PUTBACK ;
978 FREETMPS ;
979 LEAVE ;
a0d0e21e 980 }
981
982If I<call_Subtract> is called thus
983
d1b91892 984 call_Subtract(4, 5)
a0d0e21e 985
986the following will be printed
987
d1b91892 988 Uh oh - death can be fatal
a0d0e21e 989
990Notes
991
992=over 5
993
994=item 1.
995
d1b91892 996We want to be able to catch the I<die> so we have used the G_EVAL
997flag. Not specifying this flag would mean that the program would
998terminate immediately at the I<die> statement in the subroutine
999I<Subtract>.
a0d0e21e 1000
1001=item 2.
1002
54310121 1003The code
a0d0e21e 1004
9cde0e7f 1005 if (SvTRUE(ERRSV))
d1b91892 1006 {
2d8e6c8d 1007 STRLEN n_a;
1008 printf ("Uh oh - %s\n", SvPV(ERRSV, n_a)) ;
d1b91892 1009 POPs ;
1010 }
a0d0e21e 1011
d1b91892 1012is the direct equivalent of this bit of Perl
a0d0e21e 1013
d1b91892 1014 print "Uh oh - $@\n" if $@ ;
a0d0e21e 1015
9cde0e7f 1016C<PL_errgv> is a perl global of type C<GV *> that points to the
1017symbol table entry containing the error. C<ERRSV> therefore
c07a80fd 1018refers to the C equivalent of C<$@>.
1019
d1b91892 1020=item 3.
a0d0e21e 1021
d1b91892 1022Note that the stack is popped using C<POPs> in the block where
9cde0e7f 1023C<SvTRUE(ERRSV)> is true. This is necessary because whenever a
4929bf7b 1024I<call_*> function invoked with G_EVAL|G_SCALAR returns an error,
5f05dabc 1025the top of the stack holds the value I<undef>. Because we want the
d1b91892 1026program to continue after detecting this error, it is essential that
1027the stack is tidied up by removing the I<undef>.
a0d0e21e 1028
1029=back
1030
1031
c07a80fd 1032=head2 Using G_KEEPERR
1033
1034Consider this rather facetious example, where we have used an XS
1035version of the call_Subtract example above inside a destructor:
1036
1037 package Foo;
769c2898 1038
1039 sub new { bless {}, shift }
1040
54310121 1041 sub Subtract {
769c2898 1042 my($a,$b) = @_;
1043 die "death can be fatal" if $a < $b;
1044 $a - $b;
c07a80fd 1045 }
769c2898 1046
1047 sub DESTROY { call_Subtract(5, 4) }
1048 sub foo { die "foo dies" }
1049
c07a80fd 1050
1051 package main;
769c2898 1052
c07a80fd 1053 eval { Foo->new->foo };
1054 print "Saw: $@" if $@; # should be, but isn't
1055
1056This example will fail to recognize that an error occurred inside the
1057C<eval {}>. Here's why: the call_Subtract code got executed while perl
5f05dabc 1058was cleaning up temporaries when exiting the eval block, and because
4929bf7b 1059call_Subtract is implemented with I<call_pv> using the G_EVAL
c07a80fd 1060flag, it promptly reset C<$@>. This results in the failure of the
1061outermost test for C<$@>, and thereby the failure of the error trap.
1062
4929bf7b 1063Appending the G_KEEPERR flag, so that the I<call_pv> call in
c07a80fd 1064call_Subtract reads:
1065
4929bf7b 1066 count = call_pv("Subtract", G_EVAL|G_SCALAR|G_KEEPERR);
c07a80fd 1067
1068will preserve the error and restore reliable error handling.
1069
4929bf7b 1070=head2 Using call_sv
a0d0e21e 1071
d1b91892 1072In all the previous examples I have 'hard-wired' the name of the Perl
1073subroutine to be called from C. Most of the time though, it is more
1074convenient to be able to specify the name of the Perl subroutine from
1075within the Perl script.
a0d0e21e 1076
1077Consider the Perl code below
1078
769c2898 1079 sub fred {
1080 print "Hello there\n";
d1b91892 1081 }
1082
769c2898 1083 CallSubPV("fred");
d1b91892 1084
1085Here is a snippet of XSUB which defines I<CallSubPV>.
1086
1087 void
1088 CallSubPV(name)
1089 char * name
1090 CODE:
924508f0 1091 PUSHMARK(SP) ;
4929bf7b 1092 call_pv(name, G_DISCARD|G_NOARGS) ;
a0d0e21e 1093
54310121 1094That is fine as far as it goes. The thing is, the Perl subroutine
5f05dabc 1095can be specified as only a string. For Perl 4 this was adequate,
d1b91892 1096but Perl 5 allows references to subroutines and anonymous subroutines.
4929bf7b 1097This is where I<call_sv> is useful.
d1b91892 1098
1099The code below for I<CallSubSV> is identical to I<CallSubPV> except
1100that the C<name> parameter is now defined as an SV* and we use
4929bf7b 1101I<call_sv> instead of I<call_pv>.
d1b91892 1102
1103 void
1104 CallSubSV(name)
1105 SV * name
1106 CODE:
924508f0 1107 PUSHMARK(SP) ;
4929bf7b 1108 call_sv(name, G_DISCARD|G_NOARGS) ;
a0d0e21e 1109
5f05dabc 1110Because we are using an SV to call I<fred> the following can all be used
a0d0e21e 1111
769c2898 1112 CallSubSV("fred");
1113 CallSubSV(\&fred);
1114
1115 my $ref = \&fred;
1116 CallSubSV($ref);
1117 CallSubSV( sub { print "Hello there\n" } );
a0d0e21e 1118
4929bf7b 1119As you can see, I<call_sv> gives you much greater flexibility in
d1b91892 1120how you can specify the Perl subroutine.
1121
1122You should note that if it is necessary to store the SV (C<name> in the
1123example above) which corresponds to the Perl subroutine so that it can
5f05dabc 1124be used later in the program, it not enough just to store a copy of the
d1b91892 1125pointer to the SV. Say the code above had been like this
1126
1127 static SV * rememberSub ;
1128
1129 void
1130 SaveSub1(name)
1131 SV * name
1132 CODE:
1133 rememberSub = name ;
1134
1135 void
1136 CallSavedSub1()
1137 CODE:
924508f0 1138 PUSHMARK(SP) ;
4929bf7b 1139 call_sv(rememberSub, G_DISCARD|G_NOARGS) ;
a0d0e21e 1140
d1b91892 1141The reason this is wrong is that by the time you come to use the
1142pointer C<rememberSub> in C<CallSavedSub1>, it may or may not still refer
1143to the Perl subroutine that was recorded in C<SaveSub1>. This is
1144particularly true for these cases
a0d0e21e 1145
769c2898 1146 SaveSub1(\&fred);
1147 CallSavedSub1();
a0d0e21e 1148
769c2898 1149 SaveSub1( sub { print "Hello there\n" } );
1150 CallSavedSub1();
a0d0e21e 1151
d1b91892 1152By the time each of the C<SaveSub1> statements above have been executed,
54310121 1153the SV*s which corresponded to the parameters will no longer exist.
d1b91892 1154Expect an error message from Perl of the form
a0d0e21e 1155
d1b91892 1156 Can't use an undefined value as a subroutine reference at ...
a0d0e21e 1157
d1b91892 1158for each of the C<CallSavedSub1> lines.
a0d0e21e 1159
54310121 1160Similarly, with this code
a0d0e21e 1161
769c2898 1162 my $ref = \&fred;
1163 SaveSub1($ref);
1164
1165 $ref = 47;
1166 CallSavedSub1();
a0d0e21e 1167
54310121 1168you can expect one of these messages (which you actually get is dependent on
1169the version of Perl you are using)
a0d0e21e 1170
d1b91892 1171 Not a CODE reference at ...
1172 Undefined subroutine &main::47 called ...
a0d0e21e 1173
19799a22 1174The variable $ref may have referred to the subroutine C<fred>
d1b91892 1175whenever the call to C<SaveSub1> was made but by the time
5f05dabc 1176C<CallSavedSub1> gets called it now holds the number C<47>. Because we
d1b91892 1177saved only a pointer to the original SV in C<SaveSub1>, any changes to
19799a22 1178$ref will be tracked by the pointer C<rememberSub>. This means that
d1b91892 1179whenever C<CallSavedSub1> gets called, it will attempt to execute the
1180code which is referenced by the SV* C<rememberSub>. In this case
1181though, it now refers to the integer C<47>, so expect Perl to complain
1182loudly.
a0d0e21e 1183
d1b91892 1184A similar but more subtle problem is illustrated with this code
a0d0e21e 1185
769c2898 1186 my $ref = \&fred;
1187 SaveSub1($ref);
1188
1189 $ref = \&joe;
1190 CallSavedSub1();
a0d0e21e 1191
d1b91892 1192This time whenever C<CallSavedSub1> get called it will execute the Perl
54310121 1193subroutine C<joe> (assuming it exists) rather than C<fred> as was
d1b91892 1194originally requested in the call to C<SaveSub1>.
a0d0e21e 1195
d1b91892 1196To get around these problems it is necessary to take a full copy of the
1197SV. The code below shows C<SaveSub2> modified to do that
a0d0e21e 1198
d1b91892 1199 static SV * keepSub = (SV*)NULL ;
1200
1201 void
1202 SaveSub2(name)
1203 SV * name
1204 CODE:
1205 /* Take a copy of the callback */
1206 if (keepSub == (SV*)NULL)
1207 /* First time, so create a new SV */
1208 keepSub = newSVsv(name) ;
1209 else
1210 /* Been here before, so overwrite */
1211 SvSetSV(keepSub, name) ;
1212
1213 void
1214 CallSavedSub2()
1215 CODE:
924508f0 1216 PUSHMARK(SP) ;
4929bf7b 1217 call_sv(keepSub, G_DISCARD|G_NOARGS) ;
d1b91892 1218
5f05dabc 1219To avoid creating a new SV every time C<SaveSub2> is called,
d1b91892 1220the function first checks to see if it has been called before. If not,
1221then space for a new SV is allocated and the reference to the Perl
1222subroutine, C<name> is copied to the variable C<keepSub> in one
1223operation using C<newSVsv>. Thereafter, whenever C<SaveSub2> is called
1224the existing SV, C<keepSub>, is overwritten with the new value using
1225C<SvSetSV>.
1226
4929bf7b 1227=head2 Using call_argv
d1b91892 1228
1229Here is a Perl subroutine which prints whatever parameters are passed
1230to it.
1231
769c2898 1232 sub PrintList {
1233 my @list = @_;
d1b91892 1234
769c2898 1235 foreach (@list) {
1236 print "$_\n";
1237 }
d1b91892 1238 }
1239
4929bf7b 1240and here is an example of I<call_argv> which will call
d1b91892 1241I<PrintList>.
1242
1243 static char * words[] = {"alpha", "beta", "gamma", "delta", NULL} ;
1244
1245 static void
1246 call_PrintList()
1247 {
1248 dSP ;
1249
4929bf7b 1250 call_argv("PrintList", G_DISCARD, words) ;
d1b91892 1251 }
1252
1253Note that it is not necessary to call C<PUSHMARK> in this instance.
4929bf7b 1254This is because I<call_argv> will do it for you.
d1b91892 1255
4929bf7b 1256=head2 Using call_method
a0d0e21e 1257
1258Consider the following Perl code
1259
d1b91892 1260 {
769c2898 1261 package Mine ;
1262
1263 sub new {
1264 my $type = shift;
1265 bless [@_], $type;
1266 }
1267
1268 sub Display {
1269 my ($self, $index) = @_;
1270 print "$index: $self->[$index]\n";
1271 }
1272
1273 sub PrintID {
1274 my $class = shift;
1275 print "This is Class $class version 1.0\n";
1276 }
d1b91892 1277 }
1278
5f05dabc 1279It implements just a very simple class to manage an array. Apart from
d1b91892 1280the constructor, C<new>, it declares methods, one static and one
5f05dabc 1281virtual. The static method, C<PrintID>, prints out simply the class
d1b91892 1282name and a version number. The virtual method, C<Display>, prints out a
1283single element of the array. Here is an all Perl example of using it.
1284
769c2898 1285 my $a = Mine->new('red', 'green', 'blue');
1286 $a->Display(1);
1287
1288 Mine->PrintID;
a0d0e21e 1289
d1b91892 1290will print
a0d0e21e 1291
d1b91892 1292 1: green
54310121 1293 This is Class Mine version 1.0
a0d0e21e 1294
d1b91892 1295Calling a Perl method from C is fairly straightforward. The following
1296things are required
a0d0e21e 1297
d1b91892 1298=over 5
1299
1300=item *
1301
1302a reference to the object for a virtual method or the name of the class
1303for a static method.
1304
1305=item *
1306
1307the name of the method.
1308
1309=item *
1310
1311any other parameters specific to the method.
1312
1313=back
1314
1315Here is a simple XSUB which illustrates the mechanics of calling both
1316the C<PrintID> and C<Display> methods from C.
1317
1318 void
1319 call_Method(ref, method, index)
1320 SV * ref
1321 char * method
1322 int index
1323 CODE:
924508f0 1324 PUSHMARK(SP);
d1b91892 1325 XPUSHs(ref);
1326 XPUSHs(sv_2mortal(newSViv(index))) ;
1327 PUTBACK;
1328
4929bf7b 1329 call_method(method, G_DISCARD) ;
d1b91892 1330
1331 void
1332 call_PrintID(class, method)
1333 char * class
1334 char * method
1335 CODE:
924508f0 1336 PUSHMARK(SP);
d1b91892 1337 XPUSHs(sv_2mortal(newSVpv(class, 0))) ;
1338 PUTBACK;
1339
4929bf7b 1340 call_method(method, G_DISCARD) ;
d1b91892 1341
1342
1343So the methods C<PrintID> and C<Display> can be invoked like this
1344
769c2898 1345 my $a = Mine->new('red', 'green', 'blue');
1346 call_Method($a, 'Display', 1);
1347 call_PrintID('Mine', 'PrintID');
d1b91892 1348
1349The only thing to note is that in both the static and virtual methods,
19799a22 1350the method name is not passed via the stack--it is used as the first
4929bf7b 1351parameter to I<call_method>.
d1b91892 1352
54310121 1353=head2 Using GIMME_V
d1b91892 1354
54310121 1355Here is a trivial XSUB which prints the context in which it is
d1b91892 1356currently executing.
1357
1358 void
1359 PrintContext()
1360 CODE:
54310121 1361 I32 gimme = GIMME_V;
1362 if (gimme == G_VOID)
1363 printf ("Context is Void\n") ;
1364 else if (gimme == G_SCALAR)
d1b91892 1365 printf ("Context is Scalar\n") ;
1366 else
1367 printf ("Context is Array\n") ;
1368
1369and here is some Perl to test it
1370
54310121 1371 PrintContext ;
769c2898 1372 my $a = PrintContext;
1373 my @a = PrintContext;
d1b91892 1374
1375The output from that will be
1376
54310121 1377 Context is Void
d1b91892 1378 Context is Scalar
1379 Context is Array
1380
1381=head2 Using Perl to dispose of temporaries
1382
1383In the examples given to date, any temporaries created in the callback
4929bf7b 1384(i.e., parameters passed on the stack to the I<call_*> function or
d1b91892 1385values returned via the stack) have been freed by one of these methods
1386
1387=over 5
1388
1389=item *
1390
4929bf7b 1391specifying the G_DISCARD flag with I<call_*>.
d1b91892 1392
1393=item *
1394
1395explicitly disposed of using the C<ENTER>/C<SAVETMPS> -
1396C<FREETMPS>/C<LEAVE> pairing.
1397
1398=back
1399
1400There is another method which can be used, namely letting Perl do it
1401for you automatically whenever it regains control after the callback
1402has terminated. This is done by simply not using the
1403
1404 ENTER ;
1405 SAVETMPS ;
1406 ...
1407 FREETMPS ;
1408 LEAVE ;
1409
1410sequence in the callback (and not, of course, specifying the G_DISCARD
1411flag).
1412
1413If you are going to use this method you have to be aware of a possible
1414memory leak which can arise under very specific circumstances. To
1415explain these circumstances you need to know a bit about the flow of
1416control between Perl and the callback routine.
1417
1418The examples given at the start of the document (an error handler and
1419an event driven program) are typical of the two main sorts of flow
1420control that you are likely to encounter with callbacks. There is a
1421very important distinction between them, so pay attention.
1422
1423In the first example, an error handler, the flow of control could be as
1424follows. You have created an interface to an external library.
1425Control can reach the external library like this
1426
1427 perl --> XSUB --> external library
1428
1429Whilst control is in the library, an error condition occurs. You have
1430previously set up a Perl callback to handle this situation, so it will
1431get executed. Once the callback has finished, control will drop back to
1432Perl again. Here is what the flow of control will be like in that
1433situation
1434
1435 perl --> XSUB --> external library
1436 ...
1437 error occurs
1438 ...
4929bf7b 1439 external library --> call_* --> perl
d1b91892 1440 |
4929bf7b 1441 perl <-- XSUB <-- external library <-- call_* <----+
d1b91892 1442
4929bf7b 1443After processing of the error using I<call_*> is completed,
d1b91892 1444control reverts back to Perl more or less immediately.
1445
1446In the diagram, the further right you go the more deeply nested the
1447scope is. It is only when control is back with perl on the extreme
1448left of the diagram that you will have dropped back to the enclosing
1449scope and any temporaries you have left hanging around will be freed.
1450
1451In the second example, an event driven program, the flow of control
1452will be more like this
1453
1454 perl --> XSUB --> event handler
1455 ...
4929bf7b 1456 event handler --> call_* --> perl
d1b91892 1457 |
4929bf7b 1458 event handler <-- call_* <----+
d1b91892 1459 ...
4929bf7b 1460 event handler --> call_* --> perl
d1b91892 1461 |
4929bf7b 1462 event handler <-- call_* <----+
d1b91892 1463 ...
4929bf7b 1464 event handler --> call_* --> perl
d1b91892 1465 |
4929bf7b 1466 event handler <-- call_* <----+
d1b91892 1467
1468In this case the flow of control can consist of only the repeated
1469sequence
1470
4929bf7b 1471 event handler --> call_* --> perl
d1b91892 1472
54310121 1473for practically the complete duration of the program. This means that
1474control may I<never> drop back to the surrounding scope in Perl at the
1475extreme left.
d1b91892 1476
1477So what is the big problem? Well, if you are expecting Perl to tidy up
1478those temporaries for you, you might be in for a long wait. For Perl
5f05dabc 1479to dispose of your temporaries, control must drop back to the
d1b91892 1480enclosing scope at some stage. In the event driven scenario that may
1481never happen. This means that as time goes on, your program will
1482create more and more temporaries, none of which will ever be freed. As
1483each of these temporaries consumes some memory your program will
19799a22 1484eventually consume all the available memory in your system--kapow!
d1b91892 1485
19799a22 1486So here is the bottom line--if you are sure that control will revert
d1b91892 1487back to the enclosing Perl scope fairly quickly after the end of your
5f05dabc 1488callback, then it isn't absolutely necessary to dispose explicitly of
d1b91892 1489any temporaries you may have created. Mind you, if you are at all
1490uncertain about what to do, it doesn't do any harm to tidy up anyway.
1491
1492
1493=head2 Strategies for storing Callback Context Information
1494
1495
1496Potentially one of the trickiest problems to overcome when designing a
1497callback interface can be figuring out how to store the mapping between
1498the C callback function and the Perl equivalent.
1499
1500To help understand why this can be a real problem first consider how a
1501callback is set up in an all C environment. Typically a C API will
1502provide a function to register a callback. This will expect a pointer
1503to a function as one of its parameters. Below is a call to a
1504hypothetical function C<register_fatal> which registers the C function
1505to get called when a fatal error occurs.
1506
1507 register_fatal(cb1) ;
1508
1509The single parameter C<cb1> is a pointer to a function, so you must
1510have defined C<cb1> in your code, say something like this
1511
1512 static void
1513 cb1()
1514 {
1515 printf ("Fatal Error\n") ;
1516 exit(1) ;
1517 }
1518
1519Now change that to call a Perl subroutine instead
1520
1521 static SV * callback = (SV*)NULL;
1522
1523 static void
1524 cb1()
1525 {
1526 dSP ;
1527
924508f0 1528 PUSHMARK(SP) ;
d1b91892 1529
1530 /* Call the Perl sub to process the callback */
4929bf7b 1531 call_sv(callback, G_DISCARD) ;
d1b91892 1532 }
1533
1534
1535 void
1536 register_fatal(fn)
1537 SV * fn
1538 CODE:
1539 /* Remember the Perl sub */
1540 if (callback == (SV*)NULL)
1541 callback = newSVsv(fn) ;
1542 else
1543 SvSetSV(callback, fn) ;
1544
1545 /* register the callback with the external library */
1546 register_fatal(cb1) ;
1547
1548where the Perl equivalent of C<register_fatal> and the callback it
1549registers, C<pcb1>, might look like this
1550
1551 # Register the sub pcb1
1552 register_fatal(\&pcb1) ;
1553
769c2898 1554 sub pcb1 {
1555 die "I'm dying...\n";
d1b91892 1556 }
1557
1558The mapping between the C callback and the Perl equivalent is stored in
1559the global variable C<callback>.
1560
5f05dabc 1561This will be adequate if you ever need to have only one callback
d1b91892 1562registered at any time. An example could be an error handler like the
1563code sketched out above. Remember though, repeated calls to
1564C<register_fatal> will replace the previously registered callback
1565function with the new one.
1566
1567Say for example you want to interface to a library which allows asynchronous
1568file i/o. In this case you may be able to register a callback whenever
1569a read operation has completed. To be of any use we want to be able to
1570call separate Perl subroutines for each file that is opened. As it
1571stands, the error handler example above would not be adequate as it
1572allows only a single callback to be defined at any time. What we
1573require is a means of storing the mapping between the opened file and
1574the Perl subroutine we want to be called for that file.
1575
1576Say the i/o library has a function C<asynch_read> which associates a C
19799a22 1577function C<ProcessRead> with a file handle C<fh>--this assumes that it
d1b91892 1578has also provided some routine to open the file and so obtain the file
1579handle.
1580
1581 asynch_read(fh, ProcessRead)
1582
1583This may expect the C I<ProcessRead> function of this form
1584
1585 void
1586 ProcessRead(fh, buffer)
1587 int fh ;
1588 char * buffer ;
1589 {
54310121 1590 ...
d1b91892 1591 }
1592
1593To provide a Perl interface to this library we need to be able to map
1594between the C<fh> parameter and the Perl subroutine we want called. A
1595hash is a convenient mechanism for storing this mapping. The code
1596below shows a possible implementation
1597
1598 static HV * Mapping = (HV*)NULL ;
a0d0e21e 1599
d1b91892 1600 void
1601 asynch_read(fh, callback)
1602 int fh
1603 SV * callback
1604 CODE:
1605 /* If the hash doesn't already exist, create it */
1606 if (Mapping == (HV*)NULL)
1607 Mapping = newHV() ;
1608
1609 /* Save the fh -> callback mapping */
1610 hv_store(Mapping, (char*)&fh, sizeof(fh), newSVsv(callback), 0) ;
1611
1612 /* Register with the C Library */
1613 asynch_read(fh, asynch_read_if) ;
1614
1615and C<asynch_read_if> could look like this
1616
1617 static void
1618 asynch_read_if(fh, buffer)
1619 int fh ;
1620 char * buffer ;
1621 {
1622 dSP ;
1623 SV ** sv ;
1624
1625 /* Get the callback associated with fh */
1626 sv = hv_fetch(Mapping, (char*)&fh , sizeof(fh), FALSE) ;
1627 if (sv == (SV**)NULL)
1628 croak("Internal error...\n") ;
1629
924508f0 1630 PUSHMARK(SP) ;
d1b91892 1631 XPUSHs(sv_2mortal(newSViv(fh))) ;
1632 XPUSHs(sv_2mortal(newSVpv(buffer, 0))) ;
1633 PUTBACK ;
1634
1635 /* Call the Perl sub */
4929bf7b 1636 call_sv(*sv, G_DISCARD) ;
d1b91892 1637 }
1638
1639For completeness, here is C<asynch_close>. This shows how to remove
1640the entry from the hash C<Mapping>.
1641
1642 void
1643 asynch_close(fh)
1644 int fh
1645 CODE:
1646 /* Remove the entry from the hash */
1647 (void) hv_delete(Mapping, (char*)&fh, sizeof(fh), G_DISCARD) ;
a0d0e21e 1648
d1b91892 1649 /* Now call the real asynch_close */
1650 asynch_close(fh) ;
a0d0e21e 1651
d1b91892 1652So the Perl interface would look like this
1653
769c2898 1654 sub callback1 {
1655 my($handle, $buffer) = @_;
d1b91892 1656 }
a0d0e21e 1657
d1b91892 1658 # Register the Perl callback
769c2898 1659 asynch_read($fh, \&callback1);
a0d0e21e 1660
769c2898 1661 asynch_close($fh);
d1b91892 1662
1663The mapping between the C callback and Perl is stored in the global
1664hash C<Mapping> this time. Using a hash has the distinct advantage that
1665it allows an unlimited number of callbacks to be registered.
1666
1667What if the interface provided by the C callback doesn't contain a
1668parameter which allows the file handle to Perl subroutine mapping? Say
1669in the asynchronous i/o package, the callback function gets passed only
1670the C<buffer> parameter like this
1671
1672 void
1673 ProcessRead(buffer)
1674 char * buffer ;
1675 {
1676 ...
1677 }
a0d0e21e 1678
d1b91892 1679Without the file handle there is no straightforward way to map from the
1680C callback to the Perl subroutine.
a0d0e21e 1681
54310121 1682In this case a possible way around this problem is to predefine a
d1b91892 1683series of C functions to act as the interface to Perl, thus
1684
1685 #define MAX_CB 3
1686 #define NULL_HANDLE -1
1687 typedef void (*FnMap)() ;
1688
1689 struct MapStruct {
1690 FnMap Function ;
1691 SV * PerlSub ;
1692 int Handle ;
1693 } ;
1694
1695 static void fn1() ;
1696 static void fn2() ;
1697 static void fn3() ;
1698
1699 static struct MapStruct Map [MAX_CB] =
1700 {
1701 { fn1, NULL, NULL_HANDLE },
1702 { fn2, NULL, NULL_HANDLE },
1703 { fn3, NULL, NULL_HANDLE }
1704 } ;
1705
1706 static void
1707 Pcb(index, buffer)
1708 int index ;
1709 char * buffer ;
1710 {
1711 dSP ;
1712
924508f0 1713 PUSHMARK(SP) ;
d1b91892 1714 XPUSHs(sv_2mortal(newSVpv(buffer, 0))) ;
1715 PUTBACK ;
1716
1717 /* Call the Perl sub */
4929bf7b 1718 call_sv(Map[index].PerlSub, G_DISCARD) ;
d1b91892 1719 }
1720
1721 static void
1722 fn1(buffer)
1723 char * buffer ;
1724 {
1725 Pcb(0, buffer) ;
1726 }
1727
1728 static void
1729 fn2(buffer)
1730 char * buffer ;
1731 {
1732 Pcb(1, buffer) ;
1733 }
1734
1735 static void
1736 fn3(buffer)
1737 char * buffer ;
1738 {
1739 Pcb(2, buffer) ;
1740 }
1741
1742 void
1743 array_asynch_read(fh, callback)
1744 int fh
1745 SV * callback
1746 CODE:
1747 int index ;
1748 int null_index = MAX_CB ;
1749
1750 /* Find the same handle or an empty entry */
1751 for (index = 0 ; index < MAX_CB ; ++index)
1752 {
1753 if (Map[index].Handle == fh)
1754 break ;
1755
1756 if (Map[index].Handle == NULL_HANDLE)
1757 null_index = index ;
1758 }
1759
1760 if (index == MAX_CB && null_index == MAX_CB)
1761 croak ("Too many callback functions registered\n") ;
1762
1763 if (index == MAX_CB)
1764 index = null_index ;
1765
1766 /* Save the file handle */
1767 Map[index].Handle = fh ;
1768
1769 /* Remember the Perl sub */
1770 if (Map[index].PerlSub == (SV*)NULL)
1771 Map[index].PerlSub = newSVsv(callback) ;
1772 else
1773 SvSetSV(Map[index].PerlSub, callback) ;
1774
1775 asynch_read(fh, Map[index].Function) ;
1776
1777 void
1778 array_asynch_close(fh)
1779 int fh
1780 CODE:
1781 int index ;
1782
1783 /* Find the file handle */
1784 for (index = 0; index < MAX_CB ; ++ index)
1785 if (Map[index].Handle == fh)
1786 break ;
1787
1788 if (index == MAX_CB)
1789 croak ("could not close fh %d\n", fh) ;
1790
1791 Map[index].Handle = NULL_HANDLE ;
1792 SvREFCNT_dec(Map[index].PerlSub) ;
1793 Map[index].PerlSub = (SV*)NULL ;
1794
1795 asynch_close(fh) ;
1796
5f05dabc 1797In this case the functions C<fn1>, C<fn2>, and C<fn3> are used to
d1b91892 1798remember the Perl subroutine to be called. Each of the functions holds
4a6725af 1799a separate hard-wired index which is used in the function C<Pcb> to
d1b91892 1800access the C<Map> array and actually call the Perl subroutine.
1801
1802There are some obvious disadvantages with this technique.
1803
1804Firstly, the code is considerably more complex than with the previous
1805example.
1806
4a6725af 1807Secondly, there is a hard-wired limit (in this case 3) to the number of
d1b91892 1808callbacks that can exist simultaneously. The only way to increase the
1809limit is by modifying the code to add more functions and then
54310121 1810recompiling. None the less, as long as the number of functions is
d1b91892 1811chosen with some care, it is still a workable solution and in some
1812cases is the only one available.
1813
1814To summarize, here are a number of possible methods for you to consider
1815for storing the mapping between C and the Perl callback
1816
1817=over 5
1818
1819=item 1. Ignore the problem - Allow only 1 callback
1820
1821For a lot of situations, like interfacing to an error handler, this may
1822be a perfectly adequate solution.
1823
1824=item 2. Create a sequence of callbacks - hard wired limit
1825
1826If it is impossible to tell from the parameters passed back from the C
1827callback what the context is, then you may need to create a sequence of C
1828callback interface functions, and store pointers to each in an array.
1829
1830=item 3. Use a parameter to map to the Perl callback
1831
1832A hash is an ideal mechanism to store the mapping between C and Perl.
1833
1834=back
a0d0e21e 1835
a0d0e21e 1836
1837=head2 Alternate Stack Manipulation
1838
a0d0e21e 1839
d1b91892 1840Although I have made use of only the C<POP*> macros to access values
1841returned from Perl subroutines, it is also possible to bypass these
8e07c86e 1842macros and read the stack using the C<ST> macro (See L<perlxs> for a
d1b91892 1843full description of the C<ST> macro).
1844
1845Most of the time the C<POP*> macros should be adequate, the main
1846problem with them is that they force you to process the returned values
1847in sequence. This may not be the most suitable way to process the
1848values in some cases. What we want is to be able to access the stack in
1849a random order. The C<ST> macro as used when coding an XSUB is ideal
1850for this purpose.
1851
1852The code below is the example given in the section I<Returning a list
1853of values> recoded to use C<ST> instead of C<POP*>.
1854
1855 static void
1856 call_AddSubtract2(a, b)
1857 int a ;
1858 int b ;
1859 {
1860 dSP ;
1861 I32 ax ;
1862 int count ;
1863
1864 ENTER ;
1865 SAVETMPS;
1866
924508f0 1867 PUSHMARK(SP) ;
d1b91892 1868 XPUSHs(sv_2mortal(newSViv(a)));
1869 XPUSHs(sv_2mortal(newSViv(b)));
1870 PUTBACK ;
1871
4929bf7b 1872 count = call_pv("AddSubtract", G_ARRAY);
d1b91892 1873
1874 SPAGAIN ;
924508f0 1875 SP -= count ;
9cde0e7f 1876 ax = (SP - PL_stack_base) + 1 ;
d1b91892 1877
1878 if (count != 2)
1879 croak("Big trouble\n") ;
a0d0e21e 1880
d1b91892 1881 printf ("%d + %d = %d\n", a, b, SvIV(ST(0))) ;
1882 printf ("%d - %d = %d\n", a, b, SvIV(ST(1))) ;
1883
1884 PUTBACK ;
1885 FREETMPS ;
1886 LEAVE ;
1887 }
1888
1889Notes
1890
1891=over 5
1892
1893=item 1.
1894
1895Notice that it was necessary to define the variable C<ax>. This is
1896because the C<ST> macro expects it to exist. If we were in an XSUB it
1897would not be necessary to define C<ax> as it is already defined for
1898you.
1899
1900=item 2.
1901
1902The code
1903
1904 SPAGAIN ;
924508f0 1905 SP -= count ;
9cde0e7f 1906 ax = (SP - PL_stack_base) + 1 ;
d1b91892 1907
1908sets the stack up so that we can use the C<ST> macro.
1909
1910=item 3.
1911
1912Unlike the original coding of this example, the returned
1913values are not accessed in reverse order. So C<ST(0)> refers to the
54310121 1914first value returned by the Perl subroutine and C<ST(count-1)>
d1b91892 1915refers to the last.
1916
1917=back
a0d0e21e 1918
8f183262 1919=head2 Creating and calling an anonymous subroutine in C
1920
4929bf7b 1921As we've already shown, C<call_sv> can be used to invoke an
c2611fb3 1922anonymous subroutine. However, our example showed a Perl script
1923invoking an XSUB to perform this operation. Let's see how it can be
8f183262 1924done inside our C code:
1925
8f183262 1926 ...
1927
4929bf7b 1928 SV *cvrv = eval_pv("sub { print 'You will not find me cluttering any namespace!' }", TRUE);
8f183262 1929
1930 ...
1931
4929bf7b 1932 call_sv(cvrv, G_VOID|G_NOARGS);
8f183262 1933
4929bf7b 1934C<eval_pv> is used to compile the anonymous subroutine, which
1935will be the return value as well (read more about C<eval_pv> in
4a4eefd0 1936L<perlapi/eval_pv>). Once this code reference is in hand, it
8f183262 1937can be mixed in with all the previous examples we've shown.
1938
a0d0e21e 1939=head1 SEE ALSO
1940
8e07c86e 1941L<perlxs>, L<perlguts>, L<perlembed>
a0d0e21e 1942
1943=head1 AUTHOR
1944
0536e0eb 1945Paul Marquess
a0d0e21e 1946
d1b91892 1947Special thanks to the following people who assisted in the creation of
1948the document.
a0d0e21e 1949
c07a80fd 1950Jeff Okamoto, Tim Bunce, Nick Gianniotis, Steve Kelem, Gurusamy Sarathy
1951and Larry Wall.
a0d0e21e 1952
1953=head1 DATE
1954
137443ea 1955Version 1.3, 14th Apr 1997