Changeset 13

Show
Ignore:
Timestamp:
04/24/07 16:26:31 (2 years ago)
Author:
hines
Message:

using the hoc stack machine quite a bit so factor out the common save/restore

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/pygetsetcall/src/nrnpython/nrnpy_hoc.cpp

    r12 r13  
    126126} 
    127127 
     128static Inst* save_pc(Inst* newpc) { 
     129        Inst* savpc = hoc_pc; 
     130        hoc_pc = newpc; 
     131        return savpc; 
     132} 
     133 
    128134static int hocobj_pushargs(PyObject* args) { 
    129135        int i, narg = PyTuple_Size(args); 
     
    168174static void component(PyHocObject* po) { 
    169175        Inst fc[5]; 
    170         Inst* pcsav; 
    171         pcsav = hoc_pc; 
    172176        fc[0].sym = po->sym_; 
    173177        fc[1].i = 0; 
     
    181185        fc[3].i = po->ho_->ctemplate->id; 
    182186        fc[4].sym = po->sym_; 
    183         hoc_pc = fc
     187        Inst* pcsav = save_pc(fc)
    184188        hoc_object_component(); 
    185189        hoc_pc = pcsav; 
     
    272276                        hoc_pushx(d); 
    273277                }else{ 
    274                         Inst* pcsav; 
    275278                        Inst fc[2]; 
    276279                        fc[0].sym = self->sym_; 
    277280                        fc[1].i = narg; 
    278                         pcsav = hoc_pc; 
    279                         hoc_pc = fc; 
     281                        Inst* pcsav = save_pc(fc); 
    280282                        hoc_call(); 
    281283                        hoc_pc = pcsav; 
     
    349351static void hocobj_objectvar(Symbol* sym) { 
    350352        Inst fc; 
    351         Inst* pcsav; 
    352         pcsav = hoc_pc; 
    353         hoc_pc = &fc; 
    354353        fc.sym = sym; 
     354        Inst* pcsav = save_pc(&fc); 
    355355        hoc_objectvar(); 
    356356        hoc_pc = pcsav; 
     
    414414                break; 
    415415        case STRING: // char* 
    416                 pcsav = hoc_pc; 
    417                 hoc_pc = &fc; 
    418                 hoc_pc->sym = sym; 
     416                fc.sym = sym; 
     417                pcsav = save_pc(&fc); 
    419418                hoc_push_string(); 
     419                hoc_pc = pcsav; 
    420420                result = Py_BuildValue("s", *hoc_strpop()); 
    421                 hoc_pc = pcsav; 
    422421                break; 
    423422        case OBJECTVAR: // Object* 
    424423                if (!ISARRAY(sym)) { 
    425                         pcsav = hoc_pc; 
    426                         hoc_pc = &fc; 
    427                         hoc_pc->sym = sym; 
     424                        fc.sym = sym; 
     425                        pcsav = save_pc(&fc); 
    428426                        hoc_objectvar(); 
    429427                        hoc_pc = pcsav; 
     
    453451                break; 
    454452        default: // otherwise 
     453                char e[200]; 
     454                sprintf(e, "no HocObject interface for %s (hoc type %d)", n, sym->type); 
     455                PyErr_SetString(PyExc_TypeError, e); 
    455456                break; 
    456457        } 
     
    509510                break; 
    510511        case STRING: // char* 
    511                 pcsav = hoc_pc; 
    512                 hoc_pc = &fc; 
    513                 hoc_pc->sym = sym; 
     512                fc.sym = sym; 
     513                pcsav = save_pc(&fc); 
    514514                hoc_push_string(); 
    515515                hoc_pc = pcsav;