Chromium Code Reviews| Index: include/v8-preparser.h |
| diff --git a/include/v8-preparser.h b/include/v8-preparser.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..565b74e1372428584eeaff501b693e777d854ab4 |
| --- /dev/null |
| +++ b/include/v8-preparser.h |
| @@ -0,0 +1,116 @@ |
| +// Copyright 2010 the V8 project authors. All rights reserved. |
| +// Redistribution and use in source and binary forms, with or without |
| +// modification, are permitted provided that the following conditions are |
| +// met: |
| +// |
| +// * Redistributions of source code must retain the above copyright |
| +// notice, this list of conditions and the following disclaimer. |
| +// * Redistributions in binary form must reproduce the above |
| +// copyright notice, this list of conditions and the following |
| +// disclaimer in the documentation and/or other materials provided |
| +// with the distribution. |
| +// * Neither the name of Google Inc. nor the names of its |
| +// contributors may be used to endorse or promote products derived |
| +// from this software without specific prior written permission. |
| +// |
| +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| + |
| +#ifndef PREPARSER_H |
| +#define PREPARSER_H |
| + |
| +#include "v8stdint.h" |
| + |
| +#ifdef _WIN32 |
| + |
| +// Setup for Windows DLL export/import. When building the V8 DLL the |
| +// BUILDING_V8_SHARED needs to be defined. When building a program which uses |
| +// the V8 DLL USING_V8_SHARED needs to be defined. When either building the V8 |
| +// static library or building a program which uses the V8 static library neither |
| +// BUILDING_V8_SHARED nor USING_V8_SHARED should be defined. |
| +#if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) |
| +#error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ |
| + build configuration to ensure that at most one of these is set |
| +#endif |
| + |
| +#ifdef BUILDING_V8_SHARED |
| +#define V8EXPORT __declspec(dllexport) |
| +#elif USING_V8_SHARED |
| +#define V8EXPORT __declspec(dllimport) |
| +#else |
| +#define V8EXPORT |
| +#endif // BUILDING_V8_SHARED |
| + |
| +#else // _WIN32 |
| + |
| +// Setup for Linux shared library export. There is no need to distinguish |
| +// between building or using the V8 shared library, but we should not |
| +// export symbols when we are building a static library. |
| +#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(V8_SHARED) |
| +#define V8EXPORT __attribute__ ((visibility("default"))) |
| +#else // defined(__GNUC__) && (__GNUC__ >= 4) |
| +#define V8EXPORT |
| +#endif // defined(__GNUC__) && (__GNUC__ >= 4) |
| + |
| +#endif // _WIN32 |
| + |
| + |
| +namespace v8 { |
| + |
| + |
| +class PreParserData { |
| + public: |
| + PreParserData(size_t size, const uint8_t* data) |
| + : data_(data), size_(size) { } |
| + // Create a PreParserData value where stack_overflow reports true. |
| + static PreParserData StackOverflow() { return PreParserData(NULL, 0); } |
|
fschneider
2010/11/29 12:27:35
For readability I'd insert new-lines here and afte
Lasse Reichstein
2010/11/29 13:06:40
More whitespacing inserted.
|
| + // Whether the pre-parser stopped due to a stack overflow. |
| + // If this is the case, size() and data() should not be used. |
| + bool stack_overflow() { return size_ == 0u; } |
| + // The size of the data in bytes. |
| + size_t size() const { return size_; } |
| + // Pointer to the data. |
| + const uint8_t* data() const { return data_; } |
| + private: |
| + const uint8_t* const data_; |
| + const size_t size_; |
| +}; |
| + |
| + |
| +// Interface for a stream of Unicode characters. |
| +class UnicodeInputStream { |
| + public: |
| + virtual ~UnicodeInputStream(); |
| + // Returns the next Unicode code-point in the input, or a negative value when |
| + // there is no more input in the stream. |
| + virtual int32_t Next() = 0; |
| + // Pushes a read character back into the stream, so that it will be the next |
| + // to be read by Advance(). The character pushed back must be the most |
| + // recently read character that hasn't already been pushed back (i.e., if |
| + // pushing back more than one character, they must occur in the opposite order |
| + // of the one they were read in). |
| + virtual void PushBack(int32_t ch) = 0; |
| +}; |
| + |
| + |
| +// Preparse a JavaScript program. The source code is provided as a |
| +// UnicodeInputStream. The max_stack_size limits the amount of stack |
| +// space that the preparser is allowed to use. If the preparser uses |
| +// more stack space than the limit provided, the result's stack_overflow() |
| +// method will return true. Otherwise the result contains preparser |
| +// data that can be used by the V8 parser to speed up parsing. |
| +PreParserData V8EXPORT Preparse(UnicodeInputStream* input, |
| + size_t max_stack_size); |
| + |
| +} // namespace v8. |
| + |
| +#endif // PREPARSER_H |