Added a header and a separate object file for C[AD]+R operation, automatically generated from src/util/gen-code.lsp

This commit is contained in:
Juan Jose Garcia Ripoll 2011-12-03 20:16:45 +01:00
parent 27c01f4847
commit d5f090e81e
10 changed files with 1562 additions and 96 deletions

View file

@ -67,7 +67,7 @@ HFILES = ..\ecl\config.h ..\ecl\atomic_ops.h $(HDIR)\ecl.h $(HDIR)\ecl-cmp.h\
$(HDIR)\internal.h $(HDIR)\ecl-inl.h $(HDIR)\bytecodes.h \
$(HDIR)\impl\math_dispatch.h
OBJS = main.obj symbol.obj package.obj list.obj\
OBJS = main.obj symbol.obj package.obj cons.obj list.obj\
apply.obj eval.obj interpreter.obj compiler.obj disassembler.obj \
instance.obj gfun.obj reference.obj character.obj\
file.obj read.obj print.obj error.obj string.obj cfun.obj\

View file

@ -38,7 +38,7 @@ HFILES = $(HDIR)/config.h $(HDIR)/ecl.h $(HDIR)/ecl-cmp.h\
$(HDIR)/object.h $(HDIR)/cs.h $(HDIR)/stacks.h\
$(HDIR)/external.h $(HDIR)/eval.h\
$(HDIR)/number.h $(HDIR)/page.h $(HDIR)/unify.h
OBJS = main.o symbol.o package.o list.o\
OBJS = main.o symbol.o package.o cons.o list.o\
apply.o eval.o interpreter.o compiler.o disassembler.o \
instance.o gfun.o reference.o character.o\
file.o read.o print.o error.o string.o cfun.o\

965
src/c/cons.d Normal file
View file

@ -0,0 +1,965 @@
/* -*- mode: c; c-basic-offset: 8 -*- */
/*
cons.d -- list manipulation macros & functions
*/
/*
Copyright (c) 2011, Juan Jose Garcia-Ripoll
ECL is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
See file '../Copyright' for full details.
*/
#include <ecl/ecl.h>
#include <ecl/cons.h>
/* BEGIN-GENERATED (gen-cons-d) */
#if !ECL_CAN_INLINE
cl_object _ecl_car(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_caar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_cadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_caaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_cadar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cddar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_caadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_caddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_caaaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdaaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_cadaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cddaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_caadar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdadar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_caddar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdddar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_caaadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdaadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_cadadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cddadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_caaddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cdaddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object _ecl_cadddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object _ecl_cddddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
#endif /* !ECL_CAN_INLINE */
cl_object ecl_car(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_caar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_cadr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cddr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_caaar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdaar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_cadar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cddar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_caadr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdadr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_caddr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdddr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_caaaar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdaaar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_cadaar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cddaar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_caadar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdadar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_caddar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdddar(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_caaadr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdaadr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_cadadr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cddadr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_caaddr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cdaddr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object ecl_cadddr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
cl_object ecl_cddddr(cl_object x)
{
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
cl_object cl_car(cl_object x)
{
return1(ecl_car(x));
}
cl_object cl_cdr(cl_object x)
{
return1(ecl_cdr(x));
}
cl_object cl_caar(cl_object x)
{
return1(ecl_caar(x));
}
cl_object cl_cdar(cl_object x)
{
return1(ecl_cdar(x));
}
cl_object cl_cadr(cl_object x)
{
return1(ecl_cadr(x));
}
cl_object cl_cddr(cl_object x)
{
return1(ecl_cddr(x));
}
cl_object cl_caaar(cl_object x)
{
return1(ecl_caaar(x));
}
cl_object cl_cdaar(cl_object x)
{
return1(ecl_cdaar(x));
}
cl_object cl_cadar(cl_object x)
{
return1(ecl_cadar(x));
}
cl_object cl_cddar(cl_object x)
{
return1(ecl_cddar(x));
}
cl_object cl_caadr(cl_object x)
{
return1(ecl_caadr(x));
}
cl_object cl_cdadr(cl_object x)
{
return1(ecl_cdadr(x));
}
cl_object cl_caddr(cl_object x)
{
return1(ecl_caddr(x));
}
cl_object cl_cdddr(cl_object x)
{
return1(ecl_cdddr(x));
}
cl_object cl_caaaar(cl_object x)
{
return1(ecl_caaaar(x));
}
cl_object cl_cdaaar(cl_object x)
{
return1(ecl_cdaaar(x));
}
cl_object cl_cadaar(cl_object x)
{
return1(ecl_cadaar(x));
}
cl_object cl_cddaar(cl_object x)
{
return1(ecl_cddaar(x));
}
cl_object cl_caadar(cl_object x)
{
return1(ecl_caadar(x));
}
cl_object cl_cdadar(cl_object x)
{
return1(ecl_cdadar(x));
}
cl_object cl_caddar(cl_object x)
{
return1(ecl_caddar(x));
}
cl_object cl_cdddar(cl_object x)
{
return1(ecl_cdddar(x));
}
cl_object cl_caaadr(cl_object x)
{
return1(ecl_caaadr(x));
}
cl_object cl_cdaadr(cl_object x)
{
return1(ecl_cdaadr(x));
}
cl_object cl_cadadr(cl_object x)
{
return1(ecl_cadadr(x));
}
cl_object cl_cddadr(cl_object x)
{
return1(ecl_cddadr(x));
}
cl_object cl_caaddr(cl_object x)
{
return1(ecl_caaddr(x));
}
cl_object cl_cdaddr(cl_object x)
{
return1(ecl_cdaddr(x));
}
cl_object cl_cadddr(cl_object x)
{
return1(ecl_cadddr(x));
}
cl_object cl_cddddr(cl_object x)
{
return1(ecl_cddddr(x));
}
/* END-GENERATED */

View file

@ -133,22 +133,6 @@ setup_test(struct cl_test *t, cl_object item, cl_object test,
}
}
cl_object
cl_car(cl_object x)
{
if (ecl_unlikely(!LISTP(x)))
FEwrong_type_only_arg(@[car], x, @[list]);
return1(Null(x)? x : ECL_CONS_CAR(x));
}
cl_object
cl_cdr(cl_object x)
{
if (ecl_unlikely(!LISTP(x)))
FEwrong_type_only_arg(@[car], x, @[list]);
return1(Null(x)? x : ECL_CONS_CDR(x));
}
@(defun list (&rest args)
cl_object head = Cnil;
@
@ -231,52 +215,6 @@ ecl_append(cl_object x, cl_object y)
return head;
}
/* Open coded CARs and CDRs */
#define car(foo) \
foo; \
if (ecl_unlikely(!LISTP(x))) goto E; \
if (!Null(x)) x = ECL_CONS_CAR(x);
#define cdr(foo) \
foo; \
if (ecl_unlikely(!LISTP(x))) goto E; \
if (!Null(x)) x = ECL_CONS_CDR(x);
#define defcxr(name, arg, code) \
cl_object cl_##name(cl_object foo) { \
register cl_object arg = foo; \
code; return1(arg); \
E: FEwrong_type_only_arg(@[car],arg,@[list]);}
defcxr(caar, x, car(car(x)))
defcxr(cadr, x, car(cdr(x)))
defcxr(cdar, x, cdr(car(x)))
defcxr(cddr, x, cdr(cdr(x)))
defcxr(caaar, x, car(car(car(x))))
defcxr(caadr, x, car(car(cdr(x))))
defcxr(cadar, x, car(cdr(car(x))))
defcxr(caddr, x, car(cdr(cdr(x))))
defcxr(cdaar, x, cdr(car(car(x))))
defcxr(cdadr, x, cdr(car(cdr(x))))
defcxr(cddar, x, cdr(cdr(car(x))))
defcxr(cdddr, x, cdr(cdr(cdr(x))))
defcxr(caaaar, x, car(car(car(car(x)))))
defcxr(caaadr, x, car(car(car(cdr(x)))))
defcxr(caadar, x, car(car(cdr(car(x)))))
defcxr(caaddr, x, car(car(cdr(cdr(x)))))
defcxr(cadaar, x, car(cdr(car(car(x)))))
defcxr(cadadr, x, car(cdr(car(cdr(x)))))
defcxr(caddar, x, car(cdr(cdr(car(x)))))
defcxr(cadddr, x, car(cdr(cdr(cdr(x)))))
defcxr(cdaaar, x, cdr(car(car(car(x)))))
defcxr(cdaadr, x, cdr(car(car(cdr(x)))))
defcxr(cdadar, x, cdr(car(cdr(car(x)))))
defcxr(cdaddr, x, cdr(car(cdr(cdr(x)))))
defcxr(cddaar, x, cdr(cdr(car(car(x)))))
defcxr(cddadr, x, cdr(cdr(car(cdr(x)))))
defcxr(cdddar, x, cdr(cdr(cdr(car(x)))))
defcxr(cddddr, x, cdr(cdr(cdr(cdr(x)))))
#undef car
#undef cdr
#define LENTH(n) (cl_object x) {\
return1(ecl_nth(n, x));\
}

View file

@ -226,8 +226,10 @@ typedef unsigned char ecl_base_char;
*/
#if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
#define ECL_INLINE inline
#define ECL_CAN_INLINE 1
#else
#define ECL_INLINE
#define ECL_CAN_INLINE 0
#endif
#if !defined(__GNUC__)

474
src/h/cons.h Normal file
View file

@ -0,0 +1,474 @@
/* -*- mode: c; c-basic-offset: 8 -*- */
/*
cons.h -- list manipulation macros & functions
*/
/*
Copyright (c) 2011, Juan Jose Garcia-Ripoll
ECL is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
See file '../Copyright' for full details.
*/
#ifndef ECL_CONS_H
#define ECL_CONS_H
#include <ecl/ecl.h>
#ifdef __cplusplus
extern "C" {
#endif
/* BEGIN-GENERATED (gen-cons-h) */
#if ECL_CAN_INLINE
static ECL_INLINE cl_object _ecl_car(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_caar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_caaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cadar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cddar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_caadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_caddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_caaaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdaaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cadaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cddaar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_caadar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdadar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_caddar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdddar(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_caaadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdaadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cadadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cddadr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_caaddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cdaddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cadddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CAR(x);
return x;
}
static ECL_INLINE cl_object _ecl_cddddr(cl_object x)
{
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
if (Null(x)) return x;
x = ECL_CONS_CDR(x);
return x;
}
#else
extern ECL_API cl_object _ecl_car(cl_object);
extern ECL_API cl_object _ecl_cdr(cl_object);
extern ECL_API cl_object _ecl_caar(cl_object);
extern ECL_API cl_object _ecl_cdar(cl_object);
extern ECL_API cl_object _ecl_cadr(cl_object);
extern ECL_API cl_object _ecl_cddr(cl_object);
extern ECL_API cl_object _ecl_caaar(cl_object);
extern ECL_API cl_object _ecl_cdaar(cl_object);
extern ECL_API cl_object _ecl_cadar(cl_object);
extern ECL_API cl_object _ecl_cddar(cl_object);
extern ECL_API cl_object _ecl_caadr(cl_object);
extern ECL_API cl_object _ecl_cdadr(cl_object);
extern ECL_API cl_object _ecl_caddr(cl_object);
extern ECL_API cl_object _ecl_cdddr(cl_object);
extern ECL_API cl_object _ecl_caaaar(cl_object);
extern ECL_API cl_object _ecl_cdaaar(cl_object);
extern ECL_API cl_object _ecl_cadaar(cl_object);
extern ECL_API cl_object _ecl_cddaar(cl_object);
extern ECL_API cl_object _ecl_caadar(cl_object);
extern ECL_API cl_object _ecl_cdadar(cl_object);
extern ECL_API cl_object _ecl_caddar(cl_object);
extern ECL_API cl_object _ecl_cdddar(cl_object);
extern ECL_API cl_object _ecl_caaadr(cl_object);
extern ECL_API cl_object _ecl_cdaadr(cl_object);
extern ECL_API cl_object _ecl_cadadr(cl_object);
extern ECL_API cl_object _ecl_cddadr(cl_object);
extern ECL_API cl_object _ecl_caaddr(cl_object);
extern ECL_API cl_object _ecl_cdaddr(cl_object);
extern ECL_API cl_object _ecl_cadddr(cl_object);
extern ECL_API cl_object _ecl_cddddr(cl_object);
#endif /* !ECL_CAN_INLINE */
extern ECL_API cl_object ecl_car(cl_object);
extern ECL_API cl_object ecl_cdr(cl_object);
extern ECL_API cl_object ecl_caar(cl_object);
extern ECL_API cl_object ecl_cdar(cl_object);
extern ECL_API cl_object ecl_cadr(cl_object);
extern ECL_API cl_object ecl_cddr(cl_object);
extern ECL_API cl_object ecl_caaar(cl_object);
extern ECL_API cl_object ecl_cdaar(cl_object);
extern ECL_API cl_object ecl_cadar(cl_object);
extern ECL_API cl_object ecl_cddar(cl_object);
extern ECL_API cl_object ecl_caadr(cl_object);
extern ECL_API cl_object ecl_cdadr(cl_object);
extern ECL_API cl_object ecl_caddr(cl_object);
extern ECL_API cl_object ecl_cdddr(cl_object);
extern ECL_API cl_object ecl_caaaar(cl_object);
extern ECL_API cl_object ecl_cdaaar(cl_object);
extern ECL_API cl_object ecl_cadaar(cl_object);
extern ECL_API cl_object ecl_cddaar(cl_object);
extern ECL_API cl_object ecl_caadar(cl_object);
extern ECL_API cl_object ecl_cdadar(cl_object);
extern ECL_API cl_object ecl_caddar(cl_object);
extern ECL_API cl_object ecl_cdddar(cl_object);
extern ECL_API cl_object ecl_caaadr(cl_object);
extern ECL_API cl_object ecl_cdaadr(cl_object);
extern ECL_API cl_object ecl_cadadr(cl_object);
extern ECL_API cl_object ecl_cddadr(cl_object);
extern ECL_API cl_object ecl_caaddr(cl_object);
extern ECL_API cl_object ecl_cdaddr(cl_object);
extern ECL_API cl_object ecl_cadddr(cl_object);
extern ECL_API cl_object ecl_cddddr(cl_object);
extern ECL_API cl_object cl_car(cl_object);
extern ECL_API cl_object cl_cdr(cl_object);
extern ECL_API cl_object cl_caar(cl_object);
extern ECL_API cl_object cl_cdar(cl_object);
extern ECL_API cl_object cl_cadr(cl_object);
extern ECL_API cl_object cl_cddr(cl_object);
extern ECL_API cl_object cl_caaar(cl_object);
extern ECL_API cl_object cl_cdaar(cl_object);
extern ECL_API cl_object cl_cadar(cl_object);
extern ECL_API cl_object cl_cddar(cl_object);
extern ECL_API cl_object cl_caadr(cl_object);
extern ECL_API cl_object cl_cdadr(cl_object);
extern ECL_API cl_object cl_caddr(cl_object);
extern ECL_API cl_object cl_cdddr(cl_object);
extern ECL_API cl_object cl_caaaar(cl_object);
extern ECL_API cl_object cl_cdaaar(cl_object);
extern ECL_API cl_object cl_cadaar(cl_object);
extern ECL_API cl_object cl_cddaar(cl_object);
extern ECL_API cl_object cl_caadar(cl_object);
extern ECL_API cl_object cl_cdadar(cl_object);
extern ECL_API cl_object cl_caddar(cl_object);
extern ECL_API cl_object cl_cdddar(cl_object);
extern ECL_API cl_object cl_caaadr(cl_object);
extern ECL_API cl_object cl_cdaadr(cl_object);
extern ECL_API cl_object cl_cadadr(cl_object);
extern ECL_API cl_object cl_cddadr(cl_object);
extern ECL_API cl_object cl_caaddr(cl_object);
extern ECL_API cl_object cl_cdaddr(cl_object);
extern ECL_API cl_object cl_cadddr(cl_object);
extern ECL_API cl_object cl_cddddr(cl_object);
/* END-GENERATED */
#ifdef __cplusplus
}
#endif
#endif /* !ECL_CONS_H */

View file

@ -1,4 +1,8 @@
/* -*- mode: c; c-basic-offset: 8 -*- */
#ifndef ECL_ECL_INL_H
#define ECL_ECL_INL_H
/*
* Loops over a proper list. Complains on circularity
*/
@ -170,3 +174,4 @@ _mm_castsi128_pd(__m128i __A) { return (__m128d) __A; }
#endif /* ECL_SSE2 */
#endif /* !ECL_ECL_INL_H */

View file

@ -14,8 +14,8 @@
See file '../Copyright' for full details.
*/
#ifndef ECL_H
#define ECL_H
#ifndef ECL_ECL_H
#define ECL_ECL_H
#include <sys/types.h> /* size_t, pthread_t, pthread_mutex_t */
#ifdef __OpenBSD__ /* same, but for OpenBSD (bug in OpenBSD!) */
@ -79,6 +79,7 @@
#include <ecl/object.h>
#include <ecl/external.h>
#include <ecl/cons.h>
#include <ecl/stacks.h>
#include <ecl/eval.h>
#include <ecl/number.h>

View file

@ -1,4 +1,7 @@
/* -*- mode: c; c-basic-offset: 8 -*- */
#ifndef ECL_EXTERNAL_H
#define ECL_EXTERNAL_H
#ifdef __cplusplus
extern "C" {
#endif
@ -836,36 +839,6 @@ extern ECL_API cl_object ecl_slot_value_set(cl_object x, const char *slot, cl_ob
/* list.c */
extern ECL_API cl_object cl_car(cl_object x);
extern ECL_API cl_object cl_cdr(cl_object x);
extern ECL_API cl_object cl_caar(cl_object x);
extern ECL_API cl_object cl_cadr(cl_object x);
extern ECL_API cl_object cl_cdar(cl_object x);
extern ECL_API cl_object cl_cddr(cl_object x);
extern ECL_API cl_object cl_caaar(cl_object x);
extern ECL_API cl_object cl_caadr(cl_object x);
extern ECL_API cl_object cl_cadar(cl_object x);
extern ECL_API cl_object cl_caddr(cl_object x);
extern ECL_API cl_object cl_cdaar(cl_object x);
extern ECL_API cl_object cl_cdadr(cl_object x);
extern ECL_API cl_object cl_cddar(cl_object x);
extern ECL_API cl_object cl_cdddr(cl_object x);
extern ECL_API cl_object cl_caaaar(cl_object x);
extern ECL_API cl_object cl_caaadr(cl_object x);
extern ECL_API cl_object cl_caadar(cl_object x);
extern ECL_API cl_object cl_caaddr(cl_object x);
extern ECL_API cl_object cl_cadaar(cl_object x);
extern ECL_API cl_object cl_cadadr(cl_object x);
extern ECL_API cl_object cl_caddar(cl_object x);
extern ECL_API cl_object cl_cadddr(cl_object x);
extern ECL_API cl_object cl_cdaaar(cl_object x);
extern ECL_API cl_object cl_cdaadr(cl_object x);
extern ECL_API cl_object cl_cdadar(cl_object x);
extern ECL_API cl_object cl_cdaddr(cl_object x);
extern ECL_API cl_object cl_cddaar(cl_object x);
extern ECL_API cl_object cl_cddadr(cl_object x);
extern ECL_API cl_object cl_cdddar(cl_object x);
extern ECL_API cl_object cl_cddddr(cl_object x);
#define cl_rest cl_cdr
#define cl_first cl_car
#define cl_second cl_cadr
@ -2227,3 +2200,5 @@ extern ECL_API cl_object si_positive_long_float_p(cl_object);
#ifdef __cplusplus
}
#endif
#endif /* !ECL_EXTERNAL_H */

106
src/util/gen-code.lisp Normal file
View file

@ -0,0 +1,106 @@
;;;
;;; Writing src/h/cons.h and src/c/cons.d
;;;
(defun process-file (filename)
(let* ((filename (merge-pathnames filename))
(name (pathname-name filename))
(input (make-pathname :name (concatenate 'string "bak-" name)
:type (pathname-type filename)
:directory (pathname-directory filename)))
(output filename))
(cond ((not (probe-file filename))
(error "Unable to find ~a" filename))
((probe-file input)
(error "Backup already exists" input))
(t
(format t "~%;;; Renaming ~a -> ~a" filename input)
(rename-file filename input)))
(with-open-file (in input :direction :input)
(with-open-file (out output :direction :output :if-exists :supersede)
(format t "~%;;; Transforming ~a -> ~a" input output)
(loop with skip = nil
for l = (read-line in nil nil nil)
while l
do (cond (skip
(when (search "END-GENERATED" l)
(write-line l out)
(setf skip nil)))
(t
(write-line l out)
(let ((ndx (search "BEGIN-GENERATED" l)))
(when ndx
(let* ((*standard-output* out)
(form-text (subseq l (+ ndx 15)
(- (length l) 2)))
(form (read-from-string form-text)))
(eval form)
(setf skip t)))))))))
(format t "~%;;; Deleting the file ~a" input)
(delete-file input)))
(defun write-rec (depth list flag &optional (prefix ""))
(when (plusp depth)
(write-rec (1- depth) (cons 'a list) flag)
(write-rec (1- depth) (cons 'd list) flag)
(return-from write-rec))
(let* ((string (apply #'concatenate 'string (mapcar #'string-downcase list))))
(case flag
(:inline
(write-rec depth list :unsafe "static ECL_INLINE "))
(:unsafe
(format t "~%~acl_object _ecl_c~ar(cl_object x)~%{" prefix string)
(loop for what in (reverse list)
for op = (if (eq what 'a) "ECL_CONS_CAR" "ECL_CONS_CDR")
do (format t "~% if (Null(x)) return x;~% x = ~A(x);" op))
(format t "~% return x;~%}~%"))
(:safe
(format t "~%cl_object ecl_c~ar(cl_object x)~%{" string)
(loop for what in (reverse list)
for op = (if (eq what 'a) "ECL_CONS_CAR" "ECL_CONS_CDR")
do (format t "~% if (ecl_unlikely(!ECL_LISTP(x))) FEwrong_type_nth_arg(@[car], 1, x, @[list]);")
do (format t "~% if (Null(x)) return x;~% x = ~A(x);" op))
(format t "~% return x;~%}~%"))
(:common-lisp
(format t "~%cl_object cl_c~ar(cl_object x)~%{~% return1(ecl_c~ar(x));~%}~%"
string string))
(:declare-unsafe
(format t "~%extern ECL_API cl_object _ecl_c~ar(cl_object);" string))
(:declare-safe
(format t "~%extern ECL_API cl_object ecl_c~ar(cl_object);" string))
(:declare-common-lisp
(format t "~%extern ECL_API cl_object cl_c~ar(cl_object);" string))
)))
(defun gen-cons-h ()
(format t "~%#if ECL_CAN_INLINE")
(loop for depth from 1 below 5
do (write-rec depth nil :inline))
(format t "~%#else")
(loop for depth from 1 below 5
do (write-rec depth nil :declare-unsafe))
(format t "~%#endif /* !ECL_CAN_INLINE */~%")
(loop for depth from 1 below 5
do (write-rec depth nil :declare-safe))
(terpri)
(loop for depth from 1 below 5
do (write-rec depth nil :declare-common-lisp))
(terpri))
(defun gen-cons-d ()
(format t "~%#if !ECL_CAN_INLINE")
(loop for depth from 1 below 5
do (write-rec depth nil :unsafe))
(format t "~%#endif /* !ECL_CAN_INLINE */~%")
(loop for depth from 1 below 5
do (write-rec depth nil :safe))
(terpri)
(loop for depth from 1 below 5
do (write-rec depth nil :common-lisp))
(terpri))
(process-file "src/c/cons.d")
(process-file "src/h/cons.h")
(terpri)
(ext:quit)