@@ -565,10 +565,10 @@ gistAdjustKeys(Relation r,
565565ev1p = & ((GISTENTRY * )VARDATA (evec ))[1 ];
566566
567567/* form union of decompressed entries */
568- datum = (char * ) ( giststate -> unionFn ) (evec ,& datumsize );
568+ datum = (* fmgr_faddr ( & giststate -> unionFn ) ) (evec ,& datumsize );
569569
570570/* did union leave decompressed version of oldud unchanged? */
571- (giststate -> equalFn ) (ev0p -> pred ,datum ,& result );
571+ (* fmgr_faddr ( & giststate -> equalFn ) ) (ev0p -> pred ,datum ,& result );
572572if (!result )
573573{
574574TupleDesc td = RelationGetTupleDescriptor (r );
@@ -743,7 +743,7 @@ gistSplit(Relation r,
743743VARSIZE (entryvec )= (maxoff + 2 )* sizeof (GISTENTRY )+ VARHDRSZ ;
744744
745745/* now let the user-defined picksplit function set up the split vector */
746- (giststate -> picksplitFn ) (entryvec ,& v );
746+ (* fmgr_faddr ( & giststate -> picksplitFn ) ) (entryvec ,& v );
747747
748748/* compress ldatum and rdatum */
749749gistcentryinit (giststate ,& tmpentry ,v .spl_ldatum , (Relation )NULL ,
@@ -1072,7 +1072,7 @@ gistchoose(Relation r, Page p, IndexTuple it,/* it has compressed entry */
10721072size = IndexTupleSize (datum )- sizeof (IndexTupleData );
10731073datum += sizeof (IndexTupleData );
10741074gistdentryinit (giststate ,& entry ,datum ,r ,p ,i ,size , FALSE);
1075- (giststate -> penaltyFn ) (& entry ,& identry ,& usize );
1075+ (* fmgr_faddr ( & giststate -> penaltyFn ) ) (& entry ,& identry ,& usize );
10761076if (which_grow < 0 || usize < which_grow )
10771077{
10781078which = i ;
@@ -1150,8 +1150,6 @@ initGISTstate(GISTSTATE *giststate, Relation index)
11501150RegProcedure penalty_proc ,
11511151picksplit_proc ,
11521152equal_proc ;
1153- func_ptr user_fn ;
1154- int pronargs ;
11551153HeapTuple htup ;
11561154IndexTupleForm itupform ;
11571155
@@ -1162,20 +1160,13 @@ initGISTstate(GISTSTATE *giststate, Relation index)
11621160penalty_proc = index_getprocid (index ,1 ,GIST_PENALTY_PROC );
11631161picksplit_proc = index_getprocid (index ,1 ,GIST_PICKSPLIT_PROC );
11641162equal_proc = index_getprocid (index ,1 ,GIST_EQUAL_PROC );
1165- fmgr_info (consistent_proc ,& user_fn ,& pronargs );
1166- giststate -> consistentFn = user_fn ;
1167- fmgr_info (union_proc ,& user_fn ,& pronargs );
1168- giststate -> unionFn = user_fn ;
1169- fmgr_info (compress_proc ,& user_fn ,& pronargs );
1170- giststate -> compressFn = user_fn ;
1171- fmgr_info (decompress_proc ,& user_fn ,& pronargs );
1172- giststate -> decompressFn = user_fn ;
1173- fmgr_info (penalty_proc ,& user_fn ,& pronargs );
1174- giststate -> penaltyFn = user_fn ;
1175- fmgr_info (picksplit_proc ,& user_fn ,& pronargs );
1176- giststate -> picksplitFn = user_fn ;
1177- fmgr_info (equal_proc ,& user_fn ,& pronargs );
1178- giststate -> equalFn = user_fn ;
1163+ fmgr_info (consistent_proc ,& giststate -> consistentFn );
1164+ fmgr_info (union_proc ,& giststate -> unionFn );
1165+ fmgr_info (compress_proc ,& giststate -> compressFn );
1166+ fmgr_info (decompress_proc ,& giststate -> decompressFn );
1167+ fmgr_info (penalty_proc ,& giststate -> penaltyFn );
1168+ fmgr_info (picksplit_proc ,& giststate -> picksplitFn );
1169+ fmgr_info (equal_proc ,& giststate -> equalFn );
11791170
11801171/* see if key type is different from type of attribute being indexed */
11811172htup = SearchSysCacheTuple (INDEXRELID ,ObjectIdGetDatum (index -> rd_id ),
@@ -1259,7 +1250,7 @@ gistdentryinit(GISTSTATE *giststate, GISTENTRY *e, char *pr, Relation r,
12591250gistentryinit (* e ,pr ,r ,pg ,o ,b ,l );
12601251if (giststate -> haskeytype )
12611252{
1262- dep = (GISTENTRY * ) ((giststate -> decompressFn ) (e ));
1253+ dep = (GISTENTRY * ) ((* fmgr_faddr ( & giststate -> decompressFn ) ) (e ));
12631254gistentryinit (* e ,dep -> pred ,dep -> rel ,dep -> page ,dep -> offset ,dep -> bytes ,
12641255dep -> leafkey );
12651256if (dep != e )
@@ -1280,7 +1271,7 @@ gistcentryinit(GISTSTATE *giststate, GISTENTRY *e, char *pr, Relation r,
12801271gistentryinit (* e ,pr ,r ,pg ,o ,b ,l );
12811272if (giststate -> haskeytype )
12821273{
1283- cep = (GISTENTRY * ) ((giststate -> compressFn ) (e ));
1274+ cep = (GISTENTRY * ) ((* fmgr_faddr ( & giststate -> compressFn ) ) (e ));
12841275gistentryinit (* e ,cep -> pred ,cep -> rel ,cep -> page ,cep -> offset ,cep -> bytes ,
12851276cep -> leafkey );
12861277if (cep != e )