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