Skip to content

Instantly share code, notes, and snippets.

@UplinkCoder
Created April 29, 2022 20:49
Show Gist options
  • Select an option

  • Save UplinkCoder/4b51580fafb78d1df0132f2d3fd4071d to your computer and use it in GitHub Desktop.

Select an option

Save UplinkCoder/4b51580fafb78d1df0132f2d3fd4071d to your computer and use it in GitHub Desktop.
#define struct_key 0x6e9213
#define union_key 0x5a08cc
#define enum_key 0x42259d
#define auto_key 0x447fd2
#define void_key 0x4c07ce
#define char_key 0x44aaee
#define short_key 0x5ca984
#define int_key 0x3fff6d
#define long_key 0x46cc25
#define float_key 0x5a71a0
#define double_key 0x636b8e
#define unsigned_key 0x8265da
#define const_key 0x5d7a94
#define volatile_key 0x8a95c7
#define extern_key 0x6569e1
#define for_key 0x3dda5e
#define sizeof_key 0x6222dd
#define return_key 0x6363a6
#define switch_key 0x63e3c4
#define while_key 0x53c644
#define do_key 0x2d63b1
#define typeof_key 0x6affc4
#define inject_key 0x6d00ba
#define eject_key 0x578f00
#define assert_key 0x68b26e
#define typedef_key 0x7f3981
#define case_key 0x4064be
#define goto_key 0x4d7ce2
#define static_key 0x6c68bb
#define inline_key 0x6ef668
#define if_key 0x23826e
#define else_key 0x4b7e6d
#define break_key 0x59983a
#define continue_key 0x83f482
#define until_key 0x525c22
#define yield_key 0x521f59
#define scope_key 0x5a37d9
#define __LINE___key 0x87077a
#define __FUNCTION___key 0xc171a8
#define __METAC___key 0x9f0dd9
#if !defined(__TINYC__) && !defined(_MSC_VER)
# define memcmp __builtin_memcmp
#endif
// void MetaCLexerMatchKeywordIdentifier(metac_token_t* tok, const char* identifier)
{
assert(tok->TokenType == tok_identifier);
switch (tok->IdentifierKey)
{
case struct_key :
if(!memcmp(identifier, "struct", 6))
tok->TokenType = tok_kw_struct;
break;
case union_key :
if(!memcmp(identifier, "union", 5))
tok->TokenType = tok_kw_union;
break;
case enum_key :
if(!memcmp(identifier, "enum", 4))
tok->TokenType = tok_kw_enum;
break;
case auto_key :
if(!memcmp(identifier, "auto", 4))
tok->TokenType = tok_kw_auto;
break;
case void_key :
if(!memcmp(identifier, "void", 4))
tok->TokenType = tok_kw_void;
break;
case char_key :
if(!memcmp(identifier, "char", 4))
tok->TokenType = tok_kw_char;
break;
case short_key :
if(!memcmp(identifier, "short", 5))
tok->TokenType = tok_kw_short;
break;
case int_key :
if(!memcmp(identifier, "int", 3))
tok->TokenType = tok_kw_int;
break;
case long_key :
if(!memcmp(identifier, "long", 4))
tok->TokenType = tok_kw_long;
break;
case float_key :
if(!memcmp(identifier, "float", 5))
tok->TokenType = tok_kw_float;
break;
case double_key :
if(!memcmp(identifier, "double", 6))
tok->TokenType = tok_kw_double;
break;
case unsigned_key :
if(!memcmp(identifier, "unsigned", 8))
tok->TokenType = tok_kw_unsigned;
break;
case const_key :
if(!memcmp(identifier, "const", 5))
tok->TokenType = tok_kw_const;
break;
case volatile_key :
if(!memcmp(identifier, "volatile", 8))
tok->TokenType = tok_kw_volatile;
break;
case extern_key :
if(!memcmp(identifier, "extern", 6))
tok->TokenType = tok_kw_extern;
break;
case for_key :
if(!memcmp(identifier, "for", 3))
tok->TokenType = tok_kw_for;
break;
case sizeof_key :
if(!memcmp(identifier, "sizeof", 6))
tok->TokenType = tok_kw_sizeof;
break;
case return_key :
if(!memcmp(identifier, "return", 6))
tok->TokenType = tok_kw_return;
break;
case switch_key :
if(!memcmp(identifier, "switch", 6))
tok->TokenType = tok_kw_switch;
break;
case while_key :
if(!memcmp(identifier, "while", 5))
tok->TokenType = tok_kw_while;
break;
case do_key :
if(!memcmp(identifier, "do", 2))
tok->TokenType = tok_kw_do;
break;
case typeof_key :
if(!memcmp(identifier, "typeof", 6))
tok->TokenType = tok_kw_typeof;
break;
case inject_key :
if(!memcmp(identifier, "inject", 6))
tok->TokenType = tok_kw_inject;
break;
case eject_key :
if(!memcmp(identifier, "eject", 5))
tok->TokenType = tok_kw_eject;
break;
case assert_key :
if(!memcmp(identifier, "assert", 6))
tok->TokenType = tok_kw_assert;
break;
case typedef_key :
if(!memcmp(identifier, "typedef", 7))
tok->TokenType = tok_kw_typedef;
break;
case case_key :
if(!memcmp(identifier, "case", 4))
tok->TokenType = tok_kw_case;
break;
case goto_key :
if(!memcmp(identifier, "goto", 4))
tok->TokenType = tok_kw_goto;
break;
case static_key :
if(!memcmp(identifier, "static", 6))
tok->TokenType = tok_kw_static;
break;
case inline_key :
if(!memcmp(identifier, "inline", 6))
tok->TokenType = tok_kw_inline;
break;
case if_key :
if(!memcmp(identifier, "if", 2))
tok->TokenType = tok_kw_if;
break;
case else_key :
if(!memcmp(identifier, "else", 4))
tok->TokenType = tok_kw_else;
break;
case break_key :
if(!memcmp(identifier, "break", 5))
tok->TokenType = tok_kw_break;
break;
case continue_key :
if(!memcmp(identifier, "continue", 8))
tok->TokenType = tok_kw_continue;
break;
case until_key :
if(!memcmp(identifier, "until", 5))
tok->TokenType = tok_kw_until;
break;
case yield_key :
if(!memcmp(identifier, "yield", 5))
tok->TokenType = tok_kw_yield;
break;
case scope_key :
if(!memcmp(identifier, "scope", 5))
tok->TokenType = tok_kw_scope;
break;
case __LINE___key :
if(!memcmp(identifier, "__LINE__", 8))
tok->TokenType = tok_kw___LINE__;
break;
case __FUNCTION___key :
if(!memcmp(identifier, "__FUNCTION__", 12))
tok->TokenType = tok_kw___FUNCTION__;
break;
case __METAC___key :
if(!memcmp(identifier, "__METAC__", 9))
tok->TokenType = tok_kw___METAC__;
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment