Changeset 35a0c12 in git
- Timestamp:
- Dec 6, 2012, 2:46:43 PM (11 years ago)
- Branches:
- (u'spielwiese', '8d54773d6c9e2f1d2593a28bc68b7eeab54ed529')
- Children:
- 51f56350e07c1644b3a676e1ad934986088a0bd0
- Parents:
- 8a8315c064275dd1bdd822cbc4e00072d5a3761e
- git-author:
- Alexander Dreyer <adreyer@gmx.de>2012-12-06 14:46:43+01:00
- git-committer:
- Alexander Dreyer <adreyer@gmx.de>2012-12-06 15:20:24+01:00
- Location:
- Singular
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/blackbox.h
r8a8315c r35a0c12 70 70 /// return the name to the type given by t (r/o) 71 71 const char * getBlackboxName(const int t); 72 /// used by scanner: returns ROOTDECL for known types (and the type number in t) 72 /// used by scanner: returns ROOT_DECL for known types 73 /// (and the type number in @c tok) 73 74 int blackboxIsCmd(const char *n, int & tok); 74 75 /// define a new type -
Singular/iparith.cc
r8a8315c r35a0c12 5206 5206 } 5207 5207 return TRUE; 5208 } 5209 5210 BOOLEAN jjLOADLIB(const char* libname, BOOLEAN autoexport) 5211 { 5212 leftv v = (leftv)omAlloc0Bin(sleftv_bin); 5213 v->data = (char*)libname; 5214 v->rtyp = STRING_CMD; 5215 BOOLEAN res = jjLOAD(NULL, v, autoexport); 5216 omFreeBin(v, sleftv_bin); 5217 5218 return res; 5208 5219 } 5209 5220 -
Singular/pyobject.cc
r8a8315c r35a0c12 64 64 /// Initialize unique (singleton) python interpreter instance, 65 65 /// and set Singular type identifier 66 static void init(id_type num 66 static void init(id_type num) { instance().m_id = num; } 67 67 68 68 /// Get Singular type identitfier … … 702 702 703 703 704 // forward declaration 705 //int iiAddCproc(char *libname, char *procname, BOOLEAN pstatic, 706 // BOOLEAN(*func)(leftv res, leftv v)); 707 708 #define ADD_C_PROC(name) iiAddCproc("", (char*)#name, FALSE, name); 704 705 blackbox* pyobject_blackbox(int& tok) { 706 if(blackboxIsCmd("pyobject", tok) != ROOT_DECL) 707 { 708 tok = setBlackboxStuff((blackbox*)omAlloc0(sizeof(blackbox)), 709 "pyobject"); 710 } 711 return getBlackboxStuff(tok); 712 } 713 709 714 710 715 711 716 void pyobject_init() 712 717 { 713 blackbox *b = (blackbox*)omAlloc0(sizeof(blackbox)); 714 b->blackbox_destroy = pyobject_destroy; 715 b->blackbox_String = pyobject_String; 716 b->blackbox_Init = pyobject_Init; 717 b->blackbox_Copy = pyobject_Copy; 718 b->blackbox_Assign = pyobject_Assign; 719 b->blackbox_Op1 = pyobject_Op1; 720 b->blackbox_Op2 = pyobject_Op2; 721 b->blackbox_Op3 = pyobject_Op3; 722 b->blackbox_OpM = pyobject_OpM; 723 b->data = omAlloc0(newstruct_desc_size()); 724 725 PythonInterpreter::init(setBlackboxStuff(b,"pyobject")); 726 727 ADD_C_PROC(python_import); 728 ADD_C_PROC(python_eval); 729 ADD_C_PROC(python_run); 730 } 731 732 extern "C" { void mod_init() { pyobject_init(); } } 733 718 int tok = -1; 719 blackbox* bbx = pyobject_blackbox(tok); 720 if (bbx->blackbox_Init != pyobject_Init) 721 { 722 bbx->blackbox_destroy = pyobject_destroy; 723 bbx->blackbox_String = pyobject_String; 724 bbx->blackbox_Init = pyobject_Init; 725 bbx->blackbox_Copy = pyobject_Copy; 726 bbx->blackbox_Assign = pyobject_Assign; 727 bbx->blackbox_Op1 = pyobject_Op1; 728 bbx->blackbox_Op2 = pyobject_Op2; 729 bbx->blackbox_Op3 = pyobject_Op3; 730 bbx->blackbox_OpM = pyobject_OpM; 731 bbx->data = omAlloc0(newstruct_desc_size()); 732 733 PythonInterpreter::init(tok); 734 } 735 } 736 737 #define PYOBJECT_ADD_C_PROC(name) \ 738 psModulFunctions->iiAddCproc(currPack->libname, (char*)#name, FALSE, name); 739 740 extern "C" { 741 void mod_init(SModulFunctions* psModulFunctions) 742 { 743 pyobject_init(); 744 745 PYOBJECT_ADD_C_PROC(python_import); 746 PYOBJECT_ADD_C_PROC(python_eval); 747 PYOBJECT_ADD_C_PROC(python_run); 748 } 749 } 750 #undef PYOBJECT_ADD_C_PROC -
Singular/pyobject_setup.cc
r8a8315c r35a0c12 16 16 #include <kernel/mod2.h> 17 17 #include <kernel/febase.h> 18 #include <Singular/blackbox.h> 19 #include <Singular/ipshell.h> 18 20 19 21 /* whether pyobject module is linked statically or dynamically */ … … 40 42 # elif defined(HAVE_DYNAMIC_PYOBJECT) // Case: pyobject is dynamic module (prefered variant) 41 43 42 // forward declaration for Singular/iplib.cc 43 void* binary_module_function(const char* lib, const char* func); 44 void pyobject_setup()44 45 /// blackbox support - initialization via autoloading 46 void* pyobject_autoload(blackbox* bbx) 45 47 { 46 void* fktn = binary_module_function("pyobject", "mod_init"); 47 if (fktn) (* reinterpret_cast<void (*)()>(fktn) )(); 48 else Werror("python related functions are not available"); 48 BOOLEAN jjLOADLIB(const char* libname, BOOLEAN autoexport); 49 if (jjLOADLIB("pyobject.so", TRUE)) return NULL; 50 51 return bbx->blackbox_Init(bbx); 49 52 } 50 53 54 void pyobject_default_destroy(blackbox *b, void *d) 55 { 56 Werror("Python-based functionality not available!"); 57 } 58 59 // Setting up an empty blackbox type, which can be filled with pyobject 60 void pyobject_setup() 61 { 62 blackbox *bbx = (blackbox*)omAlloc0(sizeof(blackbox)); 63 bbx->blackbox_Init = pyobject_autoload; 64 bbx->blackbox_destroy = pyobject_default_destroy; 65 setBlackboxStuff(bbx, "pyobject"); 66 } 67 51 68 #else // Case: no python 52 69 void pyobject_setup() { }
Note: See TracChangeset
for help on using the changeset viewer.