70
|
1 #include "fakelisp.h"
|
|
2
|
|
3 void *Lisp_Object_Table[4096];
|
|
4 int Lisp_Object_Index = 0;
|
|
5
|
|
6 Lisp_Object
|
|
7 make_vector(len)
|
|
8 int len;
|
|
9 {
|
|
10 Lisp_Object val = Lisp_Object_Index++;
|
|
11
|
|
12 Lisp_Object_Table[val] = (char *) malloc (sizeof (struct Lisp_Vector));
|
|
13 XVECTOR (val)->size = len;
|
|
14 XVECTOR (val)->contents =
|
|
15 (Lisp_Object *) malloc ((sizeof (Lisp_Object)) * len);
|
|
16 return (val | (Lisp_Vector << VALBITS));
|
|
17 }
|
|
18
|
|
19 Lisp_Object
|
|
20 make_string(str)
|
|
21 char *str;
|
|
22 {
|
|
23 Lisp_Object val = Lisp_Object_Index++;
|
|
24 int len = strlen (str);
|
|
25
|
|
26 Lisp_Object_Table[val] = (char *) malloc (sizeof (struct Lisp_String));
|
|
27 XSTRING (val)->size = len;
|
|
28 XSTRING (val)->data = (unsigned char *) malloc (len + 1);
|
|
29 memcpy (XSTRING (val)->data, str, len + 1);
|
|
30 return (val | (Lisp_String << VALBITS));
|
|
31 }
|
|
32
|
|
33 Lisp_Object
|
|
34 make_symbol(name)
|
|
35 char *name;
|
|
36 {
|
|
37 Lisp_Object val = Lisp_Object_Index++;
|
|
38 int len = strlen (name);
|
|
39
|
|
40 Lisp_Object_Table[val] = (char *) malloc (sizeof (struct Lisp_Symbol));
|
|
41 XSYMBOL (val)->name = (unsigned char *) malloc (len + 1);
|
|
42 memcpy (XSYMBOL (val)->name, name, len + 1);
|
|
43 XSYMBOL (val)->value = Qnil;
|
|
44 return (val | (Lisp_String << VALBITS));
|
|
45 }
|
|
46
|
|
47 Lisp_Object
|
|
48 Fsymbol_value(obj)
|
|
49 Lisp_Object obj;
|
|
50 {
|
|
51 return XSYMBOL (obj)->value;
|
|
52 }
|