Silence -Wunused-but-set-variable error with clang
[babeltrace.git] / src / plugins / ctf / common / metadata / parser.y
index e014db1f2fb0c83b74cd219b56bd4342bb1e2fb2..b74497b034189b478cdd7792edd7760080d487f0 100644 (file)
 #include "common/list.h"
 #include "common/assert.h"
 #include "scanner.h"
-#include "parser.h"
 #include "ast.h"
 #include "objstack.h"
 
-#if BT_LOG_ENABLED_VERBOSE
-# define YYDEBUG 1
-# define YYFPRINTF(_stream, _fmt, args...) BT_LOGV(_fmt, ## args)
-#else
-# define YYDEBUG 0
-#endif
+#include "parser-wrap.h"
+
+/*
+ * Avoid warning about "yynerrs" being unused, seen with bison 3.5.1 + clang 15
+ * on Ubuntu 20.04.
+ */
+BT_DIAG_IGNORE_UNUSED_BUT_SET_VARIABLE
 
 /* Join two lists, put "add" at the end of "head".  */
 static inline void
@@ -65,8 +65,6 @@ _bt_list_splice_tail (struct bt_list_head *add, struct bt_list_head *head)
        }
 }
 
-BT_HIDDEN
-int yyparse(struct ctf_scanner *scanner, yyscan_t yyscanner);
 BT_HIDDEN
 int yylex(union YYSTYPE *yyval, yyscan_t yyscanner);
 BT_HIDDEN
@@ -165,7 +163,7 @@ int parse_base_sequence(const char *src, size_t len, size_t pos,
                        return -1;
                }
        }
-       BT_ASSERT(nr_char > 0);
+       BT_ASSERT_DBG(nr_char > 0);
        buffer[nr_char] = '\0';
        *buf_len = nr_char;
        return 0;
@@ -318,7 +316,7 @@ static void push_scope(struct ctf_scanner *scanner)
 {
        struct ctf_scanner_scope *ns;
 
-       BT_LOGV("Pushing scope: scanner-addr=%p", scanner);
+       BT_LOGT("Pushing scope: scanner-addr=%p", scanner);
        ns = malloc(sizeof(struct ctf_scanner_scope));
        init_scope(ns, scanner->cs);
        scanner->cs = ns;
@@ -328,7 +326,7 @@ static void pop_scope(struct ctf_scanner *scanner)
 {
        struct ctf_scanner_scope *os;
 
-       BT_LOGV("Popping scope: scanner-addr=%p", scanner);
+       BT_LOGT("Popping scope: scanner-addr=%p", scanner);
        os = scanner->cs;
        scanner->cs = os->parent;
        finalize_scope(os);
@@ -340,7 +338,7 @@ static int lookup_type(struct ctf_scanner_scope *s, const char *id)
        int ret;
 
        ret = GPOINTER_TO_INT(g_hash_table_lookup(s->classes, id));
-       BT_LOGV("Looked up type: scanner-addr=%p, id=\"%s\", ret=%d",
+       BT_LOGT("Looked up type: scanner-addr=%p, id=\"%s\", ret=%d",
                s, id, ret);
        return ret;
 }
@@ -351,20 +349,20 @@ int is_type(struct ctf_scanner *scanner, const char *id)
        struct ctf_scanner_scope *it;
        int ret = 0;
 
-       for (it = scanner->cs; it != NULL; it = it->parent) {
+       for (it = scanner->cs; it; it = it->parent) {
                if (lookup_type(it, id)) {
                        ret = 1;
                        break;
                }
        }
-       BT_LOGV("Found if ID is type: scanner-addr=%p, id=\"%s\", ret=%d",
+       BT_LOGT("Found if ID is type: scanner-addr=%p, id=\"%s\", ret=%d",
                scanner, id, ret);
        return ret;
 }
 
 static void add_type(struct ctf_scanner *scanner, char *id)
 {
-       BT_LOGV("Adding type: scanner-addr=%p, id=\"%s\"",
+       BT_LOGT("Adding type: scanner-addr=%p, id=\"%s\"",
                scanner, id);
        if (lookup_type(scanner->cs, id))
                return;
@@ -945,19 +943,13 @@ static int set_parent_node(struct ctf_node *node,
        return 0;
 }
 
-BT_HIDDEN
+static
 void yyerror(struct ctf_scanner *scanner, yyscan_t yyscanner, const char *str)
 {
        _BT_LOGE_LINENO(yyget_lineno(scanner->scanner),
                "%s: token=\"%s\"", str, yyget_text(scanner->scanner));
 }
 
-BT_HIDDEN
-int yywrap(void)
-{
-       return 1;
-}
-
 #define reparent_error(scanner, str)                           \
 do {                                                           \
        yyerror(scanner, scanner->scanner, YY_("reparent_error: " str)); \
@@ -1042,8 +1034,37 @@ void ctf_scanner_free(struct ctf_scanner *scanner)
        free(scanner);
 }
 
+/*
+ * The bison-provided version of strlen (yystrlen) generates a benign
+ * -Wnull-dereference warning.  That version is used when building on cygwin,
+ * for example, but you can also enable it by hand (to test) by removing the
+ * preprocessor conditional around it.
+ *
+ * Define yystrlen such that it will always use strlen.  As far as we know,
+ * strlen provided by all the platforms we use is reliable.
+ */
+#define yystrlen strlen
+
 %}
 
+/*
+ * This ends up in parser.h and makes sure those who want to include it pass
+ * through parser-wrap.h.
+ */
+%code requires {
+#ifndef ALLOW_INCLUDE_PARSER_H
+# error "Don't include parser.h directly, include parser-wrap.h instead."
+#endif
+}
+
+%code provides {
+       BT_HIDDEN
+       void setstring(struct ctf_scanner *scanner, YYSTYPE *lvalp, const char *src);
+       
+       BT_HIDDEN
+       int import_string(struct ctf_scanner *scanner, YYSTYPE *lvalp, const char *src, char delim);
+}
+
 %define api.pure
        /* %locations */
 %error-verbose
@@ -1305,7 +1326,7 @@ unary_expression:
                                $$->u.unary_expression.type = UNARY_SIGNED_CONSTANT;
                                $$->u.unary_expression.u.signed_constant =
                                        -($$->u.unary_expression.u.unsigned_constant);
-                       } else if ($$->u.unary_expression.type == UNARY_UNSIGNED_CONSTANT) {
+                       } else if ($$->u.unary_expression.type == UNARY_SIGNED_CONSTANT) {
                                $$->u.unary_expression.u.signed_constant =
                                        -($$->u.unary_expression.u.signed_constant);
                        } else {
This page took 0.030967 seconds and 4 git commands to generate.