svn merge -r108665:108708 svn+ssh://gcc.gnu.org/svn/gcc/trunk
[official-gcc.git] / gcc / fortran / primary.c
blobb60e0c1283406fcc84ab683ab07942c880f0f316
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, 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, 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;
43 int cnt;
45 /* cnt is unused, here. */
46 m = gfc_match_small_literal_int (kind, &cnt);
47 if (m != MATCH_NO)
48 return m;
50 m = gfc_match_name (name);
51 if (m != MATCH_YES)
52 return m;
54 if (gfc_find_symbol (name, NULL, 1, &sym))
55 return MATCH_ERROR;
57 if (sym == NULL)
58 return MATCH_NO;
60 if (sym->attr.flavor != FL_PARAMETER)
61 return MATCH_NO;
63 p = gfc_extract_int (sym->value, kind);
64 if (p != NULL)
65 return MATCH_NO;
67 if (*kind < 0)
68 return MATCH_NO;
70 return MATCH_YES;
74 /* Get a trailing kind-specification for non-character variables.
75 Returns:
76 the integer kind value or:
77 -1 if an error was generated
78 -2 if no kind was found */
80 static int
81 get_kind (void)
83 int kind;
84 match m;
86 if (gfc_match_char ('_') != MATCH_YES)
87 return -2;
89 m = match_kind_param (&kind);
90 if (m == MATCH_NO)
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. */
100 static int
101 check_digit (int c, int radix)
103 int r;
105 switch (radix)
107 case 2:
108 r = ('0' <= c && c <= '1');
109 break;
111 case 8:
112 r = ('0' <= c && c <= '7');
113 break;
115 case 10:
116 r = ('0' <= c && c <= '9');
117 break;
119 case 16:
120 r = ISXDIGIT (c);
121 break;
123 default:
124 gfc_internal_error ("check_digit(): bad radix");
127 return r;
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. */
136 static int
137 match_digits (int signflag, int radix, char *buffer)
139 locus old_loc;
140 int length, c;
142 length = 0;
143 c = gfc_next_char ();
145 if (signflag && (c == '+' || c == '-'))
147 if (buffer != NULL)
148 *buffer++ = c;
149 gfc_gobble_whitespace ();
150 c = gfc_next_char ();
151 length++;
154 if (!check_digit (c, radix))
155 return -1;
157 length++;
158 if (buffer != NULL)
159 *buffer++ = c;
161 for (;;)
163 old_loc = gfc_current_locus;
164 c = gfc_next_char ();
166 if (!check_digit (c, radix))
167 break;
169 if (buffer != NULL)
170 *buffer++ = c;
171 length++;
174 gfc_current_locus = old_loc;
176 return length;
180 /* Match an integer (digit string and optional kind).
181 A sign will be accepted if signflag is set. */
183 static match
184 match_integer_constant (gfc_expr ** result, int signflag)
186 int length, kind;
187 locus old_loc;
188 char *buffer;
189 gfc_expr *e;
191 old_loc = gfc_current_locus;
192 gfc_gobble_whitespace ();
194 length = match_digits (signflag, 10, NULL);
195 gfc_current_locus = old_loc;
196 if (length == -1)
197 return MATCH_NO;
199 buffer = alloca (length + 1);
200 memset (buffer, '\0', length + 1);
202 gfc_gobble_whitespace ();
204 match_digits (signflag, 10, buffer);
206 kind = get_kind ();
207 if (kind == -2)
208 kind = gfc_default_integer_kind;
209 if (kind == -1)
210 return MATCH_ERROR;
212 if (gfc_validate_kind (BT_INTEGER, kind, true) < 0)
214 gfc_error ("Integer kind %d at %C not available", kind);
215 return MATCH_ERROR;
218 e = gfc_convert_integer (buffer, kind, 10, &gfc_current_locus);
220 if (gfc_range_check (e) != ARITH_OK)
222 gfc_error ("Integer too big for its kind at %C");
224 gfc_free_expr (e);
225 return MATCH_ERROR;
228 *result = e;
229 return MATCH_YES;
233 /* Match a Hollerith constant. */
235 static match
236 match_hollerith_constant (gfc_expr ** result)
238 locus old_loc;
239 gfc_expr * e = NULL;
240 const char * msg;
241 char * buffer;
242 int num;
243 int i;
245 old_loc = gfc_current_locus;
246 gfc_gobble_whitespace ();
248 if (match_integer_constant (&e, 0) == MATCH_YES
249 && gfc_match_char ('h') == MATCH_YES)
251 if (gfc_notify_std (GFC_STD_LEGACY,
252 "Extension: Hollerith constant at %C")
253 == FAILURE)
254 goto cleanup;
256 msg = gfc_extract_int (e, &num);
257 if (msg != NULL)
259 gfc_error (msg);
260 goto cleanup;
262 if (num == 0)
264 gfc_error ("Invalid Hollerith constant: %L must contain at least one "
265 "character", &old_loc);
266 goto cleanup;
268 if (e->ts.kind != gfc_default_integer_kind)
270 gfc_error ("Invalid Hollerith constant: Interger kind at %L "
271 "should be default", &old_loc);
272 goto cleanup;
274 else
276 buffer = (char *) gfc_getmem (sizeof(char) * num + 1);
277 for (i = 0; i < num; i++)
279 buffer[i] = gfc_next_char_literal (1);
281 gfc_free_expr (e);
282 e = gfc_constant_result (BT_HOLLERITH,
283 gfc_default_character_kind, &gfc_current_locus);
284 e->value.character.string = gfc_getmem (num+1);
285 memcpy (e->value.character.string, buffer, num);
286 e->value.character.length = num;
287 *result = e;
288 return MATCH_YES;
292 gfc_free_expr (e);
293 gfc_current_locus = old_loc;
294 return MATCH_NO;
296 cleanup:
297 gfc_free_expr (e);
298 return MATCH_ERROR;
302 /* Match a binary, octal or hexadecimal constant that can be found in
303 a DATA statement. The standard permits b'010...', o'73...', and
304 z'a1...' where b, o, and z can be capital letters. This function
305 also accepts postfixed forms of the constants: '01...'b, '73...'o,
306 and 'a1...'z. An additional extension is the use of x for z. */
308 static match
309 match_boz_constant (gfc_expr ** result)
311 int post, radix, delim, length, x_hex, kind;
312 locus old_loc, start_loc;
313 char *buffer;
314 gfc_expr *e;
316 start_loc = old_loc = gfc_current_locus;
317 gfc_gobble_whitespace ();
319 x_hex = 0;
320 switch (post = gfc_next_char ())
322 case 'b':
323 radix = 2;
324 post = 0;
325 break;
326 case 'o':
327 radix = 8;
328 post = 0;
329 break;
330 case 'x':
331 x_hex = 1;
332 /* Fall through. */
333 case 'z':
334 radix = 16;
335 post = 0;
336 break;
337 case '\'':
338 /* Fall through. */
339 case '\"':
340 delim = post;
341 post = 1;
342 radix = 16; /* Set to accept any valid digit string. */
343 break;
344 default:
345 goto backup;
348 /* No whitespace allowed here. */
350 if (post == 0)
351 delim = gfc_next_char ();
353 if (delim != '\'' && delim != '\"')
354 goto backup;
356 if (x_hex && pedantic
357 && (gfc_notify_std (GFC_STD_GNU, "Extension: Hexadecimal "
358 "constant at %C uses non-standard syntax.")
359 == FAILURE))
360 return MATCH_ERROR;
362 old_loc = gfc_current_locus;
364 length = match_digits (0, radix, NULL);
365 if (length == -1)
367 gfc_error ("Empty set of digits in BOZ constant at %C");
368 return MATCH_ERROR;
371 if (gfc_next_char () != delim)
373 gfc_error ("Illegal character in BOZ constant at %C");
374 return MATCH_ERROR;
377 if (post == 1)
379 switch (gfc_next_char ())
381 case 'b':
382 radix = 2;
383 break;
384 case 'o':
385 radix = 8;
386 break;
387 case 'x':
388 /* Fall through. */
389 case 'z':
390 radix = 16;
391 break;
392 default:
393 goto backup;
395 gfc_notify_std (GFC_STD_GNU, "Extension: BOZ constant "
396 "at %C uses non-standard postfix syntax.");
399 gfc_current_locus = old_loc;
401 buffer = alloca (length + 1);
402 memset (buffer, '\0', length + 1);
404 match_digits (0, radix, buffer);
405 gfc_next_char (); /* Eat delimiter. */
406 if (post == 1)
407 gfc_next_char (); /* Eat postfixed b, o, z, or x. */
409 /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find
410 "If a data-stmt-constant is a boz-literal-constant, the corresponding
411 variable shall be of type integer. The boz-literal-constant is treated
412 as if it were an int-literal-constant with a kind-param that specifies
413 the representation method with the largest decimal exponent range
414 supported by the processor." */
416 kind = gfc_max_integer_kind;
417 e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus);
419 if (gfc_range_check (e) != ARITH_OK)
421 gfc_error ("Integer too big for integer kind %i at %C", kind);
422 gfc_free_expr (e);
423 return MATCH_ERROR;
426 *result = e;
427 return MATCH_YES;
429 backup:
430 gfc_current_locus = start_loc;
431 return MATCH_NO;
435 /* Match a real constant of some sort. Allow a signed constant if signflag
436 is nonzero. Allow integer constants if allow_int is true. */
438 static match
439 match_real_constant (gfc_expr ** result, int signflag)
441 int kind, c, count, seen_dp, seen_digits, exp_char;
442 locus old_loc, temp_loc;
443 char *p, *buffer;
444 gfc_expr *e;
445 bool negate;
447 old_loc = gfc_current_locus;
448 gfc_gobble_whitespace ();
450 e = NULL;
452 count = 0;
453 seen_dp = 0;
454 seen_digits = 0;
455 exp_char = ' ';
456 negate = FALSE;
458 c = gfc_next_char ();
459 if (signflag && (c == '+' || c == '-'))
461 if (c == '-')
462 negate = TRUE;
464 gfc_gobble_whitespace ();
465 c = gfc_next_char ();
468 /* Scan significand. */
469 for (;; c = gfc_next_char (), count++)
471 if (c == '.')
473 if (seen_dp)
474 goto done;
476 /* Check to see if "." goes with a following operator like ".eq.". */
477 temp_loc = gfc_current_locus;
478 c = gfc_next_char ();
480 if (c == 'e' || c == 'd' || c == 'q')
482 c = gfc_next_char ();
483 if (c == '.')
484 goto done; /* Operator named .e. or .d. */
487 if (ISALPHA (c))
488 goto done; /* Distinguish 1.e9 from 1.eq.2 */
490 gfc_current_locus = temp_loc;
491 seen_dp = 1;
492 continue;
495 if (ISDIGIT (c))
497 seen_digits = 1;
498 continue;
501 break;
504 if (!seen_digits
505 || (c != 'e' && c != 'd' && c != 'q'))
506 goto done;
507 exp_char = c;
509 /* Scan exponent. */
510 c = gfc_next_char ();
511 count++;
513 if (c == '+' || c == '-')
514 { /* optional sign */
515 c = gfc_next_char ();
516 count++;
519 if (!ISDIGIT (c))
521 gfc_error ("Missing exponent in real number at %C");
522 return MATCH_ERROR;
525 while (ISDIGIT (c))
527 c = gfc_next_char ();
528 count++;
531 done:
532 /* Check that we have a numeric constant. */
533 if (!seen_digits || (!seen_dp && exp_char == ' '))
535 gfc_current_locus = old_loc;
536 return MATCH_NO;
539 /* Convert the number. */
540 gfc_current_locus = old_loc;
541 gfc_gobble_whitespace ();
543 buffer = alloca (count + 1);
544 memset (buffer, '\0', count + 1);
546 p = buffer;
547 c = gfc_next_char ();
548 if (c == '+' || c == '-')
550 gfc_gobble_whitespace ();
551 c = gfc_next_char ();
554 /* Hack for mpfr_set_str(). */
555 for (;;)
557 if (c == 'd' || c == 'q')
558 *p = 'e';
559 else
560 *p = c;
561 p++;
562 if (--count == 0)
563 break;
565 c = gfc_next_char ();
568 kind = get_kind ();
569 if (kind == -1)
570 goto cleanup;
572 switch (exp_char)
574 case 'd':
575 if (kind != -2)
577 gfc_error
578 ("Real number at %C has a 'd' exponent and an explicit kind");
579 goto cleanup;
581 kind = gfc_default_double_kind;
582 break;
584 case 'q':
585 if (kind != -2)
587 gfc_error
588 ("Real number at %C has a 'q' exponent and an explicit kind");
589 goto cleanup;
591 kind = gfc_option.q_kind;
592 break;
594 default:
595 if (kind == -2)
596 kind = gfc_default_real_kind;
598 if (gfc_validate_kind (BT_REAL, kind, true) < 0)
600 gfc_error ("Invalid real kind %d at %C", kind);
601 goto cleanup;
605 e = gfc_convert_real (buffer, kind, &gfc_current_locus);
606 if (negate)
607 mpfr_neg (e->value.real, e->value.real, GFC_RND_MODE);
609 switch (gfc_range_check (e))
611 case ARITH_OK:
612 break;
613 case ARITH_OVERFLOW:
614 gfc_error ("Real constant overflows its kind at %C");
615 goto cleanup;
617 case ARITH_UNDERFLOW:
618 if (gfc_option.warn_underflow)
619 gfc_warning ("Real constant underflows its kind at %C");
620 mpfr_set_ui (e->value.real, 0, GFC_RND_MODE);
621 break;
623 default:
624 gfc_internal_error ("gfc_range_check() returned bad value");
627 *result = e;
628 return MATCH_YES;
630 cleanup:
631 gfc_free_expr (e);
632 return MATCH_ERROR;
636 /* Match a substring reference. */
638 static match
639 match_substring (gfc_charlen * cl, int init, gfc_ref ** result)
641 gfc_expr *start, *end;
642 locus old_loc;
643 gfc_ref *ref;
644 match m;
646 start = NULL;
647 end = NULL;
649 old_loc = gfc_current_locus;
651 m = gfc_match_char ('(');
652 if (m != MATCH_YES)
653 return MATCH_NO;
655 if (gfc_match_char (':') != MATCH_YES)
657 if (init)
658 m = gfc_match_init_expr (&start);
659 else
660 m = gfc_match_expr (&start);
662 if (m != MATCH_YES)
664 m = MATCH_NO;
665 goto cleanup;
668 m = gfc_match_char (':');
669 if (m != MATCH_YES)
670 goto cleanup;
673 if (gfc_match_char (')') != MATCH_YES)
675 if (init)
676 m = gfc_match_init_expr (&end);
677 else
678 m = gfc_match_expr (&end);
680 if (m == MATCH_NO)
681 goto syntax;
682 if (m == MATCH_ERROR)
683 goto cleanup;
685 m = gfc_match_char (')');
686 if (m == MATCH_NO)
687 goto syntax;
690 /* Optimize away the (:) reference. */
691 if (start == NULL && end == NULL)
692 ref = NULL;
693 else
695 ref = gfc_get_ref ();
697 ref->type = REF_SUBSTRING;
698 if (start == NULL)
699 start = gfc_int_expr (1);
700 ref->u.ss.start = start;
701 if (end == NULL && cl)
702 end = gfc_copy_expr (cl->length);
703 ref->u.ss.end = end;
704 ref->u.ss.length = cl;
707 *result = ref;
708 return MATCH_YES;
710 syntax:
711 gfc_error ("Syntax error in SUBSTRING specification at %C");
712 m = MATCH_ERROR;
714 cleanup:
715 gfc_free_expr (start);
716 gfc_free_expr (end);
718 gfc_current_locus = old_loc;
719 return m;
723 /* Reads the next character of a string constant, taking care to
724 return doubled delimiters on the input as a single instance of
725 the delimiter.
727 Special return values are:
728 -1 End of the string, as determined by the delimiter
729 -2 Unterminated string detected
731 Backslash codes are also expanded at this time. */
733 static int
734 next_string_char (char delimiter)
736 locus old_locus;
737 int c;
739 c = gfc_next_char_literal (1);
741 if (c == '\n')
742 return -2;
744 if (gfc_option.flag_backslash && c == '\\')
746 old_locus = gfc_current_locus;
748 switch (gfc_next_char_literal (1))
750 case 'a':
751 c = '\a';
752 break;
753 case 'b':
754 c = '\b';
755 break;
756 case 't':
757 c = '\t';
758 break;
759 case 'f':
760 c = '\f';
761 break;
762 case 'n':
763 c = '\n';
764 break;
765 case 'r':
766 c = '\r';
767 break;
768 case 'v':
769 c = '\v';
770 break;
771 case '\\':
772 c = '\\';
773 break;
775 default:
776 /* Unknown backslash codes are simply not expanded */
777 gfc_current_locus = old_locus;
778 break;
782 if (c != delimiter)
783 return c;
785 old_locus = gfc_current_locus;
786 c = gfc_next_char_literal (1);
788 if (c == delimiter)
789 return c;
790 gfc_current_locus = old_locus;
792 return -1;
796 /* Special case of gfc_match_name() that matches a parameter kind name
797 before a string constant. This takes case of the weird but legal
798 case of:
800 kind_____'string'
802 where kind____ is a parameter. gfc_match_name() will happily slurp
803 up all the underscores, which leads to problems. If we return
804 MATCH_YES, the parse pointer points to the final underscore, which
805 is not part of the name. We never return MATCH_ERROR-- errors in
806 the name will be detected later. */
808 static match
809 match_charkind_name (char *name)
811 locus old_loc;
812 char c, peek;
813 int len;
815 gfc_gobble_whitespace ();
816 c = gfc_next_char ();
817 if (!ISALPHA (c))
818 return MATCH_NO;
820 *name++ = c;
821 len = 1;
823 for (;;)
825 old_loc = gfc_current_locus;
826 c = gfc_next_char ();
828 if (c == '_')
830 peek = gfc_peek_char ();
832 if (peek == '\'' || peek == '\"')
834 gfc_current_locus = old_loc;
835 *name = '\0';
836 return MATCH_YES;
840 if (!ISALNUM (c)
841 && c != '_'
842 && (gfc_option.flag_dollar_ok && c != '$'))
843 break;
845 *name++ = c;
846 if (++len > GFC_MAX_SYMBOL_LEN)
847 break;
850 return MATCH_NO;
854 /* See if the current input matches a character constant. Lots of
855 contortions have to be done to match the kind parameter which comes
856 before the actual string. The main consideration is that we don't
857 want to error out too quickly. For example, we don't actually do
858 any validation of the kinds until we have actually seen a legal
859 delimiter. Using match_kind_param() generates errors too quickly. */
861 static match
862 match_string_constant (gfc_expr ** result)
864 char *p, name[GFC_MAX_SYMBOL_LEN + 1];
865 int i, c, kind, length, delimiter;
866 locus old_locus, start_locus;
867 gfc_symbol *sym;
868 gfc_expr *e;
869 const char *q;
870 match m;
872 old_locus = gfc_current_locus;
874 gfc_gobble_whitespace ();
876 start_locus = gfc_current_locus;
878 c = gfc_next_char ();
879 if (c == '\'' || c == '"')
881 kind = gfc_default_character_kind;
882 goto got_delim;
885 if (ISDIGIT (c))
887 kind = 0;
889 while (ISDIGIT (c))
891 kind = kind * 10 + c - '0';
892 if (kind > 9999999)
893 goto no_match;
894 c = gfc_next_char ();
898 else
900 gfc_current_locus = old_locus;
902 m = match_charkind_name (name);
903 if (m != MATCH_YES)
904 goto no_match;
906 if (gfc_find_symbol (name, NULL, 1, &sym)
907 || sym == NULL
908 || sym->attr.flavor != FL_PARAMETER)
909 goto no_match;
911 kind = -1;
912 c = gfc_next_char ();
915 if (c == ' ')
917 gfc_gobble_whitespace ();
918 c = gfc_next_char ();
921 if (c != '_')
922 goto no_match;
924 gfc_gobble_whitespace ();
925 start_locus = gfc_current_locus;
927 c = gfc_next_char ();
928 if (c != '\'' && c != '"')
929 goto no_match;
931 if (kind == -1)
933 q = gfc_extract_int (sym->value, &kind);
934 if (q != NULL)
936 gfc_error (q);
937 return MATCH_ERROR;
941 if (gfc_validate_kind (BT_CHARACTER, kind, true) < 0)
943 gfc_error ("Invalid kind %d for CHARACTER constant at %C", kind);
944 return MATCH_ERROR;
947 got_delim:
948 /* Scan the string into a block of memory by first figuring out how
949 long it is, allocating the structure, then re-reading it. This
950 isn't particularly efficient, but string constants aren't that
951 common in most code. TODO: Use obstacks? */
953 delimiter = c;
954 length = 0;
956 for (;;)
958 c = next_string_char (delimiter);
959 if (c == -1)
960 break;
961 if (c == -2)
963 gfc_current_locus = start_locus;
964 gfc_error ("Unterminated character constant beginning at %C");
965 return MATCH_ERROR;
968 length++;
971 /* Peek at the next character to see if it is a b, o, z, or x for the
972 postfixed BOZ literal constants. */
973 c = gfc_peek_char ();
974 if (c == 'b' || c == 'o' || c =='z' || c == 'x')
975 goto no_match;
978 e = gfc_get_expr ();
980 e->expr_type = EXPR_CONSTANT;
981 e->ref = NULL;
982 e->ts.type = BT_CHARACTER;
983 e->ts.kind = kind;
984 e->where = start_locus;
986 e->value.character.string = p = gfc_getmem (length + 1);
987 e->value.character.length = length;
989 gfc_current_locus = start_locus;
990 gfc_next_char (); /* Skip delimiter */
992 for (i = 0; i < length; i++)
993 *p++ = next_string_char (delimiter);
995 *p = '\0'; /* TODO: C-style string is for development/debug purposes. */
997 if (next_string_char (delimiter) != -1)
998 gfc_internal_error ("match_string_constant(): Delimiter not found");
1000 if (match_substring (NULL, 0, &e->ref) != MATCH_NO)
1001 e->expr_type = EXPR_SUBSTRING;
1003 *result = e;
1005 return MATCH_YES;
1007 no_match:
1008 gfc_current_locus = old_locus;
1009 return MATCH_NO;
1013 /* Match a .true. or .false. */
1015 static match
1016 match_logical_constant (gfc_expr ** result)
1018 static mstring logical_ops[] = {
1019 minit (".false.", 0),
1020 minit (".true.", 1),
1021 minit (NULL, -1)
1024 gfc_expr *e;
1025 int i, kind;
1027 i = gfc_match_strings (logical_ops);
1028 if (i == -1)
1029 return MATCH_NO;
1031 kind = get_kind ();
1032 if (kind == -1)
1033 return MATCH_ERROR;
1034 if (kind == -2)
1035 kind = gfc_default_logical_kind;
1037 if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0)
1038 gfc_error ("Bad kind for logical constant at %C");
1040 e = gfc_get_expr ();
1042 e->expr_type = EXPR_CONSTANT;
1043 e->value.logical = i;
1044 e->ts.type = BT_LOGICAL;
1045 e->ts.kind = kind;
1046 e->where = gfc_current_locus;
1048 *result = e;
1049 return MATCH_YES;
1053 /* Match a real or imaginary part of a complex constant that is a
1054 symbolic constant. */
1056 static match
1057 match_sym_complex_part (gfc_expr ** result)
1059 char name[GFC_MAX_SYMBOL_LEN + 1];
1060 gfc_symbol *sym;
1061 gfc_expr *e;
1062 match m;
1064 m = gfc_match_name (name);
1065 if (m != MATCH_YES)
1066 return m;
1068 if (gfc_find_symbol (name, NULL, 1, &sym) || sym == NULL)
1069 return MATCH_NO;
1071 if (sym->attr.flavor != FL_PARAMETER)
1073 gfc_error ("Expected PARAMETER symbol in complex constant at %C");
1074 return MATCH_ERROR;
1077 if (!gfc_numeric_ts (&sym->value->ts))
1079 gfc_error ("Numeric PARAMETER required in complex constant at %C");
1080 return MATCH_ERROR;
1083 if (sym->value->rank != 0)
1085 gfc_error ("Scalar PARAMETER required in complex constant at %C");
1086 return MATCH_ERROR;
1089 switch (sym->value->ts.type)
1091 case BT_REAL:
1092 e = gfc_copy_expr (sym->value);
1093 break;
1095 case BT_COMPLEX:
1096 e = gfc_complex2real (sym->value, sym->value->ts.kind);
1097 if (e == NULL)
1098 goto error;
1099 break;
1101 case BT_INTEGER:
1102 e = gfc_int2real (sym->value, gfc_default_real_kind);
1103 if (e == NULL)
1104 goto error;
1105 break;
1107 default:
1108 gfc_internal_error ("gfc_match_sym_complex_part(): Bad type");
1111 *result = e; /* e is a scalar, real, constant expression */
1112 return MATCH_YES;
1114 error:
1115 gfc_error ("Error converting PARAMETER constant in complex constant at %C");
1116 return MATCH_ERROR;
1120 /* Match a real or imaginary part of a complex number. */
1122 static match
1123 match_complex_part (gfc_expr ** result)
1125 match m;
1127 m = match_sym_complex_part (result);
1128 if (m != MATCH_NO)
1129 return m;
1131 m = match_real_constant (result, 1);
1132 if (m != MATCH_NO)
1133 return m;
1135 return match_integer_constant (result, 1);
1139 /* Try to match a complex constant. */
1141 static match
1142 match_complex_constant (gfc_expr ** result)
1144 gfc_expr *e, *real, *imag;
1145 gfc_error_buf old_error;
1146 gfc_typespec target;
1147 locus old_loc;
1148 int kind;
1149 match m;
1151 old_loc = gfc_current_locus;
1152 real = imag = e = NULL;
1154 m = gfc_match_char ('(');
1155 if (m != MATCH_YES)
1156 return m;
1158 gfc_push_error (&old_error);
1160 m = match_complex_part (&real);
1161 if (m == MATCH_NO)
1163 gfc_free_error (&old_error);
1164 goto cleanup;
1167 if (gfc_match_char (',') == MATCH_NO)
1169 gfc_pop_error (&old_error);
1170 m = MATCH_NO;
1171 goto cleanup;
1174 /* If m is error, then something was wrong with the real part and we
1175 assume we have a complex constant because we've seen the ','. An
1176 ambiguous case here is the start of an iterator list of some
1177 sort. These sort of lists are matched prior to coming here. */
1179 if (m == MATCH_ERROR)
1181 gfc_free_error (&old_error);
1182 goto cleanup;
1184 gfc_pop_error (&old_error);
1186 m = match_complex_part (&imag);
1187 if (m == MATCH_NO)
1188 goto syntax;
1189 if (m == MATCH_ERROR)
1190 goto cleanup;
1192 m = gfc_match_char (')');
1193 if (m == MATCH_NO)
1195 /* Give the matcher for implied do-loops a chance to run. This
1196 yields a much saner error message for (/ (i, 4=i, 6) /). */
1197 if (gfc_peek_char () == '=')
1199 m = MATCH_ERROR;
1200 goto cleanup;
1202 else
1203 goto syntax;
1206 if (m == MATCH_ERROR)
1207 goto cleanup;
1209 /* Decide on the kind of this complex number. */
1210 if (real->ts.type == BT_REAL)
1212 if (imag->ts.type == BT_REAL)
1213 kind = gfc_kind_max (real, imag);
1214 else
1215 kind = real->ts.kind;
1217 else
1219 if (imag->ts.type == BT_REAL)
1220 kind = imag->ts.kind;
1221 else
1222 kind = gfc_default_real_kind;
1224 target.type = BT_REAL;
1225 target.kind = kind;
1227 if (real->ts.type != BT_REAL || kind != real->ts.kind)
1228 gfc_convert_type (real, &target, 2);
1229 if (imag->ts.type != BT_REAL || kind != imag->ts.kind)
1230 gfc_convert_type (imag, &target, 2);
1232 e = gfc_convert_complex (real, imag, kind);
1233 e->where = gfc_current_locus;
1235 gfc_free_expr (real);
1236 gfc_free_expr (imag);
1238 *result = e;
1239 return MATCH_YES;
1241 syntax:
1242 gfc_error ("Syntax error in COMPLEX constant at %C");
1243 m = MATCH_ERROR;
1245 cleanup:
1246 gfc_free_expr (e);
1247 gfc_free_expr (real);
1248 gfc_free_expr (imag);
1249 gfc_current_locus = old_loc;
1251 return m;
1255 /* Match constants in any of several forms. Returns nonzero for a
1256 match, zero for no match. */
1258 match
1259 gfc_match_literal_constant (gfc_expr ** result, int signflag)
1261 match m;
1263 m = match_complex_constant (result);
1264 if (m != MATCH_NO)
1265 return m;
1267 m = match_string_constant (result);
1268 if (m != MATCH_NO)
1269 return m;
1271 m = match_boz_constant (result);
1272 if (m != MATCH_NO)
1273 return m;
1275 m = match_real_constant (result, signflag);
1276 if (m != MATCH_NO)
1277 return m;
1279 m = match_hollerith_constant (result);
1280 if (m != MATCH_NO)
1281 return m;
1283 m = match_integer_constant (result, signflag);
1284 if (m != MATCH_NO)
1285 return m;
1287 m = match_logical_constant (result);
1288 if (m != MATCH_NO)
1289 return m;
1291 return MATCH_NO;
1295 /* Match a single actual argument value. An actual argument is
1296 usually an expression, but can also be a procedure name. If the
1297 argument is a single name, it is not always possible to tell
1298 whether the name is a dummy procedure or not. We treat these cases
1299 by creating an argument that looks like a dummy procedure and
1300 fixing things later during resolution. */
1302 static match
1303 match_actual_arg (gfc_expr ** result)
1305 char name[GFC_MAX_SYMBOL_LEN + 1];
1306 gfc_symtree *symtree;
1307 locus where, w;
1308 gfc_expr *e;
1309 int c;
1311 where = gfc_current_locus;
1313 switch (gfc_match_name (name))
1315 case MATCH_ERROR:
1316 return MATCH_ERROR;
1318 case MATCH_NO:
1319 break;
1321 case MATCH_YES:
1322 w = gfc_current_locus;
1323 gfc_gobble_whitespace ();
1324 c = gfc_next_char ();
1325 gfc_current_locus = w;
1327 if (c != ',' && c != ')')
1328 break;
1330 if (gfc_find_sym_tree (name, NULL, 1, &symtree))
1331 break;
1332 /* Handle error elsewhere. */
1334 /* Eliminate a couple of common cases where we know we don't
1335 have a function argument. */
1336 if (symtree == NULL)
1338 gfc_get_sym_tree (name, NULL, &symtree);
1339 gfc_set_sym_referenced (symtree->n.sym);
1341 else
1343 gfc_symbol *sym;
1345 sym = symtree->n.sym;
1346 gfc_set_sym_referenced (sym);
1347 if (sym->attr.flavor != FL_PROCEDURE
1348 && sym->attr.flavor != FL_UNKNOWN)
1349 break;
1351 /* If the symbol is a function with itself as the result and
1352 is being defined, then we have a variable. */
1353 if (sym->attr.function && sym->result == sym)
1355 if (gfc_current_ns->proc_name == sym
1356 || (gfc_current_ns->parent != NULL
1357 && gfc_current_ns->parent->proc_name == sym))
1358 break;
1360 if (sym->attr.entry
1361 && (sym->ns == gfc_current_ns
1362 || sym->ns == gfc_current_ns->parent))
1364 gfc_entry_list *el = NULL;
1366 for (el = sym->ns->entries; el; el = el->next)
1367 if (sym == el->sym)
1368 break;
1370 if (el)
1371 break;
1376 e = gfc_get_expr (); /* Leave it unknown for now */
1377 e->symtree = symtree;
1378 e->expr_type = EXPR_VARIABLE;
1379 e->ts.type = BT_PROCEDURE;
1380 e->where = where;
1382 *result = e;
1383 return MATCH_YES;
1386 gfc_current_locus = where;
1387 return gfc_match_expr (result);
1391 /* Match a keyword argument. */
1393 static match
1394 match_keyword_arg (gfc_actual_arglist * actual, gfc_actual_arglist * base)
1396 char name[GFC_MAX_SYMBOL_LEN + 1];
1397 gfc_actual_arglist *a;
1398 locus name_locus;
1399 match m;
1401 name_locus = gfc_current_locus;
1402 m = gfc_match_name (name);
1404 if (m != MATCH_YES)
1405 goto cleanup;
1406 if (gfc_match_char ('=') != MATCH_YES)
1408 m = MATCH_NO;
1409 goto cleanup;
1412 m = match_actual_arg (&actual->expr);
1413 if (m != MATCH_YES)
1414 goto cleanup;
1416 /* Make sure this name has not appeared yet. */
1418 if (name[0] != '\0')
1420 for (a = base; a; a = a->next)
1421 if (a->name != NULL && strcmp (a->name, name) == 0)
1423 gfc_error
1424 ("Keyword '%s' at %C has already appeared in the current "
1425 "argument list", name);
1426 return MATCH_ERROR;
1430 actual->name = gfc_get_string (name);
1431 return MATCH_YES;
1433 cleanup:
1434 gfc_current_locus = name_locus;
1435 return m;
1439 /* Matches an actual argument list of a function or subroutine, from
1440 the opening parenthesis to the closing parenthesis. The argument
1441 list is assumed to allow keyword arguments because we don't know if
1442 the symbol associated with the procedure has an implicit interface
1443 or not. We make sure keywords are unique. If SUB_FLAG is set,
1444 we're matching the argument list of a subroutine. */
1446 match
1447 gfc_match_actual_arglist (int sub_flag, gfc_actual_arglist ** argp)
1449 gfc_actual_arglist *head, *tail;
1450 int seen_keyword;
1451 gfc_st_label *label;
1452 locus old_loc;
1453 match m;
1455 *argp = tail = NULL;
1456 old_loc = gfc_current_locus;
1458 seen_keyword = 0;
1460 if (gfc_match_char ('(') == MATCH_NO)
1461 return (sub_flag) ? MATCH_YES : MATCH_NO;
1463 if (gfc_match_char (')') == MATCH_YES)
1464 return MATCH_YES;
1465 head = NULL;
1467 for (;;)
1469 if (head == NULL)
1470 head = tail = gfc_get_actual_arglist ();
1471 else
1473 tail->next = gfc_get_actual_arglist ();
1474 tail = tail->next;
1477 if (sub_flag && gfc_match_char ('*') == MATCH_YES)
1479 m = gfc_match_st_label (&label);
1480 if (m == MATCH_NO)
1481 gfc_error ("Expected alternate return label at %C");
1482 if (m != MATCH_YES)
1483 goto cleanup;
1485 tail->label = label;
1486 goto next;
1489 /* After the first keyword argument is seen, the following
1490 arguments must also have keywords. */
1491 if (seen_keyword)
1493 m = match_keyword_arg (tail, head);
1495 if (m == MATCH_ERROR)
1496 goto cleanup;
1497 if (m == MATCH_NO)
1499 gfc_error
1500 ("Missing keyword name in actual argument list at %C");
1501 goto cleanup;
1505 else
1507 /* See if we have the first keyword argument. */
1508 m = match_keyword_arg (tail, head);
1509 if (m == MATCH_YES)
1510 seen_keyword = 1;
1511 if (m == MATCH_ERROR)
1512 goto cleanup;
1514 if (m == MATCH_NO)
1516 /* Try for a non-keyword argument. */
1517 m = match_actual_arg (&tail->expr);
1518 if (m == MATCH_ERROR)
1519 goto cleanup;
1520 if (m == MATCH_NO)
1521 goto syntax;
1525 next:
1526 if (gfc_match_char (')') == MATCH_YES)
1527 break;
1528 if (gfc_match_char (',') != MATCH_YES)
1529 goto syntax;
1532 *argp = head;
1533 return MATCH_YES;
1535 syntax:
1536 gfc_error ("Syntax error in argument list at %C");
1538 cleanup:
1539 gfc_free_actual_arglist (head);
1540 gfc_current_locus = old_loc;
1542 return MATCH_ERROR;
1546 /* Used by match_varspec() to extend the reference list by one
1547 element. */
1549 static gfc_ref *
1550 extend_ref (gfc_expr * primary, gfc_ref * tail)
1553 if (primary->ref == NULL)
1554 primary->ref = tail = gfc_get_ref ();
1555 else
1557 if (tail == NULL)
1558 gfc_internal_error ("extend_ref(): Bad tail");
1559 tail->next = gfc_get_ref ();
1560 tail = tail->next;
1563 return tail;
1567 /* Match any additional specifications associated with the current
1568 variable like member references or substrings. If equiv_flag is
1569 set we only match stuff that is allowed inside an EQUIVALENCE
1570 statement. */
1572 static match
1573 match_varspec (gfc_expr * primary, int equiv_flag)
1575 char name[GFC_MAX_SYMBOL_LEN + 1];
1576 gfc_ref *substring, *tail;
1577 gfc_component *component;
1578 gfc_symbol *sym = primary->symtree->n.sym;
1579 match m;
1581 tail = NULL;
1583 if ((equiv_flag && gfc_peek_char () == '(')
1584 || sym->attr.dimension)
1586 /* In EQUIVALENCE, we don't know yet whether we are seeing
1587 an array, character variable or array of character
1588 variables. We'll leave the decision till resolve
1589 time. */
1590 tail = extend_ref (primary, tail);
1591 tail->type = REF_ARRAY;
1593 m = gfc_match_array_ref (&tail->u.ar, equiv_flag ? NULL : sym->as,
1594 equiv_flag);
1595 if (m != MATCH_YES)
1596 return m;
1598 if (equiv_flag && gfc_peek_char () == '(')
1600 tail = extend_ref (primary, tail);
1601 tail->type = REF_ARRAY;
1603 m = gfc_match_array_ref (&tail->u.ar, NULL, equiv_flag);
1604 if (m != MATCH_YES)
1605 return m;
1609 primary->ts = sym->ts;
1611 if (equiv_flag)
1612 return MATCH_YES;
1614 if (sym->ts.type != BT_DERIVED || gfc_match_char ('%') != MATCH_YES)
1615 goto check_substring;
1617 sym = sym->ts.derived;
1619 for (;;)
1621 m = gfc_match_name (name);
1622 if (m == MATCH_NO)
1623 gfc_error ("Expected structure component name at %C");
1624 if (m != MATCH_YES)
1625 return MATCH_ERROR;
1627 component = gfc_find_component (sym, name);
1628 if (component == NULL)
1629 return MATCH_ERROR;
1631 tail = extend_ref (primary, tail);
1632 tail->type = REF_COMPONENT;
1634 tail->u.c.component = component;
1635 tail->u.c.sym = sym;
1637 primary->ts = component->ts;
1639 if (component->as != NULL)
1641 tail = extend_ref (primary, tail);
1642 tail->type = REF_ARRAY;
1644 m = gfc_match_array_ref (&tail->u.ar, component->as, equiv_flag);
1645 if (m != MATCH_YES)
1646 return m;
1649 if (component->ts.type != BT_DERIVED
1650 || gfc_match_char ('%') != MATCH_YES)
1651 break;
1653 sym = component->ts.derived;
1656 check_substring:
1657 if (primary->ts.type == BT_UNKNOWN)
1659 if (gfc_get_default_type (sym, sym->ns)->type == BT_CHARACTER)
1661 gfc_set_default_type (sym, 0, sym->ns);
1662 primary->ts = sym->ts;
1666 if (primary->ts.type == BT_CHARACTER)
1668 switch (match_substring (primary->ts.cl, equiv_flag, &substring))
1670 case MATCH_YES:
1671 if (tail == NULL)
1672 primary->ref = substring;
1673 else
1674 tail->next = substring;
1676 if (primary->expr_type == EXPR_CONSTANT)
1677 primary->expr_type = EXPR_SUBSTRING;
1679 if (substring)
1680 primary->ts.cl = NULL;
1682 break;
1684 case MATCH_NO:
1685 break;
1687 case MATCH_ERROR:
1688 return MATCH_ERROR;
1692 return MATCH_YES;
1696 /* Given an expression that is a variable, figure out what the
1697 ultimate variable's type and attribute is, traversing the reference
1698 structures if necessary.
1700 This subroutine is trickier than it looks. We start at the base
1701 symbol and store the attribute. Component references load a
1702 completely new attribute.
1704 A couple of rules come into play. Subobjects of targets are always
1705 targets themselves. If we see a component that goes through a
1706 pointer, then the expression must also be a target, since the
1707 pointer is associated with something (if it isn't core will soon be
1708 dumped). If we see a full part or section of an array, the
1709 expression is also an array.
1711 We can have at most one full array reference. */
1713 symbol_attribute
1714 gfc_variable_attr (gfc_expr * expr, gfc_typespec * ts)
1716 int dimension, pointer, target;
1717 symbol_attribute attr;
1718 gfc_ref *ref;
1720 if (expr->expr_type != EXPR_VARIABLE)
1721 gfc_internal_error ("gfc_variable_attr(): Expression isn't a variable");
1723 ref = expr->ref;
1724 attr = expr->symtree->n.sym->attr;
1726 dimension = attr.dimension;
1727 pointer = attr.pointer;
1729 target = attr.target;
1730 if (pointer)
1731 target = 1;
1733 if (ts != NULL && expr->ts.type == BT_UNKNOWN)
1734 *ts = expr->symtree->n.sym->ts;
1736 for (; ref; ref = ref->next)
1737 switch (ref->type)
1739 case REF_ARRAY:
1741 switch (ref->u.ar.type)
1743 case AR_FULL:
1744 dimension = 1;
1745 break;
1747 case AR_SECTION:
1748 pointer = 0;
1749 dimension = 1;
1750 break;
1752 case AR_ELEMENT:
1753 pointer = 0;
1754 break;
1756 case AR_UNKNOWN:
1757 gfc_internal_error ("gfc_variable_attr(): Bad array reference");
1760 break;
1762 case REF_COMPONENT:
1763 gfc_get_component_attr (&attr, ref->u.c.component);
1764 if (ts != NULL)
1765 *ts = ref->u.c.component->ts;
1767 pointer = ref->u.c.component->pointer;
1768 if (pointer)
1769 target = 1;
1771 break;
1773 case REF_SUBSTRING:
1774 pointer = 0;
1775 break;
1778 attr.dimension = dimension;
1779 attr.pointer = pointer;
1780 attr.target = target;
1782 return attr;
1786 /* Return the attribute from a general expression. */
1788 symbol_attribute
1789 gfc_expr_attr (gfc_expr * e)
1791 symbol_attribute attr;
1793 switch (e->expr_type)
1795 case EXPR_VARIABLE:
1796 attr = gfc_variable_attr (e, NULL);
1797 break;
1799 case EXPR_FUNCTION:
1800 gfc_clear_attr (&attr);
1802 if (e->value.function.esym != NULL)
1803 attr = e->value.function.esym->result->attr;
1805 /* TODO: NULL() returns pointers. May have to take care of this
1806 here. */
1808 break;
1810 default:
1811 gfc_clear_attr (&attr);
1812 break;
1815 return attr;
1819 /* Match a structure constructor. The initial symbol has already been
1820 seen. */
1822 match
1823 gfc_match_structure_constructor (gfc_symbol * sym, gfc_expr ** result)
1825 gfc_constructor *head, *tail;
1826 gfc_component *comp;
1827 gfc_expr *e;
1828 locus where;
1829 match m;
1831 head = tail = NULL;
1833 if (gfc_match_char ('(') != MATCH_YES)
1834 goto syntax;
1836 where = gfc_current_locus;
1838 gfc_find_component (sym, NULL);
1840 for (comp = sym->components; comp; comp = comp->next)
1842 if (head == NULL)
1843 tail = head = gfc_get_constructor ();
1844 else
1846 tail->next = gfc_get_constructor ();
1847 tail = tail->next;
1850 m = gfc_match_expr (&tail->expr);
1851 if (m == MATCH_NO)
1852 goto syntax;
1853 if (m == MATCH_ERROR)
1854 goto cleanup;
1856 if (gfc_match_char (',') == MATCH_YES)
1858 if (comp->next == NULL)
1860 gfc_error
1861 ("Too many components in structure constructor at %C");
1862 goto cleanup;
1865 continue;
1868 break;
1871 if (gfc_match_char (')') != MATCH_YES)
1872 goto syntax;
1874 if (comp->next != NULL)
1876 gfc_error ("Too few components in structure constructor at %C");
1877 goto cleanup;
1880 e = gfc_get_expr ();
1882 e->expr_type = EXPR_STRUCTURE;
1884 e->ts.type = BT_DERIVED;
1885 e->ts.derived = sym;
1886 e->where = where;
1888 e->value.constructor = head;
1890 *result = e;
1891 return MATCH_YES;
1893 syntax:
1894 gfc_error ("Syntax error in structure constructor at %C");
1896 cleanup:
1897 gfc_free_constructor (head);
1898 return MATCH_ERROR;
1902 /* Matches a variable name followed by anything that might follow it--
1903 array reference, argument list of a function, etc. */
1905 match
1906 gfc_match_rvalue (gfc_expr ** result)
1908 gfc_actual_arglist *actual_arglist;
1909 char name[GFC_MAX_SYMBOL_LEN + 1], argname[GFC_MAX_SYMBOL_LEN + 1];
1910 gfc_state_data *st;
1911 gfc_symbol *sym;
1912 gfc_symtree *symtree;
1913 locus where, old_loc;
1914 gfc_expr *e;
1915 match m, m2;
1916 int i;
1918 m = gfc_match_name (name);
1919 if (m != MATCH_YES)
1920 return m;
1922 if (gfc_find_state (COMP_INTERFACE) == SUCCESS)
1923 i = gfc_get_sym_tree (name, NULL, &symtree);
1924 else
1925 i = gfc_get_ha_sym_tree (name, &symtree);
1927 if (i)
1928 return MATCH_ERROR;
1930 sym = symtree->n.sym;
1931 e = NULL;
1932 where = gfc_current_locus;
1934 gfc_set_sym_referenced (sym);
1936 if (sym->attr.function && sym->result == sym)
1938 if (gfc_current_ns->proc_name == sym
1939 || (gfc_current_ns->parent != NULL
1940 && gfc_current_ns->parent->proc_name == sym))
1941 goto variable;
1943 if (sym->attr.entry
1944 && (sym->ns == gfc_current_ns
1945 || sym->ns == gfc_current_ns->parent))
1947 gfc_entry_list *el = NULL;
1949 for (el = sym->ns->entries; el; el = el->next)
1950 if (sym == el->sym)
1951 goto variable;
1955 if (sym->attr.function || sym->attr.external || sym->attr.intrinsic)
1956 goto function0;
1958 if (sym->attr.generic)
1959 goto generic_function;
1961 switch (sym->attr.flavor)
1963 case FL_VARIABLE:
1964 variable:
1965 if (sym->ts.type == BT_UNKNOWN && gfc_peek_char () == '%'
1966 && gfc_get_default_type (sym, sym->ns)->type == BT_DERIVED)
1967 gfc_set_default_type (sym, 0, sym->ns);
1969 e = gfc_get_expr ();
1971 e->expr_type = EXPR_VARIABLE;
1972 e->symtree = symtree;
1974 m = match_varspec (e, 0);
1975 break;
1977 case FL_PARAMETER:
1978 /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
1979 end up here. Unfortunately, sym->value->expr_type is set to
1980 EXPR_CONSTANT, and so the if () branch would be followed without
1981 the !sym->as check. */
1982 if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
1983 e = gfc_copy_expr (sym->value);
1984 else
1986 e = gfc_get_expr ();
1987 e->expr_type = EXPR_VARIABLE;
1990 e->symtree = symtree;
1991 m = match_varspec (e, 0);
1992 break;
1994 case FL_DERIVED:
1995 sym = gfc_use_derived (sym);
1996 if (sym == NULL)
1997 m = MATCH_ERROR;
1998 else
1999 m = gfc_match_structure_constructor (sym, &e);
2000 break;
2002 /* If we're here, then the name is known to be the name of a
2003 procedure, yet it is not sure to be the name of a function. */
2004 case FL_PROCEDURE:
2005 if (sym->attr.subroutine)
2007 gfc_error ("Unexpected use of subroutine name '%s' at %C",
2008 sym->name);
2009 m = MATCH_ERROR;
2010 break;
2013 /* At this point, the name has to be a non-statement function.
2014 If the name is the same as the current function being
2015 compiled, then we have a variable reference (to the function
2016 result) if the name is non-recursive. */
2018 st = gfc_enclosing_unit (NULL);
2020 if (st != NULL && st->state == COMP_FUNCTION
2021 && st->sym == sym
2022 && !sym->attr.recursive)
2024 e = gfc_get_expr ();
2025 e->symtree = symtree;
2026 e->expr_type = EXPR_VARIABLE;
2028 m = match_varspec (e, 0);
2029 break;
2032 /* Match a function reference. */
2033 function0:
2034 m = gfc_match_actual_arglist (0, &actual_arglist);
2035 if (m == MATCH_NO)
2037 if (sym->attr.proc == PROC_ST_FUNCTION)
2038 gfc_error ("Statement function '%s' requires argument list at %C",
2039 sym->name);
2040 else
2041 gfc_error ("Function '%s' requires an argument list at %C",
2042 sym->name);
2044 m = MATCH_ERROR;
2045 break;
2048 if (m != MATCH_YES)
2050 m = MATCH_ERROR;
2051 break;
2054 gfc_get_ha_sym_tree (name, &symtree); /* Can't fail */
2055 sym = symtree->n.sym;
2057 e = gfc_get_expr ();
2058 e->symtree = symtree;
2059 e->expr_type = EXPR_FUNCTION;
2060 e->value.function.actual = actual_arglist;
2061 e->where = gfc_current_locus;
2063 if (sym->as != NULL)
2064 e->rank = sym->as->rank;
2066 if (!sym->attr.function
2067 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2069 m = MATCH_ERROR;
2070 break;
2073 if (sym->result == NULL)
2074 sym->result = sym;
2076 m = MATCH_YES;
2077 break;
2079 case FL_UNKNOWN:
2081 /* Special case for derived type variables that get their types
2082 via an IMPLICIT statement. This can't wait for the
2083 resolution phase. */
2085 if (gfc_peek_char () == '%'
2086 && sym->ts.type == BT_UNKNOWN
2087 && gfc_get_default_type (sym, sym->ns)->type == BT_DERIVED)
2088 gfc_set_default_type (sym, 0, sym->ns);
2090 /* If the symbol has a dimension attribute, the expression is a
2091 variable. */
2093 if (sym->attr.dimension)
2095 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2096 sym->name, NULL) == FAILURE)
2098 m = MATCH_ERROR;
2099 break;
2102 e = gfc_get_expr ();
2103 e->symtree = symtree;
2104 e->expr_type = EXPR_VARIABLE;
2105 m = match_varspec (e, 0);
2106 break;
2109 /* Name is not an array, so we peek to see if a '(' implies a
2110 function call or a substring reference. Otherwise the
2111 variable is just a scalar. */
2113 gfc_gobble_whitespace ();
2114 if (gfc_peek_char () != '(')
2116 /* Assume a scalar variable */
2117 e = gfc_get_expr ();
2118 e->symtree = symtree;
2119 e->expr_type = EXPR_VARIABLE;
2121 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2122 sym->name, NULL) == FAILURE)
2124 m = MATCH_ERROR;
2125 break;
2128 e->ts = sym->ts;
2129 m = match_varspec (e, 0);
2130 break;
2133 /* See if this is a function reference with a keyword argument
2134 as first argument. We do this because otherwise a spurious
2135 symbol would end up in the symbol table. */
2137 old_loc = gfc_current_locus;
2138 m2 = gfc_match (" ( %n =", argname);
2139 gfc_current_locus = old_loc;
2141 e = gfc_get_expr ();
2142 e->symtree = symtree;
2144 if (m2 != MATCH_YES)
2146 /* See if this could possibly be a substring reference of a name
2147 that we're not sure is a variable yet. */
2149 if ((sym->ts.type == BT_UNKNOWN || sym->ts.type == BT_CHARACTER)
2150 && match_substring (sym->ts.cl, 0, &e->ref) == MATCH_YES)
2153 e->expr_type = EXPR_VARIABLE;
2155 if (sym->attr.flavor != FL_VARIABLE
2156 && gfc_add_flavor (&sym->attr, FL_VARIABLE,
2157 sym->name, NULL) == FAILURE)
2159 m = MATCH_ERROR;
2160 break;
2163 if (sym->ts.type == BT_UNKNOWN
2164 && gfc_set_default_type (sym, 1, NULL) == FAILURE)
2166 m = MATCH_ERROR;
2167 break;
2170 e->ts = sym->ts;
2171 if (e->ref)
2172 e->ts.cl = NULL;
2173 m = MATCH_YES;
2174 break;
2178 /* Give up, assume we have a function. */
2180 gfc_get_sym_tree (name, NULL, &symtree); /* Can't fail */
2181 sym = symtree->n.sym;
2182 e->expr_type = EXPR_FUNCTION;
2184 if (!sym->attr.function
2185 && gfc_add_function (&sym->attr, sym->name, NULL) == FAILURE)
2187 m = MATCH_ERROR;
2188 break;
2191 sym->result = sym;
2193 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2194 if (m == MATCH_NO)
2195 gfc_error ("Missing argument list in function '%s' at %C", sym->name);
2197 if (m != MATCH_YES)
2199 m = MATCH_ERROR;
2200 break;
2203 /* If our new function returns a character, array or structure
2204 type, it might have subsequent references. */
2206 m = match_varspec (e, 0);
2207 if (m == MATCH_NO)
2208 m = MATCH_YES;
2210 break;
2212 generic_function:
2213 gfc_get_sym_tree (name, NULL, &symtree); /* Can't fail */
2215 e = gfc_get_expr ();
2216 e->symtree = symtree;
2217 e->expr_type = EXPR_FUNCTION;
2219 m = gfc_match_actual_arglist (0, &e->value.function.actual);
2220 break;
2222 default:
2223 gfc_error ("Symbol at %C is not appropriate for an expression");
2224 return MATCH_ERROR;
2227 if (m == MATCH_YES)
2229 e->where = where;
2230 *result = e;
2232 else
2233 gfc_free_expr (e);
2235 return m;
2239 /* Match a variable, ie something that can be assigned to. This
2240 starts as a symbol, can be a structure component or an array
2241 reference. It can be a function if the function doesn't have a
2242 separate RESULT variable. If the symbol has not been previously
2243 seen, we assume it is a variable.
2245 This function is called by two interface functions:
2246 gfc_match_variable, which has host_flag = 1, and
2247 gfc_match_equiv_variable, with host_flag = 0, to restrict the
2248 match of the symbol to the local scope. */
2250 static match
2251 match_variable (gfc_expr ** result, int equiv_flag, int host_flag)
2253 gfc_symbol *sym;
2254 gfc_symtree *st;
2255 gfc_expr *expr;
2256 locus where;
2257 match m;
2259 m = gfc_match_sym_tree (&st, host_flag);
2260 if (m != MATCH_YES)
2261 return m;
2262 where = gfc_current_locus;
2264 sym = st->n.sym;
2265 gfc_set_sym_referenced (sym);
2266 switch (sym->attr.flavor)
2268 case FL_VARIABLE:
2269 break;
2271 case FL_UNKNOWN:
2272 if (gfc_add_flavor (&sym->attr, FL_VARIABLE,
2273 sym->name, NULL) == FAILURE)
2274 return MATCH_ERROR;
2275 break;
2277 case FL_PROCEDURE:
2278 /* Check for a nonrecursive function result */
2279 if (sym->attr.function && (sym->result == sym || sym->attr.entry))
2281 /* If a function result is a derived type, then the derived
2282 type may still have to be resolved. */
2284 if (sym->ts.type == BT_DERIVED
2285 && gfc_use_derived (sym->ts.derived) == NULL)
2286 return MATCH_ERROR;
2287 break;
2290 /* Fall through to error */
2292 default:
2293 gfc_error ("Expected VARIABLE at %C");
2294 return MATCH_ERROR;
2297 /* Special case for derived type variables that get their types
2298 via an IMPLICIT statement. This can't wait for the
2299 resolution phase. */
2302 gfc_namespace * implicit_ns;
2304 if (gfc_current_ns->proc_name == sym)
2305 implicit_ns = gfc_current_ns;
2306 else
2307 implicit_ns = sym->ns;
2309 if (gfc_peek_char () == '%'
2310 && sym->ts.type == BT_UNKNOWN
2311 && gfc_get_default_type (sym, implicit_ns)->type == BT_DERIVED)
2312 gfc_set_default_type (sym, 0, implicit_ns);
2315 expr = gfc_get_expr ();
2317 expr->expr_type = EXPR_VARIABLE;
2318 expr->symtree = st;
2319 expr->ts = sym->ts;
2320 expr->where = where;
2322 /* Now see if we have to do more. */
2323 m = match_varspec (expr, equiv_flag);
2324 if (m != MATCH_YES)
2326 gfc_free_expr (expr);
2327 return m;
2330 *result = expr;
2331 return MATCH_YES;
2334 match
2335 gfc_match_variable (gfc_expr ** result, int equiv_flag)
2337 return match_variable (result, equiv_flag, 1);
2340 match
2341 gfc_match_equiv_variable (gfc_expr ** result)
2343 return match_variable (result, 1, 0);