code: func pushNumberValue(L *lua.State, a interface{}, t1, t2 reflect.Type) {
  	v := reflect.ValueOf(a)
  	isComplex := unsizedKind(v) == reflect.Complex128
  	mt := cNumberMeta
  	if isComplex {
  		mt = cComplexMeta
  	}
  	if t1 == t2 || isPredeclaredType(t2) {
  		makeValueProxy(L, v.Convert(t1), mt)
  	} else if isPredeclaredType(t1) {
  		makeValueProxy(L, v.Convert(t2), mt)
  	} else if isComplex {
  		complexType := reflect.TypeOf(0i)
  		makeValueProxy(L, v.Convert(complexType), cComplexMeta)
  	} else {
  		L.PushNumber(valueToNumber(L, v))
  	}
  }
docs: // pushNumberValue pushes the number resulting from an arithmetic operation.
  //
  // At least one operand must be a proxy for this function to be called. See the
  // main documentation for the conversion rules.