diff options
author | Christian Parpart <christian@ethereum.org> | 2018-11-14 21:59:30 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2018-11-22 02:58:12 +0800 |
commit | 87821c53c3a73d3e35a0e50a7c159d9aa5d6b253 (patch) | |
tree | d0335db1bfe77f91168e14599e943105b7c9a2c3 /libevmasm/SourceLocation.h | |
parent | d47707abaddfd6820d8ff1f9ec5ec0d2a61ee622 (diff) | |
download | dexon-solidity-87821c53c3a73d3e35a0e50a7c159d9aa5d6b253.tar dexon-solidity-87821c53c3a73d3e35a0e50a7c159d9aa5d6b253.tar.gz dexon-solidity-87821c53c3a73d3e35a0e50a7c159d9aa5d6b253.tar.bz2 dexon-solidity-87821c53c3a73d3e35a0e50a7c159d9aa5d6b253.tar.lz dexon-solidity-87821c53c3a73d3e35a0e50a7c159d9aa5d6b253.tar.xz dexon-solidity-87821c53c3a73d3e35a0e50a7c159d9aa5d6b253.tar.zst dexon-solidity-87821c53c3a73d3e35a0e50a7c159d9aa5d6b253.zip |
Isolating files shared between Yul- and Solidity language frontend.
Diffstat (limited to 'libevmasm/SourceLocation.h')
-rw-r--r-- | libevmasm/SourceLocation.h | 105 |
1 files changed, 0 insertions, 105 deletions
diff --git a/libevmasm/SourceLocation.h b/libevmasm/SourceLocation.h deleted file mode 100644 index b42c3aa9..00000000 --- a/libevmasm/SourceLocation.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - This file is part of solidity. - - solidity is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - solidity is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with solidity. If not, see <http://www.gnu.org/licenses/>. -*/ -/** - * @author Lefteris Karapetsas <lefteris@ethdev.com> - * @date 2015 - * Represents a location in a source file - */ - -#pragma once - -#include <memory> -#include <string> -#include <ostream> -#include <tuple> -#include <libdevcore/Common.h> // defines noexcept macro for MSVC - -namespace dev -{ - -/** - * Representation of an interval of source positions. - * The interval includes start and excludes end. - */ -struct SourceLocation -{ - SourceLocation(): start(-1), end(-1) { } - SourceLocation(int _start, int _end, std::shared_ptr<std::string const> _sourceName): - start(_start), end(_end), sourceName(_sourceName) { } - SourceLocation(SourceLocation&& _other) noexcept: - start(_other.start), - end(_other.end), - sourceName(std::move(_other.sourceName)) - {} - SourceLocation(SourceLocation const&) = default; - SourceLocation& operator=(SourceLocation const&) = default; - SourceLocation& operator=(SourceLocation&& _other) noexcept - { - start = _other.start; - end = _other.end; - sourceName = std::move(_other.sourceName); - return *this; - } - - bool operator==(SourceLocation const& _other) const - { - return start == _other.start && end == _other.end && - ((!sourceName && !_other.sourceName) || (sourceName && _other.sourceName && *sourceName == *_other.sourceName)); - } - bool operator!=(SourceLocation const& _other) const { return !operator==(_other); } - inline bool operator<(SourceLocation const& _other) const; - inline bool contains(SourceLocation const& _other) const; - inline bool intersects(SourceLocation const& _other) const; - - bool isEmpty() const { return start == -1 && end == -1; } - - int start; - int end; - std::shared_ptr<std::string const> sourceName; -}; - -/// Stream output for Location (used e.g. in boost exceptions). -inline std::ostream& operator<<(std::ostream& _out, SourceLocation const& _location) -{ - if (_location.isEmpty()) - return _out << "NO_LOCATION_SPECIFIED"; - return _out << *_location.sourceName << "[" << _location.start << "," << _location.end << ")"; -} - -bool SourceLocation::operator<(SourceLocation const& _other) const -{ - if (!sourceName || !_other.sourceName) - return std::make_tuple(int(!!sourceName), start, end) < std::make_tuple(int(!!_other.sourceName), _other.start, _other.end); - else - return std::make_tuple(*sourceName, start, end) < std::make_tuple(*_other.sourceName, _other.start, _other.end); -} - -bool SourceLocation::contains(SourceLocation const& _other) const -{ - if (isEmpty() || _other.isEmpty() || ((!sourceName || !_other.sourceName || *sourceName != *_other.sourceName) && (sourceName || _other.sourceName))) - return false; - return start <= _other.start && _other.end <= end; -} - -bool SourceLocation::intersects(SourceLocation const& _other) const -{ - if (isEmpty() || _other.isEmpty() || ((!sourceName || !_other.sourceName || *sourceName != *_other.sourceName) && (sourceName || _other.sourceName))) - return false; - return _other.start < end && start < _other.end; -} - -} |