Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 713 lines (552 sloc) 20.193 kB
540a832 @jkeenan [codingstd] Mostly linelength fixes.
jkeenan authored
1 /*
ced54a5 @NotFound Fix remaining 'might be clobbered' warning
NotFound authored
2 Copyright (C) 2010-2011, Parrot Foundation.
540a832 @jkeenan [codingstd] Mostly linelength fixes.
jkeenan authored
3
4 =head1 NAME
5
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
6 src/embed/api.c - The Parrot embedding interface
540a832 @jkeenan [codingstd] Mostly linelength fixes.
jkeenan authored
7
8 =head1 DESCRIPTION
9
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
10 This file implements functions of the Parrot embedding interface.
11
12 =head2 Functions
13
14 =over 4
540a832 @jkeenan [codingstd] Mostly linelength fixes.
jkeenan authored
15
16 =cut
17
18 */
19
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
20 #include "parrot/parrot.h"
704e3c4 @bluescreen10 Made another test case pass by putting debug information. Also remove…
bluescreen10 authored
21 #include "parrot/runcore_api.h"
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
22 #include "parrot/embed.h"
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
23 #include "parrot/api.h"
1b6d1ce @Whiteknight start breaking up the embedding stuff into multiple files. Add embed_…
Whiteknight authored
24 #include "embed_private.h"
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
25
3f8ed92 @Whiteknight fix some file references and run headerizer to see my work so far
Whiteknight authored
26 /* HEADERIZER HFILE: include/parrot/api.h */
27
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
28
29 /*
30
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
31 =item C<Parrot_Int Parrot_api_get_result(Parrot_PMC interp_pmc, Parrot_Int
32 *is_error, Parrot_PMC * exception, Parrot_Int *exit_code, Parrot_String *
33 errmsg)>
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
34
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
35 Gets the results of the last API function call and stores the results in
36 C<is_error>, C<exception>, C<exit_code> and C<errmsg>. This function returns
37 a true value if this call is successful and false value otherwise. The stored
38 information is as follow:
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
39
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
40 C<is_error> a true value if an unhandled exception was thrown or the program
41 terminated with an error condition and a false value otherwise.
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
42
43 C<exception> the last exception thrown.
44
45 C<exit_code> the exit code of the running program.
46
47 C<errmsg> contains an string with the last error message.
48
49 =cut
50
51 */
52
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
53 PARROT_API
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
54 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
55 Parrot_api_get_result(Parrot_PMC interp_pmc, ARGOUT(Parrot_Int *is_error),
56 ARGOUT(Parrot_PMC * exception), ARGOUT(Parrot_Int *exit_code),
57 ARGOUT(Parrot_String * errmsg))
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
58 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
59 ASSERT_ARGS(Parrot_api_get_result)
2483c68 @Whiteknight implement the new error-handling mechanism. Instead of a string, we p…
Whiteknight authored
60 EMBED_API_CALLIN(interp_pmc, interp)
be50d63 @bluescreen10 Implemented first version of Parrot_get_result, now a lot of failing …
bluescreen10 authored
61 *exit_code = interp->exit_code;
2483c68 @Whiteknight implement the new error-handling mechanism. Instead of a string, we p…
Whiteknight authored
62 *exception = interp->final_exception;
73f662d @Whiteknight some fixes so libparrot builds with g++
Whiteknight authored
63 if (PMC_IS_NULL(*exception)) {
2483c68 @Whiteknight implement the new error-handling mechanism. Instead of a string, we p…
Whiteknight authored
64 *is_error = 0;
65 *errmsg = STRINGNULL;
9703ef5 @jkeenan [codingstd] C-style coda needed. No cuddled elses.
jkeenan authored
66 }
67 else {
b3af8c9 @Whiteknight fix main.c so that we check the is_error flag and only show an error …
Whiteknight authored
68 STRING * const severity_str = Parrot_str_new(interp, "severity", 0);
69 INTVAL severity = VTABLE_get_integer_keyed_str(interp, *exception, severity_str);
70 *is_error = (severity != EXCEPT_exit);
2483c68 @Whiteknight implement the new error-handling mechanism. Instead of a string, we p…
Whiteknight authored
71 *errmsg = VTABLE_get_string(interp, *exception);
72 }
73 interp->final_exception = PMCNULL;
be50d63 @bluescreen10 Implemented first version of Parrot_get_result, now a lot of failing …
bluescreen10 authored
74 interp->exit_code = 0;
2483c68 @Whiteknight implement the new error-handling mechanism. Instead of a string, we p…
Whiteknight authored
75 EMBED_API_CALLOUT(interp_pmc, interp)
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
76 }
77
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
78 /*
79
80 =item C<Parrot_Int Parrot_api_get_exception_backtrace(Parrot_PMC interp_pmc,
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
81 Parrot_PMC exception, Parrot_String * bt)>
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
82
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
83 Gets the backtrace of the interpreter's call chain for the given exception
84 C<expcetion> and stores the results in string C<bt>. This function returns a
85 true value if this call is successful and false value otherwise.
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
86
87 =cut
88
89 */
90
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
91 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
92 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
93 Parrot_api_get_exception_backtrace(Parrot_PMC interp_pmc,
94 Parrot_PMC exception, ARGOUT(Parrot_String * bt))
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
95 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
96 ASSERT_ARGS(Parrot_api_get_exception_backtrace)
2483c68 @Whiteknight implement the new error-handling mechanism. Instead of a string, we p…
Whiteknight authored
97 EMBED_API_CALLIN(interp_pmc, interp)
3c6f7d0 @Whiteknight rethrow caches the old backtrace.
Whiteknight authored
98 if (PMC_IS_NULL(exception))
99 *bt = STRINGNULL;
100 else
0a4f093 @Whiteknight build fixes
Whiteknight authored
101 *bt = Parrot_ex_build_complete_backtrace_string(interp, exception);
2483c68 @Whiteknight implement the new error-handling mechanism. Instead of a string, we p…
Whiteknight authored
102 EMBED_API_CALLOUT(interp_pmc, interp)
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
103 }
104
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
105
106 /*
107
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
108 =item C<Parrot_Int Parrot_api_make_interpreter(Parrot_PMC parent, Parrot_Int
109 flags, Parrot_Init_Args *args, Parrot_PMC *interp)>
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
110
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
111 Creates a new interpreter and stores it in C<interp>. It takes three optional
112 parameters the new interpreter's C<flags>, the initialization paremeters C<args>
113 and the C<parent> interpreter. This function returns a true value if this call
114 is successful and false value otherwise.
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
115
116 =cut
117
118 */
119
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
120 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
121 Parrot_Int
709eae7 @Whiteknight add in a handful of additional API functions, though they aren't bein…
Whiteknight authored
122 Parrot_api_make_interpreter(Parrot_PMC parent, Parrot_Int flags,
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
123 ARGIN_NULLOK(Parrot_Init_Args *args), ARGOUT(Parrot_PMC *interp))
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
124 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
125 ASSERT_ARGS(Parrot_api_make_interpreter)
4a128d5 @Whiteknight lots of little changes
Whiteknight authored
126 int alt_stacktop;
c1ab56e More fixes, almost there
Mariano Wahlmann authored
127 Parrot_Interp interp_raw;
9b2b656 @nwellnhof Add minimum GC threshold option
nwellnhof authored
128 Parrot_GC_Init_Args gc_args;
82cbd84 @Whiteknight parrot executable compiles, but miniparrot does not link. I need to s…
Whiteknight authored
129 const Parrot_Interp parent_raw = PMC_IS_NULL(parent) ? NULL : GET_RAW_INTERP(parent);
7a315db @Whiteknight set an api jump buffer in Parrot_api_make_interpreter, so we can try …
Whiteknight authored
130 Parrot_jump_buff env;
0eef3cd @NotFound fix C90 compliance
NotFound authored
131 interp_raw = allocate_interpreter(parent_raw, flags);
7a315db @Whiteknight set an api jump buffer in Parrot_api_make_interpreter, so we can try …
Whiteknight authored
132 if (setjmp(env)) {
133 interp_raw->api_jmp_buf = NULL;
69ee128 @Whiteknight if we don't have an interp, print out an error message. If we do, try…
Whiteknight authored
134 *interp = NULL;
7a315db @Whiteknight set an api jump buffer in Parrot_api_make_interpreter, so we can try …
Whiteknight authored
135 return !interp_raw->exit_code;
f2252b4 @Whiteknight remove the two-stage initialization dance. We can now initialize an i…
Whiteknight authored
136 }
400feae @nwellnhof Merge branch 'master' into nwellnhof/gc_dynamic_threshold
nwellnhof authored
137 else {
7a315db @Whiteknight set an api jump buffer in Parrot_api_make_interpreter, so we can try …
Whiteknight authored
138 interp_raw->api_jmp_buf = &env;
139 if (args) {
140 gc_args.stacktop = args->stacktop
141 ? args->stacktop : &alt_stacktop;
142 gc_args.system = args->gc_system;
143 gc_args.nursery_size = args->gc_nursery_size;
144 gc_args.dynamic_threshold = args->gc_dynamic_threshold;
145 gc_args.min_threshold = args->gc_min_threshold;
146
147 if (args->hash_seed)
148 interp_raw->hash_seed = args->hash_seed;
149 }
150 else {
151 memset(&gc_args, 0, sizeof (Parrot_GC_Init_Args));
152 gc_args.stacktop = &alt_stacktop;
153 }
154 initialize_interpreter(interp_raw, &gc_args);
155 *interp = VTABLE_get_pmc_keyed_int(
156 interp_raw, interp_raw->iglobals, (Parrot_Int)IGLOBALS_INTERPRETER);
400feae @nwellnhof Merge branch 'master' into nwellnhof/gc_dynamic_threshold
nwellnhof authored
157 }
7a315db @Whiteknight set an api jump buffer in Parrot_api_make_interpreter, so we can try …
Whiteknight authored
158 interp_raw->api_jmp_buf = NULL;
f2252b4 @Whiteknight remove the two-stage initialization dance. We can now initialize an i…
Whiteknight authored
159 return !PMC_IS_NULL(*interp);
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
160 }
161
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
162 /*
163
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
164 =item C<Parrot_Int Parrot_api_set_runcore(Parrot_PMC interp_pmc, const char *
165 corename, Parrot_UInt trace)>
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
166
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
167 Sets the C<interp_pmc>'s bytecode running core, the core is specified by the
168 C<corename>. This function returns a true value if this call is successful and
169 false value otherwise.
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
170
171 =cut
172
173 */
174
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
175 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
176 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
177 Parrot_api_set_runcore(Parrot_PMC interp_pmc, ARGIN(const char * corename),
178 Parrot_UInt trace)
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
179 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
180 ASSERT_ARGS(Parrot_api_set_runcore)
3ea891c First round of syntax error fixes
Mariano Wahlmann authored
181 EMBED_API_CALLIN(interp_pmc, interp)
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
182 if (trace) {
c510c5c @Whiteknight fix the trace core, so when we use the -t, --trace, or -Rtrace flags,…
Whiteknight authored
183 Interp_trace_SET(interp, PARROT_TRACE_OPS_FLAG);
704e3c4 @bluescreen10 Made another test case pass by putting debug information. Also remove…
bluescreen10 authored
184 Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "slow"));
9703ef5 @jkeenan [codingstd] C-style coda needed. No cuddled elses.
jkeenan authored
185 }
186 else {
38e5177 @petdance Use STREQ() for string comparisons, instead of incorrectly using strc…
petdance authored
187 if (STREQ(corename, "slow") || STREQ(corename, "bounds"))
704e3c4 @bluescreen10 Made another test case pass by putting debug information. Also remove…
bluescreen10 authored
188 Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "slow"));
38e5177 @petdance Use STREQ() for string comparisons, instead of incorrectly using strc…
petdance authored
189 else if (STREQ(corename, "fast") || STREQ(corename, "jit") || STREQ(corename, "function"))
704e3c4 @bluescreen10 Made another test case pass by putting debug information. Also remove…
bluescreen10 authored
190 Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "fast"));
38e5177 @petdance Use STREQ() for string comparisons, instead of incorrectly using strc…
petdance authored
191 else if (STREQ(corename, "exec"))
704e3c4 @bluescreen10 Made another test case pass by putting debug information. Also remove…
bluescreen10 authored
192 Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "exec"));
114d897 @petdance Use STREQ() for string comparisons, instead of incorrectly using strc…
petdance authored
193 else if (STREQ(corename, "trace"))
704e3c4 @bluescreen10 Made another test case pass by putting debug information. Also remove…
bluescreen10 authored
194 Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "slow"));
38e5177 @petdance Use STREQ() for string comparisons, instead of incorrectly using strc…
petdance authored
195 else if (STREQ(corename, "profiling"))
704e3c4 @bluescreen10 Made another test case pass by putting debug information. Also remove…
bluescreen10 authored
196 Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "profiling"));
38e5177 @petdance Use STREQ() for string comparisons, instead of incorrectly using strc…
petdance authored
197 else if (STREQ(corename, "gcdebug"))
704e3c4 @bluescreen10 Made another test case pass by putting debug information. Also remove…
bluescreen10 authored
198 Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "gcdebug"));
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
199 else
200 Parrot_ex_throw_from_c_args(interp, NULL, 1, "Invalid runcore type %s", corename);
201 }
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
202 EMBED_API_CALLOUT(interp_pmc, interp)
203 }
204
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
205 /*
206
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
207 =item C<Parrot_Int Parrot_api_debug_flag(Parrot_PMC interp_pmc, Parrot_Int
208 flags, Parrot_Int set)>
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
209
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
210 Sets/Unsets the C<interp_pmc>'s debug flags. If C<set> is in a true value debug
211 flags are set otherwise debug flags are cleared. This function returns a true
212 value if this call is successful and false value otherwise.
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
213
214 =cut
215
216 */
217
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
218 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
219 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
220 Parrot_api_debug_flag(Parrot_PMC interp_pmc, Parrot_Int flags, Parrot_Int set)
f68bf56 @Whiteknight add Parrot_api_flag and Parrot_api_debug_flag. Use these in main.c in…
Whiteknight authored
221 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
222 ASSERT_ARGS(Parrot_api_debug_flag)
c1ab56e More fixes, almost there
Mariano Wahlmann authored
223 EMBED_API_CALLIN(interp_pmc, interp)
f68bf56 @Whiteknight add Parrot_api_flag and Parrot_api_debug_flag. Use these in main.c in…
Whiteknight authored
224 if (set)
225 interp->debug_flags |= flags;
226 else
227 interp->debug_flags &= ~flags;
228 EMBED_API_CALLOUT(interp_pmc, interp);
229 }
230
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
231 /*
232
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
233 =item C<Parrot_Int Parrot_api_flag(Parrot_PMC interp_pmc, Parrot_Int flags,
234 Parrot_Int set)>
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
235
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
236 Set/Unset the C<interp_pmc>'s general flags. If C<set> is in a true value general
237 flags are set otherwise passed flags are cleared. This function returns a true
238 value if this call is successful and false value otherwise.
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
239
240 =cut
241
242 */
243
f68bf56 @Whiteknight add Parrot_api_flag and Parrot_api_debug_flag. Use these in main.c in…
Whiteknight authored
244 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
245 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
246 Parrot_api_flag(Parrot_PMC interp_pmc, Parrot_Int flags, Parrot_Int set)
f68bf56 @Whiteknight add Parrot_api_flag and Parrot_api_debug_flag. Use these in main.c in…
Whiteknight authored
247 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
248 ASSERT_ARGS(Parrot_api_flag)
c1ab56e More fixes, almost there
Mariano Wahlmann authored
249 EMBED_API_CALLIN(interp_pmc, interp)
f68bf56 @Whiteknight add Parrot_api_flag and Parrot_api_debug_flag. Use these in main.c in…
Whiteknight authored
250 if (set) {
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
251 Interp_flags_SET(interp, flags);
252 if (flags & (PARROT_BOUNDS_FLAG | PARROT_PROFILE_FLAG))
f68bf56 @Whiteknight add Parrot_api_flag and Parrot_api_debug_flag. Use these in main.c in…
Whiteknight authored
253 Parrot_runcore_switch(interp, Parrot_str_new_constant(interp, "slow"));
254 }
255 else
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
256 Interp_flags_CLEAR(interp, flags);
f68bf56 @Whiteknight add Parrot_api_flag and Parrot_api_debug_flag. Use these in main.c in…
Whiteknight authored
257 EMBED_API_CALLOUT(interp_pmc, interp);
258 }
259
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
260 /*
261
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
262 =item C<Parrot_Int Parrot_api_set_executable_name(Parrot_PMC interp_pmc, const
263 char * name)>
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
264
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
265 Sets the executable name for the C<interp_pmc> interpreter. This function returns
266 a true value if this call is successful and false value otherwise.
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
267
268 =cut
269
270 */
271
f68bf56 @Whiteknight add Parrot_api_flag and Parrot_api_debug_flag. Use these in main.c in…
Whiteknight authored
272 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
273 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
274 Parrot_api_set_executable_name(Parrot_PMC interp_pmc, ARGIN(const char * name))
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
275 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
276 ASSERT_ARGS(Parrot_api_set_executable_name)
c1ab56e More fixes, almost there
Mariano Wahlmann authored
277 EMBED_API_CALLIN(interp_pmc, interp)
9cc3ace @plobsing allow for unicode names of fakecutables
plobsing authored
278 STRING * const name_str = Parrot_str_from_platform_cstring(interp, name);
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
279 PMC * const name_pmc = Parrot_pmc_new(interp, enum_class_String);
1a692e9 @Whiteknight _set_executable_name takes a C string instead of a Parrot string, for…
Whiteknight authored
280 VTABLE_set_string_native(interp, name_pmc, name_str);
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
281 VTABLE_set_pmc_keyed_int(interp, interp->iglobals, IGLOBALS_EXECUTABLE,
282 name_pmc);
4a128d5 @Whiteknight lots of little changes
Whiteknight authored
283 EMBED_API_CALLOUT(interp_pmc, interp);
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
284 }
285
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
286 /*
287
288 =item C<Parrot_Int Parrot_api_destroy_interpreter(Parrot_PMC interp_pmc)>
289
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
290 Destroys the C<interp_pmc> interpreter, freeing the memory structures allocated
291 for it. This function returns a true value if this call is successful and false
292 value otherwise.
3653784 @bluescreen10 Embed API Documentation round 1
bluescreen10 authored
293
294 =cut
295
296 */
297
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
298 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
299 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
300 Parrot_api_destroy_interpreter(Parrot_PMC interp_pmc)
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
301 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
302 ASSERT_ARGS(Parrot_api_destroy_interpreter)
2dc5187 @nwellnhof [embed] Fix segfault with --leak-test option
nwellnhof authored
303 Parrot_jump_buff env;
304 if (setjmp(env)) {
305 /* We can't check for potential errors because the interpreter
306 * might have been destroyed. */
307 return 1;
308 }
309 else {
ced54a5 @NotFound Fix remaining 'might be clobbered' warning
NotFound authored
310 Interp * const interp = GET_INTERP(interp_pmc);
311 void * _oldtop = interp->lo_var_ptr;
312 if (_oldtop == NULL)
313 interp->lo_var_ptr = &_oldtop;
314 interp->api_jmp_buf = &env;
2dc5187 @nwellnhof [embed] Fix segfault with --leak-test option
nwellnhof authored
315 Parrot_destroy(interp);
316 Parrot_x_exit(interp, 0);
317 /* Never reached, x_exit calls longjmp */
318 return 1;
319 }
687438e @Whiteknight add in the prototype embedding API functions I've been playing with
Whiteknight authored
320 }
321
322 /*
323
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
324 =item C<Parrot_Int Parrot_api_set_warnings(Parrot_PMC interp_pmc, Parrot_Int
325 flags)>
326
327 Enables C<inter_pmc>'s warning messages the type of warning information to be
328 print out is specified by C<flags>. This function returns a true value if this
329 call is successful and false value otherwise.
330
331 =cut
332
333 */
334
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
335 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
336 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
337 Parrot_api_set_warnings(Parrot_PMC interp_pmc, Parrot_Int flags)
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
338 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
339 ASSERT_ARGS(Parrot_api_set_warnings)
c1ab56e More fixes, almost there
Mariano Wahlmann authored
340 EMBED_API_CALLIN(interp_pmc, interp)
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
341 /* Activates the given warnings. (Macro from warnings.h.) */
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
342 PARROT_WARNINGS_on(interp, flags);
c1ab56e More fixes, almost there
Mariano Wahlmann authored
343 EMBED_API_CALLOUT(interp_pmc, interp)
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
344 }
345
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
346 /*
347
348 =item C<Parrot_Int Parrot_api_add_library_search_path(Parrot_PMC interp_pmc,
349 const char *path)>
350
351 Adds C<path> to the C<inter_pmc>'s library search path list. This function
352 returns a true value if this call is successful and false value otherwise.
353
354 =cut
355
356 */
357
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
358 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
359 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
360 Parrot_api_add_library_search_path(Parrot_PMC interp_pmc,
361 ARGIN(const char *path))
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
362 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
363 ASSERT_ARGS(Parrot_api_add_library_search_path)
c1ab56e More fixes, almost there
Mariano Wahlmann authored
364 EMBED_API_CALLIN(interp_pmc, interp)
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
365 Parrot_lib_add_path_from_cstring(interp, path, PARROT_LIB_PATH_LIBRARY);
229a781 @Whiteknight Add experimental ability to modify PARROT_LIB_PATH_LANG with the -L c…
Whiteknight authored
366
367 /* EXPERIMENTAL. This line has been added experimentally because it is a
368 missing feature, and it may go away at any time without warning. */
369 Parrot_lib_add_path_from_cstring(interp, path, PARROT_LIB_PATH_LANG);
c1ab56e More fixes, almost there
Mariano Wahlmann authored
370 EMBED_API_CALLOUT(interp_pmc, interp)
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
371 }
372
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
373 /*
374
375 =item C<Parrot_Int Parrot_api_add_include_search_path(Parrot_PMC interp_pmc,
376 const char *path)>
377
378 Adds C<path> to the C<inter_pmc>'s include search path list. This function
379 returns a true value if this call is successful and false value otherwise.
380
381 =cut
382
383 */
384
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
385 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
386 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
387 Parrot_api_add_include_search_path(Parrot_PMC interp_pmc,
388 ARGIN(const char *path))
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
389 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
390 ASSERT_ARGS(Parrot_api_add_include_search_path)
c1ab56e More fixes, almost there
Mariano Wahlmann authored
391 EMBED_API_CALLIN(interp_pmc, interp)
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
392 Parrot_lib_add_path_from_cstring(interp, path, PARROT_LIB_PATH_INCLUDE);
c1ab56e More fixes, almost there
Mariano Wahlmann authored
393 EMBED_API_CALLOUT(interp_pmc, interp)
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
394 }
395
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
396 /*
397
398 =item C<Parrot_Int Parrot_api_add_dynext_search_path(Parrot_PMC interp_pmc,
399 const char *path)>
400
401 Adds C<path> to the C<inter_pmc>'s dynext search path list. This function
402 returns a true value if this call is successful and false value otherwise.
403
404 =cut
405
406 */
407
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
408 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
409 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
410 Parrot_api_add_dynext_search_path(Parrot_PMC interp_pmc,
411 ARGIN(const char *path))
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
412 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
413 ASSERT_ARGS(Parrot_api_add_dynext_search_path)
c1ab56e More fixes, almost there
Mariano Wahlmann authored
414 EMBED_API_CALLIN(interp_pmc, interp)
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
415 Parrot_lib_add_path_from_cstring(interp, path, PARROT_LIB_PATH_DYNEXT);
c1ab56e More fixes, almost there
Mariano Wahlmann authored
416 EMBED_API_CALLOUT(interp_pmc, interp)
9d25cd4 @Whiteknight change the imcc_run function to return a PackFile PMC so we can use i…
Whiteknight authored
417 }
3259cda First cut of Parrot_api_set_stdhandles API function
Mariano Wahlmann authored
418
419 /*
420
c7def2f @jkeenan Run 'perl tools/dev/headerizer.pl src/embed/api.o'.
jkeenan authored
421 =item C<Parrot_Int Parrot_api_set_stdhandles(Parrot_PMC interp_pmc, Parrot_Int
422 in, Parrot_Int out, Parrot_Int err)>
3259cda First cut of Parrot_api_set_stdhandles API function
Mariano Wahlmann authored
423
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
424 Set the C<interp_pmc>'s standard file descriptors STDIN, STDOUT, STDERR. Any
425 file descriptor set to C<PIO_INVALID_HANDLE> is ignored. This function returns
426 a true value if this call is successful and false value otherwise.
3259cda First cut of Parrot_api_set_stdhandles API function
Mariano Wahlmann authored
427
428 =cut
429
430 */
f30aa2f @kapace Added some tests for embed api, get/set compiler and commented set_st…
kapace authored
431 /* Whiteknight told me that theres no way to test this for now, so it should be
432 commented out, for now.
3259cda First cut of Parrot_api_set_stdhandles API function
Mariano Wahlmann authored
433
434 PARROT_API
e98ef02 @Whiteknight lots of fixes. We still don't build completely, but we are much close…
Whiteknight authored
435 Parrot_Int
aef7ea1 Fixed stdin,stdout and stderr Andy++ pointed out
Mariano Wahlmann authored
436 Parrot_api_set_stdhandles(Parrot_PMC interp_pmc, Parrot_Int in,
437 Parrot_Int out, Parrot_Int err)
3259cda First cut of Parrot_api_set_stdhandles API function
Mariano Wahlmann authored
438 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
439 ASSERT_ARGS(Parrot_api_set_stdhandles)
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
440 EMBED_API_CALLIN(interp_pmc, interp)
441 void *dummy;
442
1311cec @jkeenan [codingstd] Fix files so they pass c_operator, c_parens, pod_syntax, and
jkeenan authored
443 if (PIO_INVALID_HANDLE != (PIOHANDLE)in) {
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
444 PMC * const pmc = Parrot_pmc_new(interp, enum_class_FileHandle);
aef7ea1 Fixed stdin,stdout and stderr Andy++ pointed out
Mariano Wahlmann authored
445 Parrot_io_set_os_handle(interp, pmc, (PIOHANDLE)in);
1311cec @jkeenan [codingstd] Fix files so they pass c_operator, c_parens, pod_syntax, and
jkeenan authored
446 dummy = (void *)Parrot_io_stdhandle(interp, PIO_STDIN_FILENO, pmc);
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
447 }
448
1311cec @jkeenan [codingstd] Fix files so they pass c_operator, c_parens, pod_syntax, and
jkeenan authored
449 if (PIO_INVALID_HANDLE != (PIOHANDLE)out) {
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
450 PMC * const pmc = Parrot_pmc_new(interp, enum_class_FileHandle);
aef7ea1 Fixed stdin,stdout and stderr Andy++ pointed out
Mariano Wahlmann authored
451 Parrot_io_set_os_handle(interp, pmc, (PIOHANDLE)out);
1311cec @jkeenan [codingstd] Fix files so they pass c_operator, c_parens, pod_syntax, and
jkeenan authored
452 dummy = (void *)Parrot_io_stdhandle(interp, PIO_STDOUT_FILENO, pmc);
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
453 }
454
1311cec @jkeenan [codingstd] Fix files so they pass c_operator, c_parens, pod_syntax, and
jkeenan authored
455 if (PIO_INVALID_HANDLE != (PIOHANDLE)err) {
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
456 PMC * const pmc = Parrot_pmc_new(interp, enum_class_FileHandle);
aef7ea1 Fixed stdin,stdout and stderr Andy++ pointed out
Mariano Wahlmann authored
457 Parrot_io_set_os_handle(interp, pmc, (PIOHANDLE)err);
1311cec @jkeenan [codingstd] Fix files so they pass c_operator, c_parens, pod_syntax, and
jkeenan authored
458 dummy = (void *)Parrot_io_stdhandle(interp, PIO_STDERR_FILENO, pmc);
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
459 }
16e368d @Whiteknight fix several build warnings in src/embed/* in gcc, g++, and icc
Whiteknight authored
460 UNUSED(dummy);
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
461
462 EMBED_API_CALLOUT(interp_pmc, interp)
f30aa2f @kapace Added some tests for embed api, get/set compiler and commented set_st…
kapace authored
463 }*/
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
464
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
465 /*
466
467 =item C<Parrot_Int Parrot_api_get_runtime_path(Parrot_PMC interp_pmc,
468 Parrot_String *runtime)>
469
470 Stores in C<runtime> the C<interp_pmc>'s running path. This function returns a
471 true value if this call is successful and false value otherwise.
472
473 =cut
474
475 */
476
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
477 PARROT_API
478 Parrot_Int
1216a51 @Whiteknight quick initial pass for codestd
Whiteknight authored
479 Parrot_api_get_runtime_path(Parrot_PMC interp_pmc,
480 ARGOUT(Parrot_String *runtime))
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
481 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
482 ASSERT_ARGS(Parrot_api_get_runtime_path)
e9934d7 Made it compile with gcc
Mariano Wahlmann authored
483 EMBED_API_CALLIN(interp_pmc, interp)
f41cf98 @Whiteknight many more fixes. We build main.c now but fail in some of the alternat…
Whiteknight authored
484 *runtime = Parrot_get_runtime_path(interp);
485 EMBED_API_CALLOUT(interp_pmc, interp);
486 }
487
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
488 /*
489
490 =item C<Parrot_Int Parrot_api_set_configuration_hash(Parrot_PMC interp_pmc,
491 Parrot_PMC confighash)>
492
493 Sets the C<interp_pmc>'s configuration hash passed in C<confighash>. This
494 function returns a true value if this call is successful and false value
495 otherwise.
496
497 =cut
498
499 */
500
c4ccd13 @Whiteknight first prototype of a new mechanism for setting the configuration hash…
Whiteknight authored
501 PARROT_API
502 Parrot_Int
503 Parrot_api_set_configuration_hash(Parrot_PMC interp_pmc, Parrot_PMC confighash)
504 {
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
505 ASSERT_ARGS(Parrot_api_set_configuration_hash)
e9934d7 Made it compile with gcc
Mariano Wahlmann authored
506 EMBED_API_CALLIN(interp_pmc, interp)
c4ccd13 @Whiteknight first prototype of a new mechanism for setting the configuration hash…
Whiteknight authored
507 Parrot_set_config_hash_pmc(interp, confighash);
5c2c3d4 @Whiteknight fix library paths. The build now progresses through all the parts tha…
Whiteknight authored
508 Parrot_lib_update_paths_from_config_hash(interp);
c4ccd13 @Whiteknight first prototype of a new mechanism for setting the configuration hash…
Whiteknight authored
509 EMBED_API_CALLOUT(interp_pmc, interp);
510 }
511
e1ced3e @Whiteknight add a note explaining this stupid function
Whiteknight authored
512 /*
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
513
f0bd1e1 First cut of load_language, set_compiler, get compiler
Mariano Wahlmann authored
514 =item C<Parrot_Int Parrot_api_load_language(Parrot_PMC interp_pmc, Parrot_String
d74cf45 @Whiteknight fix build warnings in src/embed/api.c
Whiteknight authored
515 lang)>
3562b6b Unfished work implemented API functions
Mariano Wahlmann authored
516
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
517 Loads the HLL compiler libraries for C<lang> into the C<interp_pmc>. This
518 function returns a true value if this call is successful and false value
519 otherwise.
3562b6b Unfished work implemented API functions
Mariano Wahlmann authored
520
521 =cut
522
523 */
524
525 PARROT_API
526 Parrot_Int
c9c5a00 @leto Decorate some embed api functions and rerun headerizer
leto authored
527 Parrot_api_load_language(Parrot_PMC interp_pmc, ARGIN(Parrot_String lang))
3562b6b Unfished work implemented API functions
Mariano Wahlmann authored
528 {
529 ASSERT_ARGS(Parrot_api_load_language)
530 EMBED_API_CALLIN(interp_pmc, interp)
d74cf45 @Whiteknight fix build warnings in src/embed/api.c
Whiteknight authored
531 Parrot_load_language(interp, lang);
532 EMBED_API_CALLOUT(interp_pmc, interp);
3562b6b Unfished work implemented API functions
Mariano Wahlmann authored
533 }
534
535 /*
536
f0bd1e1 First cut of load_language, set_compiler, get compiler
Mariano Wahlmann authored
537 =item C<Parrot_Int Parrot_api_get_compiler(Parrot_PMC interp_pmc, Parrot_String
d74cf45 @Whiteknight fix build warnings in src/embed/api.c
Whiteknight authored
538 type, Parrot_PMC *compiler)>
3562b6b Unfished work implemented API functions
Mariano Wahlmann authored
539
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
540 Gets the compiler PMC and stores it in C<compiler>. This function returns a true
541 value if this call is successful and false value otherwise.
542
3562b6b Unfished work implemented API functions
Mariano Wahlmann authored
543 =cut
544
545 */
546
547 PARROT_API
548 Parrot_Int
c9c5a00 @leto Decorate some embed api functions and rerun headerizer
leto authored
549 Parrot_api_get_compiler(Parrot_PMC interp_pmc, ARGIN(Parrot_String type),
d74cf45 @Whiteknight fix build warnings in src/embed/api.c
Whiteknight authored
550 ARGOUT(Parrot_PMC *compiler))
3562b6b Unfished work implemented API functions
Mariano Wahlmann authored
551 {
552 ASSERT_ARGS(Parrot_api_get_compiler)
553 EMBED_API_CALLIN(interp_pmc, interp)
d74cf45 @Whiteknight fix build warnings in src/embed/api.c
Whiteknight authored
554 *compiler = Parrot_get_compiler(interp, type);
555 EMBED_API_CALLOUT(interp_pmc, interp);
f0bd1e1 First cut of load_language, set_compiler, get compiler
Mariano Wahlmann authored
556 }
557
558 /*
559
560 =item C<Parrot_Int Parrot_api_set_compiler(Parrot_PMC interp_pmc, Parrot_String
d74cf45 @Whiteknight fix build warnings in src/embed/api.c
Whiteknight authored
561 type, Parrot_PMC compiler)>
f0bd1e1 First cut of load_language, set_compiler, get compiler
Mariano Wahlmann authored
562
cc0610a @bluescreen10 Fixed codigstd tests
bluescreen10 authored
563 Sets the C<compiler> object for the C<type> files. This function returns a true
564 value if this call is successful and false value otherwise.
565
f0bd1e1 First cut of load_language, set_compiler, get compiler
Mariano Wahlmann authored
566 =cut
567
568 */
569
570 PARROT_API
571 Parrot_Int
c9c5a00 @leto Decorate some embed api functions and rerun headerizer
leto authored
572 Parrot_api_set_compiler(Parrot_PMC interp_pmc, ARGIN(Parrot_String type),
573 ARGIN(Parrot_PMC compiler))
f0bd1e1 First cut of load_language, set_compiler, get compiler
Mariano Wahlmann authored
574 {
575 ASSERT_ARGS(Parrot_api_set_compiler)
576 EMBED_API_CALLIN(interp_pmc, interp)
d74cf45 @Whiteknight fix build warnings in src/embed/api.c
Whiteknight authored
577 Parrot_set_compiler(interp, type, compiler);
255a8d8 @Whiteknight move -G commandline argument parsing from IMCC into the frontend
Whiteknight authored
578 EMBED_API_CALLOUT(interp_pmc, interp)
3562b6b Unfished work implemented API functions
Mariano Wahlmann authored
579 }
0814f94 Merged changes with branch
Mariano Wahlmann authored
580
255a8d8 @Whiteknight move -G commandline argument parsing from IMCC into the frontend
Whiteknight authored
581 /*
582
583 =item C<Parrot_Int Parrot_api_toggle_gc(Parrot_PMC interp_pmc, Parrot_Int on)>
584
585 Turn Parrot's GC on or off.
586
587 =cut
588
589 */
590
591 PARROT_API
592 Parrot_Int
593 Parrot_api_toggle_gc(Parrot_PMC interp_pmc, Parrot_Int on)
594 {
595 ASSERT_ARGS(Parrot_api_toggle_gc)
596 EMBED_API_CALLIN(interp_pmc, interp)
597 if (on) {
598 Parrot_unblock_GC_mark(interp);
599 Parrot_unblock_GC_sweep(interp);
600 }
601 else {
602 Parrot_block_GC_mark(interp);
603 Parrot_block_GC_sweep(interp);
604 }
605 EMBED_API_CALLOUT(interp_pmc, interp)
606 }
6f90f7d @nol888 Add API functions to get a class from an array, and to instantiate a …
nol888 authored
607
c6fa8b7 @mikehh fix codetest failures - add c function docs and ASSERT_ARGS
mikehh authored
608 /*
609
610 =item C<Parrot_Int Parrot_api_reset_call_signature(Parrot_PMC interp_pmc,
611 Parrot_PMC ctx)>
612
613 Reset the call signature
614
615 =cut
616
617 */
618
f0c28dc @Whiteknight Add in an API function so that we can reset and reuse an existing Cal…
Whiteknight authored
619 PARROT_API
620 Parrot_Int
c9c5a00 @leto Decorate some embed api functions and rerun headerizer
leto authored
621 Parrot_api_reset_call_signature(Parrot_PMC interp_pmc, ARGMOD(Parrot_PMC ctx))
f0c28dc @Whiteknight Add in an API function so that we can reset and reuse an existing Cal…
Whiteknight authored
622 {
c6fa8b7 @mikehh fix codetest failures - add c function docs and ASSERT_ARGS
mikehh authored
623 ASSERT_ARGS(Parrot_api_reset_call_signature)
f0c28dc @Whiteknight Add in an API function so that we can reset and reuse an existing Cal…
Whiteknight authored
624 EMBED_API_CALLIN(interp_pmc, interp)
625 STRING * const callcontext = Parrot_str_new(interp, "CallContext", 0);
626 if (!VTABLE_isa(interp, ctx, callcontext))
627 Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
628 "Not a valid CallContext");
629 VTABLE_morph(interp, ctx, PMCNULL);
630 EMBED_API_CALLOUT(interp_pmc, interp)
631 }
632
0814f94 Merged changes with branch
Mariano Wahlmann authored
633 /*
634
027abfa @Whiteknight add two new API functions for dealing with opaque user data pointers
Whiteknight authored
635 =item C<Parrot_Int Parrot_api_wrap_pointer(Parrot_PMC interp_pmc, void *ptr,
636 Parrot_Int size, Parrot_PMC *pmc)>
637
638 Wrap a user data pointer into a Ptr PMC for passing into Parrot. This PMC
639 is designed such that Parrot will treat the pointer as being opaque and will
640 not attempt to dereference, examine, or manipulate it at all.
641
642 Optionally a C<size> parameter can be passed. If C<size> is greater than zero,
643 the size information will be included with the pointer for later use. If
644 C<size> is less than or equal to zero, it will be ignored and will not be
645 included in the PMC object.
646
54d5026 @plobsing [codetest] correct format of C function doc =item
plobsing authored
647 =item C<Parrot_Int Parrot_api_unwrap_pointer(Parrot_PMC interp_pmc, Parrot_PMC
648 pmc, void ** ptr, Parrot_Int * size)>
027abfa @Whiteknight add two new API functions for dealing with opaque user data pointers
Whiteknight authored
649
650 Return a pointer from a PMC. This is typically used in conjunction with
651 C<Parrot_api_wrap_pointer> to return the original wrapped pointer value from
652 the PMC. Used with other PMC types besides C<Ptr> or C<PtrBuf> will have
653 undefined results, and should not be used or relied upon.
654
655 If the pointer was stored with size information, C<size> will contain that
656 size value. Otherwise, C<size> will be -1.
657
658 Notice that this function does not destroy or alter the data PMC.
659
660 =cut
661
662 */
663
664 PARROT_API
665 Parrot_Int
666 Parrot_api_wrap_pointer(Parrot_PMC interp_pmc, ARGIN_NULLOK(void *ptr),
667 Parrot_Int size, ARGOUT(Parrot_PMC *pmc))
668 {
669 ASSERT_ARGS(Parrot_api_wrap_pointer)
670 EMBED_API_CALLIN(interp_pmc, interp)
671 PMC * ptr_pmc = NULL;
672 if (size > 0) {
673 ptr_pmc = Parrot_pmc_new(interp, enum_class_PtrBuf);
b65a8ba @bacek Fix braino in api_wrap/unwrap_pointer.
bacek authored
674 VTABLE_set_integer_native(interp, ptr_pmc, size);
edc686b @plobsing cuddled else
plobsing authored
675 }
676 else
027abfa @Whiteknight add two new API functions for dealing with opaque user data pointers
Whiteknight authored
677 ptr_pmc = Parrot_pmc_new(interp, enum_class_Ptr);
b65a8ba @bacek Fix braino in api_wrap/unwrap_pointer.
bacek authored
678 VTABLE_set_pointer(interp, ptr_pmc, ptr);
027abfa @Whiteknight add two new API functions for dealing with opaque user data pointers
Whiteknight authored
679 *pmc = ptr_pmc;
680 EMBED_API_CALLOUT(interp_pmc, interp)
681 }
682
683 PARROT_API
684 Parrot_Int
685 Parrot_api_unwrap_pointer(Parrot_PMC interp_pmc, Parrot_PMC pmc,
686 ARGOUT(void ** ptr), ARGOUT(Parrot_Int * size))
687 {
688 ASSERT_ARGS(Parrot_api_unwrap_pointer)
689 EMBED_API_CALLIN(interp_pmc, interp)
690 *ptr = VTABLE_get_pointer(interp, pmc);
691 if (pmc->vtable->base_type == enum_class_PtrBuf)
692 *size = VTABLE_get_integer(interp, pmc);
693 else
694 *size = -1;
695 EMBED_API_CALLOUT(interp_pmc, interp);
696 }
697
698 /*
699
1311cec @jkeenan [codingstd] Fix files so they pass c_operator, c_parens, pod_syntax, and
jkeenan authored
700 =back
701
9703ef5 @jkeenan [codingstd] C-style coda needed. No cuddled elses.
jkeenan authored
702 =cut
0814f94 Merged changes with branch
Mariano Wahlmann authored
703
7db7331 @jkeenan Correct C-comment syntax error.
jkeenan authored
704 */
9703ef5 @jkeenan [codingstd] C-style coda needed. No cuddled elses.
jkeenan authored
705
540a832 @jkeenan [codingstd] Mostly linelength fixes.
jkeenan authored
706 /*
707 * Local variables:
708 * c-file-style: "parrot"
709 * End:
710 * vim: expandtab shiftwidth=4 cinoptions='\:2=2' :
711 */
0814f94 Merged changes with branch
Mariano Wahlmann authored
712
Something went wrong with that request. Please try again.