Description: <short summary of the patch>
 TODO: Put a short summary on the line above and replace this paragraph
 with a longer explanation of this change. Complete the meta-information
 with other relevant fields (see below for details). To make it easier, the
 information below has been extracted from the changelog. Adjust it or drop
 it.
 .
 gcl (2.6.7+dfsga-5) unstable; urgency=high
 .
   * Bug fix: "FTBFS: cp: cannot stat
     &#39;debian/tmp/usr/share/info/gcl-si.info&#39;: No such file or
     directory", thanks to Lucas Nussbaum (Closes: #707490).
Author: Camm Maguire <camm@debian.org>
Bug-Debian: http://bugs.debian.org/707490

---
The information above should follow the Patch Tagging Guidelines, please
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
are templates for supplementary fields that you might want to add:

Origin: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: http://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: <YYYY-MM-DD>

--- gcl-2.6.7+dfsga.orig/h/protoize.h
+++ gcl-2.6.7+dfsga/h/protoize.h
@@ -467,8 +467,8 @@ typedef void (*funcvoid)(void);
 #include <unistd.h>
 /* sbrk.c:9:OF */ /*  extern void * sbrk (int n); */ /* (n) int n; */
 /* strcspn.c:3:OF */ /*  extern size_t strcspn (const char *s1, const char *s2); */ /* (s1, s2) char *s1; char *s2; */
-/* structure.c:59:OF */ extern object structure_ref (object x, object name, int i); /* (x, name, i) object x; object name; int i; */
-/* structure.c:107:OF */ extern object structure_set (object x, object name, int i, object v); /* (x, name, i, v) object x; object name; int i; object v; */
+/* structure.c:59:OF */ extern object structure_ref (object x, object name, fixnum i); /* (x, name, i) object x; object name; int i; */
+/* structure.c:107:OF */ extern object structure_set (object x, object name, fixnum i, object v); /* (x, name, i, v) object x; object name; int i; object v; */
 /* structure.c:164:OF */ extern object structure_to_list (object x); /* (x) object x; */
 /* structure.c:188:OF */ extern void siLmake_structure (void); /* () */
 /* structure.c:281:OF */ extern void siLstructure_set (void); /* () */
--- gcl-2.6.7+dfsga.orig/h/eval.h
+++ gcl-2.6.7+dfsga/h/eval.h
@@ -77,22 +77,11 @@ struct bind_temp {
 }
 
 
-#define MMcall(x)  \
-	ihs_check;  \
-	ihs_push(x);  \
-	(*(x)->cf.cf_self)();  \
-	ihs_pop()
-
-#define MMccall(x, env_top)  \
-	ihs_check;  \
-	ihs_push(x);  \
-	(*(x)->cc.cc_self)(env_top);  \
-	ihs_pop()
-
+#define MMcall(x) ({extern int Rset;int rset=Rset;if (!rset) {ihs_check;ihs_push(x);}(*(x)->cf.cf_self)();if (!rset) ihs_pop();})
+#define MMccall(x,env_top) ({extern int Rset;int rset=Rset;if (!rset) {ihs_check;ihs_push(x);}(*(x)->cc.cc_self)(env_top);if (!rset) ihs_pop();})
 
 #define MMcons(a,d)	make_cons((a),(d))
 
-
 #define MMcar(x)	(x)->c.c_car
 #define MMcdr(x)	(x)->c.c_cdr
 #define MMcaar(x)	(x)->c.c_car->c.c_car
--- gcl-2.6.7+dfsga.orig/lsp/makefile
+++ gcl-2.6.7+dfsga/lsp/makefile
@@ -9,7 +9,7 @@ PORTDIR	= ../unixport
 CAT=cat
 APPEND=../xbin/append
 
-OBJS	= gcl_arraylib.o gcl_assert.o gcl_defmacro.o gcl_defstruct.o \
+OBJS	= gcl_sharp.o gcl_arraylib.o gcl_assert.o gcl_defmacro.o gcl_defstruct.o \
 	  gcl_describe.o gcl_evalmacros.o \
 	  gcl_iolib.o gcl_listlib.o gcl_mislib.o gcl_module.o gcl_numlib.o \
 	  gcl_packlib.o gcl_predlib.o \
--- gcl-2.6.7+dfsga.orig/lsp/gcl_predlib.lsp
+++ gcl-2.6.7+dfsga/lsp/gcl_predlib.lsp
@@ -62,6 +62,7 @@
 
 
 ;;; Some DEFTYPE definitions.
