From: peter klausler Date: Tue, 1 May 2018 21:59:10 +0000 (-0700) Subject: [flang] Allow $ and @ in defined operator names. X-Git-Tag: llvmorg-12-init~9537^2~2613 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d9ff8df5dbbca3647d54e18cf2a6443c3f1c05f0;p=platform%2Fupstream%2Fllvm.git [flang] Allow $ and @ in defined operator names. Original-commit: flang-compiler/f18@3cf7533a3bfe35b5dcb4396f35339ee34d34c272 Reviewed-on: https://github.com/flang-compiler/f18/pull/81 Tree-same-pre-rewrite: false --- diff --git a/flang/lib/parser/grammar.h b/flang/lib/parser/grammar.h index 562d845..600d993 100644 --- a/flang/lib/parser/grammar.h +++ b/flang/lib/parser/grammar.h @@ -1345,15 +1345,6 @@ TYPE_PARSER(construct( TYPE_PARSER(construct( maybe(scalarIntExpr), ":" >> maybe(scalarIntExpr))) -// R1003 defined-unary-op -> . letter [letter]... . -// R1023 defined-binary-op -> . letter [letter]... . -// R1414 local-defined-operator -> defined-unary-op | defined-binary-op -// R1415 use-defined-operator -> defined-unary-op | defined-binary-op -// N.B. The name of the operator is captured without the periods around it. -TYPE_PARSER(space >> "."_ch >> - construct(sourced(some(letter) >> construct())) / - "."_ch) - // R911 data-ref -> part-ref [% part-ref]... // R914 coindexed-named-object -> data-ref // R917 array-element -> data-ref diff --git a/flang/lib/parser/token-parsers.h b/flang/lib/parser/token-parsers.h index 5b65135..160e88e 100644 --- a/flang/lib/parser/token-parsers.h +++ b/flang/lib/parser/token-parsers.h @@ -647,8 +647,19 @@ constexpr auto underscore = "_"_ch; constexpr auto otherIdChar = underscore / !"'\""_ch || extension("$@"_ch); constexpr auto nonDigitIdChar = letter || otherIdChar; constexpr auto rawName = nonDigitIdChar >> many(nonDigitIdChar || digit); -TYPE_PARSER(space >> sourced(attempt(rawName) >> construct())) +TYPE_PARSER(space >> sourced(rawName >> construct())) constexpr auto keyword = construct(name); +// R1003 defined-unary-op -> . letter [letter]... . +// R1023 defined-binary-op -> . letter [letter]... . +// R1414 local-defined-operator -> defined-unary-op | defined-binary-op +// R1415 use-defined-operator -> defined-unary-op | defined-binary-op +// N.B. The name of the operator is captured without the periods around it. +constexpr auto definedOpNameChar = letter || extension("$@"_ch); +TYPE_PARSER(space >> "."_ch >> + construct( + sourced(some(definedOpNameChar) >> construct())) / + "."_ch) + } // namespace Fortran::parser #endif // FORTRAN_PARSER_TOKEN_PARSERS_H_