• Lars Brinkhoff's avatar
    Add record objects with user-defined types. · a2c33430
    Lars Brinkhoff authored
    * src/alloc.c (allocate_record): New function.
    (Fmake_record, Frecord, Fcopy_record): New functions.
    (syms_of_alloc): defsubr them.
    (purecopy): Work with records.
    
    * src/data.c (Ftype_of): Return slot 0 for record objects, or type
    name if record's type holds class.
    (Frecordp): New function.
    (syms_of_data): defsubr it.  Define `Qrecordp'.
    (Faref, Faset): Work with records.
    
    * src/fns.c (Flength): Work with records.
    
    * src/lisp.h (prec_type): Add PVEC_RECORD.
    (RECORDP, CHECK_RECORD, CHECK_RECORD_TYPE): New functions.
    
    * src/lread.c (read1): Add syntax for records.
    
    * src/print.c (PRINT_CIRCLE_CANDIDATE_P): Add RECORDP.
    (print_object): Add syntax for records.
    
    * test/lisp/emacs-lisp/cl-print-tests.el (cl-print-tests-2):
    New test.
    
    * test/src/alloc-tests.el (record-1, record-2, record-3):
    New tests.
    
    * doc/lispref/elisp.texi, doc/lispref/objects.texi,
    doc/lispref/records.texi: Add documentation for records.
    a2c33430
lread.c 142 KB