xaizek / zograscope (License: AGPLv3 only) (since 2018-12-07)
Mainly a syntax-aware diff that also provides a number of additional tools.
<root> / src / types.cpp (39131bd86c1edde59f38492a945e2ae7fbb2e564) (2,577B) (mode 100644) [raw]
// Copyright (C) 2017 xaizek <xaizek@posteo.net>
//
// This file is part of zograscope.
//
// zograscope is free software: you can redistribute it and/or modify
// it under the terms of version 3 of the GNU Affero General Public License as
// published by the Free Software Foundation.
//
// zograscope 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with zograscope.  If not, see <http://www.gnu.org/licenses/>.

#include "types.hpp"

#include <cassert>

#include <ostream>

std::ostream &
operator<<(std::ostream &os, Type type)
{
    switch (type) {
        case Type::Virtual:            return (os << "Virtual");
        case Type::Functions:          return (os << "Functions");
        case Type::UserTypes:          return (os << "UserTypes");
        case Type::Identifiers:        return (os << "Identifiers");
        case Type::Jumps:              return (os << "Jumps");
        case Type::Specifiers:         return (os << "Specifiers");
        case Type::Types:              return (os << "Types");
        case Type::LeftBrackets:       return (os << "LeftBrackets");
        case Type::RightBrackets:      return (os << "RightBrackets");
        case Type::Comparisons:        return (os << "Comparisons");
        case Type::Operators:          return (os << "Operators");
        case Type::LogicalOperators:   return (os << "LogicalOperators");
        case Type::Assignments:        return (os << "Assignments");
        case Type::Directives:         return (os << "Directives");
        case Type::Comments:           return (os << "Comments");
        case Type::NonInterchangeable: return (os << "NonInterchangeable");
        case Type::StrConstants:       return (os << "StrConstants");
        case Type::IntConstants:       return (os << "IntConstants");
        case Type::FPConstants:        return (os << "FPConstants");
        case Type::CharConstants:      return (os << "CharConstants");
        case Type::Keywords:           return (os << "Keywords");
        case Type::Other:              return (os << "Other");
    }

    assert(false && "Unhandled enumeration item");
    return (os << "<UNKNOWN:" << static_cast<int>(type) << ">");
}

Type
canonizeType(Type type)
{
    if (type == Type::UserTypes) {
        return Type::Types;
    }

    return type;
}
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/zograscope

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/zograscope

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master