diff --git a/lexer/token_kind.h b/lexer/token_kind.h index 4e76ad8d6f3c..3044a2cae00c 100644 --- a/lexer/token_kind.h +++ b/lexer/token_kind.h @@ -33,11 +33,11 @@ class TokenKind { // constructed using the above factory functions for each unique kind. TokenKind() = delete; - auto operator==(const TokenKind& rhs) const -> bool { - return kind_value == rhs.kind_value; + friend auto operator==(TokenKind lhs, TokenKind rhs) -> bool { + return lhs.kind_value == rhs.kind_value; } - auto operator!=(const TokenKind& rhs) const -> bool { - return kind_value != rhs.kind_value; + friend auto operator!=(TokenKind lhs, TokenKind rhs) -> bool { + return lhs.kind_value != rhs.kind_value; } // Get a friendly name for the token for logging or debugging. diff --git a/lexer/tokenized_buffer.h b/lexer/tokenized_buffer.h index 2ca8233a75db..74e4401ba791 100644 --- a/lexer/tokenized_buffer.h +++ b/lexer/tokenized_buffer.h @@ -47,19 +47,23 @@ class TokenizedBuffer { public: Token() = default; - auto operator==(const Token& rhs) const -> bool { - return index == rhs.index; + friend auto operator==(Token lhs, Token rhs) -> bool { + return lhs.index == rhs.index; } - auto operator!=(const Token& rhs) const -> bool { - return index != rhs.index; + friend auto operator!=(Token lhs, Token rhs) -> bool { + return lhs.index != rhs.index; } - auto operator<(const Token& rhs) const -> bool { return index < rhs.index; } - auto operator<=(const Token& rhs) const -> bool { - return index <= rhs.index; + friend auto operator<(Token lhs, Token rhs) -> bool { + return lhs.index < rhs.index; } - auto operator>(const Token& rhs) const -> bool { return index > rhs.index; } - auto operator>=(const Token& rhs) const -> bool { - return index >= rhs.index; + friend auto operator<=(Token lhs, Token rhs) -> bool { + return lhs.index <= rhs.index; + } + friend auto operator>(Token lhs, Token rhs) -> bool { + return lhs.index > rhs.index; + } + friend auto operator>=(Token lhs, Token rhs) -> bool { + return lhs.index >= rhs.index; } private: @@ -85,19 +89,23 @@ class TokenizedBuffer { public: Line() = default; - auto operator==(const Line& rhs) const -> bool { - return index == rhs.index; + friend auto operator==(Line lhs, Line rhs) -> bool { + return lhs.index == rhs.index; } - auto operator!=(const Line& rhs) const -> bool { - return index != rhs.index; + friend auto operator!=(Line lhs, Line rhs) -> bool { + return lhs.index != rhs.index; } - auto operator<(const Line& rhs) const -> bool { return index < rhs.index; } - auto operator<=(const Line& rhs) const -> bool { - return index <= rhs.index; + friend auto operator<(Line lhs, Line rhs) -> bool { + return lhs.index < rhs.index; } - auto operator>(const Line& rhs) const -> bool { return index > rhs.index; } - auto operator>=(const Line& rhs) const -> bool { - return index >= rhs.index; + friend auto operator<=(Line lhs, Line rhs) -> bool { + return lhs.index <= rhs.index; + } + friend auto operator>(Line lhs, Line rhs) -> bool { + return lhs.index > rhs.index; + } + friend auto operator>=(Line lhs, Line rhs) -> bool { + return lhs.index >= rhs.index; } private: @@ -125,11 +133,11 @@ class TokenizedBuffer { // Most normal APIs are provided by the `TokenizedBuffer`, we just support // basic comparison operations. - auto operator==(const Identifier& rhs) const -> bool { - return index == rhs.index; + friend auto operator==(Identifier lhs, Identifier rhs) -> bool { + return lhs.index == rhs.index; } - auto operator!=(const Identifier& rhs) const -> bool { - return index != rhs.index; + friend auto operator!=(Identifier lhs, Identifier rhs) -> bool { + return lhs.index != rhs.index; } private: diff --git a/parser/parse_node_kind.h b/parser/parse_node_kind.h index c9c1eec4a47f..90f7f4a1d29b 100644 --- a/parser/parse_node_kind.h +++ b/parser/parse_node_kind.h @@ -44,11 +44,11 @@ class ParseNodeKind { // constructed using the above factory functions for each unique kind. ParseNodeKind() = delete; - auto operator==(const ParseNodeKind& rhs) const -> bool { - return kind == rhs.kind; + friend auto operator==(ParseNodeKind lhs, ParseNodeKind rhs) -> bool { + return lhs.kind == rhs.kind; } - auto operator!=(const ParseNodeKind& rhs) const -> bool { - return kind != rhs.kind; + friend auto operator!=(ParseNodeKind lhs, ParseNodeKind rhs) -> bool { + return lhs.kind != rhs.kind; } // Gets a friendly name for the token for logging or debugging.