OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [VER_5_3/] [gdb-5.3/] [gdb/] [ch-exp.c] - Blame information for rev 1782

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
// OBSOLETE /* Parser for GNU CHILL (CCITT High-Level Language)  -*- C -*-
2
// OBSOLETE    Copyright 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001
3
// OBSOLETE    Free Software Foundation, Inc.
4
// OBSOLETE 
5
// OBSOLETE    This file is part of GDB.
6
// OBSOLETE 
7
// OBSOLETE    This program is free software; you can redistribute it and/or modify
8
// OBSOLETE    it under the terms of the GNU General Public License as published by
9
// OBSOLETE    the Free Software Foundation; either version 2 of the License, or
10
// OBSOLETE    (at your option) any later version.
11
// OBSOLETE 
12
// OBSOLETE    This program is distributed in the hope that it will be useful,
13
// OBSOLETE    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// OBSOLETE    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
// OBSOLETE    GNU General Public License for more details.
16
// OBSOLETE 
17
// OBSOLETE    You should have received a copy of the GNU General Public License
18
// OBSOLETE    along with this program; if not, write to the Free Software
19
// OBSOLETE    Foundation, Inc., 59 Temple Place - Suite 330,
20
// OBSOLETE    Boston, MA 02111-1307, USA.  */
21
// OBSOLETE 
22
// OBSOLETE /* Parse a Chill expression from text in a string,
23
// OBSOLETE    and return the result as a  struct expression  pointer.
24
// OBSOLETE    That structure contains arithmetic operations in reverse polish,
25
// OBSOLETE    with constants represented by operations that are followed by special data.
26
// OBSOLETE    See expression.h for the details of the format.
27
// OBSOLETE    What is important here is that it can be built up sequentially
28
// OBSOLETE    during the process of parsing; the lower levels of the tree always
29
// OBSOLETE    come first in the result.
30
// OBSOLETE 
31
// OBSOLETE    Note that the language accepted by this parser is more liberal
32
// OBSOLETE    than the one accepted by an actual Chill compiler.  For example, the
33
// OBSOLETE    language rule that a simple name string can not be one of the reserved
34
// OBSOLETE    simple name strings is not enforced (e.g "case" is not treated as a
35
// OBSOLETE    reserved name).  Another example is that Chill is a strongly typed
36
// OBSOLETE    language, and certain expressions that violate the type constraints
37
// OBSOLETE    may still be evaluated if gdb can do so in a meaningful manner, while
38
// OBSOLETE    such expressions would be rejected by the compiler.  The reason for
39
// OBSOLETE    this more liberal behavior is the philosophy that the debugger
40
// OBSOLETE    is intended to be a tool that is used by the programmer when things
41
// OBSOLETE    go wrong, and as such, it should provide as few artificial barriers
42
// OBSOLETE    to it's use as possible.  If it can do something meaningful, even
43
// OBSOLETE    something that violates language contraints that are enforced by the
44
// OBSOLETE    compiler, it should do so without complaint.
45
// OBSOLETE 
46
// OBSOLETE  */
47
// OBSOLETE 
48
// OBSOLETE #include "defs.h"
49
// OBSOLETE #include "gdb_string.h"
50
// OBSOLETE #include <ctype.h>
51
// OBSOLETE #include "expression.h"
52
// OBSOLETE #include "language.h"
53
// OBSOLETE #include "value.h"
54
// OBSOLETE #include "parser-defs.h"
55
// OBSOLETE #include "ch-lang.h"
56
// OBSOLETE #include "bfd.h"            /* Required by objfiles.h.  */
57
// OBSOLETE #include "symfile.h"                /* Required by objfiles.h.  */
58
// OBSOLETE #include "objfiles.h"               /* For have_full_symbols and have_partial_symbols */
59
// OBSOLETE 
60
// OBSOLETE #ifdef __GNUC__
61
// OBSOLETE #define INLINE __inline__
62
// OBSOLETE #endif
63
// OBSOLETE 
64
// OBSOLETE typedef union
65
// OBSOLETE 
66
// OBSOLETE   {
67
// OBSOLETE     LONGEST lval;
68
// OBSOLETE     ULONGEST ulval;
69
// OBSOLETE     struct
70
// OBSOLETE       {
71
// OBSOLETE     LONGEST val;
72
// OBSOLETE     struct type *type;
73
// OBSOLETE       }
74
// OBSOLETE     typed_val;
75
// OBSOLETE     double dval;
76
// OBSOLETE     struct symbol *sym;
77
// OBSOLETE     struct type *tval;
78
// OBSOLETE     struct stoken sval;
79
// OBSOLETE     struct ttype tsym;
80
// OBSOLETE     struct symtoken ssym;
81
// OBSOLETE   }
82
// OBSOLETE YYSTYPE;
83
// OBSOLETE 
84
// OBSOLETE enum ch_terminal
85
// OBSOLETE   {
86
// OBSOLETE     END_TOKEN = 0,
87
// OBSOLETE     /* '\001' ... '\xff' come first. */
88
// OBSOLETE     OPEN_PAREN = '(',
89
// OBSOLETE     TOKEN_NOT_READ = 999,
90
// OBSOLETE     INTEGER_LITERAL,
91
// OBSOLETE     BOOLEAN_LITERAL,
92
// OBSOLETE     CHARACTER_LITERAL,
93
// OBSOLETE     FLOAT_LITERAL,
94
// OBSOLETE     GENERAL_PROCEDURE_NAME,
95
// OBSOLETE     LOCATION_NAME,
96
// OBSOLETE     EMPTINESS_LITERAL,
97
// OBSOLETE     CHARACTER_STRING_LITERAL,
98
// OBSOLETE     BIT_STRING_LITERAL,
99
// OBSOLETE     TYPENAME,
100
// OBSOLETE     DOT_FIELD_NAME,         /* '.' followed by <field name> */
101
// OBSOLETE     CASE,
102
// OBSOLETE     OF,
103
// OBSOLETE     ESAC,
104
// OBSOLETE     LOGIOR,
105
// OBSOLETE     ORIF,
106
// OBSOLETE     LOGXOR,
107
// OBSOLETE     LOGAND,
108
// OBSOLETE     ANDIF,
109
// OBSOLETE     NOTEQUAL,
110
// OBSOLETE     GEQ,
111
// OBSOLETE     LEQ,
112
// OBSOLETE     IN,
113
// OBSOLETE     SLASH_SLASH,
114
// OBSOLETE     MOD,
115
// OBSOLETE     REM,
116
// OBSOLETE     NOT,
117
// OBSOLETE     POINTER,
118
// OBSOLETE     RECEIVE,
119
// OBSOLETE     UP,
120
// OBSOLETE     IF,
121
// OBSOLETE     THEN,
122
// OBSOLETE     ELSE,
123
// OBSOLETE     FI,
124
// OBSOLETE     ELSIF,
125
// OBSOLETE     ILLEGAL_TOKEN,
126
// OBSOLETE     NUM,
127
// OBSOLETE     PRED,
128
// OBSOLETE     SUCC,
129
// OBSOLETE     ABS,
130
// OBSOLETE     CARD,
131
// OBSOLETE     MAX_TOKEN,
132
// OBSOLETE     MIN_TOKEN,
133
// OBSOLETE     ADDR_TOKEN,
134
// OBSOLETE     SIZE,
135
// OBSOLETE     UPPER,
136
// OBSOLETE     LOWER,
137
// OBSOLETE     LENGTH,
138
// OBSOLETE     ARRAY,
139
// OBSOLETE     GDB_VARIABLE,
140
// OBSOLETE     GDB_ASSIGNMENT
141
// OBSOLETE   };
142
// OBSOLETE 
143
// OBSOLETE /* Forward declarations. */
144
// OBSOLETE 
145
// OBSOLETE static void write_lower_upper_value (enum exp_opcode, struct type *);
146
// OBSOLETE static enum ch_terminal match_bitstring_literal (void);
147
// OBSOLETE static enum ch_terminal match_integer_literal (void);
148
// OBSOLETE static enum ch_terminal match_character_literal (void);
149
// OBSOLETE static enum ch_terminal match_string_literal (void);
150
// OBSOLETE static enum ch_terminal match_float_literal (void);
151
// OBSOLETE static int decode_integer_literal (LONGEST *, char **);
152
// OBSOLETE static int decode_integer_value (int, char **, LONGEST *);
153
// OBSOLETE static char *match_simple_name_string (void);
154
// OBSOLETE static void growbuf_by_size (int);
155
// OBSOLETE static void parse_case_label (void);
156
// OBSOLETE static void parse_untyped_expr (void);
157
// OBSOLETE static void parse_if_expression (void);
158
// OBSOLETE static void parse_if_expression_body (void);
159
// OBSOLETE static void parse_else_alternative (void);
160
// OBSOLETE static void parse_then_alternative (void);
161
// OBSOLETE static void parse_expr (void);
162
// OBSOLETE static void parse_operand0 (void);
163
// OBSOLETE static void parse_operand1 (void);
164
// OBSOLETE static void parse_operand2 (void);
165
// OBSOLETE static void parse_operand3 (void);
166
// OBSOLETE static void parse_operand4 (void);
167
// OBSOLETE static void parse_operand5 (void);
168
// OBSOLETE static void parse_operand6 (void);
169
// OBSOLETE static void parse_primval (void);
170
// OBSOLETE static void parse_tuple (struct type *);
171
// OBSOLETE static void parse_opt_element_list (struct type *);
172
// OBSOLETE static void parse_tuple_element (struct type *);
173
// OBSOLETE static void parse_named_record_element (void);
174
// OBSOLETE static void parse_call (void);
175
// OBSOLETE static struct type *parse_mode_or_normal_call (void);
176
// OBSOLETE #if 0
177
// OBSOLETE static struct type *parse_mode_call (void);
178
// OBSOLETE #endif
179
// OBSOLETE static void parse_unary_call (void);
180
// OBSOLETE static int parse_opt_untyped_expr (void);
181
// OBSOLETE static int expect (enum ch_terminal, char *);
182
// OBSOLETE static enum ch_terminal ch_lex (void);
183
// OBSOLETE INLINE static enum ch_terminal PEEK_TOKEN (void);
184
// OBSOLETE static enum ch_terminal peek_token_ (int);
185
// OBSOLETE static void forward_token_ (void);
186
// OBSOLETE static void require (enum ch_terminal);
187
// OBSOLETE static int check_token (enum ch_terminal);
188
// OBSOLETE 
189
// OBSOLETE #define MAX_LOOK_AHEAD 2
190
// OBSOLETE static enum ch_terminal terminal_buffer[MAX_LOOK_AHEAD + 1] =
191
// OBSOLETE {
192
// OBSOLETE   TOKEN_NOT_READ, TOKEN_NOT_READ, TOKEN_NOT_READ};
193
// OBSOLETE static YYSTYPE yylval;
194
// OBSOLETE static YYSTYPE val_buffer[MAX_LOOK_AHEAD + 1];
195
// OBSOLETE 
196
// OBSOLETE /*int current_token, lookahead_token; */
197
// OBSOLETE 
198
// OBSOLETE INLINE static enum ch_terminal
199
// OBSOLETE PEEK_TOKEN (void)
200
// OBSOLETE {
201
// OBSOLETE   if (terminal_buffer[0] == TOKEN_NOT_READ)
202
// OBSOLETE     {
203
// OBSOLETE       terminal_buffer[0] = ch_lex ();
204
// OBSOLETE       val_buffer[0] = yylval;
205
// OBSOLETE     }
206
// OBSOLETE   return terminal_buffer[0];
207
// OBSOLETE }
208
// OBSOLETE #define PEEK_LVAL() val_buffer[0]
209
// OBSOLETE #define PEEK_TOKEN1() peek_token_(1)
210
// OBSOLETE #define PEEK_TOKEN2() peek_token_(2)
211
// OBSOLETE static enum ch_terminal
212
// OBSOLETE peek_token_ (int i)
213
// OBSOLETE {
214
// OBSOLETE   if (i > MAX_LOOK_AHEAD)
215
// OBSOLETE     internal_error (__FILE__, __LINE__,
216
// OBSOLETE                 "too much lookahead");
217
// OBSOLETE   if (terminal_buffer[i] == TOKEN_NOT_READ)
218
// OBSOLETE     {
219
// OBSOLETE       terminal_buffer[i] = ch_lex ();
220
// OBSOLETE       val_buffer[i] = yylval;
221
// OBSOLETE     }
222
// OBSOLETE   return terminal_buffer[i];
223
// OBSOLETE }
224
// OBSOLETE 
225
// OBSOLETE #if 0
226
// OBSOLETE 
227
// OBSOLETE static void
228
// OBSOLETE pushback_token (enum ch_terminal code, YYSTYPE node)
229
// OBSOLETE {
230
// OBSOLETE   int i;
231
// OBSOLETE   if (terminal_buffer[MAX_LOOK_AHEAD] != TOKEN_NOT_READ)
232
// OBSOLETE     internal_error (__FILE__, __LINE__,
233
// OBSOLETE                 "cannot pushback token");
234
// OBSOLETE   for (i = MAX_LOOK_AHEAD; i > 0; i--)
235
// OBSOLETE     {
236
// OBSOLETE       terminal_buffer[i] = terminal_buffer[i - 1];
237
// OBSOLETE       val_buffer[i] = val_buffer[i - 1];
238
// OBSOLETE     }
239
// OBSOLETE   terminal_buffer[0] = code;
240
// OBSOLETE   val_buffer[0] = node;
241
// OBSOLETE }
242
// OBSOLETE 
243
// OBSOLETE #endif
244
// OBSOLETE 
245
// OBSOLETE static void
246
// OBSOLETE forward_token_ (void)
247
// OBSOLETE {
248
// OBSOLETE   int i;
249
// OBSOLETE   for (i = 0; i < MAX_LOOK_AHEAD; i++)
250
// OBSOLETE     {
251
// OBSOLETE       terminal_buffer[i] = terminal_buffer[i + 1];
252
// OBSOLETE       val_buffer[i] = val_buffer[i + 1];
253
// OBSOLETE     }
254
// OBSOLETE   terminal_buffer[MAX_LOOK_AHEAD] = TOKEN_NOT_READ;
255
// OBSOLETE }
256
// OBSOLETE #define FORWARD_TOKEN() forward_token_()
257
// OBSOLETE 
258
// OBSOLETE /* Skip the next token.
259
// OBSOLETE    if it isn't TOKEN, the parser is broken. */
260
// OBSOLETE 
261
// OBSOLETE static void
262
// OBSOLETE require (enum ch_terminal token)
263
// OBSOLETE {
264
// OBSOLETE   if (PEEK_TOKEN () != token)
265
// OBSOLETE     {
266
// OBSOLETE       internal_error (__FILE__, __LINE__,
267
// OBSOLETE                   "expected token %d", (int) token);
268
// OBSOLETE     }
269
// OBSOLETE   FORWARD_TOKEN ();
270
// OBSOLETE }
271
// OBSOLETE 
272
// OBSOLETE static int
273
// OBSOLETE check_token (enum ch_terminal token)
274
// OBSOLETE {
275
// OBSOLETE   if (PEEK_TOKEN () != token)
276
// OBSOLETE     return 0;
277
// OBSOLETE   FORWARD_TOKEN ();
278
// OBSOLETE   return 1;
279
// OBSOLETE }
280
// OBSOLETE 
281
// OBSOLETE /* return 0 if expected token was not found,
282
// OBSOLETE    else return 1.
283
// OBSOLETE  */
284
// OBSOLETE static int
285
// OBSOLETE expect (enum ch_terminal token, char *message)
286
// OBSOLETE {
287
// OBSOLETE   if (PEEK_TOKEN () != token)
288
// OBSOLETE     {
289
// OBSOLETE       if (message)
290
// OBSOLETE     error (message);
291
// OBSOLETE       else if (token < 256)
292
// OBSOLETE     error ("syntax error - expected a '%c' here \"%s\"", token, lexptr);
293
// OBSOLETE       else
294
// OBSOLETE     error ("syntax error");
295
// OBSOLETE       return 0;
296
// OBSOLETE     }
297
// OBSOLETE   else
298
// OBSOLETE     FORWARD_TOKEN ();
299
// OBSOLETE   return 1;
300
// OBSOLETE }
301
// OBSOLETE 
302
// OBSOLETE #if 0
303
// OBSOLETE /* Parse a name string.  If ALLOW_ALL is 1, ALL is allowed as a postfix. */
304
// OBSOLETE 
305
// OBSOLETE static tree
306
// OBSOLETE parse_opt_name_string (int allow_all)
307
// OBSOLETE {
308
// OBSOLETE   int token = PEEK_TOKEN ();
309
// OBSOLETE   tree name;
310
// OBSOLETE   if (token != NAME)
311
// OBSOLETE     {
312
// OBSOLETE       if (token == ALL && allow_all)
313
// OBSOLETE     {
314
// OBSOLETE       FORWARD_TOKEN ();
315
// OBSOLETE       return ALL_POSTFIX;
316
// OBSOLETE     }
317
// OBSOLETE       return NULL_TREE;
318
// OBSOLETE     }
319
// OBSOLETE   name = PEEK_LVAL ();
320
// OBSOLETE   for (;;)
321
// OBSOLETE     {
322
// OBSOLETE       FORWARD_TOKEN ();
323
// OBSOLETE       token = PEEK_TOKEN ();
324
// OBSOLETE       if (token != '!')
325
// OBSOLETE     return name;
326
// OBSOLETE       FORWARD_TOKEN ();
327
// OBSOLETE       token = PEEK_TOKEN ();
328
// OBSOLETE       if (token == ALL && allow_all)
329
// OBSOLETE     return get_identifier3 (IDENTIFIER_POINTER (name), "!", "*");
330
// OBSOLETE       if (token != NAME)
331
// OBSOLETE     {
332
// OBSOLETE       if (pass == 1)
333
// OBSOLETE         error ("'%s!' is not followed by an identifier",
334
// OBSOLETE                IDENTIFIER_POINTER (name));
335
// OBSOLETE       return name;
336
// OBSOLETE     }
337
// OBSOLETE       name = get_identifier3 (IDENTIFIER_POINTER (name),
338
// OBSOLETE                           "!", IDENTIFIER_POINTER (PEEK_LVAL ()));
339
// OBSOLETE     }
340
// OBSOLETE }
341
// OBSOLETE 
342
// OBSOLETE static tree
343
// OBSOLETE parse_simple_name_string (void)
344
// OBSOLETE {
345
// OBSOLETE   int token = PEEK_TOKEN ();
346
// OBSOLETE   tree name;
347
// OBSOLETE   if (token != NAME)
348
// OBSOLETE     {
349
// OBSOLETE       error ("expected a name here");
350
// OBSOLETE       return error_mark_node;
351
// OBSOLETE     }
352
// OBSOLETE   name = PEEK_LVAL ();
353
// OBSOLETE   FORWARD_TOKEN ();
354
// OBSOLETE   return name;
355
// OBSOLETE }
356
// OBSOLETE 
357
// OBSOLETE static tree
358
// OBSOLETE parse_name_string (void)
359
// OBSOLETE {
360
// OBSOLETE   tree name = parse_opt_name_string (0);
361
// OBSOLETE   if (name)
362
// OBSOLETE     return name;
363
// OBSOLETE   if (pass == 1)
364
// OBSOLETE     error ("expected a name string here");
365
// OBSOLETE   return error_mark_node;
366
// OBSOLETE }
367
// OBSOLETE 
368
// OBSOLETE /* Matches: <name_string>
369
// OBSOLETE    Returns if pass 1: the identifier.
370
// OBSOLETE    Returns if pass 2: a decl or value for identifier. */
371
// OBSOLETE 
372
// OBSOLETE static tree
373
// OBSOLETE parse_name (void)
374
// OBSOLETE {
375
// OBSOLETE   tree name = parse_name_string ();
376
// OBSOLETE   if (pass == 1 || ignoring)
377
// OBSOLETE     return name;
378
// OBSOLETE   else
379
// OBSOLETE     {
380
// OBSOLETE       tree decl = lookup_name (name);
381
// OBSOLETE       if (decl == NULL_TREE)
382
// OBSOLETE     {
383
// OBSOLETE       error ("`%s' undeclared", IDENTIFIER_POINTER (name));
384
// OBSOLETE       return error_mark_node;
385
// OBSOLETE     }
386
// OBSOLETE       else if (TREE_CODE (TREE_TYPE (decl)) == ERROR_MARK)
387
// OBSOLETE     return error_mark_node;
388
// OBSOLETE       else if (TREE_CODE (decl) == CONST_DECL)
389
// OBSOLETE     return DECL_INITIAL (decl);
390
// OBSOLETE       else if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
391
// OBSOLETE     return convert_from_reference (decl);
392
// OBSOLETE       else
393
// OBSOLETE     return decl;
394
// OBSOLETE     }
395
// OBSOLETE }
396
// OBSOLETE #endif
397
// OBSOLETE 
398
// OBSOLETE #if 0
399
// OBSOLETE static void
400
// OBSOLETE pushback_paren_expr (tree expr)
401
// OBSOLETE {
402
// OBSOLETE   if (pass == 1 && !ignoring)
403
// OBSOLETE     expr = build1 (PAREN_EXPR, NULL_TREE, expr);
404
// OBSOLETE   pushback_token (EXPR, expr);
405
// OBSOLETE }
406
// OBSOLETE #endif
407
// OBSOLETE 
408
// OBSOLETE /* Matches: <case label> */
409
// OBSOLETE 
410
// OBSOLETE static void
411
// OBSOLETE parse_case_label (void)
412
// OBSOLETE {
413
// OBSOLETE   if (check_token (ELSE))
414
// OBSOLETE     error ("ELSE in tuples labels not implemented");
415
// OBSOLETE   /* Does not handle the case of a mode name.  FIXME */
416
// OBSOLETE   parse_expr ();
417
// OBSOLETE   if (check_token (':'))
418
// OBSOLETE     {
419
// OBSOLETE       parse_expr ();
420
// OBSOLETE       write_exp_elt_opcode (BINOP_RANGE);
421
// OBSOLETE     }
422
// OBSOLETE }
423
// OBSOLETE 
424
// OBSOLETE static int
425
// OBSOLETE parse_opt_untyped_expr (void)
426
// OBSOLETE {
427
// OBSOLETE   switch (PEEK_TOKEN ())
428
// OBSOLETE     {
429
// OBSOLETE     case ',':
430
// OBSOLETE     case ':':
431
// OBSOLETE     case ')':
432
// OBSOLETE       return 0;
433
// OBSOLETE     default:
434
// OBSOLETE       parse_untyped_expr ();
435
// OBSOLETE       return 1;
436
// OBSOLETE     }
437
// OBSOLETE }
438
// OBSOLETE 
439
// OBSOLETE static void
440
// OBSOLETE parse_unary_call (void)
441
// OBSOLETE {
442
// OBSOLETE   FORWARD_TOKEN ();
443
// OBSOLETE   expect ('(', NULL);
444
// OBSOLETE   parse_expr ();
445
// OBSOLETE   expect (')', NULL);
446
// OBSOLETE }
447
// OBSOLETE 
448
// OBSOLETE /* Parse NAME '(' MODENAME ')'. */
449
// OBSOLETE 
450
// OBSOLETE #if 0
451
// OBSOLETE 
452
// OBSOLETE static struct type *
453
// OBSOLETE parse_mode_call (void)
454
// OBSOLETE {
455
// OBSOLETE   struct type *type;
456
// OBSOLETE   FORWARD_TOKEN ();
457
// OBSOLETE   expect ('(', NULL);
458
// OBSOLETE   if (PEEK_TOKEN () != TYPENAME)
459
// OBSOLETE     error ("expect MODENAME here `%s'", lexptr);
460
// OBSOLETE   type = PEEK_LVAL ().tsym.type;
461
// OBSOLETE   FORWARD_TOKEN ();
462
// OBSOLETE   expect (')', NULL);
463
// OBSOLETE   return type;
464
// OBSOLETE }
465
// OBSOLETE 
466
// OBSOLETE #endif
467
// OBSOLETE 
468
// OBSOLETE static struct type *
469
// OBSOLETE parse_mode_or_normal_call (void)
470
// OBSOLETE {
471
// OBSOLETE   struct type *type;
472
// OBSOLETE   FORWARD_TOKEN ();
473
// OBSOLETE   expect ('(', NULL);
474
// OBSOLETE   if (PEEK_TOKEN () == TYPENAME)
475
// OBSOLETE     {
476
// OBSOLETE       type = PEEK_LVAL ().tsym.type;
477
// OBSOLETE       FORWARD_TOKEN ();
478
// OBSOLETE     }
479
// OBSOLETE   else
480
// OBSOLETE     {
481
// OBSOLETE       parse_expr ();
482
// OBSOLETE       type = NULL;
483
// OBSOLETE     }
484
// OBSOLETE   expect (')', NULL);
485
// OBSOLETE   return type;
486
// OBSOLETE }
487
// OBSOLETE 
488
// OBSOLETE /* Parse something that looks like a function call.
489
// OBSOLETE    Assume we have parsed the function, and are at the '('. */
490
// OBSOLETE 
491
// OBSOLETE static void
492
// OBSOLETE parse_call (void)
493
// OBSOLETE {
494
// OBSOLETE   int arg_count;
495
// OBSOLETE   require ('(');
496
// OBSOLETE   /* This is to save the value of arglist_len
497
// OBSOLETE      being accumulated for each dimension. */
498
// OBSOLETE   start_arglist ();
499
// OBSOLETE   if (parse_opt_untyped_expr ())
500
// OBSOLETE     {
501
// OBSOLETE       int tok = PEEK_TOKEN ();
502
// OBSOLETE       arglist_len = 1;
503
// OBSOLETE       if (tok == UP || tok == ':')
504
// OBSOLETE     {
505
// OBSOLETE       FORWARD_TOKEN ();
506
// OBSOLETE       parse_expr ();
507
// OBSOLETE       expect (')', "expected ')' to terminate slice");
508
// OBSOLETE       end_arglist ();
509
// OBSOLETE       write_exp_elt_opcode (tok == UP ? TERNOP_SLICE_COUNT
510
// OBSOLETE                             : TERNOP_SLICE);
511
// OBSOLETE       return;
512
// OBSOLETE     }
513
// OBSOLETE       while (check_token (','))
514
// OBSOLETE     {
515
// OBSOLETE       parse_untyped_expr ();
516
// OBSOLETE       arglist_len++;
517
// OBSOLETE     }
518
// OBSOLETE     }
519
// OBSOLETE   else
520
// OBSOLETE     arglist_len = 0;
521
// OBSOLETE   expect (')', NULL);
522
// OBSOLETE   arg_count = end_arglist ();
523
// OBSOLETE   write_exp_elt_opcode (MULTI_SUBSCRIPT);
524
// OBSOLETE   write_exp_elt_longcst (arg_count);
525
// OBSOLETE   write_exp_elt_opcode (MULTI_SUBSCRIPT);
526
// OBSOLETE }
527
// OBSOLETE 
528
// OBSOLETE static void
529
// OBSOLETE parse_named_record_element (void)
530
// OBSOLETE {
531
// OBSOLETE   struct stoken label;
532
// OBSOLETE   char buf[256];
533
// OBSOLETE 
534
// OBSOLETE   label = PEEK_LVAL ().sval;
535
// OBSOLETE   sprintf (buf, "expected a field name here `%s'", lexptr);
536
// OBSOLETE   expect (DOT_FIELD_NAME, buf);
537
// OBSOLETE   if (check_token (','))
538
// OBSOLETE     parse_named_record_element ();
539
// OBSOLETE   else if (check_token (':'))
540
// OBSOLETE     parse_expr ();
541
// OBSOLETE   else
542
// OBSOLETE     error ("syntax error near `%s' in named record tuple element", lexptr);
543
// OBSOLETE   write_exp_elt_opcode (OP_LABELED);
544
// OBSOLETE   write_exp_string (label);
545
// OBSOLETE   write_exp_elt_opcode (OP_LABELED);
546
// OBSOLETE }
547
// OBSOLETE 
548
// OBSOLETE /* Returns one or more TREE_LIST nodes, in reverse order. */
549
// OBSOLETE 
550
// OBSOLETE static void
551
// OBSOLETE parse_tuple_element (struct type *type)
552
// OBSOLETE {
553
// OBSOLETE   if (PEEK_TOKEN () == DOT_FIELD_NAME)
554
// OBSOLETE     {
555
// OBSOLETE       /* Parse a labelled structure tuple. */
556
// OBSOLETE       parse_named_record_element ();
557
// OBSOLETE       return;
558
// OBSOLETE     }
559
// OBSOLETE 
560
// OBSOLETE   if (check_token ('('))
561
// OBSOLETE     {
562
// OBSOLETE       if (check_token ('*'))
563
// OBSOLETE     {
564
// OBSOLETE       expect (')', "missing ')' after '*' case label list");
565
// OBSOLETE       if (type)
566
// OBSOLETE         {
567
// OBSOLETE           if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
568
// OBSOLETE             {
569
// OBSOLETE               /* do this as a range from low to high */
570
// OBSOLETE               struct type *range_type = TYPE_FIELD_TYPE (type, 0);
571
// OBSOLETE               LONGEST low_bound, high_bound;
572
// OBSOLETE               if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
573
// OBSOLETE                 error ("cannot determine bounds for (*)");
574
// OBSOLETE               /* lower bound */
575
// OBSOLETE               write_exp_elt_opcode (OP_LONG);
576
// OBSOLETE               write_exp_elt_type (range_type);
577
// OBSOLETE               write_exp_elt_longcst (low_bound);
578
// OBSOLETE               write_exp_elt_opcode (OP_LONG);
579
// OBSOLETE               /* upper bound */
580
// OBSOLETE               write_exp_elt_opcode (OP_LONG);
581
// OBSOLETE               write_exp_elt_type (range_type);
582
// OBSOLETE               write_exp_elt_longcst (high_bound);
583
// OBSOLETE               write_exp_elt_opcode (OP_LONG);
584
// OBSOLETE               write_exp_elt_opcode (BINOP_RANGE);
585
// OBSOLETE             }
586
// OBSOLETE           else
587
// OBSOLETE             error ("(*) in invalid context");
588
// OBSOLETE         }
589
// OBSOLETE       else
590
// OBSOLETE         error ("(*) only possible with modename in front of tuple (mode[..])");
591
// OBSOLETE     }
592
// OBSOLETE       else
593
// OBSOLETE     {
594
// OBSOLETE       parse_case_label ();
595
// OBSOLETE       while (check_token (','))
596
// OBSOLETE         {
597
// OBSOLETE           parse_case_label ();
598
// OBSOLETE           write_exp_elt_opcode (BINOP_COMMA);
599
// OBSOLETE         }
600
// OBSOLETE       expect (')', NULL);
601
// OBSOLETE     }
602
// OBSOLETE     }
603
// OBSOLETE   else
604
// OBSOLETE     parse_untyped_expr ();
605
// OBSOLETE   if (check_token (':'))
606
// OBSOLETE     {
607
// OBSOLETE       /* A powerset range or a labeled Array. */
608
// OBSOLETE       parse_untyped_expr ();
609
// OBSOLETE       write_exp_elt_opcode (BINOP_RANGE);
610
// OBSOLETE     }
611
// OBSOLETE }
612
// OBSOLETE 
613
// OBSOLETE /* Matches:  a COMMA-separated list of tuple elements.
614
// OBSOLETE    Returns a list (of TREE_LIST nodes). */
615
// OBSOLETE static void
616
// OBSOLETE parse_opt_element_list (struct type *type)
617
// OBSOLETE {
618
// OBSOLETE   arglist_len = 0;
619
// OBSOLETE   if (PEEK_TOKEN () == ']')
620
// OBSOLETE     return;
621
// OBSOLETE   for (;;)
622
// OBSOLETE     {
623
// OBSOLETE       parse_tuple_element (type);
624
// OBSOLETE       arglist_len++;
625
// OBSOLETE       if (PEEK_TOKEN () == ']')
626
// OBSOLETE     break;
627
// OBSOLETE       if (!check_token (','))
628
// OBSOLETE     error ("bad syntax in tuple");
629
// OBSOLETE     }
630
// OBSOLETE }
631
// OBSOLETE 
632
// OBSOLETE /* Parses: '[' elements ']'
633
// OBSOLETE    If modename is non-NULL it prefixed the tuple.  */
634
// OBSOLETE 
635
// OBSOLETE static void
636
// OBSOLETE parse_tuple (struct type *mode)
637
// OBSOLETE {
638
// OBSOLETE   struct type *type;
639
// OBSOLETE   if (mode)
640
// OBSOLETE     type = check_typedef (mode);
641
// OBSOLETE   else
642
// OBSOLETE     type = 0;
643
// OBSOLETE   require ('[');
644
// OBSOLETE   start_arglist ();
645
// OBSOLETE   parse_opt_element_list (type);
646
// OBSOLETE   expect (']', "missing ']' after tuple");
647
// OBSOLETE   write_exp_elt_opcode (OP_ARRAY);
648
// OBSOLETE   write_exp_elt_longcst ((LONGEST) 0);
649
// OBSOLETE   write_exp_elt_longcst ((LONGEST) end_arglist () - 1);
650
// OBSOLETE   write_exp_elt_opcode (OP_ARRAY);
651
// OBSOLETE   if (type)
652
// OBSOLETE     {
653
// OBSOLETE       if (TYPE_CODE (type) != TYPE_CODE_ARRAY
654
// OBSOLETE       && TYPE_CODE (type) != TYPE_CODE_STRUCT
655
// OBSOLETE       && TYPE_CODE (type) != TYPE_CODE_SET)
656
// OBSOLETE     error ("invalid tuple mode");
657
// OBSOLETE       write_exp_elt_opcode (UNOP_CAST);
658
// OBSOLETE       write_exp_elt_type (mode);
659
// OBSOLETE       write_exp_elt_opcode (UNOP_CAST);
660
// OBSOLETE     }
661
// OBSOLETE }
662
// OBSOLETE 
663
// OBSOLETE static void
664
// OBSOLETE parse_primval (void)
665
// OBSOLETE {
666
// OBSOLETE   struct type *type;
667
// OBSOLETE   enum exp_opcode op;
668
// OBSOLETE   char *op_name;
669
// OBSOLETE   switch (PEEK_TOKEN ())
670
// OBSOLETE     {
671
// OBSOLETE     case INTEGER_LITERAL:
672
// OBSOLETE     case CHARACTER_LITERAL:
673
// OBSOLETE       write_exp_elt_opcode (OP_LONG);
674
// OBSOLETE       write_exp_elt_type (PEEK_LVAL ().typed_val.type);
675
// OBSOLETE       write_exp_elt_longcst (PEEK_LVAL ().typed_val.val);
676
// OBSOLETE       write_exp_elt_opcode (OP_LONG);
677
// OBSOLETE       FORWARD_TOKEN ();
678
// OBSOLETE       break;
679
// OBSOLETE     case BOOLEAN_LITERAL:
680
// OBSOLETE       write_exp_elt_opcode (OP_BOOL);
681
// OBSOLETE       write_exp_elt_longcst ((LONGEST) PEEK_LVAL ().ulval);
682
// OBSOLETE       write_exp_elt_opcode (OP_BOOL);
683
// OBSOLETE       FORWARD_TOKEN ();
684
// OBSOLETE       break;
685
// OBSOLETE     case FLOAT_LITERAL:
686
// OBSOLETE       write_exp_elt_opcode (OP_DOUBLE);
687
// OBSOLETE       write_exp_elt_type (builtin_type_double);
688
// OBSOLETE       write_exp_elt_dblcst (PEEK_LVAL ().dval);
689
// OBSOLETE       write_exp_elt_opcode (OP_DOUBLE);
690
// OBSOLETE       FORWARD_TOKEN ();
691
// OBSOLETE       break;
692
// OBSOLETE     case EMPTINESS_LITERAL:
693
// OBSOLETE       write_exp_elt_opcode (OP_LONG);
694
// OBSOLETE       write_exp_elt_type (lookup_pointer_type (builtin_type_void));
695
// OBSOLETE       write_exp_elt_longcst (0);
696
// OBSOLETE       write_exp_elt_opcode (OP_LONG);
697
// OBSOLETE       FORWARD_TOKEN ();
698
// OBSOLETE       break;
699
// OBSOLETE     case CHARACTER_STRING_LITERAL:
700
// OBSOLETE       write_exp_elt_opcode (OP_STRING);
701
// OBSOLETE       write_exp_string (PEEK_LVAL ().sval);
702
// OBSOLETE       write_exp_elt_opcode (OP_STRING);
703
// OBSOLETE       FORWARD_TOKEN ();
704
// OBSOLETE       break;
705
// OBSOLETE     case BIT_STRING_LITERAL:
706
// OBSOLETE       write_exp_elt_opcode (OP_BITSTRING);
707
// OBSOLETE       write_exp_bitstring (PEEK_LVAL ().sval);
708
// OBSOLETE       write_exp_elt_opcode (OP_BITSTRING);
709
// OBSOLETE       FORWARD_TOKEN ();
710
// OBSOLETE       break;
711
// OBSOLETE     case ARRAY:
712
// OBSOLETE       FORWARD_TOKEN ();
713
// OBSOLETE       /* This is pseudo-Chill, similar to C's '(TYPE[])EXPR'
714
// OBSOLETE          which casts to an artificial array. */
715
// OBSOLETE       expect ('(', NULL);
716
// OBSOLETE       expect (')', NULL);
717
// OBSOLETE       if (PEEK_TOKEN () != TYPENAME)
718
// OBSOLETE     error ("missing MODENAME after ARRAY()");
719
// OBSOLETE       type = PEEK_LVAL ().tsym.type;
720
// OBSOLETE       FORWARD_TOKEN ();
721
// OBSOLETE       expect ('(', NULL);
722
// OBSOLETE       parse_expr ();
723
// OBSOLETE       expect (')', "missing right parenthesis");
724
// OBSOLETE       type = create_array_type ((struct type *) NULL, type,
725
// OBSOLETE                             create_range_type ((struct type *) NULL,
726
// OBSOLETE                                                builtin_type_int, 0, 0));
727
// OBSOLETE       TYPE_ARRAY_UPPER_BOUND_TYPE (type) = BOUND_CANNOT_BE_DETERMINED;
728
// OBSOLETE       write_exp_elt_opcode (UNOP_CAST);
729
// OBSOLETE       write_exp_elt_type (type);
730
// OBSOLETE       write_exp_elt_opcode (UNOP_CAST);
731
// OBSOLETE       break;
732
// OBSOLETE #if 0
733
// OBSOLETE     case CONST:
734
// OBSOLETE     case EXPR:
735
// OBSOLETE       val = PEEK_LVAL ();
736
// OBSOLETE       FORWARD_TOKEN ();
737
// OBSOLETE       break;
738
// OBSOLETE #endif
739
// OBSOLETE     case '(':
740
// OBSOLETE       FORWARD_TOKEN ();
741
// OBSOLETE       parse_expr ();
742
// OBSOLETE       expect (')', "missing right parenthesis");
743
// OBSOLETE       break;
744
// OBSOLETE     case '[':
745
// OBSOLETE       parse_tuple (NULL);
746
// OBSOLETE       break;
747
// OBSOLETE     case GENERAL_PROCEDURE_NAME:
748
// OBSOLETE     case LOCATION_NAME:
749
// OBSOLETE       write_exp_elt_opcode (OP_VAR_VALUE);
750
// OBSOLETE       write_exp_elt_block (NULL);
751
// OBSOLETE       write_exp_elt_sym (PEEK_LVAL ().ssym.sym);
752
// OBSOLETE       write_exp_elt_opcode (OP_VAR_VALUE);
753
// OBSOLETE       FORWARD_TOKEN ();
754
// OBSOLETE       break;
755
// OBSOLETE     case GDB_VARIABLE:              /* gdb specific */
756
// OBSOLETE       FORWARD_TOKEN ();
757
// OBSOLETE       break;
758
// OBSOLETE     case NUM:
759
// OBSOLETE       parse_unary_call ();
760
// OBSOLETE       write_exp_elt_opcode (UNOP_CAST);
761
// OBSOLETE       write_exp_elt_type (builtin_type_int);
762
// OBSOLETE       write_exp_elt_opcode (UNOP_CAST);
763
// OBSOLETE       break;
764
// OBSOLETE     case CARD:
765
// OBSOLETE       parse_unary_call ();
766
// OBSOLETE       write_exp_elt_opcode (UNOP_CARD);
767
// OBSOLETE       break;
768
// OBSOLETE     case MAX_TOKEN:
769
// OBSOLETE       parse_unary_call ();
770
// OBSOLETE       write_exp_elt_opcode (UNOP_CHMAX);
771
// OBSOLETE       break;
772
// OBSOLETE     case MIN_TOKEN:
773
// OBSOLETE       parse_unary_call ();
774
// OBSOLETE       write_exp_elt_opcode (UNOP_CHMIN);
775
// OBSOLETE       break;
776
// OBSOLETE     case PRED:
777
// OBSOLETE       op_name = "PRED";
778
// OBSOLETE       goto unimplemented_unary_builtin;
779
// OBSOLETE     case SUCC:
780
// OBSOLETE       op_name = "SUCC";
781
// OBSOLETE       goto unimplemented_unary_builtin;
782
// OBSOLETE     case ABS:
783
// OBSOLETE       op_name = "ABS";
784
// OBSOLETE       goto unimplemented_unary_builtin;
785
// OBSOLETE     unimplemented_unary_builtin:
786
// OBSOLETE       parse_unary_call ();
787
// OBSOLETE       error ("not implemented:  %s builtin function", op_name);
788
// OBSOLETE       break;
789
// OBSOLETE     case ADDR_TOKEN:
790
// OBSOLETE       parse_unary_call ();
791
// OBSOLETE       write_exp_elt_opcode (UNOP_ADDR);
792
// OBSOLETE       break;
793
// OBSOLETE     case SIZE:
794
// OBSOLETE       type = parse_mode_or_normal_call ();
795
// OBSOLETE       if (type)
796
// OBSOLETE     {
797
// OBSOLETE       write_exp_elt_opcode (OP_LONG);
798
// OBSOLETE       write_exp_elt_type (builtin_type_int);
799
// OBSOLETE       CHECK_TYPEDEF (type);
800
// OBSOLETE       write_exp_elt_longcst ((LONGEST) TYPE_LENGTH (type));
801
// OBSOLETE       write_exp_elt_opcode (OP_LONG);
802
// OBSOLETE     }
803
// OBSOLETE       else
804
// OBSOLETE     write_exp_elt_opcode (UNOP_SIZEOF);
805
// OBSOLETE       break;
806
// OBSOLETE     case LOWER:
807
// OBSOLETE       op = UNOP_LOWER;
808
// OBSOLETE       goto lower_upper;
809
// OBSOLETE     case UPPER:
810
// OBSOLETE       op = UNOP_UPPER;
811
// OBSOLETE       goto lower_upper;
812
// OBSOLETE     lower_upper:
813
// OBSOLETE       type = parse_mode_or_normal_call ();
814
// OBSOLETE       write_lower_upper_value (op, type);
815
// OBSOLETE       break;
816
// OBSOLETE     case LENGTH:
817
// OBSOLETE       parse_unary_call ();
818
// OBSOLETE       write_exp_elt_opcode (UNOP_LENGTH);
819
// OBSOLETE       break;
820
// OBSOLETE     case TYPENAME:
821
// OBSOLETE       type = PEEK_LVAL ().tsym.type;
822
// OBSOLETE       FORWARD_TOKEN ();
823
// OBSOLETE       switch (PEEK_TOKEN ())
824
// OBSOLETE     {
825
// OBSOLETE     case '[':
826
// OBSOLETE       parse_tuple (type);
827
// OBSOLETE       break;
828
// OBSOLETE     case '(':
829
// OBSOLETE       FORWARD_TOKEN ();
830
// OBSOLETE       parse_expr ();
831
// OBSOLETE       expect (')', "missing right parenthesis");
832
// OBSOLETE       write_exp_elt_opcode (UNOP_CAST);
833
// OBSOLETE       write_exp_elt_type (type);
834
// OBSOLETE       write_exp_elt_opcode (UNOP_CAST);
835
// OBSOLETE       break;
836
// OBSOLETE     default:
837
// OBSOLETE       error ("typename in invalid context");
838
// OBSOLETE     }
839
// OBSOLETE       break;
840
// OBSOLETE 
841
// OBSOLETE     default:
842
// OBSOLETE       error ("invalid expression syntax at `%s'", lexptr);
843
// OBSOLETE     }
844
// OBSOLETE   for (;;)
845
// OBSOLETE     {
846
// OBSOLETE       switch (PEEK_TOKEN ())
847
// OBSOLETE     {
848
// OBSOLETE     case DOT_FIELD_NAME:
849
// OBSOLETE       write_exp_elt_opcode (STRUCTOP_STRUCT);
850
// OBSOLETE       write_exp_string (PEEK_LVAL ().sval);
851
// OBSOLETE       write_exp_elt_opcode (STRUCTOP_STRUCT);
852
// OBSOLETE       FORWARD_TOKEN ();
853
// OBSOLETE       continue;
854
// OBSOLETE     case POINTER:
855
// OBSOLETE       FORWARD_TOKEN ();
856
// OBSOLETE       if (PEEK_TOKEN () == TYPENAME)
857
// OBSOLETE         {
858
// OBSOLETE           type = PEEK_LVAL ().tsym.type;
859
// OBSOLETE           write_exp_elt_opcode (UNOP_CAST);
860
// OBSOLETE           write_exp_elt_type (lookup_pointer_type (type));
861
// OBSOLETE           write_exp_elt_opcode (UNOP_CAST);
862
// OBSOLETE           FORWARD_TOKEN ();
863
// OBSOLETE         }
864
// OBSOLETE       write_exp_elt_opcode (UNOP_IND);
865
// OBSOLETE       continue;
866
// OBSOLETE     case OPEN_PAREN:
867
// OBSOLETE       parse_call ();
868
// OBSOLETE       continue;
869
// OBSOLETE     case CHARACTER_STRING_LITERAL:
870
// OBSOLETE     case CHARACTER_LITERAL:
871
// OBSOLETE     case BIT_STRING_LITERAL:
872
// OBSOLETE       /* Handle string repetition. (See comment in parse_operand5.) */
873
// OBSOLETE       parse_primval ();
874
// OBSOLETE       write_exp_elt_opcode (MULTI_SUBSCRIPT);
875
// OBSOLETE       write_exp_elt_longcst (1);
876
// OBSOLETE       write_exp_elt_opcode (MULTI_SUBSCRIPT);
877
// OBSOLETE       continue;
878
// OBSOLETE     case END_TOKEN:
879
// OBSOLETE     case TOKEN_NOT_READ:
880
// OBSOLETE     case INTEGER_LITERAL:
881
// OBSOLETE     case BOOLEAN_LITERAL:
882
// OBSOLETE     case FLOAT_LITERAL:
883
// OBSOLETE     case GENERAL_PROCEDURE_NAME:
884
// OBSOLETE     case LOCATION_NAME:
885
// OBSOLETE     case EMPTINESS_LITERAL:
886
// OBSOLETE     case TYPENAME:
887
// OBSOLETE     case CASE:
888
// OBSOLETE     case OF:
889
// OBSOLETE     case ESAC:
890
// OBSOLETE     case LOGIOR:
891
// OBSOLETE     case ORIF:
892
// OBSOLETE     case LOGXOR:
893
// OBSOLETE     case LOGAND:
894
// OBSOLETE     case ANDIF:
895
// OBSOLETE     case NOTEQUAL:
896
// OBSOLETE     case GEQ:
897
// OBSOLETE     case LEQ:
898
// OBSOLETE     case IN:
899
// OBSOLETE     case SLASH_SLASH:
900
// OBSOLETE     case MOD:
901
// OBSOLETE     case REM:
902
// OBSOLETE     case NOT:
903
// OBSOLETE     case RECEIVE:
904
// OBSOLETE     case UP:
905
// OBSOLETE     case IF:
906
// OBSOLETE     case THEN:
907
// OBSOLETE     case ELSE:
908
// OBSOLETE     case FI:
909
// OBSOLETE     case ELSIF:
910
// OBSOLETE     case ILLEGAL_TOKEN:
911
// OBSOLETE     case NUM:
912
// OBSOLETE     case PRED:
913
// OBSOLETE     case SUCC:
914
// OBSOLETE     case ABS:
915
// OBSOLETE     case CARD:
916
// OBSOLETE     case MAX_TOKEN:
917
// OBSOLETE     case MIN_TOKEN:
918
// OBSOLETE     case ADDR_TOKEN:
919
// OBSOLETE     case SIZE:
920
// OBSOLETE     case UPPER:
921
// OBSOLETE     case LOWER:
922
// OBSOLETE     case LENGTH:
923
// OBSOLETE     case ARRAY:
924
// OBSOLETE     case GDB_VARIABLE:
925
// OBSOLETE     case GDB_ASSIGNMENT:
926
// OBSOLETE       break;
927
// OBSOLETE     }
928
// OBSOLETE       break;
929
// OBSOLETE     }
930
// OBSOLETE   return;
931
// OBSOLETE }
932
// OBSOLETE 
933
// OBSOLETE static void
934
// OBSOLETE parse_operand6 (void)
935
// OBSOLETE {
936
// OBSOLETE   if (check_token (RECEIVE))
937
// OBSOLETE     {
938
// OBSOLETE       parse_primval ();
939
// OBSOLETE       error ("not implemented:  RECEIVE expression");
940
// OBSOLETE     }
941
// OBSOLETE   else if (check_token (POINTER))
942
// OBSOLETE     {
943
// OBSOLETE       parse_primval ();
944
// OBSOLETE       write_exp_elt_opcode (UNOP_ADDR);
945
// OBSOLETE     }
946
// OBSOLETE   else
947
// OBSOLETE     parse_primval ();
948
// OBSOLETE }
949
// OBSOLETE 
950
// OBSOLETE static void
951
// OBSOLETE parse_operand5 (void)
952
// OBSOLETE {
953
// OBSOLETE   enum exp_opcode op;
954
// OBSOLETE   /* We are supposed to be looking for a <string repetition operator>,
955
// OBSOLETE      but in general we can't distinguish that from a parenthesized
956
// OBSOLETE      expression.  This is especially difficult if we allow the
957
// OBSOLETE      string operand to be a constant expression (as requested by
958
// OBSOLETE      some users), and not just a string literal.
959
// OBSOLETE      Consider:  LPRN expr RPRN LPRN expr RPRN
960
// OBSOLETE      Is that a function call or string repetition?
961
// OBSOLETE      Instead, we handle string repetition in parse_primval,
962
// OBSOLETE      and build_generalized_call. */
963
// OBSOLETE   switch (PEEK_TOKEN ())
964
// OBSOLETE     {
965
// OBSOLETE     case NOT:
966
// OBSOLETE       op = UNOP_LOGICAL_NOT;
967
// OBSOLETE       break;
968
// OBSOLETE     case '-':
969
// OBSOLETE       op = UNOP_NEG;
970
// OBSOLETE       break;
971
// OBSOLETE     default:
972
// OBSOLETE       op = OP_NULL;
973
// OBSOLETE     }
974
// OBSOLETE   if (op != OP_NULL)
975
// OBSOLETE     FORWARD_TOKEN ();
976
// OBSOLETE   parse_operand6 ();
977
// OBSOLETE   if (op != OP_NULL)
978
// OBSOLETE     write_exp_elt_opcode (op);
979
// OBSOLETE }
980
// OBSOLETE 
981
// OBSOLETE static void
982
// OBSOLETE parse_operand4 (void)
983
// OBSOLETE {
984
// OBSOLETE   enum exp_opcode op;
985
// OBSOLETE   parse_operand5 ();
986
// OBSOLETE   for (;;)
987
// OBSOLETE     {
988
// OBSOLETE       switch (PEEK_TOKEN ())
989
// OBSOLETE     {
990
// OBSOLETE     case '*':
991
// OBSOLETE       op = BINOP_MUL;
992
// OBSOLETE       break;
993
// OBSOLETE     case '/':
994
// OBSOLETE       op = BINOP_DIV;
995
// OBSOLETE       break;
996
// OBSOLETE     case MOD:
997
// OBSOLETE       op = BINOP_MOD;
998
// OBSOLETE       break;
999
// OBSOLETE     case REM:
1000
// OBSOLETE       op = BINOP_REM;
1001
// OBSOLETE       break;
1002
// OBSOLETE     default:
1003
// OBSOLETE       return;
1004
// OBSOLETE     }
1005
// OBSOLETE       FORWARD_TOKEN ();
1006
// OBSOLETE       parse_operand5 ();
1007
// OBSOLETE       write_exp_elt_opcode (op);
1008
// OBSOLETE     }
1009
// OBSOLETE }
1010
// OBSOLETE 
1011
// OBSOLETE static void
1012
// OBSOLETE parse_operand3 (void)
1013
// OBSOLETE {
1014
// OBSOLETE   enum exp_opcode op;
1015
// OBSOLETE   parse_operand4 ();
1016
// OBSOLETE   for (;;)
1017
// OBSOLETE     {
1018
// OBSOLETE       switch (PEEK_TOKEN ())
1019
// OBSOLETE     {
1020
// OBSOLETE     case '+':
1021
// OBSOLETE       op = BINOP_ADD;
1022
// OBSOLETE       break;
1023
// OBSOLETE     case '-':
1024
// OBSOLETE       op = BINOP_SUB;
1025
// OBSOLETE       break;
1026
// OBSOLETE     case SLASH_SLASH:
1027
// OBSOLETE       op = BINOP_CONCAT;
1028
// OBSOLETE       break;
1029
// OBSOLETE     default:
1030
// OBSOLETE       return;
1031
// OBSOLETE     }
1032
// OBSOLETE       FORWARD_TOKEN ();
1033
// OBSOLETE       parse_operand4 ();
1034
// OBSOLETE       write_exp_elt_opcode (op);
1035
// OBSOLETE     }
1036
// OBSOLETE }
1037
// OBSOLETE 
1038
// OBSOLETE static void
1039
// OBSOLETE parse_operand2 (void)
1040
// OBSOLETE {
1041
// OBSOLETE   enum exp_opcode op;
1042
// OBSOLETE   parse_operand3 ();
1043
// OBSOLETE   for (;;)
1044
// OBSOLETE     {
1045
// OBSOLETE       if (check_token (IN))
1046
// OBSOLETE     {
1047
// OBSOLETE       parse_operand3 ();
1048
// OBSOLETE       write_exp_elt_opcode (BINOP_IN);
1049
// OBSOLETE     }
1050
// OBSOLETE       else
1051
// OBSOLETE     {
1052
// OBSOLETE       switch (PEEK_TOKEN ())
1053
// OBSOLETE         {
1054
// OBSOLETE         case '>':
1055
// OBSOLETE           op = BINOP_GTR;
1056
// OBSOLETE           break;
1057
// OBSOLETE         case GEQ:
1058
// OBSOLETE           op = BINOP_GEQ;
1059
// OBSOLETE           break;
1060
// OBSOLETE         case '<':
1061
// OBSOLETE           op = BINOP_LESS;
1062
// OBSOLETE           break;
1063
// OBSOLETE         case LEQ:
1064
// OBSOLETE           op = BINOP_LEQ;
1065
// OBSOLETE           break;
1066
// OBSOLETE         case '=':
1067
// OBSOLETE           op = BINOP_EQUAL;
1068
// OBSOLETE           break;
1069
// OBSOLETE         case NOTEQUAL:
1070
// OBSOLETE           op = BINOP_NOTEQUAL;
1071
// OBSOLETE           break;
1072
// OBSOLETE         default:
1073
// OBSOLETE           return;
1074
// OBSOLETE         }
1075
// OBSOLETE       FORWARD_TOKEN ();
1076
// OBSOLETE       parse_operand3 ();
1077
// OBSOLETE       write_exp_elt_opcode (op);
1078
// OBSOLETE     }
1079
// OBSOLETE     }
1080
// OBSOLETE }
1081
// OBSOLETE 
1082
// OBSOLETE static void
1083
// OBSOLETE parse_operand1 (void)
1084
// OBSOLETE {
1085
// OBSOLETE   enum exp_opcode op;
1086
// OBSOLETE   parse_operand2 ();
1087
// OBSOLETE   for (;;)
1088
// OBSOLETE     {
1089
// OBSOLETE       switch (PEEK_TOKEN ())
1090
// OBSOLETE     {
1091
// OBSOLETE     case LOGAND:
1092
// OBSOLETE       op = BINOP_BITWISE_AND;
1093
// OBSOLETE       break;
1094
// OBSOLETE     case ANDIF:
1095
// OBSOLETE       op = BINOP_LOGICAL_AND;
1096
// OBSOLETE       break;
1097
// OBSOLETE     default:
1098
// OBSOLETE       return;
1099
// OBSOLETE     }
1100
// OBSOLETE       FORWARD_TOKEN ();
1101
// OBSOLETE       parse_operand2 ();
1102
// OBSOLETE       write_exp_elt_opcode (op);
1103
// OBSOLETE     }
1104
// OBSOLETE }
1105
// OBSOLETE 
1106
// OBSOLETE static void
1107
// OBSOLETE parse_operand0 (void)
1108
// OBSOLETE {
1109
// OBSOLETE   enum exp_opcode op;
1110
// OBSOLETE   parse_operand1 ();
1111
// OBSOLETE   for (;;)
1112
// OBSOLETE     {
1113
// OBSOLETE       switch (PEEK_TOKEN ())
1114
// OBSOLETE     {
1115
// OBSOLETE     case LOGIOR:
1116
// OBSOLETE       op = BINOP_BITWISE_IOR;
1117
// OBSOLETE       break;
1118
// OBSOLETE     case LOGXOR:
1119
// OBSOLETE       op = BINOP_BITWISE_XOR;
1120
// OBSOLETE       break;
1121
// OBSOLETE     case ORIF:
1122
// OBSOLETE       op = BINOP_LOGICAL_OR;
1123
// OBSOLETE       break;
1124
// OBSOLETE     default:
1125
// OBSOLETE       return;
1126
// OBSOLETE     }
1127
// OBSOLETE       FORWARD_TOKEN ();
1128
// OBSOLETE       parse_operand1 ();
1129
// OBSOLETE       write_exp_elt_opcode (op);
1130
// OBSOLETE     }
1131
// OBSOLETE }
1132
// OBSOLETE 
1133
// OBSOLETE static void
1134
// OBSOLETE parse_expr (void)
1135
// OBSOLETE {
1136
// OBSOLETE   parse_operand0 ();
1137
// OBSOLETE   if (check_token (GDB_ASSIGNMENT))
1138
// OBSOLETE     {
1139
// OBSOLETE       parse_expr ();
1140
// OBSOLETE       write_exp_elt_opcode (BINOP_ASSIGN);
1141
// OBSOLETE     }
1142
// OBSOLETE }
1143
// OBSOLETE 
1144
// OBSOLETE static void
1145
// OBSOLETE parse_then_alternative (void)
1146
// OBSOLETE {
1147
// OBSOLETE   expect (THEN, "missing 'THEN' in 'IF' expression");
1148
// OBSOLETE   parse_expr ();
1149
// OBSOLETE }
1150
// OBSOLETE 
1151
// OBSOLETE static void
1152
// OBSOLETE parse_else_alternative (void)
1153
// OBSOLETE {
1154
// OBSOLETE   if (check_token (ELSIF))
1155
// OBSOLETE     parse_if_expression_body ();
1156
// OBSOLETE   else if (check_token (ELSE))
1157
// OBSOLETE     parse_expr ();
1158
// OBSOLETE   else
1159
// OBSOLETE     error ("missing ELSE/ELSIF in IF expression");
1160
// OBSOLETE }
1161
// OBSOLETE 
1162
// OBSOLETE /* Matches: <boolean expression> <then alternative> <else alternative> */
1163
// OBSOLETE 
1164
// OBSOLETE static void
1165
// OBSOLETE parse_if_expression_body (void)
1166
// OBSOLETE {
1167
// OBSOLETE   parse_expr ();
1168
// OBSOLETE   parse_then_alternative ();
1169
// OBSOLETE   parse_else_alternative ();
1170
// OBSOLETE   write_exp_elt_opcode (TERNOP_COND);
1171
// OBSOLETE }
1172
// OBSOLETE 
1173
// OBSOLETE static void
1174
// OBSOLETE parse_if_expression (void)
1175
// OBSOLETE {
1176
// OBSOLETE   require (IF);
1177
// OBSOLETE   parse_if_expression_body ();
1178
// OBSOLETE   expect (FI, "missing 'FI' at end of conditional expression");
1179
// OBSOLETE }
1180
// OBSOLETE 
1181
// OBSOLETE /* An <untyped_expr> is a superset of <expr>.  It also includes
1182
// OBSOLETE    <conditional expressions> and untyped <tuples>, whose types
1183
// OBSOLETE    are not given by their constituents.  Hence, these are only
1184
// OBSOLETE    allowed in certain contexts that expect a certain type.
1185
// OBSOLETE    You should call convert() to fix up the <untyped_expr>. */
1186
// OBSOLETE 
1187
// OBSOLETE static void
1188
// OBSOLETE parse_untyped_expr (void)
1189
// OBSOLETE {
1190
// OBSOLETE   switch (PEEK_TOKEN ())
1191
// OBSOLETE     {
1192
// OBSOLETE     case IF:
1193
// OBSOLETE       parse_if_expression ();
1194
// OBSOLETE       return;
1195
// OBSOLETE     case CASE:
1196
// OBSOLETE       error ("not implemented:  CASE expression");
1197
// OBSOLETE     case '(':
1198
// OBSOLETE       switch (PEEK_TOKEN1 ())
1199
// OBSOLETE     {
1200
// OBSOLETE     case IF:
1201
// OBSOLETE     case CASE:
1202
// OBSOLETE       goto skip_lprn;
1203
// OBSOLETE     case '[':
1204
// OBSOLETE     skip_lprn:
1205
// OBSOLETE       FORWARD_TOKEN ();
1206
// OBSOLETE       parse_untyped_expr ();
1207
// OBSOLETE       expect (')', "missing ')'");
1208
// OBSOLETE       return;
1209
// OBSOLETE     default:;
1210
// OBSOLETE       /* fall through */
1211
// OBSOLETE     }
1212
// OBSOLETE     default:
1213
// OBSOLETE       parse_operand0 ();
1214
// OBSOLETE     }
1215
// OBSOLETE }
1216
// OBSOLETE 
1217
// OBSOLETE int
1218
// OBSOLETE chill_parse (void)
1219
// OBSOLETE {
1220
// OBSOLETE   terminal_buffer[0] = TOKEN_NOT_READ;
1221
// OBSOLETE   if (PEEK_TOKEN () == TYPENAME && PEEK_TOKEN1 () == END_TOKEN)
1222
// OBSOLETE     {
1223
// OBSOLETE       write_exp_elt_opcode (OP_TYPE);
1224
// OBSOLETE       write_exp_elt_type (PEEK_LVAL ().tsym.type);
1225
// OBSOLETE       write_exp_elt_opcode (OP_TYPE);
1226
// OBSOLETE       FORWARD_TOKEN ();
1227
// OBSOLETE     }
1228
// OBSOLETE   else
1229
// OBSOLETE     parse_expr ();
1230
// OBSOLETE   if (terminal_buffer[0] != END_TOKEN)
1231
// OBSOLETE     {
1232
// OBSOLETE       if (comma_terminates && terminal_buffer[0] == ',')
1233
// OBSOLETE     lexptr--;               /* Put the comma back.  */
1234
// OBSOLETE       else
1235
// OBSOLETE     error ("Junk after end of expression.");
1236
// OBSOLETE     }
1237
// OBSOLETE   return 0;
1238
// OBSOLETE }
1239
// OBSOLETE 
1240
// OBSOLETE 
1241
// OBSOLETE /* Implementation of a dynamically expandable buffer for processing input
1242
// OBSOLETE    characters acquired through lexptr and building a value to return in
1243
// OBSOLETE    yylval. */
1244
// OBSOLETE 
1245
// OBSOLETE static char *tempbuf;               /* Current buffer contents */
1246
// OBSOLETE static int tempbufsize;             /* Size of allocated buffer */
1247
// OBSOLETE static int tempbufindex;    /* Current index into buffer */
1248
// OBSOLETE 
1249
// OBSOLETE #define GROWBY_MIN_SIZE 64  /* Minimum amount to grow buffer by */
1250
// OBSOLETE 
1251
// OBSOLETE #define CHECKBUF(size) \
1252
// OBSOLETE   do { \
1253
// OBSOLETE     if (tempbufindex + (size) >= tempbufsize) \
1254
// OBSOLETE       { \
1255
// OBSOLETE     growbuf_by_size (size); \
1256
// OBSOLETE       } \
1257
// OBSOLETE   } while (0);
1258
// OBSOLETE 
1259
// OBSOLETE /* Grow the static temp buffer if necessary, including allocating the first one
1260
// OBSOLETE    on demand. */
1261
// OBSOLETE 
1262
// OBSOLETE static void
1263
// OBSOLETE growbuf_by_size (int count)
1264
// OBSOLETE {
1265
// OBSOLETE   int growby;
1266
// OBSOLETE 
1267
// OBSOLETE   growby = max (count, GROWBY_MIN_SIZE);
1268
// OBSOLETE   tempbufsize += growby;
1269
// OBSOLETE   if (tempbuf == NULL)
1270
// OBSOLETE     {
1271
// OBSOLETE       tempbuf = (char *) xmalloc (tempbufsize);
1272
// OBSOLETE     }
1273
// OBSOLETE   else
1274
// OBSOLETE     {
1275
// OBSOLETE       tempbuf = (char *) xrealloc (tempbuf, tempbufsize);
1276
// OBSOLETE     }
1277
// OBSOLETE }
1278
// OBSOLETE 
1279
// OBSOLETE /* Try to consume a simple name string token.  If successful, returns
1280
// OBSOLETE    a pointer to a nullbyte terminated copy of the name that can be used
1281
// OBSOLETE    in symbol table lookups.  If not successful, returns NULL. */
1282
// OBSOLETE 
1283
// OBSOLETE static char *
1284
// OBSOLETE match_simple_name_string (void)
1285
// OBSOLETE {
1286
// OBSOLETE   char *tokptr = lexptr;
1287
// OBSOLETE 
1288
// OBSOLETE   if (isalpha (*tokptr) || *tokptr == '_')
1289
// OBSOLETE     {
1290
// OBSOLETE       char *result;
1291
// OBSOLETE       do
1292
// OBSOLETE     {
1293
// OBSOLETE       tokptr++;
1294
// OBSOLETE     }
1295
// OBSOLETE       while (isalnum (*tokptr) || (*tokptr == '_'));
1296
// OBSOLETE       yylval.sval.ptr = lexptr;
1297
// OBSOLETE       yylval.sval.length = tokptr - lexptr;
1298
// OBSOLETE       lexptr = tokptr;
1299
// OBSOLETE       result = copy_name (yylval.sval);
1300
// OBSOLETE       return result;
1301
// OBSOLETE     }
1302
// OBSOLETE   return (NULL);
1303
// OBSOLETE }
1304
// OBSOLETE 
1305
// OBSOLETE /* Start looking for a value composed of valid digits as set by the base
1306
// OBSOLETE    in use.  Note that '_' characters are valid anywhere, in any quantity,
1307
// OBSOLETE    and are simply ignored.  Since we must find at least one valid digit,
1308
// OBSOLETE    or reject this token as an integer literal, we keep track of how many
1309
// OBSOLETE    digits we have encountered. */
1310
// OBSOLETE 
1311
// OBSOLETE static int
1312
// OBSOLETE decode_integer_value (int base, char **tokptrptr, LONGEST *ivalptr)
1313
// OBSOLETE {
1314
// OBSOLETE   char *tokptr = *tokptrptr;
1315
// OBSOLETE   int temp;
1316
// OBSOLETE   int digits = 0;
1317
// OBSOLETE 
1318
// OBSOLETE   while (*tokptr != '\0')
1319
// OBSOLETE     {
1320
// OBSOLETE       temp = *tokptr;
1321
// OBSOLETE       if (isupper (temp))
1322
// OBSOLETE     temp = tolower (temp);
1323
// OBSOLETE       tokptr++;
1324
// OBSOLETE       switch (temp)
1325
// OBSOLETE     {
1326
// OBSOLETE     case '_':
1327
// OBSOLETE       continue;
1328
// OBSOLETE     case '0':
1329
// OBSOLETE     case '1':
1330
// OBSOLETE     case '2':
1331
// OBSOLETE     case '3':
1332
// OBSOLETE     case '4':
1333
// OBSOLETE     case '5':
1334
// OBSOLETE     case '6':
1335
// OBSOLETE     case '7':
1336
// OBSOLETE     case '8':
1337
// OBSOLETE     case '9':
1338
// OBSOLETE       temp -= '0';
1339
// OBSOLETE       break;
1340
// OBSOLETE     case 'a':
1341
// OBSOLETE     case 'b':
1342
// OBSOLETE     case 'c':
1343
// OBSOLETE     case 'd':
1344
// OBSOLETE     case 'e':
1345
// OBSOLETE     case 'f':
1346
// OBSOLETE       temp -= 'a';
1347
// OBSOLETE       temp += 10;
1348
// OBSOLETE       break;
1349
// OBSOLETE     default:
1350
// OBSOLETE       temp = base;
1351
// OBSOLETE       break;
1352
// OBSOLETE     }
1353
// OBSOLETE       if (temp < base)
1354
// OBSOLETE     {
1355
// OBSOLETE       digits++;
1356
// OBSOLETE       *ivalptr *= base;
1357
// OBSOLETE       *ivalptr += temp;
1358
// OBSOLETE     }
1359
// OBSOLETE       else
1360
// OBSOLETE     {
1361
// OBSOLETE       /* Found something not in domain for current base. */
1362
// OBSOLETE       tokptr--;             /* Unconsume what gave us indigestion. */
1363
// OBSOLETE       break;
1364
// OBSOLETE     }
1365
// OBSOLETE     }
1366
// OBSOLETE 
1367
// OBSOLETE   /* If we didn't find any digits, then we don't have a valid integer
1368
// OBSOLETE      value, so reject the entire token.  Otherwise, update the lexical
1369
// OBSOLETE      scan pointer, and return non-zero for success. */
1370
// OBSOLETE 
1371
// OBSOLETE   if (digits == 0)
1372
// OBSOLETE     {
1373
// OBSOLETE       return (0);
1374
// OBSOLETE     }
1375
// OBSOLETE   else
1376
// OBSOLETE     {
1377
// OBSOLETE       *tokptrptr = tokptr;
1378
// OBSOLETE       return (1);
1379
// OBSOLETE     }
1380
// OBSOLETE }
1381
// OBSOLETE 
1382
// OBSOLETE static int
1383
// OBSOLETE decode_integer_literal (LONGEST *valptr, char **tokptrptr)
1384
// OBSOLETE {
1385
// OBSOLETE   char *tokptr = *tokptrptr;
1386
// OBSOLETE   int base = 0;
1387
// OBSOLETE   LONGEST ival = 0;
1388
// OBSOLETE   int explicit_base = 0;
1389
// OBSOLETE 
1390
// OBSOLETE   /* Look for an explicit base specifier, which is optional. */
1391
// OBSOLETE 
1392
// OBSOLETE   switch (*tokptr)
1393
// OBSOLETE     {
1394
// OBSOLETE     case 'd':
1395
// OBSOLETE     case 'D':
1396
// OBSOLETE       explicit_base++;
1397
// OBSOLETE       base = 10;
1398
// OBSOLETE       tokptr++;
1399
// OBSOLETE       break;
1400
// OBSOLETE     case 'b':
1401
// OBSOLETE     case 'B':
1402
// OBSOLETE       explicit_base++;
1403
// OBSOLETE       base = 2;
1404
// OBSOLETE       tokptr++;
1405
// OBSOLETE       break;
1406
// OBSOLETE     case 'h':
1407
// OBSOLETE     case 'H':
1408
// OBSOLETE       explicit_base++;
1409
// OBSOLETE       base = 16;
1410
// OBSOLETE       tokptr++;
1411
// OBSOLETE       break;
1412
// OBSOLETE     case 'o':
1413
// OBSOLETE     case 'O':
1414
// OBSOLETE       explicit_base++;
1415
// OBSOLETE       base = 8;
1416
// OBSOLETE       tokptr++;
1417
// OBSOLETE       break;
1418
// OBSOLETE     default:
1419
// OBSOLETE       base = 10;
1420
// OBSOLETE       break;
1421
// OBSOLETE     }
1422
// OBSOLETE 
1423
// OBSOLETE   /* If we found an explicit base ensure that the character after the
1424
// OBSOLETE      explicit base is a single quote. */
1425
// OBSOLETE 
1426
// OBSOLETE   if (explicit_base && (*tokptr++ != '\''))
1427
// OBSOLETE     {
1428
// OBSOLETE       return (0);
1429
// OBSOLETE     }
1430
// OBSOLETE 
1431
// OBSOLETE   /* Attempt to decode whatever follows as an integer value in the
1432
// OBSOLETE      indicated base, updating the token pointer in the process and
1433
// OBSOLETE      computing the value into ival.  Also, if we have an explicit
1434
// OBSOLETE      base, then the next character must not be a single quote, or we
1435
// OBSOLETE      have a bitstring literal, so reject the entire token in this case.
1436
// OBSOLETE      Otherwise, update the lexical scan pointer, and return non-zero
1437
// OBSOLETE      for success. */
1438
// OBSOLETE 
1439
// OBSOLETE   if (!decode_integer_value (base, &tokptr, &ival))
1440
// OBSOLETE     {
1441
// OBSOLETE       return (0);
1442
// OBSOLETE     }
1443
// OBSOLETE   else if (explicit_base && (*tokptr == '\''))
1444
// OBSOLETE     {
1445
// OBSOLETE       return (0);
1446
// OBSOLETE     }
1447
// OBSOLETE   else
1448
// OBSOLETE     {
1449
// OBSOLETE       *valptr = ival;
1450
// OBSOLETE       *tokptrptr = tokptr;
1451
// OBSOLETE       return (1);
1452
// OBSOLETE     }
1453
// OBSOLETE }
1454
// OBSOLETE 
1455
// OBSOLETE /*  If it wasn't for the fact that floating point values can contain '_'
1456
// OBSOLETE    characters, we could just let strtod do all the hard work by letting it
1457
// OBSOLETE    try to consume as much of the current token buffer as possible and
1458
// OBSOLETE    find a legal conversion.  Unfortunately we need to filter out the '_'
1459
// OBSOLETE    characters before calling strtod, which we do by copying the other
1460
// OBSOLETE    legal chars to a local buffer to be converted.  However since we also
1461
// OBSOLETE    need to keep track of where the last unconsumed character in the input
1462
// OBSOLETE    buffer is, we have transfer only as many characters as may compose a
1463
// OBSOLETE    legal floating point value. */
1464
// OBSOLETE 
1465
// OBSOLETE static enum ch_terminal
1466
// OBSOLETE match_float_literal (void)
1467
// OBSOLETE {
1468
// OBSOLETE   char *tokptr = lexptr;
1469
// OBSOLETE   char *buf;
1470
// OBSOLETE   char *copy;
1471
// OBSOLETE   double dval;
1472
// OBSOLETE   extern double strtod ();
1473
// OBSOLETE 
1474
// OBSOLETE   /* Make local buffer in which to build the string to convert.  This is
1475
// OBSOLETE      required because underscores are valid in chill floating point numbers
1476
// OBSOLETE      but not in the string passed to strtod to convert.  The string will be
1477
// OBSOLETE      no longer than our input string. */
1478
// OBSOLETE 
1479
// OBSOLETE   copy = buf = (char *) alloca (strlen (tokptr) + 1);
1480
// OBSOLETE 
1481
// OBSOLETE   /* Transfer all leading digits to the conversion buffer, discarding any
1482
// OBSOLETE      underscores. */
1483
// OBSOLETE 
1484
// OBSOLETE   while (isdigit (*tokptr) || *tokptr == '_')
1485
// OBSOLETE     {
1486
// OBSOLETE       if (*tokptr != '_')
1487
// OBSOLETE     {
1488
// OBSOLETE       *copy++ = *tokptr;
1489
// OBSOLETE     }
1490
// OBSOLETE       tokptr++;
1491
// OBSOLETE     }
1492
// OBSOLETE 
1493
// OBSOLETE   /* Now accept either a '.', or one of [eEdD].  Dot is legal regardless
1494
// OBSOLETE      of whether we found any leading digits, and we simply accept it and
1495
// OBSOLETE      continue on to look for the fractional part and/or exponent.  One of
1496
// OBSOLETE      [eEdD] is legal only if we have seen digits, and means that there
1497
// OBSOLETE      is no fractional part.  If we find neither of these, then this is
1498
// OBSOLETE      not a floating point number, so return failure. */
1499
// OBSOLETE 
1500
// OBSOLETE   switch (*tokptr++)
1501
// OBSOLETE     {
1502
// OBSOLETE     case '.':
1503
// OBSOLETE       /* Accept and then look for fractional part and/or exponent. */
1504
// OBSOLETE       *copy++ = '.';
1505
// OBSOLETE       break;
1506
// OBSOLETE 
1507
// OBSOLETE     case 'e':
1508
// OBSOLETE     case 'E':
1509
// OBSOLETE     case 'd':
1510
// OBSOLETE     case 'D':
1511
// OBSOLETE       if (copy == buf)
1512
// OBSOLETE     {
1513
// OBSOLETE       return (0);
1514
// OBSOLETE     }
1515
// OBSOLETE       *copy++ = 'e';
1516
// OBSOLETE       goto collect_exponent;
1517
// OBSOLETE       break;
1518
// OBSOLETE 
1519
// OBSOLETE     default:
1520
// OBSOLETE       return (0);
1521
// OBSOLETE       break;
1522
// OBSOLETE     }
1523
// OBSOLETE 
1524
// OBSOLETE   /* We found a '.', copy any fractional digits to the conversion buffer, up
1525
// OBSOLETE      to the first nondigit, non-underscore character. */
1526
// OBSOLETE 
1527
// OBSOLETE   while (isdigit (*tokptr) || *tokptr == '_')
1528
// OBSOLETE     {
1529
// OBSOLETE       if (*tokptr != '_')
1530
// OBSOLETE     {
1531
// OBSOLETE       *copy++ = *tokptr;
1532
// OBSOLETE     }
1533
// OBSOLETE       tokptr++;
1534
// OBSOLETE     }
1535
// OBSOLETE 
1536
// OBSOLETE   /* Look for an exponent, which must start with one of [eEdD].  If none
1537
// OBSOLETE      is found, jump directly to trying to convert what we have collected
1538
// OBSOLETE      so far. */
1539
// OBSOLETE 
1540
// OBSOLETE   switch (*tokptr)
1541
// OBSOLETE     {
1542
// OBSOLETE     case 'e':
1543
// OBSOLETE     case 'E':
1544
// OBSOLETE     case 'd':
1545
// OBSOLETE     case 'D':
1546
// OBSOLETE       *copy++ = 'e';
1547
// OBSOLETE       tokptr++;
1548
// OBSOLETE       break;
1549
// OBSOLETE     default:
1550
// OBSOLETE       goto convert_float;
1551
// OBSOLETE       break;
1552
// OBSOLETE     }
1553
// OBSOLETE 
1554
// OBSOLETE   /* Accept an optional '-' or '+' following one of [eEdD]. */
1555
// OBSOLETE 
1556
// OBSOLETE collect_exponent:
1557
// OBSOLETE   if (*tokptr == '+' || *tokptr == '-')
1558
// OBSOLETE     {
1559
// OBSOLETE       *copy++ = *tokptr++;
1560
// OBSOLETE     }
1561
// OBSOLETE 
1562
// OBSOLETE   /* Now copy an exponent into the conversion buffer.  Note that at the 
1563
// OBSOLETE      moment underscores are *not* allowed in exponents. */
1564
// OBSOLETE 
1565
// OBSOLETE   while (isdigit (*tokptr))
1566
// OBSOLETE     {
1567
// OBSOLETE       *copy++ = *tokptr++;
1568
// OBSOLETE     }
1569
// OBSOLETE 
1570
// OBSOLETE   /* If we transfered any chars to the conversion buffer, try to interpret its
1571
// OBSOLETE      contents as a floating point value.  If any characters remain, then we
1572
// OBSOLETE      must not have a valid floating point string. */
1573
// OBSOLETE 
1574
// OBSOLETE convert_float:
1575
// OBSOLETE   *copy = '\0';
1576
// OBSOLETE   if (copy != buf)
1577
// OBSOLETE     {
1578
// OBSOLETE       dval = strtod (buf, &copy);
1579
// OBSOLETE       if (*copy == '\0')
1580
// OBSOLETE     {
1581
// OBSOLETE       yylval.dval = dval;
1582
// OBSOLETE       lexptr = tokptr;
1583
// OBSOLETE       return (FLOAT_LITERAL);
1584
// OBSOLETE     }
1585
// OBSOLETE     }
1586
// OBSOLETE   return (0);
1587
// OBSOLETE }
1588
// OBSOLETE 
1589
// OBSOLETE /* Recognize a string literal.  A string literal is a sequence
1590
// OBSOLETE    of characters enclosed in matching single or double quotes, except that
1591
// OBSOLETE    a single character inside single quotes is a character literal, which
1592
// OBSOLETE    we reject as a string literal.  To embed the terminator character inside
1593
// OBSOLETE    a string, it is simply doubled (I.E. "this""is""one""string") */
1594
// OBSOLETE 
1595
// OBSOLETE static enum ch_terminal
1596
// OBSOLETE match_string_literal (void)
1597
// OBSOLETE {
1598
// OBSOLETE   char *tokptr = lexptr;
1599
// OBSOLETE   int in_ctrlseq = 0;
1600
// OBSOLETE   LONGEST ival;
1601
// OBSOLETE 
1602
// OBSOLETE   for (tempbufindex = 0, tokptr++; *tokptr != '\0'; tokptr++)
1603
// OBSOLETE     {
1604
// OBSOLETE       CHECKBUF (1);
1605
// OBSOLETE     tryagain:;
1606
// OBSOLETE       if (in_ctrlseq)
1607
// OBSOLETE     {
1608
// OBSOLETE       /* skip possible whitespaces */
1609
// OBSOLETE       while ((*tokptr == ' ' || *tokptr == '\t') && *tokptr)
1610
// OBSOLETE         tokptr++;
1611
// OBSOLETE       if (*tokptr == ')')
1612
// OBSOLETE         {
1613
// OBSOLETE           in_ctrlseq = 0;
1614
// OBSOLETE           tokptr++;
1615
// OBSOLETE           goto tryagain;
1616
// OBSOLETE         }
1617
// OBSOLETE       else if (*tokptr != ',')
1618
// OBSOLETE         error ("Invalid control sequence");
1619
// OBSOLETE       tokptr++;
1620
// OBSOLETE       /* skip possible whitespaces */
1621
// OBSOLETE       while ((*tokptr == ' ' || *tokptr == '\t') && *tokptr)
1622
// OBSOLETE         tokptr++;
1623
// OBSOLETE       if (!decode_integer_literal (&ival, &tokptr))
1624
// OBSOLETE         error ("Invalid control sequence");
1625
// OBSOLETE       tokptr--;
1626
// OBSOLETE     }
1627
// OBSOLETE       else if (*tokptr == *lexptr)
1628
// OBSOLETE     {
1629
// OBSOLETE       if (*(tokptr + 1) == *lexptr)
1630
// OBSOLETE         {
1631
// OBSOLETE           ival = *tokptr++;
1632
// OBSOLETE         }
1633
// OBSOLETE       else
1634
// OBSOLETE         {
1635
// OBSOLETE           break;
1636
// OBSOLETE         }
1637
// OBSOLETE     }
1638
// OBSOLETE       else if (*tokptr == '^')
1639
// OBSOLETE     {
1640
// OBSOLETE       if (*(tokptr + 1) == '(')
1641
// OBSOLETE         {
1642
// OBSOLETE           in_ctrlseq = 1;
1643
// OBSOLETE           tokptr += 2;
1644
// OBSOLETE           if (!decode_integer_literal (&ival, &tokptr))
1645
// OBSOLETE             error ("Invalid control sequence");
1646
// OBSOLETE           tokptr--;
1647
// OBSOLETE         }
1648
// OBSOLETE       else if (*(tokptr + 1) == '^')
1649
// OBSOLETE         ival = *tokptr++;
1650
// OBSOLETE       else
1651
// OBSOLETE         error ("Invalid control sequence");
1652
// OBSOLETE     }
1653
// OBSOLETE       else
1654
// OBSOLETE     ival = *tokptr;
1655
// OBSOLETE       tempbuf[tempbufindex++] = ival;
1656
// OBSOLETE     }
1657
// OBSOLETE   if (in_ctrlseq)
1658
// OBSOLETE     error ("Invalid control sequence");
1659
// OBSOLETE 
1660
// OBSOLETE   if (*tokptr == '\0'               /* no terminator */
1661
// OBSOLETE       || (tempbufindex == 1 && *tokptr == '\''))    /* char literal */
1662
// OBSOLETE     {
1663
// OBSOLETE       return (0);
1664
// OBSOLETE     }
1665
// OBSOLETE   else
1666
// OBSOLETE     {
1667
// OBSOLETE       tempbuf[tempbufindex] = '\0';
1668
// OBSOLETE       yylval.sval.ptr = tempbuf;
1669
// OBSOLETE       yylval.sval.length = tempbufindex;
1670
// OBSOLETE       lexptr = ++tokptr;
1671
// OBSOLETE       return (CHARACTER_STRING_LITERAL);
1672
// OBSOLETE     }
1673
// OBSOLETE }
1674
// OBSOLETE 
1675
// OBSOLETE /* Recognize a character literal.  A character literal is single character
1676
// OBSOLETE    or a control sequence, enclosed in single quotes.  A control sequence
1677
// OBSOLETE    is a comma separated list of one or more integer literals, enclosed
1678
// OBSOLETE    in parenthesis and introduced with a circumflex character.
1679
// OBSOLETE 
1680
// OBSOLETE    EX:  'a'  '^(7)'  '^(7,8)'
1681
// OBSOLETE 
1682
// OBSOLETE    As a GNU chill extension, the syntax C'xx' is also recognized as a 
1683
// OBSOLETE    character literal, where xx is a hex value for the character.
1684
// OBSOLETE 
1685
// OBSOLETE    Note that more than a single character, enclosed in single quotes, is
1686
// OBSOLETE    a string literal.
1687
// OBSOLETE 
1688
// OBSOLETE    Returns CHARACTER_LITERAL if a match is found.
1689
// OBSOLETE  */
1690
// OBSOLETE 
1691
// OBSOLETE static enum ch_terminal
1692
// OBSOLETE match_character_literal (void)
1693
// OBSOLETE {
1694
// OBSOLETE   char *tokptr = lexptr;
1695
// OBSOLETE   LONGEST ival = 0;
1696
// OBSOLETE 
1697
// OBSOLETE   if ((*tokptr == 'c' || *tokptr == 'C') && (*(tokptr + 1) == '\''))
1698
// OBSOLETE     {
1699
// OBSOLETE       /* We have a GNU chill extension form, so skip the leading "C'",
1700
// OBSOLETE          decode the hex value, and then ensure that we have a trailing
1701
// OBSOLETE          single quote character. */
1702
// OBSOLETE       tokptr += 2;
1703
// OBSOLETE       if (!decode_integer_value (16, &tokptr, &ival) || (*tokptr != '\''))
1704
// OBSOLETE     {
1705
// OBSOLETE       return (0);
1706
// OBSOLETE     }
1707
// OBSOLETE       tokptr++;
1708
// OBSOLETE     }
1709
// OBSOLETE   else if (*tokptr == '\'')
1710
// OBSOLETE     {
1711
// OBSOLETE       tokptr++;
1712
// OBSOLETE 
1713
// OBSOLETE       /* Determine which form we have, either a control sequence or the
1714
// OBSOLETE          single character form. */
1715
// OBSOLETE 
1716
// OBSOLETE       if (*tokptr == '^')
1717
// OBSOLETE     {
1718
// OBSOLETE       if (*(tokptr + 1) == '(')
1719
// OBSOLETE         {
1720
// OBSOLETE           /* Match and decode a control sequence.  Return zero if we don't
1721
// OBSOLETE              find a valid integer literal, or if the next unconsumed character
1722
// OBSOLETE              after the integer literal is not the trailing ')'. */
1723
// OBSOLETE           tokptr += 2;
1724
// OBSOLETE           if (!decode_integer_literal (&ival, &tokptr) || (*tokptr++ != ')'))
1725
// OBSOLETE             {
1726
// OBSOLETE               return (0);
1727
// OBSOLETE             }
1728
// OBSOLETE         }
1729
// OBSOLETE       else if (*(tokptr + 1) == '^')
1730
// OBSOLETE         {
1731
// OBSOLETE           ival = *tokptr;
1732
// OBSOLETE           tokptr += 2;
1733
// OBSOLETE         }
1734
// OBSOLETE       else
1735
// OBSOLETE         /* fail */
1736
// OBSOLETE         error ("Invalid control sequence");
1737
// OBSOLETE     }
1738
// OBSOLETE       else if (*tokptr == '\'')
1739
// OBSOLETE     {
1740
// OBSOLETE       /* this must be duplicated */
1741
// OBSOLETE       ival = *tokptr;
1742
// OBSOLETE       tokptr += 2;
1743
// OBSOLETE     }
1744
// OBSOLETE       else
1745
// OBSOLETE     {
1746
// OBSOLETE       ival = *tokptr++;
1747
// OBSOLETE     }
1748
// OBSOLETE 
1749
// OBSOLETE       /* The trailing quote has not yet been consumed.  If we don't find
1750
// OBSOLETE          it, then we have no match. */
1751
// OBSOLETE 
1752
// OBSOLETE       if (*tokptr++ != '\'')
1753
// OBSOLETE     {
1754
// OBSOLETE       return (0);
1755
// OBSOLETE     }
1756
// OBSOLETE     }
1757
// OBSOLETE   else
1758
// OBSOLETE     {
1759
// OBSOLETE       /* Not a character literal. */
1760
// OBSOLETE       return (0);
1761
// OBSOLETE     }
1762
// OBSOLETE   yylval.typed_val.val = ival;
1763
// OBSOLETE   yylval.typed_val.type = builtin_type_chill_char;
1764
// OBSOLETE   lexptr = tokptr;
1765
// OBSOLETE   return (CHARACTER_LITERAL);
1766
// OBSOLETE }
1767
// OBSOLETE 
1768
// OBSOLETE /* Recognize an integer literal, as specified in Z.200 sec 5.2.4.2.
1769
// OBSOLETE    Note that according to 5.2.4.2, a single "_" is also a valid integer
1770
// OBSOLETE    literal, however GNU-chill requires there to be at least one "digit"
1771
// OBSOLETE    in any integer literal. */
1772
// OBSOLETE 
1773
// OBSOLETE static enum ch_terminal
1774
// OBSOLETE match_integer_literal (void)
1775
// OBSOLETE {
1776
// OBSOLETE   char *tokptr = lexptr;
1777
// OBSOLETE   LONGEST ival;
1778
// OBSOLETE 
1779
// OBSOLETE   if (!decode_integer_literal (&ival, &tokptr))
1780
// OBSOLETE     {
1781
// OBSOLETE       return (0);
1782
// OBSOLETE     }
1783
// OBSOLETE   else
1784
// OBSOLETE     {
1785
// OBSOLETE       yylval.typed_val.val = ival;
1786
// OBSOLETE #if defined(CC_HAS_LONG_LONG)
1787
// OBSOLETE       if (ival > (LONGEST) 2147483647U || ival < -(LONGEST) 2147483648U)
1788
// OBSOLETE     yylval.typed_val.type = builtin_type_long_long;
1789
// OBSOLETE       else
1790
// OBSOLETE #endif
1791
// OBSOLETE     yylval.typed_val.type = builtin_type_int;
1792
// OBSOLETE       lexptr = tokptr;
1793
// OBSOLETE       return (INTEGER_LITERAL);
1794
// OBSOLETE     }
1795
// OBSOLETE }
1796
// OBSOLETE 
1797
// OBSOLETE /* Recognize a bit-string literal, as specified in Z.200 sec 5.2.4.8
1798
// OBSOLETE    Note that according to 5.2.4.8, a single "_" is also a valid bit-string
1799
// OBSOLETE    literal, however GNU-chill requires there to be at least one "digit"
1800
// OBSOLETE    in any bit-string literal. */
1801
// OBSOLETE 
1802
// OBSOLETE static enum ch_terminal
1803
// OBSOLETE match_bitstring_literal (void)
1804
// OBSOLETE {
1805
// OBSOLETE   register char *tokptr = lexptr;
1806
// OBSOLETE   int bitoffset = 0;
1807
// OBSOLETE   int bitcount = 0;
1808
// OBSOLETE   int bits_per_char;
1809
// OBSOLETE   int digit;
1810
// OBSOLETE 
1811
// OBSOLETE   tempbufindex = 0;
1812
// OBSOLETE   CHECKBUF (1);
1813
// OBSOLETE   tempbuf[0] = 0;
1814
// OBSOLETE 
1815
// OBSOLETE   /* Look for the required explicit base specifier. */
1816
// OBSOLETE 
1817
// OBSOLETE   switch (*tokptr++)
1818
// OBSOLETE     {
1819
// OBSOLETE     case 'b':
1820
// OBSOLETE     case 'B':
1821
// OBSOLETE       bits_per_char = 1;
1822
// OBSOLETE       break;
1823
// OBSOLETE     case 'o':
1824
// OBSOLETE     case 'O':
1825
// OBSOLETE       bits_per_char = 3;
1826
// OBSOLETE       break;
1827
// OBSOLETE     case 'h':
1828
// OBSOLETE     case 'H':
1829
// OBSOLETE       bits_per_char = 4;
1830
// OBSOLETE       break;
1831
// OBSOLETE     default:
1832
// OBSOLETE       return (0);
1833
// OBSOLETE       break;
1834
// OBSOLETE     }
1835
// OBSOLETE 
1836
// OBSOLETE   /* Ensure that the character after the explicit base is a single quote. */
1837
// OBSOLETE 
1838
// OBSOLETE   if (*tokptr++ != '\'')
1839
// OBSOLETE     {
1840
// OBSOLETE       return (0);
1841
// OBSOLETE     }
1842
// OBSOLETE 
1843
// OBSOLETE   while (*tokptr != '\0' && *tokptr != '\'')
1844
// OBSOLETE     {
1845
// OBSOLETE       digit = *tokptr;
1846
// OBSOLETE       if (isupper (digit))
1847
// OBSOLETE     digit = tolower (digit);
1848
// OBSOLETE       tokptr++;
1849
// OBSOLETE       switch (digit)
1850
// OBSOLETE     {
1851
// OBSOLETE     case '_':
1852
// OBSOLETE       continue;
1853
// OBSOLETE     case '0':
1854
// OBSOLETE     case '1':
1855
// OBSOLETE     case '2':
1856
// OBSOLETE     case '3':
1857
// OBSOLETE     case '4':
1858
// OBSOLETE     case '5':
1859
// OBSOLETE     case '6':
1860
// OBSOLETE     case '7':
1861
// OBSOLETE     case '8':
1862
// OBSOLETE     case '9':
1863
// OBSOLETE       digit -= '0';
1864
// OBSOLETE       break;
1865
// OBSOLETE     case 'a':
1866
// OBSOLETE     case 'b':
1867
// OBSOLETE     case 'c':
1868
// OBSOLETE     case 'd':
1869
// OBSOLETE     case 'e':
1870
// OBSOLETE     case 'f':
1871
// OBSOLETE       digit -= 'a';
1872
// OBSOLETE       digit += 10;
1873
// OBSOLETE       break;
1874
// OBSOLETE     default:
1875
// OBSOLETE       /* this is not a bitstring literal, probably an integer */
1876
// OBSOLETE       return 0;
1877
// OBSOLETE     }
1878
// OBSOLETE       if (digit >= 1 << bits_per_char)
1879
// OBSOLETE     {
1880
// OBSOLETE       /* Found something not in domain for current base. */
1881
// OBSOLETE       error ("Too-large digit in bitstring or integer.");
1882
// OBSOLETE     }
1883
// OBSOLETE       else
1884
// OBSOLETE     {
1885
// OBSOLETE       /* Extract bits from digit, packing them into the bitstring byte. */
1886
// OBSOLETE       int k = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? bits_per_char - 1 : 0;
1887
// OBSOLETE       for (; TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? k >= 0 : k < bits_per_char;
1888
// OBSOLETE            TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? k-- : k++)
1889
// OBSOLETE         {
1890
// OBSOLETE           bitcount++;
1891
// OBSOLETE           if (digit & (1 << k))
1892
// OBSOLETE             {
1893
// OBSOLETE               tempbuf[tempbufindex] |=
1894
// OBSOLETE                 (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1895
// OBSOLETE                 ? (1 << (HOST_CHAR_BIT - 1 - bitoffset))
1896
// OBSOLETE                 : (1 << bitoffset);
1897
// OBSOLETE             }
1898
// OBSOLETE           bitoffset++;
1899
// OBSOLETE           if (bitoffset == HOST_CHAR_BIT)
1900
// OBSOLETE             {
1901
// OBSOLETE               bitoffset = 0;
1902
// OBSOLETE               tempbufindex++;
1903
// OBSOLETE               CHECKBUF (1);
1904
// OBSOLETE               tempbuf[tempbufindex] = 0;
1905
// OBSOLETE             }
1906
// OBSOLETE         }
1907
// OBSOLETE     }
1908
// OBSOLETE     }
1909
// OBSOLETE 
1910
// OBSOLETE   /* Verify that we consumed everything up to the trailing single quote,
1911
// OBSOLETE      and that we found some bits (IE not just underbars). */
1912
// OBSOLETE 
1913
// OBSOLETE   if (*tokptr++ != '\'')
1914
// OBSOLETE     {
1915
// OBSOLETE       return (0);
1916
// OBSOLETE     }
1917
// OBSOLETE   else
1918
// OBSOLETE     {
1919
// OBSOLETE       yylval.sval.ptr = tempbuf;
1920
// OBSOLETE       yylval.sval.length = bitcount;
1921
// OBSOLETE       lexptr = tokptr;
1922
// OBSOLETE       return (BIT_STRING_LITERAL);
1923
// OBSOLETE     }
1924
// OBSOLETE }
1925
// OBSOLETE 
1926
// OBSOLETE struct token
1927
// OBSOLETE {
1928
// OBSOLETE   char *operator;
1929
// OBSOLETE   int token;
1930
// OBSOLETE };
1931
// OBSOLETE 
1932
// OBSOLETE static const struct token idtokentab[] =
1933
// OBSOLETE {
1934
// OBSOLETE   {"array", ARRAY},
1935
// OBSOLETE   {"length", LENGTH},
1936
// OBSOLETE   {"lower", LOWER},
1937
// OBSOLETE   {"upper", UPPER},
1938
// OBSOLETE   {"andif", ANDIF},
1939
// OBSOLETE   {"pred", PRED},
1940
// OBSOLETE   {"succ", SUCC},
1941
// OBSOLETE   {"card", CARD},
1942
// OBSOLETE   {"size", SIZE},
1943
// OBSOLETE   {"orif", ORIF},
1944
// OBSOLETE   {"num", NUM},
1945
// OBSOLETE   {"abs", ABS},
1946
// OBSOLETE   {"max", MAX_TOKEN},
1947
// OBSOLETE   {"min", MIN_TOKEN},
1948
// OBSOLETE   {"mod", MOD},
1949
// OBSOLETE   {"rem", REM},
1950
// OBSOLETE   {"not", NOT},
1951
// OBSOLETE   {"xor", LOGXOR},
1952
// OBSOLETE   {"and", LOGAND},
1953
// OBSOLETE   {"in", IN},
1954
// OBSOLETE   {"or", LOGIOR},
1955
// OBSOLETE   {"up", UP},
1956
// OBSOLETE   {"addr", ADDR_TOKEN},
1957
// OBSOLETE   {"null", EMPTINESS_LITERAL}
1958
// OBSOLETE };
1959
// OBSOLETE 
1960
// OBSOLETE static const struct token tokentab2[] =
1961
// OBSOLETE {
1962
// OBSOLETE   {":=", GDB_ASSIGNMENT},
1963
// OBSOLETE   {"//", SLASH_SLASH},
1964
// OBSOLETE   {"->", POINTER},
1965
// OBSOLETE   {"/=", NOTEQUAL},
1966
// OBSOLETE   {"<=", LEQ},
1967
// OBSOLETE   {">=", GEQ}
1968
// OBSOLETE };
1969
// OBSOLETE 
1970
// OBSOLETE /* Read one token, getting characters through lexptr.  */
1971
// OBSOLETE /* This is where we will check to make sure that the language and the
1972
// OBSOLETE    operators used are compatible.  */
1973
// OBSOLETE 
1974
// OBSOLETE static enum ch_terminal
1975
// OBSOLETE ch_lex (void)
1976
// OBSOLETE {
1977
// OBSOLETE   unsigned int i;
1978
// OBSOLETE   enum ch_terminal token;
1979
// OBSOLETE   char *inputname;
1980
// OBSOLETE   struct symbol *sym;
1981
// OBSOLETE 
1982
// OBSOLETE   /* Skip over any leading whitespace. */
1983
// OBSOLETE   while (isspace (*lexptr))
1984
// OBSOLETE     {
1985
// OBSOLETE       lexptr++;
1986
// OBSOLETE     }
1987
// OBSOLETE   /* Look for special single character cases which can't be the first
1988
// OBSOLETE      character of some other multicharacter token. */
1989
// OBSOLETE   switch (*lexptr)
1990
// OBSOLETE     {
1991
// OBSOLETE     case '\0':
1992
// OBSOLETE       return END_TOKEN;
1993
// OBSOLETE     case ',':
1994
// OBSOLETE     case '=':
1995
// OBSOLETE     case ';':
1996
// OBSOLETE     case '!':
1997
// OBSOLETE     case '+':
1998
// OBSOLETE     case '*':
1999
// OBSOLETE     case '(':
2000
// OBSOLETE     case ')':
2001
// OBSOLETE     case '[':
2002
// OBSOLETE     case ']':
2003
// OBSOLETE       return (*lexptr++);
2004
// OBSOLETE     }
2005
// OBSOLETE   /* Look for characters which start a particular kind of multicharacter
2006
// OBSOLETE      token, such as a character literal, register name, convenience
2007
// OBSOLETE      variable name, string literal, etc. */
2008
// OBSOLETE   switch (*lexptr)
2009
// OBSOLETE     {
2010
// OBSOLETE     case '\'':
2011
// OBSOLETE     case '\"':
2012
// OBSOLETE       /* First try to match a string literal, which is any
2013
// OBSOLETE          sequence of characters enclosed in matching single or double
2014
// OBSOLETE          quotes, except that a single character inside single quotes
2015
// OBSOLETE          is a character literal, so we have to catch that case also. */
2016
// OBSOLETE       token = match_string_literal ();
2017
// OBSOLETE       if (token != 0)
2018
// OBSOLETE     {
2019
// OBSOLETE       return (token);
2020
// OBSOLETE     }
2021
// OBSOLETE       if (*lexptr == '\'')
2022
// OBSOLETE     {
2023
// OBSOLETE       token = match_character_literal ();
2024
// OBSOLETE       if (token != 0)
2025
// OBSOLETE         {
2026
// OBSOLETE           return (token);
2027
// OBSOLETE         }
2028
// OBSOLETE     }
2029
// OBSOLETE       break;
2030
// OBSOLETE     case 'C':
2031
// OBSOLETE     case 'c':
2032
// OBSOLETE       token = match_character_literal ();
2033
// OBSOLETE       if (token != 0)
2034
// OBSOLETE     {
2035
// OBSOLETE       return (token);
2036
// OBSOLETE     }
2037
// OBSOLETE       break;
2038
// OBSOLETE     case '$':
2039
// OBSOLETE       yylval.sval.ptr = lexptr;
2040
// OBSOLETE       do
2041
// OBSOLETE     {
2042
// OBSOLETE       lexptr++;
2043
// OBSOLETE     }
2044
// OBSOLETE       while (isalnum (*lexptr) || *lexptr == '_' || *lexptr == '$');
2045
// OBSOLETE       yylval.sval.length = lexptr - yylval.sval.ptr;
2046
// OBSOLETE       write_dollar_variable (yylval.sval);
2047
// OBSOLETE       return GDB_VARIABLE;
2048
// OBSOLETE       break;
2049
// OBSOLETE     }
2050
// OBSOLETE   /* See if it is a special token of length 2.  */
2051
// OBSOLETE   for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
2052
// OBSOLETE     {
2053
// OBSOLETE       if (STREQN (lexptr, tokentab2[i].operator, 2))
2054
// OBSOLETE     {
2055
// OBSOLETE       lexptr += 2;
2056
// OBSOLETE       return (tokentab2[i].token);
2057
// OBSOLETE     }
2058
// OBSOLETE     }
2059
// OBSOLETE   /* Look for single character cases which which could be the first
2060
// OBSOLETE      character of some other multicharacter token, but aren't, or we
2061
// OBSOLETE      would already have found it. */
2062
// OBSOLETE   switch (*lexptr)
2063
// OBSOLETE     {
2064
// OBSOLETE     case '-':
2065
// OBSOLETE     case ':':
2066
// OBSOLETE     case '/':
2067
// OBSOLETE     case '<':
2068
// OBSOLETE     case '>':
2069
// OBSOLETE       return (*lexptr++);
2070
// OBSOLETE     }
2071
// OBSOLETE   /* Look for a float literal before looking for an integer literal, so
2072
// OBSOLETE      we match as much of the input stream as possible. */
2073
// OBSOLETE   token = match_float_literal ();
2074
// OBSOLETE   if (token != 0)
2075
// OBSOLETE     {
2076
// OBSOLETE       return (token);
2077
// OBSOLETE     }
2078
// OBSOLETE   token = match_bitstring_literal ();
2079
// OBSOLETE   if (token != 0)
2080
// OBSOLETE     {
2081
// OBSOLETE       return (token);
2082
// OBSOLETE     }
2083
// OBSOLETE   token = match_integer_literal ();
2084
// OBSOLETE   if (token != 0)
2085
// OBSOLETE     {
2086
// OBSOLETE       return (token);
2087
// OBSOLETE     }
2088
// OBSOLETE 
2089
// OBSOLETE   /* Try to match a simple name string, and if a match is found, then
2090
// OBSOLETE      further classify what sort of name it is and return an appropriate
2091
// OBSOLETE      token.  Note that attempting to match a simple name string consumes
2092
// OBSOLETE      the token from lexptr, so we can't back out if we later find that
2093
// OBSOLETE      we can't classify what sort of name it is. */
2094
// OBSOLETE 
2095
// OBSOLETE   inputname = match_simple_name_string ();
2096
// OBSOLETE 
2097
// OBSOLETE   if (inputname != NULL)
2098
// OBSOLETE     {
2099
// OBSOLETE       char *simplename = (char *) alloca (strlen (inputname) + 1);
2100
// OBSOLETE 
2101
// OBSOLETE       char *dptr = simplename, *sptr = inputname;
2102
// OBSOLETE       for (; *sptr; sptr++)
2103
// OBSOLETE     *dptr++ = isupper (*sptr) ? tolower (*sptr) : *sptr;
2104
// OBSOLETE       *dptr = '\0';
2105
// OBSOLETE 
2106
// OBSOLETE       /* See if it is a reserved identifier. */
2107
// OBSOLETE       for (i = 0; i < sizeof (idtokentab) / sizeof (idtokentab[0]); i++)
2108
// OBSOLETE     {
2109
// OBSOLETE       if (STREQ (simplename, idtokentab[i].operator))
2110
// OBSOLETE         {
2111
// OBSOLETE           return (idtokentab[i].token);
2112
// OBSOLETE         }
2113
// OBSOLETE     }
2114
// OBSOLETE 
2115
// OBSOLETE       /* Look for other special tokens. */
2116
// OBSOLETE       if (STREQ (simplename, "true"))
2117
// OBSOLETE     {
2118
// OBSOLETE       yylval.ulval = 1;
2119
// OBSOLETE       return (BOOLEAN_LITERAL);
2120
// OBSOLETE     }
2121
// OBSOLETE       if (STREQ (simplename, "false"))
2122
// OBSOLETE     {
2123
// OBSOLETE       yylval.ulval = 0;
2124
// OBSOLETE       return (BOOLEAN_LITERAL);
2125
// OBSOLETE     }
2126
// OBSOLETE 
2127
// OBSOLETE       sym = lookup_symbol (inputname, expression_context_block,
2128
// OBSOLETE                        VAR_NAMESPACE, (int *) NULL,
2129
// OBSOLETE                        (struct symtab **) NULL);
2130
// OBSOLETE       if (sym == NULL && strcmp (inputname, simplename) != 0)
2131
// OBSOLETE     {
2132
// OBSOLETE       sym = lookup_symbol (simplename, expression_context_block,
2133
// OBSOLETE                            VAR_NAMESPACE, (int *) NULL,
2134
// OBSOLETE                            (struct symtab **) NULL);
2135
// OBSOLETE     }
2136
// OBSOLETE       if (sym != NULL)
2137
// OBSOLETE     {
2138
// OBSOLETE       yylval.ssym.stoken.ptr = NULL;
2139
// OBSOLETE       yylval.ssym.stoken.length = 0;
2140
// OBSOLETE       yylval.ssym.sym = sym;
2141
// OBSOLETE       yylval.ssym.is_a_field_of_this = 0;   /* FIXME, C++'ism */
2142
// OBSOLETE       switch (SYMBOL_CLASS (sym))
2143
// OBSOLETE         {
2144
// OBSOLETE         case LOC_BLOCK:
2145
// OBSOLETE           /* Found a procedure name. */
2146
// OBSOLETE           return (GENERAL_PROCEDURE_NAME);
2147
// OBSOLETE         case LOC_STATIC:
2148
// OBSOLETE           /* Found a global or local static variable. */
2149
// OBSOLETE           return (LOCATION_NAME);
2150
// OBSOLETE         case LOC_REGISTER:
2151
// OBSOLETE         case LOC_ARG:
2152
// OBSOLETE         case LOC_REF_ARG:
2153
// OBSOLETE         case LOC_REGPARM:
2154
// OBSOLETE         case LOC_REGPARM_ADDR:
2155
// OBSOLETE         case LOC_LOCAL:
2156
// OBSOLETE         case LOC_LOCAL_ARG:
2157
// OBSOLETE         case LOC_BASEREG:
2158
// OBSOLETE         case LOC_BASEREG_ARG:
2159
// OBSOLETE           if (innermost_block == NULL
2160
// OBSOLETE               || contained_in (block_found, innermost_block))
2161
// OBSOLETE             {
2162
// OBSOLETE               innermost_block = block_found;
2163
// OBSOLETE             }
2164
// OBSOLETE           return (LOCATION_NAME);
2165
// OBSOLETE           break;
2166
// OBSOLETE         case LOC_CONST:
2167
// OBSOLETE         case LOC_LABEL:
2168
// OBSOLETE           return (LOCATION_NAME);
2169
// OBSOLETE           break;
2170
// OBSOLETE         case LOC_TYPEDEF:
2171
// OBSOLETE           yylval.tsym.type = SYMBOL_TYPE (sym);
2172
// OBSOLETE           return TYPENAME;
2173
// OBSOLETE         case LOC_UNDEF:
2174
// OBSOLETE         case LOC_CONST_BYTES:
2175
// OBSOLETE         case LOC_OPTIMIZED_OUT:
2176
// OBSOLETE           error ("Symbol \"%s\" names no location.", inputname);
2177
// OBSOLETE           break;
2178
// OBSOLETE         default:
2179
// OBSOLETE           internal_error (__FILE__, __LINE__,
2180
// OBSOLETE                           "unhandled SYMBOL_CLASS in ch_lex()");
2181
// OBSOLETE           break;
2182
// OBSOLETE         }
2183
// OBSOLETE     }
2184
// OBSOLETE       else if (!have_full_symbols () && !have_partial_symbols ())
2185
// OBSOLETE     {
2186
// OBSOLETE       error ("No symbol table is loaded.  Use the \"file\" command.");
2187
// OBSOLETE     }
2188
// OBSOLETE       else
2189
// OBSOLETE     {
2190
// OBSOLETE       error ("No symbol \"%s\" in current context.", inputname);
2191
// OBSOLETE     }
2192
// OBSOLETE     }
2193
// OBSOLETE 
2194
// OBSOLETE   /* Catch single character tokens which are not part of some
2195
// OBSOLETE      longer token. */
2196
// OBSOLETE 
2197
// OBSOLETE   switch (*lexptr)
2198
// OBSOLETE     {
2199
// OBSOLETE     case '.':                       /* Not float for example. */
2200
// OBSOLETE       lexptr++;
2201
// OBSOLETE       while (isspace (*lexptr))
2202
// OBSOLETE     lexptr++;
2203
// OBSOLETE       inputname = match_simple_name_string ();
2204
// OBSOLETE       if (!inputname)
2205
// OBSOLETE     return '.';
2206
// OBSOLETE       return DOT_FIELD_NAME;
2207
// OBSOLETE     }
2208
// OBSOLETE 
2209
// OBSOLETE   return (ILLEGAL_TOKEN);
2210
// OBSOLETE }
2211
// OBSOLETE 
2212
// OBSOLETE static void
2213
// OBSOLETE write_lower_upper_value (enum exp_opcode opcode,    /* Either UNOP_LOWER or UNOP_UPPER */
2214
// OBSOLETE                      struct type *type)
2215
// OBSOLETE {
2216
// OBSOLETE   if (type == NULL)
2217
// OBSOLETE     write_exp_elt_opcode (opcode);
2218
// OBSOLETE   else
2219
// OBSOLETE     {
2220
// OBSOLETE       struct type *result_type;
2221
// OBSOLETE       LONGEST val = type_lower_upper (opcode, type, &result_type);
2222
// OBSOLETE       write_exp_elt_opcode (OP_LONG);
2223
// OBSOLETE       write_exp_elt_type (result_type);
2224
// OBSOLETE       write_exp_elt_longcst (val);
2225
// OBSOLETE       write_exp_elt_opcode (OP_LONG);
2226
// OBSOLETE     }
2227
// OBSOLETE }
2228
// OBSOLETE 
2229
// OBSOLETE void
2230
// OBSOLETE chill_error (char *msg)
2231
// OBSOLETE {
2232
// OBSOLETE   /* Never used. */
2233
// OBSOLETE }

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.