move debug prints in the VM
This commit is contained in:
		
							parent
							
								
									9f7bde294c
								
							
						
					
					
						commit
						0ae0618edf
					
				
							
								
								
									
										116
									
								
								vm.c
								
								
								
								
							
							
						
						
									
										116
									
								
								vm.c
								
								
								
								
							| 
						 | 
				
			
			@ -564,6 +564,68 @@ pic_apply5(pic_state *pic, struct pic_proc *proc, pic_value arg1, pic_value arg2
 | 
			
		|||
#define PUSHCI() (++pic->ci)
 | 
			
		||||
#define POPCI() (pic->ci--)
 | 
			
		||||
 | 
			
		||||
#if VM_DEBUG
 | 
			
		||||
# define VM_BOOT_PRINT                          \
 | 
			
		||||
  do {                                          \
 | 
			
		||||
    puts("### booting VM... ###");              \
 | 
			
		||||
    stbase = pic->sp;                           \
 | 
			
		||||
    cibase = pic->ci;                           \
 | 
			
		||||
  } while (0)
 | 
			
		||||
#else
 | 
			
		||||
# define VM_BOOT_PRINT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if VM_DEBUG
 | 
			
		||||
# define VM_END_PRINT                                                   \
 | 
			
		||||
  do {                                                                  \
 | 
			
		||||
    puts("**VM END STATE**");                                           \
 | 
			
		||||
    printf("stbase\t= %p\nsp\t= %p\n", (void *)stbase, (void *)pic->sp); \
 | 
			
		||||
    printf("cibase\t= %p\nci\t= %p\n", (void *)cibase, (void *)pic->ci); \
 | 
			
		||||
    if (stbase < pic->sp - 1) {                                         \
 | 
			
		||||
      pic_value *sp;                                                    \
 | 
			
		||||
      printf("* stack trace:");                                         \
 | 
			
		||||
      for (sp = stbase; pic->sp != sp; ++sp) {                          \
 | 
			
		||||
        pic_debug(pic, *sp);                                            \
 | 
			
		||||
        puts("");                                                       \
 | 
			
		||||
      }                                                                 \
 | 
			
		||||
    }                                                                   \
 | 
			
		||||
    if (stbase > pic->sp - 1) {                                         \
 | 
			
		||||
      puts("*** stack underflow!");                                     \
 | 
			
		||||
    }                                                                   \
 | 
			
		||||
  } while (0)
 | 
			
		||||
#else
 | 
			
		||||
# define VM_END_PRINT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if VM_DEBUG
 | 
			
		||||
# define VM_CALL_PRINT                                                  \
 | 
			
		||||
  do {                                                                  \
 | 
			
		||||
    puts("\n== calling proc...");                                       \
 | 
			
		||||
    printf("  proc = ");                                                \
 | 
			
		||||
    pic_debug(pic, pic_obj_value(proc));                                \
 | 
			
		||||
    puts("");                                                           \
 | 
			
		||||
    printf("  argv = (");                                               \
 | 
			
		||||
    for (short i = 1; i < c.u.i; ++i) {                                 \
 | 
			
		||||
      if (i > 1)                                                        \
 | 
			
		||||
        printf(" ");                                                    \
 | 
			
		||||
      pic_debug(pic, pic->sp[-c.u.i + i]);                              \
 | 
			
		||||
    }                                                                   \
 | 
			
		||||
    puts(")");                                                          \
 | 
			
		||||
    if (! pic_proc_func_p(proc)) {                                      \
 | 
			
		||||
      printf("  irep = %p\n", proc->u.irep);                            \
 | 
			
		||||
      printf("  name = %s\n", pic_symbol_name(pic, pic_proc_name(proc))); \
 | 
			
		||||
      pic_dump_irep(proc->u.irep);                                      \
 | 
			
		||||
    }                                                                   \
 | 
			
		||||
    else {                                                              \
 | 
			
		||||
      printf("  cfunc = %p\n", (void *)proc->u.func.f);                 \
 | 
			
		||||
      printf("  name = %s\n", pic_symbol_name(pic, pic_proc_name(proc))); \
 | 
			
		||||
    }                                                                   \
 | 
			
		||||
    puts("== end\n");                                                   \
 | 
			
		||||
  } while (0)
 | 
			
		||||
#else
 | 
			
		||||
# define VM_CALL_PRINT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
pic_value
 | 
			
		||||
pic_apply(pic_state *pic, struct pic_proc *proc, pic_value argv)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -584,17 +646,18 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value argv)
 | 
			
		|||
  };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if VM_DEBUG
 | 
			
		||||
  pic_value *stbase;
 | 
			
		||||
  pic_callinfo *cibase;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  if (! pic_list_p(argv)) {
 | 
			
		||||
    pic_error(pic, "argv must be a proper list");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  argc = pic_length(pic, argv) + 1;
 | 
			
		||||
 | 
			
		||||
#if VM_DEBUG
 | 
			
		||||
  puts("### booting VM... ###");
 | 
			
		||||
  pic_value *stbase = pic->sp;
 | 
			
		||||
  pic_callinfo *cibase = pic->ci;
 | 
			
		||||
#endif
 | 
			
		||||
  VM_BOOT_PRINT;
 | 
			
		||||
 | 
			
		||||
  PUSH(pic_obj_value(proc));
 | 
			
		||||
  for (i = 1; i < argc; ++i) {
 | 
			
		||||
| 
						 | 
				
			
			@ -655,7 +718,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value argv)
 | 
			
		|||
      xh_entry *e;
 | 
			
		||||
 | 
			
		||||
      if ((e = xh_get_int(&pic->globals, c.u.i)) == NULL) {
 | 
			
		||||
        pic_errorf(pic, "logic flaw; reference to uninitialized global variable: ~s", pic_symbol_name(pic, c.u.i));
 | 
			
		||||
        pic_errorf(pic, "logic flaw; reference to uninitialized global variable: %s", pic_symbol_name(pic, c.u.i));
 | 
			
		||||
      }
 | 
			
		||||
      PUSH(xh_val(e, pic_value));
 | 
			
		||||
      NEXT;
 | 
			
		||||
| 
						 | 
				
			
			@ -756,29 +819,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value argv)
 | 
			
		|||
      }
 | 
			
		||||
      proc = pic_proc_ptr(x);
 | 
			
		||||
 | 
			
		||||
