View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0000508 | LDMud 3.3 | LPC Compiler/Preprocessor | public | 2007-08-07 03:40 | 2018-01-29 21:57 |
| Reporter | Gnomi | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | resolved | Resolution | fixed | ||
| Platform | i686 | OS | Debian GNU/Linux | OS Version | 3.1 |
| Product Version | 3.3 | ||||
| Fixed in Version | 3.3.717 | ||||
| Summary | 0000508: There is an off-by-one in the linenumbers in include files using auto-include-strings | ||||
| Description | Hi, consider the following files: -- oneoff.c --- #pragma BeginC #include "oneoff.inc" #pragma EndC -- oneoff.inc --- #pragma IncFile And an auto-include hook return "#pragma AutoInc-IncFile\n" or "#pragma AutoInc-CFile\n" depending on whether it is the main file or an included file. These pragmas are just for giving warnings with the current line number. Compiling oneoff.c gives the following result: Warning: w/gnomi/oneoff.c (auto include) line 1: Unknown #pragma 'AutoInc-CFile' Warning: w/gnomi/oneoff.c line 1: Unknown #pragma 'BeginC' Warning: w/gnomi/oneoff.inc (auto include) line 2: Unknown #pragma 'AutoInc-IncFile' Warning: w/gnomi/oneoff.inc line 0: Unknown #pragma 'IncFile' Warning: w/gnomi/oneoff.c line 3: Unknown #pragma 'EndC' The linenumbers in oneoff.c and its auto include string are correct, but not these from oneoff.inc. The auto include string should start at line 1 not 2, and lineoff.inc should start at line 1 and not 0. The linenumber within the auto include string is one too high because the #include statement (in handle_preprocessor_statement()) will increment the linenumber after having handled the include stuff, and add_auto_include is not aware of that. The linenumber within the include file itself is one too low because the linenumbering for include files starts at zero (because the #include will increment it afterwards), for the main file it starts at one. add_auto_include() increments it, to make it correct for include files (because the #incude will now increment the linenumber of the auto include string and not of the include file itself), but the CHAR_EOF handling in yylex1 will decrement it to counteract the incrementation for the main file. I attached a diff that fixes this. I removed the linenumber adjustment in the CHAR_EOF handling and let add_auto_include() increment the linenumber just once, either before or after starting the auto include string depending on whether we are in the main file or include file. Greetings, Gnomi. | ||||
| Tags | No tags attached. | ||||
| Attached Files | incoffbyone.diff (1,698 bytes)
Index: trunk/src/lex.c
===================================================================
--- trunk/src/lex.c (Revision 2314)
+++ trunk/src/lex.c (Arbeitskopie)
@@ -2592,10 +2592,12 @@
if (auto_include_string != NULL)
{
/* The auto include string is handled like a normal include */
- current_loc.line++; /* Make sure to restore to line 1 */
+ if (cur_file != NULL) /* Otherwise we already are at line 1 */
+ current_loc.line++; /* Make sure to restore to line 1 */
(void)start_new_include(-1, auto_include_string
, current_loc.file->name, "auto include", ')');
- current_loc.line++; /* Make sure to start at line 1 */
+ if (cur_file == NULL) /* Otherwise #include will increment it */
+ current_loc.line++; /* Make sure to start at line 1 */
}
} /* add_auto_include() */
@@ -4626,18 +4628,6 @@
current_loc = p->loc;
if (!was_string_source)
current_loc.line++;
- else
- {
- /* 'string' includes are supposed to be inline
- * so correct the line number information to take out
- * the assumed newlines.
- * This has to be done after store_include_end()
- * since that function may remove all line number
- * information since the start of the include.
- */
- current_loc.line -= 1;
- store_line_number_backward(1);
- }
yyin = p->yyin;
saved_char = p->saved_char;
| ||||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2007-08-07 03:40 | Gnomi | New Issue | |
| 2007-08-07 03:40 | Gnomi | File Added: incoffbyone.diff | |
| 2007-11-11 17:39 |
|
Status | new => resolved |
| 2007-11-11 17:39 |
|
Fixed in Version | => 3.3.717 |
| 2007-11-11 17:39 |
|
Resolution | open => fixed |
| 2007-11-11 17:39 |
|
Assigned To | => lars |
| 2007-11-11 17:39 |
|
Note Added: 0000578 | |
| 2009-04-14 12:14 | zesstra | Project | LDMud => LDMud 3.3 |
| 2010-11-16 09:42 |
|
Source_changeset_attached | => ldmud.git master f49af147 |
| 2018-01-29 18:59 |
|
Source_changeset_attached | => ldmud.git master f49af147 |
| 2018-01-29 21:57 |
|
Source_changeset_attached | => ldmud.git master f49af147 |