Index: src/ResolvExpr/PtrsCastable.cc
===================================================================
--- src/ResolvExpr/PtrsCastable.cc	(revision fc191295fcc2cb05fb92c6aefaf097781b9fa217)
+++ src/ResolvExpr/PtrsCastable.cc	(revision 1d29d46e76ca8eeebab3a2ad22aea33afbb42f87)
@@ -68,4 +68,7 @@
 		return 1;
 	}
+	int functionCast( Type *src, const TypeEnvironment &env, const SymTab::Indexer &indexer ) {
+		return -1 * objectCast( src, env, indexer );  // reverse the sense of objectCast
+	}
 
 	int ptrsCastable( Type *src, Type *dest, const TypeEnvironment &env, const SymTab::Indexer &indexer ) {
@@ -106,5 +109,6 @@
 
 	void PtrsCastable::visit(FunctionType *functionType) {
-		result = -1;
+		// result = -1;
+		result = functionCast( dest, env, indexer );
 	}
 
@@ -136,5 +140,6 @@
 
 	void PtrsCastable::visit(TypeInstType *inst) {
-		result = objectCast( inst, env, indexer ) > 0 && objectCast( dest, env, indexer ) > 0 ? 1 : -1;
+		//result = objectCast( inst, env, indexer ) > 0 && objectCast( dest, env, indexer ) > 0 ? 1 : -1;
+		result = objectCast( inst, env, indexer ) == objectCast( dest, env, indexer ) ? 1 : -1;
 	}
 
