mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-24 12:20:20 +02:00
Merge branch 'syncase-in-boot-9'
Conflicts: module/Makefile.am
This commit is contained in:
commit
938d46a35d
92 changed files with 4522 additions and 3330 deletions
|
@ -2140,6 +2140,25 @@ unmemoize_at_call_with_values (const SCM expr, const SCM env)
|
|||
unmemoize_exprs (SCM_CDR (expr), env));
|
||||
}
|
||||
|
||||
SCM_SYNTAX (s_eval_when, "eval-when", scm_makmmacro, scm_m_eval_when);
|
||||
SCM_GLOBAL_SYMBOL (scm_sym_eval_when, s_eval_when);
|
||||
SCM_SYMBOL (sym_eval, "eval");
|
||||
SCM_SYMBOL (sym_load, "load");
|
||||
|
||||
|
||||
SCM
|
||||
scm_m_eval_when (SCM expr, SCM env SCM_UNUSED)
|
||||
{
|
||||
ASSERT_SYNTAX (scm_ilength (expr) >= 3, s_bad_expression, expr);
|
||||
ASSERT_SYNTAX (scm_ilength (scm_cadr (expr)) > 0, s_bad_expression, expr);
|
||||
|
||||
if (scm_is_true (scm_memq (sym_eval, scm_cadr (expr)))
|
||||
|| scm_is_true (scm_memq (sym_load, scm_cadr (expr))))
|
||||
return scm_cons (SCM_IM_BEGIN, scm_cddr (expr));
|
||||
|
||||
return scm_list_1 (SCM_IM_BEGIN);
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
/* See futures.h for a comment why futures are not enabled.
|
||||
|
|
|
@ -100,6 +100,7 @@ SCM_API SCM scm_sym_atapply;
|
|||
SCM_API SCM scm_sym_atcall_cc;
|
||||
SCM_API SCM scm_sym_at_call_with_values;
|
||||
SCM_API SCM scm_sym_delay;
|
||||
SCM_API SCM scm_sym_eval_when;
|
||||
SCM_API SCM scm_sym_arrow;
|
||||
SCM_API SCM scm_sym_else;
|
||||
SCM_API SCM scm_sym_apply;
|
||||
|
@ -146,6 +147,7 @@ SCM_API SCM scm_m_atslot_ref (SCM xorig, SCM env);
|
|||
SCM_API SCM scm_m_atslot_set_x (SCM xorig, SCM env);
|
||||
SCM_API SCM scm_m_atdispatch (SCM xorig, SCM env);
|
||||
SCM_API SCM scm_m_at_call_with_values (SCM xorig, SCM env);
|
||||
SCM_API SCM scm_m_eval_when (SCM xorig, SCM env);
|
||||
SCM_API int scm_badargsp (SCM formals, SCM args);
|
||||
SCM_API SCM scm_call_0 (SCM proc);
|
||||
SCM_API SCM scm_call_1 (SCM proc, SCM arg1);
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
|
@ -45,6 +21,7 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "_scm.h"
|
||||
#include "vm-bootstrap.h"
|
||||
#include "frames.h"
|
||||
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _SCM_FRAMES_H_
|
||||
#define _SCM_FRAMES_H_
|
||||
|
@ -97,7 +73,7 @@
|
|||
* Heap frames
|
||||
*/
|
||||
|
||||
extern scm_t_bits scm_tc16_vm_frame;
|
||||
SCM_API scm_t_bits scm_tc16_vm_frame;
|
||||
|
||||
struct scm_vm_frame
|
||||
{
|
||||
|
@ -118,24 +94,24 @@ struct scm_vm_frame
|
|||
#define SCM_VALIDATE_VM_FRAME(p,x) SCM_MAKE_VALIDATE (p, x, VM_FRAME_P)
|
||||
|
||||
/* FIXME rename scm_byte_t */
|
||||
extern SCM scm_c_make_vm_frame (SCM stack_holder, SCM *fp, SCM *sp,
|
||||
SCM_API SCM scm_c_make_vm_frame (SCM stack_holder, SCM *fp, SCM *sp,
|
||||
scm_byte_t *ip, scm_t_ptrdiff offset);
|
||||
extern SCM scm_vm_frame_p (SCM obj);
|
||||
extern SCM scm_vm_frame_program (SCM frame);
|
||||
extern SCM scm_vm_frame_arguments (SCM frame);
|
||||
extern SCM scm_vm_frame_source (SCM frame);
|
||||
extern SCM scm_vm_frame_local_ref (SCM frame, SCM index);
|
||||
extern SCM scm_vm_frame_local_set_x (SCM frame, SCM index, SCM val);
|
||||
extern SCM scm_vm_frame_return_address (SCM frame);
|
||||
extern SCM scm_vm_frame_mv_return_address (SCM frame);
|
||||
extern SCM scm_vm_frame_dynamic_link (SCM frame);
|
||||
extern SCM scm_vm_frame_external_link (SCM frame);
|
||||
extern SCM scm_vm_frame_stack (SCM frame);
|
||||
SCM_API SCM scm_vm_frame_p (SCM obj);
|
||||
SCM_API SCM scm_vm_frame_program (SCM frame);
|
||||
SCM_API SCM scm_vm_frame_arguments (SCM frame);
|
||||
SCM_API SCM scm_vm_frame_source (SCM frame);
|
||||
SCM_API SCM scm_vm_frame_local_ref (SCM frame, SCM index);
|
||||
SCM_API SCM scm_vm_frame_local_set_x (SCM frame, SCM index, SCM val);
|
||||
SCM_API SCM scm_vm_frame_return_address (SCM frame);
|
||||
SCM_API SCM scm_vm_frame_mv_return_address (SCM frame);
|
||||
SCM_API SCM scm_vm_frame_dynamic_link (SCM frame);
|
||||
SCM_API SCM scm_vm_frame_external_link (SCM frame);
|
||||
SCM_API SCM scm_vm_frame_stack (SCM frame);
|
||||
|
||||
extern SCM scm_c_vm_frame_prev (SCM frame);
|
||||
SCM_API SCM scm_c_vm_frame_prev (SCM frame);
|
||||
|
||||
extern void scm_bootstrap_frames (void);
|
||||
extern void scm_init_frames (void);
|
||||
SCM_INTERNAL void scm_bootstrap_frames (void);
|
||||
SCM_INTERNAL void scm_init_frames (void);
|
||||
|
||||
#endif /* _SCM_FRAMES_H_ */
|
||||
|
||||
|
|
|
@ -1,49 +1,27 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "_scm.h"
|
||||
#include "vm-bootstrap.h"
|
||||
#include "instructions.h"
|
||||
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _SCM_INSTRUCTIONS_H_
|
||||
#define _SCM_INSTRUCTIONS_H_
|
||||
|
@ -57,16 +33,16 @@ enum scm_opcode {
|
|||
scm_op_last = SCM_VM_NUM_INSTRUCTIONS
|
||||
};
|
||||
|
||||
extern SCM scm_instruction_list (void);
|
||||
extern SCM scm_instruction_p (SCM obj);
|
||||
extern SCM scm_instruction_length (SCM inst);
|
||||
extern SCM scm_instruction_pops (SCM inst);
|
||||
extern SCM scm_instruction_pushes (SCM inst);
|
||||
extern SCM scm_instruction_to_opcode (SCM inst);
|
||||
extern SCM scm_opcode_to_instruction (SCM op);
|
||||
SCM_API SCM scm_instruction_list (void);
|
||||
SCM_API SCM scm_instruction_p (SCM obj);
|
||||
SCM_API SCM scm_instruction_length (SCM inst);
|
||||
SCM_API SCM scm_instruction_pops (SCM inst);
|
||||
SCM_API SCM scm_instruction_pushes (SCM inst);
|
||||
SCM_API SCM scm_instruction_to_opcode (SCM inst);
|
||||
SCM_API SCM scm_opcode_to_instruction (SCM op);
|
||||
|
||||
extern void scm_bootstrap_instructions (void);
|
||||
extern void scm_init_instructions (void);
|
||||
SCM_INTERNAL void scm_bootstrap_instructions (void);
|
||||
SCM_INTERNAL void scm_init_instructions (void);
|
||||
|
||||
#endif /* _SCM_INSTRUCTIONS_H_ */
|
||||
|
||||
|
|
|
@ -48,10 +48,13 @@ macro_print (SCM macro, SCM port, scm_print_state *pstate)
|
|||
|| scm_is_false (scm_printer_apply (SCM_PRINT_CLOSURE,
|
||||
macro, port, pstate)))
|
||||
{
|
||||
scm_puts ("#<", port);
|
||||
|
||||
if (SCM_MACRO_TYPE (macro) < 4 && SCM_MACRO_IS_EXTENDED (macro))
|
||||
scm_puts ("extended-", port);
|
||||
|
||||
if (!SCM_CLOSUREP (code) && !SCM_PROGRAM_P (code))
|
||||
scm_puts ("#<primitive-", port);
|
||||
else
|
||||
scm_puts ("#<", port);
|
||||
scm_puts ("primitive-", port);
|
||||
|
||||
if (SCM_MACRO_TYPE (macro) == 0)
|
||||
scm_puts ("syntax", port);
|
||||
|
@ -63,6 +66,8 @@ macro_print (SCM macro, SCM port, scm_print_state *pstate)
|
|||
scm_puts ("macro!", port);
|
||||
if (SCM_MACRO_TYPE (macro) == 3)
|
||||
scm_puts ("builtin-macro!", port);
|
||||
if (SCM_MACRO_TYPE (macro) == 4)
|
||||
scm_puts ("syncase-macro", port);
|
||||
|
||||
scm_putc (' ', port);
|
||||
scm_iprin1 (scm_macro_name (macro), port, pstate);
|
||||
|
@ -77,12 +82,30 @@ macro_print (SCM macro, SCM port, scm_print_state *pstate)
|
|||
scm_iprin1 (src, port, pstate);
|
||||
}
|
||||
|
||||
if (SCM_MACRO_IS_EXTENDED (macro))
|
||||
{
|
||||
scm_putc (' ', port);
|
||||
scm_write (SCM_SMOB_OBJECT_2 (macro), port);
|
||||
scm_putc (' ', port);
|
||||
scm_write (SCM_SMOB_OBJECT_3 (macro), port);
|
||||
}
|
||||
|
||||
scm_putc ('>', port);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static SCM
|
||||
macro_mark (SCM macro)
|
||||
{
|
||||
if (SCM_MACRO_IS_EXTENDED (macro))
|
||||
{ scm_gc_mark (SCM_SMOB_OBJECT_2 (macro));
|
||||
scm_gc_mark (SCM_SMOB_OBJECT_3 (macro));
|
||||
}
|
||||
return SCM_SMOB_OBJECT (macro);
|
||||
}
|
||||
|
||||
static SCM
|
||||
makmac (SCM code, scm_t_bits flags)
|
||||
{
|
||||
|
@ -164,11 +187,45 @@ SCM_DEFINE (scm_makmacro, "procedure->macro", 1, 0, 0,
|
|||
|
||||
#endif
|
||||
|
||||
SCM_DEFINE (scm_make_syncase_macro, "make-syncase-macro", 2, 0, 0,
|
||||
(SCM type, SCM binding),
|
||||
"Return a @dfn{macro} that requires expansion by syntax-case.\n"
|
||||
"While users should not call this function, it is useful to know\n"
|
||||
"that syntax-case macros are represented as Guile primitive macros.")
|
||||
#define FUNC_NAME s_scm_make_syncase_macro
|
||||
{
|
||||
SCM z;
|
||||
SCM_VALIDATE_SYMBOL (1, type);
|
||||
|
||||
SCM_NEWSMOB3 (z, scm_tc16_macro, SCM_UNPACK (binding), SCM_UNPACK (type),
|
||||
SCM_UNPACK (binding));
|
||||
SCM_SET_SMOB_FLAGS (z, 4 | SCM_F_MACRO_EXTENDED);
|
||||
return z;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM_DEFINE (scm_make_extended_syncase_macro, "make-extended-syncase-macro", 3, 0, 0,
|
||||
(SCM m, SCM type, SCM binding),
|
||||
"Extend a core macro @var{m} with a syntax-case binding.")
|
||||
#define FUNC_NAME s_scm_make_extended_syncase_macro
|
||||
{
|
||||
SCM z;
|
||||
SCM_VALIDATE_SMOB (1, m, macro);
|
||||
SCM_VALIDATE_SYMBOL (2, type);
|
||||
|
||||
SCM_NEWSMOB3 (z, scm_tc16_macro, SCM_SMOB_DATA (m), SCM_UNPACK (type),
|
||||
SCM_UNPACK (binding));
|
||||
SCM_SET_SMOB_FLAGS (z, SCM_SMOB_FLAGS (m) | SCM_F_MACRO_EXTENDED);
|
||||
return z;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
|
||||
|
||||
SCM_DEFINE (scm_macro_p, "macro?", 1, 0, 0,
|
||||
(SCM obj),
|
||||
"Return @code{#t} if @var{obj} is a regular macro, a memoizing macro or a\n"
|
||||
"syntax transformer.")
|
||||
"Return @code{#t} if @var{obj} is a regular macro, a memoizing macro, a\n"
|
||||
"syntax transformer, or a syntax-case macro.")
|
||||
#define FUNC_NAME s_scm_macro_p
|
||||
{
|
||||
return scm_from_bool (SCM_SMOB_PREDICATE (scm_tc16_macro, obj));
|
||||
|
@ -182,14 +239,15 @@ SCM_SYMBOL (scm_sym_macro, "macro");
|
|||
#endif
|
||||
SCM_SYMBOL (scm_sym_mmacro, "macro!");
|
||||
SCM_SYMBOL (scm_sym_bimacro, "builtin-macro!");
|
||||
SCM_SYMBOL (scm_sym_syncase_macro, "syncase-macro");
|
||||
|
||||
SCM_DEFINE (scm_macro_type, "macro-type", 1, 0, 0,
|
||||
(SCM m),
|
||||
"Return one of the symbols @code{syntax}, @code{macro} or\n"
|
||||
"@code{macro!}, depending on whether @var{m} is a syntax\n"
|
||||
"transformer, a regular macro, or a memoizing macro,\n"
|
||||
"respectively. If @var{m} is not a macro, @code{#f} is\n"
|
||||
"returned.")
|
||||
"Return one of the symbols @code{syntax}, @code{macro},\n"
|
||||
"@code{macro!}, or @code{syntax-case}, depending on whether\n"
|
||||
"@var{m} is a syntax transformer, a regular macro, a memoizing\n"
|
||||
"macro, or a syntax-case macro, respectively. If @var{m} is\n"
|
||||
"not a macro, @code{#f} is returned.")
|
||||
#define FUNC_NAME s_scm_macro_type
|
||||
{
|
||||
if (!SCM_SMOB_PREDICATE (scm_tc16_macro, m))
|
||||
|
@ -202,6 +260,7 @@ SCM_DEFINE (scm_macro_type, "macro-type", 1, 0, 0,
|
|||
#endif
|
||||
case 2: return scm_sym_mmacro;
|
||||
case 3: return scm_sym_bimacro;
|
||||
case 4: return scm_sym_syncase_macro;
|
||||
default: scm_wrong_type_arg (FUNC_NAME, 1, m);
|
||||
}
|
||||
}
|
||||
|
@ -214,7 +273,9 @@ SCM_DEFINE (scm_macro_name, "macro-name", 1, 0, 0,
|
|||
#define FUNC_NAME s_scm_macro_name
|
||||
{
|
||||
SCM_VALIDATE_SMOB (1, m, macro);
|
||||
return scm_procedure_name (SCM_PACK (SCM_SMOB_DATA (m)));
|
||||
if (scm_is_true (scm_procedure_p (SCM_SMOB_OBJECT (m))))
|
||||
return scm_procedure_name (SCM_SMOB_OBJECT (m));
|
||||
return SCM_BOOL_F;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
|
@ -236,6 +297,34 @@ SCM_DEFINE (scm_macro_transformer, "macro-transformer", 1, 0, 0,
|
|||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM_DEFINE (scm_syncase_macro_type, "syncase-macro-type", 1, 0, 0,
|
||||
(SCM m),
|
||||
"Return the type of the macro @var{m}.")
|
||||
#define FUNC_NAME s_scm_syncase_macro_type
|
||||
{
|
||||
SCM_VALIDATE_SMOB (1, m, macro);
|
||||
|
||||
if (SCM_MACRO_IS_EXTENDED (m))
|
||||
return SCM_SMOB_OBJECT_2 (m);
|
||||
else
|
||||
return SCM_BOOL_F;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM_DEFINE (scm_syncase_macro_binding, "syncase-macro-binding", 1, 0, 0,
|
||||
(SCM m),
|
||||
"Return the binding of the macro @var{m}.")
|
||||
#define FUNC_NAME s_scm_syncase_macro_binding
|
||||
{
|
||||
SCM_VALIDATE_SMOB (1, m, macro);
|
||||
|
||||
if (SCM_MACRO_IS_EXTENDED (m))
|
||||
return SCM_SMOB_OBJECT_3 (m);
|
||||
else
|
||||
return SCM_BOOL_F;
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM
|
||||
scm_make_synt (const char *name, SCM (*macroizer) (), SCM (*fcn)() )
|
||||
{
|
||||
|
@ -249,7 +338,7 @@ void
|
|||
scm_init_macros ()
|
||||
{
|
||||
scm_tc16_macro = scm_make_smob_type ("macro", 0);
|
||||
scm_set_smob_mark (scm_tc16_macro, scm_markcdr);
|
||||
scm_set_smob_mark (scm_tc16_macro, macro_mark);
|
||||
scm_set_smob_print (scm_tc16_macro, macro_print);
|
||||
#include "libguile/macros.x"
|
||||
}
|
||||
|
|
|
@ -29,9 +29,15 @@
|
|||
#define SCM_ASSYNT(_cond, _msg, _subr) \
|
||||
if (!(_cond)) scm_misc_error (_subr, _msg, SCM_EOL);
|
||||
|
||||
#define SCM_MACRO_TYPE_BITS (3)
|
||||
#define SCM_MACRO_TYPE_MASK ((1<<SCM_MACRO_TYPE_BITS)-1)
|
||||
#define SCM_F_MACRO_EXTENDED (1<<SCM_MACRO_TYPE_BITS)
|
||||
|
||||
#define SCM_MACROP(x) SCM_SMOB_PREDICATE (scm_tc16_macro, (x))
|
||||
#define SCM_MACRO_TYPE(m) SCM_SMOB_FLAGS (m)
|
||||
#define SCM_MACRO_TYPE(m) (SCM_SMOB_FLAGS (m) & SCM_MACRO_TYPE_MASK)
|
||||
#define SCM_MACRO_IS_EXTENDED(m) (SCM_SMOB_FLAGS (m) & SCM_F_MACRO_EXTENDED)
|
||||
#define SCM_BUILTIN_MACRO_P(x) (SCM_MACROP (x) && SCM_MACRO_TYPE (x) == 3)
|
||||
#define SCM_SYNCASE_MACRO_P(x) (SCM_MACROP (x) && SCM_MACRO_TYPE (x) == 4)
|
||||
#define SCM_MACRO_CODE(m) SCM_SMOB_OBJECT (m)
|
||||
|
||||
SCM_API scm_t_bits scm_tc16_macro;
|
||||
|
@ -39,10 +45,15 @@ SCM_API scm_t_bits scm_tc16_macro;
|
|||
SCM_INTERNAL SCM scm_i_makbimacro (SCM code);
|
||||
SCM_API SCM scm_makmmacro (SCM code);
|
||||
SCM_API SCM scm_makacro (SCM code);
|
||||
SCM_API SCM scm_make_syncase_macro (SCM type, SCM binding);
|
||||
SCM_API SCM scm_make_extended_syncase_macro (SCM builtin, SCM type,
|
||||
SCM binding);
|
||||
SCM_API SCM scm_macro_p (SCM obj);
|
||||
SCM_API SCM scm_macro_type (SCM m);
|
||||
SCM_API SCM scm_macro_name (SCM m);
|
||||
SCM_API SCM scm_macro_transformer (SCM m);
|
||||
SCM_API SCM scm_syncase_macro_type (SCM m);
|
||||
SCM_API SCM scm_syncase_macro_binding (SCM m);
|
||||
SCM_API SCM scm_make_synt (const char *name,
|
||||
SCM (*macroizer) (SCM),
|
||||
SCM (*fcn) ());
|
||||
|
|
|
@ -412,13 +412,13 @@ SCM_DEFINE (scm_module_local_variable, "module-local-variable", 2, 0, 0,
|
|||
|
||||
register SCM b;
|
||||
|
||||
/* SCM_MODULE_TAG is not initialized yet when `boot-9.scm' is being
|
||||
evaluated. */
|
||||
if (scm_module_system_booted_p)
|
||||
SCM_VALIDATE_MODULE (1, module);
|
||||
|
||||
SCM_VALIDATE_SYMBOL (2, sym);
|
||||
|
||||
if (scm_is_false (module))
|
||||
return scm_hashq_ref (scm_pre_modules_obarray, sym, SCM_UNDEFINED);
|
||||
|
||||
/* 1. Check module obarray */
|
||||
b = scm_hashq_ref (SCM_MODULE_OBARRAY (module), sym, SCM_UNDEFINED);
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
|
@ -51,6 +27,7 @@
|
|||
#include <sys/types.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "_scm.h"
|
||||
#include "vm-bootstrap.h"
|
||||
#include "programs.h"
|
||||
#include "objcodes.h"
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
* *
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _SCM_OBJCODES_H_
|
||||
#define _SCM_OBJCODES_H_
|
||||
|
@ -60,7 +36,7 @@ struct scm_objcode {
|
|||
#define SCM_F_OBJCODE_IS_U8VECTOR (1<<1)
|
||||
#define SCM_F_OBJCODE_IS_SLICE (1<<2)
|
||||
|
||||
extern scm_t_bits scm_tc16_objcode;
|
||||
SCM_API scm_t_bits scm_tc16_objcode;
|
||||
|
||||
#define SCM_OBJCODE_P(x) (SCM_SMOB_PREDICATE (scm_tc16_objcode, x))
|
||||
#define SCM_OBJCODE_DATA(x) ((struct scm_objcode *) SCM_SMOB_DATA (x))
|
||||
|
@ -80,15 +56,15 @@ extern scm_t_bits scm_tc16_objcode;
|
|||
#define SCM_OBJCODE_IS_SLICE(x) (SCM_SMOB_FLAGS (x) & SCM_F_OBJCODE_IS_SLICE)
|
||||
|
||||
SCM scm_c_make_objcode_slice (SCM parent, scm_t_uint8 *ptr);
|
||||
extern SCM scm_load_objcode (SCM file);
|
||||
extern SCM scm_objcode_p (SCM obj);
|
||||
extern SCM scm_objcode_meta (SCM objcode);
|
||||
extern SCM scm_bytecode_to_objcode (SCM bytecode);
|
||||
extern SCM scm_objcode_to_bytecode (SCM objcode);
|
||||
extern SCM scm_write_objcode (SCM objcode, SCM port);
|
||||
SCM_API SCM scm_load_objcode (SCM file);
|
||||
SCM_API SCM scm_objcode_p (SCM obj);
|
||||
SCM_API SCM scm_objcode_meta (SCM objcode);
|
||||
SCM_API SCM scm_bytecode_to_objcode (SCM bytecode);
|
||||
SCM_API SCM scm_objcode_to_bytecode (SCM objcode);
|
||||
SCM_API SCM scm_write_objcode (SCM objcode, SCM port);
|
||||
|
||||
extern void scm_bootstrap_objcodes (void);
|
||||
extern void scm_init_objcodes (void);
|
||||
SCM_INTERNAL void scm_bootstrap_objcodes (void);
|
||||
SCM_INTERNAL void scm_init_objcodes (void);
|
||||
|
||||
#endif /* _SCM_OBJCODES_H_ */
|
||||
|
||||
|
|
|
@ -1,49 +1,26 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include "_scm.h"
|
||||
#include "vm-bootstrap.h"
|
||||
#include "instructions.h"
|
||||
#include "modules.h"
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _SCM_PROGRAMS_H_
|
||||
#define _SCM_PROGRAMS_H_
|
||||
|
@ -51,7 +27,7 @@
|
|||
|
||||
typedef unsigned char scm_byte_t;
|
||||
|
||||
extern scm_t_bits scm_tc16_program;
|
||||
SCM_API scm_t_bits scm_tc16_program;
|
||||
|
||||
#define SCM_F_PROGRAM_IS_BOOT (1<<0)
|
||||
|
||||
|
@ -63,27 +39,27 @@ extern scm_t_bits scm_tc16_program;
|
|||
#define SCM_VALIDATE_PROGRAM(p,x) SCM_MAKE_VALIDATE (p, x, PROGRAM_P)
|
||||
#define SCM_PROGRAM_IS_BOOT(x) (SCM_SMOB_FLAGS (x) & SCM_F_PROGRAM_IS_BOOT)
|
||||
|
||||
extern SCM scm_make_program (SCM objcode, SCM objtable, SCM externals);
|
||||
SCM_API SCM scm_make_program (SCM objcode, SCM objtable, SCM externals);
|
||||
|
||||
extern SCM scm_program_p (SCM obj);
|
||||
extern SCM scm_program_base (SCM program);
|
||||
extern SCM scm_program_arity (SCM program);
|
||||
extern SCM scm_program_meta (SCM program);
|
||||
extern SCM scm_program_bindings (SCM program);
|
||||
extern SCM scm_program_sources (SCM program);
|
||||
extern SCM scm_program_source (SCM program, SCM ip);
|
||||
extern SCM scm_program_properties (SCM program);
|
||||
extern SCM scm_program_name (SCM program);
|
||||
extern SCM scm_program_objects (SCM program);
|
||||
extern SCM scm_program_module (SCM program);
|
||||
extern SCM scm_program_external (SCM program);
|
||||
extern SCM scm_program_external_set_x (SCM program, SCM external);
|
||||
extern SCM scm_program_objcode (SCM program);
|
||||
SCM_API SCM scm_program_p (SCM obj);
|
||||
SCM_API SCM scm_program_base (SCM program);
|
||||
SCM_API SCM scm_program_arity (SCM program);
|
||||
SCM_API SCM scm_program_meta (SCM program);
|
||||
SCM_API SCM scm_program_bindings (SCM program);
|
||||
SCM_API SCM scm_program_sources (SCM program);
|
||||
SCM_API SCM scm_program_source (SCM program, SCM ip);
|
||||
SCM_API SCM scm_program_properties (SCM program);
|
||||
SCM_API SCM scm_program_name (SCM program);
|
||||
SCM_API SCM scm_program_objects (SCM program);
|
||||
SCM_API SCM scm_program_module (SCM program);
|
||||
SCM_API SCM scm_program_external (SCM program);
|
||||
SCM_API SCM scm_program_external_set_x (SCM program, SCM external);
|
||||
SCM_API SCM scm_program_objcode (SCM program);
|
||||
|
||||
extern SCM scm_c_program_source (SCM program, size_t ip);
|
||||
SCM_API SCM scm_c_program_source (SCM program, size_t ip);
|
||||
|
||||
extern void scm_bootstrap_programs (void);
|
||||
extern void scm_init_programs (void);
|
||||
SCM_INTERNAL void scm_bootstrap_programs (void);
|
||||
SCM_INTERNAL void scm_init_programs (void);
|
||||
|
||||
#endif /* _SCM_PROGRAMS_H_ */
|
||||
|
||||
|
|
|
@ -182,6 +182,7 @@ static SCM *scm_read_hash_procedures;
|
|||
|
||||
/* Read an SCSH block comment. */
|
||||
static inline SCM scm_read_scsh_block_comment (int chr, SCM port);
|
||||
static SCM scm_read_commented_expression (int chr, SCM port);
|
||||
|
||||
/* Read from PORT until a delimiter (e.g., a whitespace) is read. Return
|
||||
zero if the whole token fits in BUF, non-zero otherwise. */
|
||||
|
@ -257,6 +258,9 @@ flush_ws (SCM port, const char *eoferr)
|
|||
case '!':
|
||||
scm_read_scsh_block_comment (c, port);
|
||||
break;
|
||||
case ';':
|
||||
scm_read_commented_expression (c, port);
|
||||
break;
|
||||
default:
|
||||
scm_ungetc (c, port);
|
||||
return '#';
|
||||
|
@ -700,6 +704,65 @@ scm_read_quote (int chr, SCM port)
|
|||
return p;
|
||||
}
|
||||
|
||||
SCM_SYMBOL (sym_syntax, "syntax");
|
||||
SCM_SYMBOL (sym_quasisyntax, "quasisyntax");
|
||||
SCM_SYMBOL (sym_unsyntax, "unsyntax");
|
||||
SCM_SYMBOL (sym_unsyntax_splicing, "unsyntax-splicing");
|
||||
|
||||
static SCM
|
||||
scm_read_syntax (int chr, SCM port)
|
||||
{
|
||||
SCM p;
|
||||
long line = SCM_LINUM (port);
|
||||
int column = SCM_COL (port) - 1;
|
||||
|
||||
switch (chr)
|
||||
{
|
||||
case '`':
|
||||
p = sym_quasisyntax;
|
||||
break;
|
||||
|
||||
case '\'':
|
||||
p = sym_syntax;
|
||||
break;
|
||||
|
||||
case ',':
|
||||
{
|
||||
int c;
|
||||
|
||||
c = scm_getc (port);
|
||||
if ('@' == c)
|
||||
p = sym_unsyntax_splicing;
|
||||
else
|
||||
{
|
||||
scm_ungetc (c, port);
|
||||
p = sym_unsyntax;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
fprintf (stderr, "%s: unhandled syntax character (%i)\n",
|
||||
"scm_read_syntax", chr);
|
||||
abort ();
|
||||
}
|
||||
|
||||
p = scm_cons2 (p, scm_read_expression (port), SCM_EOL);
|
||||
if (SCM_RECORD_POSITIONS_P)
|
||||
scm_whash_insert (scm_source_whash, p,
|
||||
scm_make_srcprops (line, column,
|
||||
SCM_FILENAME (port),
|
||||
SCM_COPY_SOURCE_P
|
||||
? (scm_cons2 (SCM_CAR (p),
|
||||
SCM_CAR (SCM_CDR (p)),
|
||||
SCM_EOL))
|
||||
: SCM_UNDEFINED,
|
||||
SCM_EOL));
|
||||
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
static inline SCM
|
||||
scm_read_semicolon_comment (int chr, SCM port)
|
||||
{
|
||||
|
@ -862,6 +925,20 @@ scm_read_scsh_block_comment (int chr, SCM port)
|
|||
return SCM_UNSPECIFIED;
|
||||
}
|
||||
|
||||
static SCM
|
||||
scm_read_commented_expression (int chr, SCM port)
|
||||
{
|
||||
int c;
|
||||
|
||||
c = flush_ws (port, (char *) NULL);
|
||||
if (EOF == c)
|
||||
scm_i_input_error ("read_commented_expression", port,
|
||||
"no expression after #; comment", SCM_EOL);
|
||||
scm_ungetc (c, port);
|
||||
scm_read_expression (port);
|
||||
return SCM_UNSPECIFIED;
|
||||
}
|
||||
|
||||
static SCM
|
||||
scm_read_extended_symbol (int chr, SCM port)
|
||||
{
|
||||
|
@ -1023,6 +1100,12 @@ scm_read_sharp (int chr, SCM port)
|
|||
return (scm_read_extended_symbol (chr, port));
|
||||
case '!':
|
||||
return (scm_read_scsh_block_comment (chr, port));
|
||||
case ';':
|
||||
return (scm_read_commented_expression (chr, port));
|
||||
case '`':
|
||||
case '\'':
|
||||
case ',':
|
||||
return (scm_read_syntax (chr, port));
|
||||
default:
|
||||
result = scm_read_sharp_extension (chr, port);
|
||||
if (scm_is_eq (result, SCM_UNSPECIFIED))
|
||||
|
|
|
@ -1,48 +1,24 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _SCM_VM_BOOTSTRAP_H_
|
||||
#define _SCM_VM_BOOTSTRAP_H_
|
||||
|
||||
extern void scm_bootstrap_vm (void);
|
||||
SCM_INTERNAL void scm_bootstrap_vm (void);
|
||||
|
||||
#endif /* _SCM_VM_BOOTSTRAP_H_ */
|
||||
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* This file is included in vm.c multiple times */
|
||||
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* This file is included in vm_engine.c */
|
||||
|
||||
|
@ -147,8 +123,12 @@
|
|||
#ifdef VM_ENABLE_PARANOID_ASSERTIONS
|
||||
#define CHECK_IP() \
|
||||
do { if (ip < bp->base || ip - bp->base > bp->len) abort (); } while (0)
|
||||
#define ASSERT_BOUND(x) \
|
||||
do { if ((x) == SCM_UNDEFINED) { SYNC_REGISTER (); abort(); } \
|
||||
} while (0)
|
||||
#else
|
||||
#define CHECK_IP()
|
||||
#define ASSERT_BOUND(x)
|
||||
#endif
|
||||
|
||||
/* Get a local copy of the program's "object table" (i.e. the vector of
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef VM_LABEL
|
||||
#define VM_LABEL(tag) l_##tag
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* This file is included in vm_engine.c */
|
||||
|
||||
|
|
|
@ -230,6 +230,7 @@ VM_DEFINE_INSTRUCTION (21, object_ref, "object-ref", 1, 0, 1)
|
|||
VM_DEFINE_INSTRUCTION (22, local_ref, "local-ref", 1, 0, 1)
|
||||
{
|
||||
PUSH (LOCAL_REF (FETCH ()));
|
||||
ASSERT_BOUND (*sp);
|
||||
NEXT;
|
||||
}
|
||||
|
||||
|
@ -244,6 +245,7 @@ VM_DEFINE_INSTRUCTION (23, external_ref, "external-ref", 1, 0, 1)
|
|||
}
|
||||
CHECK_EXTERNAL(e);
|
||||
PUSH (SCM_CAR (e));
|
||||
ASSERT_BOUND (*sp);
|
||||
NEXT;
|
||||
}
|
||||
|
||||
|
@ -408,12 +410,6 @@ VM_DEFINE_INSTRUCTION (29, toplevel_set, "toplevel-set", 1, 1, 0)
|
|||
NEXT;
|
||||
}
|
||||
|
||||
VM_DEFINE_INSTRUCTION (30, externals, "externals", 0, 0, 1)
|
||||
{
|
||||
PUSH (external);
|
||||
NEXT;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* branch and jump
|
||||
|
|
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
|
@ -46,6 +22,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <alloca.h>
|
||||
#include <string.h>
|
||||
#include "_scm.h"
|
||||
#include "vm-bootstrap.h"
|
||||
#include "frames.h"
|
||||
#include "instructions.h"
|
||||
|
|
108
libguile/vm.h
108
libguile/vm.h
|
@ -1,43 +1,19 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA
|
||||
*
|
||||
* As a special exception, the Free Software Foundation gives permission
|
||||
* for additional uses of the text contained in its release of GUILE.
|
||||
*
|
||||
* The exception is that, if you link the GUILE library with other files
|
||||
* to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the GUILE library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the
|
||||
* Free Software Foundation under the name GUILE. If you copy
|
||||
* code from other Free Software Foundation releases into a copy of
|
||||
* GUILE, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for GUILE, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice. */
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _SCM_VM_H_
|
||||
#define _SCM_VM_H_
|
||||
|
@ -78,37 +54,37 @@ struct scm_vm {
|
|||
SCM trace_frame; /* a frame being traced */
|
||||
};
|
||||
|
||||
extern SCM scm_the_vm_fluid;
|
||||
SCM_API SCM scm_the_vm_fluid;
|
||||
|
||||
#define SCM_VM_P(x) SCM_SMOB_PREDICATE (scm_tc16_vm, x)
|
||||
#define SCM_VM_DATA(vm) ((struct scm_vm *) SCM_SMOB_DATA (vm))
|
||||
#define SCM_VALIDATE_VM(pos,x) SCM_MAKE_VALIDATE (pos, x, VM_P)
|
||||
|
||||
extern SCM scm_the_vm ();
|
||||
extern SCM scm_make_vm (void);
|
||||
extern SCM scm_vm_apply (SCM vm, SCM program, SCM args);
|
||||
extern SCM scm_c_vm_run (SCM vm, SCM program, SCM *argv, int nargs);
|
||||
extern SCM scm_vm_option_ref (SCM vm, SCM key);
|
||||
extern SCM scm_vm_option_set_x (SCM vm, SCM key, SCM val);
|
||||
SCM_API SCM scm_the_vm ();
|
||||
SCM_API SCM scm_make_vm (void);
|
||||
SCM_API SCM scm_vm_apply (SCM vm, SCM program, SCM args);
|
||||
SCM_API SCM scm_c_vm_run (SCM vm, SCM program, SCM *argv, int nargs);
|
||||
SCM_API SCM scm_vm_option_ref (SCM vm, SCM key);
|
||||
SCM_API SCM scm_vm_option_set_x (SCM vm, SCM key, SCM val);
|
||||
|
||||
extern SCM scm_vm_version (void);
|
||||
extern SCM scm_the_vm (void);
|
||||
extern SCM scm_vm_p (SCM obj);
|
||||
extern SCM scm_vm_ip (SCM vm);
|
||||
extern SCM scm_vm_sp (SCM vm);
|
||||
extern SCM scm_vm_fp (SCM vm);
|
||||
extern SCM scm_vm_boot_hook (SCM vm);
|
||||
extern SCM scm_vm_halt_hook (SCM vm);
|
||||
extern SCM scm_vm_next_hook (SCM vm);
|
||||
extern SCM scm_vm_break_hook (SCM vm);
|
||||
extern SCM scm_vm_enter_hook (SCM vm);
|
||||
extern SCM scm_vm_apply_hook (SCM vm);
|
||||
extern SCM scm_vm_exit_hook (SCM vm);
|
||||
extern SCM scm_vm_return_hook (SCM vm);
|
||||
extern SCM scm_vm_option (SCM vm, SCM key);
|
||||
extern SCM scm_set_vm_option_x (SCM vm, SCM key, SCM val);
|
||||
extern SCM scm_vm_stats (SCM vm);
|
||||
extern SCM scm_vm_trace_frame (SCM vm);
|
||||
SCM_API SCM scm_vm_version (void);
|
||||
SCM_API SCM scm_the_vm (void);
|
||||
SCM_API SCM scm_vm_p (SCM obj);
|
||||
SCM_API SCM scm_vm_ip (SCM vm);
|
||||
SCM_API SCM scm_vm_sp (SCM vm);
|
||||
SCM_API SCM scm_vm_fp (SCM vm);
|
||||
SCM_API SCM scm_vm_boot_hook (SCM vm);
|
||||
SCM_API SCM scm_vm_halt_hook (SCM vm);
|
||||
SCM_API SCM scm_vm_next_hook (SCM vm);
|
||||
SCM_API SCM scm_vm_break_hook (SCM vm);
|
||||
SCM_API SCM scm_vm_enter_hook (SCM vm);
|
||||
SCM_API SCM scm_vm_apply_hook (SCM vm);
|
||||
SCM_API SCM scm_vm_exit_hook (SCM vm);
|
||||
SCM_API SCM scm_vm_return_hook (SCM vm);
|
||||
SCM_API SCM scm_vm_option (SCM vm, SCM key);
|
||||
SCM_API SCM scm_set_vm_option_x (SCM vm, SCM key, SCM val);
|
||||
SCM_API SCM scm_vm_stats (SCM vm);
|
||||
SCM_API SCM scm_vm_trace_frame (SCM vm);
|
||||
|
||||
struct scm_vm_cont {
|
||||
scm_byte_t *ip;
|
||||
|
@ -119,16 +95,16 @@ struct scm_vm_cont {
|
|||
scm_t_ptrdiff reloc;
|
||||
};
|
||||
|
||||
extern scm_t_bits scm_tc16_vm_cont;
|
||||
SCM_API scm_t_bits scm_tc16_vm_cont;
|
||||
#define SCM_VM_CONT_P(OBJ) SCM_SMOB_PREDICATE (scm_tc16_vm_cont, OBJ)
|
||||
#define SCM_VM_CONT_DATA(CONT) ((struct scm_vm_cont *) SCM_CELL_WORD_1 (CONT))
|
||||
|
||||
extern SCM scm_vm_capture_continuations (void);
|
||||
extern void scm_vm_reinstate_continuations (SCM conts);
|
||||
SCM_API SCM scm_vm_capture_continuations (void);
|
||||
SCM_API void scm_vm_reinstate_continuations (SCM conts);
|
||||
|
||||
extern SCM scm_load_compiled_with_vm (SCM file);
|
||||
SCM_API SCM scm_load_compiled_with_vm (SCM file);
|
||||
|
||||
extern void scm_init_vm (void);
|
||||
SCM_INTERNAL void scm_init_vm (void);
|
||||
|
||||
#endif /* _SCM_VM_H_ */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue