configure.in -- decide whether to configure gdb.hp; configure -- regenerated.
[deliverable/binutils-gdb.git] / gdb / ch-lang.c
CommitLineData
22e39759 1/* Chill language support routines for GDB, the GNU debugger.
81afee37 2 Copyright 1992, 1995, 1996 Free Software Foundation, Inc.
22e39759
FF
3
4This file is part of GDB.
5
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program; if not, write to the Free Software
6c9638b4 18Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
22e39759
FF
19
20#include "defs.h"
21#include "symtab.h"
22#include "gdbtypes.h"
7398958c 23#include "value.h"
22e39759
FF
24#include "expression.h"
25#include "parser-defs.h"
26#include "language.h"
27#include "ch-lang.h"
28
b607efe7
FF
29static value_ptr
30evaluate_subexp_chill PARAMS ((struct type *, struct expression *, int *, enum noside));
31
32static value_ptr
33value_chill_max_min PARAMS ((enum exp_opcode, value_ptr));
34
35static value_ptr
36value_chill_card PARAMS ((value_ptr));
37
38static value_ptr
39 value_chill_length PARAMS ((value_ptr));
40
41static struct type *
42chill_create_fundamental_type PARAMS ((struct objfile *, int));
43
44static void
242c0d81 45chill_printstr PARAMS ((GDB_FILE *stream, char *string, unsigned int length, int width, int force_ellipses));
b607efe7
FF
46
47static void
48chill_printchar PARAMS ((int, GDB_FILE *));
7532cf10
FF
49
50/* For now, Chill uses a simple mangling algorithm whereby you simply
51 discard everything after the occurance of two successive CPLUS_MARKER
52 characters to derive the demangled form. */
53
54char *
55chill_demangle (mangled)
56 const char *mangled;
57{
81afee37 58 const char *joiner = NULL;
7532cf10 59 char *demangled;
81afee37 60 const char *cp = mangled;
7532cf10 61
81afee37
FF
62 while (*cp)
63 {
64 if (is_cplus_marker (*cp))
65 {
66 joiner = cp;
67 break;
68 }
69 cp++;
70 }
71 if (joiner != NULL && *(joiner + 1) == *joiner)
7532cf10
FF
72 {
73 demangled = savestring (mangled, joiner - mangled);
74 }
75 else
76 {
77 demangled = NULL;
78 }
79 return (demangled);
80}
81
22e39759
FF
82static void
83chill_printchar (c, stream)
84 register int c;
199b2450 85 GDB_FILE *stream;
22e39759
FF
86{
87 c &= 0xFF; /* Avoid sign bit follies */
88
89 if (PRINT_LITERAL_FORM (c))
90 {
c105168f
WM
91 if (c == '\'' || c == '^')
92 fprintf_filtered (stream, "'%c%c'", c, c);
93 else
94 fprintf_filtered (stream, "'%c'", c);
22e39759
FF
95 }
96 else
97 {
c105168f 98 fprintf_filtered (stream, "'^(%u)'", (unsigned int) c);
22e39759
FF
99 }
100}
101
102/* Print the character string STRING, printing at most LENGTH characters.
103 Printing stops early if the number hits print_max; repeat counts
104 are printed as appropriate. Print ellipses at the end if we
105 had to stop before printing LENGTH characters, or if FORCE_ELLIPSES.
106 Note that gdb maintains the length of strings without counting the
107 terminating null byte, while chill strings are typically written with
108 an explicit null byte. So we always assume an implied null byte
109 until gdb is able to maintain non-null terminated strings as well
110 as null terminated strings (FIXME).
111 */
112
113static void
242c0d81 114chill_printstr (stream, string, length, width, force_ellipses)
199b2450 115 GDB_FILE *stream;
22e39759
FF
116 char *string;
117 unsigned int length;
242c0d81 118 int width;
22e39759
FF
119 int force_ellipses;
120{
121 register unsigned int i;
122 unsigned int things_printed = 0;
123 int in_literal_form = 0;
124 int in_control_form = 0;
125 int need_slashslash = 0;
126 unsigned int c;
127 extern int repeat_count_threshold;
128 extern int print_max;
129
130 if (length == 0)
131 {
96b6b765 132 fputs_filtered ("\"\"", stream);
22e39759
FF
133 return;
134 }
135
136 for (i = 0; i < length && things_printed < print_max; ++i)
137 {
138 /* Position of the character we are examining
139 to see whether it is repeated. */
140 unsigned int rep1;
141 /* Number of repetitions we have detected so far. */
142 unsigned int reps;
143
144 QUIT;
145
146 if (need_slashslash)
147 {
148 fputs_filtered ("//", stream);
149 need_slashslash = 0;
150 }
151
152 rep1 = i + 1;
153 reps = 1;
154 while (rep1 < length && string[rep1] == string[i])
155 {
156 ++rep1;
157 ++reps;
158 }
159
160 c = string[i];
161 if (reps > repeat_count_threshold)
162 {
163 if (in_control_form || in_literal_form)
164 {
c105168f
WM
165 if (in_control_form)
166 fputs_filtered (")", stream);
cba00921 167 fputs_filtered ("\"//", stream);
22e39759
FF
168 in_control_form = in_literal_form = 0;
169 }
170 chill_printchar (c, stream);
171 fprintf_filtered (stream, "<repeats %u times>", reps);
172 i = rep1 - 1;
173 things_printed += repeat_count_threshold;
174 need_slashslash = 1;
175 }
176 else
177 {
c105168f
WM
178 if (! in_literal_form && ! in_control_form)
179 fputs_filtered ("\"", stream);
22e39759
FF
180 if (PRINT_LITERAL_FORM (c))
181 {
182 if (!in_literal_form)
183 {
184 if (in_control_form)
185 {
c105168f 186 fputs_filtered (")", stream);
22e39759
FF
187 in_control_form = 0;
188 }
22e39759
FF
189 in_literal_form = 1;
190 }
191 fprintf_filtered (stream, "%c", c);
c105168f
WM
192 if (c == '"' || c == '^')
193 /* duplicate this one as must be done at input */
194 fprintf_filtered (stream, "%c", c);
22e39759
FF
195 }
196 else
197 {
198 if (!in_control_form)
199 {
200 if (in_literal_form)
201 {
22e39759
FF
202 in_literal_form = 0;
203 }
c105168f 204 fputs_filtered ("^(", stream);
22e39759
FF
205 in_control_form = 1;
206 }
c105168f
WM
207 else
208 fprintf_filtered (stream, ",");
209 c = c & 0xff;
210 fprintf_filtered (stream, "%u", (unsigned int) c);
22e39759
FF
211 }
212 ++things_printed;
213 }
214 }
215
216 /* Terminate the quotes if necessary. */
c105168f
WM
217 if (in_control_form)
218 {
219 fputs_filtered (")", stream);
220 }
22e39759
FF
221 if (in_literal_form || in_control_form)
222 {
cba00921 223 fputs_filtered ("\"", stream);
22e39759
FF
224 }
225 if (force_ellipses || (i < length))
226 {
227 fputs_filtered ("...", stream);
228 }
229}
230
231static struct type *
232chill_create_fundamental_type (objfile, typeid)
233 struct objfile *objfile;
234 int typeid;
235{
236 register struct type *type = NULL;
22e39759
FF
237
238 switch (typeid)
239 {
240 default:
241 /* FIXME: For now, if we are asked to produce a type not in this
242 language, create the equivalent of a C integer type with the
243 name "<?type?>". When all the dust settles from the type
244 reconstruction work, this should probably become an error. */
a8a69e63 245 type = init_type (TYPE_CODE_INT, 2, 0, "<?type?>", objfile);
22e39759
FF
246 warning ("internal error: no chill fundamental type %d", typeid);
247 break;
a8a69e63
FF
248 case FT_VOID:
249 /* FIXME: Currently the GNU Chill compiler emits some DWARF entries for
250 typedefs, unrelated to anything directly in the code being compiled,
251 that have some FT_VOID types. Just fake it for now. */
252 type = init_type (TYPE_CODE_VOID, 0, 0, "<?VOID?>", objfile);
253 break;
22e39759
FF
254 case FT_BOOLEAN:
255 type = init_type (TYPE_CODE_BOOL, 1, TYPE_FLAG_UNSIGNED, "BOOL", objfile);
256 break;
257 case FT_CHAR:
a8a69e63 258 type = init_type (TYPE_CODE_CHAR, 1, TYPE_FLAG_UNSIGNED, "CHAR", objfile);
22e39759
FF
259 break;
260 case FT_SIGNED_CHAR:
dda398c3 261 type = init_type (TYPE_CODE_INT, 1, 0, "BYTE", objfile);
22e39759
FF
262 break;
263 case FT_UNSIGNED_CHAR:
264 type = init_type (TYPE_CODE_INT, 1, TYPE_FLAG_UNSIGNED, "UBYTE", objfile);
265 break;
266 case FT_SHORT: /* Chill ints are 2 bytes */
dda398c3 267 type = init_type (TYPE_CODE_INT, 2, 0, "INT", objfile);
22e39759
FF
268 break;
269 case FT_UNSIGNED_SHORT: /* Chill ints are 2 bytes */
270 type = init_type (TYPE_CODE_INT, 2, TYPE_FLAG_UNSIGNED, "UINT", objfile);
271 break;
b6236d6e
FF
272 case FT_INTEGER: /* FIXME? */
273 case FT_SIGNED_INTEGER: /* FIXME? */
274 case FT_LONG: /* Chill longs are 4 bytes */
275 case FT_SIGNED_LONG: /* Chill longs are 4 bytes */
dda398c3 276 type = init_type (TYPE_CODE_INT, 4, 0, "LONG", objfile);
22e39759 277 break;
b6236d6e
FF
278 case FT_UNSIGNED_INTEGER: /* FIXME? */
279 case FT_UNSIGNED_LONG: /* Chill longs are 4 bytes */
22e39759
FF
280 type = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED, "ULONG", objfile);
281 break;
282 case FT_FLOAT:
283 type = init_type (TYPE_CODE_FLT, 4, 0, "REAL", objfile);
284 break;
285 case FT_DBL_PREC_FLOAT:
286 type = init_type (TYPE_CODE_FLT, 8, 0, "LONG_REAL", objfile);
287 break;
288 }
289 return (type);
290}
291
292\f
293/* Table of operators and their precedences for printing expressions. */
294
a8a69e63 295static const struct op_print chill_op_print_tab[] = {
22e39759
FF
296 {"AND", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
297 {"OR", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
298 {"NOT", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
76a0ffb4
FF
299 {"MOD", BINOP_MOD, PREC_MUL, 0},
300 {"REM", BINOP_REM, PREC_MUL, 0},
61379835
PB
301 {"SIZE",UNOP_SIZEOF, PREC_BUILTIN_FUNCTION, 0},
302 {"LOWER",UNOP_LOWER, PREC_BUILTIN_FUNCTION, 0},
303 {"UPPER",UNOP_UPPER, PREC_BUILTIN_FUNCTION, 0},
c105168f
WM
304 {"CARD",UNOP_CARD, PREC_BUILTIN_FUNCTION, 0},
305 {"MAX",UNOP_CHMAX, PREC_BUILTIN_FUNCTION, 0},
306 {"MIN",UNOP_CHMIN, PREC_BUILTIN_FUNCTION, 0},
22e39759
FF
307 {":=", BINOP_ASSIGN, PREC_ASSIGN, 1},
308 {"=", BINOP_EQUAL, PREC_EQUAL, 0},
309 {"/=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
310 {"<=", BINOP_LEQ, PREC_ORDER, 0},
311 {">=", BINOP_GEQ, PREC_ORDER, 0},
312 {">", BINOP_GTR, PREC_ORDER, 0},
313 {"<", BINOP_LESS, PREC_ORDER, 0},
314 {"+", BINOP_ADD, PREC_ADD, 0},
315 {"-", BINOP_SUB, PREC_ADD, 0},
316 {"*", BINOP_MUL, PREC_MUL, 0},
317 {"/", BINOP_DIV, PREC_MUL, 0},
fcbadaee 318 {"//", BINOP_CONCAT, PREC_PREFIX, 0}, /* FIXME: precedence? */
22e39759 319 {"-", UNOP_NEG, PREC_PREFIX, 0},
bdef6b60
PB
320 {"->", UNOP_IND, PREC_SUFFIX, 1},
321 {"->", UNOP_ADDR, PREC_PREFIX, 0},
badefd28 322 {":", BINOP_RANGE, PREC_ASSIGN, 0},
22e39759
FF
323 {NULL, 0, 0, 0}
324};
22e39759
FF
325\f
326/* The built-in types of Chill. */
327
328struct type *builtin_type_chill_bool;
329struct type *builtin_type_chill_char;
330struct type *builtin_type_chill_long;
331struct type *builtin_type_chill_ulong;
332struct type *builtin_type_chill_real;
333
8501c742 334struct type ** CONST_PTR (chill_builtin_types[]) =
22e39759
FF
335{
336 &builtin_type_chill_bool,
337 &builtin_type_chill_char,
338 &builtin_type_chill_long,
339 &builtin_type_chill_ulong,
340 &builtin_type_chill_real,
341 0
342};
343
61379835
PB
344/* Calculate LOWER or UPPER of TYPE.
345 Returns the result as an integer.
346 *RESULT_TYPE is the appropriate type for the result. */
347
348LONGEST
349type_lower_upper (op, type, result_type)
350 enum exp_opcode op; /* Either UNOP_LOWER or UNOP_UPPER */
351 struct type *type;
352 struct type **result_type;
353{
d1f4065e
PB
354 LONGEST low, high;
355 *result_type = type;
356 CHECK_TYPEDEF (type);
61379835
PB
357 switch (TYPE_CODE (type))
358 {
359 case TYPE_CODE_STRUCT:
d1f4065e 360 *result_type = builtin_type_int;
61379835
PB
361 if (chill_varying_type (type))
362 return type_lower_upper (op, TYPE_FIELD_TYPE (type, 1), result_type);
363 break;
364 case TYPE_CODE_ARRAY:
365 case TYPE_CODE_BITSTRING:
366 case TYPE_CODE_STRING:
367 type = TYPE_FIELD_TYPE (type, 0); /* Get index type */
368
369 /* ... fall through ... */
370 case TYPE_CODE_RANGE:
61379835
PB
371 *result_type = TYPE_TARGET_TYPE (type);
372 return op == UNOP_LOWER ? TYPE_LOW_BOUND (type) : TYPE_HIGH_BOUND (type);
373
374 case TYPE_CODE_ENUM:
61379835 375 case TYPE_CODE_BOOL:
61379835
PB
376 case TYPE_CODE_INT:
377 case TYPE_CODE_CHAR:
d1f4065e
PB
378 if (get_discrete_bounds (type, &low, &high) >= 0)
379 {
380 *result_type = type;
381 return op == UNOP_LOWER ? low : high;
382 }
383 break;
6b14af2b
FF
384 case TYPE_CODE_UNDEF:
385 case TYPE_CODE_PTR:
386 case TYPE_CODE_UNION:
387 case TYPE_CODE_FUNC:
388 case TYPE_CODE_FLT:
389 case TYPE_CODE_VOID:
390 case TYPE_CODE_SET:
391 case TYPE_CODE_ERROR:
392 case TYPE_CODE_MEMBER:
393 case TYPE_CODE_METHOD:
394 case TYPE_CODE_REF:
395 case TYPE_CODE_COMPLEX:
396 default:
397 break;
61379835
PB
398 }
399 error ("unknown mode for LOWER/UPPER builtin");
400}
401
402static value_ptr
403value_chill_length (val)
404 value_ptr val;
405{
406 LONGEST tmp;
407 struct type *type = VALUE_TYPE (val);
408 struct type *ttype;
d1f4065e 409 CHECK_TYPEDEF (type);
61379835
PB
410 switch (TYPE_CODE (type))
411 {
412 case TYPE_CODE_ARRAY:
413 case TYPE_CODE_BITSTRING:
414 case TYPE_CODE_STRING:
415 tmp = type_lower_upper (UNOP_UPPER, type, &ttype)
416 - type_lower_upper (UNOP_LOWER, type, &ttype) + 1;
417 break;
418 case TYPE_CODE_STRUCT:
419 if (chill_varying_type (type))
420 {
421 tmp = unpack_long (TYPE_FIELD_TYPE (type, 0), VALUE_CONTENTS (val));
422 break;
423 }
424 /* ... else fall through ... */
425 default:
426 error ("bad argument to LENGTH builtin");
427 }
428 return value_from_longest (builtin_type_int, tmp);
429}
430
c105168f
WM
431static value_ptr
432value_chill_card (val)
433 value_ptr val;
434{
435 LONGEST tmp = 0;
436 struct type *type = VALUE_TYPE (val);
437 CHECK_TYPEDEF (type);
438
439 if (TYPE_CODE (type) == TYPE_CODE_SET)
440 {
441 struct type *range_type = TYPE_INDEX_TYPE (type);
442 LONGEST lower_bound, upper_bound;
443 int i;
444
445 get_discrete_bounds (range_type, &lower_bound, &upper_bound);
446 for (i = lower_bound; i <= upper_bound; i++)
447 if (value_bit_index (type, VALUE_CONTENTS (val), i) > 0)
448 tmp++;
449 }
450 else
451 error ("bad argument to CARD builtin");
452
453 return value_from_longest (builtin_type_int, tmp);
454}
455
456static value_ptr
457value_chill_max_min (op, val)
458 enum exp_opcode op;
459 value_ptr val;
460{
461 LONGEST tmp = 0;
462 struct type *type = VALUE_TYPE (val);
463 struct type *elttype;
464 CHECK_TYPEDEF (type);
465
466 if (TYPE_CODE (type) == TYPE_CODE_SET)
467 {
468 LONGEST lower_bound, upper_bound;
469 int i, empty = 1;
470
471 elttype = TYPE_INDEX_TYPE (type);
472 CHECK_TYPEDEF (elttype);
473 get_discrete_bounds (elttype, &lower_bound, &upper_bound);
474
475 if (op == UNOP_CHMAX)
476 {
477 for (i = upper_bound; i >= lower_bound; i--)
478 {
479 if (value_bit_index (type, VALUE_CONTENTS (val), i) > 0)
480 {
481 tmp = i;
482 empty = 0;
483 break;
484 }
485 }
486 }
487 else
488 {
489 for (i = lower_bound; i <= upper_bound; i++)
490 {
491 if (value_bit_index (type, VALUE_CONTENTS (val), i) > 0)
492 {
493 tmp = i;
494 empty = 0;
495 break;
496 }
497 }
498 }
499 if (empty)
500 error ("%s for empty powerset", op == UNOP_CHMAX ? "MAX" : "MIN");
501 }
502 else
503 error ("bad argument to %s builtin", op == UNOP_CHMAX ? "MAX" : "MIN");
504
505 return value_from_longest (TYPE_CODE (elttype) == TYPE_CODE_RANGE
506 ? TYPE_TARGET_TYPE (elttype)
507 : elttype,
508 tmp);
509}
510
7398958c
PB
511static value_ptr
512evaluate_subexp_chill (expect_type, exp, pos, noside)
513 struct type *expect_type;
514 register struct expression *exp;
515 register int *pos;
516 enum noside noside;
517{
518 int pc = *pos;
61379835 519 struct type *type;
7398958c
PB
520 int tem, nargs;
521 value_ptr arg1;
522 value_ptr *argvec;
61379835
PB
523 enum exp_opcode op = exp->elts[*pos].opcode;
524 switch (op)
7398958c
PB
525 {
526 case MULTI_SUBSCRIPT:
d1f4065e 527 if (noside == EVAL_SKIP)
7398958c
PB
528 break;
529 (*pos) += 3;
530 nargs = longest_to_int (exp->elts[pc + 1].longconst);
531 arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
d1f4065e 532 type = check_typedef (VALUE_TYPE (arg1));
7398958c 533
d1f4065e
PB
534 if (nargs == 1 && TYPE_CODE (type) == TYPE_CODE_INT)
535 {
536 /* Looks like string repetition. */
537 value_ptr string = evaluate_subexp_with_coercion (exp, pos, noside);
538 return value_concat (arg1, string);
539 }
540
541 switch (TYPE_CODE (type))
7398958c
PB
542 {
543 case TYPE_CODE_PTR:
02e6e53d 544 type = check_typedef (TYPE_TARGET_TYPE (type));
b9aa6215 545 if (!type || TYPE_CODE (type) != TYPE_CODE_FUNC)
02e6e53d
PB
546 error ("reference value used as function");
547 /* ... fall through ... */
7398958c
PB
548 case TYPE_CODE_FUNC:
549 /* It's a function call. */
d1f4065e
PB
550 if (noside == EVAL_AVOID_SIDE_EFFECTS)
551 break;
552
7398958c
PB
553 /* Allocate arg vector, including space for the function to be
554 called in argvec[0] and a terminating NULL */
555 argvec = (value_ptr *) alloca (sizeof (value_ptr) * (nargs + 2));
556 argvec[0] = arg1;
557 tem = 1;
02e6e53d 558 for (; tem <= nargs && tem <= TYPE_NFIELDS (type); tem++)
1c486a2b 559 {
02e6e53d
PB
560 argvec[tem]
561 = evaluate_subexp_chill (TYPE_FIELD_TYPE (type, tem-1),
562 exp, pos, noside);
1c486a2b 563 }
7398958c
PB
564 for (; tem <= nargs; tem++)
565 argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
566 argvec[tem] = 0; /* signal end of arglist */
567
568 return call_function_by_hand (argvec[0], nargs, argvec + 1);
18d3d859
JK
569 default:
570 break;
7398958c
PB
571 }
572
573 while (nargs-- > 0)
574 {
575 value_ptr index = evaluate_subexp_with_coercion (exp, pos, noside);
576 arg1 = value_subscript (arg1, index);
577 }
578 return (arg1);
61379835
PB
579
580 case UNOP_LOWER:
581 case UNOP_UPPER:
582 (*pos)++;
583 if (noside == EVAL_SKIP)
584 {
585 (*exp->language_defn->evaluate_exp) (NULL_TYPE, exp, pos, EVAL_SKIP);
586 goto nosideret;
587 }
588 arg1 = (*exp->language_defn->evaluate_exp) (NULL_TYPE, exp, pos,
589 EVAL_AVOID_SIDE_EFFECTS);
590 tem = type_lower_upper (op, VALUE_TYPE (arg1), &type);
591 return value_from_longest (type, tem);
592
593 case UNOP_LENGTH:
594 (*pos)++;
595 arg1 = (*exp->language_defn->evaluate_exp) (NULL_TYPE, exp, pos, noside);
596 return value_chill_length (arg1);
597
c105168f
WM
598 case UNOP_CARD:
599 (*pos)++;
600 arg1 = (*exp->language_defn->evaluate_exp) (NULL_TYPE, exp, pos, noside);
601 return value_chill_card (arg1);
602
603 case UNOP_CHMAX:
604 case UNOP_CHMIN:
605 (*pos)++;
606 arg1 = (*exp->language_defn->evaluate_exp) (NULL_TYPE, exp, pos, noside);
607 return value_chill_max_min (op, arg1);
608
badefd28
PB
609 case BINOP_COMMA:
610 error ("',' operator used in invalid context");
611
18d3d859
JK
612 default:
613 break;
7398958c
PB
614 }
615
616 return evaluate_subexp_standard (expect_type, exp, pos, noside);
61379835
PB
617 nosideret:
618 return value_from_longest (builtin_type_long, (LONGEST) 1);
7398958c
PB
619}
620
22e39759
FF
621const struct language_defn chill_language_defn = {
622 "chill",
623 language_chill,
624 chill_builtin_types,
625 range_check_on,
626 type_check_on,
627 chill_parse, /* parser */
628 chill_error, /* parser error function */
7398958c 629 evaluate_subexp_chill,
22e39759
FF
630 chill_printchar, /* print a character constant */
631 chill_printstr, /* function to print a string constant */
242c0d81 632 NULL, /* Function to print a single char */
22e39759 633 chill_create_fundamental_type,/* Create fundamental type in this language */
a8a69e63
FF
634 chill_print_type, /* Print a type using appropriate syntax */
635 chill_val_print, /* Print a value using appropriate syntax */
e10cfcaa 636 chill_value_print, /* Print a top-levl value */
22e39759 637 {"", "B'", "", ""}, /* Binary format info */
5573d7d4
JK
638 {"O'%lo", "O'", "o", ""}, /* Octal format info */
639 {"D'%ld", "D'", "d", ""}, /* Decimal format info */
640 {"H'%lx", "H'", "x", ""}, /* Hex format info */
22e39759 641 chill_op_print_tab, /* expression operators for printing */
acc4efde 642 0, /* arrays are first-class (not c-style) */
ead95f8a
PB
643 0, /* String lower bound */
644 &builtin_type_chill_char, /* Type of string elements */
22e39759
FF
645 LANG_MAGIC
646};
647
648/* Initialization for Chill */
649
650void
d62e7a20 651_initialize_chill_language ()
22e39759
FF
652{
653 builtin_type_chill_bool =
654 init_type (TYPE_CODE_BOOL, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
655 TYPE_FLAG_UNSIGNED,
656 "BOOL", (struct objfile *) NULL);
657 builtin_type_chill_char =
658 init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
659 TYPE_FLAG_UNSIGNED,
660 "CHAR", (struct objfile *) NULL);
661 builtin_type_chill_long =
662 init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
663 0,
664 "LONG", (struct objfile *) NULL);
665 builtin_type_chill_ulong =
666 init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
667 TYPE_FLAG_UNSIGNED,
668 "ULONG", (struct objfile *) NULL);
669 builtin_type_chill_real =
670 init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
671 0,
672 "LONG_REAL", (struct objfile *) NULL);
673
674 add_language (&chill_language_defn);
675}
This page took 0.281813 seconds and 4 git commands to generate.