NEURON
hoc_oop.cpp File Reference
#include <../../nrnconf.h>
#include <stdlib.h>
#include <classreg.h>
#include "hocstr.h"
#include "parse.hpp"
#include "hocparse.h"
#include "code.h"
#include "hocassrt.h"
#include "hoclist.h"
#include "nrnmpi.h"
#include "nrnfilewrap.h"
#include <nrnpython_config.h>
#include "nrnjava.h"

Go to the source code of this file.

Classes

union  Templatedatum
 
struct  newobj1_err_t
 

Macros

#define PDEBUG   0
 
#define JAVA2NRN   1
 
#define PUBLIC_TYPE   1
 
#define EXTERNAL_TYPE   2
 
#define NTEMPLATESTACK   20
 
#define pushtemplatesym(arg)   chktemplate(); (templatestackp++)->sym = arg
 
#define pushtemplatesymlist(arg)   chktemplate(); (templatestackp++)->symlist = arg
 
#define pushtemplatei(arg)   chktemplate(); (templatestackp++)->i = arg
 
#define pushtemplateodata(arg)   chktemplate(); (templatestackp++)->odata = arg
 
#define pushtemplateo(arg)   chktemplate(); (templatestackp++)->o = arg
 
#define OBJ_STACK_SIZE   10
 
#define NEWOBJ1_ERR_SIZE   32 /* starts with this size, and doubles on overflow */
 If hoc_newob1 fails after creating a new object, that object needs to be unreffed. More...
 
#define objectpath   hoc_objectpath_impl
 
#define pathprepend   hoc_path_prepend
 

Functions

static void call_constructor (Object *, Symbol *, int)
 
static void free_objectdata (Objectdata *, cTemplate *)
 
void hoc_install_hoc_obj (void)
 
Objecthoc_obj_get (int i)
 
void hoc_obj_set (int i, Object *obj)
 
char * hoc_object_name (Object *ob)
 
size_t hoc_total_array (Symbol *s)
 
size_t hoc_total_array_data (Symbol *s, Objectdata *obd)
 
void hoc_push_current_object (void)
 
Objectdatahoc_objectdata_save (void)
 
Objectdatahoc_objectdata_restore (Objectdata *obdsav)
 
void hoc_obvar_declare (Symbol *sym, int type, int pmes)
 
static Templatedatumpoptemplate (void)
 
static void chktemplate (void)
 
void hoc_object_push (void)
 
void hoc_object_pushed (void)
 
void hoc_object_pop (void)
 
int hoc_resize_toplevel (int more)
 
void hoc_install_object_data_index (Symbol *sp)
 
int hoc_obj_run (const char *cmd, Object *ob)
 Brief explanation of hoc_obj_run. More...
 
void hoc_exec_cmd (void)
 
double hoc_call_objfunc (Symbol *s, int narg, Object *ob)
 
void hoc_oop_initaftererror (void)
 
void oc_save_hoc_oop (Object **a1, Objectdata **a2, int *a4, Symlist **a5)
 
void oc_restore_hoc_oop (Object **a1, Objectdata **a2, int *a4, Symlist **a5)
 
Objecthoc_new_object (Symbol *symtemp, void *v)
 
void hoc_new_object_asgn (Object **obp, Symbol *st, void *v)
 
Object ** hoc_temp_objvar (Symbol *symtemp, void *v)
 
voidnrn_get_oji ()
 Return handle for the current longjump buffer info. More...
 
voidnrn_get_hoc_jmp ()
 If one of the two jmp_buf is controlling the longjmp hoc_newobj1_err needs handle to know how much to unwrap the newobj1 stack. More...
 
static void push_newobj1_err (Object *ob)
 save partially constructed object and controlling longjump handle More...
 
void pop_newobj1_err ()
 pop the now fully constructed object More...
 
void hoc_newobj1_err ()
 unref partially constructed objects controlled by current longjump handle More...
 
Objecthoc_newobj1 (Symbol *sym, int narg)
 
void hoc_newobj_arg (void)
 
void hoc_newobj_ret (void)
 
void hoc_newobj (void)
 
Objectnrn_get_gui_redirect_obj ()
 
void call_ob_proc (Object *ob, Symbol *sym, int narg)
 
static void call_ob_iter (Object *ob, Symbol *sym, int narg)
 
void hoc_objvardecl (void)
 
void hoc_cmp_otype (void)
 
void hoc_known_type (void)
 
void hoc_objectvar (void)
 
