Merge from emacs-24; up to 2014-05-29T17:16:00Z!dmantipov@yandex.ru
[bpt/emacs.git] / admin / grammars / c.by
index dfced98..0fd8a33 100644 (file)
@@ -1,5 +1,5 @@
 ;;; c.by -- LL grammar for C/C++ language specification
-;; Copyright (C) 1999-2012 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
 ;;
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;;         David Ponce <david@dponce.com>
 %provide semantic/bovine/c-by
 
 %{
-(declare-function semantic-c-reconstitute-token "semantic/bovine/c")
-(declare-function semantic-c-reconstitute-template "semantic/bovine/c")
-(declare-function semantic-expand-c-tag "semantic/bovine/c")
+(declare-function semantic-c-reconstitute-token "semantic/bovine/c"
+                 (tokenpart declmods typedecl))
+(declare-function semantic-c-reconstitute-template "semantic/bovine/c"
+                 (tag specifier))
+(declare-function semantic-expand-c-tag "semantic/bovine/c" (tag))
+(declare-function semantic-parse-region "semantic"
+                 (start end &optional nonterminal depth returnonerror))
 }
 
 %languagemode  c-mode c++-mode
@@ -897,8 +901,8 @@ varname
 ;; I should store more in this def, but leave it simple for now.
 ;; Klaus Berndl: const and volatile can be written after the type!
 variablearg
-  : declmods typeformbase cv-declmods opt-ref variablearg-opt-name
-    ( VARIABLE-TAG (list $5) $2 nil
+  : declmods typeformbase cv-declmods opt-ref variablearg-opt-name opt-assign
+    ( VARIABLE-TAG (list (append $5 ,$6)) $2 nil
                    :constant-flag (if (member "const" (append $1 $3)) t nil)
                    :typemodifiers (delete "const" (append $1 $3))
                    :reference (car ,$4)
@@ -908,6 +912,8 @@ variablearg
 variablearg-opt-name
   : varname
     ( ,$1 )
+  | semantic-list arg-list
+    ( (car ( EXPAND $1 function-pointer )) $2)
  ;; Klaus Berndl: This allows variableargs without a arg-name being
  ;; parsed correct even if there several pointers (*)
   | opt-stars
@@ -922,9 +928,9 @@ varname-opt-initializer
 
 varnamelist
   : opt-ref varname varname-opt-initializer COMA varnamelist
-    ( ,(cons $2 $5) )
+    ( ,(cons (append $2 $3) $5) )
   | opt-ref varname varname-opt-initializer
-    ( $2 )
+    ( (append $2 $3) )
   ;
 
 ;; Klaus Berndl: Is necessary to parse stuff like
@@ -1107,8 +1113,8 @@ functionname
   ;
 
 function-pointer
-  : LPAREN STAR symbol RPAREN
-    ( (concat "*" $3) )
+  : LPAREN STAR opt-symbol RPAREN
+    ( (concat "*" ,(car $3)) )
   | LPAREN symbol RPAREN
     ( $2 )
   ;
@@ -1148,16 +1154,26 @@ type-cast-list
   : open-paren typeformbase close-paren
   ;
 
-opt-stuff-after-symbol
+opt-brackets-after-symbol
+  : brackets-after-symbol
+  | ;; EMPTY
+  ;
+
+brackets-after-symbol
   : PAREN_BLCK
   | BRACK_BLCK
-  | ;; EMPTY
   ;
 
 multi-stage-dereference
-  : namespace-symbol opt-stuff-after-symbol PERIOD multi-stage-dereference ;; method call
-  | namespace-symbol opt-stuff-after-symbol MINUS GREATER multi-stage-dereference ;;method call
-  | namespace-symbol opt-stuff-after-symbol
+  : namespace-symbol opt-brackets-after-symbol
+    PERIOD multi-stage-dereference ;; method call
+  | namespace-symbol opt-brackets-after-symbol
+    MINUS GREATER multi-stage-dereference ;;method call
+  | namespace-symbol opt-brackets-after-symbol
+    PERIOD namespace-symbol opt-brackets-after-symbol
+  | namespace-symbol opt-brackets-after-symbol
+    MINUS GREATER namespace-symbol opt-brackets-after-symbol
+  | namespace-symbol brackets-after-symbol
   ;
 
 string-seq
@@ -1183,6 +1199,7 @@ expr-binop
   | AMPERSAND
   | OR OR
   | OR
+  | MOD
  ;; There are more.
   ;
 
@@ -1200,8 +1217,7 @@ unaryexpression
   | multi-stage-dereference
   | NEW multi-stage-dereference
   | NEW builtintype-types semantic-list
- ;; Klaus Berndl: symbol -> namespace-symbol!
-  | namespace-symbol
+  | symbol
  ;; Klaus Berndl: C/C++ allows sequences of strings which are
  ;; concatenated by the precompiler to one string
   | string-seq