mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-10-31 06:50:53 -07:00 
			
		
		
		
	Corrected order of Str to how the slice type is defined in Odin and RAD Debugger (my reference on slice types)
This commit is contained in:
		| @@ -75,67 +75,67 @@ enum CodeType : u32 | ||||
| inline Str codetype_to_str( CodeType type ) | ||||
| { | ||||
| 	local_persist Str lookup[61] = { | ||||
| 		{ sizeof( "Invalid" ),             "Invalid"             }, | ||||
| 		{ sizeof( "Untyped" ),             "Untyped"             }, | ||||
| 		{ sizeof( "NewLine" ),             "NewLine"             }, | ||||
| 		{ sizeof( "Comment" ),             "Comment"             }, | ||||
| 		{ sizeof( "Access_Private" ),      "Access_Private"      }, | ||||
| 		{ sizeof( "Access_Protected" ),    "Access_Protected"    }, | ||||
| 		{ sizeof( "Access_Public" ),       "Access_Public"       }, | ||||
| 		{ sizeof( "PlatformAttributes" ),  "PlatformAttributes"  }, | ||||
| 		{ sizeof( "Class" ),               "Class"               }, | ||||
| 		{ sizeof( "Class_Fwd" ),           "Class_Fwd"           }, | ||||
| 		{ sizeof( "Class_Body" ),          "Class_Body"          }, | ||||
| 		{ sizeof( "Constructor" ),         "Constructor"         }, | ||||
| 		{ sizeof( "Constructor_Fwd" ),     "Constructor_Fwd"     }, | ||||
| 		{ sizeof( "Destructor" ),          "Destructor"          }, | ||||
| 		{ sizeof( "Destructor_Fwd" ),      "Destructor_Fwd"      }, | ||||
| 		{ sizeof( "Enum" ),                "Enum"                }, | ||||
| 		{ sizeof( "Enum_Fwd" ),            "Enum_Fwd"            }, | ||||
| 		{ sizeof( "Enum_Body" ),           "Enum_Body"           }, | ||||
| 		{ sizeof( "Enum_Class" ),          "Enum_Class"          }, | ||||
| 		{ sizeof( "Enum_Class_Fwd" ),      "Enum_Class_Fwd"      }, | ||||
| 		{ sizeof( "Execution" ),           "Execution"           }, | ||||
| 		{ sizeof( "Export_Body" ),         "Export_Body"         }, | ||||
| 		{ sizeof( "Extern_Linkage" ),      "Extern_Linkage"      }, | ||||
| 		{ sizeof( "Extern_Linkage_Body" ), "Extern_Linkage_Body" }, | ||||
| 		{ sizeof( "Friend" ),              "Friend"              }, | ||||
| 		{ sizeof( "Function" ),            "Function"            }, | ||||
| 		{ sizeof( "Function_Fwd" ),        "Function_Fwd"        }, | ||||
| 		{ sizeof( "Function_Body" ),       "Function_Body"       }, | ||||
| 		{ sizeof( "Global_Body" ),         "Global_Body"         }, | ||||
| 		{ sizeof( "Module" ),              "Module"              }, | ||||
| 		{ sizeof( "Namespace" ),           "Namespace"           }, | ||||
| 		{ sizeof( "Namespace_Body" ),      "Namespace_Body"      }, | ||||
| 		{ sizeof( "Operator" ),            "Operator"            }, | ||||
| 		{ sizeof( "Operator_Fwd" ),        "Operator_Fwd"        }, | ||||
| 		{ sizeof( "Operator_Member" ),     "Operator_Member"     }, | ||||
| 		{ sizeof( "Operator_Member_Fwd" ), "Operator_Member_Fwd" }, | ||||
| 		{ sizeof( "Operator_Cast" ),       "Operator_Cast"       }, | ||||
| 		{ sizeof( "Operator_Cast_Fwd" ),   "Operator_Cast_Fwd"   }, | ||||
| 		{ sizeof( "Parameters" ),          "Parameters"          }, | ||||
| 		{ sizeof( "Preprocess_Define" ),   "Preprocess_Define"   }, | ||||
| 		{ sizeof( "Preprocess_Include" ),  "Preprocess_Include"  }, | ||||
| 		{ sizeof( "Preprocess_If" ),       "Preprocess_If"       }, | ||||
| 		{ sizeof( "Preprocess_IfDef" ),    "Preprocess_IfDef"    }, | ||||
| 		{ sizeof( "Preprocess_IfNotDef" ), "Preprocess_IfNotDef" }, | ||||
| 		{ sizeof( "Preprocess_ElIf" ),     "Preprocess_ElIf"     }, | ||||
| 		{ sizeof( "Preprocess_Else" ),     "Preprocess_Else"     }, | ||||
| 		{ sizeof( "Preprocess_EndIf" ),    "Preprocess_EndIf"    }, | ||||
| 		{ sizeof( "Preprocess_Pragma" ),   "Preprocess_Pragma"   }, | ||||
| 		{ sizeof( "Specifiers" ),          "Specifiers"          }, | ||||
| 		{ sizeof( "Struct" ),              "Struct"              }, | ||||
| 		{ sizeof( "Struct_Fwd" ),          "Struct_Fwd"          }, | ||||
| 		{ sizeof( "Struct_Body" ),         "Struct_Body"         }, | ||||
| 		{ sizeof( "Template" ),            "Template"            }, | ||||
| 		{ sizeof( "Typedef" ),             "Typedef"             }, | ||||
| 		{ sizeof( "Typename" ),            "Typename"            }, | ||||
| 		{ sizeof( "Union" ),               "Union"               }, | ||||
| 		{ sizeof( "Union_Fwd" ),           "Union_Fwd"           }, | ||||
| 		{ sizeof( "Union_Body" ),          "Union_Body"          }, | ||||
| 		{ sizeof( "Using" ),               "Using"               }, | ||||
| 		{ sizeof( "Using_Namespace" ),     "Using_Namespace"     }, | ||||
| 		{ sizeof( "Variable" ),            "Variable"            }, | ||||
| 		{ "Invalid",             sizeof( "Invalid" )             }, | ||||
| 		{ "Untyped",             sizeof( "Untyped" )             }, | ||||
| 		{ "NewLine",             sizeof( "NewLine" )             }, | ||||
| 		{ "Comment",             sizeof( "Comment" )             }, | ||||
| 		{ "Access_Private",      sizeof( "Access_Private" )      }, | ||||
| 		{ "Access_Protected",    sizeof( "Access_Protected" )    }, | ||||
| 		{ "Access_Public",       sizeof( "Access_Public" )       }, | ||||
| 		{ "PlatformAttributes",  sizeof( "PlatformAttributes" )  }, | ||||
| 		{ "Class",               sizeof( "Class" )               }, | ||||
| 		{ "Class_Fwd",           sizeof( "Class_Fwd" )           }, | ||||
| 		{ "Class_Body",          sizeof( "Class_Body" )          }, | ||||
| 		{ "Constructor",         sizeof( "Constructor" )         }, | ||||
| 		{ "Constructor_Fwd",     sizeof( "Constructor_Fwd" )     }, | ||||
| 		{ "Destructor",          sizeof( "Destructor" )          }, | ||||
| 		{ "Destructor_Fwd",      sizeof( "Destructor_Fwd" )      }, | ||||
| 		{ "Enum",                sizeof( "Enum" )                }, | ||||
| 		{ "Enum_Fwd",            sizeof( "Enum_Fwd" )            }, | ||||
| 		{ "Enum_Body",           sizeof( "Enum_Body" )           }, | ||||
| 		{ "Enum_Class",          sizeof( "Enum_Class" )          }, | ||||
| 		{ "Enum_Class_Fwd",      sizeof( "Enum_Class_Fwd" )      }, | ||||
| 		{ "Execution",           sizeof( "Execution" )           }, | ||||
| 		{ "Export_Body",         sizeof( "Export_Body" )         }, | ||||
| 		{ "Extern_Linkage",      sizeof( "Extern_Linkage" )      }, | ||||
| 		{ "Extern_Linkage_Body", sizeof( "Extern_Linkage_Body" ) }, | ||||
| 		{ "Friend",              sizeof( "Friend" )              }, | ||||
| 		{ "Function",            sizeof( "Function" )            }, | ||||
| 		{ "Function_Fwd",        sizeof( "Function_Fwd" )        }, | ||||
| 		{ "Function_Body",       sizeof( "Function_Body" )       }, | ||||
| 		{ "Global_Body",         sizeof( "Global_Body" )         }, | ||||
| 		{ "Module",              sizeof( "Module" )              }, | ||||
| 		{ "Namespace",           sizeof( "Namespace" )           }, | ||||
| 		{ "Namespace_Body",      sizeof( "Namespace_Body" )      }, | ||||
| 		{ "Operator",            sizeof( "Operator" )            }, | ||||
| 		{ "Operator_Fwd",        sizeof( "Operator_Fwd" )        }, | ||||
| 		{ "Operator_Member",     sizeof( "Operator_Member" )     }, | ||||
| 		{ "Operator_Member_Fwd", sizeof( "Operator_Member_Fwd" ) }, | ||||
| 		{ "Operator_Cast",       sizeof( "Operator_Cast" )       }, | ||||
| 		{ "Operator_Cast_Fwd",   sizeof( "Operator_Cast_Fwd" )   }, | ||||
| 		{ "Parameters",          sizeof( "Parameters" )          }, | ||||
| 		{ "Preprocess_Define",   sizeof( "Preprocess_Define" )   }, | ||||
| 		{ "Preprocess_Include",  sizeof( "Preprocess_Include" )  }, | ||||
| 		{ "Preprocess_If",       sizeof( "Preprocess_If" )       }, | ||||
| 		{ "Preprocess_IfDef",    sizeof( "Preprocess_IfDef" )    }, | ||||
| 		{ "Preprocess_IfNotDef", sizeof( "Preprocess_IfNotDef" ) }, | ||||
| 		{ "Preprocess_ElIf",     sizeof( "Preprocess_ElIf" )     }, | ||||
| 		{ "Preprocess_Else",     sizeof( "Preprocess_Else" )     }, | ||||
| 		{ "Preprocess_EndIf",    sizeof( "Preprocess_EndIf" )    }, | ||||
| 		{ "Preprocess_Pragma",   sizeof( "Preprocess_Pragma" )   }, | ||||
| 		{ "Specifiers",          sizeof( "Specifiers" )          }, | ||||
| 		{ "Struct",              sizeof( "Struct" )              }, | ||||
| 		{ "Struct_Fwd",          sizeof( "Struct_Fwd" )          }, | ||||
| 		{ "Struct_Body",         sizeof( "Struct_Body" )         }, | ||||
| 		{ "Template",            sizeof( "Template" )            }, | ||||
| 		{ "Typedef",             sizeof( "Typedef" )             }, | ||||
| 		{ "Typename",            sizeof( "Typename" )            }, | ||||
| 		{ "Union",               sizeof( "Union" )               }, | ||||
| 		{ "Union_Fwd",           sizeof( "Union_Fwd" )           }, | ||||
| 		{ "Union_Body",          sizeof( "Union_Body" )          }, | ||||
| 		{ "Using",               sizeof( "Using" )               }, | ||||
| 		{ "Using_Namespace",     sizeof( "Using_Namespace" )     }, | ||||
| 		{ "Variable",            sizeof( "Variable" )            }, | ||||
| 	}; | ||||
| 	return lookup[type]; | ||||
| } | ||||
| @@ -143,67 +143,67 @@ inline Str codetype_to_str( CodeType type ) | ||||
| inline Str codetype_to_keyword_str( CodeType type ) | ||||
| { | ||||
| 	local_persist Str lookup[61] = { | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "//" ) - 1,              "//"              }, | ||||
| 		{ sizeof( "private" ) - 1,         "private"         }, | ||||
| 		{ sizeof( "protected" ) - 1,       "protected"       }, | ||||
| 		{ sizeof( "public" ) - 1,          "public"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "class" ) - 1,           "class"           }, | ||||
| 		{ sizeof( "clsss" ) - 1,           "clsss"           }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "enum" ) - 1,            "enum"            }, | ||||
| 		{ sizeof( "enum" ) - 1,            "enum"            }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "enum class" ) - 1,      "enum class"      }, | ||||
| 		{ sizeof( "enum class" ) - 1,      "enum class"      }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "extern" ) - 1,          "extern"          }, | ||||
| 		{ sizeof( "extern" ) - 1,          "extern"          }, | ||||
| 		{ sizeof( "friend" ) - 1,          "friend"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "module" ) - 1,          "module"          }, | ||||
| 		{ sizeof( "namespace" ) - 1,       "namespace"       }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "operator" ) - 1,        "operator"        }, | ||||
| 		{ sizeof( "operator" ) - 1,        "operator"        }, | ||||
| 		{ sizeof( "operator" ) - 1,        "operator"        }, | ||||
| 		{ sizeof( "operator" ) - 1,        "operator"        }, | ||||
| 		{ sizeof( "operator" ) - 1,        "operator"        }, | ||||
| 		{ sizeof( "operator" ) - 1,        "operator"        }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "define" ) - 1,          "define"          }, | ||||
| 		{ sizeof( "include" ) - 1,         "include"         }, | ||||
| 		{ sizeof( "if" ) - 1,              "if"              }, | ||||
| 		{ sizeof( "ifdef" ) - 1,           "ifdef"           }, | ||||
| 		{ sizeof( "ifndef" ) - 1,          "ifndef"          }, | ||||
| 		{ sizeof( "elif" ) - 1,            "elif"            }, | ||||
| 		{ sizeof( "else" ) - 1,            "else"            }, | ||||
| 		{ sizeof( "endif" ) - 1,           "endif"           }, | ||||
| 		{ sizeof( "pragma" ) - 1,          "pragma"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "struct" ) - 1,          "struct"          }, | ||||
| 		{ sizeof( "struct" ) - 1,          "struct"          }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "template" ) - 1,        "template"        }, | ||||
| 		{ sizeof( "typedef" ) - 1,         "typedef"         }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "union" ) - 1,           "union"           }, | ||||
| 		{ sizeof( "union" ) - 1,           "union"           }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ sizeof( "using" ) - 1,           "using"           }, | ||||
| 		{ sizeof( "using namespace" ) - 1, "using namespace" }, | ||||
| 		{ sizeof( "__NA__" ) - 1,          "__NA__"          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "//",              sizeof( "//" ) - 1              }, | ||||
| 		{ "private",         sizeof( "private" ) - 1         }, | ||||
| 		{ "protected",       sizeof( "protected" ) - 1       }, | ||||
| 		{ "public",          sizeof( "public" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "class",           sizeof( "class" ) - 1           }, | ||||
| 		{ "clsss",           sizeof( "clsss" ) - 1           }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "enum",            sizeof( "enum" ) - 1            }, | ||||
| 		{ "enum",            sizeof( "enum" ) - 1            }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "enum class",      sizeof( "enum class" ) - 1      }, | ||||
| 		{ "enum class",      sizeof( "enum class" ) - 1      }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "extern",          sizeof( "extern" ) - 1          }, | ||||
| 		{ "extern",          sizeof( "extern" ) - 1          }, | ||||
| 		{ "friend",          sizeof( "friend" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "module",          sizeof( "module" ) - 1          }, | ||||
| 		{ "namespace",       sizeof( "namespace" ) - 1       }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "operator",        sizeof( "operator" ) - 1        }, | ||||
| 		{ "operator",        sizeof( "operator" ) - 1        }, | ||||
| 		{ "operator",        sizeof( "operator" ) - 1        }, | ||||
| 		{ "operator",        sizeof( "operator" ) - 1        }, | ||||
| 		{ "operator",        sizeof( "operator" ) - 1        }, | ||||
| 		{ "operator",        sizeof( "operator" ) - 1        }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "define",          sizeof( "define" ) - 1          }, | ||||
| 		{ "include",         sizeof( "include" ) - 1         }, | ||||
| 		{ "if",              sizeof( "if" ) - 1              }, | ||||
| 		{ "ifdef",           sizeof( "ifdef" ) - 1           }, | ||||
| 		{ "ifndef",          sizeof( "ifndef" ) - 1          }, | ||||
| 		{ "elif",            sizeof( "elif" ) - 1            }, | ||||
| 		{ "else",            sizeof( "else" ) - 1            }, | ||||
| 		{ "endif",           sizeof( "endif" ) - 1           }, | ||||
| 		{ "pragma",          sizeof( "pragma" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "struct",          sizeof( "struct" ) - 1          }, | ||||
| 		{ "struct",          sizeof( "struct" ) - 1          }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "template",        sizeof( "template" ) - 1        }, | ||||
| 		{ "typedef",         sizeof( "typedef" ) - 1         }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "union",           sizeof( "union" ) - 1           }, | ||||
| 		{ "union",           sizeof( "union" ) - 1           }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 		{ "using",           sizeof( "using" ) - 1           }, | ||||
| 		{ "using namespace", sizeof( "using namespace" ) - 1 }, | ||||
| 		{ "__NA__",          sizeof( "__NA__" ) - 1          }, | ||||
| 	}; | ||||
| 	return lookup[type]; | ||||
| } | ||||
|   | ||||
| @@ -61,53 +61,53 @@ enum Operator : u32 | ||||
| inline Str operator_to_str( Operator op ) | ||||
| { | ||||
| 	local_persist Str lookup[47] = { | ||||
| 		{ sizeof( "INVALID" ),  "INVALID"  }, | ||||
| 		{ sizeof( "=" ),        "="        }, | ||||
| 		{ sizeof( "+=" ),       "+="       }, | ||||
| 		{ sizeof( "-=" ),       "-="       }, | ||||
| 		{ sizeof( "*=" ),       "*="       }, | ||||
| 		{ sizeof( "/=" ),       "/="       }, | ||||
| 		{ sizeof( "%=" ),       "%="       }, | ||||
| 		{ sizeof( "&=" ),       "&="       }, | ||||
| 		{ sizeof( "|=" ),       "|="       }, | ||||
| 		{ sizeof( "^=" ),       "^="       }, | ||||
| 		{ sizeof( "<<=" ),      "<<="      }, | ||||
| 		{ sizeof( ">>=" ),      ">>="      }, | ||||
| 		{ sizeof( "++" ),       "++"       }, | ||||
| 		{ sizeof( "--" ),       "--"       }, | ||||
| 		{ sizeof( "+" ),        "+"        }, | ||||
| 		{ sizeof( "-" ),        "-"        }, | ||||
| 		{ sizeof( "!" ),        "!"        }, | ||||
| 		{ sizeof( "+" ),        "+"        }, | ||||
| 		{ sizeof( "-" ),        "-"        }, | ||||
| 		{ sizeof( "*" ),        "*"        }, | ||||
| 		{ sizeof( "/" ),        "/"        }, | ||||
| 		{ sizeof( "%" ),        "%"        }, | ||||
| 		{ sizeof( "~" ),        "~"        }, | ||||
| 		{ sizeof( "&" ),        "&"        }, | ||||
| 		{ sizeof( "|" ),        "|"        }, | ||||
| 		{ sizeof( "^" ),        "^"        }, | ||||
| 		{ sizeof( "<<" ),       "<<"       }, | ||||
| 		{ sizeof( ">>" ),       ">>"       }, | ||||
| 		{ sizeof( "&&" ),       "&&"       }, | ||||
| 		{ sizeof( "||" ),       "||"       }, | ||||
| 		{ sizeof( "==" ),       "=="       }, | ||||
| 		{ sizeof( "!=" ),       "!="       }, | ||||
| 		{ sizeof( "<" ),        "<"        }, | ||||
| 		{ sizeof( ">" ),        ">"        }, | ||||
| 		{ sizeof( "<=" ),       "<="       }, | ||||
| 		{ sizeof( ">=" ),       ">="       }, | ||||
| 		{ sizeof( "[]" ),       "[]"       }, | ||||
| 		{ sizeof( "*" ),        "*"        }, | ||||
| 		{ sizeof( "&" ),        "&"        }, | ||||
| 		{ sizeof( "->" ),       "->"       }, | ||||
| 		{ sizeof( "->*" ),      "->*"      }, | ||||
| 		{ sizeof( "()" ),       "()"       }, | ||||
| 		{ sizeof( "," ),        ","        }, | ||||
| 		{ sizeof( "new" ),      "new"      }, | ||||
| 		{ sizeof( "new[]" ),    "new[]"    }, | ||||
| 		{ sizeof( "delete" ),   "delete"   }, | ||||
| 		{ sizeof( "delete[]" ), "delete[]" }, | ||||
| 		{ "INVALID",  sizeof( "INVALID" )  }, | ||||
| 		{ "=",        sizeof( "=" )        }, | ||||
| 		{ "+=",       sizeof( "+=" )       }, | ||||
| 		{ "-=",       sizeof( "-=" )       }, | ||||
| 		{ "*=",       sizeof( "*=" )       }, | ||||
| 		{ "/=",       sizeof( "/=" )       }, | ||||
| 		{ "%=",       sizeof( "%=" )       }, | ||||
| 		{ "&=",       sizeof( "&=" )       }, | ||||
| 		{ "|=",       sizeof( "|=" )       }, | ||||
| 		{ "^=",       sizeof( "^=" )       }, | ||||
| 		{ "<<=",      sizeof( "<<=" )      }, | ||||
| 		{ ">>=",      sizeof( ">>=" )      }, | ||||
| 		{ "++",       sizeof( "++" )       }, | ||||
| 		{ "--",       sizeof( "--" )       }, | ||||
| 		{ "+",        sizeof( "+" )        }, | ||||
| 		{ "-",        sizeof( "-" )        }, | ||||
| 		{ "!",        sizeof( "!" )        }, | ||||
| 		{ "+",        sizeof( "+" )        }, | ||||
| 		{ "-",        sizeof( "-" )        }, | ||||
| 		{ "*",        sizeof( "*" )        }, | ||||
| 		{ "/",        sizeof( "/" )        }, | ||||
| 		{ "%",        sizeof( "%" )        }, | ||||
| 		{ "~",        sizeof( "~" )        }, | ||||
| 		{ "&",        sizeof( "&" )        }, | ||||
| 		{ "|",        sizeof( "|" )        }, | ||||
| 		{ "^",        sizeof( "^" )        }, | ||||
| 		{ "<<",       sizeof( "<<" )       }, | ||||
| 		{ ">>",       sizeof( ">>" )       }, | ||||
| 		{ "&&",       sizeof( "&&" )       }, | ||||
| 		{ "||",       sizeof( "||" )       }, | ||||
| 		{ "==",       sizeof( "==" )       }, | ||||
| 		{ "!=",       sizeof( "!=" )       }, | ||||
| 		{ "<",        sizeof( "<" )        }, | ||||
| 		{ ">",        sizeof( ">" )        }, | ||||
| 		{ "<=",       sizeof( "<=" )       }, | ||||
| 		{ ">=",       sizeof( ">=" )       }, | ||||
| 		{ "[]",       sizeof( "[]" )       }, | ||||
| 		{ "*",        sizeof( "*" )        }, | ||||
| 		{ "&",        sizeof( "&" )        }, | ||||
| 		{ "->",       sizeof( "->" )       }, | ||||
| 		{ "->*",      sizeof( "->*" )      }, | ||||
| 		{ "()",       sizeof( "()" )       }, | ||||
| 		{ ",",        sizeof( "," )        }, | ||||
| 		{ "new",      sizeof( "new" )      }, | ||||
| 		{ "new[]",    sizeof( "new[]" )    }, | ||||
| 		{ "delete",   sizeof( "delete" )   }, | ||||
| 		{ "delete[]", sizeof( "delete[]" ) }, | ||||
| 	}; | ||||
| 	return lookup[op]; | ||||
| } | ||||
|   | ||||
| @@ -40,32 +40,32 @@ enum Specifier : u32 | ||||
| inline Str spec_to_str( Specifier type ) | ||||
| { | ||||
| 	local_persist Str lookup[26] = { | ||||
| 		{ sizeof( "INVALID" ),       "INVALID"       }, | ||||
| 		{ sizeof( "consteval" ),     "consteval"     }, | ||||
| 		{ sizeof( "constexpr" ),     "constexpr"     }, | ||||
| 		{ sizeof( "constinit" ),     "constinit"     }, | ||||
| 		{ sizeof( "explicit" ),      "explicit"      }, | ||||
| 		{ sizeof( "extern" ),        "extern"        }, | ||||
| 		{ sizeof( "forceinline" ),   "forceinline"   }, | ||||
| 		{ sizeof( "global" ),        "global"        }, | ||||
| 		{ sizeof( "inline" ),        "inline"        }, | ||||
| 		{ sizeof( "internal" ),      "internal"      }, | ||||
| 		{ sizeof( "local_persist" ), "local_persist" }, | ||||
| 		{ sizeof( "mutable" ),       "mutable"       }, | ||||
| 		{ sizeof( "neverinline" ),   "neverinline"   }, | ||||
| 		{ sizeof( "*" ),             "*"             }, | ||||
| 		{ sizeof( "&" ),             "&"             }, | ||||
| 		{ sizeof( "register" ),      "register"      }, | ||||
| 		{ sizeof( "&&" ),            "&&"            }, | ||||
| 		{ sizeof( "static" ),        "static"        }, | ||||
| 		{ sizeof( "thread_local" ),  "thread_local"  }, | ||||
| 		{ sizeof( "virtual" ),       "virtual"       }, | ||||
| 		{ sizeof( "const" ),         "const"         }, | ||||
| 		{ sizeof( "final" ),         "final"         }, | ||||
| 		{ sizeof( "noexcept" ),      "noexcept"      }, | ||||
| 		{ sizeof( "override" ),      "override"      }, | ||||
| 		{ sizeof( "= 0" ),           "= 0"           }, | ||||
| 		{ sizeof( "volatile" ),      "volatile"      }, | ||||
| 		{ "INVALID",       sizeof( "INVALID" )       }, | ||||
| 		{ "consteval",     sizeof( "consteval" )     }, | ||||
| 		{ "constexpr",     sizeof( "constexpr" )     }, | ||||
| 		{ "constinit",     sizeof( "constinit" )     }, | ||||
| 		{ "explicit",      sizeof( "explicit" )      }, | ||||
| 		{ "extern",        sizeof( "extern" )        }, | ||||
| 		{ "forceinline",   sizeof( "forceinline" )   }, | ||||
| 		{ "global",        sizeof( "global" )        }, | ||||
| 		{ "inline",        sizeof( "inline" )        }, | ||||
| 		{ "internal",      sizeof( "internal" )      }, | ||||
| 		{ "local_persist", sizeof( "local_persist" ) }, | ||||
| 		{ "mutable",       sizeof( "mutable" )       }, | ||||
| 		{ "neverinline",   sizeof( "neverinline" )   }, | ||||
| 		{ "*",             sizeof( "*" )             }, | ||||
| 		{ "&",             sizeof( "&" )             }, | ||||
| 		{ "register",      sizeof( "register" )      }, | ||||
| 		{ "&&",            sizeof( "&&" )            }, | ||||
| 		{ "static",        sizeof( "static" )        }, | ||||
| 		{ "thread_local",  sizeof( "thread_local" )  }, | ||||
| 		{ "virtual",       sizeof( "virtual" )       }, | ||||
| 		{ "const",         sizeof( "const" )         }, | ||||
| 		{ "final",         sizeof( "final" )         }, | ||||
| 		{ "noexcept",      sizeof( "noexcept" )      }, | ||||
| 		{ "override",      sizeof( "override" )      }, | ||||
| 		{ "= 0",           sizeof( "= 0" )           }, | ||||
| 		{ "volatile",      sizeof( "volatile" )      }, | ||||
| 	}; | ||||
| 	return lookup[type]; | ||||
| } | ||||
|   | ||||
| @@ -114,103 +114,103 @@ enum TokType : u32 | ||||
| inline Str toktype_to_str( TokType type ) | ||||
| { | ||||
| 	local_persist Str lookup[] = { | ||||
| 		{ sizeof( "__invalid__" ),         "__invalid__"         }, | ||||
| 		{ sizeof( "private" ),             "private"             }, | ||||
| 		{ sizeof( "protected" ),           "protected"           }, | ||||
| 		{ sizeof( "public" ),              "public"              }, | ||||
| 		{ sizeof( "." ),                   "."                   }, | ||||
| 		{ sizeof( "::" ),                  "::"                  }, | ||||
| 		{ sizeof( "&" ),                   "&"                   }, | ||||
| 		{ sizeof( "&&" ),                  "&&"                  }, | ||||
| 		{ sizeof( ":" ),                   ":"                   }, | ||||
| 		{ sizeof( "[[" ),                  "[["                  }, | ||||
| 		{ sizeof( "]]" ),                  "]]"                  }, | ||||
| 		{ sizeof( "{" ),                   "{"                   }, | ||||
| 		{ sizeof( "}" ),                   "}"                   }, | ||||
| 		{ sizeof( "[" ),                   "["                   }, | ||||
| 		{ sizeof( "]" ),                   "]"                   }, | ||||
| 		{ sizeof( "(" ),                   "("                   }, | ||||
| 		{ sizeof( ")" ),                   ")"                   }, | ||||
| 		{ sizeof( "__comment__" ),         "__comment__"         }, | ||||
| 		{ sizeof( "__comment_end__" ),     "__comment_end__"     }, | ||||
| 		{ sizeof( "__comment_start__" ),   "__comment_start__"   }, | ||||
| 		{ sizeof( "__character__" ),       "__character__"       }, | ||||
| 		{ sizeof( "," ),                   ","                   }, | ||||
| 		{ sizeof( "class" ),               "class"               }, | ||||
| 		{ sizeof( "__attribute__" ),       "__attribute__"       }, | ||||
| 		{ sizeof( "__declspec" ),          "__declspec"          }, | ||||
| 		{ sizeof( "enum" ),                "enum"                }, | ||||
| 		{ sizeof( "extern" ),              "extern"              }, | ||||
| 		{ sizeof( "friend" ),              "friend"              }, | ||||
| 		{ sizeof( "module" ),              "module"              }, | ||||
| 		{ sizeof( "namespace" ),           "namespace"           }, | ||||
| 		{ sizeof( "operator" ),            "operator"            }, | ||||
| 		{ sizeof( "struct" ),              "struct"              }, | ||||
| 		{ sizeof( "template" ),            "template"            }, | ||||
| 		{ sizeof( "typedef" ),             "typedef"             }, | ||||
| 		{ sizeof( "using" ),               "using"               }, | ||||
| 		{ sizeof( "union" ),               "union"               }, | ||||
| 		{ sizeof( "__identifier__" ),      "__identifier__"      }, | ||||
| 		{ sizeof( "import" ),              "import"              }, | ||||
| 		{ sizeof( "export" ),              "export"              }, | ||||
| 		{ sizeof( "__new_line__" ),        "__new_line__"        }, | ||||
| 		{ sizeof( "__number__" ),          "__number__"          }, | ||||
| 		{ sizeof( "__operator__" ),        "__operator__"        }, | ||||
| 		{ sizeof( "#" ),                   "#"                   }, | ||||
| 		{ sizeof( "define" ),              "define"              }, | ||||
| 		{ sizeof( "if" ),                  "if"                  }, | ||||
| 		{ sizeof( "ifdef" ),               "ifdef"               }, | ||||
| 		{ sizeof( "ifndef" ),              "ifndef"              }, | ||||
| 		{ sizeof( "elif" ),                "elif"                }, | ||||
| 		{ sizeof( "else" ),                "else"                }, | ||||
| 		{ sizeof( "endif" ),               "endif"               }, | ||||
| 		{ sizeof( "include" ),             "include"             }, | ||||
| 		{ sizeof( "pragma" ),              "pragma"              }, | ||||
| 		{ sizeof( "__macro_content__" ),   "__macro_content__"   }, | ||||
| 		{ sizeof( "__macro__" ),           "__macro__"           }, | ||||
| 		{ sizeof( "__unsupported__" ),     "__unsupported__"     }, | ||||
| 		{ sizeof( "alignas" ),             "alignas"             }, | ||||
| 		{ sizeof( "const" ),               "const"               }, | ||||
| 		{ sizeof( "consteval" ),           "consteval"           }, | ||||
| 		{ sizeof( "constexpr" ),           "constexpr"           }, | ||||
| 		{ sizeof( "constinit" ),           "constinit"           }, | ||||
| 		{ sizeof( "explicit" ),            "explicit"            }, | ||||
| 		{ sizeof( "extern" ),              "extern"              }, | ||||
| 		{ sizeof( "final" ),               "final"               }, | ||||
| 		{ sizeof( "forceinline" ),         "forceinline"         }, | ||||
| 		{ sizeof( "global" ),              "global"              }, | ||||
| 		{ sizeof( "inline" ),              "inline"              }, | ||||
| 		{ sizeof( "internal" ),            "internal"            }, | ||||
| 		{ sizeof( "local_persist" ),       "local_persist"       }, | ||||
| 		{ sizeof( "mutable" ),             "mutable"             }, | ||||
| 		{ sizeof( "neverinline" ),         "neverinline"         }, | ||||
| 		{ sizeof( "override" ),            "override"            }, | ||||
| 		{ sizeof( "static" ),              "static"              }, | ||||
| 		{ sizeof( "thread_local" ),        "thread_local"        }, | ||||
| 		{ sizeof( "volatile" ),            "volatile"            }, | ||||
| 		{ sizeof( "virtual" ),             "virtual"             }, | ||||
| 		{ sizeof( "*" ),                   "*"                   }, | ||||
| 		{ sizeof( ";" ),                   ";"                   }, | ||||
| 		{ sizeof( "static_assert" ),       "static_assert"       }, | ||||
| 		{ sizeof( "__strbuilder__" ),          "__strbuilder__"          }, | ||||
| 		{ sizeof( "typename" ),            "typename"            }, | ||||
| 		{ sizeof( "unsigned" ),            "unsigned"            }, | ||||
| 		{ sizeof( "signed" ),              "signed"              }, | ||||
| 		{ sizeof( "short" ),               "short"               }, | ||||
| 		{ sizeof( "long" ),                "long"                }, | ||||
| 		{ sizeof( "bool" ),                "bool"                }, | ||||
| 		{ sizeof( "char" ),                "char"                }, | ||||
| 		{ sizeof( "int" ),                 "int"                 }, | ||||
| 		{ sizeof( "double" ),              "double"              }, | ||||
| 		{ sizeof( "__int8" ),              "__int8"              }, | ||||
| 		{ sizeof( "__int16" ),             "__int16"             }, | ||||
| 		{ sizeof( "__int32" ),             "__int32"             }, | ||||
| 		{ sizeof( "__int64" ),             "__int64"             }, | ||||
| 		{ sizeof( "_W64" ),                "_W64"                }, | ||||
| 		{ sizeof( "..." ),                 "..."                 }, | ||||
| 		{ sizeof( "__attrib_start__" ),    "__attrib_start__"    }, | ||||
| 		{ sizeof( "GEN_API_Export_Code" ), "GEN_API_Export_Code" }, | ||||
| 		{ sizeof( "GEN_API_Import_Code" ), "GEN_API_Import_Code" }, | ||||
| 		{ "__invalid__",         sizeof( "__invalid__" )         }, | ||||
| 		{ "private",             sizeof( "private" )             }, | ||||
| 		{ "protected",           sizeof( "protected" )           }, | ||||
| 		{ "public",              sizeof( "public" )              }, | ||||
| 		{ ".",		           sizeof( "." )                   }, | ||||
| 		{ "::",		          sizeof( "::" )                  }, | ||||
| 		{ "&",		           sizeof( "&" )                   }, | ||||
| 		{ "&&",		          sizeof( "&&" )                  }, | ||||
| 		{ ":",		           sizeof( ":" )                   }, | ||||
| 		{ "[[",		          sizeof( "[[" )                  }, | ||||
| 		{ "]]",		          sizeof( "]]" )                  }, | ||||
| 		{ "{",		           sizeof( "{" )                   }, | ||||
| 		{ "}",		           sizeof( "}" )                   }, | ||||
| 		{ "[",		           sizeof( "[" )                   }, | ||||
| 		{ "]",		           sizeof( "]" )                   }, | ||||
| 		{ "(",		           sizeof( "(" )                   }, | ||||
| 		{ ")",		           sizeof( ")" )                   }, | ||||
| 		{ "__comment__",         sizeof( "__comment__" )         }, | ||||
| 		{ "__comment_end__",     sizeof( "__comment_end__" )     }, | ||||
| 		{ "__comment_start__",   sizeof( "__comment_start__" )   }, | ||||
| 		{ "__character__",       sizeof( "__character__" )       }, | ||||
| 		{ ",",		           sizeof( "," )                   }, | ||||
| 		{ "class",               sizeof( "class" )               }, | ||||
| 		{ "__attribute__",       sizeof( "__attribute__" )       }, | ||||
| 		{ "__declspec",          sizeof( "__declspec" )          }, | ||||
| 		{ "enum",                sizeof( "enum" )                }, | ||||
| 		{ "extern",              sizeof( "extern" )              }, | ||||
| 		{ "friend",              sizeof( "friend" )              }, | ||||
| 		{ "module",              sizeof( "module" )              }, | ||||
| 		{ "namespace",           sizeof( "namespace" )           }, | ||||
| 		{ "operator",            sizeof( "operator" )            }, | ||||
| 		{ "struct",              sizeof( "struct" )              }, | ||||
| 		{ "template",            sizeof( "template" )            }, | ||||
| 		{ "typedef",             sizeof( "typedef" )             }, | ||||
| 		{ "using",               sizeof( "using" )               }, | ||||
| 		{ "union",               sizeof( "union" )               }, | ||||
| 		{ "__identifier__",      sizeof( "__identifier__" )      }, | ||||
| 		{ "import",              sizeof( "import" )              }, | ||||
| 		{ "export",              sizeof( "export" )              }, | ||||
| 		{ "__new_line__",        sizeof( "__new_line__" )        }, | ||||
| 		{ "__number__",          sizeof( "__number__" )          }, | ||||
| 		{ "__operator__",        sizeof( "__operator__" )        }, | ||||
| 		{ "#",		           sizeof( "#" )                   }, | ||||
| 		{ "define",              sizeof( "define" )              }, | ||||
| 		{ "if",		          sizeof( "if" )                  }, | ||||
| 		{ "ifdef",               sizeof( "ifdef" )               }, | ||||
| 		{ "ifndef",              sizeof( "ifndef" )              }, | ||||
| 		{ "elif",                sizeof( "elif" )                }, | ||||
| 		{ "else",                sizeof( "else" )                }, | ||||
| 		{ "endif",               sizeof( "endif" )               }, | ||||
| 		{ "include",             sizeof( "include" )             }, | ||||
| 		{ "pragma",              sizeof( "pragma" )              }, | ||||
| 		{ "__macro_content__",   sizeof( "__macro_content__" )   }, | ||||
| 		{ "__macro__",           sizeof( "__macro__" )           }, | ||||
| 		{ "__unsupported__",     sizeof( "__unsupported__" )     }, | ||||
| 		{ "alignas",             sizeof( "alignas" )             }, | ||||
| 		{ "const",               sizeof( "const" )               }, | ||||
| 		{ "consteval",           sizeof( "consteval" )           }, | ||||
| 		{ "constexpr",           sizeof( "constexpr" )           }, | ||||
| 		{ "constinit",           sizeof( "constinit" )           }, | ||||
| 		{ "explicit",            sizeof( "explicit" )            }, | ||||
| 		{ "extern",              sizeof( "extern" )              }, | ||||
| 		{ "final",               sizeof( "final" )               }, | ||||
| 		{ "forceinline",         sizeof( "forceinline" )         }, | ||||
| 		{ "global",              sizeof( "global" )              }, | ||||
| 		{ "inline",              sizeof( "inline" )              }, | ||||
| 		{ "internal",            sizeof( "internal" )            }, | ||||
| 		{ "local_persist",       sizeof( "local_persist" )       }, | ||||
| 		{ "mutable",             sizeof( "mutable" )             }, | ||||
| 		{ "neverinline",         sizeof( "neverinline" )         }, | ||||
| 		{ "override",            sizeof( "override" )            }, | ||||
| 		{ "static",              sizeof( "static" )              }, | ||||
| 		{ "thread_local",        sizeof( "thread_local" )        }, | ||||
| 		{ "volatile",            sizeof( "volatile" )            }, | ||||
| 		{ "virtual",             sizeof( "virtual" )             }, | ||||
| 		{ "*",		           sizeof( "*" )                   }, | ||||
| 		{ ";",		           sizeof( ";" )                   }, | ||||
| 		{ "static_assert",       sizeof( "static_assert" )       }, | ||||
| 		{ "__string__",          sizeof( "__string__" )          }, | ||||
| 		{ "typename",            sizeof( "typename" )            }, | ||||
| 		{ "unsigned",            sizeof( "unsigned" )            }, | ||||
| 		{ "signed",              sizeof( "signed" )              }, | ||||
| 		{ "short",               sizeof( "short" )               }, | ||||
| 		{ "long",                sizeof( "long" )                }, | ||||
| 		{ "bool",                sizeof( "bool" )                }, | ||||
| 		{ "char",                sizeof( "char" )                }, | ||||
| 		{ "int",		         sizeof( "int" )                 }, | ||||
| 		{ "double",              sizeof( "double" )              }, | ||||
| 		{ "__int8",              sizeof( "__int8" )              }, | ||||
| 		{ "__int16",             sizeof( "__int16" )             }, | ||||
| 		{ "__int32",             sizeof( "__int32" )             }, | ||||
| 		{ "__int64",             sizeof( "__int64" )             }, | ||||
| 		{ "_W64",                sizeof( "_W64" )                }, | ||||
| 		{ "...",		         sizeof( "..." )                 }, | ||||
| 		{ "__attrib_start__",    sizeof( "__attrib_start__" )    }, | ||||
| 		{ "GEN_API_Export_Code", sizeof( "GEN_API_Export_Code" ) }, | ||||
| 		{ "GEN_API_Import_Code", sizeof( "GEN_API_Import_Code" ) }, | ||||
| 	}; | ||||
| 	return lookup[type]; | ||||
| } | ||||
| @@ -220,7 +220,7 @@ inline TokType str_to_toktype( Str str ) | ||||
| 	local_persist u32 keymap[Tok_NumTokens]; | ||||
| 	do_once_start for ( u32 index = 0; index < Tok_NumTokens; index++ ) | ||||
| 	{ | ||||
| 		Str enum_str = toktype_to_str( (TokType)index ); | ||||
| 		Str enum_str  = toktype_to_str( (TokType)index ); | ||||
| 		keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1 ); | ||||
| 	} | ||||
| 	do_once_end u32 hash = crc32( str.Ptr, str.Len ); | ||||
|   | ||||
							
								
								
									
										235
									
								
								base/components/gen/etoktype.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								base/components/gen/etoktype.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,235 @@ | ||||