void hoc_objectarg (void)
 
void hoc_constobject (void)
 
Objecthoc_name2obj (const char *name, int index)
 
void hoc_object_id (void)
 
void hoc_object_component (void)
 
void hoc_object_eval (void)
 
void hoc_ob_pointer (void)
 
void hoc_asgn_obj_to_str (void)
 
void hoc_object_asgn (void)
 
Symbolhoc_which_template (Symbol *s)
 
void hoc_begintemplate (Symbol *t1)
 
void hoc_endtemplate (Symbol *t)
 
void class2oc (const char *name, void *(*cons)(Object *), void(*destruct)(void *), Member_func *m, int(*checkpoint)(void **), Member_ret_obj_func *mobjret, Member_ret_str_func *strret)
 
Symboljava2nrn_class (const char *name, int id, const char *meth)
 Create a hoc class from a java one. More...
 
Symbolhoc_decl (Symbol *s)
 
void hoc_add_publiclist (Symbol *s)
 
void hoc_external_var (Symbol *s)
 
void hoc_ob_check (int type)
 
void hoc_free_allobjects (cTemplate *ctemplate, Symlist *sl, Objectdata *data)
 
void pathprepend (char *path, const char *name, const char *indx)
 
int objectpath (Object *ob, Object *oblook, char *path, int depth)
 
char * hoc_object_pathname (Object *ob)
 
void hoc_obj_ref (Object *obj)
 
void hoc_dec_refcount (Object **pobj)
 
void hoc_obj_unref (Object *obj)
 
static void hoc_allobjects1 (Symlist *sl, int nspace)
 
static void hoc_allobjects2 (Symbol *s, int nspace)
 
void hoc_allobjects (void)
 
static void hoc_list_allobjref (Symlist *, Objectdata *, int)
 
void hoc_allobjectvars (void)
 
void check_obj_type (Object *obj, const char *type_name)
 
int is_obj_type (Object *obj, const char *type_name)
 
voidnrn_opaque_obj2pyobj (Object *ho)
 

Variables

void *(* p_java2nrn_cons )(Object *)
 
void(* p_java2nrn_destruct )(void *opaque_java_object)
 
double(* p_java2nrn_dmeth )(Object *ho, Symbol *method)
 
char **(* p_java2nrn_smeth )(Object *ho, Symbol *method)
 
Object **(* p_java2nrn_ometh )(Object *ho, Symbol *method)
 
int hoc_print_first_instance = 1
 
int hoc_max_builtin_class_id = -1
 
static Symbolhoc_obj_
 
static int icntobjectdata =0
 
Objecthoc_thisobject
 
Objectdatahoc_objectdata = (Objectdata *)0
 
Objectdatahoc_top_level_data
 
static int icnttoplevel
 
int hoc_in_template =0
 
static Templatedatum templatestack [NTEMPLATESTACK]
 
static Templatedatumtemplatestackp = templatestack
 
static Objectobj_stack_ [OBJ_STACK_SIZE+1]
 
static int obj_stack_loc
 
void(* oc_jump_target_ )()
 
static int newobj1_err_index_
 
static int newobj1_err_size_
 
static newobj1_err_tnewobj1_err_
 
static Objectgui_redirect_obj_
 
static int template_id
 

Macro Definition Documentation

◆ EXTERNAL_TYPE

#define EXTERNAL_TYPE   2

Definition at line 46 of file hoc_oop.cpp.

◆ JAVA2NRN

#define JAVA2NRN   1

Definition at line 18 of file hoc_oop.cpp.

◆ NEWOBJ1_ERR_SIZE

#define NEWOBJ1_ERR_SIZE   32 /* starts with this size, and doubles on overflow */

If hoc_newob1 fails after creating a new object, that object needs to be unreffed.

To handle the case of constructors themselves creating new objects before the error or intervening recovery of error by a callee recovering from execerror, the incomplete new object is put on a stack along with the current longjump target, and removed from the stack when the object is complete. There could be a problem if the destructor doesn't work with a partially constructed object. In case of a execerror before newobj1 completion, all partially constructed objects with a longjump handle equal to the current longjump handle are unreffed.

Definition at line 518 of file hoc_oop.cpp.

◆ NTEMPLATESTACK

#define NTEMPLATESTACK   20

Definition at line 212 of file hoc_oop.cpp.

◆ OBJ_STACK_SIZE

#define OBJ_STACK_SIZE   10

Definition at line 239 of file hoc_oop.cpp.

◆ objectpath

