You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2011/10/25 18:34:07 UTC

[lucy-commits] svn commit: r1188764 - in /incubator/lucy/branches/clownfish_lemon/clownfish/src: CFCLexHeader.l CFCParseHeader.y CFCParser.c

Author: marvin
Date: Tue Oct 25 16:34:06 2011
New Revision: 1188764

URL: http://svn.apache.org/viewvc?rev=1188764&view=rev
Log:
Dupe strings in lexer rather than parser.

Modified:
    incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l
    incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y
    incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParser.c

Modified: incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l
URL: http://svn.apache.org/viewvc/incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l?rev=1188764&r1=1188763&r2=1188764&view=diff
==============================================================================
--- incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l (original)
+++ incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCLexHeader.l Tue Oct 25 16:34:06 2011
@@ -19,21 +19,17 @@
     #include "CFCParseHeader.h"
 
     void
-    CFCParseHeader(void *header_parser, int token_type, CFCBase *value,
+    CFCParseHeader(void *header_parser, int token_type, char *value,
                    CFCParser *state);
     /* Invoke Lemon-generated parser. */
     #define PARSE(token_type) \
         CFCParseHeader(CFCParser_current_parser, token_type, NULL, \
             CFCParser_current_state)
 
-    /* Copy yytext and then invoke parser. */
+    /* Dupe yytext and invoke parser. */
     #define SAVE_AND_PARSE(token_type) \
-        S_save_and_parse(token_type)
-    static void
-    S_save_and_parse(int token_type) {
-        CFCParser_set_text(CFCParser_current_state, yytext, yyleng);
-        PARSE(token_type);
-    }
+        CFCParseHeader(CFCParser_current_parser, token_type, \
+			CFCUtil_strdup(yytext), CFCParser_current_state)
 %}
 
 CLASS_NAME_COMPONENT    [A-Z]+[A-Z0-9]*[a-z]+[A-Za-z0-9]*

Modified: incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y
URL: http://svn.apache.org/viewvc/incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y?rev=1188764&r1=1188763&r2=1188764&view=diff
==============================================================================
--- incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y (original)
+++ incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParseHeader.y Tue Oct 25 16:34:06 2011
@@ -194,8 +194,7 @@ S_new_type(CFCParser *state, int flags, 
     else if (type_name_len > 2
              && !strcmp(type_name + type_name_len - 2, "_t")
             ) {
-        type = CFCType_new_arbitrary(CFCParser_get_parcel(),
-                                     CFCParser_get_text(state));
+        type = CFCType_new_arbitrary(CFCParser_get_parcel(), type_name);
     }
     else if (indirection > 0) {
         /* The only remaining possibility is an object type, and we can let
@@ -236,11 +235,6 @@ S_new_type(CFCParser *state, int flags, 
 
 %syntax_error {
     CFCParser_set_errors(state, true);
-    CFCParser_set_text(state, NULL, 0);
-}
-
-%parse_accept {
-    CFCParser_set_text(state, NULL, 0);
 }
 
 %type result                            {CFCBase*}
@@ -656,22 +650,10 @@ scalar_constant(A) ::= TRUE.     { A = C
 scalar_constant(A) ::= FALSE.    { A = CFCUtil_strdup("false"); }
 scalar_constant(A) ::= NULL.     { A = CFCUtil_strdup("NULL"); }
 
-integer_literal(A) ::= INTEGER_LITERAL.
-{
-    A = CFCUtil_strdup(CFCParser_get_text(state));
-}
-float_literal(A) ::= FLOAT_LITERAL.
-{
-    A = CFCUtil_strdup(CFCParser_get_text(state));
-}
-hex_literal(A) ::= HEX_LITERAL.
-{
-    A = CFCUtil_strdup(CFCParser_get_text(state));
-}
-string_literal(A) ::= STRING_LITERAL.
-{
-    A = CFCUtil_strdup(CFCParser_get_text(state));
-}
+hex_literal(A)     ::= HEX_LITERAL(B).     { A = B; }
+float_literal(A)   ::= FLOAT_LITERAL(B).   { A = B; }
+integer_literal(A) ::= INTEGER_LITERAL(B). { A = B; }
+string_literal(A)  ::= STRING_LITERAL(B).  { A = B; }
 
 declarator(A) ::= identifier(B).
 {
@@ -723,14 +705,14 @@ param_list_elems(A) ::= param_variable(B
     FREEMEM(C);
 }
 
-docucomment(A) ::= DOCUCOMMENT.
+docucomment(A) ::= DOCUCOMMENT(B).
 {
-    A = CFCDocuComment_parse(CFCParser_get_text(state));
+    A = CFCDocuComment_parse(B);
 }
 
-identifier(A) ::= IDENTIFIER.
+identifier(A) ::= IDENTIFIER(B).
 {
-    A = CFCUtil_strdup(CFCParser_get_text(state));
+    A = B;
 }
 
 qualified_id(A) ::= identifier(B).
@@ -760,7 +742,7 @@ cblock(A) ::= CBLOCK_START blob(B) CBLOC
     FREEMEM(B);
 }
 
-blob(A) ::= BLOB.
+blob(A) ::= BLOB(B).
 {
-    A = CFCUtil_strdup(CFCParser_get_text(state));
+    A = B;
 }

Modified: incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParser.c
URL: http://svn.apache.org/viewvc/incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParser.c?rev=1188764&r1=1188763&r2=1188764&view=diff
==============================================================================
--- incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParser.c (original)
+++ incubator/lucy/branches/clownfish_lemon/clownfish/src/CFCParser.c Tue Oct 25 16:34:06 2011
@@ -47,8 +47,6 @@ struct CFCParser {
     void *header_parser;
     struct CFCBase *result;
     int errors;
-    char *text;
-    size_t cap;
     char *class_name;
     char *class_cnick;
     char *source_class;
@@ -69,8 +67,6 @@ CFCParser_init(CFCParser *self) {
     }
     self->result       = NULL;
     self->errors       = false;
-    self->text         = NULL;
-    self->cap          = 0;
     self->class_name   = NULL;
     self->class_cnick  = NULL;
     self->source_class = NULL;
@@ -80,7 +76,6 @@ CFCParser_init(CFCParser *self) {
 void
 CFCParser_destroy(CFCParser *self) {
     CFCParseHeaderFree(self->header_parser, free);
-    FREEMEM(self->text);
     FREEMEM(self->class_name);
     FREEMEM(self->class_cnick);
     CFCBase_decref(self->result);
@@ -140,28 +135,6 @@ CFCParser_set_errors(CFCParser *self, in
 }
 
 void
-CFCParser_set_text(CFCParser *self, const char *text, size_t len) {
-    if (text) {
-        if (len >= self->cap) {
-            self->cap = len + 1;
-            self->text = REALLOCATE(self->text, self->cap);
-        }
-        memcpy(self->text, text, len);
-        self->text[len] = '\0';
-    }
-    else {
-        FREEMEM(self->text);
-        self->cap = 0;
-        self->text = NULL;
-    }
-}
-
-const char*
-CFCParser_get_text(CFCParser *self) {
-    return self->text;
-}
-
-void
 CFCParser_set_parcel(CFCParcel *parcel) {
     CFCBase_incref((CFCBase*)parcel);
     CFCBase_decref((CFCBase*)CFCParser_current_parcel);