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);