#define objectpath   hoc_objectpath_impl

Definition at line 1910 of file hoc_oop.cpp.

◆ pathprepend

#define pathprepend   hoc_path_prepend

Definition at line 1911 of file hoc_oop.cpp.

◆ PDEBUG

#define PDEBUG   0

Definition at line 16 of file hoc_oop.cpp.

◆ PUBLIC_TYPE

#define PUBLIC_TYPE   1

Definition at line 45 of file hoc_oop.cpp.

◆ pushtemplatei

#define pushtemplatei (   arg)    chktemplate(); (templatestackp++)->i = arg

Definition at line 225 of file hoc_oop.cpp.

◆ pushtemplateo

#define pushtemplateo (   arg)    chktemplate(); (templatestackp++)->o = arg

Definition at line 227 of file hoc_oop.cpp.

◆ pushtemplateodata

#define pushtemplateodata (   arg)    chktemplate(); (templatestackp++)->odata = arg

Definition at line 226 of file hoc_oop.cpp.

◆ pushtemplatesym

#define pushtemplatesym (   arg)    chktemplate(); (templatestackp++)->sym = arg

Definition at line 223 of file hoc_oop.cpp.

◆ pushtemplatesymlist

#define pushtemplatesymlist (   arg)    chktemplate(); (templatestackp++)->symlist = arg

Definition at line 224 of file hoc_oop.cpp.

Function Documentation

◆ call_constructor()

static void call_constructor ( Object ob,
Symbol sym,
int  narg 
)
static

Definition at line 693 of file hoc_oop.cpp.

◆ call_ob_iter()

static void call_ob_iter ( Object ob,
Symbol sym,
int  narg 
)
static

Definition at line 816 of file hoc_oop.cpp.

◆ call_ob_proc()

void call_ob_proc ( Object ob,
Symbol sym,
int  narg 
)

Definition at line 729 of file hoc_oop.cpp.

◆ chktemplate()

static void chktemplate ( void  )
static

Definition at line 229 of file hoc_oop.cpp.

◆ class2oc()

void class2oc ( const char *  name,
void *(*)(Object *)  cons,
void(*)(void *)  destruct,
Member_func m,
int(*)(void **)  checkpoint,
Member_ret_obj_func mobjret,
Member_ret_str_func strret 
)

Definition at line 1581 of file hoc_oop.cpp.

◆ free_objectdata()

static void free_objectdata ( Objectdata od,
cTemplate ctemplate 
)
static

Definition at line 2047 of file hoc_oop.cpp.

◆ hoc_add_publiclist()

void hoc_add_publiclist ( Symbol s)

Definition at line 1802 of file hoc_oop.cpp.

◆ hoc_allobjects()

void hoc_allobjects ( void  )

Definition at line 2110 of file hoc_oop.cpp.

◆ hoc_allobjects1()

void hoc_allobjects1 ( Symlist sl,
int  nspace 
)
static

Definition at line 2129 of file hoc_oop.cpp.

◆ hoc_allobjects2()

void hoc_allobjects2 ( Symbol s,
int  nspace 
)
static

Definition at line 2150 of file hoc_oop.cpp.

◆ hoc_allobjectvars()

void hoc_allobjectvars ( void  )

Definition at line 2169 of file hoc_oop.cpp.

◆ hoc_asgn_obj_to_str()

void hoc_asgn_obj_to_str ( void  )

Definition at line 1384 of file hoc_oop.cpp.

◆ hoc_begintemplate()

void hoc_begintemplate ( Symbol t1)

Definition at line 1509 of file hoc_oop.cpp.

◆ hoc_cmp_otype()

void hoc_cmp_otype ( void  )

Definition at line 878 of file hoc_oop.cpp.

◆ hoc_constobject()

void hoc_constobject ( void  )

Definition at line 936 of file hoc_oop.cpp.

◆ hoc_decl()

Symbol* hoc_decl ( Symbol s)

Definition at line 1787 of file hoc_oop.cpp.

◆ hoc_endtemplate()

void hoc_endtemplate ( Symbol t)

Definition at line 1548 of file hoc_oop.cpp.

◆ hoc_exec_cmd()

void hoc_exec_cmd ( void  )

Definition at line 357 of file hoc_oop.cpp.

◆ hoc_external_var()

void hoc_external_var ( Symbol s)

Definition at line 1814 of file hoc_oop.cpp.

◆ hoc_install_hoc_obj()

void hoc_install_hoc_obj ( void  )

