/* ---------------------------------------------------------------------- */ /* Copyright (C) 1992 by Natrlich! */ /* This file is copyrighted! */ /* Refer to the documentation for details. */ /* ---------------------------------------------------------------------- */ #include #include #include "defines.h" #include "nasm.h" #include "debug.h" #include "labels.h" #define KEINE_CODE_INNEREIEN #include "code.h" #include "fix.h" #include "exprfast.h" #include "op.h" #include "ldebug.h" extern label huge *h_global[SEP], huge *t_global[SEP], huge *l_global; #if ! LINKER extern label huge *h_local[SEP], huge *t_local[SEP], huge *l_local, huge *h_macro[SEP], huge *t_macro[SEP], huge *l_macro; #endif jmp_buf escape; #if ! VERSION static check_imm( p) imm huge *p; { if( p) { POINTER_CHECK( p); POINTER_CHECK( p->block); } } static check_fix( p) fix huge *p; { POINTER_CHECK( p); check_imm( p->imm); POINTER_CHECK( p->poof.label); } #define SUSPICIOUS 8 static _check_expr( p, depth) expr huge *p; { if( p) { if( ++depth == SUSPICIOUS) { nwarning("Suspicious recursion depth"); longjmp( escape, 1); } POINTER_CHECK( p); _check_expr( p->l, depth); _check_expr( p->r, depth); } } static check_expr( p) expr huge *p; { if( p) { while( ! p->fix) p = p->zonk.t; _check_expr( p, 0); check_fix( p->zonk.fixp); } } static label *this_label; check_label( p) label huge *p; { ref huge *r; if( ! setjmp( escape)) { this_label = p; POINTER_CHECK( p); POINTER_CHECK( p->before); POINTER_CHECK( p->name); for( r = p->refs; r; r = r->next) check_expr( r->ref); } } void check_trees() { label huge *p; int i; for( i = 0; i != SEP; i++) for( p = h_global[ i]; p; p = p->next) check_label( p); # if ! LINKER for( i = 0; i != SEP; i++) for( p = h_local[ i]; p; p = p->next) check_label( p); for( i = 0; i != SEP; i++) for( p = h_global[ i]; p; p = p->next) check_label( p); # endif } #endif