// do /not/ fold token to the return: this is a macro and the ordering is dependent
 #define F(value, highlight) do { \
     int token(value); \
+@begin ObjectiveC
     yyextra->no_.AtImplementation = false; \
+@end
     yyextra->no_.Function = false; \
     yyextra->no_.OpenBrace = false; \
     yylval->highlight_ = highlight; \
 
         CYString *string_;
         CYThis *this_;
         CYTrue *true_;
-        CYTypeModifier *type_;
-        CYTypedIdentifier *typedIdentifier_;
-        CYTypedParameter *typedParameter_;
         CYWord *word_;
 
 @begin ObjectiveC
         CYMessageParameter *messageParameter_;
         CYProtocol *protocol_;
         CYSelectorPart *selector_;
+        CYTypeModifier *type_;
+        CYTypedIdentifier *typedIdentifier_;
+        CYTypedParameter *typedParameter_;
 @end
 
 @begin E4X
     : { if (yychar == yyempty_) driver.no_.Function = true; else if (yychar == token::Function) yychar = token::Function_; }
     ;
 
-LexNoAtImplementation
-    : { if (yychar == yyempty_) driver.no_.AtImplementation = true; else if (yychar == token::AtImplementation) yychar = token::AtImplementation_; }
+LexNoAtImplementation :
+@begin ObjectiveC
+    { if (yychar == yyempty_) driver.no_.AtImplementation = true; else if (yychar == token::AtImplementation) yychar = token::AtImplementation_; }
+@end
     ;
 
 LexSetStatement