Definition at line 56 of file hoc_oop.cpp.

◆ hoc_known_type()

void hoc_known_type ( void  )

Definition at line 883 of file hoc_oop.cpp.

◆ hoc_list_allobjref()

static void hoc_list_allobjref ( Symlist sl,
Objectdata data,
int  depth 
)
static

Definition at line 2175 of file hoc_oop.cpp.

◆ hoc_new_object()

Object* hoc_new_object ( Symbol symtemp,
void v 
)

Definition at line 465 of file hoc_oop.cpp.

◆ hoc_newobj()

void hoc_newobj ( void  )

Definition at line 665 of file hoc_oop.cpp.

◆ hoc_newobj1()

Object* hoc_newobj1 ( Symbol sym,
int  narg 
)

Definition at line 576 of file hoc_oop.cpp.

◆ hoc_newobj1_err()

void hoc_newobj1_err ( )

unref partially constructed objects controlled by current longjump handle

Definition at line 557 of file hoc_oop.cpp.

◆ hoc_newobj_arg()

void hoc_newobj_arg ( void  )

Definition at line 650 of file hoc_oop.cpp.

◆ hoc_newobj_ret()

void hoc_newobj_ret ( void  )

Definition at line 661 of file hoc_oop.cpp.

◆ hoc_ob_check()

void hoc_ob_check ( int  type)

Definition at line 1852 of file hoc_oop.cpp.

◆ hoc_ob_pointer()

void hoc_ob_pointer ( void  )

Definition at line 1348 of file hoc_oop.cpp.

◆ hoc_object_asgn()

void hoc_object_asgn ( void  )

Definition at line 1391 of file hoc_oop.cpp.

◆ hoc_object_component()

void hoc_object_component ( void  )

Definition at line 1032 of file hoc_oop.cpp.

◆ hoc_object_eval()

void hoc_object_eval ( void  )

Definition at line 1318 of file hoc_oop.cpp.

◆ hoc_object_id()

void hoc_object_id ( void  )

Definition at line 980 of file hoc_oop.cpp.

◆ hoc_object_pop()

void hoc_object_pop ( void  )

Definition at line 273 of file hoc_oop.cpp.

◆ hoc_object_push()

void hoc_object_push ( void  )

Definition at line 243 of file hoc_oop.cpp.

◆ hoc_object_pushed()

void hoc_object_pushed ( void  )

Definition at line 265 of file hoc_oop.cpp.

◆ hoc_objectarg()

void hoc_objectarg ( void  )

Definition at line 921 of file hoc_oop.cpp.

◆ hoc_objectdata_restore()

Objectdata* hoc_objectdata_restore ( Objectdata obdsav)

Definition at line 153 of file hoc_oop.cpp.

◆ hoc_objectdata_save()

Objectdata* hoc_objectdata_save ( void  )

Definition at line 143 of file hoc_oop.cpp.

◆ hoc_objectvar()

void hoc_objectvar ( void  )

Definition at line 888 of file hoc_oop.cpp.

◆ hoc_objvardecl()

void hoc_objvardecl ( void  )

Definition at line 846 of file hoc_oop.cpp.

◆ hoc_obvar_declare()

void hoc_obvar_declare ( Symbol sym,
int  type,
int  pmes 
)

Definition at line 161 of file hoc_oop.cpp.

◆ hoc_push_current_object()

void hoc_push_current_object ( void  )

Definition at line 139 of file hoc_oop.cpp.

◆ hoc_resize_toplevel()

int hoc_resize_toplevel ( int  more)

Definition at line 292 of file hoc_oop.cpp.

◆ hoc_which_template()

Symbol* hoc_which_template ( Symbol s)

Definition at line 1491 of file hoc_oop.cpp.

◆ java2nrn_class()

Symbol* java2nrn_class ( const char *  classname,
int  classindex,
const char *  methods 
)

Create a hoc class from a java one.

Parameters
classindex: +ve id for class (0,1, ...)

Definition at line 1628 of file hoc_oop.cpp.

◆ nrn_get_gui_redirect_obj()

Object* nrn_get_gui_redirect_obj ( )

Definition at line 725 of file hoc_oop.cpp.

◆ nrn_get_hoc_jmp()

void* nrn_get_hoc_jmp ( )

If one of the two jmp_buf is controlling the longjmp hoc_newobj1_err needs handle to know how much to unwrap the newobj1 stack.

Definition at line 683 of file hoc.cpp.

◆ nrn_get_oji()

