[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