+(deftype spice nil `(satisfies spice-p))
 (deftype fixnum ()
   `(integer ,most-negative-fixnum ,most-positive-fixnum))
 (deftype bit () '(integer 0 1))
--- /dev/null
+++ gcl-2.6.7+dfsga/lsp/gcl_sharp.lsp
@@ -0,0 +1,57 @@
+(in-package :si)
+
+(defstruct
+  context
+  (vec (make-array 0 :adjustable t :fill-pointer t) :type (vector t))
+  (hash nil :type (or null hash-table))
+  (spice (make-hash-table :test 'eq :rehash-size 2.0) :type hash-table))
+
+(defun get-context (i)
+  (declare (fixnum i))
+  (when *sharp-eq-context*
+    (let ((v (context-vec *sharp-eq-context*)))
+      (if (< i (length v)) (aref v i)
+	(let ((h (context-hash *sharp-eq-context*)))
+	  (when h (values (gethash i h))))))))
+
+(defun push-context (i)
+  (declare (fixnum i))
+  (unless *sharp-eq-context* (setq *sharp-eq-context* (make-context)))
+  (let* ((v (context-vec *sharp-eq-context*))(l (length v))(x (cons nil nil)))
+    (cond ((< i l) (error))
+	  ((= i l) (vector-push-extend x v (1+ l)) x)
+	  ((let ((h (context-hash *sharp-eq-context*)))
+	     (if h (when (gethash i h) (error)) 
+	       (setf (context-hash *sharp-eq-context*) (setq h (make-hash-table :test 'eql :rehash-size 2.0))))
+	     (setf (gethash i h) x))))))
+
+(defun sharp-eq-reader (stream subchar i &aux (x (push-context i)))
+  (declare (ignore subchar)(fixnum i))
+  (prog1 (setf (car x) (read stream t 'eof t))
+    (when (eq (car x) (cdr x)) (error))))
+
+(defun sharp-sharp-reader (stream subchar i &aux (x (get-context i)))
+  (declare (ignore stream subchar)(fixnum i))
+  (unless x (error))
+  (or (cdr x) (let ((s (alloc-spice))) (setf (gethash s (context-spice *sharp-eq-context*)) x (cdr x) s))))
+
+(defun patch-sharp (x) 
+  (typecase
+   x
+   (cons (setf (car x) (patch-sharp (car x)) (cdr x) (patch-sharp (cdr x))) x)
+   ((vector t)
+    (dotimes (i (length x) x)
+      (setf (aref x i) (patch-sharp (aref x i)))))
+   ((array t)
+    (dotimes (i (array-total-size x) x)
+      (aset1 x i (patch-sharp (row-major-aref x i)))))
+   (structure
+    (let ((d (structure-def x))) 
+      (dotimes (i (structure-length x) x)
+	(declare (fixnum i))
+	(structure-set x d i (patch-sharp (structure-ref x d i))))))
+   (spice (or (car (gethash1 x (context-spice *sharp-eq-context*))) (error "patch-sharp failure")))
+   (otherwise x)))
+
+(set-dispatch-macro-character #\# #\= #'sharp-eq-reader)
+(set-dispatch-macro-character #\# #\# #'sharp-sharp-reader)
--- gcl-2.6.7+dfsga.orig/lsp/sys-proclaim.lisp
+++ gcl-2.6.7+dfsga/lsp/sys-proclaim.lisp
@@ -1,5 +1,23 @@
 
 (IN-PACKAGE "SYSTEM") 
+(PROCLAIM '(FTYPE (FUNCTION (T *) T) ERROR))
+(PROCLAIM '(FTYPE (FUNCTION (T T) T) GETHASH1))
+(PROCLAIM '(FTYPE (FUNCTION (T T FIXNUM) T) STRUCTURE-REF))
+(PROCLAIM '(FTYPE (FUNCTION (T T FIXNUM T) T) STRUCTURE-SET))
+(PROCLAIM '(FTYPE (FUNCTION (T) FIXNUM) STRUCTURE-LENGTH))
+(PROCLAIM '(FTYPE (FUNCTION (T) T) STRUCTURE-DEF))
+
+(PROCLAIM '(FTYPE (FUNCTION (T FIXNUM T) T) ASET1))
+(PROCLAIM '(FTYPE (FUNCTION (T FIXNUM) T) ROW-MAJOR-AREF))
+(PROCLAIM '(FTYPE (FUNCTION (T) FIXNUM) ARRAY-TOTAL-SIZE))
+(PROCLAIM
+    '(FTYPE (FUNCTION () T) ALLOC-SPICE))
+(PROCLAIM
+    '(FTYPE (FUNCTION (T) T) PATCH-SHARP))
+(PROCLAIM
+    '(FTYPE (FUNCTION (*) T) MAKE-CONTEXT))
+(PROCLAIM
+    '(FTYPE (FUNCTION (FIXNUM) T) GET-CONTEXT GET-CONTEXT))
 (PROCLAIM
     '(FTYPE (FUNCTION (FIXNUM T) T) SMALLNTHCDR))
 (PROCLAIM
@@ -278,4 +296,4 @@
             SLOOP::NEVER-SLOOP-COLLECT BYTE QUOTATION-READER
             ANSI-LOOP::LOOP-TASSOC PARSE-SLOT-DESCRIPTION
             SUB-INTERVAL-P COERCE SLOOP::IN-TABLE-SLOOP-MAP
-            CHECK-SEQ-START-END SLOOP::IN-PACKAGE-SLOOP-MAP)) 
\ No newline at end of file
+            CHECK-SEQ-START-END SLOOP::IN-PACKAGE-SLOOP-MAP)) 
--- gcl-2.6.7+dfsga.orig/o/hash.d
+++ gcl-2.6.7+dfsga/o/hash.d
@@ -407,6 +407,17 @@ LFD(Lgethash)()
 	vs_popp;
 }
 
+DEFUN_NEW("GETHASH1",object,fSgethash1,SI,2,2,NONE,OO,OO,OO,OO,(object k,object h),"") {
+
+  struct htent *e;
+
+  check_type_hash_table(&h);
+  e = gethash(k,h);
+  return e->hte_key != OBJNULL ? e->hte_value : Cnil;
+
+}
+
+
 LFD(siLhash_set)()
 {
 	check_arg(3);
--- gcl-2.6.7+dfsga.orig/o/eval.c
+++ gcl-2.6.7+dfsga/o/eval.c
@@ -159,7 +159,7 @@ funcall(object fun)
 { 
         object temporary;
 	object x;
-	 object * VOL top;
+        object * VOL top;
 	object *lex;
 	bds_ptr old_bds_top;
 	VOL bool b;
@@ -174,15 +174,23 @@ funcall(object fun)
 		CHECK_AVMA; return;
 	case t_gfun:	
 	case t_sfun:
-		ihs_check;ihs_push(fun);
-		quick_call_sfun(fun);
-		ihs_pop();
-		return;
+	  { 
+	    extern int Rset;
+	    int rset=Rset;
+	    if (!rset) {ihs_check;ihs_push(fun);}
+	    quick_call_sfun(fun);
+	    if (!rset) ihs_pop();
+	  }
+	  return;
         case t_vfun:
-		ihs_check;ihs_push(fun);
-		call_vfun(fun);
-		ihs_pop();
-		return;
+	  { 
+	    extern int Rset;
+	    int rset=Rset;
+	    if (!rset) {ihs_check;ihs_push(fun);}
+	    call_vfun(fun);
+	    if (!rset) ihs_pop();
+	  }
+	  return;
          case t_afun:
 	 case t_closure:
 	   { object res,*b = vs_base;
--- gcl-2.6.7+dfsga.orig/o/structure.c
+++ gcl-2.6.7+dfsga/o/structure.c
@@ -54,33 +54,52 @@ bad_raw_type(void)
 {     	  FEerror("Bad raw struct type",0);}
 
 
+DEFUN_NEW("STRUCTURE-DEF",object,fSstructure_def,SI,1,1,NONE,OO,OO,OO,OO,(object x),"") {
+  check_type_structure(x);
+  return (x)->str.str_def;
+}
+
+DEFUN_NEW("STRUCTURE-LENGTH",fixnum,fSstructure_length,SI,1,1,NONE,IO,OO,OO,OO,(object x),"") {
+  check_type_structure(x);
+  return S_DATA(x)->length;
+}
+
+DEFUN_NEW("STRUCTURE-REF",object,structure_ref,SI,3,3,NONE,OO,OI,OO,OO,(object x,object name,fixnum i),"") {
+/* object */
+/* structure_ref(object x, object name, int i) */
+/* { */
+  unsigned short *s_pos;
+  COERCE_DEF(name);
+  if (type_of(x) != t_structure ||
+      (type_of(name)!=t_structure) ||
+      !structure_subtypep(x->str.str_def, name))
+    FEwrong_type_argument((type_of(name)==t_structure ?
+			   S_DATA(name)->name : name),
+			  x);
+  s_pos = &SLOT_POS(x->str.str_def,0);
+  switch((SLOT_TYPE(x->str.str_def,i)))
+    {
+    case aet_object: return(STREF(object,x,s_pos[i]));
+    case aet_fix:  return(make_fixnum((STREF(fixnum,x,s_pos[i]))));
+    case aet_ch:  return(code_char(STREF(char,x,s_pos[i])));
+    case aet_bit:
+    case aet_char: return(small_fixnum(STREF(char,x,s_pos[i])));
+    case aet_sf: return(make_shortfloat(STREF(shortfloat,x,s_pos[i])));
+    case aet_lf: return(make_longfloat(STREF(longfloat,x,s_pos[i])));
+    case aet_uchar: return(small_fixnum(STREF(unsigned char,x,s_pos[i])));
+    case aet_ushort: return(make_fixnum(STREF(unsigned short,x,s_pos[i])));
+    case aet_short: return(make_fixnum(STREF(short,x,s_pos[i])));
+    default:
+      bad_raw_type();
+      return 0;
+    }
+}
+#ifdef STATIC_FUNCTION_POINTERS
 object
-structure_ref(object x, object name, int i)
-{unsigned short *s_pos;
- COERCE_DEF(name);
- if (type_of(x) != t_structure ||
-     (type_of(name)!=t_structure) ||
-     !structure_subtypep(x->str.str_def, name))
-   FEwrong_type_argument((type_of(name)==t_structure ?
-			  S_DATA(name)->name : name),
-			 x);
- s_pos = &SLOT_POS(x->str.str_def,0);
- switch((SLOT_TYPE(x->str.str_def,i)))
-   {
-   case aet_object: return(STREF(object,x,s_pos[i]));
-   case aet_fix:  return(make_fixnum((STREF(fixnum,x,s_pos[i]))));
-   case aet_ch:  return(code_char(STREF(char,x,s_pos[i])));
-   case aet_bit:
-   case aet_char: return(small_fixnum(STREF(char,x,s_pos[i])));
-   case aet_sf: return(make_shortfloat(STREF(shortfloat,x,s_pos[i])));
-   case aet_lf: return(make_longfloat(STREF(longfloat,x,s_pos[i])));
-   case aet_uchar: return(small_fixnum(STREF(unsigned char,x,s_pos[i])));
-   case aet_ushort: return(make_fixnum(STREF(unsigned short,x,s_pos[i])));
-   case aet_short: return(make_fixnum(STREF(short,x,s_pos[i])));
-   default:
-     bad_raw_type();
-     return 0;
-   }}
+structure_ref(object x,object name,fixnum i) {
+  return FFN(structure_ref)(x,name,i);
+}
+#endif
 
 
 static void
@@ -96,46 +115,50 @@ FFN(siLstructure_ref1)(void)
  vs_top=vs_base+1;
 }
 
- 
- 
-
-
-object
-structure_set(object x, object name, int i, object v)
-{unsigned short *s_pos;
- 
- COERCE_DEF(name);
- if (type_of(x) != t_structure ||
-     type_of(name) != t_structure ||
-     !structure_subtypep(x->str.str_def, name))
-   FEwrong_type_argument((type_of(name)==t_structure ?
-			  S_DATA(name)->name : name)
-			 , x);
-
+DEFUN_NEW("STRUCTURE-SET",object,structure_set,SI,4,4,NONE,OO,OI,OO,OO,(object x,object name,fixnum i,object v),"") {
+/* object */
+/* structure_set(object x, object name, int i, object v) */
+/* { */
+  unsigned short *s_pos;
+  
+  COERCE_DEF(name);
+  if (type_of(x) != t_structure ||
+      type_of(name) != t_structure ||
+      !structure_subtypep(x->str.str_def, name))
+    FEwrong_type_argument((type_of(name)==t_structure ?
+			   S_DATA(name)->name : name)
+			  , x);
+  
 #ifdef SGC
- /* make sure the structure header is on a writable page */
- if (x->d.m) FEerror("bad gc field",0); else  x->d.m = 0;
+  /* make sure the structure header is on a writable page */
+  if (x->d.m) FEerror("bad gc field",0); else  x->d.m = 0;
 #endif   
- 
- s_pos= & SLOT_POS(x->str.str_def,0);
- switch(SLOT_TYPE(x->str.str_def,i)){
-   
-   case aet_object: STREF(object,x,s_pos[i])=v; break;
-   case aet_fix:  (STREF(fixnum,x,s_pos[i]))=fix(v); break;
-   case aet_ch:  STREF(char,x,s_pos[i])=char_code(v); break;
-   case aet_bit:
-   case aet_char: STREF(char,x,s_pos[i])=fix(v); break;
-   case aet_sf: STREF(shortfloat,x,s_pos[i])=sf(v); break;
-   case aet_lf: STREF(longfloat,x,s_pos[i])=lf(v); break;
-   case aet_uchar: STREF(unsigned char,x,s_pos[i])=fix(v); break;
-   case aet_ushort: STREF(unsigned short,x,s_pos[i])=fix(v); break;
-   case aet_short: STREF(short,x,s_pos[i])=fix(v); break;
- default:
-   bad_raw_type();
-
-   }
- return(v);
+  
+  s_pos= & SLOT_POS(x->str.str_def,0);
+  switch(SLOT_TYPE(x->str.str_def,i)){
+    
+  case aet_object: STREF(object,x,s_pos[i])=v; break;
+  case aet_fix:  (STREF(fixnum,x,s_pos[i]))=fix(v); break;
+  case aet_ch:  STREF(char,x,s_pos[i])=char_code(v); break;
+  case aet_bit:
+  case aet_char: STREF(char,x,s_pos[i])=fix(v); break;
+  case aet_sf: STREF(shortfloat,x,s_pos[i])=sf(v); break;
+  case aet_lf: STREF(longfloat,x,s_pos[i])=lf(v); break;
+  case aet_uchar: STREF(unsigned char,x,s_pos[i])=fix(v); break;
+  case aet_ushort: STREF(unsigned short,x,s_pos[i])=fix(v); break;
+  case aet_short: STREF(short,x,s_pos[i])=fix(v); break;
+  default:
+    bad_raw_type();
+    
+  }
+  return(v);
+}
+#ifdef STATIC_FUNCTION_POINTERS
+object
+structure_set(object x,object name,fixnum i) {
+  return FFN(structure_set)(x,name,i);
 }
+#endif
 
 static void
 FFN(siLstructure_subtype_p)(void)
@@ -362,12 +385,12 @@ FFN(siLmake_s_data_structure)(void)
  vs_top=vs_base+1;
 }
 
-static void
-FFN(siLstructure_def)(void)
-{check_arg(1);
- check_type_structure(vs_base[0]);
-  vs_base[0]=vs_base[0]->str.str_def;
-}
+/* static void */
+/* FFN(siLstructure_def)(void) */
+/* {check_arg(1); */
+/*  check_type_structure(vs_base[0]); */
+/*   vs_base[0]=vs_base[0]->str.str_def; */
+/* } */
 
 short aet_sizes [] = {
 sizeof(object),  /* aet_object  t  */
@@ -431,10 +454,10 @@ gcl_init_structure_function(void)
 	make_si_function("MAKE-S-DATA-STRUCTURE",siLmake_s_data_structure);
 	make_si_function("COPY-STRUCTURE", siLcopy_structure);
 	make_si_function("STRUCTURE-NAME", siLstructure_name);
-	make_si_function("STRUCTURE-REF", siLstructure_ref);
-	make_si_function("STRUCTURE-DEF", siLstructure_def);
+	/* make_si_function("STRUCTURE-REF", siLstructure_ref); */
+	/* make_si_function("STRUCTURE-DEF", siLstructure_def); */
 	make_si_function("STRUCTURE-REF1", siLstructure_ref1);
-	make_si_function("STRUCTURE-SET", siLstructure_set);
+	/* make_si_function("STRUCTURE-SET", siLstructure_set); */
 	make_si_function("STRUCTUREP", siLstructurep);
 	make_si_function("SIZE-OF", siLsize_of);
 	make_si_function("ALIGNMENT",siLalignment);
--- gcl-2.6.7+dfsga.orig/o/read.d
+++ gcl-2.6.7+dfsga/o/read.d
@@ -32,8 +32,9 @@ Foundation, 675 Mass Ave, Cambridge, MA
 static object
 current_readtable(void);
 
+DEFVAR("PATCH-SHARP",sSpatch_sharp,SI,sLnil,"");
 static object
-patch_sharp(object);
+patch_sharp(object x) {return ifuncall1(sSpatch_sharp,x);}
 
 static object
 parse_number(char *,int,int *,int);
@@ -50,29 +51,107 @@ object dispatch_reader;
 #define	cat(c)	(READtable->rt.rt_self[char_code((c))] \
 		 .rte_chattrib)
 
-#ifndef SHARP_EQ_CONTEXT_SIZE
-#define	SHARP_EQ_CONTEXT_SIZE	500
-#endif
-
 static void
 setup_READtable()
 {
 	READtable = current_readtable();
 }
 
-struct sharp_eq_context_struct {
-	object	sharp_index;
-	object	sharp_eq;
-	object	sharp_sharp;
-} sharp_eq_context[SHARP_EQ_CONTEXT_SIZE];
 
-/*
-	NOTE:
+/*bootstrap code*/
+DEFUN_NEW("SHARP-EQ-READER",object,fSsharp_eq_reader,SI,3,3,NONE,OO,OO,OO,OO,(object s,object ch,object ind),"") {
 
-		I believe that there is no need to enter
-		sharp_eq_context to mark_origin.
-*/
+  object x,res;
+
+  if (READsuppress) return Cnil;
+  if (ind==Cnil) FEerror("The #= readmacro requires an argument.", 0);
+  for (x=sSAsharp_eq_contextA->s.s_dbind;type_of(x)==t_cons && !(eql(x->c.c_car->c.c_car,ind));x=x->c.c_cdr);
+  if (x!=Cnil) FEerror("Duplicate definitions for #~D=.",1,ind);
+  x=x->c.c_car;
+  sSAsharp_eq_contextA->s.s_dbind=MMcons((x=MMcons(ind,MMcons(Cnil,OBJNULL))),sSAsharp_eq_contextA->s.s_dbind);
+  res=x->c.c_cdr->c.c_car=read_object(s);
+  if (res==x->c.c_cdr->c.c_cdr)
+    FEerror("#~D# is defined by itself.",1,x->c.c_car);
+  return res;
+}
+
+DEFUN_NEW("SHARP-SHARP-READER",object,fSsharp_sharp_reader,SI,3,3,NONE,OO,OO,OO,OO,(object s,object ch,object ind),"") {
+
+  object x;
+
+  if (READsuppress) return Cnil;
+  if (ind==Cnil) FEerror("The ## readmacro requires an argument.", 0);
+  for (x=sSAsharp_eq_contextA->s.s_dbind;type_of(x)==t_cons && !(eql(x->c.c_car->c.c_car,ind));x=x->c.c_cdr);
+  if (x==Cnil) FEerror("#~D# is undefined.",1,ind);
+  x=x->c.c_car;
+  if (x->c.c_cdr->c.c_cdr==OBJNULL)
+    x->c.c_cdr->c.c_cdr=alloc_object(t_spice);
+  return x->c.c_cdr->c.c_cdr;
+}
+
+
+DEFUN_NEW("PATCH-SHARP",object,fSpatch_sharp,SI,1,1,NONE,OO,OO,OO,OO,(object x),"") {
+
+  int i,j;
+  object y,p;
+  
+  switch (type_of(x)) {
+
+  case t_spice:
+    for (y=sSAsharp_eq_contextA->s.s_dbind;type_of(y)==t_cons && y->c.c_car->c.c_cdr->c.c_cdr!=x;y=y->c.c_cdr);
+    return y->c.c_car->c.c_cdr->c.c_car;
+    break;
+
+  case t_cons:
+    y=x;
+    do {
+      y->c.c_car=FFN(fSpatch_sharp)(y->c.c_car);
+      p=y;
+      y=y->c.c_cdr;
+    } while (type_of(y)==t_cons);
+    p->c.c_cdr=FFN(fSpatch_sharp)(p->c.c_cdr);
+    break;
+    
+  case t_vector:
+    if ((enum aelttype)x->v.v_elttype==aet_object)
+      for (i=0;i<x->v.v_fillp;i++)
+	x->v.v_self[i]=FFN(fSpatch_sharp)(x->v.v_self[i]);
+    break;
+
+  case t_array:
+    if ((enum aelttype)x->a.a_elttype==aet_object) {
+      for (i=0,j=1;i<x->a.a_rank;i++)
+	j*=x->a.a_dims[i];
+      for (i=0;i<j;i++)
+	x->a.a_self[i]=FFN(fSpatch_sharp)(x->a.a_self[i]);
+    }
+    break;
+
+  case t_structure:
+    y=x->str.str_def;
+    i=S_DATA(y)->length;
+    while (i-->0)
+      structure_set(x,y,i,FFN(fSpatch_sharp)(structure_ref(x,y,i)));
+    break;
+    
+  default:
+    break;
 
+  }
+
+  return(x);
+
+}
+/*end bootstrap code*/
+
+DEFVAR("*SHARP-EQ-CONTEXT*",sSAsharp_eq_contextA,SI,sLnil,"");
+
+DEFUN_NEW("ALLOC-SPICE",object,fSalloc_spice,SI,0,0,NONE,OO,OO,OO,OO,(void),"") {
+  return alloc_object(t_spice);
+}
+DEFUN_NEW("SPICE-P",object,fSspice_p,SI,1,1,NONE,OO,OO,OO,OO,(object x),"") {
+  return type_of(x)==t_spice ? Ct : Cnil;
+}
 
 static void
 setup_READ()
@@ -99,7 +178,7 @@ setup_READ()
 	}
 	READbase = fix(x);
 	READsuppress = symbol_value(sLAread_suppressA) != Cnil;
-	sharp_eq_context_max = 0;
+	sSAsharp_eq_contextA->s.s_dbind=Cnil;
 
 	backq_level = 0;
 }
@@ -111,7 +190,7 @@ setup_standard_READ()
 	READdefault_float_format = 'F';
 	READbase = 10;
 	READsuppress = FALSE;
-	sharp_eq_context_max = 0;
+	sSAsharp_eq_contextA->s.s_dbind=Cnil;
 	backq_level = 0;
 }
 
@@ -228,26 +307,23 @@ read_object_non_recursive(in)
 object in;
 {
 	VOL object x;
-	int i;
 	bool e;
 	object old_READtable;
 	int old_READdefault_float_format;
 	int old_READbase;
 	int old_READsuppress;
-	int old_sharp_eq_context_max;
-	struct sharp_eq_context_struct
-		old_sharp_eq_context[SHARP_EQ_CONTEXT_SIZE];
+	object old_READcontext;
 	int old_backq_level;
 
 	old_READtable = READtable;
 	old_READdefault_float_format = READdefault_float_format;
 	old_READbase = READbase;
 	old_READsuppress = READsuppress;
-	old_sharp_eq_context_max = sharp_eq_context_max;
+
+	old_READcontext=sSAsharp_eq_contextA->s.s_dbind;
+
 	/* BUG FIX by Toshiba */
 	vs_push(old_READtable);
-	for (i = 0;  i < sharp_eq_context_max;  i++)
-		old_sharp_eq_context[i] = sharp_eq_context[i];
 	old_backq_level = backq_level;
 	setup_READ();
 
@@ -268,8 +344,8 @@ object in;
 	  }
 	}
 #endif
-	if (sharp_eq_context_max > 0)
-		x = vs_head = patch_sharp(x);
+	if (sSAsharp_eq_contextA->s.s_dbind!=Cnil)
+	  x = vs_head = patch_sharp(x);
 
 	e = FALSE;
 
@@ -280,9 +356,7 @@ L:
 	READdefault_float_format = old_READdefault_float_format;
 	READbase = old_READbase;
 	READsuppress = old_READsuppress;
-	sharp_eq_context_max = old_sharp_eq_context_max;
-	for (i = 0;  i < sharp_eq_context_max;  i++)
-		sharp_eq_context[i] = old_sharp_eq_context[i];
+	sSAsharp_eq_contextA->s.s_dbind=old_READcontext;
 	backq_level = old_backq_level;
 	if (e) {
 		nlj_active = FALSE;
@@ -294,69 +368,6 @@ L:
 	return(x);
 }
 
-/* static object
-standard_read_object_non_recursive(in)
-object in;
-{
-	VOL object x;
-	int i;
-	bool e;
-	object old_READtable;
-	int old_READdefault_float_format;
-	int old_READbase;
-	int old_READsuppress;
-	int old_sharp_eq_context_max;
-	struct sharp_eq_context_struct
-		old_sharp_eq_context[SHARP_EQ_CONTEXT_SIZE];
-	int old_backq_level;
-
-	old_READtable = READtable;
-	old_READdefault_float_format = READdefault_float_format;
-	old_READbase = READbase;
-	old_READsuppress = READsuppress;
-	old_sharp_eq_context_max = sharp_eq_context_max;
-	BUG FIX by Toshiba
-	vs_push(old_READtable);
-	for (i = 0;  i < sharp_eq_context_max;  i++)
-		old_sharp_eq_context[i] = sharp_eq_context[i];
-	old_backq_level = backq_level;
-
-	setup_standard_READ();
-
-	frs_push(FRS_PROTECT, Cnil);
-	if (nlj_active) {
-		e = TRUE;
-		goto L;
-	}
-
-	x = read_object(in);
-	vs_push(x);
-
-	if (sharp_eq_context_max > 0)
-		x = vs_head = patch_sharp(x);
-
-	e = FALSE;
-
-L:
-	frs_pop();
-
-	READtable = old_READtable;
-	READdefault_float_format = old_READdefault_float_format;
-	READbase = old_READbase;
-	READsuppress = old_READsuppress;
-	sharp_eq_context_max = old_sharp_eq_context_max;
-	for (i = 0;  i < sharp_eq_context_max;  i++)
-		sharp_eq_context[i] = old_sharp_eq_context[i];
-	backq_level = old_backq_level;
-	if (e) {
-		nlj_active = FALSE;
-		unwind(nlj_fr, nlj_tag);
-	}
-	vs_popp;
-	BUG FIX by Toshiba
-	vs_popp;
-	return(x);
-}*/
 #ifdef UNIX  /* faster code for inner loop from file stream */
 #define xxxread_char_to(res,in,eof_code) \
   do{FILE *fp; \
@@ -1601,7 +1612,7 @@ Lsharp_exclamation_reader()
 		return;
 	}
 	vs_base[0] = read_object(vs_base[0]);
-	if (sharp_eq_context_max > 0)
+	if (sSAsharp_eq_contextA->s.s_dbind!=Cnil)
 		vs_base[0]=patch_sharp(vs_base[0]);
 	ieval(vs_base[0]);
 	vs_popp;
@@ -1710,156 +1721,10 @@ Lsharp_R_reader()
 			1, vs_base[0]);
 }
 
-/*static void Lsharp_A_reader(){}*/
-
-/*static void Lsharp_S_reader(){}*/
-
-static void
-Lsharp_eq_reader()
-{
-	int i;
-
-	check_arg(3);
-	if (READsuppress) {
-		vs_top = vs_base;
-		return;
-	}
-	if (vs_base[2] == Cnil)
-		FEerror("The #= readmacro requires an argument.", 0);
-	for (i = 0;  i < sharp_eq_context_max;  i++)
-		if (eql(sharp_eq_context[i].sharp_index, vs_base[2]))
-			FEerror("Duplicate definitions for #~D=.",
-				1, vs_base[2]);
-	if (sharp_eq_context_max >= SHARP_EQ_CONTEXT_SIZE)
-		FEerror("Too many #= definitions.", 0);
-	i = sharp_eq_context_max++;
-	sharp_eq_context[i].sharp_index = vs_base[2];
-	sharp_eq_context[i].sharp_sharp = OBJNULL;
-	vs_base[0]
-	= sharp_eq_context[i].sharp_eq
-	= read_object(vs_base[0]);
-	if (sharp_eq_context[i].sharp_eq
-	    == sharp_eq_context[i].sharp_sharp)
-		FEerror("#~D# is defined by itself.",
-			1, sharp_eq_context[i].sharp_index);
-	vs_top = vs_base+1;
-}
-
-static void
-Lsharp_sharp_reader()
-{
-	int i;
-
-	check_arg(3);
-	if (READsuppress) {
-		vs_popp;
-		vs_popp;
-		vs_base[0] = Cnil;
-	}
-	if (vs_base[2] == Cnil)
-		FEerror("The ## readmacro requires an argument.", 0);
-	for (i = 0;  ;  i++)
-		if (i >= sharp_eq_context_max)
-			FEerror("#~D# is undefined.", 1, vs_base[2]);
-		else if (eql(sharp_eq_context[i].sharp_index,
-			     vs_base[2]))
-			break;
-	if (sharp_eq_context[i].sharp_sharp == OBJNULL) {
-		sharp_eq_context[i].sharp_sharp
-		= alloc_object(t_spice);
-	}
-	vs_base[0] = sharp_eq_context[i].sharp_sharp;
-	vs_top = vs_base+1;
-}
-
-static void
-patch_sharp_cons(x)
-object x;
-{
-	for (;;) {
-		x->c.c_car = patch_sharp(x->c.c_car);
-		if (type_of(x->c.c_cdr) == t_cons)
-			x = x->c.c_cdr;
-		else {
-			x->c.c_cdr = patch_sharp(x->c.c_cdr);
-			break;
-		}
-	}
-}
-
-static object
-patch_sharp(x)
-object x;
-{
-	cs_check(x);
-
-	switch (type_of(x)) {
-	case t_spice:
-	{
-		int i;
-
-		for (i = 0;  i < sharp_eq_context_max;  i++)
-			if (sharp_eq_context[i].sharp_sharp == x)
-				return(sharp_eq_context[i].sharp_eq);
-		break;
-	}
-	case t_cons:
-	/*
-		x->c.c_car = patch_sharp(x->c.c_car);
-		x->c.c_cdr = patch_sharp(x->c.c_cdr);
-	*/
-		patch_sharp_cons(x);
-		break;
-
-	case t_vector:
-	{
-		int i;
-
-		if ((enum aelttype)x->v.v_elttype != aet_object)
-		  break;
-
-		for (i = 0;  i < x->v.v_fillp;  i++)
-			x->v.v_self[i] = patch_sharp(x->v.v_self[i]);
-		break;
-	}
-	case t_array:
-	{
-		int i, j;
-		
-		if ((enum aelttype)x->a.a_elttype != aet_object)
-		  break;
-
-		for (i = 0, j = 1;  i < x->a.a_rank;  i++)
-			j *= x->a.a_dims[i];
-		for (i = 0;  i < j;  i++)
-			x->a.a_self[i] = patch_sharp(x->a.a_self[i]);
-		break;
-	}
-	case t_structure:
-	{object def = x->str.str_def;
-	 int i;
-	 i=S_DATA(def)->length;
-	 while (i--> 0)
-	   structure_set(x,def,i,patch_sharp(structure_ref(x,def,i)));
-	 break;
-       }
-	
-	default:
-		break;
-	}
-	return(x);
-}
-
 static void Lsharp_plus_reader(){}
 
 static void Lsharp_minus_reader(){}
 
-/*static void Lsharp_less_than_reader(){}*/
-
-/*static void Lsharp_whitespace_reader(){}*/
-
-/*static void Lsharp_right_parenthesis_reader(){}*/
-
 static void
 Lsharp_vertical_bar_reader()
 {
@@ -2085,11 +1950,8 @@ READ:
 
 	object *p;
 
-	int i;
 	bool e;
-	volatile int old_sharp_eq_context_max=0;
-	struct sharp_eq_context_struct
-		old_sharp_eq_context[SHARP_EQ_CONTEXT_SIZE];
+        volatile object old_READcontext;
 	volatile int old_backq_level=0;
 
 @
@@ -2101,9 +1963,8 @@ READ:
 		strm = symbol_value(sLAterminal_ioA);
 	check_type_stream(&strm);
 	if (recursivep == Cnil) {
-		old_sharp_eq_context_max = sharp_eq_context_max;
-		for (i = 0;  i < sharp_eq_context_max;  i++)
-			old_sharp_eq_context[i] = sharp_eq_context[i];
+	  
+	        old_READcontext=sSAsharp_eq_contextA->s.s_dbind;
 		old_backq_level = backq_level;
 		setup_READ();
 		frs_push(FRS_PROTECT, Cnil);
@@ -2124,14 +1985,12 @@ READ:
 		p = &((*p)->c.c_cdr);
 	}
 	if (recursivep == Cnil) {
-		if (sharp_eq_context_max > 0)
+	  if (sSAsharp_eq_contextA->s.s_dbind!=Cnil)
 			l = patch_sharp(l);
 		e = FALSE;
 	L:
 		frs_pop();
-		sharp_eq_context_max = old_sharp_eq_context_max;
-		for (i = 0;  i < sharp_eq_context_max;  i++)
-			sharp_eq_context[i] = old_sharp_eq_context[i];
+		sSAsharp_eq_contextA->s.s_dbind=old_READcontext;
 		backq_level = old_backq_level;
 		if (e) {
 			nlj_active = FALSE;
@@ -2722,8 +2581,8 @@ gcl_init_read()
 	dtab['A'] = dtab['a'] = make_si_ordinary("SHARP-A-READER");
 	dtab['S'] = dtab['s'] = make_si_ordinary("SHARP-S-READER");
 
-	dtab['='] = make_cf(Lsharp_eq_reader);
-	dtab['#'] = make_cf(Lsharp_sharp_reader);
+	dtab['='] = make_si_ordinary("SHARP-EQ-READER");
+	dtab['#'] = make_si_ordinary("SHARP-SHARP-READER");
 	dtab['+'] = make_cf(Lsharp_plus_reader);
 	dtab['-'] = make_cf(Lsharp_minus_reader);
 /*
@@ -2763,7 +2622,7 @@ gcl_init_read()
 	READbase = 10;
 	READsuppress = FALSE;
 
-	sharp_eq_context_max = 0;
+	sSAsharp_eq_contextA->s.s_dbind=Cnil;
 
 	siSsharp_comma = make_si_ordinary("#,");
 	enter_mark_origin(&siSsharp_comma);
@@ -2842,9 +2701,7 @@ object in;
 	int old_READdefault_float_format;
 	int old_READbase;
 	int old_READsuppress;
-	int old_sharp_eq_context_max;
-	struct sharp_eq_context_struct
-		old_sharp_eq_context[SHARP_EQ_CONTEXT_SIZE];
+	volatile object old_READcontext;
 	int old_backq_level;
 
         /* to prevent longjmp clobber */
@@ -2854,11 +2711,9 @@ object in;
 	old_READdefault_float_format = READdefault_float_format;
 	old_READbase = READbase;
 	old_READsuppress = READsuppress;
-	old_sharp_eq_context_max = sharp_eq_context_max;
+	old_READcontext=sSAsharp_eq_contextA->s.s_dbind;
 	/* BUG FIX by Toshiba */
 	vs_push(old_READtable);
-	for (i = 0;  i < sharp_eq_context_max;  i++)
-		old_sharp_eq_context[i] = sharp_eq_context[i];
 	old_backq_level = backq_level;
 
 	setup_standard_READ();
@@ -2876,7 +2731,7 @@ object in;
 	vsp = vs_top;
 	dimcount = 0;
 	for (;;) {
-		sharp_eq_context_max = 0;
+                sSAsharp_eq_contextA->s.s_dbind=Cnil;
 		backq_level = 0;
 		delimiting_char = code_char(')');
 		preserving_whitespace_flag = FALSE;
@@ -2885,7 +2740,7 @@ object in;
 		if (x == OBJNULL)
 			break;
 		vs_check_push(x);
-		if (sharp_eq_context_max > 0)
+		if (sSAsharp_eq_contextA->s.s_dbind!=Cnil)
 			x = vs_head = patch_sharp(x);
 		dimcount++;
 	}
@@ -2915,9 +2770,7 @@ L:
 	READdefault_float_format = old_READdefault_float_format;
 	READbase = old_READbase;
 	READsuppress = old_READsuppress;
-	sharp_eq_context_max = old_sharp_eq_context_max;
-	for (i = 0;  i < sharp_eq_context_max;  i++)
-		sharp_eq_context[i] = old_sharp_eq_context[i];
+	sSAsharp_eq_contextA->s.s_dbind=old_READcontext;
 	backq_level = old_backq_level;
 	if (e) {
 		nlj_active = FALSE;
--- gcl-2.6.7+dfsga.orig/unixport/sys_ansi_gcl.c
+++ gcl-2.6.7+dfsga/unixport/sys_ansi_gcl.c
@@ -50,6 +50,7 @@ gcl_init_system(object no_init)
   ar_check_init(gcl_loop,no_init);
   ar_check_init(gcl_defpackage,no_init);
   ar_check_init(gcl_make_defpackage,no_init);
+  ar_check_init(gcl_sharp,no_init);
 
 	
   ar_check_init(gcl_cmpinline,no_init);
--- gcl-2.6.7+dfsga.orig/unixport/sys_pcl_gcl.c
+++ gcl-2.6.7+dfsga/unixport/sys_pcl_gcl.c
@@ -50,6 +50,7 @@ gcl_init_system(object no_init)
   ar_check_init(gcl_loop,no_init);
   ar_check_init(gcl_defpackage,no_init);
   ar_check_init(gcl_make_defpackage,no_init);
+  ar_check_init(gcl_sharp,no_init);
 
 	
   ar_check_init(gcl_cmpinline,no_init);
--- gcl-2.6.7+dfsga.orig/unixport/sys_pre_gcl.c
+++ gcl-2.6.7+dfsga/unixport/sys_pre_gcl.c
@@ -50,6 +50,7 @@ gcl_init_system(object no_init)
   lsp_init("../lsp/gcl_loop.lsp");
   lsp_init("../lsp/gcl_defpackage.lsp");
   lsp_init("../lsp/gcl_make_defpackage.lsp");
+  lsp_init("../lsp/gcl_sharp.lsp");
 
   lsp_init("../cmpnew/gcl_cmpinline.lsp");
   lsp_init("../cmpnew/gcl_cmputil.lsp");
--- gcl-2.6.7+dfsga.orig/unixport/sys_gcl.c
+++ gcl-2.6.7+dfsga/unixport/sys_gcl.c
@@ -24,9 +24,9 @@ gcl_init_system(object no_init) {
   if (type_of(no_init)!=t_symbol)
     error("Supplied no_init is not of type symbol\n");
 
+  ar_check_init(gcl_arraylib,no_init);
   ar_check_init(gcl_predlib,no_init);
   ar_check_init(gcl_setf,no_init);
-  ar_check_init(gcl_arraylib,no_init);
   ar_check_init(gcl_assert,no_init);
   ar_check_init(gcl_defstruct,no_init);
   ar_check_init(gcl_describe,no_init);
@@ -47,6 +47,7 @@ gcl_init_system(object no_init) {
   ar_check_init(gcl_loop,no_init);
   ar_check_init(gcl_defpackage,no_init);
   ar_check_init(gcl_make_defpackage,no_init);
+  ar_check_init(gcl_sharp,no_init);
 
 	
   ar_check_init(gcl_cmpinline,no_init);
--- gcl-2.6.7+dfsga.orig/info/system.texi
+++ gcl-2.6.7+dfsga/info/system.texi
@@ -285,11 +285,11 @@ Package:LISP
 
 Displays information about storage allocation in the following format.
 
-@itemize @asis
+@itemize @asis{}
 
 @item
 for each type class
-@itemize @asis
+@itemize @asis{}
 @item
 the number of pages so-far allocated for the type class
 @item
--- gcl-2.6.7+dfsga.orig/info/compile.texi
+++ gcl-2.6.7+dfsga/info/compile.texi
@@ -128,6 +128,8 @@ are given.  Note that most common lisps
 
 Defentry, clines, and defcfun also result in machine code being generated.
 
+@end defun
+
 @unnumbered subsection Evaluation at Compile time
 
   In GCL the eval-when behaviour was changed in order to allow
@@ -184,29 +186,6 @@ The old GCL variable *compile-time-too*
 
 See OPTIMIZE on how to enable warnings of slow constructs.
 
-
-
-@end defun
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 @defun PROCLAIM (decl-spec)
 Package:LISP
 
--- gcl-2.6.7+dfsga.orig/info/si-defs.texi
+++ gcl-2.6.7+dfsga/info/si-defs.texi
@@ -992,7 +992,7 @@ will be called automatically as needed.
 @end menu
 
 @node Regular Expressions,  , System Definitions, System Definitions
-@subsection Regular Expressions
+@section Regular Expressions
 
 The function @code{string-match} (*Index string-match::) is used to
 match a regular expression against a string.  If the variable
@@ -1085,7 +1085,7 @@ from left to right across the input stri
 attempts to match longer pieces of the input string before shorter
 ones.  More specifically, the following rules apply in decreasing
 order of priority:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 If a regular expression could match two different parts of an input string
--- gcl-2.6.7+dfsga.orig/info/form.texi
+++ gcl-2.6.7+dfsga/info/form.texi
@@ -45,7 +45,7 @@ Syntax:
 Replaces the value in PLACE with the value of NEWVALUE, from left to right.
 Returns the value of the last NEWVALUE.  Each PLACE may be any one of the
 following:
-@itemize  @asis
+@itemize  @asis{}
 @item
 A symbol that names a variable.
 @item
--- gcl-2.6.7+dfsga.orig/info/gcl-tk.texi
+++ gcl-2.6.7+dfsga/info/gcl-tk.texi
@@ -24,7 +24,8 @@ END-INFO-DIR-ENTRY
 @titlepage
 @sp 10
 @comment The title is printed in a large font.
-@center @titlefont{GCL TK Manual}
+@comment @center @titlefont{GCL TK Manual}
+@title GCL TK Manual
 @end titlepage
 
 @node Top, General, (dir), (dir)
--- gcl-2.6.7+dfsga.orig/info/gcl-si.texi
+++ gcl-2.6.7+dfsga/info/gcl-si.texi
@@ -34,7 +34,8 @@ END-INFO-DIR-ENTRY
 @titlepage
 @sp 10
 @comment The title is printed in a large font.
-@center @titlefont{GCL SI Manual}
+@comment @center @titlefont{GCL SI Manual}
+@title GCL SI Manual
 @end titlepage
 
 @node Top, Numbers, (dir), (dir)
--- gcl-2.6.7+dfsga.orig/info/makefile
+++ gcl-2.6.7+dfsga/info/makefile
@@ -58,17 +58,17 @@ gcl.info: ${GCL_MAN} gcl.texi
 #	$(HTML_CMD) gcl.texi
 
 gcl-si/index.html: ${GCL_SI} gcl-si.texi
-	mkdir -p $@
+	mkdir -p $(@D)
 	touch $@
 	-$(HTML_CMD) gcl-si.texi
 
 gcl-tk/index.html: ${GCL_TK} gcl-tk.texi
-	mkdir -p $@
+	mkdir -p $(@D)
 	touch $@
 	-$(HTML_CMD) gcl-tk.texi
 
 gcl/index.html: gcl.texi
-	mkdir -p $@
+	mkdir -p $(@D)
 	touch $@
 	-$(HTML_CMD) gcl.texi
 
@@ -113,4 +113,6 @@ tex:
 
 clean:
 	rm -f *.info* *.html *.dvi *.cp *.ky *.vr *.tp *.pg *.toc *.aux *.log *.fn
-	rm -rf gcl.IC gcl.IE gcl.IG gcl.IP gcl.IR gcl.IT gcl.fu gcl gcl-si gcl-tk
\ No newline at end of file
+	rm -rf gcl.IC gcl.IE gcl.IG gcl.IP gcl.IR gcl.IT gcl.fu gcl gcl-si gcl-tk
+	rm -rf gcl gcl-si gcl-tk
+
--- gcl-2.6.7+dfsga.orig/info/gcl-si-index.texi
+++ gcl-2.6.7+dfsga/info/gcl-si-index.texi
@@ -1,5 +1,5 @@
 @node Function and Variable Index, , Compiler Definitions, Top
 @appendix Function and Variable Index
-@printindex vr
+@printindex fn
 
 
--- gcl-2.6.7+dfsga.orig/info/widgets.texi
+++ gcl-2.6.7+dfsga/info/widgets.texi
@@ -210,7 +210,7 @@ This command is ignored if the button's
 
 Tk automatically creates class bindings for buttons that give them
 the following default behavior:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 The button activates whenever the mouse passes over it and deactivates
@@ -414,7 +414,7 @@ element of the listbox.  Returns an empt
 
 Tk automatically creates class bindings for listboxes that give them
 the following default behavior:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 When button 1 is pressed over a listbox, the element underneath the
@@ -2482,7 +2482,7 @@ window of the topmost pixel in the entry
 
 Tk automatically creates class bindings for menus that give them
 the following default behavior:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 When the mouse cursor enters a menu, the entry underneath the mouse
@@ -2949,7 +2949,7 @@ modifying its associated variable to ref
 
 Tk automatically creates class bindings for check buttons that give them
 the following default behavior:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 The check button activates whenever the mouse passes over it and deactivates
@@ -3145,7 +3145,7 @@ use ``@i{pathName }@b{:configure :state
 
 Tk automatically creates class bindings for menu buttons that give them
 the following default behavior:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 A menu button activates whenever the mouse passes over it and deactivates
@@ -3560,7 +3560,7 @@ Text widgets support the standard X sele
 Selection support is implemented via tags.
 If the @b{exportSelection} option for the text widget is true
 then the @b{sel} tag will be associated with the selection:
-@itemize  @asis
+@itemize  @asis{}
 @item
 [1]
 Whenever characters are tagged with @b{sel} the text widget
@@ -3892,7 +3892,7 @@ If the @b{:pickplace}@r{ option isn't sp
 appear at the top of the window.
 If @b{:pickplace} is specified then the widget chooses where
 @i{what} appears in the window:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 If @i{what} is already visible somewhere in the window then the
@@ -3920,7 +3920,7 @@ This command returns an empty string.
 
 Tk automatically creates class bindings for texts that give them
 the following default behavior:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 Pressing mouse button 1 in an text positions the insertion cursor
@@ -4217,7 +4217,7 @@ at the left edge of the window.  Returns
 Tk automatically creates class bindings for entries that give them
 the following default behavior:
 
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 Clicking mouse button 1 in an entry positions the insertion cursor
@@ -4908,7 +4908,7 @@ to this widget.
 
 Tk automatically creates class bindings for radio buttons that give them
 the following default behavior:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 The radio button activates whenever the mouse passes over it and deactivates
--- gcl-2.6.7+dfsga.orig/info/debug.texi
+++ gcl-2.6.7+dfsga/info/debug.texi
@@ -87,7 +87,7 @@ M-c continues execution.
 
    Keywords typed at top level, in the debug loop have
 a special meaning:
-@itemize @asis
+@itemize @asis{}
 
 @item
 :delete  [n1] [n2] .. -- delete all break points or just n1,n2
--- gcl-2.6.7+dfsga.orig/info/control.texi
+++ gcl-2.6.7+dfsga/info/control.texi
@@ -926,7 +926,7 @@ At any given time, the only menus availa
 are those associated with the top-level window containing the
 input focus.
 Menu traversal is initiated by one of the following actions:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 If <F10> is typed, then the first menu button in the list for the
@@ -950,7 +950,7 @@ its first entry.
 
 Once a menu has been posted, the input focus is switched to that
 menu and the following actions are possible:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 Typing <ESC> or clicking mouse button 1 outside the menu button or
@@ -2046,7 +2046,7 @@ This area is called the @i{cavity};  for
 is the entire area of the master.
 
 For each slave the packer carries out the following steps:
-@itemize @asis
+@itemize @asis{}
 @item
 [1]
 The packer allocates a rectangular @i{parcel} for the slave
--- gcl-2.6.7+dfsga.orig/cmpnew/gcl_cmpopt.lsp
+++ gcl-2.6.7+dfsga/cmpnew/gcl_cmpopt.lsp
@@ -213,6 +213,10 @@
  (push '((t) t #.(flags)"(#0)->str.str_def")
    (get 'system:structure-def 'inline-unsafe))
 
+;;SYSTEM:STRUCTURE-LENGTH
+ (push '((t) fixnum #.(flags rfa)"S_DATA(#0)->length")
+   (get 'system:structure-length 'inline-unsafe))
+
 ;;SYSTEM:STRUCTURE-REF
  (push '((t t fixnum) t #.(flags ans)"structure_ref(#0,#1,#2)")
    (get 'system:structure-ref 'inline-always))
@@ -225,6 +229,10 @@
  (push '((t) boolean #.(flags)"type_of(#0)==t_structure")
    (get 'system:structurep 'inline-always))
 
+;;SYSTEM:gethash1
+ (push '((t t) t #.(flags)"({struct htent *e=gethash(#0,#1);e->hte_key != OBJNULL ? e->hte_value : Cnil;})")
+   (get 'system:gethash1 'inline-always))
+
 ;;SYSTEM:SVSET
  (push '((t t t) t #.(flags set)"aset1(#0,fixint(#1),#2)")
    (get 'system:svset 'inline-always))
@@ -886,6 +894,10 @@ type_of(#0)==t_bitvector")
  (push '((t) boolean #.(flags)"@0;type_of(#0)==t_cons||(#0)==Cnil")
    (get 'listp 'inline-always))
 
+;;si::spice-p
+ (push '((t) boolean #.(flags)"@0;type_of(#0)==t_spice")
+   (get 'si::spice-p 'inline-always))
+
 ;;LOGAND
  (push '((fixnum fixnum) fixnum #.(flags rfa)"((#0) & (#1))")
    (get 'logand 'inline-always))
--- gcl-2.6.7+dfsga.orig/cmpnew/gcl_cmpfun.lsp
+++ gcl-2.6.7+dfsga/cmpnew/gcl_cmpfun.lsp
@@ -516,6 +516,7 @@
 (defvar *type-alist*
   '((fixnum . si::fixnump)
     (float . floatp)
+    (si::spice . si::spice-p)
     (short-float . short-float-p)
     (long-float . long-float-p)
     (integer . integerp)
--- gcl-2.6.7+dfsga.orig/cmpnew/gcl_cmplet.lsp
+++ gcl-2.6.7+dfsga/cmpnew/gcl_cmplet.lsp
@@ -244,8 +244,8 @@
                           (t (setf (var-ref var) (vs-push))
 			     )))
            )
-	  ((eq (var-kind var) 'object))    
-          (t (setf (var-ref var) (vs-push))
+;	  ((eq (var-kind var) 'object))    
+          (t (unless (eq (var-kind var) 'object) (setf (var-ref var) (vs-push)))
 	     )))
         ))
 
--- gcl-2.6.7+dfsga.orig/cmpnew/gcl_lfun_list.lsp
+++ gcl-2.6.7+dfsga/cmpnew/gcl_lfun_list.lsp
@@ -336,7 +336,7 @@
 (DEFSYSFUN 'VALUES-LIST "Lvalues_list" '(T) '* NIL NIL) 
 (DEFSYSFUN 'EQUAL "Lequal" '(T T) 'T NIL T) 
 (DEFSYSFUN 'DIGIT-CHAR-P "Ldigit_char_p" '(T *) 'T NIL NIL) 
-#-clcs (DEFSYSFUN 'ERROR "Lerror" '(T *) 'T NIL NIL) 
+;; #-clcs (DEFSYSFUN 'ERROR "Lerror" '(T *) 'T NIL NIL) 
 (DEFSYSFUN 'CHAR/= "Lchar_neq" '(T *) 'T NIL T) 
 (DEFSYSFUN 'PATHNAME-DIRECTORY "Lpathname_directory" '(T) 'T NIL NIL) 
 (DEFSYSFUN 'CDAAAR "Lcdaaar" '(T) 'T NIL NIL) 
@@ -444,10 +444,10 @@
 (DEFSYSFUN 'SYSTEM::MAKE-STRUCTURE "siLmake_structure" NIL T NIL NIL) 
 (DEFSYSFUN 'SYSTEM::STRUCTURE-NAME "siLstructure_name" '(T) 'SYMBOL NIL
     NIL) 
-(DEFSYSFUN 'SYSTEM::STRUCTURE-REF "siLstructure_ref" '(T T FIXNUM) T NIL
-    NIL) 
-(DEFSYSFUN 'SYSTEM::STRUCTURE-SET "siLstructure_set" '(T T FIXNUM T) T
-    NIL NIL) 
+;; (DEFSYSFUN 'SYSTEM::STRUCTURE-REF "siLstructure_ref" '(T T FIXNUM) T NIL
+;;     NIL) 
+;; (DEFSYSFUN 'SYSTEM::STRUCTURE-SET "siLstructure_set" '(T T FIXNUM T) T
+;;     NIL NIL) 
 (DEFSYSFUN 'SYSTEM::PUT-F "siLput_f" NIL '(T T) NIL NIL) 
 (DEFSYSFUN 'SYSTEM::REM-F "siLrem_f" NIL '(T T) NIL NIL) 
 (DEFSYSFUN 'SYSTEM::SET-SYMBOL-PLIST "siLset_symbol_plist" '(SYMBOL T) T
