blob: cbd016ff45ad3208380d4e7dfba74de62b5b0715 [file] [log] [blame]
// Copyright 2023 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.
#ifndef V8_COMMON_STREAMING_HELPER_H_
#define V8_COMMON_STREAMING_HELPER_H_
#include "include/v8-script.h"
namespace v8 {
namespace internal {
class TestSourceStream : public v8::ScriptCompiler::ExternalSourceStream {
public:
explicit TestSourceStream(const char** chunks) : chunks_(chunks), index_(0) {}
size_t GetMoreData(const uint8_t** src) override {
// Unlike in real use cases, this function will never block.
if (chunks_[index_] == nullptr) {
return 0;
}
// Copy the data, since the caller takes ownership of it.
size_t len = strlen(chunks_[index_]);
// We don't need to zero-terminate since we return the length.
uint8_t* copy = new uint8_t[len];
memcpy(copy, chunks_[index_], len);
*src = copy;
++index_;
return len;
}
// Helper for constructing a string from chunks (the compilation needs it
// too).
static char* FullSourceString(const char** chunks) {
size_t total_len = 0;
for (size_t i = 0; chunks[i] != nullptr; ++i) {
total_len += strlen(chunks[i]);
}
char* full_string = new char[total_len + 1];
size_t offset = 0;
for (size_t i = 0; chunks[i] != nullptr; ++i) {
size_t len = strlen(chunks[i]);
memcpy(full_string + offset, chunks[i], len);
offset += len;
}
full_string[total_len] = 0;
return full_string;
}
private:
const char** chunks_;
unsigned index_;
};
} // namespace internal
} // namespace v8
#endif // V8_COMMON_STREAMING_HELPER_H_