From 63187020f00915a25f7b2831cf25f66ca38c4999 Mon Sep 17 00:00:00 2001 From: Alexander Frink Date: Thu, 3 Feb 2000 00:56:08 +0000 Subject: [PATCH] bug fix for output of interactive expression --- cint/ginaccint.bin.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/cint/ginaccint.bin.cpp b/cint/ginaccint.bin.cpp index 52f3ef48..4c134b4e 100644 --- a/cint/ginaccint.bin.cpp +++ b/cint/ginaccint.bin.cpp @@ -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 } -- 2.44.0