Author: nwellnhof
Date: Thu Mar 22 18:45:38 2012
New Revision: 1303972

URL: http://svn.apache.org/viewvc?rev=1303972&view=rev
Log:
Store source_dir in CFCFile

Modified:
    
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/lib/Clownfish/CFC.xs
    incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/t/403-file.t
    incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.c
    incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.h
    incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c
    
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParseHeader.y
    incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.c
    incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.h

Modified: 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/lib/Clownfish/CFC.xs
URL: 
http://svn.apache.org/viewvc/incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/lib/Clownfish/CFC.xs?rev=1303972&r1=1303971&r2=1303972&view=diff
==============================================================================
--- 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/lib/Clownfish/CFC.xs
 (original)
+++ 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/lib/Clownfish/CFC.xs
 Thu Mar 22 18:45:38 2012
@@ -509,10 +509,11 @@ PPCODE:
 MODULE = Clownfish::CFC   PACKAGE = Clownfish::CFC::Model::File
 
 SV*
-_new(source_class)
+_new(source_class, source_dir)
     const char *source_class;
+    const char *source_dir;
 CODE:
-    CFCFile *self = CFCFile_new(source_class);
+    CFCFile *self = CFCFile_new(source_class, source_dir);
     RETVAL = S_cfcbase_to_perlref(self);
     CFCBase_decref((CFCBase*)self);
 OUTPUT: RETVAL
@@ -2241,12 +2242,13 @@ CODE:
 OUTPUT: RETVAL
 
 SV*
-_parse_file(self, string, source_class)
+_parse_file(self, string, source_class, source_dir)
     CFCParser  *self;
     const char *string;
     const char *source_class;
+    const char *source_dir;
 CODE:
-    CFCFile *got = CFCParser_parse_file(self, string, source_class);
+    CFCFile *got = CFCParser_parse_file(self, string, source_class, 
source_dir);
     RETVAL = S_cfcbase_to_perlref(got);
     CFCBase_decref((CFCBase*)got);
 OUTPUT: RETVAL

Modified: 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/t/403-file.t
URL: 
http://svn.apache.org/viewvc/incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/t/403-file.t?rev=1303972&r1=1303971&r2=1303972&view=diff
==============================================================================
--- incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/t/403-file.t 
(original)
+++ incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/perl/t/403-file.t 
Thu Mar 22 18:45:38 2012
@@ -34,7 +34,7 @@ my $c_block = "__C__\nint foo;\n__END_C_
 
 my $file
     = $parser->_parse_file( "$parcel_declaration\n$class_content\n$c_block",
-    'Stuff::Thing' );
+    'Stuff::Thing', '.' );
 
 is( $file->get_source_class, "Stuff::Thing", "get_source_class" );
 
