/* This is a minimally edited version of Guile's tags.h. */
/* classes: h_files */

#ifndef TAGSH
#define TAGSH
/*      Copyright (C) 1995 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,
 * 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 program; 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.  
 */


/** This file defines the format of SCM values and cons pairs.  
 ** It is here that tag bits are assigned for various purposes.
 **/


/* Three Bit Tags

 * 000 -- a non-immediate value.  Points into the pair heap.  
 *
 * 001 -- a gloc (i.e., a resolved global variable in a CAR in a code graph)
 *        or the CAR of an object handle (i.e., the tagged pointer to the
 *        vtable part of a user-defined object).
 *
 *        If X has this tag, the value at CDAR(X - 1) distinguishes
 *        glocs from object handles.  The distinction only needs
 *        to be made in a few places.  Only a few parts of the code know
 *        about glocs.  In most cases, when a value in the CAR of a pair
 *        has the tag 001, it means that the pair is an object handle.
 *
 * 010 -- the tag for immediate, exact integers. 
 *
 * 011 -- in the CAR of a pair, this tag indicates that the pair is a closure.
 *        The remaining bits of the CAR are a pointer into the pair heap
 *        to the code graph for the closure.
 *
 * 1xy -- an extension tag which means that there is a five or six bit
 *        tag to the left of the low three bits.  See the nice diagrams
 *        in ../doc/code.doc if you want to know what the bits mean.
 */





#define scm_tc3_cons		0
#define scm_tc3_cons_gloc	1
#define scm_tc3_closure		3

#define scm_tc7_ssymbol		5
#define scm_tc7_msymbol		7
#define scm_tc7_string		13
#define scm_tc7_bvect		15
#define scm_tc7_vector		21
#define scm_tc7_lvector		23
#define scm_tc7_ivect		29
#define scm_tc7_uvect		31
/* spare 37 39 */
#define scm_tc7_fvect		45
#define scm_tc7_dvect		47
#define scm_tc7_cvect		53
#define scm_tc7_port		55
#define scm_tc7_contin		61
#define scm_tc7_cclo		63
/* spare 69 71 77 79 */
#define scm_tc7_subr_0		85
#define scm_tc7_subr_1		87
#define scm_tc7_cxr		93
#define scm_tc7_subr_3		95
#define scm_tc7_subr_2		101
#define scm_tc7_asubr		103
#define scm_tc7_subr_1o		109
#define scm_tc7_subr_2o		111
#define scm_tc7_lsubr_2		117
#define scm_tc7_lsubr		119
#define scm_tc7_rpsubr		125

#define scm_tc7_smob		127
#define scm_tc_free_cell	127

#define scm_tc16_flo		0x017f
#define scm_tc_flo		0x017fL

#define SCM_REAL_PART		(1L<<16)
#define SCM_IMAG_PART		(2L<<16)
#define scm_tc_dblr		(scm_tc16_flo|REAL_PART)
#define scm_tc_dblc		(scm_tc16_flo|REAL_PART|IMAG_PART)

#define scm_tc16_bigpos		0x027f
#define scm_tc16_bigneg		0x037f

#define scm_tc16_fport 		(scm_tc7_port + 0*256L)
#define scm_tc16_pipe 		(scm_tc7_port + 1*256L)
#define scm_tc16_strport	(scm_tc7_port + 2*256L)
#define scm_tc16_sfport 	(scm_tc7_port + 3*256L)



/* For cons pairs with immediate values in the CAR */
#define scm_tcs_cons_imcar 2:case 4:case 6:case 10:\
 case 12:case 14:case 18:case 20:\
 case 22:case 26:case 28:case 30:\
 case 34:case 36:case 38:case 42:\
 case 44:case 46:case 50:case 52:\
 case 54:case 58:case 60:case 62:\
 case 66:case 68:case 70:case 74:\
 case 76:case 78:case 82:case 84:\
 case 86:case 90:case 92:case 94:\
 case 98:case 100:case 102:case 106:\
 case 108:case 110:case 114:case 116:\
 case 118:case 122:case 124:case 126

/* For cons pairs with non-immediate values in the CAR */
#define scm_tcs_cons_nimcar 0:case 8:case 16:case 24:\
 case 32:case 40:case 48:case 56:\
 case 64:case 72:case 80:case 88:\
 case 96:case 104:case 112:case 120

/* A CONS_GLOC occurs in code.  It's CAR is a pointer to the
 * CDR of a variable.  The low order bits of the CAR are 001.
 * The CDR of the gloc is the code continuation.
 */
#define scm_tcs_cons_gloc 1:case 9:case 17:case 25:\
 case 33:case 41:case 49:case 57:\
 case 65:case 73:case 81:case 89:\
 case 97:case 105:case 113:case 121

