Skip to content

Commit a7de184

Browse files
authored
Merge pull request #493 from TarsCloud/perf/lbbniu/tars2go
perf(tars2go): optimize ast structure definition
2 parents 9dbdd53 + 0a32d6e commit a7de184

File tree

3 files changed

+184
-174
lines changed

3 files changed

+184
-174
lines changed

tars/tools/tars2go/ast/ast.go

+72-64
Original file line numberDiff line numberDiff line change
@@ -37,37 +37,37 @@ func (a StructMemberSorter) Len() int { return len(a) }
3737
func (a StructMemberSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
3838
func (a StructMemberSorter) Less(i, j int) bool { return a[i].Tag < a[j].Tag }
3939

40-
// StructInfo record struct information.
41-
type StructInfo struct {
40+
// Struct record struct information.
41+
type Struct struct {
4242
Name string
4343
OriginName string //original name
4444
Mb []StructMember
4545
DependModule map[string]bool
4646
DependModuleWithJce map[string]string
4747
}
4848

49-
// ArgInfo record argument information.
50-
type ArgInfo struct {
49+
// Arg record argument information.
50+
type Arg struct {
5151
Name string
5252
OriginName string //original name
5353
IsOut bool
5454
Type *VarType
5555
}
5656

57-
// FunInfo record function information.
58-
type FunInfo struct {
57+
// Func record function information.
58+
type Func struct {
5959
Name string // after the uppercase converted name
6060
OriginName string // original name
6161
HasRet bool
6262
RetType *VarType
63-
Args []ArgInfo
63+
Args []Arg
6464
}
6565

66-
// InterfaceInfo record interface information.
67-
type InterfaceInfo struct {
66+
// Interface record interface information.
67+
type Interface struct {
6868
Name string
6969
OriginName string // original name
70-
Fun []FunInfo
70+
Funcs []Func
7171
DependModule map[string]bool
7272
DependModuleWithJce map[string]string
7373
}
@@ -80,104 +80,112 @@ type EnumMember struct {
8080
Name string //type 1
8181
}
8282

83-
// EnumInfo record EnumMember information include name.
84-
type EnumInfo struct {
83+
// Enum record EnumMember information include name.
84+
type Enum struct {
8585
Module string
8686
Name string
8787
OriginName string // original name
8888
Mb []EnumMember
8989
}
9090

91-
// ConstInfo record const information.
92-
type ConstInfo struct {
91+
// Const record const information.
92+
type Const struct {
9393
Type *VarType
9494
Name string
9595
OriginName string // original name
9696
Value string
9797
}
9898

99-
// HashKeyInfo record hash key information.
100-
type HashKeyInfo struct {
99+
// HashKey record hash key information.
100+
type HashKey struct {
101101
Name string
102102
Member []string
103103
}
104104

105-
type ModuleInfo struct {
105+
type TarsFile struct {
106106
Source string
107107
// proto file name(not include .tars)
108-
ProtoName string
108+
ProtoName string
109+
Module Module
110+
111+
Include []string
112+
// have parsed include file
113+
IncTarsFile []*TarsFile
114+
}
115+
116+
type Module struct {
109117
Name string
110118
OriginName string
111-
Include []string
112119

113-
Struct []StructInfo
114-
HashKey []HashKeyInfo
115-
Enum []EnumInfo
116-
Const []ConstInfo
117-
Interface []InterfaceInfo
118-
119-
// have parsed include file
120-
IncModule []*ModuleInfo
120+
Struct []Struct
121+
HashKey []HashKey
122+
Enum []Enum
123+
Const []Const
124+
Interface []Interface
121125
}
122126

123127
// Rename module
124-
func (p *ModuleInfo) Rename(moduleUpper bool) {
125-
p.OriginName = p.Name
128+
func (m *Module) Rename(moduleUpper bool) {
129+
m.OriginName = m.Name
126130
if moduleUpper {
127-
p.Name = utils.UpperFirstLetter(p.Name)
131+
m.Name = utils.UpperFirstLetter(m.Name)
128132
}
129133
}
130134

135+
func (tf *TarsFile) Rename(moduleUpper bool) {
136+
tf.Module.Rename(moduleUpper)
137+
}
138+
131139
// FindTNameType Looking for the true type of user-defined identifier
132-
func (p *ModuleInfo) FindTNameType(tname string) (token.Type, string, string) {
133-
for _, v := range p.Struct {
134-
if p.Name+"::"+v.Name == tname {
135-
return token.Struct, p.Name, p.ProtoName
140+
func (tf *TarsFile) FindTNameType(tName string) (token.Type, string, string) {
141+
for _, v := range tf.Module.Struct {
142+
if tf.Module.Name+"::"+v.Name == tName {
143+
return token.Struct, tf.Module.Name, tf.ProtoName
136144
}
137145
}
138146

139-
for _, v := range p.Enum {
140-
if p.Name+"::"+v.Name == tname {
141-
return token.Enum, p.Name, p.ProtoName
147+
for _, v := range tf.Module.Enum {
148+
if tf.Module.Name+"::"+v.Name == tName {
149+
return token.Enum, tf.Module.Name, tf.ProtoName
142150
}
143151
}
144152

145-
for _, pInc := range p.IncModule {
146-
ret, mod, protoName := pInc.FindTNameType(tname)
153+
for _, tarsFile := range tf.IncTarsFile {
154+
ret, mod, protoName := tarsFile.FindTNameType(tName)
147155
if ret != token.Name {
148156
return ret, mod, protoName
149157
}
150158
}
151159
// not find
152-
return token.Name, p.Name, p.ProtoName
160+
return token.Name, tf.Module.Name, tf.ProtoName
153161
}
154162

155-
func (p *ModuleInfo) FindEnumName(ename string, moduleCycle bool) (*EnumMember, *EnumInfo, error) {
163+
func (tf *TarsFile) FindEnumName(ename string, moduleCycle bool) (*EnumMember, *Enum, error) {
156164
if strings.Contains(ename, "::") {
157165
vec := strings.Split(ename, "::")
158166
if len(vec) >= 2 {
159167
ename = vec[1]
160168
}
161169
}
162170
var cmb *EnumMember
163-
var cenum *EnumInfo
164-
for ek, enum := range p.Enum {
171+
var cenum *Enum
172+
for ek, enum := range tf.Module.Enum {
165173
for mk, mb := range enum.Mb {
166174
if mb.Key != ename {
167175
continue
168176
}
169177
if cmb == nil {
170178
cmb = &enum.Mb[mk]
171-
cenum = &p.Enum[ek]
179+
cenum = &tf.Module.Enum[ek]
172180
} else {
173181
return nil, nil, errors.New(ename + " name conflict [" + cenum.Name + "::" + cmb.Key + " or " + enum.Name + "::" + mb.Key)
174182
}
175183
}
176184
}
177185
var err error
178-
for _, pInc := range p.IncModule {
186+
for _, tarsFile := range tf.IncTarsFile {
179187
if cmb == nil {
180-
cmb, cenum, err = pInc.FindEnumName(ename, moduleCycle)
188+
cmb, cenum, err = tarsFile.FindEnumName(ename, moduleCycle)
181189
if err != nil {
182190
return cmb, cenum, err
183191
}
@@ -187,17 +195,16 @@ func (p *ModuleInfo) FindEnumName(ename string, moduleCycle bool) (*EnumMember,
187195
}
188196
if cenum != nil && cenum.Module == "" {
189197
if moduleCycle {
190-
cenum.Module = p.ProtoName + "_" + p.Name
198+
cenum.Module = tf.ProtoName + "_" + tf.Module.Name
191199
} else {
192-
cenum.Module = p.Name
200+
cenum.Module = tf.Module.Name
193201
}
194202
}
195203
return cmb, cenum, nil
196204
}
197205

198-
// Rename struct
199-
// struct Name { 1 require Mb type}
200-
func (st *StructInfo) Rename() {
206+
// Rename Struct Name { 1 require Mb type}
207+
func (st *Struct) Rename() {
201208
st.OriginName = st.Name
202209
st.Name = utils.UpperFirstLetter(st.Name)
203210
for i := range st.Mb {
@@ -206,38 +213,39 @@ func (st *StructInfo) Rename() {
206213
}
207214
}
208215

209-
// Rename interface
210-
// interface Name { Fun }
211-
func (itf *InterfaceInfo) Rename() {
216+
// Rename Interface Name { Funcs }
217+
func (itf *Interface) Rename() {
212218
itf.OriginName = itf.Name
213219
itf.Name = utils.UpperFirstLetter(itf.Name)
214-
for i := range itf.Fun {
215-
itf.Fun[i].Rename()
220+
for i := range itf.Funcs {
221+
itf.Funcs[i].Rename()
216222
}
217223
}
218224

219-
func (en *EnumInfo) Rename() {
225+
// Rename Enum Name { Mb }
226+
func (en *Enum) Rename() {
220227
en.OriginName = en.Name
221228
en.Name = utils.UpperFirstLetter(en.Name)
222229
for i := range en.Mb {
223230
en.Mb[i].Key = utils.UpperFirstLetter(en.Mb[i].Key)
224231
}
225232
}
226233

227-
func (cst *ConstInfo) Rename() {
234+
// Rename Const Name
235+
func (cst *Const) Rename() {
228236
cst.OriginName = cst.Name
229237
cst.Name = utils.UpperFirstLetter(cst.Name)
230238
}
231239

232-
// Rename func
233-
// type Fun (arg ArgType), in case keyword and name conflicts,argname need to capitalize.
234-
// Fun (type int32)
235-
func (fun *FunInfo) Rename() {
240+
// Rename Func Name { Args }
241+
// type Funcs (arg ArgType), in case keyword and name conflicts, arg name need to capitalize.
242+
// Funcs (type int32)
243+
func (fun *Func) Rename() {
236244
fun.OriginName = fun.Name
237245
fun.Name = utils.UpperFirstLetter(fun.Name)
238246
for i := range fun.Args {
239247
fun.Args[i].OriginName = fun.Args[i].Name
240-
// func args donot upper firs
241-
//fun.Args[i].Name = utils.UpperFirstLetter(fun.Args[i].Name)
248+
// func args do not upper firs
249+
// fun.Args[i].Name = utils.UpperFirstLetter(fun.Args[i].Name)
242250
}
243251
}

0 commit comments

Comments
 (0)