1 /* 2 * Copyright (C) 2008 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14 * its contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef SourceCode_h 30 #define SourceCode_h 31 32 #include "SourceProvider.h" 33 #include <wtf/RefPtr.h> 34 35 namespace JSC { 36 37 class SourceCode { 38 public: SourceCode()39 SourceCode() 40 : m_provider(0) 41 , m_startChar(0) 42 , m_endChar(0) 43 , m_firstLine(0) 44 { 45 } 46 47 SourceCode(PassRefPtr<SourceProvider> provider, int firstLine = 1) m_provider(provider)48 : m_provider(provider) 49 , m_startChar(0) 50 , m_endChar(m_provider->length()) 51 , m_firstLine(std::max(firstLine, 1)) 52 { 53 } 54 SourceCode(PassRefPtr<SourceProvider> provider,int start,int end,int firstLine)55 SourceCode(PassRefPtr<SourceProvider> provider, int start, int end, int firstLine) 56 : m_provider(provider) 57 , m_startChar(start) 58 , m_endChar(end) 59 , m_firstLine(std::max(firstLine, 1)) 60 { 61 } 62 toString()63 UString toString() const 64 { 65 if (!m_provider) 66 return UString(); 67 return m_provider->getRange(m_startChar, m_endChar); 68 } 69 isNull()70 bool isNull() const { return !m_provider; } provider()71 SourceProvider* provider() const { return m_provider.get(); } firstLine()72 int firstLine() const { return m_firstLine; } startOffset()73 int startOffset() const { return m_startChar; } endOffset()74 int endOffset() const { return m_endChar; } data()75 const UChar* data() const { return m_provider->data() + m_startChar; } length()76 int length() const { return m_endChar - m_startChar; } 77 78 private: 79 RefPtr<SourceProvider> m_provider; 80 int m_startChar; 81 int m_endChar; 82 int m_firstLine; 83 }; 84 85 inline SourceCode makeSource(const UString& source, const UString& url = UString(), int firstLine = 1) 86 { 87 return SourceCode(UStringSourceProvider::create(source, url), firstLine); 88 } 89 90 } // namespace JSC 91 92 #endif // SourceCode_h 93