| 194 | | |
| 195 | | PUSHMARK(SP); |
| 196 | | for (i = 0; i < argc; i++) { |
| 197 | | XPUSHs(args[i]); |
| 198 | | } |
| 199 | | PUTBACK; |
| 200 | | |
| 201 | | call_method(subname, cxt); |
| 202 | | |
| 203 | | SPAGAIN; |
| 204 | | |
| 205 | | rv = newSVsv(POPs); |
| 206 | | |
| 207 | | PUTBACK; |
| 208 | | FREETMPS; |
| 209 | | LEAVE; |
| 210 | | |
| 211 | | return rv; |
| 212 | | } |
| 213 | | |
| 214 | | SV * |
| 215 | | perl5_get_sv(const char *name) |
| 216 | | { |
| 217 | | SV *sv = get_sv(name, 1); |
| 218 | | /* sv_dump(sv); */ |
| 219 | | return sv; |
| 220 | | } |
| 221 | | |
| 222 | | void * perl5_set_svref (const char *name, void *val) |
| 223 | | { |
| 224 | | /* fprintf(stderr, "setsvref: name: %s, mkvalref: %p\n", name, val); */ |
| 225 | | |
| 226 | | SV *container = get_sv("pugs::env", TRUE); |
| 227 | | |
| 228 | | SV *sv = newSV(0); |
| 229 | | sv_setref_pv(sv, "pugs", val); |
| 230 | | |
| 231 | | sv_setsv(container, sv); |
| 232 | | } |
| 233 | | |
| 234 | | SV * |
| 235 | | perl5_eval(char *code, SV *env, int cxt) |
| 236 | | { |
| 237 | | dSP; |
| 238 | | SV* sv; |
| 239 | | |
| 240 | | ENTER; |
| | 201 | PUSHMARK(SP); |
| | 202 | for (i = 0; i < argc; i++) { |
| | 203 | XPUSHs(args[i]); |
| | 204 | } |
| | 205 | PUTBACK; |
| | 206 | |
| | 207 | call_method(subname, cxt); |
| | 208 | |
| | 209 | SPAGAIN; |
| | 210 | |
| | 211 | rv = newSVsv(POPs); |
| | 212 | |
| | 213 | PUTBACK; |
| | 214 | FREETMPS; |
| | 215 | LEAVE; |
| | 216 | |
| | 217 | return rv; |
| | 218 | } |
| | 219 | |
| | 220 | SV * |
| | 221 | perl5_get_sv(const char *name) |
| | 222 | { |
| | 223 | SV *sv = get_sv(name, 1); |
| | 224 | /* sv_dump(sv); */ |
| | 225 | return sv; |
| | 226 | } |
| | 227 | |
| | 228 | void * perl5_set_svref (const char *name, void *val) |
| | 229 | { |
| | 230 | /* fprintf(stderr, "setsvref: name: %s, mkvalref: %p\n", name, val); */ |
| | 231 | |
| | 232 | SV *container = get_sv("pugs::env", TRUE); |
| | 233 | |
| | 234 | SV *sv = newSV(0); |
| | 235 | sv_setref_pv(sv, "pugs", val); |
| | 236 | |
| | 237 | sv_setsv(container, sv); |
| | 238 | } |
| | 239 | |
| | 240 | SV * |
| | 241 | perl5_eval(char *code, SV *env, int cxt) |
| | 242 | { |
| | 243 | dSP; |
| | 244 | SV* sv; |
| | 245 | |
| | 246 | ENTER; |
| | 247 | SAVETMPS; |
| | 248 | |
| | 249 | if (env != NULL) { |
| | 250 | sv = get_sv("pugs::env", 1); |
| | 251 | save_item(sv); |
| | 252 | sv_setsv(sv, env); |
| | 253 | } |
| | 254 | |