@@ -291,14 +291,14 @@ func (p *parser) parseDefault() error {
291
291
return fmt .Errorf ("cannot find end of %q at %s" , stmtStr , s .Context ())
292
292
}
293
293
294
- func (p * parser ) parseCase () error {
294
+ func (p * parser ) parseCase (switchValue string ) error {
295
295
s := p .s
296
296
t , err := expectTagContents (s )
297
297
if err != nil {
298
298
return err
299
299
}
300
300
caseStr := "case " + string (t .Value )
301
- if err = validateCaseStmt (t .Value ); err != nil {
301
+ if err = validateCaseStmt (switchValue , t .Value ); err != nil {
302
302
return fmt .Errorf ("invalid statement %q at %s: %s" , caseStr , s .Context (), err )
303
303
}
304
304
p .Printf ("case %s:" , t .Value )
@@ -358,6 +358,7 @@ func (p *parser) parseSwitch() error {
358
358
return fmt .Errorf ("invalid statement %q at %s: %s" , switchStr , s .Context (), err )
359
359
}
360
360
p .Printf ("switch %s {" , t .Value )
361
+ switchValue := string (t .Value )
361
362
caseNum := 0
362
363
defaultFound := false
363
364
p .switchDepth ++
@@ -387,7 +388,7 @@ func (p *parser) parseSwitch() error {
387
388
return nil
388
389
case "case" :
389
390
caseNum ++
390
- if err = p .parseCase (); err != nil {
391
+ if err = p .parseCase (switchValue ); err != nil {
391
392
return err
392
393
}
393
394
case "default" :
@@ -872,8 +873,8 @@ func validateSwitchStmt(stmt []byte) error {
872
873
return err
873
874
}
874
875
875
- func validateCaseStmt (stmt []byte ) error {
876
- exprStr := fmt .Sprintf ("func () { switch {case %s:} }" , stmt )
876
+ func validateCaseStmt (switchValue string , stmt []byte ) error {
877
+ exprStr := fmt .Sprintf ("func () { switch %s {case %s:} }" , switchValue , stmt )
877
878
_ , err := goparser .ParseExpr (exprStr )
878
879
return err
879
880
}
0 commit comments