OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 10 matching lines...) Expand all Loading... |
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | 27 |
28 #ifndef PREPARSER_H | 28 #ifndef PREPARSER_H |
29 #define PREPARSER_H | 29 #define PREPARSER_H |
30 | 30 |
| 31 #include "v8.h" |
31 #include "v8stdint.h" | 32 #include "v8stdint.h" |
32 | 33 |
33 #ifdef _WIN32 | |
34 | |
35 // Setup for Windows DLL export/import. When building the V8 DLL the | |
36 // BUILDING_V8_SHARED needs to be defined. When building a program which uses | |
37 // the V8 DLL USING_V8_SHARED needs to be defined. When either building the V8 | |
38 // static library or building a program which uses the V8 static library neither | |
39 // BUILDING_V8_SHARED nor USING_V8_SHARED should be defined. | |
40 #if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) | |
41 #error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ | |
42 build configuration to ensure that at most one of these is set | |
43 #endif | |
44 | |
45 #ifdef BUILDING_V8_SHARED | |
46 #define V8EXPORT __declspec(dllexport) | |
47 #elif USING_V8_SHARED | |
48 #define V8EXPORT __declspec(dllimport) | |
49 #else | |
50 #define V8EXPORT | |
51 #endif // BUILDING_V8_SHARED | |
52 | |
53 #else // _WIN32 | |
54 | |
55 // Setup for Linux shared library export. There is no need to distinguish | |
56 // between building or using the V8 shared library, but we should not | |
57 // export symbols when we are building a static library. | |
58 #if defined(__GNUC__) && ((__GNUC__ >= 4) || \ | |
59 (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(V8_SHARED) | |
60 #define V8EXPORT __attribute__ ((visibility("default"))) | |
61 #else | |
62 #define V8EXPORT | |
63 #endif | |
64 | |
65 #endif // _WIN32 | |
66 | |
67 | |
68 namespace v8 { | 34 namespace v8 { |
69 | 35 |
70 // The result of preparsing is either a stack overflow error, or an opaque | 36 // The result of preparsing is either a stack overflow error, or an opaque |
71 // blob of data that can be passed back into the parser. | 37 // blob of data that can be passed back into the parser. |
72 class V8EXPORT PreParserData { | 38 class V8_EXPORT PreParserData { |
73 public: | 39 public: |
74 PreParserData(size_t size, const uint8_t* data) | 40 PreParserData(size_t size, const uint8_t* data) |
75 : data_(data), size_(size) { } | 41 : data_(data), size_(size) { } |
76 | 42 |
77 // Create a PreParserData value where stack_overflow reports true. | 43 // Create a PreParserData value where stack_overflow reports true. |
78 static PreParserData StackOverflow() { return PreParserData(0, NULL); } | 44 static PreParserData StackOverflow() { return PreParserData(0, NULL); } |
79 | 45 |
80 // Whether the pre-parser stopped due to a stack overflow. | 46 // Whether the pre-parser stopped due to a stack overflow. |
81 // If this is the case, size() and data() should not be used. | 47 // If this is the case, size() and data() should not be used. |
82 bool stack_overflow() { return size_ == 0u; } | 48 bool stack_overflow() { return size_ == 0u; } |
83 | 49 |
84 // The size of the data in bytes. | 50 // The size of the data in bytes. |
85 size_t size() const { return size_; } | 51 size_t size() const { return size_; } |
86 | 52 |
87 // Pointer to the data. | 53 // Pointer to the data. |
88 const uint8_t* data() const { return data_; } | 54 const uint8_t* data() const { return data_; } |
89 | 55 |
90 private: | 56 private: |
91 const uint8_t* const data_; | 57 const uint8_t* const data_; |
92 const size_t size_; | 58 const size_t size_; |
93 }; | 59 }; |
94 | 60 |
95 | 61 |
96 // Interface for a stream of Unicode characters. | 62 // Interface for a stream of Unicode characters. |
97 class V8EXPORT UnicodeInputStream { // NOLINT - Thinks V8EXPORT is class name. | 63 class V8_EXPORT UnicodeInputStream { // NOLINT - V8_EXPORT is not a class name. |
98 public: | 64 public: |
99 virtual ~UnicodeInputStream(); | 65 virtual ~UnicodeInputStream(); |
100 | 66 |
101 // Returns the next Unicode code-point in the input, or a negative value when | 67 // Returns the next Unicode code-point in the input, or a negative value when |
102 // there is no more input in the stream. | 68 // there is no more input in the stream. |
103 virtual int32_t Next() = 0; | 69 virtual int32_t Next() = 0; |
104 }; | 70 }; |
105 | 71 |
106 | 72 |
107 // Preparse a JavaScript program. The source code is provided as a | 73 // Preparse a JavaScript program. The source code is provided as a |
108 // UnicodeInputStream. The max_stack_size limits the amount of stack | 74 // UnicodeInputStream. The max_stack_size limits the amount of stack |
109 // space that the preparser is allowed to use. If the preparser uses | 75 // space that the preparser is allowed to use. If the preparser uses |
110 // more stack space than the limit provided, the result's stack_overflow() | 76 // more stack space than the limit provided, the result's stack_overflow() |
111 // method will return true. Otherwise the result contains preparser | 77 // method will return true. Otherwise the result contains preparser |
112 // data that can be used by the V8 parser to speed up parsing. | 78 // data that can be used by the V8 parser to speed up parsing. |
113 PreParserData V8EXPORT Preparse(UnicodeInputStream* input, | 79 PreParserData V8_EXPORT Preparse(UnicodeInputStream* input, |
114 size_t max_stack_size); | 80 size_t max_stack_size); |
115 | 81 |
116 } // namespace v8. | 82 } // namespace v8. |
117 | 83 |
118 #undef V8EXPORT | |
119 | |
120 #endif // PREPARSER_H | 84 #endif // PREPARSER_H |
OLD | NEW |