8da9dbbb54
Adds support for zone allocated (off-heap) ConsumedPreParsingScopeData to enable worker-thread access to PreParsingScopeData during parallel IIFE compile tasks. In order to avoid code-duplication, a templated BaseConsumedPreParsingScopeData is added which implements the logic for decoding the bytestream into scope data. Two implementations of this base class are instantiated for each of the underlying serialized scope date: - ZoneConsumedPreParsedScopeData for exposing ZonePreParsedScopeData - OnHeapConsumedPreParsedScopeData for exposing on-heap PreParsedScopeData The interface for each of these classes is the ConsumedPreParsingScopeData, which exposes the methods required by the parser to deserialize the required data. As a side-cleanup, moved Ucs2CharLength and Utf8LengthHelper implementations to cc file so that we don't get a linker error if one of them are unused by the cc file including the header. BUG=v8:8041 Change-Id: Id502312d32fe4a9ddb6f5d2d9d3e3a9d30b9b27d Reviewed-on: https://chromium-review.googlesource.com/1199462 Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Adam Klein <adamk@chromium.org> Cr-Commit-Position: refs/heads/master@{#55711}
32 lines
907 B
C++
32 lines
907 B
C++
// Copyright 2018 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "test/cctest/unicode-helpers.h"
|
|
|
|
int Ucs2CharLength(unibrow::uchar c) {
|
|
if (c == unibrow::Utf8::kIncomplete || c == unibrow::Utf8::kBufferEmpty) {
|
|
return 0;
|
|
} else if (c < 0xFFFF) {
|
|
return 1;
|
|
} else {
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
int Utf8LengthHelper(const char* s) {
|
|
unibrow::Utf8::Utf8IncrementalBuffer buffer(unibrow::Utf8::kBufferEmpty);
|
|
unibrow::Utf8::State state = unibrow::Utf8::State::kAccept;
|
|
|
|
int length = 0;
|
|
size_t i = 0;
|
|
while (s[i] != '\0') {
|
|
unibrow::uchar tmp =
|
|
unibrow::Utf8::ValueOfIncremental(s[i], &i, &state, &buffer);
|
|
length += Ucs2CharLength(tmp);
|
|
}
|
|
unibrow::uchar tmp = unibrow::Utf8::ValueOfIncrementalFinish(&state);
|
|
length += Ucs2CharLength(tmp);
|
|
return length;
|
|
}
|