void display_context( dcl_context* p, char* label, int oneline ) { int nt = ntok; if ( label && *label ) fprintf(stderr,"%s: ",label); fprintf(stderr,"dcl_context %d {\n",p); ++indent; INDENT(indent); fprintf(stderr,"cot:"); display_type(p->cot); fprintf(stderr,"\n"); display_expr(p->not,"not",oneline); INDENT(indent); putstring("tot:"); display_type(p->tot); fprintf(stderr,"\n"); display_expr(p->nof,"nof",oneline); display_expr(p->c_this,"c_this",oneline); INDENT(indent); fprintf(stderr,"ftbl %d\n",p->ftbl); --indent; fprintf(stderr,"}\n"); fflush(stderr); }
int display_cond_expressions(policydb_t * p, FILE * fp) { cond_node_t *cur; cond_av_list_t *av_cur, *expl = NULL; avtab_t expa; for (cur = p->cond_list; cur != NULL; cur = cur->next) { fprintf(fp, "expression: "); display_expr(p, cur->expr, fp); fprintf(fp, "current state: %d\n", cur->cur_state); fprintf(fp, "True list:\n"); if (avtab_init(&expa)) goto oom; if (expand_cond_av_list(p, cur->true_list, &expl, &expa)) { avtab_destroy(&expa); goto oom; } for (av_cur = expl; av_cur != NULL; av_cur = av_cur->next) { fprintf(fp, "\t"); render_av_rule(&av_cur->node->key, &av_cur->node->datum, RENDER_CONDITIONAL, p, fp); } cond_av_list_destroy(expl); avtab_destroy(&expa); fprintf(fp, "False list:\n"); if (avtab_init(&expa)) goto oom; if (expand_cond_av_list(p, cur->false_list, &expl, &expa)) { avtab_destroy(&expa); goto oom; } for (av_cur = expl; av_cur != NULL; av_cur = av_cur->next) { fprintf(fp, "\t"); render_av_rule(&av_cur->node->key, &av_cur->node->datum, RENDER_CONDITIONAL, p, fp); } cond_av_list_destroy(expl); avtab_destroy(&expa); } return 0; oom: fprintf(stderr, "out of memory\n"); return 1; }
void display_namelist( Plist nl, char* s, int verbose ) { error('d',"namelist: %s",s?s:""); ++indent; for ( Plist l = nl; l; l = l->l ) { Pname n = l->f; INDENT(indent); fprintf(stderr," %d",n); error('D'," %n %k n_key %d",n,n?n->tp->base:0,n?n->n_key:0); if ( verbose ) { ++indent; display_expr(n); --indent; } } --indent; }
int display_cond_expressions(policydb_t * p, FILE * fp) { cond_node_t *cur; cond_av_list_t *av_cur; for (cur = p->cond_list; cur != NULL; cur = cur->next) { fprintf(fp, "expression: "); display_expr(p, cur->expr, fp); fprintf(fp, "current state: %d\n", cur->cur_state); fprintf(fp, "True list:\n"); for (av_cur = cur->true_list; av_cur != NULL; av_cur = av_cur->next) { fprintf(fp, "\t"); render_av_rule(&av_cur->node->key, &av_cur->node->datum, RENDER_CONDITIONAL, p, fp); } fprintf(fp, "False list:\n"); for (av_cur = cur->false_list; av_cur != NULL; av_cur = av_cur->next) { fprintf(fp, "\t"); render_av_rule(&av_cur->node->key, &av_cur->node->datum, RENDER_CONDITIONAL, p, fp); } } return 0; }
void display_stmt( Pstmt ptr, char* label, int oneline ) { INDENT(indent); if ( label ) fprintf(stderr, "%s:", label); if ( ptr == 0 ) { fprintf(stderr, "NULL STMT\n" ); fflush(stderr); return; } fprintf(stderr,"%d",ptr->node::id); if(!ptr->allocated)fprintf(stderr," UNALLOCATED!"); putc(':',stderr); char* s = OPEREP(ptr->base); if ( s == 0 ) fprintf(stderr, "token(%d)", ptr->base ); else fprintf(stderr,"%s",s); if ( ptr->displayed ) { // recursion!!! if ( ptr->base == NAME ) fprintf(stderr," '%s'",Pname(ptr)->string); fprintf(stderr," RECURSION!!!\n"); ptr->displayed = 0; fflush(stderr); return; } putc(' ',stderr); ptr->where.put(stderr); if ( oneline ) { putc('\n',stderr); fflush(stderr); return; } ptr->displayed = 1; switch ( ptr->base ) { case BLOCK: fprintf(stderr," .. "); ptr->where2.put(stderr); putc('\n',stderr); ++indent; { for( Pstmt st = ptr->s; st; st = st->s_list ) display_stmt( ptr->s, "s" ); } --indent; break; case IF: putc('\n',stderr); ++indent; display_expr(ptr->e,"cond"); display_stmt(ptr->s,"if-clause"); --indent; if ( ptr->else_stmt ) { INDENT(indent); fprintf(stderr,"else\n"); ++indent; display_stmt(ptr->else_stmt,"else-clause"); --indent; } break; case DO: putc('\n',stderr); ++indent; display_stmt(ptr->s,"do-stmt"); display_expr(ptr->e,"cond"); --indent; break; case WHILE: putc('\n',stderr); ++indent; display_expr(ptr->e,"cond"); display_stmt(ptr->s,"while-stmt"); --indent; break; case FOR: putc('\n',stderr); ++indent; display_stmt(ptr->for_init,"init"); display_expr(ptr->e,"cond"); display_expr(ptr->e2,"incr"); display_stmt(ptr->s,"stmt"); --indent; break; case RETURN: putc('\n',stderr); ++indent; display_expr(ptr->e,"e"); --indent; break; case SM: putc('\n',stderr); ++indent; display_expr(ptr->e,"e"); --indent; break; default: putc('\n',stderr); break; } ptr->displayed = 0; fflush(stderr); return; }
void display_expr( Pexpr ptr, char* label, int oneline ) { INDENT(indent); if ( label ) fprintf(stderr, "%s:", label); if ( ptr == 0 ) { fprintf(stderr, "NULL EXPR\n" ); fflush(stderr); return; } fprintf(stderr,"%d",ptr->node::id); if(!ptr->allocated)fprintf(stderr," UNALLOCATED!"); putc(':',stderr); char* s = OPEREP(ptr->base); if ( s == 0 ) fprintf(stderr, "token(%d)", ptr->base ); else fprintf(stderr,"%s",s); if ( ptr->displayed ) { // recursion!!! switch ( ptr->base ) { case NAME: case TNAME: case DTOR: case STRING: case ICON: case FCON: case CCON: fprintf(stderr," '%s'",(ptr->string)?ptr->string:"<0>"); break; case IVAL: fprintf(stderr, " i1==%d", ptr->i1); break; } fprintf(stderr," RECURSION!!!\n"); ptr->displayed = 0; fflush(stderr); return; } ptr->displayed = 1; switch ( ptr->base ) { case QUEST: display_type(ptr->tp); putc('\n',stderr); if ( !oneline ) { ++indent; display_expr( ptr->cond, "cond" ); display_expr( ptr->e1, "e1" ); display_expr( ptr->e2, "e2" ); --indent; } break; case REF: case DOT: display_type(ptr->tp); putc('\n',stderr); if ( !oneline ) { ++indent; display_expr( ptr->e1, "e1" ); display_expr( ptr->mem, "mem" ); display_expr( ptr->n_initializer, "n_initializer" ); --indent; } break; case MDOT: display_type(ptr->tp); fprintf(stderr," string2:'%s'\n",ptr->string2?ptr->string2:""); if ( !oneline ) { ++indent; display_expr( ptr->mem, "mem" ); --indent; } break; case ICALL: fprintf(stderr," fn=='%s'",ptr->il->fct_name->string); display_type(ptr->tp); putc('\n',stderr); if ( !oneline ) { ++indent; for ( int i = 0; i < ptr->il->i_slots; ++i ) { ia *aa = &ptr->il->i_args[i]; INDENT(indent); fprintf(stderr,"arg:'%s'",aa->local&&aa->local->string?aa->local->string:""); display_type(aa->tp); putc('\n',stderr); ++indent; display_expr( aa->arg, "actual" ); --indent; } display_expr( ptr->e1, "e1" ); display_expr( ptr->e2, "e2" ); --indent; } break; case SIZEOF: if ( ptr->tp2 ) { putc('(',stderr); display_type(ptr->tp2); putc(')',stderr); } display_type(ptr->tp); putc('\n',stderr); if ( !oneline ) { if ( ptr->e1 ) { ++indent; display_expr(ptr->e1,"e1"); --indent; } if ( ptr->e2 ) { ++indent; display_expr(ptr->e2,"e2"); --indent; } } break; case ZERO: display_type(ptr->tp); putc('\n',stderr); break; case DTOR: fprintf(stderr," '%s'",(ptr->string)?ptr->string:"<0>"); display_type(ptr->tp); if ( ptr->permanent ) fprintf(stderr, " (permanent)"); putc('\n',stderr); if ( !oneline ) { Pname n = Pname(ptr); ++indent; INDENT(indent); fprintf(stderr,"tp2"); display_type(ptr->tp2); fprintf(stderr,"tpdef"); display_type(ptr->tpdef); putc('\n',stderr); INDENT(indent); display_expr(n->n_qualifier,"n_qualifier" ); display_expr(n->n_dtag,"n_dtag" ); --indent; } break; case NAME: case TNAME: case STRING: case ICON: case FCON: case CCON: case IVAL: if ( ptr->base == IVAL ) fprintf(stderr, " i1==%d", ptr->i1); else fprintf(stderr," '%s'",(ptr->string)?ptr->string:"<0>"); display_type(ptr->tp); if(ptr->string2)fprintf(stderr," string2=='%s'",ptr->string2); if ( ptr->permanent ) fprintf(stderr, " (permanent)"); putc('\n',stderr); if ( !oneline && (ptr->base == NAME || ptr->base == TNAME) ) { Pname n = Pname(ptr); ++indent; INDENT(indent); fprintf(stderr, "n_key==%d", n->n_key ); fprintf(stderr, " n_sto==%d", n->n_sto ); fprintf(stderr, " n_stclass==%d",n->n_stclass); fprintf(stderr, " n_scope==%d",n->n_scope); fprintf(stderr, " n_protected==%d\n", n->n_protect ); INDENT(indent); fprintf(stderr, "n_oper=='%s'", (s=OPEREP(n->base))?s:"0"); fprintf(stderr, " n_val==%d", n->n_val ); fprintf(stderr, " n_xref==%d",n->n_xref); fprintf(stderr, " lex_level==%d\n", n->lex_level ); INDENT(indent); fprintf(stderr, " table==%d%d",n->n_table,n->n_table?n->n_table->t_name:0); fprintf(stderr, " ktable==%d%d\n",n->n_ktable,n->n_ktable?n->n_ktable->k_name:0); INDENT(indent); fprintf(stderr, "n_used==%d",n->n_used); fprintf(stderr, " n_assigned_to==%d",n->n_assigned_to); fprintf(stderr, " n_addr_taken==%d\n",n->n_addr_taken ); INDENT(indent); fprintf(stderr, "n_anon==%s", n->n_anon); fprintf(stderr, " n_list=='%s'", n->n_list?n->n_list->string:"<0>" ); fprintf(stderr, " n_qualifier=='%s'", n->n_qualifier?n->n_qualifier->string:"<0>" ); if ( n->n_initializer ) { fprintf(stderr, " n_initializer:\n" ); ++indent; display_expr( n->n_initializer ); --indent; } else fprintf(stderr, " n_initializer==<0>\n"); --indent; } break; case BLOCK: ((Pstmt)ptr)->where.put(stderr); putc(' ',stderr); putc('\n',stderr); break; default: display_type(ptr->tp); putc('\n',stderr); if ( !oneline && ptr->base > 0 && (ptr->base<165 || ptr->base==MEMPTR) ) { ++indent; display_expr( ptr->e1, "e1" ); display_expr( ptr->e2, "e2" ); --indent; } break; } ptr->displayed = 0; fflush(stderr); return; }