Commit graph

2083 commits

Author SHA1 Message Date
Rob Browning
8048c00b4f *** empty log message *** 2004-06-16 04:10:37 +00:00
Han-Wen Nienhuys
d93294d451 (unmemoize_exprs): use SCM_CONSP for the loop condition. 2004-06-12 22:22:56 +00:00
Dirk Herrmann
212e58ede8 * list.[ch] (scm_i_finite_list_copy): New internal function to
copy lists that are known to be finite (though not necessarily
	proper).

	* debug.c (scm_procedure_source): Don't have scm_unmemocopy treat
	a closure's argument list like an expression of a body.

	* eval.c (unmemoize_expression, unmemoize_exprs, unmemoize_and,
	unmemoize_begin, unmemoize_case, unmemoize_cond, unmemoize_delay,
	unmemoize_do, unmemoize_if, unmemoize_lambda, unmemoize_let,
	unmemoize_letrec, unmemoize_letstar, unmemoize_or,
	unmemoize_set_x, unmemoize_apply, unmemoize_atcall_cc,
	unmemoize_at_call_with_values, unmemoize_future, sym_atslot_ref,
	unmemoize_atslot_ref, sym_atslot_set_x, unmemoize_atslot_set_x,
	unmemoize_builtin_macro): New static functions and symbols.

	(scm_unmemocopy): Rewritten in terms of the above.  scm_unmemocopy
	now has a slightly different meaning: The memoized form that is
	receives as its argument is now interpreted as a sequence of
	expressions from a body.

	(unmemocar, scm_unmemocar): Since the whole functionality of
	unmemocar and scm_unmemocar is not needed any more, scm_unmemocar
	has its old content back and is deprecated, while unmemocar has
	been removed.

	(SCM_BIT7): Removed.

	(CEVAL): For unmemoizing a single expression, call
	unmemoize_expression instead of scm_unmemocopy, which now expects
	a sequence of body expressions.  Eliminated unnecessary empty
	environment frame when executing let* forms.  Eliminated
	unmemoization step from evaluator.
2004-06-06 07:46:18 +00:00
Marius Vollmer
9ccea37043 *** empty log message *** 2004-06-02 09:44:55 +00:00
Dirk Herrmann
57d23e259a * eval.c (lookup_global_symbol, literal_p, try_macro_lookup):
Modified to make set! work on symbols that represent syntactic
	keywords.
2004-05-30 07:01:27 +00:00
Han-Wen Nienhuys
141521ad8b (SCM_CELL_OBJECT_LOC): use SCM_GC_CELL_OBJECT to prevent
compound expression as lvalue errors.
2004-05-26 21:15:30 +00:00
Marius Vollmer
7c2f56a4de *** empty log message *** 2004-05-24 21:29:26 +00:00
Dirk Herrmann
366ecaec7a * goops.c (compute_getters_n_setters, create_standard_classes,
scm_add_slot): Compute closures by calling scm_i_eval_x on a
	lambda expression rather than creating them with scm_closure.
2004-05-24 04:15:49 +00:00
Dirk Herrmann
26ecfa393d * eval.c (s_macro_keyword, scm_m_set_x): Remove checking for
misplaced syntactic keywords.  This will not work unless guile's
	defmacro feature is deprecated.

	(scm_m_case): Fixed a bug that caused the list of labels to grow
	with every case form.
2004-05-22 06:51:36 +00:00
Kevin Ryde
f865229a61 *** empty log message *** 2004-05-19 00:06:42 +00:00
Marius Vollmer
63947c7ad3 *** empty log message *** 2004-05-18 21:55:11 +00:00
Dirk Herrmann
e7313a9d7e * eval.c (unmemoize_quote): New static function.
(scm_m_quote, scm_m_atslot_ref, SCM_CEVAL): Changed the byte code
	representation of 'quote' and '@slot-ref' to an improper list.
	This reduces execution time, the number of cells used to hold the
	memoized code, and thus also reduces garbage collection time.

	(scm_unmemocopy): Use unmemoize_quote for quote expressions.

	(SCM_CEVAL): Changed macro handling to also work with macros that
	return improper lists.  Added an assertion, that the code returned
	by a macro transformer will not lead to cycles in the memoized
	code.
2004-05-16 06:38:51 +00:00
Dirk Herrmann
e51565673c No functional change, just rearrangements of functions within the
file.

	* eval.c (scm_ilookup, scm_unbound_variable_key,
	error_unbound_variable, scm_lookupcar1, scm_lookupcar): Moved to
	the definitions used for execution, since that's where they will
	belong to later.
2004-05-15 16:45:27 +00:00
Dirk Herrmann
651f07f82e * numbers.h (SCM_SLOPPY_FRACTIONP): Removed. It was not used
throughout guile, has not been part of an official release yet,
	and the concept of sloppy predicates has never been a good idea.

	(SCM_FRACTION_NUMERATOR, SCM_FRACTION_DENOMINATOR,
	SCM_FRACTION_SET_NUMERATOR, SCM_FRACTION_SET_DENOMINATOR):
	Simplified.
2004-05-15 15:50:24 +00:00
Dirk Herrmann
770e048f7d * throw.c (SETJBJMPBUF, SCM_SETJBDFRAME): Add cast to scm_t_bits
to make explicit what happens.
2004-05-15 15:42:47 +00:00
Dirk Herrmann
2ff0840571 * dynl.c (SET_DYNL_HANDLE): Add cast to scm_t_bits to make
explicit what happens.

	* guardians.c (TCONC_IN): Use SCM_SET_CELL_OBJECT_x rather than
	SCM_SET_CELL_WORD_x when writing scheme objets to cell elements.
2004-05-15 15:39:27 +00:00
Marius Vollmer
89afb9cd52 *** empty log message *** 2004-05-10 22:10:02 +00:00
Marius Vollmer
3d5ebfa95c *** empty log message *** 2004-05-10 20:43:00 +00:00
Kevin Ryde
3ae69bb422 *** empty log message *** 2004-05-09 22:34:48 +00:00
Marius Vollmer
279688252e *** empty log message *** 2004-05-06 16:43:46 +00:00
Kevin Ryde
3702692567 *** empty log message *** 2004-05-01 21:51:03 +00:00
Kevin Ryde
c585459825 *** empty log message *** 2004-05-01 21:33:12 +00:00
Kevin Ryde
3cf17ef002 *** empty log message *** 2004-05-01 21:01:47 +00:00
Kevin Ryde
f26c1a32ad *** empty log message *** 2004-04-30 23:45:25 +00:00
Kevin Ryde
a0d06a004f *** empty log message *** 2004-04-28 00:17:45 +00:00
Kevin Ryde
dfa6017ebe *** empty log message *** 2004-04-27 23:35:56 +00:00
Dirk Herrmann
36245b66c2 * libguile/eval.c (s_macro_keyword): New static identifier.
(scm_m_define): Change order to first create binding and
	evaluating the expression afterwards.

	(scm_m_set_x): Memoize complete set! expression.  Only leave
	symbols if no binding exists at memoization time.  Throw error if
	assigning to a syntactic keyword.

	(lazy_memoize_variable): New function.

	(CEVAL): When execution set!, perform lazy memoization if
	unmemoized symbol is detected.

	* libguile/modules.c (module_variable): Return variables with
	unbound value.

	* libguile/tags.h: Fix comment.

	* test-suite/tests/syntax.test: Add test case to check the correct
	handling of define expressions.
2004-04-26 19:59:03 +00:00
Kevin Ryde
da8bcb2f70 *** empty log message *** 2004-04-24 22:06:13 +00:00
Kevin Ryde
4d81111ebd *** empty log message *** 2004-04-24 21:31:42 +00:00
Dirk Herrmann
7e6e6b37ba Hide the implementation of ilocs and isyms in eval.c.
* deprecated.h (SCM_IFRINC, SCM_ICDR, SCM_IFRAME, SCM_IDIST,
	SCM_ICDRP), eval.c (SCM_IFRINC, SCM_ICDR, SCM_IFRAME, SCM_IDIST,
	SCM_ICDRP), eval.h (SCM_ICDR, SCM_IFRINC, SCM_IFRAME, SCM_IDIST,
	SCM_ICDRP): Deprecated and added to deprecated.h.  Moved from
	eval.h to eval.c.

	* deprecated.c (scm_isymnames), deprecated.h (scm_isymnames,
	SCM_ISYMNUM, SCM_ISYMCHARS), eval.c (SCM_ISYMNUM, isymnames,
	scm_unmemocopy, CEVAL), print.c (scm_isymnames), tags.h
	(SCM_ISYMNUM, scm_isymnames, SCM_ISYMCHARS): Deprecated
	scm_isymnames, SCM_ISYMNUM and SCM_ISYMCHARS and added to
	deprecated.[hc].  Moved scm_isymnames from print.c to eval.c and
	renamed to isymnames.  Moved SCM_ISYMNUM from tags.h to eval.c and
	renamed to ISYMNUM.

	* eval.c (scm_i_print_iloc, scm_i_print_isym), eval.h
	(scm_i_print_iloc, scm_i_print_isym), print.c (scm_iprin1):
	Extracted printing of ilocs and isyms to guile internal functions
	scm_i_print_iloc, scm_i_print_isym of eval.c.
