/* -*-C-*-
-$Id: interp.c,v 9.70 1992/10/27 01:25:01 jinx Exp $
+$Id: interp.c,v 9.71 1992/12/02 18:34:52 cph Exp $
Copyright (c) 1988-1992 Massachusetts Institute of Technology
\f
/* Interpret(), continued */
+ case TC_RECORD:
+ {
+ SCHEME_OBJECT record_type = (VECTOR_REF (Function, 0));
+ if ((RECORD_P (record_type))
+ && ((VECTOR_LENGTH (record_type)) >= 2)
+ && ((VECTOR_REF (record_type, 1)) != SHARP_F)
+ && ((VECTOR_REF (record_type, 1)) != Function))
+ {
+ SCHEME_OBJECT nargs_object = (STACK_POP ());
+ STACK_PUSH (VECTOR_REF (record_type, 1));
+ STACK_PUSH
+ (MAKE_OBJECT ((OBJECT_TYPE (nargs_object)),
+ ((OBJECT_DATUM (nargs_object)) + 1)));
+ Stack_Check (Stack_Pointer);
+ goto Internal_Apply;
+ }
+ else
+ goto internal_apply_inapplicable;
+ }
+
case TC_PROCEDURE:
{
fast long nargs;
}
default:
+ internal_apply_inapplicable:
Apply_Error (ERR_INAPPLICABLE_OBJECT);
} /* End of switch in RC_INTERNAL_APPLY */
} /* End of RC_INTERNAL_APPLY case */
/* -*-C-*-
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/vector.c,v 9.34 1991/10/29 22:55:11 jinx Exp $
+$Id: vector.c,v 9.35 1992/12/02 18:34:46 cph Exp $
-Copyright (c) 1987-1991 Massachusetts Institute of Technology
+Copyright (c) 1987-92 Massachusetts Institute of Technology
This material was developed by the Scheme project at the Massachusetts
Institute of Technology, Department of Electrical Engineering and
? (ARG_REF (argument_number)) \
: ((error_wrong_type_arg (argument_number)), ((SCHEME_OBJECT) 0)))
+#define ARG_RECORD(argument_number) \
+ ((RECORD_P (ARG_REF (argument_number))) \
+ ? (ARG_REF (argument_number)) \
+ : ((error_wrong_type_arg (argument_number)), ((SCHEME_OBJECT) 0)))
+
#define ARG_VECTOR_INDEX(argument_number, vector) \
(arg_index_integer (argument_number, (VECTOR_LENGTH (vector))))
}
}
+DEFINE_PRIMITIVE ("%RECORD", Prim_record, 0, LEXPR, 0)
+{
+ PRIMITIVE_HEADER (LEXPR);
+ {
+ long nargs = (LEXPR_N_ARGUMENTS ());
+ if (nargs < 1)
+ signal_error_from_primitive (ERR_WRONG_NUMBER_OF_ARGUMENTS);
+ {
+ SCHEME_OBJECT result = (allocate_marked_vector (TC_RECORD, nargs, true));
+ fast SCHEME_OBJECT * argument_scan = (ARG_LOC (1));
+ fast SCHEME_OBJECT * argument_limit = (ARG_LOC (nargs + 1));
+ fast SCHEME_OBJECT * result_scan = (VECTOR_LOC (result, 0));
+ while (argument_scan != argument_limit)
+ (*result_scan++) = (STACK_LOCATIVE_POP (argument_scan));
+ PRIMITIVE_RETURN (result);
+ }
+ }
+}
+
DEFINE_PRIMITIVE ("SYSTEM-VECTOR?", Prim_sys_vector, 1, 1, 0)
{
fast SCHEME_OBJECT object;
TOUCH_IN_PRIMITIVE ((ARG_REF (1)), object);
PRIMITIVE_RETURN (BOOLEAN_TO_OBJECT (GC_VECTOR_P (object)));
}
-
+\f
#define VECTOR_LENGTH_PRIMITIVE(arg_type) \
{ \
fast SCHEME_OBJECT vector; \
PRIMITIVE_RETURN (long_to_integer (VECTOR_LENGTH (vector))); \
}
-DEFINE_PRIMITIVE ("VECTOR-LENGTH", Prim_vector_size, 1, 1, 0)
+DEFINE_PRIMITIVE ("VECTOR-LENGTH", Prim_vector_length, 1, 1, 0)
VECTOR_LENGTH_PRIMITIVE (ARG_VECTOR)
+DEFINE_PRIMITIVE ("%RECORD-LENGTH", Prim_record_length, 1, 1, 0)
+ RECORD_LENGTH_PRIMITIVE (ARG_RECORD)
+
DEFINE_PRIMITIVE ("SYSTEM-VECTOR-SIZE", Prim_sys_vec_size, 1, 1, 0)
VECTOR_LENGTH_PRIMITIVE (ARG_GC_VECTOR)
DEFINE_PRIMITIVE ("VECTOR-REF", Prim_vector_ref, 2, 2, 0)
VECTOR_REF_PRIMITIVE (ARG_VECTOR)
+DEFINE_PRIMITIVE ("%RECORD-REF", Prim_record_ref, 2, 2, 0)
+ RECORD_REF_PRIMITIVE (ARG_RECORD)
+
DEFINE_PRIMITIVE ("SYSTEM-VECTOR-REF", Prim_sys_vector_ref, 2, 2, 0)
VECTOR_REF_PRIMITIVE (ARG_GC_VECTOR)
DEFINE_PRIMITIVE ("VECTOR-SET!", Prim_vector_set, 3, 3, 0)
VECTOR_SET_PRIMITIVE (ARG_VECTOR)
+DEFINE_PRIMITIVE ("%RECORD-SET!", Prim_record_set, 3, 3, 0)
+ RECORD_SET_PRIMITIVE (ARG_RECORD)
+
DEFINE_PRIMITIVE ("SYSTEM-VECTOR-SET!", Prim_sys_vec_set, 3, 3, 0)
VECTOR_SET_PRIMITIVE (ARG_GC_VECTOR)
\f
/* -*-C-*-
-$Id: interp.c,v 9.70 1992/10/27 01:25:01 jinx Exp $
+$Id: interp.c,v 9.71 1992/12/02 18:34:52 cph Exp $
Copyright (c) 1988-1992 Massachusetts Institute of Technology
\f
/* Interpret(), continued */
+ case TC_RECORD:
+ {
+ SCHEME_OBJECT record_type = (VECTOR_REF (Function, 0));
+ if ((RECORD_P (record_type))
+ && ((VECTOR_LENGTH (record_type)) >= 2)
+ && ((VECTOR_REF (record_type, 1)) != SHARP_F)
+ && ((VECTOR_REF (record_type, 1)) != Function))
+ {
+ SCHEME_OBJECT nargs_object = (STACK_POP ());
+ STACK_PUSH (VECTOR_REF (record_type, 1));
+ STACK_PUSH
+ (MAKE_OBJECT ((OBJECT_TYPE (nargs_object)),
+ ((OBJECT_DATUM (nargs_object)) + 1)));
+ Stack_Check (Stack_Pointer);
+ goto Internal_Apply;
+ }
+ else
+ goto internal_apply_inapplicable;
+ }
+
case TC_PROCEDURE:
{
fast long nargs;
}
default:
+ internal_apply_inapplicable:
Apply_Error (ERR_INAPPLICABLE_OBJECT);
} /* End of switch in RC_INTERNAL_APPLY */
} /* End of RC_INTERNAL_APPLY case */