@@ -52,6 +52,7 @@ type structVM struct {
5252 exprs map [string ]* Expr
5353 exprSelectorList []string
5454 ifaceTagExprGetters []func (unsafe.Pointer , string , func (* TagExpr , error ) error ) error
55+ err error
5556}
5657
5758// fieldVM tag expression set of struct field
@@ -141,6 +142,9 @@ func (vm *VM) Run(structPtrOrReflectValue interface{}) (*TagExpr, error) {
141142 }
142143 vm .rw .Unlock ()
143144 }
145+ if s .err != nil {
146+ return nil , s .err
147+ }
144148 return s .newTagExpr (ptr , "" ), nil
145149}
146150
@@ -258,6 +262,9 @@ func (vm *VM) subRun(path string, t reflect.Type, tid uintptr, ptr unsafe.Pointe
258262 }
259263 vm .rw .Unlock ()
260264 }
265+ if s .err != nil {
266+ return nil , s .err
267+ }
261268 return s .newTagExpr (ptr , path ), nil
262269}
263270
@@ -269,7 +276,7 @@ func (vm *VM) registerStructLocked(structType reflect.Type) (*structVM, error) {
269276 tid := ameda .RuntimeTypeID (structType )
270277 s , had := vm .structJar [tid ]
271278 if had {
272- return s , nil
279+ return s , s . err
273280 }
274281 s = vm .newStructVM ()
275282 s .name = structType .String ()
@@ -281,6 +288,7 @@ func (vm *VM) registerStructLocked(structType reflect.Type) (*structVM, error) {
281288 structField = structType .Field (i )
282289 field , err := s .newFieldVM (structField )
283290 if err != nil {
291+ s .err = err
284292 return nil , err
285293 }
286294 switch field .elemKind {
@@ -290,6 +298,7 @@ func (vm *VM) registerStructLocked(structType reflect.Type) (*structVM, error) {
290298 case reflect .Struct :
291299 sub , err = vm .registerStructLocked (field .structField .Type )
292300 if err != nil {
301+ s .err = err
293302 return nil , err
294303 }
295304 s .mergeSubStructVM (field , sub )
@@ -307,6 +316,7 @@ func (vm *VM) registerStructLocked(structType reflect.Type) (*structVM, error) {
307316 case reflect .Array , reflect .Slice , reflect .Map :
308317 err = vm .registerIndirectStructLocked (field )
309318 if err != nil {
319+ s .err = err
310320 return nil , err
311321 }
312322 }
0 commit comments