gst/parse/: Reverted previous patch as it required to bump the flex dependency to...
authorStefan Kost <ensonic@users.sourceforge.net>
Sun, 30 Jul 2006 18:58:28 +0000 (18:58 +0000)
committerStefan Kost <ensonic@users.sourceforge.net>
Sun, 30 Jul 2006 18:58:28 +0000 (18:58 +0000)
Original commit message from CVS:
* gst/parse/Makefile.am:
* gst/parse/grammar.y:
* gst/parse/parse.l:
Reverted previous patch as it required to bump the flex dependency to
2.5.31, where fc4/5 seem to ship only the ancient 2.5.4a :(

ChangeLog
gst/parse/Makefile.am
gst/parse/grammar.y
gst/parse/parse.l

index 0f4b0d9..510aa38 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2006-07-30  Stefan Kost  <ensonic@users.sf.net>
 
+       * gst/parse/Makefile.am:
+       * gst/parse/grammar.y:
+       * gst/parse/parse.l:
+          Reverted previous patch as it required to bump the flex dependency to
+          2.5.31, where fc4/5 seem to ship only the ancient 2.5.4a :(
+
+2006-07-30  Stefan Kost  <ensonic@users.sf.net>
+
        Patch by: Marc-Andre Lureau <marcandre.lureau@gmail.com>
 
        * gst/parse/Makefile.am:
index 43cf95e..c4431ab 100644 (file)
@@ -18,7 +18,7 @@ libgstparse_la_LIBADD = $(GST_ALL_LIBS)
 noinst_HEADERS = grammar.tab.h
 
 grammar.tab.c grammar.tab.h: grammar.y 
-       $(BISON_PATH) -d -v -p_gst_parse_yy $(srcdir)/grammar.y -o grammar.tab.c && \
+       $(BISON_PATH) -d -v -p_gst_parse__yy $(srcdir)/grammar.y -o grammar.tab.c && \
        mv grammar.tab.c grammar.tab_tmp.c && \
        echo '#ifdef HAVE_CONFIG_H' > grammar.tab_tmp2.c && \
        echo '#include <config.h>' >> grammar.tab_tmp2.c && \
index 7940872..654dc7b 100644 (file)
  */
   
 #define YYERROR_VERBOSE 1
-#define YYLEX_PARAM   scanner
-
-typedef void* yyscan_t;
-
-int _gst_parse_yylex (void * yylval_param , yyscan_t yyscanner);
-int _gst_parse_yylex_init (yyscan_t scanner);
-int _gst_parse_yylex_destroy (yyscan_t scanner);
-struct yy_buffer_state * _gst_parse_yy_scan_string (char* , yyscan_t);
-void _gst_parse_yypush_buffer_state (void * new_buffer ,yyscan_t yyscanner );
-void _gst_parse_yypop_buffer_state (yyscan_t yyscanner );
-
+#define YYPARSE_PARAM graph
 
 #ifdef __GST_PARSE_TRACE
 static guint __strings;
@@ -543,7 +533,8 @@ error:
 }
 
 
-static int yyerror (graph_t *graph, const char *s);
+static int yylex (void *lvalp);
+static int yyerror (const char *s);
 %}
 
 %union {
@@ -574,8 +565,7 @@ static int yyerror (graph_t *graph, const char *s);
 %right '.'
 %left '!' '='
 
-%parse-param { void *scanner, graph_t *graph }
-%pure-parser
+%pure_parser
 
 %start graph
 %%
@@ -800,16 +790,23 @@ graph:            /* NOP */                     { SET_ERROR (((graph_t *) graph)->error, GST_PARSE_ERRO
 
 %%
 
+extern FILE *_gst_parse_yyin;
+int _gst_parse_yylex (YYSTYPE *lvalp);
+
+static int yylex (void *lvalp) {
+    return _gst_parse_yylex ((YYSTYPE*) lvalp);
+}
 
 static int
-yyerror (graph_t *graph, const char *s)
+yyerror (const char *s)
 {
   /* FIXME: This should go into the GError somehow, but how? */
   GST_WARNING ("Error during parsing: %s", s);
   return -1;
 }
 
-
+struct yy_buffer_state * _gst_parse_yy_scan_string (char*);
+void _gst_parse_yy_delete_buffer (struct yy_buffer_state *);
 GstElement *
 _gst_parse_launch (const gchar *str, GError **error)
 {
@@ -818,8 +815,8 @@ _gst_parse_launch (const gchar *str, GError **error)
   GSList *walk;
   GstBin *bin = NULL;
   GstElement *ret;
-  yyscan_t scanner;
-
+  struct yy_buffer_state *buf;
+  
   g_return_val_if_fail (str != NULL, NULL);
 
   g.chain = NULL;
@@ -832,22 +829,21 @@ _gst_parse_launch (const gchar *str, GError **error)
 #endif /* __GST_PARSE_TRACE */
 
   dstr = g_strdup (str);
-  _gst_parse_yylex_init( &scanner );
-  _gst_parse_yy_scan_string (dstr, scanner);
+  buf = _gst_parse_yy_scan_string (dstr);
 
 #ifndef YYDEBUG
   yydebug = 1;
 #endif
 
-  if (yyparse (scanner, &g) != 0) {
+  if (yyparse (&g) != 0) {
     SET_ERROR (error, GST_PARSE_ERROR_SYNTAX,
         "Unrecoverable syntax error while parsing pipeline %s", str);
     
     goto error1;
   }
-  _gst_parse_yylex_destroy( scanner );
   g_free (dstr);
-
+  _gst_parse_yy_delete_buffer (buf);
+  
   GST_CAT_DEBUG (GST_CAT_PIPELINE, "got %u elements and %u links",
       g.chain ? g_slist_length (g.chain->elements) : 0,
       g_slist_length (g.links));
index 03da0d4..9d5c07a 100644 (file)
@@ -32,6 +32,7 @@ PRINT (const char *format, ...)
 }
 #endif
 
+#define YY_DECL int _gst_parse_yylex (YYSTYPE *lvalp)
 %}
 
 _operator [(){}.!,;=]
@@ -64,14 +65,12 @@ _link ("!"[[:space:]]*{_caps}([[:space:]]*(";"[[:space:]]*{_caps})*[[:space:]]*)
 %x value
 %option noyywrap
 %option nounput
-%option reentrant
-%option bison-bridge
 %%
 
 {_assignment} {
     /* "=" */
     PRINT ("ASSIGNMENT: %s", yytext);
-    yylval->s = gst_parse_strdup (yytext);
+    lvalp->s = gst_parse_strdup (yytext);
     BEGIN (INITIAL);
     return ASSIGNMENT;
 }
@@ -79,14 +78,14 @@ _link ("!"[[:space:]]*{_caps}([[:space:]]*(";"[[:space:]]*{_caps})*[[:space:]]*)
 {_padref} {
     yytext++;
     PRINT ("PADREF: %s", yytext);
-    yylval->s = gst_parse_strdup (yytext);
+    lvalp->s = gst_parse_strdup (yytext);
     BEGIN (INITIAL);
     return PADREF;
 }
 
 {_ref} {
     PRINT ("REF: %s", yytext);
-    yylval->s = gst_parse_strdup (yytext);
+    lvalp->s = gst_parse_strdup (yytext);
     BEGIN (INITIAL);
     return REF;
 }
@@ -96,14 +95,14 @@ _link ("!"[[:space:]]*{_caps}([[:space:]]*(";"[[:space:]]*{_caps})*[[:space:]]*)
     while (!g_ascii_isspace (*pos) && (*pos != '.')) pos++;
     *pos = '\0';
     PRINT ("BINREF: %s", yytext);
-    yylval->s = gst_parse_strdup (yytext);
+    lvalp->s = gst_parse_strdup (yytext);
     BEGIN (INITIAL);
     return BINREF;
 }
 
 {_identifier} {
     PRINT ("IDENTIFIER: %s", yytext);
-    yylval->s = gst_parse_strdup (yytext);
+    lvalp->s = gst_parse_strdup (yytext);
     BEGIN (INITIAL);
     return IDENTIFIER;
 }
@@ -114,22 +113,22 @@ _link ("!"[[:space:]]*{_caps}([[:space:]]*(";"[[:space:]]*{_caps})*[[:space:]]*)
     c++;
     if (*c) {
       while (g_ascii_isspace (*c)) c++;
-      c = yylval->s = gst_parse_strdup (c);
+      c = lvalp->s = gst_parse_strdup (c);
       while (*c) c++;
       if (*--c != '!')
        g_assert_not_reached ();
       while (g_ascii_isspace (*--c));
       *++c = '\0';
     } else {
-      yylval->s = NULL;
+      lvalp->s = NULL;
     }
     BEGIN (INITIAL);
     return LINK;
 }
 {_url} {
   PRINT ("URL: %s", yytext);
-  yylval->s = g_strdup (yytext);
-  gst_parse_unescape (yylval->s);
+  lvalp->s = g_strdup (yytext);
+  gst_parse_unescape (lvalp->s);
   BEGIN (INITIAL);
   return PARSE_URL;
 }