2004-04-22 19:19:17 +00:00
Kevin Ryde
7aaf475850 *** empty log message *** 2004-04-22 01:27:33 +00:00
Kevin Ryde
caab294f82 *** empty log message *** 2004-04-21 23:30:39 +00:00
Dirk Herrmann
b1cb24ff0a * eval.c (scm_unmemocopy): Fixed unmemoization of let*.
(deval_args, CEVAL): Minor improvements: Reduced variable scopes,
	added const qualifiers, cast intentionally unused expressions to
	void for emphasis, improved comment.
2004-04-19 16:49:56 +00:00
Dirk Herrmann
5065b40d60 * tags.h (scm_tags, scm_tc8_tags, scm_tc9_flag, scm_tc8_flag,
scm_tc8_isym): Renamed scm_tags to scm_tc8_tags.  Renamed
	scm_tc9_flag to scm_tc8_flag.  Introduced new identifier
	scm_tc8_isym.  Defined tc8-tags relative to scm_tc3_imm24.
	Defined the tc8-tag for flags to be 0x04, which will mean that
	SCM_BOOL_F will also have the value 0x04 instead of 0x013c.  Due
	to the reduced number of bits and the simpler bit pattern for
	SCM_BOOL_F, certain machines may be able to use more efficient
	processor instructions to deal with SCM_BOOL_F.

	(SCM_ITAG9, SCM_MAKE_ITAG9, SCM_ITAG9_DATA): Removed.  These have
	never been defined in a released version, thus no need to
	deprecate them.

	(SCM_IFLAGP, SCM_MAKIFLAG, SCM_IFLAGNUM): Flags now use tc8
	instead of tc9 tags.

	(SCM_ISYMP, SCM_MAKISYM, SCM_ISYMNUM): Isyms now use tc8 instead
	of tc9 tags.

	(SCM_MAKSPCSYM): Removed.  It is almost impossible that user code
	could have used this definition.

	(SCM_IM_AND, SCM_IM_BEGIN, SCM_IM_CASE, SCM_IM_COND, SCM_IM_DO,
	SCM_IM_IF, SCM_IM_LAMBDA, SCM_IM_LET, SCM_IM_LETSTAR,
	SCM_IM_LETREC, SCM_IM_OR, SCM_IM_QUOTE, SCM_IM_SET_X): Now encoded
	as isyms, as special isyms don't exist any more.
2004-04-18 08:56:27 +00:00
Kevin Ryde
e08d2eee17 *** empty log message *** 2004-04-18 00:54:29 +00:00
Kevin Ryde
9fa6c11903 *** empty log message *** 2004-04-17 22:58:34 +00:00
Kevin Ryde
83ac9c59df *** empty log message *** 2004-04-15 01:53:31 +00:00
Kevin Ryde
84a4be9afb *** empty log message *** 2004-04-15 01:37:31 +00:00
Kevin Ryde
c9cdd3966e *** empty log message *** 2004-04-15 00:53:30 +00:00
Han-Wen Nienhuys
6b69393dcc (scm_cell): use SCM_GC_CELL_WORD for checking tag. 2004-04-06 21:49:43 +00:00
Han-Wen Nienhuys
84fad13058 * srfi-13.c (s_scm_string_map): convert character to unsigned char
before converting to unsigned int. This prevents hi-bit ascii as
being converted large integers.
(string_upcase_x): change caller for scm_{up,down}case to
scm_c_{up,down}case

* chars.h (scm_init_chars): change scm_{upcase,downcase} to
scm_c_{up,down}case.
(SCM_MAKE_CHAR): add (unsigned char) cast. This prevents havoc
when hi-bit ASCII is subjected to SCM_MAKE_CHAR().
2004-04-06 21:48:02 +00:00
Kevin Ryde
0b288f368a *** empty log message *** 2004-04-06 00:30:25 +00:00
Kevin Ryde
ea2508c840 *** empty log message *** 2004-04-05 23:54:28 +00:00
Kevin Ryde
c3110a3045 *** empty log message *** 2004-04-05 22:58:28 +00:00
Dirk Herrmann
dec40cd262 * eval.c (CEVAL): Don't distinguish between short and long
instructions when dispatching - just always dispatch on the
	instruction code, which is common for short and long instructions.
	Further, removed unnecessary goto statements and added comment.
