public static void Register(LuaState L)
    {
#if !LUAC_5_3
        L.BindEnumEqualFunction(new LuaCSFunction(Equals));
#endif
        L.BeginClass(typeof(System.Enum), null);
        L.RegFunction("GetTypeCode", new LuaCSFunction(GetTypeCode));
        L.RegFunction("GetValues", new LuaCSFunction(GetValues));
        L.RegFunction("GetNames", new LuaCSFunction(GetNames));
        L.RegFunction("GetName", new LuaCSFunction(GetName));
        L.RegFunction("IsDefined", new LuaCSFunction(IsDefined));
        L.RegFunction("GetUnderlyingType", new LuaCSFunction(GetUnderlyingType));
        L.RegFunction("CompareTo", new LuaCSFunction(CompareTo));
        L.RegFunction("ToString", new LuaCSFunction(ToString));
#if !LUAC_5_3
        L.RegEnumEqualFunction("Equals");
        L.RegEnumEqualFunction("__eq");
#else
        L.RegFunction("Equals", new LuaCSFunction(Equals));
        L.RegFunction("__eq", new LuaCSFunction(Equals));
#endif
        L.RegFunction("GetHashCode", new LuaCSFunction(GetHashCode));
        L.RegFunction("Format", new LuaCSFunction(Format));
        L.RegFunction("Parse", new LuaCSFunction(Parse));
        L.RegFunction("ToObject", new LuaCSFunction(ToObject));
        L.RegFunction("ToInt", new LuaCSFunction(ToInt));
        L.RegFunction("__tostring", new LuaCSFunction(ToLua.op_ToString));
        L.EndClass();
    }