Req #17101 [Opn->Fbk]: Parse errors involving control structures should indicate the start of it
| From: | levim@php.net | Date: | Wed, 30 Apr 2014 23:03:18 +0000 |
| Subject: | Req #17101 [Opn->Fbk]: Parse errors involving control structures should indicate the start of it | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-185536@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=17101&edit=1
ID: 17101
Updated by: levim@php.net
Reported by: destes at ix dot netcom dot com
Summary: Parse errors involving control structures should
indicate the start of it
-Status: Open
+Status: Feedback
Type: Feature/Change Request
-Package: Feature/Change Request
+Package: *General Issues
-Operating System: All
+Operating System: Irrelevant
-PHP Version: 4.1.2
+PHP Version: Any
Block user comment: N
Private report: N
New Comment:
Is there still interest in this?
Previous Comments:
------------------------------------------------------------------------
[2003-07-13 18:43:37] madsen at sjovedyr dot dk
Just reporting that a } might be missing somewhere would be a great improvement, at least until the
above mentioned solution is implemented...
I've had heaps of ppl asking me what the error in "this line (?>)" was.. :)
------------------------------------------------------------------------
[2002-05-08 18:36:02] destes at ix dot netcom dot com
Reopening issue, see comments.
------------------------------------------------------------------------
[2002-05-08 17:08:41] destes at ix dot netcom dot com
Even providing the start of the If structure that is unclosed - even if it has nested Ifs - would
still provide useful functionality. When in doubt, go with the earliest one. That in itself will
greatly narrow the range of possibilities.
I should also note that in your example, in both possible cases, it is the closing brace for the
FIRST if that is missing. Even if the second one were nested inside the first one, the missing
brace would be for the first If statement, so you could safely report "Parse error: Unclosed If
Structure beginning on line ____" and it would be greatly useful.
I admit that there is no way to determine where the closing brace should go. However, you can (At
the very least) determine the highest level If structure which was never closed - and report that
line.
Please let me know if i'm not making sense, which happens often =)
Thanks for your blindingly-fast reply.
-Steve
------------------------------------------------------------------------
[2002-05-08 14:54:41] sander@php.net
There is no way how PHP can detect it.
Consider the following (bogus) script:
if($foo) {
...
if($bar) {
...
}
How can PHP know which brace is missing?
It can be
if($foo) {
...
}
if($bar) {
...
}
but it can also be
if($foo) {
...
if($bar) {
...
}
}
If you have a good idea how to detect it, please let us hear.
------------------------------------------------------------------------
[2002-05-08 14:36:56] destes at ix dot netcom dot com
A common scripting oversight is to forget to properly close control structures bounded by curly
braces such as if:
if ($var) {
$foo = 1;
$bar = 2;
/* forgot the } */
...
When parsing this, PHP reports that the error occurred on the last line of the script - however many
lines there are. For scripts that run many thousands of lines, and contain hundreds of control
structures, this means a huge amount of time spent going over the entire code looking for the bad
structure.
It occurs to me that PHP should be able to determine where the START of the unended control
structure is, and raise the parse error indicating that line (instead of the last line of the
document). Adding this feature would greatly decrease debug times for people who occasionally make
errors like these.
Thanks,
Steve
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=17101&edit=1