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.hpp (4fc0ed9c8c8603212b10bb770f8881ea63614134) (2,741B) (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/>.

#ifndef ZOGRASCOPE_TYPES_HPP_
#define ZOGRASCOPE_TYPES_HPP_

#include <cstdint>

#include <iosfwd>

enum class Type : std::uint8_t
{
    Virtual,

    // FUNCTION
    Functions,

    // TYPENAME
    UserTypes,

    // ID
    Identifiers,

    // BREAK
    // CONTINUE
    // GOTO
    Jumps,

    // _ALIGNAS
    // EXTERN
    // STATIC
    // _THREAD_LOCAL
    // _ATOMIC
    // AUTO
    // REGISTER
    // INLINE
    // _NORETURN
    // CONST
    // VOLATILE
    // RESTRICT
    Specifiers,

    // VOID
    // CHAR
    // SHORT
    // INT
    // LONG
    // FLOAT
    // DOUBLE
    // SIGNED
    // UNSIGNED
    // _BOOL
    // _COMPLEX
    Types,

    // '('
    // '{'
    // '['
    LeftBrackets,

    // ')'
    // '}'
    // ']'
    RightBrackets,

    // LTE_OP
    // GTE_OP
    // EQ_OP
    // NE_OP
    // '<'
    // '>'
    Comparisons,

    // INC_OP
    // DEC_OP
    // LSH_OP
    // RSH_OP
    // '&'
    // '|'
    // '^'
    // '*'
    // '/'
    // '%'
    // '+'
    // '-'
    // '~'
    // '!'
    Operators,

    // AND_OP
    // OR_OP
    LogicalOperators,

    // '='
    // TIMESEQ_OP
    // DIVEQ_OP
    // MODEQ_OP
    // PLUSEQ_OP
    // MINUSEQ_OP
    // LSHIFTEQ_OP
    // RSHIFTEQ_OP
    // ANDEQ_OP
    // XOREQ_OP
    // OREQ_OP
    Assignments,

    // DIRECTIVE
    Directives,

    // SLCOMMENT
    // MLCOMMENT
    Comments,

    // SLIT
    StrConstants,
    // ICONST
    IntConstants,
    // FCONST
    FPConstants,
    // CHCONST
    CharConstants,

    // This is a separator, all types below are not interchangeable.
    NonInterchangeable,

    // DEFAULT
    // RETURN
    // SIZEOF
    // _ALIGNOF
    // _GENERIC
    // DOTS
    // _STATIC_ASSERT
    // IF
    // ELSE
    // SWITCH
    // WHILE
    // DO
    // FOR
    // CASE
    // TYPEDEF
    // STRUCT
    // UNION
    // ENUM
    Keywords,

    // '?'
    // ':'
    // ';'
    // '.'
    // ','
    // ARR_OP
    Other,
};

std::ostream & operator<<(std::ostream &os, Type type);

Type canonizeType(Type type);

#endif // ZOGRASCOPE_TYPES_HPP_
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