add PIC_TT_SENV and PIC_TT_SYNTAX
This commit is contained in:
		
							parent
							
								
									3c65025394
								
							
						
					
					
						commit
						c59d8f601b
					
				| 
						 | 
				
			
			@ -89,7 +89,9 @@ enum pic_tt {
 | 
			
		|||
  PIC_TT_PORT,
 | 
			
		||||
  PIC_TT_ERROR,
 | 
			
		||||
  PIC_TT_ENV,
 | 
			
		||||
  PIC_TT_CONT
 | 
			
		||||
  PIC_TT_CONT,
 | 
			
		||||
  PIC_TT_SENV,
 | 
			
		||||
  PIC_TT_SYNTAX
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define PIC_OBJECT_HEADER			\
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -658,7 +658,9 @@ codegen(codegen_state *state, pic_value obj, bool tailpos)
 | 
			
		|||
  case PIC_TT_UNDEF:
 | 
			
		||||
  case PIC_TT_EOF:
 | 
			
		||||
  case PIC_TT_PORT:
 | 
			
		||||
  case PIC_TT_ERROR: {
 | 
			
		||||
  case PIC_TT_ERROR:
 | 
			
		||||
  case PIC_TT_SENV:
 | 
			
		||||
  case PIC_TT_SYNTAX: {
 | 
			
		||||
    pic_error(pic, "invalid expression given");
 | 
			
		||||
  }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								src/gc.c
								
								
								
								
							
							
						
						
									
										30
									
								
								src/gc.c
								
								
								
								
							| 
						 | 
				
			
			@ -8,6 +8,8 @@
 | 
			
		|||
#include "picrin/blob.h"
 | 
			
		||||
#include "picrin/cont.h"
 | 
			
		||||
#include "picrin/error.h"
 | 
			
		||||
#include "picrin/macro.h"
 | 
			
		||||
#include "xhash/xhash.h"
 | 
			
		||||
 | 
			
		||||
#if GC_DEBUG
 | 
			
		||||
# include <stdio.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -273,6 +275,24 @@ gc_mark_object(pic_state *pic, struct pic_object *obj)
 | 
			
		|||
    gc_mark(pic, cont->result);
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  case PIC_TT_SYNTAX: {
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  case PIC_TT_SENV: {
 | 
			
		||||
    struct pic_senv *senv = (struct pic_senv *)obj;
 | 
			
		||||
 | 
			
		||||
    if (senv->up) {
 | 
			
		||||
      gc_mark_object(pic, (struct pic_object *)senv->up);
 | 
			
		||||
    }
 | 
			
		||||
    if (senv->stx) {
 | 
			
		||||
      int i;
 | 
			
		||||
 | 
			
		||||
      for (i = 0; i < 6; ++i) {
 | 
			
		||||
	gc_mark_object(pic, (struct pic_object *)senv->stx[i]);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  case PIC_TT_NIL:
 | 
			
		||||
  case PIC_TT_BOOL:
 | 
			
		||||
  case PIC_TT_FLOAT:
 | 
			
		||||
| 
						 | 
				
			
			@ -397,6 +417,16 @@ gc_finalize_object(pic_state *pic, struct pic_object *obj)
 | 
			
		|||
    PIC_BLK_DECREF(pic, cont->blk);
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  case PIC_TT_SENV: {
 | 
			
		||||
    struct pic_senv *senv = (struct pic_senv *)obj;
 | 
			
		||||
    xh_destory(senv->tbl);
 | 
			
		||||
    if (senv->stx)
 | 
			
		||||
      pic_free(pic, senv->stx);
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  case PIC_TT_SYNTAX: {
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
  case PIC_TT_NIL:
 | 
			
		||||
  case PIC_TT_BOOL:
 | 
			
		||||
  case PIC_TT_FLOAT:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -162,6 +162,8 @@ expand(pic_state *pic, pic_value obj, struct syntactic_env *env)
 | 
			
		|||
  case PIC_TT_ENV:
 | 
			
		||||
  case PIC_TT_CONT:
 | 
			
		||||
  case PIC_TT_UNDEF:
 | 
			
		||||
  case PIC_TT_SENV:
 | 
			
		||||
  case PIC_TT_SYNTAX:
 | 
			
		||||
    pic_error(pic, "unexpected value type");
 | 
			
		||||
    return pic_undef_value();	/* unreachable */
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,6 +97,12 @@ write(pic_state *pic, pic_value obj)
 | 
			
		|||
  case PIC_TT_CONT:
 | 
			
		||||
    printf("#<cont %p>", pic_ptr(obj));
 | 
			
		||||
    break;
 | 
			
		||||
  case PIC_TT_SENV:
 | 
			
		||||
    printf("#<senv %p>", pic_ptr(obj));
 | 
			
		||||
    break;
 | 
			
		||||
  case PIC_TT_SYNTAX:
 | 
			
		||||
    printf("#<senv %p>", pic_ptr(obj));
 | 
			
		||||
    break;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue