@@ -124,33 +124,30 @@ if (__DEV__) {
124124}
125125
126126// Context (new API)
127- let providerStack : Array < ReactProvider < mixed >> = [ ] ; // Stack of provider objects
127+ let providerStack : Array < ReactProvider < any >> = [ ] ; // Stack of provider objects
128128let index = - 1 ;
129129
130130export function pushProvider < T > ( provider : ReactProvider < T > ) : void {
131131 index + = 1 ;
132132 providerStack [ index ] = provider ;
133+ const context : ReactContext < any > = provider . type . context ;
134+ context . currentProvider = provider ;
133135}
134136
135137export function popProvider < T > ( provider : ReactProvider < T > ) : void {
136138 if ( __DEV__ ) {
137139 warning ( index > - 1 && provider === providerStack [ index ] , 'Unexpected pop.' ) ;
138140 }
141+ // $FlowFixMe - Intentionally unsound
139142 providerStack [ index ] = null ;
140143 index -= 1 ;
141- }
142-
143- // Find the nearest matching provider
144- export function getProvider < T > (
145- context : ReactContext < T > ,
146- ) : ReactProvider < T > | null {
147- for ( let i = index ; i > - 1 ; i -- ) {
148- const provider = providerStack [ i ] ;
149- if ( provider . type . context === context ) {
150- return provider ;
151- }
144+ const context : ReactContext < any > = provider . type . context ;
145+ if ( index < 0 ) {
146+ context . currentProvider = null ;
147+ } else {
148+ const previousProvider = providerStack [ index ] ;
149+ context . currentProvider = previousProvider ;
152150 }
153- return null ;
154151}
155152
156153let didWarnDefaultInputValue = false ;
@@ -731,7 +728,7 @@ class ReactDOMServerRenderer {
731728 if ( typeof elementType === 'object' && elementType !== null ) {
732729 switch ( elementType . $$typeof ) {
733730 case REACT_PROVIDER_TYPE : {
734- const provider : ReactProvider < any > = nextChild ;
731+ const provider : ReactProvider < any > = ( nextChild : any ) ;
735732 const nextProps = provider . props ;
736733 const nextChildren = toArray ( nextProps . children ) ;
737734 const frame : Frame = {
@@ -752,10 +749,10 @@ class ReactDOMServerRenderer {
752749 return '' ;
753750 }
754751 case REACT_CONSUMER_TYPE : {
755- const consumer : ReactConsumer < any > = nextChild ;
752+ const consumer : ReactConsumer < any > = ( nextChild : any ) ;
756753 const nextProps = consumer . props ;
757754
758- const provider = getProvider ( consumer . type . context ) ;
755+ const provider = consumer . type . context . currentProvider ;
759756 let nextValue ;
760757 if ( provider === null ) {
761758 // Detached consumer
0 commit comments