1/* pt::rde::critcl - critcl - layer 2 definitions 2 * 3 * -> Support for the stack methods in layer 3. 4 */ 5 6#include <ms.h> /* Our public API */ 7#include <m.h> /* Method declarations */ 8#include <util.h> /* Trace utilities */ 9#ifdef RDE_TRACE 10#include <pInt.h> /* To have access to icount */ 11#endif 12/* .................................................. */ 13/* 14 *--------------------------------------------------------------------------- 15 * 16 * paramms_objcmd -- 17 * 18 * Implementation of stack objects, the main dispatcher function. 19 * 20 * Results: 21 * A standard Tcl result code. 22 * 23 * Side effects: 24 * Per the called methods. 25 * 26 *--------------------------------------------------------------------------- 27 */ 28 29int 30paramms_objcmd (ClientData cd, Tcl_Interp* interp, int objc, Tcl_Obj* CONST* objv) 31{ 32 RDE_STATE p = (RDE_STATE) cd; 33 int m, res; 34 35 static CONST char* methods [] = { 36 "amarked", "ast", "asts", "chan", 37 "complete", "current", "data", "destroy", "emarked", 38 "error", "lmarked", "location", "ok", 39 "reset", "scached", "symbols", "tokens", 40 "value", "i:fail_continue", "i:fail_return", "i:ok_continue", 41 "i:ok_return", "i_status_fail", "i_status_negate", "i_status_ok", 42 "i_error_clear","i_error_nonterminal", "i_error_pop_merge", "i_error_push", 43 "i:fail_loc_pop_rewind", "i_loc_pop_discard", 44 "i_loc_pop_rewind/discard", "i_loc_pop_rewind", "i_loc_push", 45 "i:fail_ast_pop_rewind", "i_ast_pop_discard", "i_ast_pop_discard/rewind", 46 "i_ast_pop_rewind/discard", "i_ast_pop_rewind", "i_ast_push", 47 "i:ok_ast_value_push", "i_symbol_restore", "i_symbol_save", 48 "i_value_clear/leaf", "i_value_clear", "i_value_clear/reduce", 49 "i_input_next", "i_test_alnum", "i_test_alpha", "i_test_ascii", "i_test_char", 50 "i_test_ddigit","i_test_digit", "i_test_graph", "i_test_lower", "i_test_print", 51 "i_test_punct", "i_test_range", "i_test_space", "i_test_upper", "i_test_wordchar", 52 "i_test_xdigit", 53 "i:ok_ast_pop_discard", "i_ast_rewind", 54 "i:ok_loc_pop_discard", "i_loc_rewind", 55 "i_error_clear_push", 56 "si:void_state_push", 57 "si:value_state_push", 58 "si:void_state_merge", 59 "si:value_state_merge", 60 "si:voidvoid_branch", 61 "si:voidvalue_branch", 62 "si:valuevoid_branch", 63 "si:valuevalue_branch", 64 "si:voidvoid_part", 65 "si:voidvalue_part", 66 "si:valuevalue_part", 67 "si:next_char", 68 "si:next_range", 69 "si:next_alnum", "si:next_alpha", "si:next_ascii", 70 "si:next_ddigit","si:next_digit", "si:next_graph", "si:next_lower", "si:next_print", 71 "si:next_punct", "si:next_space", "si:next_upper", "si:next_wordchar", 72 "si:next_xdigit", 73 74 "si:void2_state_push", 75 "si:void_state_merge_ok", 76 "si:value_notahead_start", 77 "si:void_notahead_exit", 78 "si:value_notahead_exit", 79 "si:kleene_abort", 80 "si:kleene_close", 81 82 "si:value_symbol_start", 83 "si:value_void_symbol_start", 84 "si:void_symbol_start", 85 "si:void_void_symbol_start", 86 "si:reduce_symbol_end", 87 "si:void_leaf_symbol_end", 88 "si:value_leaf_symbol_end", 89 "si:value_clear_symbol_end", 90 "si:void_clear_symbol_end", 91 92 "si:next_str", 93 "si:next_class", 94 NULL 95 }; 96 enum methods { 97 M_AMARKED, M_AST, M_ASTS, M_CHAN, M_COMPLETE, M_CURRENT, 98 M_DATA, M_DESTROY, M_EMARKED, M_ERROR, M_LMARKED, M_LOCATION, M_OK, 99 M_RESET, M_SCACHED, M_SYMBOLS, M_TOKENS, 100 M_VALUE, M_F_continue, M_F_return, M_O_continue, M_O_return, 101 M_I_st_fail, M_I_st_neg, M_I_st_ok, M_I_er_clear, M_I_er_nt, 102 M_I_er_popmerge, M_I_er_push, M_F_loc_pop_rewind, M_I_loc_pop_discard, 103 M_I_loc_pop_rewdis, M_I_loc_pop_rewind, M_I_loc_push, M_F_ast_pop_rewind, 104 M_I_ast_pop_discard, M_I_ast_pop_disrew, M_I_ast_pop_rewdis, 105 M_I_ast_pop_rewind, M_I_ast_push, M_O_ast_value_push, M_I_symbol_restore, 106 M_I_symbol_save, M_I_value_cleaf, M_I_value_clear, M_I_value_creduce, 107 M_I_input_next, M_I_test_alnum, M_I_test_alpha, M_I_test_ascii, M_I_test_char, 108 M_I_test_ddigit, M_I_test_digit, M_I_test_graph, M_I_test_lower, M_I_test_print, 109 M_I_test_punct, M_I_test_range, M_I_test_space, M_I_test_upper, M_I_test_wordchar, 110 M_I_test_xdigit, 111 112 M_O_ast_pop_discard, 113 M_I_ast_rewind, 114 M_O_loc_pop_discard, 115 M_I_loc_rewind, 116 M_I_er_clear_push, 117 118 M_SI_void_state_push, 119 M_SI_value_state_push, 120 M_SI_void_state_merge, 121 M_SI_value_state_merge, 122 M_SI_voidvoid_branch, 123 M_SI_voidvalue_branch, 124 M_SI_valuevoid_branch, 125 M_SI_valuevalue_branch, 126 M_SI_voidvoid_part, 127 M_SI_voidvalue_part, 128 M_SI_valuevalue_part, 129 130 M_SI_next_char, 131 M_SI_next_range, 132 M_SI_next_alnum, 133 M_SI_next_alpha, 134 M_SI_next_ascii, 135 M_SI_next_ddigit, 136 M_SI_next_digit, 137 M_SI_next_graph, 138 M_SI_next_lower, 139 M_SI_next_print, 140 M_SI_next_punct, 141 M_SI_next_space, 142 M_SI_next_upper, 143 M_SI_next_wordchar, 144 M_SI_next_xdigit, 145 146 M_SI_void2_state_push, 147 M_SI_void_state_merge_ok, 148 M_SI_value_notahead_start, 149 M_SI_void_notahead_exit, 150 M_SI_value_notahead_exit, 151 M_SI_kleene_abort, 152 M_SI_kleene_close, 153 154 M_SI_value_symbol_start, 155 M_SI_value_void_symbol_start, 156 M_SI_void_symbol_start, 157 M_SI_void_void_symbol_start, 158 M_SI_reduce_symbol_end, 159 M_SI_void_leaf_symbol_end, 160 M_SI_value_leaf_symbol_end, 161 M_SI_value_clear_symbol_end, 162 M_SI_void_clear_symbol_end, 163 164 M_SI_next_str, 165 M_SI_next_class 166 }; 167 168 if (objc < 2) { 169 Tcl_WrongNumArgs (interp, objc, objv, "option ?arg arg ...?"); 170 return TCL_ERROR; 171 } else if (Tcl_GetIndexFromObj (interp, objv [1], methods, "option", 172 0, &m) != TCL_OK) { 173 return TCL_ERROR; 174 } 175 176 /* Dispatch to methods. They check the #args in detail before performing 177 * the requested functionality 178 */ 179 180 TRACE0 (("%8d RDE %s", ++p->icount, Tcl_GetString(objv [1]))); 181 ENTER (Tcl_GetString(objv [1])); 182 183 switch (m) { 184 case M_AMARKED: res = param_AMARKED (p, interp, objc, objv); break; 185 case M_AST: res = param_AST (p, interp, objc, objv); break; 186 case M_ASTS: res = param_ASTS (p, interp, objc, objv); break; 187 case M_CHAN: res = param_CHAN (p, interp, objc, objv); break; 188 case M_COMPLETE: res = param_COMPLETE (p, interp, objc, objv); break; 189 case M_CURRENT: res = param_CURRENT (p, interp, objc, objv); break; 190 case M_DATA: res = param_DATA (p, interp, objc, objv); break; 191 case M_DESTROY: res = param_DESTROY (p, interp, objc, objv); break; 192 case M_EMARKED: res = param_EMARKED (p, interp, objc, objv); break; 193 case M_ERROR: res = param_ERROR (p, interp, objc, objv); break; 194 case M_LMARKED: res = param_LMARKED (p, interp, objc, objv); break; 195 case M_LOCATION: res = param_LOCATION (p, interp, objc, objv); break; 196 case M_OK: res = param_OK (p, interp, objc, objv); break; 197 case M_RESET: res = param_RESET (p, interp, objc, objv); break; 198 case M_SCACHED: res = param_SCACHED (p, interp, objc, objv); break; 199 case M_SYMBOLS: res = param_SYMBOLS (p, interp, objc, objv); break; 200 case M_TOKENS: res = param_TOKENS (p, interp, objc, objv); break; 201 case M_VALUE: res = param_VALUE (p, interp, objc, objv); break; 202 case M_F_continue: res = param_F_continue (p, interp, objc, objv); break; 203 case M_F_return: res = param_F_return (p, interp, objc, objv); break; 204 case M_O_continue: res = param_O_continue (p, interp, objc, objv); break; 205 case M_O_return: res = param_O_return (p, interp, objc, objv); break; 206 case M_I_st_fail: res = param_I_st_fail (p, interp, objc, objv); break; 207 case M_I_st_neg: res = param_I_st_neg (p, interp, objc, objv); break; 208 case M_I_st_ok: res = param_I_st_ok (p, interp, objc, objv); break; 209 case M_I_er_clear: res = param_I_er_clear (p, interp, objc, objv); break; 210 case M_I_er_clear_push: res = param_I_er_clear_push (p, interp, objc, objv); break; 211 case M_I_er_nt: res = param_I_er_nt (p, interp, objc, objv); break; 212 case M_I_er_popmerge: res = param_I_er_popmerge (p, interp, objc, objv); break; 213 case M_I_er_push: res = param_I_er_push (p, interp, objc, objv); break; 214 case M_F_loc_pop_rewind: res = param_F_loc_pop_rewind (p, interp, objc, objv); break; 215 case M_I_loc_pop_discard: res = param_I_loc_pop_discard (p, interp, objc, objv); break; 216 case M_I_loc_pop_rewdis: res = param_I_loc_pop_rewdis (p, interp, objc, objv); break; 217 case M_I_loc_pop_rewind: res = param_I_loc_pop_rewind (p, interp, objc, objv); break; 218 case M_I_loc_push: res = param_I_loc_push (p, interp, objc, objv); break; 219 case M_I_loc_rewind: res = param_I_loc_rewind (p, interp, objc, objv); break; 220 case M_O_loc_pop_discard: res = param_O_loc_pop_discard (p, interp, objc, objv); break; 221 case M_F_ast_pop_rewind: res = param_F_ast_pop_rewind (p, interp, objc, objv); break; 222 case M_I_ast_pop_discard: res = param_I_ast_pop_discard (p, interp, objc, objv); break; 223 case M_I_ast_pop_disrew: res = param_I_ast_pop_disrew (p, interp, objc, objv); break; 224 case M_I_ast_pop_rewdis: res = param_I_ast_pop_rewdis (p, interp, objc, objv); break; 225 case M_I_ast_pop_rewind: res = param_I_ast_pop_rewind (p, interp, objc, objv); break; 226 case M_I_ast_push: res = param_I_ast_push (p, interp, objc, objv); break; 227 case M_I_ast_rewind: res = param_I_ast_rewind (p, interp, objc, objv); break; 228 case M_O_ast_pop_discard: res = param_O_ast_pop_discard (p, interp, objc, objv); break; 229 case M_O_ast_value_push: res = param_O_ast_value_push (p, interp, objc, objv); break; 230 case M_I_symbol_restore: res = param_I_symbol_restore (p, interp, objc, objv); break; 231 case M_I_symbol_save: res = param_I_symbol_save (p, interp, objc, objv); break; 232 case M_I_value_cleaf: res = param_I_value_cleaf (p, interp, objc, objv); break; 233 case M_I_value_clear: res = param_I_value_clear (p, interp, objc, objv); break; 234 case M_I_value_creduce: res = param_I_value_creduce (p, interp, objc, objv); break; 235 case M_I_input_next: res = param_I_input_next (p, interp, objc, objv); break; 236 case M_I_test_alnum: res = param_I_test_alnum (p, interp, objc, objv); break; 237 case M_I_test_alpha: res = param_I_test_alpha (p, interp, objc, objv); break; 238 case M_I_test_ascii: res = param_I_test_ascii (p, interp, objc, objv); break; 239 case M_I_test_char: res = param_I_test_char (p, interp, objc, objv); break; 240 case M_I_test_ddigit: res = param_I_test_ddigit (p, interp, objc, objv); break; 241 case M_I_test_digit: res = param_I_test_digit (p, interp, objc, objv); break; 242 case M_I_test_graph: res = param_I_test_graph (p, interp, objc, objv); break; 243 case M_I_test_lower: res = param_I_test_lower (p, interp, objc, objv); break; 244 case M_I_test_print: res = param_I_test_print (p, interp, objc, objv); break; 245 case M_I_test_punct: res = param_I_test_punct (p, interp, objc, objv); break; 246 case M_I_test_range: res = param_I_test_range (p, interp, objc, objv); break; 247 case M_I_test_space: res = param_I_test_space (p, interp, objc, objv); break; 248 case M_I_test_upper: res = param_I_test_upper (p, interp, objc, objv); break; 249 case M_I_test_wordchar: res = param_I_test_wordchar (p, interp, objc, objv); break; 250 case M_I_test_xdigit: res = param_I_test_xdigit (p, interp, objc, objv); break; 251 252 case M_SI_void_state_push: res = param_SI_void_state_push (p, interp, objc, objv); break; 253 case M_SI_value_state_push: res = param_SI_value_state_push (p, interp, objc, objv); break; 254 case M_SI_void_state_merge: res = param_SI_void_state_merge (p, interp, objc, objv); break; 255 case M_SI_value_state_merge: res = param_SI_value_state_merge (p, interp, objc, objv); break; 256 case M_SI_voidvoid_branch: res = param_SI_voidvoid_branch (p, interp, objc, objv); break; 257 case M_SI_voidvalue_branch: res = param_SI_voidvalue_branch (p, interp, objc, objv); break; 258 case M_SI_valuevoid_branch: res = param_SI_valuevoid_branch (p, interp, objc, objv); break; 259 case M_SI_valuevalue_branch: res = param_SI_valuevalue_branch (p, interp, objc, objv); break; 260 case M_SI_voidvoid_part: res = param_SI_voidvoid_part (p, interp, objc, objv); break; 261 case M_SI_voidvalue_part: res = param_SI_voidvalue_part (p, interp, objc, objv); break; 262 case M_SI_valuevalue_part: res = param_SI_valuevalue_part (p, interp, objc, objv); break; 263 264 case M_SI_next_char: res = param_SI_next_char (p, interp, objc, objv); break; 265 case M_SI_next_range: res = param_SI_next_range (p, interp, objc, objv); break; 266 case M_SI_next_alnum: res = param_SI_next_alnum (p, interp, objc, objv); break; 267 case M_SI_next_alpha: res = param_SI_next_alpha (p, interp, objc, objv); break; 268 case M_SI_next_ascii: res = param_SI_next_ascii (p, interp, objc, objv); break; 269 case M_SI_next_ddigit: res = param_SI_next_ddigit (p, interp, objc, objv); break; 270 case M_SI_next_digit: res = param_SI_next_digit (p, interp, objc, objv); break; 271 case M_SI_next_graph: res = param_SI_next_graph (p, interp, objc, objv); break; 272 case M_SI_next_lower: res = param_SI_next_lower (p, interp, objc, objv); break; 273 case M_SI_next_print: res = param_SI_next_print (p, interp, objc, objv); break; 274 case M_SI_next_punct: res = param_SI_next_punct (p, interp, objc, objv); break; 275 case M_SI_next_space: res = param_SI_next_space (p, interp, objc, objv); break; 276 case M_SI_next_upper: res = param_SI_next_upper (p, interp, objc, objv); break; 277 case M_SI_next_wordchar: res = param_SI_next_wordchar(p, interp, objc, objv); break; 278 case M_SI_next_xdigit: res = param_SI_next_xdigit (p, interp, objc, objv); break; 279 280 case M_SI_void2_state_push: res = param_SI_void2_state_push (p, interp, objc, objv); break; 281 case M_SI_void_state_merge_ok: res = param_SI_void_state_merge_ok (p, interp, objc, objv); break; 282 case M_SI_value_notahead_start: res = param_SI_value_notahead_start (p, interp, objc, objv); break; 283 case M_SI_void_notahead_exit: res = param_SI_void_notahead_exit (p, interp, objc, objv); break; 284 case M_SI_value_notahead_exit: res = param_SI_value_notahead_exit (p, interp, objc, objv); break; 285 case M_SI_kleene_abort: res = param_SI_kleene_abort (p, interp, objc, objv); break; 286 case M_SI_kleene_close: res = param_SI_kleene_close (p, interp, objc, objv); break; 287 288 case M_SI_value_symbol_start: res = param_SI_value_symbol_start (p, interp, objc, objv); break; 289 case M_SI_value_void_symbol_start: res = param_SI_value_void_symbol_start (p, interp, objc, objv); break; 290 case M_SI_void_symbol_start: res = param_SI_void_symbol_start (p, interp, objc, objv); break; 291 case M_SI_void_void_symbol_start: res = param_SI_void_void_symbol_start (p, interp, objc, objv); break; 292 case M_SI_reduce_symbol_end: res = param_SI_reduce_symbol_end (p, interp, objc, objv); break; 293 case M_SI_void_leaf_symbol_end: res = param_SI_void_leaf_symbol_end (p, interp, objc, objv); break; 294 case M_SI_value_leaf_symbol_end: res = param_SI_value_leaf_symbol_end (p, interp, objc, objv); break; 295 case M_SI_value_clear_symbol_end: res = param_SI_value_clear_symbol_end (p, interp, objc, objv); break; 296 case M_SI_void_clear_symbol_end: res = param_SI_void_clear_symbol_end (p, interp, objc, objv); break; 297 298 case M_SI_next_str: res = param_SI_next_str (p, interp, objc, objv); break; 299 case M_SI_next_class: res = param_SI_next_class (p, interp, objc, objv); break; 300 default: 301 /* Not coming to this place */ 302 ASSERT (0,"Reached unreachable location"); 303 } 304 305 RETURN ("%d",res); 306} 307 308/* 309 * Local Variables: 310 * mode: c 311 * c-basic-offset: 4 312 * fill-column: 78 313 * End: 314 */ 315