/* quote.c by Michael Thorpe 2009-05-19 */ #include #include "lisp.h" static void drop_quote(obj *o) { DECREF(o->value.o); } static obj *quote_tostring(obj *in) { obj *out,*s; s=(in->value.o->type->tostring)(INCREF(in->value.o)); DECREF(in); if(s) { out=new_string(0,s->value.s.len+1); if(out) { out->value.s.data[0]='\''; memcpy(out->value.s.data+1,s->value.s.data,s->value.s.len); } DECREF(s); return(out); } return(s); } obj *quoteobj(obj *o) { obj *q; q=new_object("e_objtype); if(!q) { DECREF(o); return(0); } q->value.o=o; return(q); } obj *unquote(obj *o) { obj *out; if("e_objtype != o->type) return(throwargumenterror(o)); out=INCREF(o->value.o); DECREF(o); return(out); } objtype quote_objtype={ name: "quote", tostring: quote_tostring, dropobj: drop_quote, };