29 |
#define dcheck_vs do{if (vs_base < vs_org || vs_top < vs_org) error("bad vs");} while (0) |
#define dcheck_vs do{if (vs_base < vs_org || vs_top < vs_org) error("bad vs");} while (0) |
30 |
#define dcheck_type(a,b) check_type(a,b) ; dcheck_vs |
#define dcheck_type(a,b) check_type(a,b) ; dcheck_vs |
31 |
|
|
32 |
#define PADDR(i) ((char *)(long)(sSPinit->s.s_dbind->v.v_self[fix(i)])) |
#define PADDR(i) ((void *)(long)(sSPinit->s.s_dbind->v.v_self[fix(i)])) |
33 |
object sSPinit,sSPmemory; |
object sSPinit,sSPmemory; |
34 |
|
|
35 |
object |
object |
36 |
make_cfun(self, name, data, start, size) |
make_cfun(void (*self)(), object name, object data, char *start, int size) |
|
int (*self)(); |
|
|
object name, data; |
|
|
char *start; |
|
|
int size; |
|
37 |
{ |
{ |
38 |
object cf; |
object cf; |
39 |
|
|
48 |
return(cf); |
return(cf); |
49 |
} |
} |
50 |
object |
object |
51 |
make_sfun(name,self,argd, data) |
make_sfun(object name, object (*self)(), int argd, object data) |
52 |
int argd; |
|
53 |
int (*self)(); |
|
54 |
/* object (*self)(); */ |
/* object (*self)(); */ |
55 |
object name, data; |
|
56 |
{object sfn; |
{object sfn; |
57 |
|
|
58 |
sfn = alloc_object(t_sfun); |
sfn = alloc_object(t_sfun); |
68 |
#define VFUN_MAX_ARGS(argd) ((argd) >> 8) |
#define VFUN_MAX_ARGS(argd) ((argd) >> 8) |
69 |
|
|
70 |
object |
object |
71 |
make_vfun(name,self,argd, data) |
make_vfun(object name, object (*self)(), int argd, object data) |
|
int (*self)(),argd; |
|
|
object name, data; |
|
72 |
{object vfn; |
{object vfn; |
73 |
|
|
74 |
vfn = alloc_object(t_vfun); |
vfn = alloc_object(t_vfun); |
81 |
} |
} |
82 |
|
|
83 |
object |
object |
84 |
make_cclosure_new(self, name, env, data) |
make_cclosure_new(void (*self)(), object name, object env, object data) |
|
int (*self)(); |
|
|
object name, env, data; |
|
85 |
{ |
{ |
86 |
object cc; |
object cc; |
87 |
|
|
96 |
|
|
97 |
|
|
98 |
object |
object |
99 |
make_cclosure(self, name, env, data, start, size) |
make_cclosure(void (*self)(), object name, object env, object data, char *start, int size) |
|
int (*self)(); |
|
|
object name, env, data; |
|
|
char *start; |
|
|
int size; |
|
100 |
{ |
{ |
101 |
if(data && type_of(data)==t_cfdata) |
if(data && type_of(data)==t_cfdata) |
102 |
{ data->cfd.cfd_start=start; |
{ data->cfd.cfd_start=start; |
120 |
} |
} |
121 |
|
|
122 |
object |
object |
123 |
MFsfun(sym,self,argd,data) |
MFsfun(object sym, object (*self)(), int argd, object data) |
|
object sym,data; |
|
|
int argd,(*self)(); |
|
124 |
{object sfn; |
{object sfn; |
125 |
if (type_of(sym)!=t_symbol) not_a_symbol(sym); |
if (type_of(sym)!=t_symbol) not_a_symbol(sym); |
126 |
if (sym->s.s_sfdef != NOT_SPECIAL && sym->s.s_mflag) |
if (sym->s.s_sfdef != NOT_SPECIAL && sym->s.s_mflag) |
129 |
sym = clear_compiler_properties(sym,sfn); |
sym = clear_compiler_properties(sym,sfn); |
130 |
sym->s.s_gfdef = sfn; |
sym->s.s_gfdef = sfn; |
131 |
sym->s.s_mflag = FALSE; |
sym->s.s_mflag = FALSE; |
132 |
|
return sym; |
133 |
} |
} |
134 |
|
|
135 |
DEFUNO("MFSFUN",object,fSmfsfun,SI |
DEFUNO("MFSFUN",object,fSmfsfun,SI |
137 |
object name,address,argd; |
object name,address,argd; |
138 |
{ /* 3 args */ |
{ /* 3 args */ |
139 |
dcheck_type(address,t_fixnum); |
dcheck_type(address,t_fixnum); |
140 |
MFsfun(name,PADDR(address),fix(argd),sSPmemory->s.s_dbind);RETURN1(name); |
return MFsfun(name,PADDR(address),fix(argd),sSPmemory->s.s_dbind);RETURN1(name); |
141 |
} |
} |
142 |
|
|
143 |
|
|
144 |
object |
object |
145 |
MFvfun(sym,self,argd,data) |
MFvfun(object sym, object (*self)(), int argd, object data) |
|
object sym,data; |
|
|
int argd,(*self)(); |
|
146 |
{object vfn; |
{object vfn; |
147 |
if (type_of(sym)!=t_symbol) not_a_symbol(sym); |
if (type_of(sym)!=t_symbol) not_a_symbol(sym); |
148 |
if (sym->s.s_sfdef != NOT_SPECIAL && sym->s.s_mflag) |
if (sym->s.s_sfdef != NOT_SPECIAL && sym->s.s_mflag) |
152 |
sym = clear_compiler_properties(sym,vfn); |
sym = clear_compiler_properties(sym,vfn); |
153 |
sym->s.s_gfdef = vfn; |
sym->s.s_gfdef = vfn; |
154 |
sym->s.s_mflag = FALSE; |
sym->s.s_mflag = FALSE; |
155 |
|
return sym; |
156 |
} |
} |
157 |
|
|
158 |
DEFUNO("MFVFUN",object,fSmfvfun,SI |
DEFUNO("MFVFUN",object,fSmfvfun,SI |
166 |
|
|
167 |
|
|
168 |
object |
object |
169 |
MFvfun_key(sym,self,argd,data,keys) |
MFvfun_key(object sym, object (*self)(), int argd, object data, struct key *keys) |
|
object sym,data; |
|
|
int argd,(*self)(); |
|
|
char *keys; |
|
170 |
{if (data) set_key_struct(keys,data); |
{if (data) set_key_struct(keys,data); |
171 |
return MFvfun(sym,self,argd,data); |
return MFvfun(sym,self,argd,data); |
172 |
} |
} |
180 |
} |
} |
181 |
|
|
182 |
|
|
183 |
object MFnew(sym,self,data) |
object MFnew(object sym, void (*self)(), object data) |
|
object sym,data; |
|
|
int (*self)(); |
|
184 |
{ |
{ |
185 |
object cf; |
object cf; |
186 |
|
|
195 |
sym = clear_compiler_properties(sym,cf); |
sym = clear_compiler_properties(sym,cf); |
196 |
sym->s.s_gfdef = cf; |
sym->s.s_gfdef = cf; |
197 |
sym->s.s_mflag = FALSE; |
sym->s.s_mflag = FALSE; |
198 |
|
return sym; |
199 |
} |
} |
200 |
|
|
201 |
DEFUNO("MF",object,fSmf,SI |
DEFUNO("MF",object,fSmf,SI |
208 |
|
|
209 |
|
|
210 |
object |
object |
211 |
MF(sym, self, start, size, data) |
MF(object sym, void (*self)(), char *start, int size, object data) |
|
object sym; |
|
|
int (*self)(); |
|
|
char *start; |
|
|
int size; |
|
|
object data; |
|
212 |
{ if(data && type_of(data)==t_cfdata) |
{ if(data && type_of(data)==t_cfdata) |
213 |
{ data->cfd.cfd_start=start; |
{ data->cfd.cfd_start=start; |
214 |
data->cfd.cfd_size=size;} |
data->cfd.cfd_size=size;} |
217 |
} |
} |
218 |
|
|
219 |
object |
object |
220 |
MM(sym, self, start, size, data) |
MM(object sym, void (*self)(), char *start, int size, object data) |
|
object sym; |
|
|
int (*self)(); |
|
|
char *start; |
|
|
int size; |
|
|
object data; |
|
221 |
{ |
{ |
222 |
object cf; |
object cf; |
223 |
|
|
234 |
sym = clear_compiler_properties(sym,cf); |
sym = clear_compiler_properties(sym,cf); |
235 |
sym->s.s_gfdef = cf; |
sym->s.s_gfdef = cf; |
236 |
sym->s.s_mflag = TRUE; |
sym->s.s_mflag = TRUE; |
237 |
|
return sym; |
238 |
} |
} |
239 |
|
|
240 |
DEFUNO("MM",object,fSmm,SI |
DEFUNO("MM",object,fSmm,SI |
252 |
|
|
253 |
|
|
254 |
object |
object |
255 |
make_function(s, f) |
make_function(char *s, void (*f)()) |
|
char *s; |
|
|
int (*f)(); |
|
256 |
{ |
{ |
257 |
object x; |
object x; |
258 |
vs_mark; |
vs_mark; |
266 |
} |
} |
267 |
|
|
268 |
object |
object |
269 |
make_si_sfun(s, f,argd) |
make_si_sfun(char *s, object (*f) (), int argd) { |
270 |
char *s; |
object x= make_si_ordinary(s); |
271 |
int (*f)(); |
x->s.s_gfdef = make_sfun( x,f,argd, Cnil); |
272 |
int argd; |
x->s.s_mflag = FALSE; |
273 |
{ object x= make_si_ordinary(s); |
return(x); |
|
x->s.s_gfdef = make_sfun( x,f,argd, Cnil); |
|
|
x->s.s_mflag = FALSE; |
|
|
return(x); |
|
274 |
} |
} |
275 |
|
|
276 |
object |
object |
277 |
make_si_vfun1(s, f,argd) |
make_si_vfun1(char *s, object (*f)(), int argd) |
|
char *s; |
|
|
int (*f)(); |
|
|
int argd; |
|
278 |
{ object x= make_si_ordinary(s); |
{ object x= make_si_ordinary(s); |
279 |
x->s.s_gfdef = make_vfun( x,f,argd, Cnil); |
x->s.s_gfdef = make_vfun( x,f,argd, Cnil); |
280 |
x->s.s_mflag = FALSE; |
x->s.s_mflag = FALSE; |
283 |
|
|
284 |
|
|
285 |
object |
object |
286 |
make_si_function(s, f) |
make_si_function(char *s, void (*f)()) |
|
char *s; |
|
|
int (*f)(); |
|
287 |
{ |
{ |
288 |
object x; |
object x; |
289 |
vs_mark; |
vs_mark; |
300 |
|
|
301 |
|
|
302 |
object |
object |
303 |
make_special_form(s, f) |
make_special_form(char *s, void (*f)()) |
|
char *s; |
|
|
int (*f)(); |
|
304 |
{ |
{ |
305 |
object x; |
object x; |
306 |
x = make_ordinary(s); |
x = make_ordinary(s); |
328 |
}RETURN1(fun); |
}RETURN1(fun); |
329 |
} |
} |
330 |
|
|
331 |
turbo_closure(fun) |
void |
332 |
object fun; |
turbo_closure(object fun) |
333 |
{ |
{ |
334 |
object l,*block; |
object l,*block; |
335 |
object endp_temp; |
object endp_temp; |
360 |
|
|
361 |
|
|
362 |
|
|
363 |
init_cfun() |
void |
364 |
|
init_cfun(void) |
365 |
{ |
{ |
366 |
|
|
367 |
} |
} |