@@ -68,7 +68,7 @@ isa_ok( $blocks->[0], "Clownfish::CFC::M
 isa_ok( $blocks->[1], "Clownfish::CFC::Model::Class" );
 isa_ok( $blocks->[2], "Clownfish::CFC::Model::CBlock" );
 
-$file = $parser->_parse_file( $class_content, 'Stuff::Thing' );
+$file = $parser->_parse_file( $class_content, 'Stuff::Thing', '.' );
 ($class) = @{ $file->classes };
 ( $foo, $bar ) = @{ $class->member_vars };
 is( $foo->get_type->get_specifier, 'Foo', 'file production resets parcel' );

Modified: incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.c
URL: 
http://svn.apache.org/viewvc/incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.c?rev=1303972&r1=1303971&r2=1303972&view=diff
==============================================================================
--- incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.c 
(original)
+++ incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.c Thu 
Mar 22 18:45:38 2012
@@ -35,6 +35,7 @@ struct CFCFile {
     CFCClass **classes;
     int modified;
     char *source_class;
+    char *source_dir;
     char *guard_name;
     char *guard_start;
     char *guard_close;
@@ -48,17 +49,18 @@ const static CFCMeta CFCFILE_META = {
 };
 
 CFCFile*
-CFCFile_new(const char *source_class) {
+CFCFile_new(const char *source_class, const char *source_dir) {
 
     CFCFile *self = (CFCFile*)CFCBase_allocate(&CFCFILE_META);
-    return CFCFile_init(self, source_class);
+    return CFCFile_init(self, source_class, source_dir);
 }
 
 CFCFile*
-CFCFile_init(CFCFile *self, const char *source_class) {
+CFCFile_init(CFCFile *self, const char *source_class, const char *source_dir) {
     CFCUTIL_NULL_CHECK(source_class);
     self->modified = false;
     self->source_class = CFCUtil_strdup(source_class);
+    self->source_dir   = CFCUtil_strdup(source_dir);
     self->blocks = (CFCBase**)CALLOCATE(1, sizeof(CFCBase*));
     self->classes = (CFCClass**)CALLOCATE(1, sizeof(CFCBase*));
 
@@ -116,6 +118,7 @@ CFCFile_destroy(CFCFile *self) {
     FREEMEM(self->guard_start);
     FREEMEM(self->guard_close);
     FREEMEM(self->source_class);
+    FREEMEM(self->source_dir);
     FREEMEM(self->path_part);
     CFCBase_destroy((CFCBase*)self);
 }
@@ -242,6 +245,11 @@ CFCFile_get_source_class(CFCFile *self) 
 }
 
 const char*
+CFCFile_get_source_dir(CFCFile *self) {
+    return self->source_dir;
+}
+
+const char*
 CFCFile_guard_name(CFCFile *self) {
     return self->guard_name;
 }

Modified: incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.h
URL: 
http://svn.apache.org/viewvc/incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.h?rev=1303972&r1=1303971&r2=1303972&view=diff
==============================================================================
--- incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.h 
(original)
+++ incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCFile.h Thu 
Mar 22 18:45:38 2012
@@ -39,10 +39,10 @@ struct CFCClass;
  * header file should be 'Foo/Bar.h' within the target include directory.
 */
 CFCFile*
-CFCFile_new(const char *source_class);
+CFCFile_new(const char *source_class, const char *source_dir);
 
 CFCFile*
-CFCFile_init(CFCFile *self, const char *source_class);
+CFCFile_init(CFCFile *self, const char *source_class, const char *source_dir);
 
 void
 CFCFile_destroy(CFCFile *self);
@@ -100,6 +100,9 @@ CFCFile_get_modified(CFCFile *self);
 const char*
 CFCFile_get_source_class(CFCFile *self);
 
+const char*
+CFCFile_get_source_dir(CFCFile *self);
+
 /** Return a string used for an include guard in a C header (e.g.
  * "H_CRUSTACEAN_LOBSTER"), unique per file.
  */

Modified: 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c
URL: 
http://svn.apache.org/viewvc/incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c?rev=1303972&r1=1303971&r2=1303972&view=diff
==============================================================================
--- incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c 
(original)
+++ incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCHierarchy.c 
Thu Mar 22 18:45:38 2012
@@ -206,7 +206,8 @@ S_parse_cf_files(CFCHierarchy *self, con
         // Slurp, parse, add parsed file to pool.
         size_t unused;
         char *content = CFCUtil_slurp_text(source_path, &unused);
-        CFCFile *file = CFCParser_parse_file(self->parser, content, 
source_class);
+        CFCFile *file = CFCParser_parse_file(self->parser, content,
+                                             source_class, source_dir);
         FREEMEM(content);
         if (!file) {
             CFCUtil_die("parser error for %s", source_path);
@@ -282,9 +283,10 @@ int
 S_do_propagate_modified(CFCHierarchy *self, CFCClass *klass, int modified) {
     const char *source_class = CFCClass_get_source_class(klass);
     CFCFile *file = S_fetch_file(self, source_class);
-    size_t cfh_buf_size = CFCFile_path_buf_size(file, self->source);
+    const char *source_dir = CFCFile_get_source_dir(file);
+    size_t cfh_buf_size = CFCFile_path_buf_size(file, source_dir);
     char *source_path = (char*)MALLOCATE(cfh_buf_size);
-    CFCFile_cfh_path(file, source_path, cfh_buf_size, self->source);
+    CFCFile_cfh_path(file, source_path, cfh_buf_size, source_dir);
     size_t h_buf_size = CFCFile_path_buf_size(file, self->dest);
     char *h_path = (char*)MALLOCATE(h_buf_size);
     CFCFile_h_path(file, h_path, h_buf_size, self->dest);

Modified: 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParseHeader.y
URL: 
http://svn.apache.org/viewvc/incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParseHeader.y?rev=1303972&r1=1303971&r2=1303972&view=diff
==============================================================================
--- 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParseHeader.y 
(original)
+++ 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParseHeader.y 
Thu Mar 22 18:45:38 2012
@@ -295,7 +295,8 @@ result ::= file(A).
 
 file(A) ::= FILE_START. /* Pseudo token, not passed by lexer. */
 {
-    A = CFCFile_new(CFCParser_get_source_class(state));
+    A = CFCFile_new(CFCParser_get_source_class(state),
+                    CFCParser_get_source_dir(state));
 }
 file(A) ::= file(B) major_block(C).
 {

Modified: 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.c
URL: 
http://svn.apache.org/viewvc/incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.c?rev=1303972&r1=1303971&r2=1303972&view=diff
==============================================================================
--- incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.c 
(original)
+++ incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.c 
Thu Mar 22 18:45:38 2012
@@ -40,6 +40,7 @@ struct CFCParser {
     char *class_name;
     char *class_cnick;
     char *source_class;
+    char *source_dir;
     CFCMemPool *pool;
     CFCParcel  *parcel;
 };
@@ -115,13 +116,16 @@ CFCParser_parse(CFCParser *self, const c
 
 CFCFile*
 CFCParser_parse_file(CFCParser *self, const char *string,
-                     const char *source_class) {
+                     const char *source_class, const char *source_dir) {
     CFCParser_set_parcel(self, NULL);
     self->source_class = CFCUtil_strdup(source_class);
+    self->source_dir   = CFCUtil_strdup(source_dir);
     CFCParseHeader(self->header_parser, CFC_TOKENTYPE_FILE_START, NULL, self);
     CFCFile *result = (CFCFile*)CFCParser_parse(self, string);
     FREEMEM(self->source_class);
+    FREEMEM(self->source_dir);
     self->source_class = NULL;
+    self->source_dir = NULL;
     return result;
 }
 
@@ -209,3 +213,8 @@ CFCParser_get_source_class(CFCParser *se
     return self->source_class;
 }
 
+const char*
+CFCParser_get_source_dir(CFCParser *self) {
+    return self->source_dir;
+}
+

Modified: 
incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.h
URL: 
http://svn.apache.org/viewvc/incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.h?rev=1303972&r1=1303971&r2=1303972&view=diff
==============================================================================
--- incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.h 
(original)
+++ incubator/lucy/branches/LUCY-215-cf-extensions/clownfish/src/CFCParser.h 
Thu Mar 22 18:45:38 2012
@@ -50,7 +50,7 @@ CFCParser_parse(CFCParser *self, const c
 
 struct CFCFile*
 CFCParser_parse_file(CFCParser *self, const char *string,
-                     const char *source_class);
+                     const char *source_class, const char *source_dir);
 
 char*
 CFCParser_dupe(CFCParser *self, const char *string);
@@ -94,6 +94,9 @@ CFCParser_set_source_class(CFCParser *se
 const char*
 CFCParser_get_source_class(CFCParser *self);
 
+const char*
+CFCParser_get_source_dir(CFCParser *self);
+
 /* Routines generated by Lemon. */
 void*
 CFCParseHeaderAlloc(void * (*allocate)(size_t));


Reply via email to