1 /* Primary expression subroutines
2 Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
3 Contributed by Andy Vaught
5 This file is part of GNU G95.
7 GNU G95 is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU G95 is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU G95; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
34 /* Matches a kind-parameter expression, which is either a named
35 symbolic constant or a nonnegative integer constant. If
36 successful, sets the kind value to the correct integer. */
39 match_kind_param (int *kind)
41 char name[GFC_MAX_SYMBOL_LEN + 1];
46 m = gfc_match_small_literal_int (kind);
50 m = gfc_match_name (name);
54 if (gfc_find_symbol (name, NULL, 1, &sym))
60 if (sym->attr.flavor != FL_PARAMETER)
63 p = gfc_extract_int (sym->value, kind);
74 /* Get a trailing kind-specification for non-character variables.
76 the integer kind value or:
77 -1 if an error was generated
78 -2 if no kind was found */
86 if (gfc_match_char ('_') != MATCH_YES)
89 m = match_kind_param (&kind);
91 gfc_error ("Missing kind-parameter at %C");
93 return (m == MATCH_YES) ? kind : -1;
97 /* Given a character and a radix, see if the character is a valid
98 digit in that radix. */
101 check_digit (int c, int radix)
108 r = ('0' <= c && c <= '1');
112 r = ('0' <= c && c <= '7');
116 r = ('0' <= c && c <= '9');
120 r = ('0' <= c && c <= '9') || ('a' <= c && c <= 'f');
124 gfc_internal_error ("check_digit(): bad radix");
131 /* Match the digit string part of an integer if signflag is not set,
132 the signed digit string part if signflag is set. If the buffer
133 is NULL, we just count characters for the resolution pass. Returns
134 the number of characters matched, -1 for no match. */
137 match_digits (int signflag, int radix, char *buffer)
143 c = gfc_next_char ();
145 if (signflag && (c == '+' || c == '-'))
149 c = gfc_next_char ();
153 if (!check_digit (c, radix))
162 old_loc = gfc_current_locus;
163 c = gfc_next_char ();
165 if (!check_digit (c, radix))
173 gfc_current_locus = old_loc;
179 /* Match an integer (digit string and optional kind).
180 A sign will be accepted if signflag is set. */
183 match_integer_constant (gfc_expr ** result, int signflag)
190 old_loc = gfc_current_locus;
191 gfc_gobble_whitespace ();
193 length = match_digits (signflag, 10, NULL);
194 gfc_current_locus = old_loc;
198 buffer = alloca (length + 1);
199 memset (buffer, '\0', length + 1);
201 gfc_gobble_whitespace ();
203 match_digits (signflag, 10, buffer);
207 kind = gfc_default_integer_kind ();
211 if (gfc_validate_kind (BT_INTEGER, kind) == -1)
213 gfc_error ("Integer kind %d at %C not available", kind);
217 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
219 if (gfc_range_check (e) != ARITH_OK)
221 gfc_error ("Integer too big for its kind at %C");
232 /* Match a binary, octal or hexadecimal constant that can be found in
236 match_boz_constant (gfc_expr ** result)
238 int radix, delim, length;
244 old_loc = gfc_current_locus;
245 gfc_gobble_whitespace ();
247 switch (gfc_next_char ())
259 && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal "
260 "constant at %C uses non-standard syntax.")
267 rname = "hexadecimal";
273 /* No whitespace allowed here. */
275 delim = gfc_next_char ();
276 if (delim != '\'' && delim != '\"')
279 old_loc = gfc_current_locus;
281 length = match_digits (0, radix, NULL);
284 gfc_error ("Empty set of digits in %s constants at %C", rname);
288 if (gfc_next_char () != delim)
290 gfc_error ("Illegal character in %s constant at %C.", rname);
294 gfc_current_locus = old_loc;
296 buffer = alloca (length + 1);
297 memset (buffer, '\0', length + 1);
299 match_digits (0, radix, buffer);
302 e = gfc_convert_integer (buffer, gfc_default_integer_kind (), radix,
305 if (gfc_range_check (e) != ARITH_OK)
307 gfc_error ("Integer too big for default integer kind at %C");
317 gfc_current_locus = old_loc;
322 /* Match a real constant of some sort. */
325 match_real_constant (gfc_expr ** result, int signflag)
327 int kind, c, count, seen_dp, seen_digits, exp_char;
328 locus old_loc, temp_loc;
332 old_loc = gfc_current_locus;
333 gfc_gobble_whitespace ();
342 c = gfc_next_char ();
343 if (signflag && (c == '+' || c == '-'))
345 c = gfc_next_char ();
349 /* Scan significand. */
350 for (;; c = gfc_next_char (), count++)
357 /* Check to see if "." goes with a following operator like ".eq.". */
358 temp_loc = gfc_current_locus;
359 c = gfc_next_char ();
361 if (c == 'e' || c == 'd' || c == 'q')
363 c = gfc_next_char ();
365 goto done; /* Operator named .e. or .d. */
369 goto done; /* Distinguish 1.e9 from 1.eq.2 */
371 gfc_current_locus = temp_loc;
385 if (!seen_digits || (c != 'e' && c != 'd' && c != 'q'))
390 c = gfc_next_char ();
393 if (c == '+' || c == '-')
394 { /* optional sign */
395 c = gfc_next_char ();
401 /* TODO: seen_digits is always true at this point */
404 gfc_current_locus = old_loc;
405 return MATCH_NO; /* ".e" can be something else */
408 gfc_error ("Missing exponent in real number at %C");
414 c = gfc_next_char ();
419 /* See what we've got! */
420 if (!seen_digits || (!seen_dp && exp_char == ' '))
422 gfc_current_locus = old_loc;
426 /* Convert the number. */
427 gfc_current_locus = old_loc;
428 gfc_gobble_whitespace ();
430 buffer = alloca (count + 1);
431 memset (buffer, '\0', count + 1);
433 /* Hack for mpf_init_set_str(). */
437 *p = gfc_next_char ();
438 if (*p == 'd' || *p == 'q')
454 ("Real number at %C has a 'd' exponent and an explicit kind");
457 kind = gfc_default_double_kind ();
464 ("Real number at %C has a 'q' exponent and an explicit kind");
467 kind = gfc_option.q_kind;
472 kind = gfc_default_real_kind ();
474 if (gfc_validate_kind (BT_REAL, kind) == -1)
476 gfc_error ("Invalid real kind %d at %C", kind);
481 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
483 switch (gfc_range_check (e))
488 gfc_error ("Real constant overflows its kind at %C");
491 case ARITH_UNDERFLOW:
492 if (gfc_option.warn_underflow)
493 gfc_warning ("Real constant underflows its kind at %C");
494 mpf_set_ui(e->value.real, 0);
498 gfc_internal_error ("gfc_range_check() returned bad value");
510 /* Match a substring reference. */
513 match_substring (gfc_charlen * cl, int init, gfc_ref ** result)
515 gfc_expr *start, *end;
523 old_loc = gfc_current_locus;
525 m = gfc_match_char ('(');
529 if (gfc_match_char (':') != MATCH_YES)
532 m = gfc_match_init_expr (&start);
534 m = gfc_match_expr (&start);
542 m = gfc_match_char (':');
547 if (gfc_match_char (')') != MATCH_YES)
550 m = gfc_match_init_expr (&end);
552 m = gfc_match_expr (&end);
556 if (m == MATCH_ERROR)
559 m = gfc_match_char (')');
564 /* Optimize away the (:) reference. */
565 if (start == NULL && end == NULL)
569 ref = gfc_get_ref ();
571 ref->type = REF_SUBSTRING;
573 start = gfc_int_expr (1);
574 ref->u.ss.start = start;
575 if (end == NULL && cl)
576 end = gfc_copy_expr (cl->length);
578 ref->u.ss.length = cl;
585 gfc_error ("Syntax error in SUBSTRING specification at %C");
589 gfc_free_expr (start);
592 gfc_current_locus = old_loc;
597 /* Reads the next character of a string constant, taking care to
598 return doubled delimiters on the input as a single instance of
601 Special return values are:
602 -1 End of the string, as determined by the delimiter
603 -2 Unterminated string detected
605 Backslash codes are also expanded at this time. */
608 next_string_char (char delimiter)
613 c = gfc_next_char_literal (1);
620 old_locus = gfc_current_locus;
622 switch (gfc_next_char_literal (1))
650 /* Unknown backslash codes are simply not expanded */
651 gfc_current_locus = old_locus;
659 old_locus = gfc_current_locus;
660 c = gfc_next_char_literal (1);
664 gfc_current_locus = old_locus;
670 /* Special case of gfc_match_name() that matches a parameter kind name
671 before a string constant. This takes case of the weird but legal
672 case of: weird case of:
676 where kind____ is a parameter. gfc_match_name() will happily slurp
677 up all the underscores, which leads to problems. If we return
678 MATCH_YES, the parse pointer points to the final underscore, which
679 is not part of the name. We never return MATCH_ERROR-- errors in
680 the name will be detected later. */
683 match_charkind_name (char *name)
689 gfc_gobble_whitespace ();
690 c = gfc_next_char ();
699 old_loc = gfc_current_locus;
700 c = gfc_next_char ();
704 peek = gfc_peek_char ();
706 if (peek == '\'' || peek == '\"')
708 gfc_current_locus = old_loc;
716 && (gfc_option.flag_dollar_ok && c != '$'))
720 if (++len > GFC_MAX_SYMBOL_LEN)
728 /* See if the current input matches a character constant. Lots of
729 contortions have to be done to match the kind parameter which comes
730 before the actual string. The main consideration is that we don't
731 want to error out too quickly. For example, we don't actually do
732 any validation of the kinds until we have actually seen a legal
733 delimiter. Using match_kind_param() generates errors too quickly. */
736 match_string_constant (gfc_expr ** result)
738 char *p, name[GFC_MAX_SYMBOL_LEN + 1];
739 int i, c, kind, length, delimiter;
740 locus old_locus, start_locus;
746 old_locus = gfc_current_locus;
748 gfc_gobble_whitespace ();
750 start_locus = gfc_current_locus;
752 c = gfc_next_char ();
753 if (c == '\'' || c == '"')
755 kind = gfc_default_character_kind ();
765 kind = kind * 10 + c - '0';
768 c = gfc_next_char ();
774 gfc_current_locus = old_locus;
776 m = match_charkind_name (name);
780 if (gfc_find_symbol (name, NULL, 1, &sym)
782 || sym->attr.flavor != FL_PARAMETER)
786 c = gfc_next_char ();
791 gfc_gobble_whitespace ();
792 c = gfc_next_char ();
798 gfc_gobble_whitespace ();
799 start_locus = gfc_current_locus;
801 c = gfc_next_char ();
802 if (c != '\'' && c != '"')
807 q = gfc_extract_int (sym->value, &kind);
815 if (gfc_validate_kind (BT_CHARACTER, kind) == -1)
817 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
822 /* Scan the string into a block of memory by first figuring out how
823 long it is, allocating the structure, then re-reading it. This
824 isn't particularly efficient, but string constants aren't that
825 common in most code. TODO: Use obstacks? */
832 c = next_string_char (delimiter);
837 gfc_current_locus = start_locus;
838 gfc_error ("Unterminated character constant beginning at %C");
847 e->expr_type = EXPR_CONSTANT;
849 e->ts.type = BT_CHARACTER;
851 e->where = start_locus;
853 e->value.character.string = p = gfc_getmem (length + 1);
854 e->value.character.length = length;
856 gfc_current_locus = start_locus;
857 gfc_next_char (); /* Skip delimiter */
859 for (i = 0; i < length; i++)
860 *p++ = next_string_char (delimiter);
862 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
864 if (next_string_char (delimiter) != -1)
865 gfc_internal_error ("match_string_constant(): Delimiter not found");
867 if (match_substring (NULL, 0, &e->ref) != MATCH_NO)
868 e->expr_type = EXPR_SUBSTRING;
875 gfc_current_locus = old_locus;
880 /* Match a .true. or .false. */
883 match_logical_constant (gfc_expr ** result)
885 static mstring logical_ops[] = {
886 minit (".false.", 0),
894 i = gfc_match_strings (logical_ops);
902 kind = gfc_default_logical_kind ();
904 if (gfc_validate_kind (BT_LOGICAL, kind) == -1)
905 gfc_error ("Bad kind for logical constant at %C");
909 e->expr_type = EXPR_CONSTANT;
910 e->value.logical = i;
911 e->ts.type = BT_LOGICAL;
913 e->where = gfc_current_locus;
920 /* Match a real or imaginary part of a complex constant that is a
921 symbolic constant. */
924 match_sym_complex_part (gfc_expr ** result)
926 char name[GFC_MAX_SYMBOL_LEN + 1];
931 m = gfc_match_name (name);
935 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
938 if (sym->attr.flavor != FL_PARAMETER)
940 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
944 if (!gfc_numeric_ts (&sym->value->ts))
946 gfc_error ("Numeric PARAMETER required in complex constant at %C");
950 if (sym->value->rank != 0)
952 gfc_error ("Scalar PARAMETER required in complex constant at %C");
956 switch (sym->value->ts.type)
959 e = gfc_copy_expr (sym->value);
963 e = gfc_complex2real (sym->value, sym->value->ts.kind);
969 e = gfc_int2real (sym->value, gfc_default_real_kind ());
975 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
978 *result = e; /* e is a scalar, real, constant expression */
982 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
987 /* Match the real and imaginary parts of a complex number. This
988 subroutine is essentially match_real_constant() modified in a
989 couple of ways: A sign is always allowed and numbers that would
990 look like an integer to match_real_constant() are automatically
991 created as floating point numbers. The messiness involved with
992 making sure a decimal point belongs to the number and not a
993 trailing operator is not necessary here either (Hooray!). */
996 match_const_complex_part (gfc_expr ** result)
998 int kind, seen_digits, seen_dp, count;
999 char *p, c, exp_char, *buffer;
1002 old_loc = gfc_current_locus;
1003 gfc_gobble_whitespace ();
1010 c = gfc_next_char ();
1011 if (c == '-' || c == '+')
1013 c = gfc_next_char ();
1017 for (;; c = gfc_next_char (), count++)
1036 if (!seen_digits || (c != 'd' && c != 'e'))
1040 /* Scan exponent. */
1041 c = gfc_next_char ();
1044 if (c == '+' || c == '-')
1045 { /* optional sign */
1046 c = gfc_next_char ();
1052 gfc_error ("Missing exponent in real number at %C");
1058 c = gfc_next_char ();
1066 /* Convert the number. */
1067 gfc_current_locus = old_loc;
1068 gfc_gobble_whitespace ();
1070 buffer = alloca (count + 1);
1071 memset (buffer, '\0', count + 1);
1073 /* Hack for mpf_init_set_str(). */
1077 c = gfc_next_char ();
1090 /* If the number looked like an integer, forget about a kind we may
1091 have seen, otherwise validate the kind against real kinds. */
1092 if (seen_dp == 0 && exp_char == ' ')
1095 kind = gfc_default_integer_kind ();
1100 if (exp_char == 'd')
1105 ("Real number at %C has a 'd' exponent and an explicit kind");
1108 kind = gfc_default_double_kind ();
1114 kind = gfc_default_real_kind ();
1117 if (gfc_validate_kind (BT_REAL, kind) == -1)
1119 gfc_error ("Invalid real kind %d at %C", kind);
1124 *result = gfc_convert_real (buffer, kind, &gfc_current_locus);
1128 gfc_current_locus = old_loc;
1133 /* Match a real or imaginary part of a complex number. */
1136 match_complex_part (gfc_expr ** result)
1140 m = match_sym_complex_part (result);
1144 return match_const_complex_part (result);
1148 /* Try to match a complex constant. */
1151 match_complex_constant (gfc_expr ** result)
1153 gfc_expr *e, *real, *imag;
1154 gfc_error_buf old_error;
1155 gfc_typespec target;
1160 old_loc = gfc_current_locus;
1161 real = imag = e = NULL;
1163 m = gfc_match_char ('(');
1167 gfc_push_error (&old_error);
1169 m = match_complex_part (&real);
1173 if (gfc_match_char (',') == MATCH_NO)
1175 gfc_pop_error (&old_error);
1180 /* If m is error, then something was wrong with the real part and we
1181 assume we have a complex constant because we've seen the ','. An
1182 ambiguous case here is the start of an iterator list of some
1183 sort. These sort of lists are matched prior to coming here. */
1185 if (m == MATCH_ERROR)
1187 gfc_pop_error (&old_error);
1189 m = match_complex_part (&imag);
1192 if (m == MATCH_ERROR)
1195 m = gfc_match_char (')');
1199 if (m == MATCH_ERROR)
1202 /* Decide on the kind of this complex number. */
1203 kind = gfc_kind_max (real, imag);
1204 target.type = BT_REAL;
1207 if (kind != real->ts.kind)
1208 gfc_convert_type (real, &target, 2);
1209 if (kind != imag->ts.kind)
1210 gfc_convert_type (imag, &target, 2);
1212 e = gfc_convert_complex (real, imag, kind);
1213 e->where = gfc_current_locus;
1215 gfc_free_expr (real);
1216 gfc_free_expr (imag);
1222 gfc_error ("Syntax error in COMPLEX constant at %C");
1227 gfc_free_expr (real);
1228 gfc_free_expr (imag);
1229 gfc_current_locus = old_loc;
1235 /* Match constants in any of several forms. Returns nonzero for a
1236 match, zero for no match. */
1239 gfc_match_literal_constant (gfc_expr ** result, int signflag)
1243 m = match_complex_constant (result);
1247 m = match_string_constant (result);
1251 m = match_boz_constant (result);
1255 m = match_real_constant (result, signflag);
1259 m = match_integer_constant (result, signflag);
1263 m = match_logical_constant (result);
1271 /* Match a single actual argument value. An actual argument is
1272 usually an expression, but can also be a procedure name. If the
1273 argument is a single name, it is not always possible to tell
1274 whether the name is a dummy procedure or not. We treat these cases
1275 by creating an argument that looks like a dummy procedure and
1276 fixing things later during resolution. */
1279 match_actual_arg (gfc_expr ** result)
1281 char name[GFC_MAX_SYMBOL_LEN + 1];
1282 gfc_symtree *symtree;
1287 where = gfc_current_locus;
1289 switch (gfc_match_name (name))
1298 w = gfc_current_locus;
1299 gfc_gobble_whitespace ();
1300 c = gfc_next_char ();
1301 gfc_current_locus = w;
1303 if (c != ',' && c != ')')
1306 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1308 /* Handle error elsewhere. */
1310 /* Eliminate a couple of common cases where we know we don't
1311 have a function argument. */
1312 if (symtree == NULL)
1314 gfc_get_sym_tree (name, NULL, &symtree);
1315 gfc_set_sym_referenced (symtree->n.sym);
1321 sym = symtree->n.sym;
1322 gfc_set_sym_referenced (sym);
1323 if (sym->attr.flavor != FL_PROCEDURE
1324 && sym->attr.flavor != FL_UNKNOWN)
1327 /* If the symbol is a function with itself as the result and
1328 is being defined, then we have a variable. */
1329 if (sym->result == sym
1330 && (gfc_current_ns->proc_name == sym
1331 || (gfc_current_ns->parent != NULL
1332 && gfc_current_ns->parent->proc_name == sym)))
1336 e = gfc_get_expr (); /* Leave it unknown for now */
1337 e->symtree = symtree;
1338 e->expr_type = EXPR_VARIABLE;
1339 e->ts.type = BT_PROCEDURE;
1346 gfc_current_locus = where;
1347 return gfc_match_expr (result);
1351 /* Match a keyword argument. */
1354 match_keyword_arg (gfc_actual_arglist * actual, gfc_actual_arglist * base)
1356 char name[GFC_MAX_SYMBOL_LEN + 1];
1357 gfc_actual_arglist *a;
1361 name_locus = gfc_current_locus;
1362 m = gfc_match_name (name);
1366 if (gfc_match_char ('=') != MATCH_YES)
1372 m = match_actual_arg (&actual->expr);
1376 /* Make sure this name has not appeared yet. */
1378 if (name[0] != '\0')
1380 for (a = base; a; a = a->next)
1381 if (strcmp (a->name, name) == 0)
1384 ("Keyword '%s' at %C has already appeared in the current "
1385 "argument list", name);
1390 strcpy (actual->name, name);
1394 gfc_current_locus = name_locus;
1399 /* Matches an actual argument list of a function or subroutine, from
1400 the opening parenthesis to the closing parenthesis. The argument
1401 list is assumed to allow keyword arguments because we don't know if
1402 the symbol associated with the procedure has an implicit interface
1403 or not. We make sure keywords are unique. If SUB_FLAG is set,
1404 we're matching the argument list of a subroutine. */
1407 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist ** argp)
1409 gfc_actual_arglist *head, *tail;
1411 gfc_st_label *label;
1415 *argp = tail = NULL;
1416 old_loc = gfc_current_locus;
1420 if (gfc_match_char ('(') == MATCH_NO)
1421 return (sub_flag) ? MATCH_YES : MATCH_NO;
1423 if (gfc_match_char (')') == MATCH_YES)
1430 head = tail = gfc_get_actual_arglist ();
1433 tail->next = gfc_get_actual_arglist ();
1437 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1439 m = gfc_match_st_label (&label, 0);
1441 gfc_error ("Expected alternate return label at %C");
1445 tail->label = label;
1449 /* After the first keyword argument is seen, the following
1450 arguments must also have keywords. */
1453 m = match_keyword_arg (tail, head);
1455 if (m == MATCH_ERROR)
1460 ("Missing keyword name in actual argument list at %C");
1467 /* See if we have the first keyword argument. */
1468 m = match_keyword_arg (tail, head);
1471 if (m == MATCH_ERROR)
1476 /* Try for a non-keyword argument. */
1477 m = match_actual_arg (&tail->expr);
1478 if (m == MATCH_ERROR)
1486 if (gfc_match_char (')') == MATCH_YES)
1488 if (gfc_match_char (',') != MATCH_YES)
1496 gfc_error ("Syntax error in argument list at %C");
1499 gfc_free_actual_arglist (head);
1500 gfc_current_locus = old_loc;
1506 /* Used by match_varspec() to extend the reference list by one
1510 extend_ref (gfc_expr * primary, gfc_ref * tail)
1513 if (primary->ref == NULL)
1514 primary->ref = tail = gfc_get_ref ();
1518 gfc_internal_error ("extend_ref(): Bad tail");
1519 tail->next = gfc_get_ref ();
1527 /* Match any additional specifications associated with the current
1528 variable like member references or substrings. If equiv_flag is
1529 set we only match stuff that is allowed inside an EQUIVALENCE
1533 match_varspec (gfc_expr * primary, int equiv_flag)
1535 char name[GFC_MAX_SYMBOL_LEN + 1];
1536 gfc_ref *substring, *tail;
1537 gfc_component *component;
1543 if (primary->symtree->n.sym->attr.dimension
1545 && gfc_peek_char () == '('))
1548 tail = extend_ref (primary, tail);
1549 tail->type = REF_ARRAY;
1551 m = gfc_match_array_ref (&tail->u.ar, primary->symtree->n.sym->as,
1557 sym = primary->symtree->n.sym;
1558 primary->ts = sym->ts;
1560 if (sym->ts.type != BT_DERIVED || gfc_match_char ('%') != MATCH_YES)
1561 goto check_substring;
1563 sym = sym->ts.derived;
1567 m = gfc_match_name (name);
1569 gfc_error ("Expected structure component name at %C");
1573 component = gfc_find_component (sym, name);
1574 if (component == NULL)
1577 tail = extend_ref (primary, tail);
1578 tail->type = REF_COMPONENT;
1580 tail->u.c.component = component;
1581 tail->u.c.sym = sym;
1583 primary->ts = component->ts;
1585 if (component->as != NULL)
1587 tail = extend_ref (primary, tail);
1588 tail->type = REF_ARRAY;
1590 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag);
1595 if (component->ts.type != BT_DERIVED
1596 || gfc_match_char ('%') != MATCH_YES)
1599 sym = component->ts.derived;
1603 if (primary->ts.type == BT_CHARACTER)
1605 switch (match_substring (primary->ts.cl, equiv_flag, &substring))
1609 primary->ref = substring;
1611 tail->next = substring;
1613 if (primary->expr_type == EXPR_CONSTANT)
1614 primary->expr_type = EXPR_SUBSTRING;
1630 /* Given an expression that is a variable, figure out what the
1631 ultimate variable's type and attribute is, traversing the reference
1632 structures if necessary.
1634 This subroutine is trickier than it looks. We start at the base
1635 symbol and store the attribute. Component references load a
1636 completely new attribute.
1638 A couple of rules come into play. Subobjects of targets are always
1639 targets themselves. If we see a component that goes through a
1640 pointer, then the expression must also be a target, since the
1641 pointer is associated with something (if it isn't core will soon be
1642 dumped). If we see a full part or section of an array, the
1643 expression is also an array.
1645 We can have at most one full array reference. */
1648 gfc_variable_attr (gfc_expr * expr, gfc_typespec * ts)
1650 int dimension, pointer, target;
1651 symbol_attribute attr;
1654 if (expr->expr_type != EXPR_VARIABLE)
1655 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
1658 attr = expr->symtree->n.sym->attr;
1660 dimension = attr.dimension;
1661 pointer = attr.pointer;
1663 target = attr.target;
1667 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
1668 *ts = expr->symtree->n.sym->ts;
1670 for (; ref; ref = ref->next)
1675 switch (ref->u.ar.type)
1691 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
1697 gfc_get_component_attr (&attr, ref->u.c.component);
1699 *ts = ref->u.c.component->ts;
1701 pointer = ref->u.c.component->pointer;
1712 attr.dimension = dimension;
1713 attr.pointer = pointer;
1714 attr.target = target;
1720 /* Return the attribute from a general expression. */
1723 gfc_expr_attr (gfc_expr * e)
1725 symbol_attribute attr;
1727 switch (e->expr_type)
1730 attr = gfc_variable_attr (e, NULL);
1734 gfc_clear_attr (&attr);
1736 if (e->value.function.esym != NULL)
1737 attr = e->value.function.esym->result->attr;
1739 /* TODO: NULL() returns pointers. May have to take care of this
1745 gfc_clear_attr (&attr);
1753 /* Match a structure constructor. The initial symbol has already been
1757 gfc_match_structure_constructor (gfc_symbol * sym, gfc_expr ** result)
1759 gfc_constructor *head, *tail;
1760 gfc_component *comp;
1767 if (gfc_match_char ('(') != MATCH_YES)
1770 where = gfc_current_locus;
1772 gfc_find_component (sym, NULL);
1774 for (comp = sym->components; comp; comp = comp->next)
1777 tail = head = gfc_get_constructor ();
1780 tail->next = gfc_get_constructor ();
1784 m = gfc_match_expr (&tail->expr);
1787 if (m == MATCH_ERROR)
1790 if (gfc_match_char (',') == MATCH_YES)
1792 if (comp->next == NULL)
1795 ("Too many components in structure constructor at %C");
1805 if (gfc_match_char (')') != MATCH_YES)
1808 if (comp->next != NULL)
1810 gfc_error ("Too few components in structure constructor at %C");
1814 e = gfc_get_expr ();
1816 e->expr_type = EXPR_STRUCTURE;
1818 e->ts.type = BT_DERIVED;
1819 e->ts.derived = sym;
1822 e->value.constructor = head;
1828 gfc_error ("Syntax error in structure constructor at %C");
1831 gfc_free_constructor (head);
1836 /* Matches a variable name followed by anything that might follow it--
1837 array reference, argument list of a function, etc. */
1840 gfc_match_rvalue (gfc_expr ** result)
1842 gfc_actual_arglist *actual_arglist;
1843 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
1846 gfc_symtree *symtree;
1847 locus where, old_loc;
1852 m = gfc_match_name (name);
1856 if (gfc_find_state (COMP_INTERFACE) == SUCCESS)
1857 i = gfc_get_sym_tree (name, NULL, &symtree);
1859 i = gfc_get_ha_sym_tree (name, &symtree);
1864 sym = symtree->n.sym;
1866 where = gfc_current_locus;
1868 gfc_set_sym_referenced (sym);
1870 if (sym->attr.function && sym->result == sym
1871 && (gfc_current_ns->proc_name == sym
1872 || (gfc_current_ns->parent != NULL
1873 && gfc_current_ns->parent->proc_name == sym)))
1876 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
1879 if (sym->attr.generic)
1880 goto generic_function;
1882 switch (sym->attr.flavor)
1886 if (sym->ts.type == BT_UNKNOWN && gfc_peek_char () == '%'
1887 && gfc_get_default_type (sym, sym->ns)->type == BT_DERIVED)
1888 gfc_set_default_type (sym, 0, sym->ns);
1890 e = gfc_get_expr ();
1892 e->expr_type = EXPR_VARIABLE;
1893 e->symtree = symtree;
1895 m = match_varspec (e, 0);
1900 && sym->value->expr_type != EXPR_ARRAY)
1901 e = gfc_copy_expr (sym->value);
1904 e = gfc_get_expr ();
1905 e->expr_type = EXPR_VARIABLE;
1908 e->symtree = symtree;
1909 m = match_varspec (e, 0);
1913 sym = gfc_use_derived (sym);
1917 m = gfc_match_structure_constructor (sym, &e);
1920 /* If we're here, then the name is known to be the name of a
1921 procedure, yet it is not sure to be the name of a function. */
1923 if (sym->attr.subroutine)
1925 gfc_error ("Unexpected use of subroutine name '%s' at %C",
1931 /* At this point, the name has to be a non-statement function.
1932 If the name is the same as the current function being
1933 compiled, then we have a variable reference (to the function
1934 result) if the name is non-recursive. */
1936 st = gfc_enclosing_unit (NULL);
1938 if (st != NULL && st->state == COMP_FUNCTION
1940 && !sym->attr.recursive)
1942 e = gfc_get_expr ();
1943 e->symtree = symtree;
1944 e->expr_type = EXPR_VARIABLE;
1946 m = match_varspec (e, 0);
1950 /* Match a function reference. */
1952 m = gfc_match_actual_arglist (0, &actual_arglist);
1955 if (sym->attr.proc == PROC_ST_FUNCTION)
1956 gfc_error ("Statement function '%s' requires argument list at %C",
1959 gfc_error ("Function '%s' requires an argument list at %C",
1972 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
1973 sym = symtree->n.sym;
1975 e = gfc_get_expr ();
1976 e->symtree = symtree;
1977 e->expr_type = EXPR_FUNCTION;
1978 e->value.function.actual = actual_arglist;
1979 e->where = gfc_current_locus;
1981 if (sym->as != NULL)
1982 e->rank = sym->as->rank;
1984 if (!sym->attr.function
1985 && gfc_add_function (&sym->attr, NULL) == FAILURE)
1991 if (sym->result == NULL)
1999 /* Special case for derived type variables that get their types
2000 via an IMPLICIT statement. This can't wait for the
2001 resolution phase. */
2003 if (gfc_peek_char () == '%'
2004 && gfc_get_default_type (sym, sym->ns)->type == BT_DERIVED)
2005 gfc_set_default_type (sym, 0, sym->ns);
2007 /* If the symbol has a dimension attribute, the expression is a
2010 if (sym->attr.dimension)
2012 if (gfc_add_flavor (&sym->attr, FL_VARIABLE, NULL) == FAILURE)
2018 e = gfc_get_expr ();
2019 e->symtree = symtree;
2020 e->expr_type = EXPR_VARIABLE;
2021 m = match_varspec (e, 0);
2025 /* Name is not an array, so we peek to see if a '(' implies a
2026 function call or a substring reference. Otherwise the
2027 variable is just a scalar. */
2029 gfc_gobble_whitespace ();
2030 if (gfc_peek_char () != '(')
2032 /* Assume a scalar variable */
2033 e = gfc_get_expr ();
2034 e->symtree = symtree;
2035 e->expr_type = EXPR_VARIABLE;
2037 if (gfc_add_flavor (&sym->attr, FL_VARIABLE, NULL) == FAILURE)
2044 m = match_varspec (e, 0);
2048 /* See if this is a function reference with a keyword argument
2049 as first argument. We do this because otherwise a spurious
2050 symbol would end up in the symbol table. */
2052 old_loc = gfc_current_locus;
2053 m2 = gfc_match (" ( %n =", argname);
2054 gfc_current_locus = old_loc;
2056 e = gfc_get_expr ();
2057 e->symtree = symtree;
2059 if (m2 != MATCH_YES)
2061 /* See if this could possibly be a substring reference of a name
2062 that we're not sure is a variable yet. */
2064 if ((sym->ts.type == BT_UNKNOWN || sym->ts.type == BT_CHARACTER)
2065 && match_substring (sym->ts.cl, 0, &e->ref) == MATCH_YES)
2068 e->expr_type = EXPR_VARIABLE;
2070 if (sym->attr.flavor != FL_VARIABLE
2071 && gfc_add_flavor (&sym->attr, FL_VARIABLE, NULL) == FAILURE)
2077 if (sym->ts.type == BT_UNKNOWN
2078 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
2090 /* Give up, assume we have a function. */
2092 gfc_get_sym_tree (name, NULL, &symtree); /* Can't fail */
2093 sym = symtree->n.sym;
2094 e->expr_type = EXPR_FUNCTION;
2096 if (!sym->attr.function
2097 && gfc_add_function (&sym->attr, NULL) == FAILURE)
2105 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2107 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
2115 /* If our new function returns a character, array or structure
2116 type, it might have subsequent references. */
2118 m = match_varspec (e, 0);
2125 gfc_get_sym_tree (name, NULL, &symtree); /* Can't fail */
2127 e = gfc_get_expr ();
2128 e->symtree = symtree;
2129 e->expr_type = EXPR_FUNCTION;
2131 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2135 gfc_error ("Symbol at %C is not appropriate for an expression");
2151 /* Match a variable, ie something that can be assigned to. This
2152 starts as a symbol, can be a structure component or an array
2153 reference. It can be a function if the function doesn't have a
2154 separate RESULT variable. If the symbol has not been previously
2155 seen, we assume it is a variable. */
2158 gfc_match_variable (gfc_expr ** result, int equiv_flag)
2166 m = gfc_match_sym_tree (&st, 1);
2169 where = gfc_current_locus;
2172 gfc_set_sym_referenced (sym);
2173 switch (sym->attr.flavor)
2179 if (gfc_add_flavor (&sym->attr, FL_VARIABLE, NULL) == FAILURE)
2182 /* Special case for derived type variables that get their types
2183 via an IMPLICIT statement. This can't wait for the
2184 resolution phase. */
2186 if (gfc_peek_char () == '%'
2187 && gfc_get_default_type (sym, sym->ns)->type == BT_DERIVED)
2188 gfc_set_default_type (sym, 0, sym->ns);
2193 /* Check for a nonrecursive function result */
2194 if (sym->attr.function && (sym->result == sym || sym->attr.entry))
2197 /* If a function result is a derived type, then the derived
2198 type may still have to be resolved. */
2200 if (sym->ts.type == BT_DERIVED
2201 && gfc_use_derived (sym->ts.derived) == NULL)
2207 /* Fall through to error */
2210 gfc_error ("Expected VARIABLE at %C");
2214 expr = gfc_get_expr ();
2216 expr->expr_type = EXPR_VARIABLE;
2219 expr->where = where;
2221 /* Now see if we have to do more. */
2222 m = match_varspec (expr, equiv_flag);
2225 gfc_free_expr (expr);