void* nrn_get_oji ( )

Return handle for the current longjump buffer info.

Valid until finish is called on the oji_ instance.

Definition at line 127 of file ocjump.cpp.

◆ objectpath()

int objectpath ( Object ob,
Object oblook,
char *  path,
int  depth 
)

Definition at line 1923 of file hoc_oop.cpp.

◆ oc_restore_hoc_oop()

void oc_restore_hoc_oop ( Object **  a1,
Objectdata **  a2,
int a4,
Symlist **  a5 
)

Definition at line 449 of file hoc_oop.cpp.

◆ oc_save_hoc_oop()

void oc_save_hoc_oop ( Object **  a1,
Objectdata **  a2,
int a4,
Symlist **  a5 
)

Definition at line 431 of file hoc_oop.cpp.

◆ pathprepend()

void pathprepend ( char *  path,
const char *  name,
const char *  indx 
)

Definition at line 1913 of file hoc_oop.cpp.

◆ pop_newobj1_err()

void pop_newobj1_err ( )

pop the now fully constructed object

Definition at line 551 of file hoc_oop.cpp.

◆ poptemplate()

static Templatedatum* poptemplate ( void  )
static

Definition at line 216 of file hoc_oop.cpp.

◆ push_newobj1_err()

static void push_newobj1_err ( Object ob)
static

save partially constructed object and controlling longjump handle

Definition at line 532 of file hoc_oop.cpp.

Variable Documentation

◆ gui_redirect_obj_

Object* gui_redirect_obj_
static

Definition at line 724 of file hoc_oop.cpp.

◆ hoc_in_template

int hoc_in_template =0

Definition at line 136 of file hoc_oop.cpp.

◆ hoc_max_builtin_class_id

int hoc_max_builtin_class_id = -1

Definition at line 52 of file hoc_oop.cpp.

◆ hoc_obj_

Symbol* hoc_obj_
static

Definition at line 54 of file hoc_oop.cpp.

◆ hoc_print_first_instance

int hoc_print_first_instance = 1

Definition at line 50 of file hoc_oop.cpp.

◆ hoc_thisobject

Object* hoc_thisobject

Definition at line 132 of file hoc_oop.cpp.

◆ hoc_top_level_data

Objectdata* hoc_top_level_data

Definition at line 134 of file hoc_oop.cpp.

◆ icntobjectdata

int icntobjectdata =0
static

Definition at line 131 of file hoc_oop.cpp.

◆ icnttoplevel

int icnttoplevel
static

Definition at line 135 of file hoc_oop.cpp.

◆ newobj1_err_

newobj1_err_t* newobj1_err_
static

Definition at line 529 of file hoc_oop.cpp.

◆ newobj1_err_index_

int newobj1_err_index_
static

Definition at line 527 of file hoc_oop.cpp.

◆ newobj1_err_size_

int newobj1_err_size_
static

Definition at line 528 of file hoc_oop.cpp.

◆ obj_stack_

Object* obj_stack_[OBJ_STACK_SIZE+1]
static

Definition at line 240 of file hoc_oop.cpp.

◆ obj_stack_loc

int obj_stack_loc
static

Definition at line 241 of file hoc_oop.cpp.

◆ oc_jump_target_

void(* oc_jump_target_) ()

Definition at line 672 of file hoc.cpp.

◆ p_java2nrn_cons

void*(* p_java2nrn_cons) (Object *)

Definition at line 22 of file hoc_oop.cpp.

◆ p_java2nrn_destruct

void(* p_java2nrn_destruct) (void *opaque_java_object)

Definition at line 23 of file hoc_oop.cpp.

◆ p_java2nrn_dmeth

double(* p_java2nrn_dmeth) (Object *ho, Symbol *method)

Definition at line 24 of file hoc_oop.cpp.

◆ p_java2nrn_ometh

Object**(* p_java2nrn_ometh) (Object *ho, Symbol *method)

Definition at line 26 of file hoc_oop.cpp.

◆ p_java2nrn_smeth

char**(* p_java2nrn_smeth) (Object *ho, Symbol *method)

Definition at line 25 of file hoc_oop.cpp.

◆ template_id

int template_id
static

Definition at line 1507 of file hoc_oop.cpp.

◆ templatestack

Templatedatum templatestack[NTEMPLATESTACK]
static

Definition at line 213 of file hoc_oop.cpp.

◆ templatestackp

Templatedatum* templatestackp = templatestack
static

Definition at line 214 of file hoc_oop.cpp.