summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/parser/SourceProvider.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/parser/SourceProvider.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/JavaScriptCore/parser/SourceProvider.h')
-rw-r--r--Source/JavaScriptCore/parser/SourceProvider.h99
1 files changed, 76 insertions, 23 deletions
diff --git a/Source/JavaScriptCore/parser/SourceProvider.h b/Source/JavaScriptCore/parser/SourceProvider.h
index 72c0de41e..2e68e8202 100644
--- a/Source/JavaScriptCore/parser/SourceProvider.h
+++ b/Source/JavaScriptCore/parser/SourceProvider.h
@@ -10,7 +10,7 @@
* 2. 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.
- * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
@@ -26,37 +26,46 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef SourceProvider_h
-#define SourceProvider_h
+#pragma once
-#include <wtf/PassOwnPtr.h>
+#include "SourceOrigin.h"
#include <wtf/RefCounted.h>
#include <wtf/text/TextPosition.h>
#include <wtf/text/WTFString.h>
namespace JSC {
+ enum class SourceProviderSourceType {
+ Program,
+ Module,
+ WebAssembly,
+ };
+
class SourceProvider : public RefCounted<SourceProvider> {
public:
static const intptr_t nullID = 1;
- JS_EXPORT_PRIVATE SourceProvider(const String& url, const TextPosition& startPosition);
+ JS_EXPORT_PRIVATE SourceProvider(const SourceOrigin&, const String& url, const TextPosition& startPosition, SourceProviderSourceType);
JS_EXPORT_PRIVATE virtual ~SourceProvider();
- virtual const String& source() const = 0;
- String getRange(int start, int end) const
+ virtual unsigned hash() const = 0;
+ virtual StringView source() const = 0;
+ StringView getRange(int start, int end) const
{
- return source().substringSharingImpl(start, end - start);
+ return source().substring(start, end - start);
}
- const String& url() { return m_url; }
+ const SourceOrigin& sourceOrigin() const { return m_sourceOrigin; }
+ const String& url() const { return m_url; }
+ const String& sourceURL() const { return m_sourceURLDirective; }
+ const String& sourceMappingURL() const { return m_sourceMappingURLDirective; }
+
TextPosition startPosition() const { return m_startPosition; }
+ SourceProviderSourceType sourceType() const { return m_sourceType; }
+
intptr_t asID()
{
- ASSERT(this);
- if (!this) // Be defensive in release mode.
- return nullID;
if (!m_id)
getID();
return m_id;
@@ -65,39 +74,83 @@ namespace JSC {
bool isValid() const { return m_validated; }
void setValid() { m_validated = true; }
- private:
+ void setSourceURLDirective(const String& sourceURL) { m_sourceURLDirective = sourceURL; }
+ void setSourceMappingURLDirective(const String& sourceMappingURL) { m_sourceMappingURLDirective = sourceMappingURL; }
+ private:
JS_EXPORT_PRIVATE void getID();
- Vector<size_t>& lineStarts();
+ SourceOrigin m_sourceOrigin;
String m_url;
+ String m_sourceURLDirective;
+ String m_sourceMappingURLDirective;
TextPosition m_startPosition;
+ SourceProviderSourceType m_sourceType;
bool m_validated : 1;
uintptr_t m_id : sizeof(uintptr_t) * 8 - 1;
};
class StringSourceProvider : public SourceProvider {
public:
- static PassRefPtr<StringSourceProvider> create(const String& source, const String& url, const TextPosition& startPosition = TextPosition::minimumPosition())
+ static Ref<StringSourceProvider> create(const String& source, const SourceOrigin& sourceOrigin, const String& url, const TextPosition& startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
+ {
+ return adoptRef(*new StringSourceProvider(source, sourceOrigin, url, startPosition, sourceType));
+ }
+
+ unsigned hash() const override
+ {
+ return m_source.get().hash();
+ }
+
+ StringView source() const override
{
- return adoptRef(new StringSourceProvider(source, url, startPosition));
+ return m_source.get();
}
- virtual const String& source() const override
+ private:
+ StringSourceProvider(const String& source, const SourceOrigin& sourceOrigin, const String& url, const TextPosition& startPosition, SourceProviderSourceType sourceType)
+ : SourceProvider(sourceOrigin, url, startPosition, sourceType)
+ , m_source(source.isNull() ? *StringImpl::empty() : *source.impl())
+ {
+ }
+
+ Ref<StringImpl> m_source;
+ };
+
+#if ENABLE(WEBASSEMBLY)
+ class WebAssemblySourceProvider : public SourceProvider {
+ public:
+ static Ref<WebAssemblySourceProvider> create(const Vector<uint8_t>& data, const SourceOrigin& sourceOrigin, const String& url)
+ {
+ return adoptRef(*new WebAssemblySourceProvider(data, sourceOrigin, url));
+ }
+
+ unsigned hash() const override
+ {
+ return m_source.impl()->hash();
+ }
+
+ StringView source() const override
{
return m_source;
}
+ const Vector<uint8_t>& data() const
+ {
+ return m_data;
+ }
+
private:
- StringSourceProvider(const String& source, const String& url, const TextPosition& startPosition)
- : SourceProvider(url, startPosition)
- , m_source(source)
+ WebAssemblySourceProvider(const Vector<uint8_t>& data, const SourceOrigin& sourceOrigin, const String& url)
+ : SourceProvider(sourceOrigin, url, TextPosition(), SourceProviderSourceType::WebAssembly)
+ , m_source("[WebAssembly source]")
+ , m_data(data)
{
}
String m_source;
+ Vector<uint8_t> m_data;
};
-
-} // namespace JSC
+#endif
-#endif // SourceProvider_h
+} // namespace JSC