home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
mitsch75.zip
/
scheme-7_5_17-src.zip
/
scheme-7.5.17
/
src
/
microcode
/
hunk.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-01-02
|
4KB
|
127 lines
/* -*-C-*-
$Id: hunk.c,v 9.29 1999/01/02 06:11:34 cph Exp $
Copyright (c) 1987-1999 Massachusetts Institute of Technology
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 of the License, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* Support for Hunk3s (triples) */
#include "scheme.h"
#include "prims.h"
SCHEME_OBJECT
DEFUN (hunk3_cons,
(cxr0, cxr1, cxr2),
SCHEME_OBJECT cxr0
AND SCHEME_OBJECT cxr1
AND SCHEME_OBJECT cxr2)
{
Primitive_GC_If_Needed (3);
(*Free++) = cxr0;
(*Free++) = cxr1;
(*Free++) = cxr2;
return (MAKE_POINTER_OBJECT (TC_HUNK3, (Free - 3)));
}
DEFINE_PRIMITIVE ("HUNK3-CONS", Prim_hunk3_cons, 3, 3, 0)
{
PRIMITIVE_HEADER (3);
PRIMITIVE_RETURN (hunk3_cons ((ARG_REF (1)), (ARG_REF (2)), (ARG_REF (3))));
}
DEFINE_PRIMITIVE ("HUNK3-CXR", Prim_hunk3_cxr, 2, 2, 0)
{
PRIMITIVE_HEADER (2);
CHECK_ARG (1, HUNK3_P);
PRIMITIVE_RETURN (MEMORY_REF ((ARG_REF (1)), (arg_index_integer (2, 3))));
}
DEFINE_PRIMITIVE ("HUNK3-SET-CXR!", Prim_hunk3_set_cxr, 3, 3, 0)
{
PRIMITIVE_HEADER (3);
CHECK_ARG (1, HUNK3_P);
{
fast SCHEME_OBJECT hunk3 = (ARG_REF (1));
fast long index = (arg_index_integer (2, 3));
fast SCHEME_OBJECT object = (ARG_REF (3));
SIDE_EFFECT_IMPURIFY (hunk3, object);
MEMORY_SET (hunk3, index, object);
}
PRIMITIVE_RETURN (UNSPECIFIC);
}
#define ARG_GC_TRIPLE(arg_number) \
(((GC_Type (ARG_REF (arg_number))) == GC_Triple) \
? (ARG_REF (arg_number)) \
: ((error_wrong_type_arg (arg_number)), ((SCHEME_OBJECT) 0)))
DEFINE_PRIMITIVE ("SYSTEM-HUNK3-CXR0", Prim_sys_h3_0, 1, 1, 0)
{
PRIMITIVE_HEADER (1);
PRIMITIVE_RETURN (MEMORY_REF ((ARG_GC_TRIPLE (1)), 0));
}
DEFINE_PRIMITIVE ("SYSTEM-HUNK3-CXR1", Prim_sys_h3_1, 1, 1, 0)
{
PRIMITIVE_HEADER (1);
PRIMITIVE_RETURN (MEMORY_REF ((ARG_GC_TRIPLE (1)), 1));
}
DEFINE_PRIMITIVE ("SYSTEM-HUNK3-CXR2", Prim_sys_h3_2, 1, 1, 0)
{
PRIMITIVE_HEADER (1);
PRIMITIVE_RETURN (MEMORY_REF ((ARG_GC_TRIPLE (1)), 2));
}
DEFINE_PRIMITIVE ("SYSTEM-HUNK3-SET-CXR0!", Prim_sh3_set_0, 2, 2, 0)
{
PRIMITIVE_HEADER (2);
{
SCHEME_OBJECT hunk3 = (ARG_GC_TRIPLE (1));
SCHEME_OBJECT object = (ARG_REF (2));
SIDE_EFFECT_IMPURIFY (hunk3, object);
MEMORY_SET (hunk3, 0, object);
}
PRIMITIVE_RETURN (UNSPECIFIC);
}
DEFINE_PRIMITIVE ("SYSTEM-HUNK3-SET-CXR1!", Prim_sh3_set_1, 2, 2, 0)
{
PRIMITIVE_HEADER (2);
{
SCHEME_OBJECT hunk3 = (ARG_GC_TRIPLE (1));
SCHEME_OBJECT object = (ARG_REF (2));
SIDE_EFFECT_IMPURIFY (hunk3, object);
MEMORY_SET (hunk3, 1, object);
}
PRIMITIVE_RETURN (UNSPECIFIC);
}
DEFINE_PRIMITIVE ("SYSTEM-HUNK3-SET-CXR2!", Prim_sh3_set_2, 2, 2, 0)
{
PRIMITIVE_HEADER (2);
{
SCHEME_OBJECT hunk3 = (ARG_GC_TRIPLE (1));
SCHEME_OBJECT object = (ARG_REF (2));
SIDE_EFFECT_IMPURIFY (hunk3, object);
MEMORY_SET (hunk3, 2, object);
}
PRIMITIVE_RETURN (UNSPECIFIC);
}