This is the mail archive of the guile@cygnus.com mailing list for the guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Questions with embedding guile


unfortunately, it looks like `gh_eval_file()' uses
`scm_primitive_load()', guts excerpted:

:  {
:    SCM form, port;
:    port = scm_open_file (filename,
:	     scm_makfromstr ("r", (scm_sizet) sizeof (char), 0));
:    while (1)
:      {
:      form = scm_read (port);
:      if (SCM_EOF_OBJECT_P (form))
:        break;
:	scm_eval_x (form);		/* <-- return value lost */
:      }
:    scm_close_port (port);
:  }
:  return SCM_UNSPECIFIED;

the value of the evaluated form is lost.  you can probably save that
value and return it.  i wonder why this is not the default?  (is this
related to the "strong differences in opinion among implementors"
alluded to in the guile-ref Info-page?

anyway, in case anyone is interested, a patch to libguile/load.c
follows.

regards,
thi


------------------------------------------------------------------------------
*** load.c~	Fri Oct 24 23:53:10 1997
--- load.c	Thu Feb 12 16:01:23 1998
***************
*** 74,79 ****
--- 74,80 ----
  scm_primitive_load (filename)
       SCM filename;
  {
+   SCM retval = SCM_UNSPECIFIED;
    SCM hook = *scm_loc_load_hook;
    SCM_ASSERT (SCM_NIMP (filename) && SCM_ROSTRINGP (filename), filename,
  	      SCM_ARG1, s_primitive_load);
***************
*** 94,104 ****
  	form = scm_read (port);
  	if (SCM_EOF_OBJECT_P (form))
  	  break;
! 	scm_eval_x (form);
        }
      scm_close_port (port);
    }
!   return SCM_UNSPECIFIED;
  }
  
  
--- 95,105 ----
  	form = scm_read (port);
  	if (SCM_EOF_OBJECT_P (form))
  	  break;
! 	retval = scm_eval_x (form);
        }
      scm_close_port (port);
    }
!   return retval;
  }