Reviewers: Lasse Reichstein,
Message:
Please take a look.
Description:
Ignore flags with arguments in preparser-process.
Currently, preparser-process crashes when given flags with arguments (e.g.
--gc_interval 10). It can be fixed by ignoring everything in the command
line
except the "throws" command and its immediate arguments. This assumes that
no
flags appear between "throws" and its arguments.
TEST=make ia32.release.check TESTFLAGS="preparser --special-command=\"@
--gc_interval 10\""
Please review this at http://codereview.chromium.org/8268004/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M preparser/preparser-process.cc
Index: preparser/preparser-process.cc
diff --git a/preparser/preparser-process.cc b/preparser/preparser-process.cc
index
e67851cbd4bb7b943371c7aa6673ef3c191b3b39..961e1d2ba44048864538da82bcf94d8f4610dd16
100644
--- a/preparser/preparser-process.cc
+++ b/preparser/preparser-process.cc
@@ -267,36 +267,23 @@ void CheckException(v8::PreParserData* data,
ExceptionExpectation ParseExpectation(int argc, const char* argv[]) {
+ // Parse ["throws" [<exn-type> [<start> [<end>]]]].
ExceptionExpectation expects;
-
- // Parse exception expectations from (the remainder of) the command line.
int arg_index = 0;
- // Skip any flags.
- while (argc > arg_index && IsFlag(argv[arg_index])) arg_index++;
+ while (argc > arg_index && strncmp("throws", argv[arg_index], 7))
+ ++arg_index;
if (argc > arg_index) {
- if (strncmp("throws", argv[arg_index], 7)) {
- // First argument after filename, if present, must be the verbatim
- // "throws", marking that the preparsing should fail with an
exception.
- fail(NULL, "ERROR: Extra arguments not prefixed by \"throws\".\n");
- }
expects.throws = true;
- do {
- arg_index++;
- } while (argc > arg_index && IsFlag(argv[arg_index]));
- if (argc > arg_index) {
- // Next argument is the exception type identifier.
- expects.type = argv[arg_index];
- do {
- arg_index++;
- } while (argc > arg_index && IsFlag(argv[arg_index]));
- if (argc > arg_index) {
- expects.beg_pos = atoi(argv[arg_index]); // NOLINT
- do {
- arg_index++;
- } while (argc > arg_index && IsFlag(argv[arg_index]));
- if (argc > arg_index) {
- expects.end_pos = atoi(argv[arg_index]); // NOLINT
- }
+ ++arg_index;
+ if (argc == arg_index || IsFlag(argv[arg_index]))
+ fail(NULL, "ERROR: exception type must follow 'throws'.\n");
+ expects.type = argv[arg_index];
+ ++arg_index;
+ if (argc > arg_index && !IsFlag(argv[arg_index])) {
+ expects.beg_pos = atoi(argv[arg_index]); // NOLINT
+ ++arg_index;
+ if (argc > arg_index && !IsFlag(argv[arg_index])) {
+ expects.end_pos = atoi(argv[arg_index]); // NOLINT
}
}
}
@@ -309,6 +296,7 @@ int main(int argc, const char* argv[]) {
// Format: preparser (<scriptfile> | -e "<source>")
// ["throws" [<exn-type> [<start> [<end>]]]]
// Any flags (except an initial -s) are ignored.
+ // Flags must not separate "throws" and its arguments.
// Check for mandatory filename argument.
int arg_index = 1;
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev