assertI2I.go raw

   1  // +build go1.17
   2  
   3  /*
   4   * Copyright 2021 ByteDance Inc.
   5   *
   6   * Licensed under the Apache License, Version 2.0 (the "License");
   7   * you may not use this file except in compliance with the License.
   8   * You may obtain a copy of the License at
   9   *
  10   *     http://www.apache.org/licenses/LICENSE-2.0
  11   *
  12   * Unless required by applicable law or agreed to in writing, software
  13   * distributed under the License is distributed on an "AS IS" BASIS,
  14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15   * See the License for the specific language governing permissions and
  16   * limitations under the License.
  17   */
  18  
  19  package rt
  20  
  21  import (
  22      _ `unsafe`
  23  )
  24  
  25  func AssertI2I(t *GoType, i GoIface) (r GoIface) {
  26      inter := IfaceType(t)
  27  	tab := i.Itab
  28  	if tab == nil {
  29  		return
  30  	}
  31  	if (*GoInterfaceType)(tab.it) != inter {
  32  		tab = GetItab(inter, tab.Vt, true)
  33  		if tab == nil {
  34  			return
  35  		}
  36  	}
  37  	r.Itab = tab
  38  	r.Value = i.Value
  39  	return
  40  }
  41  
  42  
  43