traverse.c (178529) | traverse.c (178546) |
---|---|
1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE --- 23 unchanged lines hidden (view full) --- 32 33#include <stdio.h> 34#include <assert.h> 35 36#include "ctftools.h" 37#include "traverse.h" 38#include "memory.h" 39 | 1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE --- 23 unchanged lines hidden (view full) --- 32 33#include <stdio.h> 34#include <assert.h> 35 36#include "ctftools.h" 37#include "traverse.h" 38#include "memory.h" 39 |
40int (*tddescenders[])(); 41int (*tdnops[])(); | 40int (*tddescenders[])(tdesc_t *, tdtrav_data_t *); 41tdtrav_cb_f tdnops[]; |
42 | 42 |
43int tdtraverse(tdesc_t *, tdesc_t **, tdtrav_data_t *); 44 | |
45void 46tdtrav_init(tdtrav_data_t *tdtd, int *vgenp, tdtrav_cb_f *firstops, 47 tdtrav_cb_f *preops, tdtrav_cb_f *postops, void *private) 48{ 49 tdtd->vgen = ++(*vgenp); 50 tdtd->firstops = firstops ? firstops : tdnops; 51 tdtd->preops = preops ? preops : tdnops; 52 tdtd->postops = postops ? postops : tdnops; --- 10 unchanged lines hidden (view full) --- 63tdtrav_func(tdesc_t *this, tdtrav_data_t *tdtd) 64{ 65 fndef_t *fn = this->t_fndef; 66 int i, rc; 67 68 if ((rc = tdtraverse(fn->fn_ret, &fn->fn_ret, tdtd)) < 0) 69 return (rc); 70 | 43void 44tdtrav_init(tdtrav_data_t *tdtd, int *vgenp, tdtrav_cb_f *firstops, 45 tdtrav_cb_f *preops, tdtrav_cb_f *postops, void *private) 46{ 47 tdtd->vgen = ++(*vgenp); 48 tdtd->firstops = firstops ? firstops : tdnops; 49 tdtd->preops = preops ? preops : tdnops; 50 tdtd->postops = postops ? postops : tdnops; --- 10 unchanged lines hidden (view full) --- 61tdtrav_func(tdesc_t *this, tdtrav_data_t *tdtd) 62{ 63 fndef_t *fn = this->t_fndef; 64 int i, rc; 65 66 if ((rc = tdtraverse(fn->fn_ret, &fn->fn_ret, tdtd)) < 0) 67 return (rc); 68 |
71 for (i = 0; i < fn->fn_nargs; i++) { | 69 for (i = 0; i < (int) fn->fn_nargs; i++) { |
72 if ((rc = tdtraverse(fn->fn_args[i], &fn->fn_args[i], 73 tdtd)) < 0) 74 return (rc); 75 } 76 77 return (0); 78} 79 --- 21 unchanged lines hidden (view full) --- 101 return (rc); 102 } 103 104 return (rc); 105} 106 107/*ARGSUSED*/ 108int | 70 if ((rc = tdtraverse(fn->fn_args[i], &fn->fn_args[i], 71 tdtd)) < 0) 72 return (rc); 73 } 74 75 return (0); 76} 77 --- 21 unchanged lines hidden (view full) --- 99 return (rc); 100 } 101 102 return (rc); 103} 104 105/*ARGSUSED*/ 106int |
109tdtrav_assert(tdesc_t *node, tdesc_t **nodep, void *private) | 107tdtrav_assert(tdesc_t *node __unused, tdesc_t **nodep __unused, void *private __unused) |
110{ 111 assert(1 == 0); 112 113 return (-1); 114} 115 116tdtrav_cb_f tdnops[] = { 117 NULL, --- 28 unchanged lines hidden (view full) --- 146 tdtrav_plain, /* const */ 147 tdtrav_plain /* restrict */ 148}; 149 150int 151tdtraverse(tdesc_t *this, tdesc_t **thisp, tdtrav_data_t *tdtd) 152{ 153 tdtrav_cb_f travcb; | 108{ 109 assert(1 == 0); 110 111 return (-1); 112} 113 114tdtrav_cb_f tdnops[] = { 115 NULL, --- 28 unchanged lines hidden (view full) --- 144 tdtrav_plain, /* const */ 145 tdtrav_plain /* restrict */ 146}; 147 148int 149tdtraverse(tdesc_t *this, tdesc_t **thisp, tdtrav_data_t *tdtd) 150{ 151 tdtrav_cb_f travcb; |
154 int (*descender)(); | 152 int (*descender)(tdesc_t *, tdtrav_data_t *); |
155 int descend = 1; 156 int rc; 157 158 if ((travcb = tdtd->firstops[this->t_type]) != NULL) { 159 if ((rc = travcb(this, thisp, tdtd->private)) < 0) 160 return (rc); 161 else if (rc == 0) 162 descend = 0; --- 19 unchanged lines hidden (view full) --- 182 (rc = travcb(this, thisp, tdtd->private)) < 0) 183 return (rc); 184 } 185 186 return (1); 187} 188 189int | 153 int descend = 1; 154 int rc; 155 156 if ((travcb = tdtd->firstops[this->t_type]) != NULL) { 157 if ((rc = travcb(this, thisp, tdtd->private)) < 0) 158 return (rc); 159 else if (rc == 0) 160 descend = 0; --- 19 unchanged lines hidden (view full) --- 180 (rc = travcb(this, thisp, tdtd->private)) < 0) 181 return (rc); 182 } 183 184 return (1); 185} 186 187int |
190iitraverse_td(iidesc_t *ii, tdtrav_data_t *tdtd) | 188iitraverse_td(void *arg1, void *arg2) |
191{ | 189{ |
190 iidesc_t *ii = arg1; 191 tdtrav_data_t *tdtd = arg2; |
|
192 int i, rc; 193 194 if ((rc = tdtraverse(ii->ii_dtype, &ii->ii_dtype, tdtd)) < 0) 195 return (rc); 196 197 for (i = 0; i < ii->ii_nargs; i++) { 198 if ((rc = tdtraverse(ii->ii_args[i], &ii->ii_args[i], 199 tdtd)) < 0) --- 17 unchanged lines hidden (view full) --- 217int 218iitraverse_hash(hash_t *iihash, int *vgenp, tdtrav_cb_f *firstops, 219 tdtrav_cb_f *preops, tdtrav_cb_f *postops, void *private) 220{ 221 tdtrav_data_t tdtd; 222 223 tdtrav_init(&tdtd, vgenp, firstops, preops, postops, private); 224 | 192 int i, rc; 193 194 if ((rc = tdtraverse(ii->ii_dtype, &ii->ii_dtype, tdtd)) < 0) 195 return (rc); 196 197 for (i = 0; i < ii->ii_nargs; i++) { 198 if ((rc = tdtraverse(ii->ii_args[i], &ii->ii_args[i], 199 tdtd)) < 0) --- 17 unchanged lines hidden (view full) --- 217int 218iitraverse_hash(hash_t *iihash, int *vgenp, tdtrav_cb_f *firstops, 219 tdtrav_cb_f *preops, tdtrav_cb_f *postops, void *private) 220{ 221 tdtrav_data_t tdtd; 222 223 tdtrav_init(&tdtd, vgenp, firstops, preops, postops, private); 224 |
225 return (hash_iter(iihash, (int (*)())iitraverse_td, &tdtd)); | 225 return (hash_iter(iihash, iitraverse_td, &tdtd)); |
226} | 226} |