#define scm_tcs_closures   3:case 11:case 19:case 27:\
 case 35:case 43:case 51:case 59:\
 case 67:case 75:case 83:case 91:\
 case 99:case 107:case 115:case 123

#define scm_tcs_subrs scm_tc7_asubr:case scm_tc7_subr_0:case scm_tc7_subr_1:case scm_tc7_cxr:\
 case scm_tc7_subr_3:case scm_tc7_subr_2:case scm_tc7_rpsubr:case scm_tc7_subr_1o:\
 case scm_tc7_subr_2o:case scm_tc7_lsubr_2:case scm_tc7_lsubr

#define scm_tcs_symbols scm_tc7_ssymbol:case scm_tc7_msymbol

#define scm_tcs_bignums tc16_bigpos:case tc16_bigneg



/* References to objects are of type SCM.  Values may be non-immediate
 * (pointers) or immediate (encoded, immutable, scalar values that fit
 * in an SCM variable).
 */

typedef long SCM;

/* Cray machines have pointers that are incremented once for each word,
 * rather than each byte, the 3 most significant bits encode the byte
 * within the word.  The following macros deal with this by storing the
 * native Cray pointers like the ones that looks like scm expects.  This
 * is done for any pointers that might appear in the car of a scm_cell, pointers
 * to scm_vector elts, functions, &c are not munged.
 */
#ifdef _UNICOS
#define SCM2PTR(x) ((int)(x) >> 3)
#define PTR2SCM(x) (((SCM)(x)) << 3)
#define SCM_POINTERS_MUNGED
#else
#define SCM2PTR(x) (x)
#define PTR2SCM(x) ((SCM)(x))
#endif /* def _UNICOS */



/* Immediate? Predicates 
 */
#define SCM_IMP(x) 	(6 & (int)(x))
#define SCM_NIMP(x) 	(!SCM_IMP(x))



enum scm_tags
  {
    scm_tc8_char = 0xf4
  };

#define SCM_ITAG8(X)		((int)(X) & 0xff)
#define SCM_MAKE_ITAG8(X, TAG)	(((X)<<8) + TAG)
#define SCM_ITAG8_DATA(X)	((X)>>8)



/* Local Environment Structure
 */
#define SCM_ILOCP(n)		((0xff & (int)(n))==0xfc)
#define SCM_ILOC00		(0x000000fcL)
#define SCM_IDINC		(0x00100000L)
#define SCM_ICDR		(0x00080000L)
#define SCM_IFRINC		(0x00000100L)
#define SCM_IDSTMSK		(-SCM_IDINC)
#define SCM_IFRAME(n) 		((int)((SCM_ICDR-SCM_IFRINC)>>8) & ((int)(n)>>8))
#define SCM_IDIST(n) 		(((unsigned long)(n))>>20)
#define SCM_ICDRP(n) 		(SCM_ICDR & (n))


/* Immediate Symbols, Special Symbols, Flags (various constants).
 */

/* ISYMP tests for ISPCSYM and ISYM */
#define SCM_ISYMP(n) 		((0x187 & (int)(n))==4)

/* IFLAGP tests for ISPCSYM, ISYM and IFLAG */
#define SCM_IFLAGP(n) 		((0x87 & (int)(n))==4)
#define SCM_ISYMNUM(n) 		((int)((n)>>9))
#define SCM_ISYMCHARS(n) 	(scm_isymnames[SCM_ISYMNUM(n)])
#define SCM_MAKSPCSYM(n) 	(((n)<<9)+((n)<<3)+4L)
#define SCM_MAKISYM(n) 		(((n)<<9)+0x74L)
#define SCM_MAKIFLAG(n) 	(((n)<<9)+0x174L)

/* This table must agree with the declarations 
 * in repl.c: {Names of immediate symbols}.
 *
 * These are used only in eval but their values
 * have to be allocated here.
 *
 */

#define SCM_IM_AND		SCM_MAKSPCSYM(0)
#define SCM_IM_BEGIN		SCM_MAKSPCSYM(1)
#define SCM_IM_CASE		SCM_MAKSPCSYM(2)
#define SCM_IM_COND		SCM_MAKSPCSYM(3)
#define SCM_IM_DO		SCM_MAKSPCSYM(4)
#define SCM_IM_IF		SCM_MAKSPCSYM(5)
#define SCM_IM_LAMBDA		SCM_MAKSPCSYM(6)
#define SCM_IM_LET		SCM_MAKSPCSYM(7)
#define SCM_IM_LETSTAR		SCM_MAKSPCSYM(8)
#define SCM_IM_LETREC		SCM_MAKSPCSYM(9)
#define SCM_IM_OR		SCM_MAKSPCSYM(10)
#define SCM_IM_QUOTE		SCM_MAKSPCSYM(11)
#define SCM_IM_SET		SCM_MAKSPCSYM(12)
#define SCM_IM_DEFINE		SCM_MAKSPCSYM(13)
#define SCM_IM_APPLY		SCM_MAKISYM(14)
#define SCM_IM_CONT		SCM_MAKISYM(15)
#define SCM_NUM_ISYMS 16

