> I'd like to know, if it's possible to create a php function > in C which modify the line number and the php interpreter. > It will be very useful for tools generating php code (lex, > yacc, smarty etc). > For exemple: > echo __FILE__//show parser.php > __setLine(8);__setFile('parser.y'); > toto(); > Will show the following warning: > Call to undefined function: toto() in parser.y at line 9 > There's a Google SoC proposal on writing a preprocessor (to eval #define statements), we could try to scope creap this sort of thing into that....(store the line references in a map then override the error handler to translate file/line based on those map entries)
Whether done in that project or by someone else, this *is* something that can be done by an extension and so should probably stay out of the engine. In fact, you could do it in userspace.... /** Generated code blah blah... */ $yyfoo = $yybar; blah(); /**#line parser.y 123 */ whatever::thingymabob(); $foo = $$yy29188; Then use a set_error_handler() callback: function my_error_handler($errstr, $errno, $errfile, $errline) { list($probedfilename, $probedfileline) = scan_through_file_watching_for_line_directives_and_counting($errfile, $errline); die "Error came from {$probedfilename} on line {$probedfileline}\n"; } Of course, the userspace version doesn't deal with parse errors, but hopefully your code generator isn't generating invalid code... -Sara -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php