Merge from mainline (gomp-merge-2005-02-26).
[official-gcc.git] / gcc / fortran / primary.c
blobf3c51ab46759021499962f1773385661b9904e09
1 /* Primary expression subroutines
2 Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation,
3 Inc.
4 Contributed by Andy Vaught
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA. */
24 #include "config.h"
25 #include "system.h"
26 #include "flags.h"
27 #include "gfortran.h"
28 #include "arith.h"
29 #include "match.h"
30 #include "parse.h"
32 /* Matches a kind-parameter expression, which is either a named
33 symbolic constant or a nonnegative integer constant. If
34 successful, sets the kind value to the correct integer. */
36 static match
37 match_kind_param (int *kind)
39 char name[GFC_MAX_SYMBOL_LEN + 1];
40 gfc_symbol *sym;
41 const char *p;
42 match m;
44 m = gfc_match_small_literal_int (kind);
45 if (m != MATCH_NO)
46 return m;
48 m = gfc_match_name (name);
49 if (m != MATCH_YES)
50 return m;
52 if (gfc_find_symbol (name, NULL, 1, &sym))
53 return MATCH_ERROR;
55 if (sym == NULL)
56 return MATCH_NO;
58 if (sym->attr.flavor != FL_PARAMETER)
59 return MATCH_NO;
61 p = gfc_extract_int (sym->value, kind);
62 if (p != NULL)
63 return MATCH_NO;
65 if (*kind < 0)
66 return MATCH_NO;
68 return MATCH_YES;
72 /* Get a trailing kind-specification for non-character variables.
73 Returns:
74 the integer kind value or:
75 -1 if an error was generated
76 -2 if no kind was found */
78 static int
79 get_kind (void)
81 int kind;
82 match m;
84 if (gfc_match_char ('_') != MATCH_YES)
85 return -2;
87 m = match_kind_param (&kind);
88 if (m == MATCH_NO)
89 gfc_error ("Missing kind-parameter at %C");
91 return (m == MATCH_YES) ? kind : -1;
95 /* Given a character and a radix, see if the character is a valid
96 digit in that radix. */
98 static int
99 check_digit (int c, int radix)
101 int r;
103 switch (radix)
105 case 2:
106 r = ('0' <= c && c <= '1');
107 break;
109 case 8:
110 r = ('0' <= c && c <= '7');
111 break;
113 case 10:
114 r = ('0' <= c && c <= '9');
115 break;
117 case 16:
118 r = ISXDIGIT (c);
119 break;
121 default:
122 gfc_internal_error ("check_digit(): bad radix");
125 return r;
129 /* Match the digit string part of an integer if signflag is not set,
130 the signed digit string part if signflag is set. If the buffer
131 is NULL, we just count characters for the resolution pass. Returns
132 the number of characters matched, -1 for no match. */
134 static int
135 match_digits (int signflag, int radix, char *buffer)
137 locus old_loc;
138 int length, c;
140 length = 0;
141 c = gfc_next_char ();
143 if (signflag && (c == '+' || c == '-'))
145 if (buffer != NULL)
146 *buffer++ = c;
147 gfc_gobble_whitespace ();
148 c = gfc_next_char ();
149 length++;
152 if (!check_digit (c, radix))
153 return -1;
155 length++;
156 if (buffer != NULL)
157 *buffer++ = c;
159 for (;;)
161 old_loc = gfc_current_locus;
162 c = gfc_next_char ();
164 if (!check_digit (c, radix))
165 break;
167 if (buffer != NULL)
168 *buffer++ = c;
169 length++;
172 gfc_current_locus = old_loc;
174 return length;
178 /* Match an integer (digit string and optional kind).
179 A sign will be accepted if signflag is set. */
181 static match
182 match_integer_constant (gfc_expr ** result, int signflag)
184 int length, kind;
185 locus old_loc;
186 char *buffer;
187 gfc_expr *e;
189 old_loc = gfc_current_locus;
190 gfc_gobble_whitespace ();
192 length = match_digits (signflag, 10, NULL);
193 gfc_current_locus = old_loc;
194 if (length == -1)
195 return MATCH_NO;
197 buffer = alloca (length + 1);
198 memset (buffer, '\0', length + 1);
200 gfc_gobble_whitespace ();
202 match_digits (signflag, 10, buffer);
204 kind = get_kind ();
205 if (kind == -2)
206 kind = gfc_default_integer_kind;
207 if (kind == -1)
208 return MATCH_ERROR;
210 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0)
212 gfc_error ("Integer kind %d at %C not available", kind);
213 return MATCH_ERROR;
216 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
218 if (gfc_range_check (e) != ARITH_OK)
220 gfc_error ("Integer too big for its kind at %C");
222 gfc_free_expr (e);
223 return MATCH_ERROR;
226 *result = e;
227 return MATCH_YES;
231 /* Match a binary, octal or hexadecimal constant that can be found in
232 a DATA statement. */
234 static match
235 match_boz_constant (gfc_expr ** result)
237 int radix, delim, length, x_hex, kind;
238 locus old_loc;
239 char *buffer;
240 gfc_expr *e;
241 const char *rname;
243 old_loc = gfc_current_locus;
244 gfc_gobble_whitespace ();
246 x_hex = 0;
247 switch (gfc_next_char ())
249 case 'b':
250 radix = 2;
251 rname = "binary";
252 break;
253 case 'o':
254 radix = 8;
255 rname = "octal";
256 break;
257 case 'x':
258 x_hex = 1;
259 /* Fall through. */
260 case 'z':
261 radix = 16;
262 rname = "hexadecimal";
263 break;
264 default:
265 goto backup;
268 /* No whitespace allowed here. */
270 delim = gfc_next_char ();
271 if (delim != '\'' && delim != '\"')
272 goto backup;
274 if (x_hex && pedantic
275 && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal "
276 "constant at %C uses non-standard syntax.")
277 == FAILURE))
278 return MATCH_ERROR;
280 old_loc = gfc_current_locus;
282 length = match_digits (0, radix, NULL);
283 if (length == -1)
285 gfc_error ("Empty set of digits in %s constants at %C", rname);
286 return MATCH_ERROR;
289 if (gfc_next_char () != delim)
291 gfc_error ("Illegal character in %s constant at %C.", rname);
292 return MATCH_ERROR;
295 gfc_current_locus = old_loc;
297 buffer = alloca (length + 1);
298 memset (buffer, '\0', length + 1);
300 match_digits (0, radix, buffer);
301 gfc_next_char (); /* Eat delimiter. */
303 kind = get_kind ();
304 if (kind == -1)
305 return MATCH_ERROR;
306 if (kind == -2)
307 kind = gfc_default_integer_kind;
308 else if (pedantic
309 && (gfc_notify_std (GFC_STD_GNU, "Extension: Kind parameter "
310 "suffix to boz literal constant at %C.")
311 == FAILURE))
312 return MATCH_ERROR;
314 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
316 if (gfc_range_check (e) != ARITH_OK)
318 gfc_error ("Integer too big for integer kind %i at %C", kind);
320 gfc_free_expr (e);
321 return MATCH_ERROR;
324 *result = e;
325 return MATCH_YES;
327 backup:
328 gfc_current_locus = old_loc;
329 return MATCH_NO;
333 /* Match a real constant of some sort. Allow a signed constant if signflag
334 is nonzero. Allow integer constants if allow_int is true. */
336 static match
337 match_real_constant (gfc_expr ** result, int signflag)
339 int kind, c, count, seen_dp, seen_digits, exp_char;
340 locus old_loc, temp_loc;
341 char *p, *buffer;
342 gfc_expr *e;
343 bool negate;
345 old_loc = gfc_current_locus;
346 gfc_gobble_whitespace ();
348 e = NULL;
350 count = 0;
351 seen_dp = 0;
352 seen_digits = 0;
353 exp_char = ' ';
354 negate = FALSE;
356 c = gfc_next_char ();
357 if (signflag && (c == '+' || c == '-'))
359 if (c == '-')
360 negate = TRUE;
362 gfc_gobble_whitespace ();
363 c = gfc_next_char ();
366 /* Scan significand. */
367 for (;; c = gfc_next_char (), count++)
369 if (c == '.')
371 if (seen_dp)
372 goto done;
374 /* Check to see if "." goes with a following operator like ".eq.". */
375 temp_loc = gfc_current_locus;
376 c = gfc_next_char ();
378 if (c == 'e' || c == 'd' || c == 'q')
380 c = gfc_next_char ();
381 if (c == '.')
382 goto done; /* Operator named .e. or .d. */
385 if (ISALPHA (c))
386 goto done; /* Distinguish 1.e9 from 1.eq.2 */
388 gfc_current_locus = temp_loc;
389 seen_dp = 1;
390 continue;
393 if (ISDIGIT (c))
395 seen_digits = 1;
396 continue;
399 break;
402 if (!seen_digits
403 || (c != 'e' && c != 'd' && c != 'q'))
404 goto done;
405 exp_char = c;
407 /* Scan exponent. */
408 c = gfc_next_char ();
409 count++;
411 if (c == '+' || c == '-')
412 { /* optional sign */
413 c = gfc_next_char ();
414 count++;
417 if (!ISDIGIT (c))
419 gfc_error ("Missing exponent in real number at %C");
420 return MATCH_ERROR;
423 while (ISDIGIT (c))
425 c = gfc_next_char ();
426 count++;
429 done:
430 /* Check that we have a numeric constant. */
431 if (!seen_digits || (!seen_dp && exp_char == ' '))
433 gfc_current_locus = old_loc;
434 return MATCH_NO;
437 /* Convert the number. */
438 gfc_current_locus = old_loc;
439 gfc_gobble_whitespace ();
441 buffer = alloca (count + 1);
442 memset (buffer, '\0', count + 1);
444 p = buffer;
445 c = gfc_next_char ();
446 if (c == '+' || c == '-')
448 gfc_gobble_whitespace ();
449 c = gfc_next_char ();
452 /* Hack for mpfr_set_str(). */
453 for (;;)
455 if (c == 'd' || c == 'q')
456 *p = 'e';
457 else
458 *p = c;
459 p++;
460 if (--count == 0)
461 break;
463 c = gfc_next_char ();
466 kind = get_kind ();
467 if (kind == -1)
468 goto cleanup;
470 switch (exp_char)
472 case 'd':
473 if (kind != -2)
475 gfc_error
476 ("Real number at %C has a 'd' exponent and an explicit kind");
477 goto cleanup;
479 kind = gfc_default_double_kind;
480 break;
482 case 'q':
483 if (kind != -2)
485 gfc_error
486 ("Real number at %C has a 'q' exponent and an explicit kind");
487 goto cleanup;
489 kind = gfc_option.q_kind;
490 break;
492 default:
493 if (kind == -2)
494 kind = gfc_default_real_kind;
496 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
498 gfc_error ("Invalid real kind %d at %C", kind);
499 goto cleanup;
503 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
504 if (negate)
505 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE);
507 switch (gfc_range_check (e))
509 case ARITH_OK:
510 break;
511 case ARITH_OVERFLOW:
512 gfc_error ("Real constant overflows its kind at %C");
513 goto cleanup;
515 case ARITH_UNDERFLOW:
516 if (gfc_option.warn_underflow)
517 gfc_warning ("Real constant underflows its kind at %C");
518 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
519 break;
521 default:
522 gfc_internal_error ("gfc_range_check() returned bad value");
525 *result = e;
526 return MATCH_YES;
528 cleanup:
529 gfc_free_expr (e);
530 return MATCH_ERROR;
534 /* Match a substring reference. */
536 static match
537 match_substring (gfc_charlen * cl, int init, gfc_ref ** result)
539 gfc_expr *start, *end;
540 locus old_loc;
541 gfc_ref *ref;
542 match m;
544 start = NULL;
545 end = NULL;
547 old_loc = gfc_current_locus;
549 m = gfc_match_char ('(');
550 if (m != MATCH_YES)
551 return MATCH_NO;
553 if (gfc_match_char (':') != MATCH_YES)
555 if (init)
556 m = gfc_match_init_expr (&start);
557 else
558 m = gfc_match_expr (&start);
560 if (m != MATCH_YES)
562 m = MATCH_NO;
563 goto cleanup;
566 m = gfc_match_char (':');
567 if (m != MATCH_YES)
568 goto cleanup;
571 if (gfc_match_char (')') != MATCH_YES)
573 if (init)
574 m = gfc_match_init_expr (&end);
575 else
576 m = gfc_match_expr (&end);
578 if (m == MATCH_NO)
579 goto syntax;
580 if (m == MATCH_ERROR)
581 goto cleanup;
583 m = gfc_match_char (')');
584 if (m == MATCH_NO)
585 goto syntax;
588 /* Optimize away the (:) reference. */
589 if (start == NULL && end == NULL)
590 ref = NULL;
591 else
593 ref = gfc_get_ref ();
595 ref->type = REF_SUBSTRING;
596 if (start == NULL)
597 start = gfc_int_expr (1);
598 ref->u.ss.start = start;
599 if (end == NULL && cl)
600 end = gfc_copy_expr (cl->length);
601 ref->u.ss.end = end;
602 ref->u.ss.length = cl;
605 *result = ref;
606 return MATCH_YES;
608 syntax:
609 gfc_error ("Syntax error in SUBSTRING specification at %C");
610 m = MATCH_ERROR;
612 cleanup:
613 gfc_free_expr (start);
614 gfc_free_expr (end);
616 gfc_current_locus = old_loc;
617 return m;
621 /* Reads the next character of a string constant, taking care to
622 return doubled delimiters on the input as a single instance of
623 the delimiter.
625 Special return values are:
626 -1 End of the string, as determined by the delimiter
627 -2 Unterminated string detected
629 Backslash codes are also expanded at this time. */
631 static int
632 next_string_char (char delimiter)
634 locus old_locus;
635 int c;
637 c = gfc_next_char_literal (1);
639 if (c == '\n')
640 return -2;
642 if (c == '\\')
644 old_locus = gfc_current_locus;
646 switch (gfc_next_char_literal (1))
648 case 'a':
649 c = '\a';
650 break;
651 case 'b':
652 c = '\b';
653 break;
654 case 't':
655 c = '\t';
656 break;
657 case 'f':
658 c = '\f';
659 break;
660 case 'n':
661 c = '\n';
662 break;
663 case 'r':
664 c = '\r';
665 break;
666 case 'v':
667 c = '\v';
668 break;
669 case '\\':
670 c = '\\';
671 break;
673 default:
674 /* Unknown backslash codes are simply not expanded */
675 gfc_current_locus = old_locus;
676 break;
680 if (c != delimiter)
681 return c;
683 old_locus = gfc_current_locus;
684 c = gfc_next_char_literal (1);
686 if (c == delimiter)
687 return c;
688 gfc_current_locus = old_locus;
690 return -1;
694 /* Special case of gfc_match_name() that matches a parameter kind name
695 before a string constant. This takes case of the weird but legal
696 case of: weird case of:
698 kind_____'string'
700 where kind____ is a parameter. gfc_match_name() will happily slurp
701 up all the underscores, which leads to problems. If we return
702 MATCH_YES, the parse pointer points to the final underscore, which
703 is not part of the name. We never return MATCH_ERROR-- errors in
704 the name will be detected later. */
706 static match
707 match_charkind_name (char *name)
709 locus old_loc;
710 char c, peek;
711 int len;
713 gfc_gobble_whitespace ();
714 c = gfc_next_char ();
715 if (!ISALPHA (c))
716 return MATCH_NO;
718 *name++ = c;
719 len = 1;
721 for (;;)
723 old_loc = gfc_current_locus;
724 c = gfc_next_char ();
726 if (c == '_')
728 peek = gfc_peek_char ();
730 if (peek == '\'' || peek == '\"')
732 gfc_current_locus = old_loc;
733 *name = '\0';
734 return MATCH_YES;
738 if (!ISALNUM (c)
739 && c != '_'
740 && (gfc_option.flag_dollar_ok && c != '$'))
741 break;
743 *name++ = c;
744 if (++len > GFC_MAX_SYMBOL_LEN)
745 break;
748 return MATCH_NO;
752 /* See if the current input matches a character constant. Lots of
753 contortions have to be done to match the kind parameter which comes
754 before the actual string. The main consideration is that we don't
755 want to error out too quickly. For example, we don't actually do
756 any validation of the kinds until we have actually seen a legal
757 delimiter. Using match_kind_param() generates errors too quickly. */
759 static match
760 match_string_constant (gfc_expr ** result)
762 char *p, name[GFC_MAX_SYMBOL_LEN + 1];
763 int i, c, kind, length, delimiter;
764 locus old_locus, start_locus;
765 gfc_symbol *sym;
766 gfc_expr *e;
767 const char *q;
768 match m;
770 old_locus = gfc_current_locus;
772 gfc_gobble_whitespace ();
774 start_locus = gfc_current_locus;
776 c = gfc_next_char ();
777 if (c == '\'' || c == '"')
779 kind = gfc_default_character_kind;
780 goto got_delim;
783 if (ISDIGIT (c))
785 kind = 0;
787 while (ISDIGIT (c))
789 kind = kind * 10 + c - '0';
790 if (kind > 9999999)
791 goto no_match;
792 c = gfc_next_char ();
796 else
798 gfc_current_locus = old_locus;
800 m = match_charkind_name (name);
801 if (m != MATCH_YES)
802 goto no_match;
804 if (gfc_find_symbol (name, NULL, 1, &sym)
805 || sym == NULL
806 || sym->attr.flavor != FL_PARAMETER)
807 goto no_match;
809 kind = -1;
810 c = gfc_next_char ();
813 if (c == ' ')
815 gfc_gobble_whitespace ();
816 c = gfc_next_char ();
819 if (c != '_')
820 goto no_match;
822 gfc_gobble_whitespace ();
823 start_locus = gfc_current_locus;
825 c = gfc_next_char ();
826 if (c != '\'' && c != '"')
827 goto no_match;
829 if (kind == -1)
831 q = gfc_extract_int (sym->value, &kind);
832 if (q != NULL)
834 gfc_error (q);
835 return MATCH_ERROR;
839 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
841 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
842 return MATCH_ERROR;
845 got_delim:
846 /* Scan the string into a block of memory by first figuring out how
847 long it is, allocating the structure, then re-reading it. This
848 isn't particularly efficient, but string constants aren't that
849 common in most code. TODO: Use obstacks? */
851 delimiter = c;
852 length = 0;
854 for (;;)
856 c = next_string_char (delimiter);
857 if (c == -1)
858 break;
859 if (c == -2)
861 gfc_current_locus = start_locus;
862 gfc_error ("Unterminated character constant beginning at %C");
863 return MATCH_ERROR;
866 length++;
869 e = gfc_get_expr ();
871 e->expr_type = EXPR_CONSTANT;
872 e->ref = NULL;
873 e->ts.type = BT_CHARACTER;
874 e->ts.kind = kind;
875 e->where = start_locus;
877 e->value.character.string = p = gfc_getmem (length + 1);
878 e->value.character.length = length;
880 gfc_current_locus = start_locus;
881 gfc_next_char (); /* Skip delimiter */
883 for (i = 0; i < length; i++)
884 *p++ = next_string_char (delimiter);
886 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
888 if (next_string_char (delimiter) != -1)
889 gfc_internal_error ("match_string_constant(): Delimiter not found");
891 if (match_substring (NULL, 0, &e->ref) != MATCH_NO)
892 e->expr_type = EXPR_SUBSTRING;
894 *result = e;
896 return MATCH_YES;
898 no_match:
899 gfc_current_locus = old_locus;
900 return MATCH_NO;
904 /* Match a .true. or .false. */
906 static match
907 match_logical_constant (gfc_expr ** result)
909 static mstring logical_ops[] = {
910 minit (".false.", 0),
911 minit (".true.", 1),
912 minit (NULL, -1)
915 gfc_expr *e;
916 int i, kind;
918 i = gfc_match_strings (logical_ops);
919 if (i == -1)
920 return MATCH_NO;
922 kind = get_kind ();
923 if (kind == -1)
924 return MATCH_ERROR;
925 if (kind == -2)
926 kind = gfc_default_logical_kind;
928 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
929 gfc_error ("Bad kind for logical constant at %C");
931 e = gfc_get_expr ();
933 e->expr_type = EXPR_CONSTANT;
934 e->value.logical = i;
935 e->ts.type = BT_LOGICAL;
936 e->ts.kind = kind;
937 e->where = gfc_current_locus;
939 *result = e;
940 return MATCH_YES;
944 /* Match a real or imaginary part of a complex constant that is a
945 symbolic constant. */
947 static match
948 match_sym_complex_part (gfc_expr ** result)
950 char name[GFC_MAX_SYMBOL_LEN + 1];
951 gfc_symbol *sym;
952 gfc_expr *e;
953 match m;
955 m = gfc_match_name (name);
956 if (m != MATCH_YES)
957 return m;
959 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
960 return MATCH_NO;
962 if (sym->attr.flavor != FL_PARAMETER)
964 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
965 return MATCH_ERROR;
968 if (!gfc_numeric_ts (&sym->value->ts))
970 gfc_error ("Numeric PARAMETER required in complex constant at %C");
971 return MATCH_ERROR;
974 if (sym->value->rank != 0)
976 gfc_error ("Scalar PARAMETER required in complex constant at %C");
977 return MATCH_ERROR;
980 switch (sym->value->ts.type)
982 case BT_REAL:
983 e = gfc_copy_expr (sym->value);
984 break;
986 case BT_COMPLEX:
987 e = gfc_complex2real (sym->value, sym->value->ts.kind);
988 if (e == NULL)
989 goto error;
990 break;
992 case BT_INTEGER:
993 e = gfc_int2real (sym->value, gfc_default_real_kind);
994 if (e == NULL)
995 goto error;
996 break;
998 default:
999 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1002 *result = e; /* e is a scalar, real, constant expression */
1003 return MATCH_YES;
1005 error:
1006 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1007 return MATCH_ERROR;
1011 /* Match a real or imaginary part of a complex number. */
1013 static match
1014 match_complex_part (gfc_expr ** result)
1016 match m;
1018 m = match_sym_complex_part (result);
1019 if (m != MATCH_NO)
1020 return m;
1022 m = match_real_constant (result, 1);
1023 if (m != MATCH_NO)
1024 return m;
1026 return match_integer_constant (result, 1);
1030 /* Try to match a complex constant. */
1032 static match
1033 match_complex_constant (gfc_expr ** result)
1035 gfc_expr *e, *real, *imag;
1036 gfc_error_buf old_error;
1037 gfc_typespec target;
1038 locus old_loc;
1039 int kind;
1040 match m;
1042 old_loc = gfc_current_locus;
1043 real = imag = e = NULL;
1045 m = gfc_match_char ('(');
1046 if (m != MATCH_YES)
1047 return m;
1049 gfc_push_error (&old_error);
1051 m = match_complex_part (&real);
1052 if (m == MATCH_NO)
1053 goto cleanup;
1055 if (gfc_match_char (',') == MATCH_NO)
1057 gfc_pop_error (&old_error);
1058 m = MATCH_NO;
1059 goto cleanup;
1062 /* If m is error, then something was wrong with the real part and we
1063 assume we have a complex constant because we've seen the ','. An
1064 ambiguous case here is the start of an iterator list of some
1065 sort. These sort of lists are matched prior to coming here. */
1067 if (m == MATCH_ERROR)
1068 goto cleanup;
1069 gfc_pop_error (&old_error);
1071 m = match_complex_part (&imag);
1072 if (m == MATCH_NO)
1073 goto syntax;
1074 if (m == MATCH_ERROR)
1075 goto cleanup;
1077 m = gfc_match_char (')');
1078 if (m == MATCH_NO)
1079 goto syntax;
1081 if (m == MATCH_ERROR)
1082 goto cleanup;
1084 /* Decide on the kind of this complex number. */
1085 if (real->ts.type == BT_REAL)
1087 if (imag->ts.type == BT_REAL)
1088 kind = gfc_kind_max (real, imag);
1089 else
1090 kind = real->ts.kind;
1092 else
1094 if (imag->ts.type == BT_REAL)
1095 kind = imag->ts.kind;
1096 else
1097 kind = gfc_default_real_kind;
1099 target.type = BT_REAL;
1100 target.kind = kind;
1102 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1103 gfc_convert_type (real, &target, 2);
1104 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1105 gfc_convert_type (imag, &target, 2);
1107 e = gfc_convert_complex (real, imag, kind);
1108 e->where = gfc_current_locus;
1110 gfc_free_expr (real);
1111 gfc_free_expr (imag);
1113 *result = e;
1114 return MATCH_YES;
1116 syntax:
1117 gfc_error ("Syntax error in COMPLEX constant at %C");
1118 m = MATCH_ERROR;
1120 cleanup:
1121 gfc_free_expr (e);
1122 gfc_free_expr (real);
1123 gfc_free_expr (imag);
1124 gfc_current_locus = old_loc;
1126 return m;
1130 /* Match constants in any of several forms. Returns nonzero for a
1131 match, zero for no match. */
1133 match
1134 gfc_match_literal_constant (gfc_expr ** result, int signflag)
1136 match m;
1138 m = match_complex_constant (result);
1139 if (m != MATCH_NO)
1140 return m;
1142 m = match_string_constant (result);
1143 if (m != MATCH_NO)
1144 return m;
1146 m = match_boz_constant (result);
1147 if (m != MATCH_NO)
1148 return m;
1150 m = match_real_constant (result, signflag);
1151 if (m != MATCH_NO)
1152 return m;
1154 m = match_integer_constant (result, signflag);
1155 if (m != MATCH_NO)
1156 return m;
1158 m = match_logical_constant (result);
1159 if (m != MATCH_NO)
1160 return m;
1162 return MATCH_NO;
1166 /* Match a single actual argument value. An actual argument is
1167 usually an expression, but can also be a procedure name. If the
1168 argument is a single name, it is not always possible to tell
1169 whether the name is a dummy procedure or not. We treat these cases
1170 by creating an argument that looks like a dummy procedure and
1171 fixing things later during resolution. */
1173 static match
1174 match_actual_arg (gfc_expr ** result)
1176 char name[GFC_MAX_SYMBOL_LEN + 1];
1177 gfc_symtree *symtree;
1178 locus where, w;
1179 gfc_expr *e;
1180 int c;
1182 where = gfc_current_locus;
1184 switch (gfc_match_name (name))
1186 case MATCH_ERROR:
1187 return MATCH_ERROR;
1189 case MATCH_NO:
1190 break;
1192 case MATCH_YES:
1193 w = gfc_current_locus;
1194 gfc_gobble_whitespace ();
1195 c = gfc_next_char ();
1196 gfc_current_locus = w;
1198 if (c != ',' && c != ')')
1199 break;
1201 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1202 break;
1203 /* Handle error elsewhere. */
1205 /* Eliminate a couple of common cases where we know we don't
1206 have a function argument. */
1207 if (symtree == NULL)
1209 gfc_get_sym_tree (name, NULL, &symtree);
1210 gfc_set_sym_referenced (symtree->n.sym);
1212 else
1214 gfc_symbol *sym;
1216 sym = symtree->n.sym;
1217 gfc_set_sym_referenced (sym);
1218 if (sym->attr.flavor != FL_PROCEDURE
1219 && sym->attr.flavor != FL_UNKNOWN)
1220 break;
1222 /* If the symbol is a function with itself as the result and
1223 is being defined, then we have a variable. */
1224 if (sym->result == sym
1225 && (gfc_current_ns->proc_name == sym
1226 || (gfc_current_ns->parent != NULL
1227 && gfc_current_ns->parent->proc_name == sym)))
1228 break;
1231 e = gfc_get_expr (); /* Leave it unknown for now */
1232 e->symtree = symtree;
1233 e->expr_type = EXPR_VARIABLE;
1234 e->ts.type = BT_PROCEDURE;
1235 e->where = where;
1237 *result = e;
1238 return MATCH_YES;
1241 gfc_current_locus = where;
1242 return gfc_match_expr (result);
1246 /* Match a keyword argument. */
1248 static match
1249 match_keyword_arg (gfc_actual_arglist * actual, gfc_actual_arglist * base)
1251 char name[GFC_MAX_SYMBOL_LEN + 1];
1252 gfc_actual_arglist *a;
1253 locus name_locus;
1254 match m;
1256 name_locus = gfc_current_locus;
1257 m = gfc_match_name (name);
1259 if (m != MATCH_YES)
1260 goto cleanup;
1261 if (gfc_match_char ('=') != MATCH_YES)
1263 m = MATCH_NO;
1264 goto cleanup;
1267 m = match_actual_arg (&actual->expr);
1268 if (m != MATCH_YES)
1269 goto cleanup;
1271 /* Make sure this name has not appeared yet. */
1273 if (name[0] != '\0')
1275 for (a = base; a; a = a->next)
1276 if (a->name != NULL && strcmp (a->name, name) == 0)
1278 gfc_error
1279 ("Keyword '%s' at %C has already appeared in the current "
1280 "argument list", name);
1281 return MATCH_ERROR;
1285 actual->name = gfc_get_string (name);
1286 return MATCH_YES;
1288 cleanup:
1289 gfc_current_locus = name_locus;
1290 return m;
1294 /* Matches an actual argument list of a function or subroutine, from
1295 the opening parenthesis to the closing parenthesis. The argument
1296 list is assumed to allow keyword arguments because we don't know if
1297 the symbol associated with the procedure has an implicit interface
1298 or not. We make sure keywords are unique. If SUB_FLAG is set,
1299 we're matching the argument list of a subroutine. */
1301 match
1302 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist ** argp)
1304 gfc_actual_arglist *head, *tail;
1305 int seen_keyword;
1306 gfc_st_label *label;
1307 locus old_loc;
1308 match m;
1310 *argp = tail = NULL;
1311 old_loc = gfc_current_locus;
1313 seen_keyword = 0;
1315 if (gfc_match_char ('(') == MATCH_NO)
1316 return (sub_flag) ? MATCH_YES : MATCH_NO;
1318 if (gfc_match_char (')') == MATCH_YES)
1319 return MATCH_YES;
1320 head = NULL;
1322 for (;;)
1324 if (head == NULL)
1325 head = tail = gfc_get_actual_arglist ();
1326 else
1328 tail->next = gfc_get_actual_arglist ();
1329 tail = tail->next;
1332 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1334 m = gfc_match_st_label (&label, 0);
1335 if (m == MATCH_NO)
1336 gfc_error ("Expected alternate return label at %C");
1337 if (m != MATCH_YES)
1338 goto cleanup;
1340 tail->label = label;
1341 goto next;
1344 /* After the first keyword argument is seen, the following
1345 arguments must also have keywords. */
1346 if (seen_keyword)
1348 m = match_keyword_arg (tail, head);
1350 if (m == MATCH_ERROR)
1351 goto cleanup;
1352 if (m == MATCH_NO)
1354 gfc_error
1355 ("Missing keyword name in actual argument list at %C");
1356 goto cleanup;
1360 else
1362 /* See if we have the first keyword argument. */
1363 m = match_keyword_arg (tail, head);
1364 if (m == MATCH_YES)
1365 seen_keyword = 1;
1366 if (m == MATCH_ERROR)
1367 goto cleanup;
1369 if (m == MATCH_NO)
1371 /* Try for a non-keyword argument. */
1372 m = match_actual_arg (&tail->expr);
1373 if (m == MATCH_ERROR)
1374 goto cleanup;
1375 if (m == MATCH_NO)
1376 goto syntax;
1380 next:
1381 if (gfc_match_char (')') == MATCH_YES)
1382 break;
1383 if (gfc_match_char (',') != MATCH_YES)
1384 goto syntax;
1387 *argp = head;
1388 return MATCH_YES;
1390 syntax:
1391 gfc_error ("Syntax error in argument list at %C");
1393 cleanup:
1394 gfc_free_actual_arglist (head);
1395 gfc_current_locus = old_loc;
1397 return MATCH_ERROR;
1401 /* Used by match_varspec() to extend the reference list by one
1402 element. */
1404 static gfc_ref *
1405 extend_ref (gfc_expr * primary, gfc_ref * tail)
1408 if (primary->ref == NULL)
1409 primary->ref = tail = gfc_get_ref ();
1410 else
1412 if (tail == NULL)
1413 gfc_internal_error ("extend_ref(): Bad tail");
1414 tail->next = gfc_get_ref ();
1415 tail = tail->next;
1418 return tail;
1422 /* Match any additional specifications associated with the current
1423 variable like member references or substrings. If equiv_flag is
1424 set we only match stuff that is allowed inside an EQUIVALENCE
1425 statement. */
1427 static match
1428 match_varspec (gfc_expr * primary, int equiv_flag)
1430 char name[GFC_MAX_SYMBOL_LEN + 1];
1431 gfc_ref *substring, *tail;
1432 gfc_component *component;
1433 gfc_symbol *sym;
1434 match m;
1436 tail = NULL;
1438 if (primary->symtree->n.sym->attr.dimension
1439 || (equiv_flag
1440 && gfc_peek_char () == '('))
1443 tail = extend_ref (primary, tail);
1444 tail->type = REF_ARRAY;
1446 m = gfc_match_array_ref (&tail->u.ar, primary->symtree->n.sym->as,
1447 equiv_flag);
1448 if (m != MATCH_YES)
1449 return m;
1452 sym = primary->symtree->n.sym;
1453 primary->ts = sym->ts;
1455 if (sym->ts.type != BT_DERIVED || gfc_match_char ('%') != MATCH_YES)
1456 goto check_substring;
1458 sym = sym->ts.derived;
1460 for (;;)
1462 m = gfc_match_name (name);
1463 if (m == MATCH_NO)
1464 gfc_error ("Expected structure component name at %C");
1465 if (m != MATCH_YES)
1466 return MATCH_ERROR;
1468 component = gfc_find_component (sym, name);
1469 if (component == NULL)
1470 return MATCH_ERROR;
1472 tail = extend_ref (primary, tail);
1473 tail->type = REF_COMPONENT;
1475 tail->u.c.component = component;
1476 tail->u.c.sym = sym;
1478 primary->ts = component->ts;
1480 if (component->as != NULL)
1482 tail = extend_ref (primary, tail);
1483 tail->type = REF_ARRAY;
1485 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag);
1486 if (m != MATCH_YES)
1487 return m;
1490 if (component->ts.type != BT_DERIVED
1491 || gfc_match_char ('%') != MATCH_YES)
1492 break;
1494 sym = component->ts.derived;
1497 check_substring:
1498 if (primary->ts.type == BT_CHARACTER)
1500 switch (match_substring (primary->ts.cl, equiv_flag, &substring))
1502 case MATCH_YES:
1503 if (tail == NULL)
1504 primary->ref = substring;
1505 else
1506 tail->next = substring;
1508 if (primary->expr_type == EXPR_CONSTANT)
1509 primary->expr_type = EXPR_SUBSTRING;
1511 break;
1513 case MATCH_NO:
1514 break;
1516 case MATCH_ERROR:
1517 return MATCH_ERROR;
1521 return MATCH_YES;
1525 /* Given an expression that is a variable, figure out what the
1526 ultimate variable's type and attribute is, traversing the reference
1527 structures if necessary.
1529 This subroutine is trickier than it looks. We start at the base
1530 symbol and store the attribute. Component references load a
1531 completely new attribute.
1533 A couple of rules come into play. Subobjects of targets are always
1534 targets themselves. If we see a component that goes through a
1535 pointer, then the expression must also be a target, since the
1536 pointer is associated with something (if it isn't core will soon be
1537 dumped). If we see a full part or section of an array, the
1538 expression is also an array.
1540 We can have at most one full array reference. */
1542 symbol_attribute
1543 gfc_variable_attr (gfc_expr * expr, gfc_typespec * ts)
1545 int dimension, pointer, target;
1546 symbol_attribute attr;
1547 gfc_ref *ref;
1549 if (expr->expr_type != EXPR_VARIABLE)
1550 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
1552 ref = expr->ref;
1553 attr = expr->symtree->n.sym->attr;
1555 dimension = attr.dimension;
1556 pointer = attr.pointer;
1558 target = attr.target;
1559 if (pointer)
1560 target = 1;
1562 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
1563 *ts = expr->symtree->n.sym->ts;
1565 for (; ref; ref = ref->next)
1566 switch (ref->type)
1568 case REF_ARRAY:
1570 switch (ref->u.ar.type)
1572 case AR_FULL:
1573 dimension = 1;
1574 break;
1576 case AR_SECTION:
1577 pointer = 0;
1578 dimension = 1;
1579 break;
1581 case AR_ELEMENT:
1582 pointer = 0;
1583 break;
1585 case AR_UNKNOWN:
1586 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
1589 break;
1591 case REF_COMPONENT:
1592 gfc_get_component_attr (&attr, ref->u.c.component);
1593 if (ts != NULL)
1594 *ts = ref->u.c.component->ts;
1596 pointer = ref->u.c.component->pointer;
1597 if (pointer)
1598 target = 1;
1600 break;
1602 case REF_SUBSTRING:
1603 pointer = 0;
1604 break;
1607 attr.dimension = dimension;
1608 attr.pointer = pointer;
1609 attr.target = target;
1611 return attr;
1615 /* Return the attribute from a general expression. */
1617 symbol_attribute
1618 gfc_expr_attr (gfc_expr * e)
1620 symbol_attribute attr;
1622 switch (e->expr_type)
1624 case EXPR_VARIABLE:
1625 attr = gfc_variable_attr (e, NULL);
1626 break;
1628 case EXPR_FUNCTION:
1629 gfc_clear_attr (&attr);
1631 if (e->value.function.esym != NULL)
1632 attr = e->value.function.esym->result->attr;
1634 /* TODO: NULL() returns pointers. May have to take care of this
1635 here. */
1637 break;
1639 default:
1640 gfc_clear_attr (&attr);
1641 break;
1644 return attr;
1648 /* Match a structure constructor. The initial symbol has already been
1649 seen. */
1651 match
1652 gfc_match_structure_constructor (gfc_symbol * sym, gfc_expr ** result)
1654 gfc_constructor *head, *tail;
1655 gfc_component *comp;
1656 gfc_expr *e;
1657 locus where;
1658 match m;
1660 head = tail = NULL;
1662 if (gfc_match_char ('(') != MATCH_YES)
1663 goto syntax;
1665 where = gfc_current_locus;
1667 gfc_find_component (sym, NULL);
1669 for (comp = sym->components; comp; comp = comp->next)
1671 if (head == NULL)
1672 tail = head = gfc_get_constructor ();
1673 else
1675 tail->next = gfc_get_constructor ();
1676 tail = tail->next;
1679 m = gfc_match_expr (&tail->expr);
1680 if (m == MATCH_NO)
1681 goto syntax;
1682 if (m == MATCH_ERROR)
1683 goto cleanup;
1685 if (gfc_match_char (',') == MATCH_YES)
1687 if (comp->next == NULL)
1689 gfc_error
1690 ("Too many components in structure constructor at %C");
1691 goto cleanup;
1694 continue;
1697 break;
1700 if (gfc_match_char (')') != MATCH_YES)
1701 goto syntax;
1703 if (comp->next != NULL)
1705 gfc_error ("Too few components in structure constructor at %C");
1706 goto cleanup;
1709 e = gfc_get_expr ();
1711 e->expr_type = EXPR_STRUCTURE;
1713 e->ts.type = BT_DERIVED;
1714 e->ts.derived = sym;
1715 e->where = where;
1717 e->value.constructor = head;
1719 *result = e;
1720 return MATCH_YES;
1722 syntax:
1723 gfc_error ("Syntax error in structure constructor at %C");
1725 cleanup:
1726 gfc_free_constructor (head);
1727 return MATCH_ERROR;
1731 /* Matches a variable name followed by anything that might follow it--
1732 array reference, argument list of a function, etc. */
1734 match
1735 gfc_match_rvalue (gfc_expr ** result)
1737 gfc_actual_arglist *actual_arglist;
1738 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
1739 gfc_state_data *st;
1740 gfc_symbol *sym;
1741 gfc_symtree *symtree;
1742 locus where, old_loc;
1743 gfc_expr *e;
1744 match m, m2;
1745 int i;
1747 m = gfc_match_name (name);
1748 if (m != MATCH_YES)
1749 return m;
1751 if (gfc_find_state (COMP_INTERFACE) == SUCCESS)
1752 i = gfc_get_sym_tree (name, NULL, &symtree);
1753 else
1754 i = gfc_get_ha_sym_tree (name, &symtree);
1756 if (i)
1757 return MATCH_ERROR;
1759 sym = symtree->n.sym;
1760 e = NULL;
1761 where = gfc_current_locus;
1763 gfc_set_sym_referenced (sym);
1765 if (sym->attr.function && sym->result == sym
1766 && (gfc_current_ns->proc_name == sym
1767 || (gfc_current_ns->parent != NULL
1768 && gfc_current_ns->parent->proc_name == sym)))
1769 goto variable;
1771 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
1772 goto function0;
1774 if (sym->attr.generic)
1775 goto generic_function;
1777 switch (sym->attr.flavor)
1779 case FL_VARIABLE:
1780 variable:
1781 if (sym->ts.type == BT_UNKNOWN && gfc_peek_char () == '%'
1782 && gfc_get_default_type (sym, sym->ns)->type == BT_DERIVED)
1783 gfc_set_default_type (sym, 0, sym->ns);
1785 e = gfc_get_expr ();
1787 e->expr_type = EXPR_VARIABLE;
1788 e->symtree = symtree;
1790 m = match_varspec (e, 0);
1791 break;
1793 case FL_PARAMETER:
1794 if (sym->value
1795 && sym->value->expr_type != EXPR_ARRAY)
1796 e = gfc_copy_expr (sym->value);
1797 else
1799 e = gfc_get_expr ();
1800 e->expr_type = EXPR_VARIABLE;
1803 e->symtree = symtree;
1804 m = match_varspec (e, 0);
1805 break;
1807 case FL_DERIVED:
1808 sym = gfc_use_derived (sym);
1809 if (sym == NULL)
1810 m = MATCH_ERROR;
1811 else
1812 m = gfc_match_structure_constructor (sym, &e);
1813 break;
1815 /* If we're here, then the name is known to be the name of a
1816 procedure, yet it is not sure to be the name of a function. */
1817 case FL_PROCEDURE:
1818 if (sym->attr.subroutine)
1820 gfc_error ("Unexpected use of subroutine name '%s' at %C",
1821 sym->name);
1822 m = MATCH_ERROR;
1823 break;
1826 /* At this point, the name has to be a non-statement function.
1827 If the name is the same as the current function being
1828 compiled, then we have a variable reference (to the function
1829 result) if the name is non-recursive. */
1831 st = gfc_enclosing_unit (NULL);
1833 if (st != NULL && st->state == COMP_FUNCTION
1834 && st->sym == sym
1835 && !sym->attr.recursive)
1837 e = gfc_get_expr ();
1838 e->symtree = symtree;
1839 e->expr_type = EXPR_VARIABLE;
1841 m = match_varspec (e, 0);
1842 break;
1845 /* Match a function reference. */
1846 function0:
1847 m = gfc_match_actual_arglist (0, &actual_arglist);
1848 if (m == MATCH_NO)
1850 if (sym->attr.proc == PROC_ST_FUNCTION)
1851 gfc_error ("Statement function '%s' requires argument list at %C",
1852 sym->name);
1853 else
1854 gfc_error ("Function '%s' requires an argument list at %C",
1855 sym->name);
1857 m = MATCH_ERROR;
1858 break;
1861 if (m != MATCH_YES)
1863 m = MATCH_ERROR;
1864 break;
1867 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
1868 sym = symtree->n.sym;
1870 e = gfc_get_expr ();
1871 e->symtree = symtree;
1872 e->expr_type = EXPR_FUNCTION;
1873 e->value.function.actual = actual_arglist;
1874 e->where = gfc_current_locus;
1876 if (sym->as != NULL)
1877 e->rank = sym->as->rank;
1879 if (!sym->attr.function
1880 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
1882 m = MATCH_ERROR;
1883 break;
1886 if (sym->result == NULL)
1887 sym->result = sym;
1889 m = MATCH_YES;
1890 break;
1892 case FL_UNKNOWN:
1894 /* Special case for derived type variables that get their types
1895 via an IMPLICIT statement. This can't wait for the
1896 resolution phase. */
1898 if (gfc_peek_char () == '%'
1899 && sym->ts.type == BT_UNKNOWN
1900 && gfc_get_default_type (sym, sym->ns)->type == BT_DERIVED)
1901 gfc_set_default_type (sym, 0, sym->ns);
1903 /* If the symbol has a dimension attribute, the expression is a
1904 variable. */
1906 if (sym->attr.dimension)
1908 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
1909 sym->name, NULL) == FAILURE)
1911 m = MATCH_ERROR;
1912 break;
1915 e = gfc_get_expr ();
1916 e->symtree = symtree;
1917 e->expr_type = EXPR_VARIABLE;
1918 m = match_varspec (e, 0);
1919 break;
1922 /* Name is not an array, so we peek to see if a '(' implies a
1923 function call or a substring reference. Otherwise the
1924 variable is just a scalar. */
1926 gfc_gobble_whitespace ();
1927 if (gfc_peek_char () != '(')
1929 /* Assume a scalar variable */
1930 e = gfc_get_expr ();
1931 e->symtree = symtree;
1932 e->expr_type = EXPR_VARIABLE;
1934 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
1935 sym->name, NULL) == FAILURE)
1937 m = MATCH_ERROR;
1938 break;
1941 e->ts = sym->ts;
1942 m = match_varspec (e, 0);
1943 break;
1946 /* See if this is a function reference with a keyword argument
1947 as first argument. We do this because otherwise a spurious
1948 symbol would end up in the symbol table. */
1950 old_loc = gfc_current_locus;
1951 m2 = gfc_match (" ( %n =", argname);
1952 gfc_current_locus = old_loc;
1954 e = gfc_get_expr ();
1955 e->symtree = symtree;
1957 if (m2 != MATCH_YES)
1959 /* See if this could possibly be a substring reference of a name
1960 that we're not sure is a variable yet. */
1962 if ((sym->ts.type == BT_UNKNOWN || sym->ts.type == BT_CHARACTER)
1963 && match_substring (sym->ts.cl, 0, &e->ref) == MATCH_YES)
1966 e->expr_type = EXPR_VARIABLE;
1968 if (sym->attr.flavor != FL_VARIABLE
1969 && gfc_add_flavor (&sym->attr, FL_VARIABLE,
1970 sym->name, NULL) == FAILURE)
1972 m = MATCH_ERROR;
1973 break;
1976 if (sym->ts.type == BT_UNKNOWN
1977 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
1979 m = MATCH_ERROR;
1980 break;
1983 e->ts = sym->ts;
1984 m = MATCH_YES;
1985 break;
1989 /* Give up, assume we have a function. */
1991 gfc_get_sym_tree (name, NULL, &symtree); /* Can't fail */
1992 sym = symtree->n.sym;
1993 e->expr_type = EXPR_FUNCTION;
1995 if (!sym->attr.function
1996 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
1998 m = MATCH_ERROR;
1999 break;
2002 sym->result = sym;
2004 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2005 if (m == MATCH_NO)
2006 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
2008 if (m != MATCH_YES)
2010 m = MATCH_ERROR;
2011 break;
2014 /* If our new function returns a character, array or structure
2015 type, it might have subsequent references. */
2017 m = match_varspec (e, 0);
2018 if (m == MATCH_NO)
2019 m = MATCH_YES;
2021 break;
2023 generic_function:
2024 gfc_get_sym_tree (name, NULL, &symtree); /* Can't fail */
2026 e = gfc_get_expr ();
2027 e->symtree = symtree;
2028 e->expr_type = EXPR_FUNCTION;
2030 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2031 break;
2033 default:
2034 gfc_error ("Symbol at %C is not appropriate for an expression");
2035 return MATCH_ERROR;
2038 if (m == MATCH_YES)
2040 e->where = where;
2041 *result = e;
2043 else
2044 gfc_free_expr (e);
2046 return m;
2050 /* Match a variable, ie something that can be assigned to. This
2051 starts as a symbol, can be a structure component or an array
2052 reference. It can be a function if the function doesn't have a
2053 separate RESULT variable. If the symbol has not been previously
2054 seen, we assume it is a variable. */
2056 match
2057 gfc_match_variable (gfc_expr ** result, int equiv_flag)
2059 gfc_symbol *sym;
2060 gfc_symtree *st;
2061 gfc_expr *expr;
2062 locus where;
2063 match m;
2065 m = gfc_match_sym_tree (&st, 1);
2066 if (m != MATCH_YES)
2067 return m;
2068 where = gfc_current_locus;
2070 sym = st->n.sym;
2071 gfc_set_sym_referenced (sym);
2072 switch (sym->attr.flavor)
2074 case FL_VARIABLE:
2075 break;
2077 case FL_UNKNOWN:
2078 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2079 sym->name, NULL) == FAILURE)
2080 return MATCH_ERROR;
2081 break;
2083 case FL_PROCEDURE:
2084 /* Check for a nonrecursive function result */
2085 if (sym->attr.function && (sym->result == sym || sym->attr.entry))
2087 /* If a function result is a derived type, then the derived
2088 type may still have to be resolved. */
2090 if (sym->ts.type == BT_DERIVED
2091 && gfc_use_derived (sym->ts.derived) == NULL)
2092 return MATCH_ERROR;
2093 break;
2096 /* Fall through to error */
2098 default:
2099 gfc_error ("Expected VARIABLE at %C");
2100 return MATCH_ERROR;
2103 /* Special case for derived type variables that get their types
2104 via an IMPLICIT statement. This can't wait for the
2105 resolution phase. */
2108 gfc_namespace * implicit_ns;
2110 if (gfc_current_ns->proc_name == sym)
2111 implicit_ns = gfc_current_ns;
2112 else
2113 implicit_ns = sym->ns;
2115 if (gfc_peek_char () == '%'
2116 && sym->ts.type == BT_UNKNOWN
2117 && gfc_get_default_type (sym, implicit_ns)->type == BT_DERIVED)
2118 gfc_set_default_type (sym, 0, implicit_ns);
2121 expr = gfc_get_expr ();
2123 expr->expr_type = EXPR_VARIABLE;
2124 expr->symtree = st;
2125 expr->ts = sym->ts;
2126 expr->where = where;
2128 /* Now see if we have to do more. */
2129 m = match_varspec (expr, equiv_flag);
2130 if (m != MATCH_YES)
2132 gfc_free_expr (expr);
2133 return m;
2136 *result = expr;
2137 return MATCH_YES;