| #ifdef GEN_INTELLISENSE_DIRECTIVES | ||||
| #pragma once | ||||
| #include "components/types.hpp" | ||||
| #endif | ||||
|  | ||||
| // This file was generated automatially by gencpp's bootstrap.cpp (See: https://github.com/Ed94/gencpp) | ||||
|  | ||||
| GEN_NS_PARSER_BEGIN | ||||
|  | ||||
| #define GEN_DEFINE_ATTRIBUTE_TOKENS Entry( Tok_Attribute_API_Export, "GEN_API_Export_Code" ) Entry( Tok_Attribute_API_Import, "GEN_API_Import_Code" ) | ||||
|  | ||||
| enum TokType : u32 | ||||
| { | ||||
| 	Tok_Invalid, | ||||
| 	Tok_Access_Private, | ||||
| 	Tok_Access_Protected, | ||||
| 	Tok_Access_Public, | ||||
| 	Tok_Access_MemberSymbol, | ||||
| 	Tok_Access_StaticSymbol, | ||||
| 	Tok_Ampersand, | ||||
| 	Tok_Ampersand_DBL, | ||||
| 	Tok_Assign_Classifer, | ||||
| 	Tok_Attribute_Open, | ||||
| 	Tok_Attribute_Close, | ||||
| 	Tok_BraceCurly_Open, | ||||
| 	Tok_BraceCurly_Close, | ||||
| 	Tok_BraceSquare_Open, | ||||
| 	Tok_BraceSquare_Close, | ||||
| 	Tok_Capture_Start, | ||||
| 	Tok_Capture_End, | ||||
| 	Tok_Comment, | ||||
| 	Tok_Comment_End, | ||||
| 	Tok_Comment_Start, | ||||
| 	Tok_Char, | ||||
| 	Tok_Comma, | ||||
| 	Tok_Decl_Class, | ||||
| 	Tok_Decl_GNU_Attribute, | ||||
| 	Tok_Decl_MSVC_Attribute, | ||||
| 	Tok_Decl_Enum, | ||||
| 	Tok_Decl_Extern_Linkage, | ||||
| 	Tok_Decl_Friend, | ||||
| 	Tok_Decl_Module, | ||||
| 	Tok_Decl_Namespace, | ||||
| 	Tok_Decl_Operator, | ||||
| 	Tok_Decl_Struct, | ||||
| 	Tok_Decl_Template, | ||||
| 	Tok_Decl_Typedef, | ||||
| 	Tok_Decl_Using, | ||||
| 	Tok_Decl_Union, | ||||
| 	Tok_Identifier, | ||||
| 	Tok_Module_Import, | ||||
| 	Tok_Module_Export, | ||||
| 	Tok_NewLine, | ||||
| 	Tok_Number, | ||||
| 	Tok_Operator, | ||||
| 	Tok_Preprocess_Hash, | ||||
| 	Tok_Preprocess_Define, | ||||
| 	Tok_Preprocess_If, | ||||
| 	Tok_Preprocess_IfDef, | ||||
| 	Tok_Preprocess_IfNotDef, | ||||
| 	Tok_Preprocess_ElIf, | ||||
| 	Tok_Preprocess_Else, | ||||
| 	Tok_Preprocess_EndIf, | ||||
| 	Tok_Preprocess_Include, | ||||
| 	Tok_Preprocess_Pragma, | ||||
| 	Tok_Preprocess_Content, | ||||
| 	Tok_Preprocess_Macro, | ||||
| 	Tok_Preprocess_Unsupported, | ||||
| 	Tok_Spec_Alignas, | ||||
| 	Tok_Spec_Const, | ||||
| 	Tok_Spec_Consteval, | ||||
| 	Tok_Spec_Constexpr, | ||||
| 	Tok_Spec_Constinit, | ||||
| 	Tok_Spec_Explicit, | ||||
| 	Tok_Spec_Extern, | ||||
| 	Tok_Spec_Final, | ||||
| 	Tok_Spec_ForceInline, | ||||
| 	Tok_Spec_Global, | ||||
| 	Tok_Spec_Inline, | ||||
| 	Tok_Spec_Internal_Linkage, | ||||
| 	Tok_Spec_LocalPersist, | ||||
| 	Tok_Spec_Mutable, | ||||
| 	Tok_Spec_NeverInline, | ||||
| 	Tok_Spec_Override, | ||||
| 	Tok_Spec_Static, | ||||
| 	Tok_Spec_ThreadLocal, | ||||
| 	Tok_Spec_Volatile, | ||||
| 	Tok_Spec_Virtual, | ||||
| 	Tok_Star, | ||||
| 	Tok_Statement_End, | ||||
| 	Tok_StaticAssert, | ||||
| 	Tok_String, | ||||
| 	Tok_Type_Typename, | ||||
| 	Tok_Type_Unsigned, | ||||
| 	Tok_Type_Signed, | ||||
| 	Tok_Type_Short, | ||||
| 	Tok_Type_Long, | ||||
| 	Tok_Type_bool, | ||||
| 	Tok_Type_char, | ||||
| 	Tok_Type_int, | ||||
| 	Tok_Type_double, | ||||
| 	Tok_Type_MS_int8, | ||||
| 	Tok_Type_MS_int16, | ||||
| 	Tok_Type_MS_int32, | ||||
| 	Tok_Type_MS_int64, | ||||
| 	Tok_Type_MS_W64, | ||||
| 	Tok_Varadic_Argument, | ||||
| 	Tok___Attributes_Start, | ||||
| 	Tok_Attribute_API_Export, | ||||
| 	Tok_Attribute_API_Import, | ||||
| 	Tok_NumTokens | ||||
| }; | ||||
|  | ||||
| inline Str toktype_to_str( TokType type ) | ||||
| { | ||||
| 	local_persist Str lookup[] = { | ||||
| 		{ "__invalid__",         sizeof( "__invalid__" )         }, | ||||
| 		{ "private",             sizeof( "private" )             }, | ||||
| 		{ "protected",           sizeof( "protected" )           }, | ||||
| 		{ "public",              sizeof( "public" )              }, | ||||
| 		{ ".",		           sizeof( "." )                   }, | ||||
| 		{ "::",		          sizeof( "::" )                  }, | ||||
| 		{ "&",		           sizeof( "&" )                   }, | ||||
| 		{ "&&",		          sizeof( "&&" )                  }, | ||||
| 		{ ":",		           sizeof( ":" )                   }, | ||||
| 		{ "[[",		          sizeof( "[[" )                  }, | ||||
| 		{ "]]",		          sizeof( "]]" )                  }, | ||||
| 		{ "{",		           sizeof( "{" )                   }, | ||||
| 		{ "}",		           sizeof( "}" )                   }, | ||||
| 		{ "[",		           sizeof( "[" )                   }, | ||||
| 		{ "]",		           sizeof( "]" )                   }, | ||||
| 		{ "(",		           sizeof( "(" )                   }, | ||||
| 		{ ")",		           sizeof( ")" )                   }, | ||||
| 		{ "__comment__",         sizeof( "__comment__" )         }, | ||||
| 		{ "__comment_end__",     sizeof( "__comment_end__" )     }, | ||||
| 		{ "__comment_start__",   sizeof( "__comment_start__" )   }, | ||||
| 		{ "__character__",       sizeof( "__character__" )       }, | ||||
| 		{ ",",		           sizeof( "," )                   }, | ||||
| 		{ "class",               sizeof( "class" )               }, | ||||
| 		{ "__attribute__",       sizeof( "__attribute__" )       }, | ||||
| 		{ "__declspec",          sizeof( "__declspec" )          }, | ||||
| 		{ "enum",                sizeof( "enum" )                }, | ||||
| 		{ "extern",              sizeof( "extern" )              }, | ||||
| 		{ "friend",              sizeof( "friend" )              }, | ||||
| 		{ "module",              sizeof( "module" )              }, | ||||
| 		{ "namespace",           sizeof( "namespace" )           }, | ||||
| 		{ "operator",            sizeof( "operator" )            }, | ||||
| 		{ "struct",              sizeof( "struct" )              }, | ||||
| 		{ "template",            sizeof( "template" )            }, | ||||
| 		{ "typedef",             sizeof( "typedef" )             }, | ||||
| 		{ "using",               sizeof( "using" )               }, | ||||
| 		{ "union",               sizeof( "union" )               }, | ||||
| 		{ "__identifier__",      sizeof( "__identifier__" )      }, | ||||
| 		{ "import",              sizeof( "import" )              }, | ||||
| 		{ "export",              sizeof( "export" )              }, | ||||
| 		{ "__new_line__",        sizeof( "__new_line__" )        }, | ||||
| 		{ "__number__",          sizeof( "__number__" )          }, | ||||
| 		{ "__operator__",        sizeof( "__operator__" )        }, | ||||
| 		{ "#",		           sizeof( "#" )                   }, | ||||
| 		{ "define",              sizeof( "define" )              }, | ||||
| 		{ "if",		          sizeof( "if" )                  }, | ||||
| 		{ "ifdef",               sizeof( "ifdef" )               }, | ||||
| 		{ "ifndef",              sizeof( "ifndef" )              }, | ||||
| 		{ "elif",                sizeof( "elif" )                }, | ||||
| 		{ "else",                sizeof( "else" )                }, | ||||
| 		{ "endif",               sizeof( "endif" )               }, | ||||
| 		{ "include",             sizeof( "include" )             }, | ||||
| 		{ "pragma",              sizeof( "pragma" )              }, | ||||
| 		{ "__macro_content__",   sizeof( "__macro_content__" )   }, | ||||
| 		{ "__macro__",           sizeof( "__macro__" )           }, | ||||
| 		{ "__unsupported__",     sizeof( "__unsupported__" )     }, | ||||
| 		{ "alignas",             sizeof( "alignas" )             }, | ||||
| 		{ "const",               sizeof( "const" )               }, | ||||
| 		{ "consteval",           sizeof( "consteval" )           }, | ||||
| 		{ "constexpr",           sizeof( "constexpr" )           }, | ||||
| 		{ "constinit",           sizeof( "constinit" )           }, | ||||
| 		{ "explicit",            sizeof( "explicit" )            }, | ||||
| 		{ "extern",              sizeof( "extern" )              }, | ||||
| 		{ "final",               sizeof( "final" )               }, | ||||
| 		{ "forceinline",         sizeof( "forceinline" )         }, | ||||
| 		{ "global",              sizeof( "global" )              }, | ||||
| 		{ "inline",              sizeof( "inline" )              }, | ||||
| 		{ "internal",            sizeof( "internal" )            }, | ||||
| 		{ "local_persist",       sizeof( "local_persist" )       }, | ||||
| 		{ "mutable",             sizeof( "mutable" )             }, | ||||
| 		{ "neverinline",         sizeof( "neverinline" )         }, | ||||
| 		{ "override",            sizeof( "override" )            }, | ||||
| 		{ "static",              sizeof( "static" )              }, | ||||
| 		{ "thread_local",        sizeof( "thread_local" )        }, | ||||
| 		{ "volatile",            sizeof( "volatile" )            }, | ||||
| 		{ "virtual",             sizeof( "virtual" )             }, | ||||
| 		{ "*",		           sizeof( "*" )                   }, | ||||
| 		{ ";",		           sizeof( ";" )                   }, | ||||
| 		{ "static_assert",       sizeof( "static_assert" )       }, | ||||
| 		{ "__string__",          sizeof( "__string__" )          }, | ||||
| 		{ "typename",            sizeof( "typename" )            }, | ||||
| 		{ "unsigned",            sizeof( "unsigned" )            }, | ||||
| 		{ "signed",              sizeof( "signed" )              }, | ||||
| 		{ "short",               sizeof( "short" )               }, | ||||
| 		{ "long",                sizeof( "long" )                }, | ||||
| 		{ "bool",                sizeof( "bool" )                }, | ||||
| 		{ "char",                sizeof( "char" )                }, | ||||
| 		{ "int",		         sizeof( "int" )                 }, | ||||
| 		{ "double",              sizeof( "double" )              }, | ||||
| 		{ "__int8",              sizeof( "__int8" )              }, | ||||
| 		{ "__int16",             sizeof( "__int16" )             }, | ||||
| 		{ "__int32",             sizeof( "__int32" )             }, | ||||
| 		{ "__int64",             sizeof( "__int64" )             }, | ||||
| 		{ "_W64",                sizeof( "_W64" )                }, | ||||
| 		{ "...",		         sizeof( "..." )                 }, | ||||
| 		{ "__attrib_start__",    sizeof( "__attrib_start__" )    }, | ||||
| 		{ "GEN_API_Export_Code", sizeof( "GEN_API_Export_Code" ) }, | ||||
| 		{ "GEN_API_Import_Code", sizeof( "GEN_API_Import_Code" ) }, | ||||
| 	}; | ||||
| 	return lookup[type]; | ||||
| } | ||||
|  | ||||
| inline TokType str_to_toktype( Str str ) | ||||
| { | ||||
| 	local_persist u32 keymap[Tok_NumTokens]; | ||||
| 	do_once_start for ( u32 index = 0; index < Tok_NumTokens; index++ ) | ||||
| 	{ | ||||
| 		Str enum_str  = toktype_to_str( (TokType)index ); | ||||
| 		keymap[index] = crc32( enum_str.Ptr, enum_str.Len - 1 ); | ||||
| 	} | ||||
| 	do_once_end u32 hash = crc32( str.Ptr, str.Len ); | ||||
| 	for ( u32 index = 0; index < Tok_NumTokens; index++ ) | ||||
| 	{ | ||||
| 		if ( keymap[index] == hash ) | ||||
| 			return (TokType)index; | ||||
| 	} | ||||
| 	return Tok_Invalid; | ||||
| } | ||||
|  | ||||
| GEN_NS_PARSER_END | ||||
		Reference in New Issue
	
	Block a user