[kelbt-users] [(maybe) bug fix + patch] resolve included files relative to current '.kl'/'.kh' file
Adrian Thurston
thurston at complang.org
Fri Jan 23 16:50:26 UTC 2009
Hi Elijah, I just committed this (refactored for coding style consistency).
Cheers,
Adrian
Elijah Epifanov wrote:
> diff -Naur klscan.old.rl klscan.rl
> --- klscan.old.rl 2008-10-07 03:42:24.000000000 +0400
> +++ klscan.rl 2009-01-15 01:31:23.000000000 +0300
> @@ -181,15 +181,30 @@
> //cout << "INCLUDE STATEMENT " << includeFileName << endl;
>
> /* Open the input file for reading. */
> - ifstream *inFile = new ifstream( includeFileName );
> + char *completeFileName = (char*) malloc(strlen(includeFileName) +
> strlen(fileName) + 2);
> + char *lastSlash = strrchr(fileName, '/');
> + if (lastSlash == NULL) {
> + free(completeFileName);
> + completeFileName = includeFileName;
> + } else {
> + memcpy(completeFileName, fileName, lastSlash - fileName);
> + completeFileName[lastSlash - fileName] = '/';
> + strcpy(completeFileName + (lastSlash - fileName) + 1, includeFileName);
> + }
> +
> +
> + ifstream *inFile = new ifstream( completeFileName );
> istream *inStream = inFile;
> if ( ! inFile->is_open() )
> - error() << "include: could not open " << includeFileName << " for
> reading" << endl;
> + error() << "include: could not open " << completeFileName << " for
> reading" << endl;
>
> - Scanner subScanner( includeFileName, *inStream, parserDict,
> include_depth+1 );
> + Scanner subScanner( completeFileName, *inStream, parserDict,
> include_depth+1 );
> subScanner.do_scan();
>
> delete inFile;
> + if (completeFileName != includeFileName) {
> + free(completeFileName);
> + }
> }
>
> action handle_write
>
>
> ===================================
>
> I needed this because I use scons build system, it invokes kelbt like this:
> $ kelbt build/module_parser.kl -o build/module_parser.cpp
>
> ps: diff against 0.13 version
>
> _______________________________________________
> kelbt-users mailing list
> kelbt-users at complang.org
> http://www.complang.org/mailman/listinfo/kelbt-users
More information about the kelbt-users
mailing list