@@ -2617,10 +2617,11 @@ and parseJsxOpeningOrSelfClosingElement ~startPos p =
26172617 | GreaterThan -> (
26182618 (* <foo a=b> bar </foo> *)
26192619 let childrenStartPos = p.Parser. startPos in
2620- Scanner. setJsxMode p.scanner;
26212620 Parser. next p;
26222621 let spread, children = parseJsxChildren p in
26232622 let childrenEndPos = p.Parser. startPos in
2623+ Scanner. popMode p.scanner Jsx ;
2624+ Scanner. setJsxMode p.scanner;
26242625 let () =
26252626 match p.token with
26262627 | LessThanSlash -> Parser. next p
@@ -2685,6 +2686,8 @@ and parseJsxOpeningOrSelfClosingElement ~startPos p =
26852686 * jsx-children ::= primary-expr* * => 0 or more
26862687 *)
26872688and parseJsx p =
2689+ Scanner. popMode p.scanner Jsx ;
2690+ Scanner. setJsxMode p.Parser. scanner;
26882691 Parser. leaveBreadcrumb p Grammar. Jsx ;
26892692 let startPos = p.Parser. startPos in
26902693 Parser. expect LessThan p;
@@ -2696,6 +2699,7 @@ and parseJsx p =
26962699 parseJsxFragment p
26972700 | _ -> parseJsxName p
26982701 in
2702+ Scanner. popMode p.scanner Jsx ;
26992703 Parser. eatBreadcrumb p;
27002704 {jsxExpr with pexp_attributes = [jsxAttr]}
27012705
@@ -2706,12 +2710,12 @@ and parseJsx p =
27062710 *)
27072711and parseJsxFragment p =
27082712 let childrenStartPos = p.Parser. startPos in
2709- Scanner. setJsxMode p.scanner;
27102713 Parser. expect GreaterThan p;
27112714 let _spread, children = parseJsxChildren p in
27122715 let childrenEndPos = p.Parser. startPos in
27132716 Parser. expect LessThanSlash p;
27142717 Parser. expect GreaterThan p;
2718+ Scanner. popMode p.scanner Jsx ;
27152719 let loc = mkLoc childrenStartPos childrenEndPos in
27162720 makeListExpression loc children None
27172721
@@ -2743,6 +2747,7 @@ and parseJsxProp p =
27432747 Parser. next p;
27442748 (* no punning *)
27452749 let optional = Parser. optional p Question in
2750+ Scanner. popMode p.scanner Jsx ;
27462751 let attrExpr =
27472752 let e = parsePrimaryExpr ~operand: (parseAtomicExpr p) p in
27482753 {e with pexp_attributes = propLocAttr :: e .pexp_attributes}
@@ -2765,6 +2770,7 @@ and parseJsxProp p =
27652770 Parser. next p;
27662771 match p.Parser. token with
27672772 | DotDotDot -> (
2773+ Scanner. popMode p.scanner Jsx ;
27682774 Parser. next p;
27692775 let loc = mkLoc p.Parser. startPos p.prevEndPos in
27702776 let propLocAttr =
@@ -2790,9 +2796,7 @@ and parseJsxProps p =
27902796and parseJsxChildren p =
27912797 let rec loop p children =
27922798 match p.Parser. token with
2793- | Token. Eof | LessThanSlash ->
2794- Scanner. popMode p.scanner Jsx ;
2795- List. rev children
2799+ | Token. Eof | LessThanSlash -> children
27962800 | LessThan ->
27972801 (* Imagine: <div> <Navbar /> <
27982802 * is `<` the start of a jsx-child? <div …
@@ -2808,23 +2812,23 @@ and parseJsxChildren p =
28082812 else
28092813 (* LessThanSlash *)
28102814 let () = p.token < - token in
2811- let () = Scanner. popMode p.scanner Jsx in
2812- List. rev children
2815+ children
28132816 | token when Grammar. isJsxChildStart token ->
28142817 let () = Scanner. popMode p.scanner Jsx in
28152818 let child =
28162819 parsePrimaryExpr ~operand: (parseAtomicExpr p) ~no Call:true p
28172820 in
28182821 loop p (child :: children)
2819- | _ ->
2820- Scanner. popMode p.scanner Jsx ;
2821- List. rev children
2822+ | _ -> children
28222823 in
28232824 match p.Parser. token with
28242825 | DotDotDot ->
28252826 Parser. next p;
28262827 (true , [parsePrimaryExpr ~operand: (parseAtomicExpr p) ~no Call:true p])
2827- | _ -> (false , loop p [] )
2828+ | _ ->
2829+ let children = List. rev (loop p [] ) in
2830+ Scanner. popMode p.scanner Jsx ;
2831+ (false , children)
28282832
28292833and parseBracedOrRecordExpr p =
28302834 let startPos = p.Parser. startPos in
0 commit comments