datastore: don't ignore calculated pValue

Change-Id: Icea538a7b50c151f046ea2c310679566d1519f74
diff --git a/datastore/load.go b/datastore/load.go
index b950165..b1cac60 100644
--- a/datastore/load.go
+++ b/datastore/load.go
@@ -25,9 +25,9 @@
 
 // typeMismatchReason returns a string explaining why the property p could not
 // be stored in an entity field of type v.Type().
-func typeMismatchReason(p Property, v reflect.Value) string {
+func typeMismatchReason(pValue interface{}, v reflect.Value) string {
 	entityType := "empty"
-	switch p.Value.(type) {
+	switch pValue.(type) {
 	case int64:
 		entityType = "int"
 	case bool:
@@ -154,7 +154,7 @@
 		}
 	}
 
-	if errReason := setVal(p, v); errReason != "" {
+	if errReason := setVal(pValue, v); errReason != "" {
 		// Set the slice back to its zero value.
 		if slice.IsValid() {
 			slice.Set(reflect.Zero(slice.Type()))
@@ -170,13 +170,12 @@
 }
 
 // setVal sets v to the value of Property p.
-func setVal(p Property, v reflect.Value) string {
-	pValue := p.Value
+func setVal(pValue interface{}, v reflect.Value) string {
 	switch v.Kind() {
 	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
 		x, ok := pValue.(int64)
 		if !ok && pValue != nil {
-			return typeMismatchReason(p, v)
+			return typeMismatchReason(pValue, v)
 		}
 		if v.OverflowInt(x) {
 			return fmt.Sprintf("value %v overflows struct field of type %v", x, v.Type())
@@ -185,7 +184,7 @@
 	case reflect.Bool:
 		x, ok := pValue.(bool)
 		if !ok && pValue != nil {
-			return typeMismatchReason(p, v)
+			return typeMismatchReason(pValue, v)
 		}
 		v.SetBool(x)
 	case reflect.String:
@@ -198,13 +197,13 @@
 			v.SetString(x)
 		default:
 			if pValue != nil {
-				return typeMismatchReason(p, v)
+				return typeMismatchReason(pValue, v)
 			}
 		}
 	case reflect.Float32, reflect.Float64:
 		x, ok := pValue.(float64)
 		if !ok && pValue != nil {
-			return typeMismatchReason(p, v)
+			return typeMismatchReason(pValue, v)
 		}
 		if v.OverflowFloat(x) {
 			return fmt.Sprintf("value %v overflows struct field of type %v", x, v.Type())
@@ -213,10 +212,10 @@
 	case reflect.Ptr:
 		x, ok := pValue.(*Key)
 		if !ok && pValue != nil {
-			return typeMismatchReason(p, v)
+			return typeMismatchReason(pValue, v)
 		}
 		if _, ok := v.Interface().(*Key); !ok {
-			return typeMismatchReason(p, v)
+			return typeMismatchReason(pValue, v)
 		}
 		v.Set(reflect.ValueOf(x))
 	case reflect.Struct:
@@ -224,17 +223,17 @@
 		case typeOfTime:
 			x, ok := pValue.(time.Time)
 			if !ok && pValue != nil {
-				return typeMismatchReason(p, v)
+				return typeMismatchReason(pValue, v)
 			}
 			v.Set(reflect.ValueOf(x))
 		case typeOfGeoPoint:
 			x, ok := pValue.(appengine.GeoPoint)
 			if !ok && pValue != nil {
-				return typeMismatchReason(p, v)
+				return typeMismatchReason(pValue, v)
 			}
 			v.Set(reflect.ValueOf(x))
 		default:
-			return typeMismatchReason(p, v)
+			return typeMismatchReason(pValue, v)
 		}
 	case reflect.Slice:
 		x, ok := pValue.([]byte)
@@ -244,14 +243,14 @@
 			}
 		}
 		if !ok && pValue != nil {
-			return typeMismatchReason(p, v)
+			return typeMismatchReason(pValue, v)
 		}
 		if v.Type().Elem().Kind() != reflect.Uint8 {
-			return typeMismatchReason(p, v)
+			return typeMismatchReason(pValue, v)
 		}
 		v.SetBytes(x)
 	default:
-		return typeMismatchReason(p, v)
+		return typeMismatchReason(pValue, v)
 	}
 	return ""
 }