OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 pushback_buffer_backing_size_(0) { | 62 pushback_buffer_backing_size_(0) { |
63 buffer_cursor_ = buffer_end_ = buffer_ + kPushBackSize; | 63 buffer_cursor_ = buffer_end_ = buffer_ + kPushBackSize; |
64 } | 64 } |
65 | 65 |
66 virtual ~InputStreamUTF16Buffer() { | 66 virtual ~InputStreamUTF16Buffer() { |
67 if (pushback_buffer_backing_ != NULL) { | 67 if (pushback_buffer_backing_ != NULL) { |
68 DeleteArray(pushback_buffer_backing_); | 68 DeleteArray(pushback_buffer_backing_); |
69 } | 69 } |
70 } | 70 } |
71 | 71 |
72 virtual void PushBack(uc16 ch) { | 72 virtual void PushBack(uc32 ch) { |
73 ASSERT(pos_ > 0); | 73 ASSERT(pos_ > 0); |
| 74 if (ch == kEndOfInput) { |
| 75 pos_--; |
| 76 return; |
| 77 } |
74 if (buffer_cursor_ <= pushback_buffer_) { | 78 if (buffer_cursor_ <= pushback_buffer_) { |
75 // No more room in the current buffer to do pushbacks. | 79 // No more room in the current buffer to do pushbacks. |
76 if (pushback_buffer_end_cache_ == NULL) { | 80 if (pushback_buffer_end_cache_ == NULL) { |
77 // We have overflowed the pushback space at the beginning of buffer_. | 81 // We have overflowed the pushback space at the beginning of buffer_. |
78 // Switch to using a separate allocated pushback buffer. | 82 // Switch to using a separate allocated pushback buffer. |
79 if (pushback_buffer_backing_ == NULL) { | 83 if (pushback_buffer_backing_ == NULL) { |
80 // Allocate a buffer the first time we need it. | 84 // Allocate a buffer the first time we need it. |
81 pushback_buffer_backing_ = NewArray<uc16>(kPushBackSize); | 85 pushback_buffer_backing_ = NewArray<uc16>(kPushBackSize); |
82 pushback_buffer_backing_size_ = kPushBackSize; | 86 pushback_buffer_backing_size_ = kPushBackSize; |
83 } | 87 } |
84 pushback_buffer_ = pushback_buffer_backing_; | 88 pushback_buffer_ = pushback_buffer_backing_; |
85 pushback_buffer_end_cache_ = buffer_end_; | 89 pushback_buffer_end_cache_ = buffer_end_; |
86 buffer_end_ = pushback_buffer_backing_ + pushback_buffer_backing_size_; | 90 buffer_end_ = pushback_buffer_backing_ + pushback_buffer_backing_size_; |
87 buffer_cursor_ = buffer_end_ - 1; | 91 buffer_cursor_ = buffer_end_ - 1; |
88 } else { | 92 } else { |
89 // Hit the bottom of the allocated pushback buffer. | 93 // Hit the bottom of the allocated pushback buffer. |
90 // Double the buffer and continue. | 94 // Double the buffer and continue. |
91 uc16* new_buffer = NewArray<uc16>(pushback_buffer_backing_size_ * 2); | 95 uc16* new_buffer = NewArray<uc16>(pushback_buffer_backing_size_ * 2); |
92 memcpy(new_buffer + pushback_buffer_backing_size_, | 96 memcpy(new_buffer + pushback_buffer_backing_size_, |
93 pushback_buffer_backing_, | 97 pushback_buffer_backing_, |
94 pushback_buffer_backing_size_); | 98 pushback_buffer_backing_size_); |
95 DeleteArray(pushback_buffer_backing_); | 99 DeleteArray(pushback_buffer_backing_); |
96 buffer_cursor_ = new_buffer + pushback_buffer_backing_size_; | 100 buffer_cursor_ = new_buffer + pushback_buffer_backing_size_; |
97 pushback_buffer_backing_ = pushback_buffer_ = new_buffer; | 101 pushback_buffer_backing_ = pushback_buffer_ = new_buffer; |
98 buffer_end_ = pushback_buffer_backing_ + pushback_buffer_backing_size_; | 102 buffer_end_ = pushback_buffer_backing_ + pushback_buffer_backing_size_; |
99 } | 103 } |
100 } | 104 } |
101 pushback_buffer_[buffer_cursor_ - pushback_buffer_- 1] = ch; | 105 pushback_buffer_[buffer_cursor_ - pushback_buffer_- 1] = |
| 106 static_cast<uc16>(ch); |
102 pos_--; | 107 pos_--; |
103 } | 108 } |
104 | 109 |
105 protected: | 110 protected: |
106 virtual bool ReadBlock() { | 111 virtual bool ReadBlock() { |
107 if (pushback_buffer_end_cache_ != NULL) { | 112 if (pushback_buffer_end_cache_ != NULL) { |
108 buffer_cursor_ = buffer_; | 113 buffer_cursor_ = buffer_; |
109 buffer_end_ = pushback_buffer_end_cache_; | 114 buffer_end_ = pushback_buffer_end_cache_; |
110 pushback_buffer_end_cache_ = NULL; | 115 pushback_buffer_end_cache_ = NULL; |
111 return buffer_end_ > buffer_cursor_; | 116 return buffer_end_ > buffer_cursor_; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 return PreParserData(size, data); | 204 return PreParserData(size, data); |
200 } | 205 } |
201 | 206 |
202 } // namespace v8. | 207 } // namespace v8. |
203 | 208 |
204 | 209 |
205 // Used by ASSERT macros and other immediate exits. | 210 // Used by ASSERT macros and other immediate exits. |
206 extern "C" void V8_Fatal(const char* file, int line, const char* format, ...) { | 211 extern "C" void V8_Fatal(const char* file, int line, const char* format, ...) { |
207 exit(EXIT_FAILURE); | 212 exit(EXIT_FAILURE); |
208 } | 213 } |
OLD | NEW |