]> www.ginac.de Git - ginac.git/blobdiff - cint/ginaccint.bin.cpp
- fixed typos, fixed typos, fixed typos...
[ginac.git] / cint / ginaccint.bin.cpp
index 52f3ef4881dbd4ed7110fc5c9e1080ea12f56287..109583378447345e9247b41d69225df0152218b8 100644 (file)
@@ -24,6 +24,8 @@ string ToString(const T & t)
 }
 
 basic * ex::last_created_or_assigned_bp=0;
+basic * ex::dummy_bp=0;
+long ex::last_created_or_assigned_exp=0;
 
 #endif // def OBSCURE_CINT_HACK
 
@@ -122,19 +124,26 @@ void process_tempfile(string const & command)
     
     static unsigned out_count = 0;
     if (TYPES_EQUAL(retval,ref_ex)) {
-        if (ex::last_created_or_assigned_bp_can_be_converted_to_ex()) {
-            string varname = "Out"+ToString(++out_count);
+        string varname = "Out"+ToString(++out_count);
+        if (retval.obj.i!=ex::last_created_or_assigned_exp) {
+            // an ex was returned, but this is not the ex which was created last
+            // => this is not a temporary ex, but one that resides safely in memory
+            
+            // cout << "warning: using ex from retval (experimental)" << endl;
+            ex::dummy_bp=((ex *)(void *)(retval.obj.i))->bp;
+            exec_tempfile("ex "+varname+"(*ex::dummy_bp);");
+        } else if (ex::last_created_or_assigned_bp_can_be_converted_to_ex()) {
             //string varfill;
             //for (int i=4-int(log10(out_count)); i>0; --i)
             //    varfill += ' ';
-            exec_tempfile("ex "+varname+"(*ex::last_created_or_assigned_bp);\n"
-                          +"LLLAST=LLAST;\n"
-                          +"LLAST=LAST;\n"
-                          +"LAST="+varname+";\n"
-                          +"cout << \""+varname+" = \" << "+varname+" << endl << endl;");
+            exec_tempfile("ex "+varname+"(*ex::last_created_or_assigned_bp);");
         } else {
             cout << "warning: last_created_or_assigned_bp modified 0 or not evaluated or not dynallocated" << endl;
         }
+        exec_tempfile(string()+"LLLAST=LLAST;\n"
+                      +"LLAST=LAST;\n"
+                      +"LAST="+varname+";\n"
+                      +"cout << \""+varname+" = \" << "+varname+" << endl << endl;");
     }
 #endif // def OBSCURE_CINT_HACK
 }
@@ -147,7 +156,8 @@ void greeting(void)
          << "  __,  _______  requested, at this moment, for commercial use.  Send e-mail to" << endl
          << " (__) *       | <MXJ02154@niftyserve.or.jp>.  The registration is free." << endl
          << "  ._) i N a C | The GiNaC framework is Copyright by Johannes Gutenberg Univ.," << endl
-         << "<-------------' Germany and licensed under the terms and conditions of the GPL." << endl << endl;
+         << "<-------------' Germany and licensed under the terms and conditions of the GPL." << endl
+         << endl;
 }
 
 int main(void) 
@@ -174,7 +184,7 @@ int main(void)
         string command;
         while (!end_of_command) {
             line = G__input(prompt);
-        
+            
             int pos = 0;
             bool double_quote=false;
             bool single_quote=false;