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