]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - parser/SourceProvider.h
JavaScriptCore-7600.1.4.15.12.tar.gz
[apple/javascriptcore.git] / parser / SourceProvider.h
index 07da9e043f7fb1a04c5d81788428a913bba987c3..91c1c68652c9e32dcd80718e20e86e695374e178 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2008, 2009, 2012, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -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.
  *
 #ifndef SourceProvider_h
 #define SourceProvider_h
 
-#include "UString.h"
+#include <wtf/PassOwnPtr.h>
 #include <wtf/RefCounted.h>
+#include <wtf/text/TextPosition.h>
+#include <wtf/text/WTFString.h>
 
 namespace JSC {
 
     class SourceProvider : public RefCounted<SourceProvider> {
     public:
-        SourceProvider(const UString& url)
-            : m_url(url)
+        static const intptr_t nullID = 1;
+        
+        JS_EXPORT_PRIVATE SourceProvider(const String& url, const TextPosition& startPosition);
+
+        JS_EXPORT_PRIVATE virtual ~SourceProvider();
+
+        virtual const String& source() const = 0;
+        String getRange(int start, int end) const
         {
+            return source().substringSharingImpl(start, end - start);
         }
-        virtual ~SourceProvider() { }
 
-        virtual UString getRange(int start, int end) const = 0;
-        virtual const UChar* data() const = 0;
-        virtual int length() const = 0;
-        
-        const UString& url() { return m_url; }
-        intptr_t asID() { return reinterpret_cast<intptr_t>(this); }
+        const String& url() { return m_url; }
+        TextPosition startPosition() const { return m_startPosition; }
+        intptr_t asID()
+        {
+            ASSERT(this);
+            if (!this) // Be defensive in release mode.
+                return nullID;
+            if (!m_id)
+                getID();
+            return m_id;
+        }
+
+        bool isValid() const { return m_validated; }
+        void setValid() { m_validated = true; }
 
     private:
-        UString m_url;
+
+        JS_EXPORT_PRIVATE void getID();
+        Vector<size_t>& lineStarts();
+
+        String m_url;
+        TextPosition m_startPosition;
+        bool m_validated : 1;
+        uintptr_t m_id : sizeof(uintptr_t) * 8 - 1;
     };
 
-    class UStringSourceProvider : public SourceProvider {
+    class StringSourceProvider : public SourceProvider {
     public:
-        static PassRefPtr<UStringSourceProvider> create(const UString& source, const UString& url)
+        static PassRefPtr<StringSourceProvider> create(const String& source, const String& url, const TextPosition& startPosition = TextPosition::minimumPosition())
         {
-            return adoptRef(new UStringSourceProvider(source, url));
+            return adoptRef(new StringSourceProvider(source, url, startPosition));
         }
 
-        UString getRange(int start, int end) const { return m_source.substr(start, end - start); }
-        const UChar* data() const { return m_source.data(); }
-        int length() const { return m_source.size(); }
+        virtual const String& source() const override
+        {
+            return m_source;
+        }
 
     private:
-        UStringSourceProvider(const UString& source, const UString& url)
-            : SourceProvider(url)
+        StringSourceProvider(const String& source, const String& url, const TextPosition& startPosition)
+            : SourceProvider(url, startPosition)
             , m_source(source)
         {
         }
 
-        UString m_source;
+        String m_source;
     };
     
 } // namespace JSC