cleanup
This commit is contained in:
		
							parent
							
								
									88092044d7
								
							
						
					
					
						commit
						ce0c737c95
					
				|  | @ -374,7 +374,7 @@ gc_mark_object(pic_state *pic, struct pic_object *obj) | ||||||
|         gc_mark_object(pic, (struct pic_object *)proc->u.i.cxt); |         gc_mark_object(pic, (struct pic_object *)proc->u.i.cxt); | ||||||
|       } |       } | ||||||
|     } else { |     } else { | ||||||
|       gc_mark_object(pic, (struct pic_object *)proc->u.func.name); |       gc_mark_object(pic, (struct pic_object *)proc->u.f.name); | ||||||
|     } |     } | ||||||
|     break; |     break; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -9,12 +9,6 @@ | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| /* native C function */ |  | ||||||
| struct pic_func { |  | ||||||
|   pic_func_t f; |  | ||||||
|   pic_sym *name; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| struct pic_context { | struct pic_context { | ||||||
|   PIC_OBJECT_HEADER |   PIC_OBJECT_HEADER | ||||||
|   pic_value *regs; |   pic_value *regs; | ||||||
|  | @ -25,9 +19,15 @@ struct pic_context { | ||||||
| 
 | 
 | ||||||
| struct pic_proc { | struct pic_proc { | ||||||
|   PIC_OBJECT_HEADER |   PIC_OBJECT_HEADER | ||||||
|   char kind; |   enum { | ||||||
|  |     PIC_PROC_TAG_IREP, | ||||||
|  |     PIC_PROC_TAG_FUNC | ||||||
|  |   } tag; | ||||||
|   union { |   union { | ||||||
|     struct pic_func func; |     struct { | ||||||
|  |       pic_func_t func; | ||||||
|  |       pic_sym *name; | ||||||
|  |     } f; | ||||||
|     struct { |     struct { | ||||||
|       struct pic_irep *irep; |       struct pic_irep *irep; | ||||||
|       struct pic_context *cxt; |       struct pic_context *cxt; | ||||||
|  | @ -35,11 +35,8 @@ struct pic_proc { | ||||||
|   } u; |   } u; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #define PIC_PROC_KIND_FUNC 1 | #define pic_proc_func_p(proc) ((proc)->tag == PIC_PROC_TAG_FUNC) | ||||||
| #define PIC_PROC_KIND_IREP 2 | #define pic_proc_irep_p(proc) ((proc)->tag == PIC_PROC_TAG_IREP) | ||||||
| 
 |  | ||||||
| #define pic_proc_func_p(proc) ((proc)->kind == PIC_PROC_KIND_FUNC) |  | ||||||
| #define pic_proc_irep_p(proc) ((proc)->kind == PIC_PROC_KIND_IREP) |  | ||||||
| 
 | 
 | ||||||
| #define pic_proc_p(o) (pic_type(o) == PIC_TT_PROC) | #define pic_proc_p(o) (pic_type(o) == PIC_TT_PROC) | ||||||
| #define pic_proc_ptr(o) ((struct pic_proc *)pic_ptr(o)) | #define pic_proc_ptr(o) ((struct pic_proc *)pic_ptr(o)) | ||||||
|  |  | ||||||
|  | @ -15,9 +15,9 @@ pic_make_proc(pic_state *pic, pic_func_t func, const char *name) | ||||||
|   sym = pic_intern_cstr(pic, name); |   sym = pic_intern_cstr(pic, name); | ||||||
| 
 | 
 | ||||||
|   proc = (struct pic_proc *)pic_obj_alloc(pic, sizeof(struct pic_proc), PIC_TT_PROC); |   proc = (struct pic_proc *)pic_obj_alloc(pic, sizeof(struct pic_proc), PIC_TT_PROC); | ||||||
|   proc->kind = PIC_PROC_KIND_FUNC; |   proc->tag = PIC_PROC_TAG_FUNC; | ||||||
|   proc->u.func.f = func; |   proc->u.f.func = func; | ||||||
|   proc->u.func.name = sym; |   proc->u.f.name = sym; | ||||||
|   return proc; |   return proc; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -27,7 +27,7 @@ pic_make_proc_irep(pic_state *pic, struct pic_irep *irep, struct pic_context *cx | ||||||
|   struct pic_proc *proc; |   struct pic_proc *proc; | ||||||
| 
 | 
 | ||||||
|   proc = (struct pic_proc *)pic_obj_alloc(pic, sizeof(struct pic_proc), PIC_TT_PROC); |   proc = (struct pic_proc *)pic_obj_alloc(pic, sizeof(struct pic_proc), PIC_TT_PROC); | ||||||
|   proc->kind = PIC_PROC_KIND_IREP; |   proc->tag = PIC_PROC_TAG_IREP; | ||||||
|   proc->u.i.irep = irep; |   proc->u.i.irep = irep; | ||||||
|   proc->u.i.cxt = cxt; |   proc->u.i.cxt = cxt; | ||||||
|   return proc; |   return proc; | ||||||
|  | @ -36,10 +36,10 @@ pic_make_proc_irep(pic_state *pic, struct pic_irep *irep, struct pic_context *cx | ||||||
| pic_sym * | pic_sym * | ||||||
| pic_proc_name(struct pic_proc *proc) | pic_proc_name(struct pic_proc *proc) | ||||||
| { | { | ||||||
|   switch (proc->kind) { |   switch (proc->tag) { | ||||||
|   case PIC_PROC_KIND_FUNC: |   case PIC_PROC_TAG_FUNC: | ||||||
|     return proc->u.func.name; |     return proc->u.f.name; | ||||||
|   case PIC_PROC_KIND_IREP: |   case PIC_PROC_TAG_IREP: | ||||||
|     return proc->u.i.irep->name; |     return proc->u.i.irep->name; | ||||||
|   } |   } | ||||||
|   PIC_UNREACHABLE(); |   PIC_UNREACHABLE(); | ||||||
|  |  | ||||||
|  | @ -862,7 +862,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value args) | ||||||
|       if (pic_proc_func_p(pic_proc_ptr(x))) { |       if (pic_proc_func_p(pic_proc_ptr(x))) { | ||||||
| 
 | 
 | ||||||
|         /* invoke! */ |         /* invoke! */ | ||||||
|         v = proc->u.func.f(pic); |         v = proc->u.f.func(pic); | ||||||
|         pic->sp[0] = v; |         pic->sp[0] = v; | ||||||
|         pic->sp += pic->ci->retc; |         pic->sp += pic->ci->retc; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Yuichi Nishiwaki
						Yuichi Nishiwaki