#if VM_DEBUG
 | 
			
		||||
      puts("\n== calling proc...");
 | 
			
		||||
      printf("  proc = ");
 | 
			
		||||
      pic_debug(pic, pic_obj_value(proc));
 | 
			
		||||
      puts("");
 | 
			
		||||
      printf("  argv = (");
 | 
			
		||||
      for (short i = 1; i < c.u.i; ++i) {
 | 
			
		||||
        if (i > 1)
 | 
			
		||||
          printf(" ");
 | 
			
		||||
        pic_debug(pic, pic->sp[-c.u.i + i]);
 | 
			
		||||
      }
 | 
			
		||||
      puts(")");
 | 
			
		||||
      if (! pic_proc_func_p(proc)) {
 | 
			
		||||
	printf("  irep = %p\n", proc->u.irep);
 | 
			
		||||
	printf("  name = %s\n", pic_symbol_name(pic, pic_proc_name(proc)));
 | 
			
		||||
	pic_dump_irep(proc->u.irep);
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
	printf("  cfunc = %p\n", (void *)proc->u.func.f);
 | 
			
		||||
	printf("  name = %s\n", pic_symbol_name(pic, pic_proc_name(proc)));
 | 
			
		||||
      }
 | 
			
		||||
      puts("== end\n");
 | 
			
		||||
#endif
 | 
			
		||||
      VM_CALL_PRINT;
 | 
			
		||||
 | 
			
		||||
      ci = PUSHCI();
 | 
			
		||||
      ci->argc = c.u.i;
 | 
			
		||||
| 
						 | 
				
			
			@ -1016,22 +1057,7 @@ pic_apply(pic_state *pic, struct pic_proc *proc, pic_value argv)
 | 
			
		|||
 | 
			
		||||
    CASE(OP_STOP) {
 | 
			
		||||
 | 
			
		||||
#if VM_DEBUG
 | 
			
		||||
      puts("**VM END STATE**");
 | 
			
		||||
      printf("stbase\t= %p\nsp\t= %p\n", (void *)stbase, (void *)pic->sp);
 | 
			
		||||
      printf("cibase\t= %p\nci\t= %p\n", (void *)cibase, (void *)pic->ci);
 | 
			
		||||
      if (stbase < pic->sp - 1) {
 | 
			
		||||
	pic_value *sp;
 | 
			
		||||
	printf("* stack trace:");
 | 
			
		||||
	for (sp = stbase; pic->sp != sp; ++sp) {
 | 
			
		||||
	  pic_debug(pic, *sp);
 | 
			
		||||
	  puts("");
 | 
			
		||||
	}
 | 
			
		||||
      }
 | 
			
		||||
      if (stbase > pic->sp - 1) {
 | 
			
		||||
	puts("*** stack underflow!");
 | 
			
		||||
      }
 | 
			
		||||
#endif
 | 
			
		||||
      VM_END_PRINT;
 | 
			
		||||
 | 
			
		||||
      return pic_gc_protect(pic, POP());
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue