Changeset 3936 for src/perl5

Show
Ignore:
Timestamp:
05/27/05 01:59:21 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
5515
Message:

* obj invocation now carries env around too

Location:
src/perl5
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • src/perl5/perl5.c

    r3934 r3936  
    159159perl5_SvTRUE ( SV * sv ) 
    160160{ 
    161     bool *rv; 
     161    bool rv; 
    162162    rv = SvTRUE(sv); 
    163163    return rv; 
     
    183183 
    184184SV * 
    185 perl5_call(char *subname, int argc, SV** args, int cxt) 
     185perl5_call(char *subname, int argc, SV** args, SV *env, int cxt) 
    186186{ 
    187187    int i; 
    188     SV *rv; 
     188    SV *rv, *sv; 
    189189 
    190190    dSP; 
     
    192192    ENTER; 
    193193    SAVETMPS; 
    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; 
    241194 
    242195    if (env != NULL) { 
     
    246199    } 
    247200 
     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 
     220SV * 
     221perl5_get_sv(const char *name) 
     222{ 
     223    SV *sv = get_sv(name, 1); 
     224    /* sv_dump(sv); */ 
     225    return sv; 
     226} 
     227 
     228void * 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 
     240SV * 
     241perl5_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 
    248255    sv = newSVpv(code, 0); 
    249256    eval_sv(sv, cxt); 
  • src/perl5/perl5.h

    r3933 r3936  
    1111SV * perl5_newSViv ( int iv ); 
    1212SV * perl5_newSVnv ( double iv ); 
    13 SV * perl5_call(char *subname, int argc, SV** args, int cxt); 
     13SV * perl5_call(char *subname, int argc, SV** args, SV *env, int cxt); 
    1414bool perl5_can(SV *inv, char *subname); 
    1515SV * perl5_eval(char *code, SV *env, int cxt);