Browse Source

repair errcode bug

修改生成errcode的问题
genProto_V1
AICells 5 years ago
parent
commit
2115ff1ffd
3 changed files with 23 additions and 28 deletions
  1. +9
    -7
      src/protoGen.erl
  2. +6
    -5
      src/protoParse.erl
  3. +8
    -16
      test/protoMsg.hrl

+ 9
- 7
src/protoGen.erl View File

@ -434,8 +434,9 @@ convertDir() ->
convertDir(ProtoDir) ->
convertDir(ProtoDir, "./", "./").
convertDir(ProtoDir, HrlDir, ErlDir) ->
erlang:put(pd_errlist, []),
FunRead =
fun(File, {ProAcc, ErrCodeAcc} = Acc) ->
fun(File, ProAcc) ->
case filename:extension(File) == ".mpdf" of
true ->
io:format("Convert proto msg file: ~s ~n", [File]),
@ -444,19 +445,20 @@ convertDir(ProtoDir, HrlDir, ErlDir) ->
Index = binary_to_integer(ModIndex),
erlang:put(pd_messageid, Index * 1000 + 1),
erlang:put(pd_errcodeid, Index * 1000 + 1),
erlang:put(pd_errlist, []),
SProto = protoParse:parseFile(File),
ErrCode = erlang:get(pd_errlist),
erlang:erase(),
{[SProto | ProAcc], [ErrCode | ErrCodeAcc]};
erlang:put(pd_errlist, ErrCode),
[SProto | ProAcc];
_ ->
Acc
ProAcc
end
end,
%% .mpdf结尾的文件 FunRead函数中纠正处理一下
{SProtoListOfList, ErrListOfList} = filelib:fold_files(ProtoDir, "\\.mpdf", true, FunRead, {[], []}),
SProtoListOfList = filelib:fold_files(ProtoDir, "\\.mpdf", true, FunRead, []),
SProtoList = lists:append(SProtoListOfList),
ErrList = lists:append(ErrListOfList),
ErrCodeList = erlang:get(pd_errlist),
SortedSProtoList = lists:sort(fun({_Name1, MessageId1, _FieldList1}, {_Name2, MessageId2, _FieldList2}) ->
MessageId1 > MessageId2 end, SProtoList),
FunSpell =
@ -475,7 +477,7 @@ convertDir(ProtoDir, HrlDir, ErlDir) ->
{MsgHrlStr, MsgTypeStr, MsgIdStr, MsgEndStr, MsgSchemaStr} = lists:foldl(FunSpell, {[], ["getMsgType(_) -> undefined.\n\n"], ["getMsgId(_) -> 0.\n\n"], ["encodeRec(_) ->\n\t[].\n\n"], ["getMsgSchema(_) ->\n\t[].\n\n"]}, SortedSProtoList),
SortedErrList = lists:sort(fun({_ErrName1, ErrCodeId1, _Desc1}, {_ErrName2, ErrCodeId2, _Desc2}) ->
ErrCodeId1 > ErrCodeId2 end, ErrList),
ErrCodeId1 > ErrCodeId2 end, ErrCodeList),
ErrCodeStr = lists:foldl(fun genErrCodeHrl/2, [], SortedErrList) ++ "\n\n",
ModStr = protoErlHeader(),

+ 6
- 5
src/protoParse.erl View File

@ -127,10 +127,11 @@ parseParse(Input) when is_binary(Input) ->
ErrName = binary_to_list(iolist_to_binary(ErrNameList)),
Desc = binary_to_list(iolist_to_binary(ErrCodeStrList)),
ErrList = erlang:get(pd_errlist),
case ErrNameList =/= [] andalso lists:keyfind(ErrName, 1, ErrList) == false of
UpErrName = string:to_upper(ErrName),
case UpErrName =/= [] andalso lists:keyfind(UpErrName, 1, ErrList) == false of
true ->
ErrCodeId = erlang:get(pd_errcodeid),
erlang:put(pd_errlist, [{ErrName, ErrCodeId, Desc} | ErrList]),
erlang:put(pd_errlist, [{UpErrName, ErrCodeId, Desc} | ErrList]),
erlang:put(pd_errcodeid, ErrCodeId + 1);
_ ->
skip
@ -259,11 +260,11 @@ p(Inp, StartIndex, Name, ParseFun, TransformFun) ->
memoize(Index, Name, Result) ->
case erlang:get(Index) of
undefined ->
put(Index, [{Name, Result}]);
erlang:put(Index, [{Name, Result}]);
[] ->
put(Index, [{Name, Result}]);
erlang:put(Index, [{Name, Result}]);
Plist ->
put(Index, [{Name, Result} | Plist])
erlang:put(Index, [{Name, Result} | Plist])
end.
-spec get_memo(index(), atom()) -> {ok, term()} | {error, not_found}.

+ 8
- 16
test/protoMsg.hrl View File

@ -8,22 +8,14 @@
-opaque uint64() :: 0..18446744073709551615.
-opaque double() :: float().
-define(err1, 1). %%
-define(err2, 2). %% 444
-define(err3, 3). %%
-define(err4, 4). %% dfsf
-define(err5, 5). %%
-define(err6, 6). %% dfff
-define(err7, 7). %% def
-define(err8, 8). %%
-define(err1, 1001). %%
-define(err2, 1002). %% 444
-define(err3, 1003). %%
-define(err4, 1004). %% dfsf
-define(err5, 1005). %%
-define(err6, 1006). %% dfff
-define(err7, 1007). %% def
-define(err8, 1008). %%
-define(ERR1, 1). %%
-define(ERR2, 2). %% 444
-define(ERR3, 3). %%
-define(ERR4, 4). %% dfsf
-define(ERR5, 5). %% err6:dfff
-define(ERR7, 6). %% def
-define(ERR8, 7). %%
-define(ERR6, 1001). %% dfff
-record(test ,{

Loading…
Cancel
Save