2004-04-03 16:38:56 +00:00
Dirk Herrmann
0e7bb79594 * eval.c (scm_unmemocopy): Don't distinguish between short and
long instructions when dispatching - just always dispatch on the
	instruction code, which is common for short and long instructions.
	Further, removed unnecessary goto statements, fixed indentation
	and replaced SCM_IMP predicates by SCM_NULLP.
2004-04-03 15:45:36 +00:00
Dirk Herrmann
f998676709 * eval.c (scm_lookupcar1, CEVAL): Use SCM_ILOCP instead of
comparison with SCM_ILOC00.  In CEVAL, eliminate goto-label
	'checkmacro'.
2004-04-03 14:24:17 +00:00
Kevin Ryde
fbc4223176 *** empty log message *** 2004-03-31 02:00:01 +00:00
Dirk Herrmann
434f2f7a91 Introduce scm_debug_mode_p as a replacement for scm_debug_mode and
SCM_DEBUGGINGP:

	* debug.h (scm_debug_mode_p, scm_debug_mode, SCM_DEBUGGINGP),
	eval.c (scm_debug_mode_p): Deprecated scm_debug_mode and
	SCM_DEBUGGINGP.  Provided scm_debug_mode_p instead, to have one
	single interface that also matches the naming conventions.
	Probably scm_debug_mode_p should be part of the private interface
	anyway.

	* debug.h (scm_debug_mode_p), backtrace.c (display_error_body),
	eval.c (SCM_APPLY, scm_trampoline_0, scm_trampoline_1,
	scm_trampoline_2): Change uses of scm_debug_mode or SCM_DEBUGGINGP
	to scm_debug_mode_p.


	Deprecate direct access to scm_ceval, scm_deval and scm_ceval_ptr:

	* eval.h (scm_ceval, scm_deval, scm_ceval_ptr), debug.h
	(scm_ceval_ptr): Deprecated.  Moved declaration of scm_ceval_ptr
	from debug.h to eval.h.

	* debug.h (SCM_RESET_DEBUG_MODE): Don't access scm_ceval_ptr any
	more, just leave it with setting scm_debug_mode_p, which is
	equivalent for practical purposes.

	* deprecated.h (SCM_XEVAL, SCM_XEVALCAR): Call scm_i_eval_x
	instead of *scm_ceval_ptr.  Leave all evaluating to scm_i_eval_x.

	* gdbint.c (gdb_eval): Call scm_i_eval_x instead of scm_ceval.

	* eval.c (ceval, deval, scm_ceval, scm_deval): Made scm_ceval
	static and renamed it to ceval throughout.  Provide a new exported
	but deprecated function scm_ceval as a wrapper for backwards
	compatibility.  The same is done for the deval/scm_deval pair of
	functions.

	* eval.c (CEVAL, SCM_CEVAL): Renamed SCM_CEVAL to CEVAL
	throughout.  Defined CEVAL to ceval or deval, based on compilation
	phase.

	* eval.c (SCM_XEVAL, SCM_XEVALCAR): Dispatch on scm_debug_mode_p
	to ceval and deval instead of calling *scm_ceval_ptr.

	* eval.c (dispatching_eval): New deprecated static function.

	* eval.c (scm_ceval_ptr): Initialized to dispatching_eval in order
	to emulate its old behaviour as closely as possible.


	Change the evaluator such that only expressions for which pair? is
	true are passed to CEVAL, and such that all other expressions are
	evaluated outside of CEVAL:

	* eval.c (EVAL): New, provided in analogy to EVALCAR.  Evaluate an
	expression that is assumed to be memoized already.  All but
	expressions of the form '(<form> <form> ...)' are evaluated inline
	without calling an evaluator.

	* eval.c (SCM_XEVAL, SCM_XEVALCAR, EVALCAR): Evaluate all but
	expressions of the form '(<form> <form> ...)' inline without
	calling an evaluator.

	* eval.c (scm_i_eval_x, scm_i_eval, scm_ceval, scm_deval): Handle
	the special case of unmemoized symbols passed on the top level.

	* eval.c (CEVAL): Change calls to CEVAL to EVAL, except where it
	is known that the expression passed to CEVAL is of the form
	'(<form> <form> ...)'.  Remove handling of the tc7-objects, since
	now it is known that the input expression of CEVAL is a pair.
2004-03-29 19:59:43 +00:00
Dirk Herrmann
5fb6438380 * eval.c (is_self_quoting_p): New static function.
(scm_m_quote): Use is_self_quoting_p.

	(copy_tree): Corrected typo in comment.
2004-03-29 08:24:57 +00:00