Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 371 lines (254 sloc) 8.912 kb
c64e58f pmc docs update 3
Michael Scott authored
1 /*
c1411da Reini Urban [cage] mark and document unused parameters as such
rurban authored
2 Copyright (C) 2001-2012, Parrot Foundation.
c64e58f pmc docs update 3
Michael Scott authored
3
4 =head1 NAME
5
f474cd7 Bernhard Schmalhofer [perl #38235] Rename (dyn)?classes to (dyn)?pmc
bschmalhofer authored
6 src/pmc/nci.pmc - Native Call Interface
c64e58f pmc docs update 3
Michael Scott authored
7
8 =head1 DESCRIPTION
9
10 The vtable functions for the native C call functions.
11
12 =head2 Methods
13
14 =over 4
15
16 =cut
17
18 */
2a2c19b Added in code to properly do native calls to library routines loaded via
Dan Sugalski authored
19
6bdd5f9 Andy Lester headerizer now runs on PMC files
petdance authored
20 /* HEADERIZER HFILE: none */
21 /* HEADERIZER BEGIN: static */
e69d2a4 Andy Lester Made pcc_params be static. Removed unused arg from build_func. Headerizi...
petdance authored
22 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
23
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
24 PARROT_IGNORABLE_RESULT
25 static nci_thunk_t /*@alt void@*/
26 build_func(PARROT_INTERP,
b75e23a Vasily Chekalkin Write barriering NCI in build_func.
bacek authored
27 ARGIN(PMC *obj),
a90f6d7 Peter Lobsinger switch ffi nci.pmc over to standard signature parser
plobsing authored
28 ARGMOD(Parrot_NCI_attributes *nci))
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
29 __attribute__nonnull__(1)
30 __attribute__nonnull__(2)
b75e23a Vasily Chekalkin Write barriering NCI in build_func.
bacek authored
31 __attribute__nonnull__(3)
a90f6d7 Peter Lobsinger switch ffi nci.pmc over to standard signature parser
plobsing authored
32 FUNC_MODIFIES(*nci);
33
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
34 #define ASSERT_ARGS_build_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
35 PARROT_ASSERT_ARG(interp) \
b75e23a Vasily Chekalkin Write barriering NCI in build_func.
bacek authored
36 , PARROT_ASSERT_ARG(obj) \
a90f6d7 Peter Lobsinger switch ffi nci.pmc over to standard signature parser
plobsing authored
37 , PARROT_ASSERT_ARG(nci))
e69d2a4 Andy Lester Made pcc_params be static. Removed unused arg from build_func. Headerizi...
petdance authored
38 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
6bdd5f9 Andy Lester headerizer now runs on PMC files
petdance authored
39 /* HEADERIZER END: static */
40
75d67e7 Peter Lobsinger avoid rebuilding the pcc cif every call
plobsing authored
41 /*
42
b75e23a Vasily Chekalkin Write barriering NCI in build_func.
bacek authored
43 =item C<static nci_thunk_t build_func(PARROT_INTERP, PMC *obj,
44 Parrot_NCI_attributes *nci)>
75d67e7 Peter Lobsinger avoid rebuilding the pcc cif every call
plobsing authored
45
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
46 Actually build the NCI thunk.
75d67e7 Peter Lobsinger avoid rebuilding the pcc cif every call
plobsing authored
47
48 =cut
49
50 */
51
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
52 PARROT_IGNORABLE_RESULT
53 static nci_thunk_t
b75e23a Vasily Chekalkin Write barriering NCI in build_func.
bacek authored
54 build_func(PARROT_INTERP, ARGIN(PMC *obj), ARGMOD(Parrot_NCI_attributes *nci))
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
55 {
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
56 ASSERT_ARGS(build_func)
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
57
a90f6d7 Peter Lobsinger switch ffi nci.pmc over to standard signature parser
plobsing authored
58 Parrot_nci_sig_to_pcc(interp, nci->signature,
59 &nci->pcc_params_signature,
60 &nci->pcc_return_signature);
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
61
a90f6d7 Peter Lobsinger switch ffi nci.pmc over to standard signature parser
plobsing authored
62 /* Arity is length of the signature minus one (the return type). */
63 nci->arity = VTABLE_elements(interp, nci->signature) - 1;
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
64
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
65 /* Build call function. */
c74300b Peter Lobsinger make nci thunk lookup work with signature arrays, not strings
plobsing authored
66 nci->fb_info = build_call_func(interp, nci->signature);
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
67 nci->func = F2DPTR(VTABLE_get_pointer(interp, nci->fb_info));
176db42 Vasily Chekalkin Move WB after we changed NCI guts.
bacek authored
68 PARROT_GC_WRITE_BARRIER(interp, obj);
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
69
70 return (nci_thunk_t)nci->func;
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
71 }
72
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
73
336b07c Vasily Chekalkin Add 'does invokable' to all PMCs with VTABLE_invoke (except Object). Par...
bacek authored
74 pmclass NCI auto_attrs provides invokable {
9d723e0 Peter Lobsinger update NCI signature parsing to emit new (half year old) PCC param and r...
plobsing authored
75 /* NCI thunk handling attributes */
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
76 ATTR PMC *signature; /* parsed signature */
77 ATTR void *func; /* function pointer to call */
78 ATTR PMC *fb_info; /* frame-builder info */
79 ATTR void *orig_func; /* pointer to wrapped function */
0c5f9c3 GSoC: The majority of my NCI changes in 1 commit.
John Harrison authored
80
9d723e0 Peter Lobsinger update NCI signature parsing to emit new (half year old) PCC param and r...
plobsing authored
81 /* Parrot Sub-ish attributes */
82 ATTR STRING *pcc_params_signature;
83 ATTR STRING *pcc_return_signature;
2d5eeb8 Peter Lobsinger eliminate some unnecessary attributes
plobsing authored
84 ATTR INTVAL arity;
9d723e0 Peter Lobsinger update NCI signature parsing to emit new (half year old) PCC param and r...
plobsing authored
85
86 /* MMD fields */
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
87 ATTR STRING *long_signature;
88 ATTR PMC *multi_sig;
2a2c19b Added in code to properly do native calls to library routines loaded via
Dan Sugalski authored
89
c64e58f pmc docs update 3
Michael Scott authored
90 /*
91
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
92 =item C<METHOD get_multisig()>
1415cda add introspection method get_multisig
Leopold Toetsch authored
93
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
94 Return the MMD signature PMC, if any or C<PMCNULL>.
1415cda add introspection method get_multisig
Leopold Toetsch authored
95
96 =cut
97
98 */
99
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
100 METHOD get_multisig() {
26f7d7b cotto [PMC] replace PMC_pmc_val with an ATTR in the NCI PMC
cotto authored
101 PMC *sig;
102 GET_ATTR_multi_sig(INTERP, SELF, sig);
83dd9f2 NotFound [core] partial fix for TT #667, examples/namespace/namespace_dump.pir d...
NotFound authored
103 if (PMC_IS_NULL(sig))
26f7d7b cotto [PMC] replace PMC_pmc_val with an ATTR in the NCI PMC
cotto authored
104 sig = PMCNULL;
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
105 RETURN(PMC *sig);
1415cda add introspection method get_multisig
Leopold Toetsch authored
106 }
107
108 /*
109
c64e58f pmc docs update 3
Michael Scott authored
110 =item C<void init()>
111
112 Initializes the NCI with a C<NULL> function pointer.
113
114 =cut
115
116 */
117
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
118 VTABLE void init() {
c1411da Reini Urban [cage] mark and document unused parameters as such
rurban authored
119 UNUSED(INTERP)
2646951 tewk [gsoc_nci] gsoc_nci_001 merge
tewk authored
120 PObj_custom_mark_SET(SELF);
f7fc86b nci
Leopold Toetsch authored
121 }
122
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
123 VTABLE void *get_pointer() {
c1411da Reini Urban [cage] mark and document unused parameters as such
rurban authored
124 UNUSED(INTERP)
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
125 return PARROT_NCI(SELF)->orig_func;
126 }
127
c64e58f pmc docs update 3
Michael Scott authored
128 /*
129
73ef4d0 Peter Lobsinger add interface to allow creation of NCI objects from Ptr objects from HLL
plobsing authored
130 =item C<void set_pmc_keyed(PMC *key, PMC *p)>
131
132 =item C<void set_pmc_keyed_str(STRING *key, PMC *p)>
133
134 Call the equivalent C<set_pointer*> function.
135
136 =cut
137
138 */
139
140 VTABLE void set_pmc_keyed(PMC *key, PMC *p) {
141 STATICSELF.set_pointer_keyed(key, VTABLE_get_pointer(INTERP, p));
142 }
143
144 VTABLE void set_pmc_keyed_str(STRING *key, PMC *p) {
145 STATICSELF.set_pointer_keyed_str(key, VTABLE_get_pointer(INTERP, p));
146 }
147
148 /*
149
c5334d6 Peter Lobsinger eliminate handling of string signatures within NCI objects
plobsing authored
150 =item C<void set_pointer_keyed(PMC *key, void *func)>
c64e58f pmc docs update 3
Michael Scott authored
151
380c0ba fix NCI related DOD problem
Leopold Toetsch authored
152 Sets the specified function pointer and signature (C<*key>).
c64e58f pmc docs update 3
Michael Scott authored
153
c5334d6 Peter Lobsinger eliminate handling of string signatures within NCI objects
plobsing authored
154 =item C<void set_pointer_keyed_str(STRING *key, void *func)>
155
156 Sets the specified function pointer and siganture as described in the string C<key>.
157
c64e58f pmc docs update 3
Michael Scott authored
158 =cut
159
160 */
161
c5334d6 Peter Lobsinger eliminate handling of string signatures within NCI objects
plobsing authored
162 VTABLE void set_pointer_keyed(PMC *key, void *func) {
62e3049 Andy Lester consting, and fixed embedded tabs
petdance authored
163 /* Store the original function and signature. */
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
164 SET_ATTR_orig_func(INTERP, SELF, func);
c5334d6 Peter Lobsinger eliminate handling of string signatures within NCI objects
plobsing authored
165 SET_ATTR_signature(INTERP, SELF, key);
166 }
c4cd281 chromatic [PMC] Avoided an unnecessary STRING copying and creation in NCI's
chromatic authored
167
c5334d6 Peter Lobsinger eliminate handling of string signatures within NCI objects
plobsing authored
168 VTABLE void set_pointer_keyed_str(STRING *key, void *func) {
169 SELF.set_pointer_keyed(Parrot_nci_parse_signature(INTERP, key), func);
2646951 tewk [gsoc_nci] gsoc_nci_001 merge
tewk authored
170 }
03918bc chromatic [PMC] Fixed a read of unitialized memory in NCI PMC reported by Valgrind...
chromatic authored
171
2646951 tewk [gsoc_nci] gsoc_nci_001 merge
tewk authored
172 /*
173
174 =item C<void mark()>
175
176 Mark any referenced strings and PMCs.
177
178 =cut
179
180 */
181 VTABLE void mark() {
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
182 if (PARROT_NCI(SELF)) {
183 Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
184
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
185 Parrot_gc_mark_PMC_alive(interp, nci_info->signature);
186 Parrot_gc_mark_PMC_alive(interp, nci_info->fb_info);
187 Parrot_gc_mark_PMC_alive(interp, nci_info->multi_sig);
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
188
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
189 Parrot_gc_mark_STRING_alive(interp, nci_info->long_signature);
190 Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_params_signature);
191 Parrot_gc_mark_STRING_alive(interp, nci_info->pcc_return_signature);
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
192 }
193 }
194
195 /*
196
c64e58f pmc docs update 3
Michael Scott authored
197 =item C<PMC *clone()>
198
199 Creates and returns a clone of the NCI.
200
201 =cut
202
203 */
204
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
205 VTABLE PMC *clone() {
971e997 NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attribu...
NotFound authored
206 Parrot_NCI_attributes * const nci_info_self = PARROT_NCI(SELF);
62e3049 Andy Lester consting, and fixed embedded tabs
petdance authored
207
083213a Andrew Whitworth start rename of pmc_new to Parrot_pmc_new
Whiteknight authored
208 PMC * const ret = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
f1c9ca5 Andy Lester consting pointers and localizing temp vars
petdance authored
209 Parrot_NCI_attributes * const nci_info_ret = PARROT_NCI(ret);
82c7cf6 chromatic [PMC] Minor cleanups and tidyings.
chromatic authored
210
c64e58f pmc docs update 3
Michael Scott authored
211 /* FIXME if data is malloced (JIT/i386!) then we need
212 * the length of data here, to memcpy it
213 * ManagedStruct or Buffer?
214 */
2646951 tewk [gsoc_nci] gsoc_nci_001 merge
tewk authored
215 nci_info_ret->func = nci_info_self->func;
3b094c7 Peter Lobsinger add NCI.fb_info for frame buffer info
plobsing authored
216 nci_info_ret->fb_info = nci_info_self->fb_info;
811a7df cotto [PMC] make NCI PMCs use ATTRs, with one temporary workaround for i386 ji...
cotto authored
217 nci_info_ret->orig_func = nci_info_self->orig_func;
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
218 nci_info_ret->signature = nci_info_self->signature;
2646951 tewk [gsoc_nci] gsoc_nci_001 merge
tewk authored
219 nci_info_ret->pcc_params_signature = nci_info_self->pcc_params_signature;
9d723e0 Peter Lobsinger update NCI signature parsing to emit new (half year old) PCC param and r...
plobsing authored
220 nci_info_ret->pcc_return_signature = nci_info_self->pcc_params_signature;
2646951 tewk [gsoc_nci] gsoc_nci_001 merge
tewk authored
221 nci_info_ret->arity = nci_info_self->arity;
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
222 PObj_get_FLAGS(ret) = PObj_get_FLAGS(SELF);
82c7cf6 chromatic [PMC] Minor cleanups and tidyings.
chromatic authored
223
c64e58f pmc docs update 3
Michael Scott authored
224 return ret;
2a2c19b Added in code to properly do native calls to library routines loaded via
Dan Sugalski authored
225 }
226
c64e58f pmc docs update 3
Michael Scott authored
227 /*
228
229 =item C<INTVAL defined()>
230
231 Returns whether the NCI is defined.
232
233 =cut
234
235 */
236
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
237 VTABLE INTVAL defined() {
c1411da Reini Urban [cage] mark and document unused parameters as such
rurban authored
238 UNUSED(INTERP)
776e9da Andy Lester consting and removing unused var
petdance authored
239 const Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
8832378 chromatic [PMC] Delayed NCI thunk initialization until absolutely necessary. This
chromatic authored
240 return nci_info->orig_func != NULL;
2a2c19b Added in code to properly do native calls to library routines loaded via
Dan Sugalski authored
241 }
242
c64e58f pmc docs update 3
Michael Scott authored
243 /*
244
0ae5d55 Paul Cochrane Patch courtesy of Steve Peters <steve at fisharerojo dot org>, his comme...
paultcochrane authored
245 =item C<opcode_t *invoke(void *next)>
c64e58f pmc docs update 3
Michael Scott authored
246
8832378 chromatic [PMC] Delayed NCI thunk initialization until absolutely necessary. This
chromatic authored
247 Calls the associated C function, returning C<*next>. If the invocant is a
248 class, the PMC arguments are shifted down.
c64e58f pmc docs update 3
Michael Scott authored
249
250 =cut
251
252 */
253
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
254 VTABLE opcode_t *invoke(void *next) {
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
255 Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
256 nci_thunk_t func;
257 PMC *fb_info;
811a7df cotto [PMC] make NCI PMCs use ATTRs, with one temporary workaround for i386 ji...
cotto authored
258 PMC *cont;
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
259
260 func = (nci_thunk_t)D2FPTR(nci_info->func);
261
262 if (!func) {
c64fa8d Peter Lobsinger split NCI signature parser out from nci.pmc
plobsing authored
263 /* build the thunk only when necessary */
b75e23a Vasily Chekalkin Write barriering NCI in build_func.
bacek authored
264 func = build_func(interp, SELF, nci_info);
82c7cf6 chromatic [PMC] Minor cleanups and tidyings.
chromatic authored
265
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
266 if (!func)
c64fa8d Peter Lobsinger split NCI signature parser out from nci.pmc
plobsing authored
267 Parrot_ex_throw_from_c_args(INTERP, NULL,
268 EXCEPTION_INVALID_OPERATION,
269 "attempt to call NULL function");
8832378 chromatic [PMC] Delayed NCI thunk initialization until absolutely necessary. This
chromatic authored
270 }
2646951 tewk [gsoc_nci] gsoc_nci_001 merge
tewk authored
271
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
272 GET_ATTR_fb_info(INTERP, SELF, fb_info);
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
273
92c390d Fix tailcalls to NCI, #38724
Leopold Toetsch authored
274 cont = INTERP->current_cont;
8b188db Andrew Whitworth Fix for TT #1029. The return continuation was being mangled in the PIR c...
Whiteknight authored
275 func(INTERP, SELF, fb_info);
276
8838c7f builtins 1 - first shot
Leopold Toetsch authored
277 /*
92c390d Fix tailcalls to NCI, #38724
Leopold Toetsch authored
278 * If the NCI function was tailcalled, the return result
279 * is already passed back to the caller of this frame
280 * - see Parrot_init_ret_nci(). We therefore invoke the
281 * return continuation here, which gets rid of this frame
282 * and returns the real return address
8838c7f builtins 1 - first shot
Leopold Toetsch authored
283 */
2caf6ce Vasily Chekalkin Kill NEED_CONTINUATION ugly hack.
bacek authored
284 if (!PMC_IS_NULL(cont)
8832378 chromatic [PMC] Delayed NCI thunk initialization until absolutely necessary. This
chromatic authored
285 && (PObj_get_FLAGS(cont) & SUB_FLAG_TAILCALL)) {
540d4c3 Vasily Chekalkin Merge context_pmc3 branch into trunk.
bacek authored
286 cont = Parrot_pcc_get_continuation(interp, CURRENT_CONTEXT(interp));
92c390d Fix tailcalls to NCI, #38724
Leopold Toetsch authored
287 next = VTABLE_invoke(INTERP, cont, next);
288 }
82c7cf6 chromatic [PMC] Minor cleanups and tidyings.
chromatic authored
289
e063e49 chromatic Continuing Parrot/C++ cleanups (Steve Peters, RT #42746).
chromatic authored
290 return (opcode_t *)next;
2a2c19b Added in code to properly do native calls to library routines loaded via
Dan Sugalski authored
291 }
380c0ba fix NCI related DOD problem
Leopold Toetsch authored
292
c64e58f pmc docs update 3
Michael Scott authored
293 /*
294
295 =item C<INTVAL get_integer()>
296
297 Returns the function pointer as an integer.
298
299 =cut
300
301 */
302
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
303 VTABLE INTVAL get_integer() {
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
304 Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
305 if (!nci_info->func)
b75e23a Vasily Chekalkin Write barriering NCI in build_func.
bacek authored
306 build_func(INTERP, SELF, nci_info);
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
307 return (INTVAL)nci_info->func;
3168931 Forth can now generate code for words on the fly and execute them.
Dan Sugalski authored
308 }
309
f35b03c Sam Ruby Initial support for sort
rubys authored
310 /*
311
312 =item C<INTVAL get_bool()>
313
314 Returns the boolean value of the pointer.
315
316 =cut
317
318 */
319
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
320 VTABLE INTVAL get_bool() {
c1411da Reini Urban [cage] mark and document unused parameters as such
rurban authored
321 UNUSED(INTERP)
776e9da Andy Lester consting and removing unused var
petdance authored
322 const Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
323 return (0 != (INTVAL)nci_info->orig_func);
f35b03c Sam Ruby Initial support for sort
rubys authored
324 }
325
6586a2c Jonathan Worthington Implement arity method on NCI PMCs, plus a test for it.
jnthn authored
326 /*
327
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
328 =item C<METHOD arity()>
6586a2c Jonathan Worthington Implement arity method on NCI PMCs, plus a test for it.
jnthn authored
329
01e804c Bruce Gray [pmc] Typo corrections
Util authored
330 Return the arity of the NCI (the number of arguments).
6586a2c Jonathan Worthington Implement arity method on NCI PMCs, plus a test for it.
jnthn authored
331
332 =cut
333
334 */
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
335 METHOD arity() {
971e997 NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attribu...
NotFound authored
336 Parrot_NCI_attributes * const nci_info = PARROT_NCI(SELF);
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
337
8832378 chromatic [PMC] Delayed NCI thunk initialization until absolutely necessary. This
chromatic authored
338 if (nci_info) {
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
339 if (!nci_info->func)
b75e23a Vasily Chekalkin Write barriering NCI in build_func.
bacek authored
340 build_func(INTERP, SELF, nci_info);
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
341 if (nci_info->func) {
f1c9ca5 Andy Lester consting pointers and localizing temp vars
petdance authored
342 const INTVAL arity = nci_info->arity;
c64fa8d Peter Lobsinger split NCI signature parser out from nci.pmc
plobsing authored
343 RETURN(INTVAL arity);
8832378 chromatic [PMC] Delayed NCI thunk initialization until absolutely necessary. This
chromatic authored
344 }
345 }
6586a2c Jonathan Worthington Implement arity method on NCI PMCs, plus a test for it.
jnthn authored
346
8832378 chromatic [PMC] Delayed NCI thunk initialization until absolutely necessary. This
chromatic authored
347 Parrot_ex_throw_from_c_args(INTERP, NULL,
348 EXCEPTION_INVALID_OPERATION,
349 "You cannot get the arity of an undefined NCI.");
59661f1 allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored
350 }
2a2c19b Added in code to properly do native calls to library routines loaded via
Dan Sugalski authored
351 }
c64e58f pmc docs update 3
Michael Scott authored
352
353 /*
354
355 =back
356
357 =head1 SEE ALSO
358
1e5a8ee Peter Lobsinger eliminate use of libffi-specific nci.pmc
plobsing authored
359 F<docs/pdds/pdd03_calling_conventions.pod>.
f631eb3 Peter Lobsinger remove private2 (raw) flag from nci-ffi.pmc
plobsing authored
360
c64e58f pmc docs update 3
Michael Scott authored
361 =cut
362
363 */
364
0eb3eb3 added formatting footer and detabbed
Michael Scott authored
365 /*
366 * Local variables:
72575ae Bernhard Schmalhofer #40481: [PATCH] C-code coda in pmc files
bschmalhofer authored
367 * c-file-style: "parrot"
0eb3eb3 added formatting footer and detabbed
Michael Scott authored
368 * End:
1d7dded Peter Lobsinger update C file vim modelines
plobsing authored
369 * vim: expandtab shiftwidth=4 cinoptions='\:2=2' :
72575ae Bernhard Schmalhofer #40481: [PATCH] C-code coda in pmc files
bschmalhofer authored
370 */
Something went wrong with that request. Please try again.