/* Important immediates
 */

#define SCM_BOOL_F		SCM_MAKIFLAG(SCM_NUM_ISYMS+0)
#define SCM_BOOL_T 		SCM_MAKIFLAG(SCM_NUM_ISYMS+1)
#define SCM_UNDEFINED	 	SCM_MAKIFLAG(SCM_NUM_ISYMS+2)
#define SCM_EOF_VAL 		SCM_MAKIFLAG(SCM_NUM_ISYMS+3)

#ifdef SICP
#define SCM_EOL 		SCM_BOOL_F
#else
#define SCM_EOL			SCM_MAKIFLAG(SCM_NUM_ISYMS+4)
#endif

#define SCM_UNSPECIFIED		SCM_MAKIFLAG(SCM_NUM_ISYMS+5)



/* Heap Pairs and the Empty List Predicates
 */
#define SCM_NULLP(x) 	(SCM_EOL == (x))
#define SCM_NNULLP(x) 	(SCM_EOL != (x))
#define SCM_CELLP(x) 	(!SCM_NCELLP(x))
#define SCM_NCELLP(x) 	((sizeof(scm_cell)-1) & (int)(x))



#define SCM_UNBNDP(x) 	(SCM_UNDEFINED==(x))



/* Testing and Changing GC Marks in Various Standard Positions
 */
#define SCM_GCMARKP(x) 		(1 & (int)SCM_CDR(x))
#define SCM_GC8MARKP(x) 	(0x80 & (int)SCM_CAR(x))
#define SCM_SETGCMARK(x) 	(SCM_CDR(x) |= 1)
#define SCM_CLRGCMARK(x) 	(SCM_CDR(x) &= ~1L)
#define SCM_SETGC8MARK(x) 	(SCM_CAR(x) |= 0x80)
#define SCM_CLRGC8MARK(x) 	(SCM_CAR(x) &= ~0x80L)


/* Extracting Tag Bits, With or Without GC Safety and Optional Bits
 */
#define SCM_TYP3(x) 		(7 & (int)SCM_CAR(x))
#define SCM_TYP7(x) 		(0x7f & (int)SCM_CAR(x))
#define SCM_TYP7S(x) 		(0x7d & (int)SCM_CAR(x))
#define SCM_TYP16(x) 		(0xffff & (int)SCM_CAR(x))
#define SCM_TYP16S(x) 		(0xfeff & (int)SCM_CAR(x))
#define SCM_GCTYP16(x) 		(0xff7f & (int)SCM_CAR(x))


/* Two slightly extensible types: smobs and ptobs.

 */
#define SCM_SMOBNUM(x) (0x0ff & (CAR(x)>>8));
#define SCM_PTOBNUM(x) (0x0ff & (CAR(x)>>8));




#define SCM_DIRP(x) (SCM_NIMP(x) && (TYP16(x)==(scm_tc16_dir)))
#define SCM_OPDIRP(x) (SCM_NIMP(x) && (CAR(x)==(scm_tc16_dir | OPN)))



/* Lvectors 
 */
#define SCM_LVECTORP(x) (TYP7(x)==tc7_lvector)


#if 0

/* Sockets 
 */
#define tc_socket (tc7_port | OPN)
#define SCM_SOCKP(x) (((0x7f | OPN | RDNG | WRTNG) & CAR(x))==(tc_socket))
#define SCM_SOCKTYP(x) (CAR(x)>>24)



extern int scm_tc16_key_vector;
#define SCM_KEYVECP(X)   (scm_tc16_key_vector == TYP16 (X))
#define SCM_KEYVECLEN(OBJ) (((unsigned long)CAR (obj)) >> 16)


#define SCM_MALLOCDATA(obj) ((char *)CDR(obj))
#define SCM_MALLOCLEN(obj) (((unsigned long)CAR (obj)) >> 16)
#define SCM_WORDDATA(obj)  (CDR (obj))


#define SCM_BYTECODEP(X) ((TYP7 (X) == tc7_cclo) && (CCLO_SUBR (X) == rb_proc))
#define SCM_BYTECODE_CONSTANTS(X) (VELTS(X)[1])
#define SCM_BYTECODE_CODE(X) (VELTS(X)[2])
#define SCM_BYTECODE_NAME(X) (VELTS(X)[3])
#define SCM_BYTECODE_BCODE(X) (VELTS(X)[4])
#define SCM_BYTECODE_ELTS 5


#define SCM_FREEP(x) (CAR(x)==tc_free_cell)
#define SCM_NFREEP(x) (!FREEP(x))

#endif /* 0 */

#ifdef __STDC__

#else /* STDC */

#endif /* STDC */


#endif /* TAGSH */
