diff options
author | Erich Eckner <git@eckner.net> | 2021-04-20 12:00:13 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2021-04-20 12:00:13 +0200 |
commit | f521d7b71513e868769e8395343819d91d77a086 (patch) | |
tree | ab15ee91ac00370c07e30bdbba71b715a19bdc23 | |
parent | fe1b7bb2ebd8ebba149fb3ebe7fccb91c1fd4338 (diff) | |
download | archlinuxewe-f521d7b71513e868769e8395343819d91d77a086.tar.xz |
make fpc-src-svn a separate package
-rw-r--r-- | fpc-src-svn/.gitignore | 1 | ||||
-rw-r--r-- | fpc-src-svn/38680_refined_htypechk.pas-2.patch | 195 | ||||
-rw-r--r-- | fpc-src-svn/PKGBUILD | 47 |
3 files changed, 243 insertions, 0 deletions
diff --git a/fpc-src-svn/.gitignore b/fpc-src-svn/.gitignore new file mode 100644 index 000000000..65d12c1d4 --- /dev/null +++ b/fpc-src-svn/.gitignore @@ -0,0 +1 @@ +fpcsrc diff --git a/fpc-src-svn/38680_refined_htypechk.pas-2.patch b/fpc-src-svn/38680_refined_htypechk.pas-2.patch new file mode 100644 index 000000000..e859cddd6 --- /dev/null +++ b/fpc-src-svn/38680_refined_htypechk.pas-2.patch @@ -0,0 +1,195 @@ +Index: compiler/htypechk.pas +=================================================================== +--- compiler/htypechk.pas (리비전 49131) ++++ compiler/htypechk.pas (작업 사본) +@@ -2892,11 +2892,15 @@ + obj_to : tobjectdef; + def_from, + def_to : tdef; ++ tempn, + currpt, + pt : tcallparanode; ++ eqtemp, + eq, + mineq : tequaltype; ++ nconvtyp, + convtype : tconverttype; ++ npd, + pdtemp, + pdoper : tprocdef; + releasecurrpt : boolean; +@@ -3001,7 +3005,10 @@ + is_integer(def_to) and + is_in_limit(def_from,def_to) then + begin +- eq:=te_equal; ++ if torddef(def_from).ordtype=torddef(def_to).ordtype then ++ eq:=te_exact ++ else ++ eq:=te_equal; + hp^.ordinal_distance:=hp^.ordinal_distance+ + abs(bestreal(torddef(def_from).low)-bestreal(torddef(def_to).low)); + rth:=bestreal(torddef(def_to).high); +@@ -3023,7 +3030,10 @@ + is_real_or_cextended(def_from) and + is_real_or_cextended(def_to) then + begin +- eq:=te_equal; ++ if tfloatdef(def_from).floattype=tfloatdef(def_to).floattype then ++ eq:=te_exact ++ else ++ eq:=te_equal; + if is_extended(def_to) then + rth:=4 + else +@@ -3130,6 +3140,30 @@ + para_allowed(eq,currpt,def_to); + end; + end; ++ { to specialize pointer } ++ if (eq<te_exact) and ++ is_pointer(def_from) and is_pointer(def_to) and ++ (tstoreddef(tpointerdef(def_to).pointeddef).is_specialization) then ++ begin ++ eqtemp:=compare_defs_ext(tpointerdef(def_from).pointeddef,tpointerdef(def_to).pointeddef,nothingn,nconvtyp,npd,[cdo_equal_check]); ++ if eqtemp<>te_exact then ++ { void pointer } ++ if currpt.left.nodetype=addrn then ++ begin ++ tempn:=tcallparanode(currpt.left); ++ while assigned(tempn) do ++ begin ++ if tempn.nodetype in [loadn,derefn] then ++ begin ++ eqtemp:=compare_defs_ext(tempn.resultdef,tpointerdef(def_to).pointeddef,nothingn,nconvtyp,npd,[cdo_equal_check]); ++ break; ++ end; ++ tempn:=tcallparanode(tempn.left); ++ end; ++ end; ++ if eqtemp=te_exact then ++ eq:=te_exact; ++ end; + + { univ parameters match if the size matches (don't override the + comparison result if it was ok, since a match based on the +@@ -3145,7 +3179,6 @@ + procvar is choosen. See tb0471 (PFV) } + if (pt<>currpt) and (eq=te_exact) then + eq:=te_equal; +- + { increase correct counter } + case eq of + te_exact : +@@ -3291,53 +3324,53 @@ + res:=(bestpd^.coper_count-currpd^.coper_count); + if (res=0) then + begin +- { less cl6 parameters? } +- res:=(bestpd^.cl6_count-currpd^.cl6_count); +- if (res=0) then +- begin +- { less cl5 parameters? } +- res:=(bestpd^.cl5_count-currpd^.cl5_count); +- if (res=0) then +- begin +- { less cl4 parameters? } +- res:=(bestpd^.cl4_count-currpd^.cl4_count); ++ { more exact parameters? } ++ res:=(currpd^.exact_count-bestpd^.exact_count); ++ if (res=0) then ++ begin ++ { less cl6 parameters? } ++ res:=(bestpd^.cl6_count-currpd^.cl6_count); ++ if (res=0) then ++ begin ++ { less cl5 parameters? } ++ res:=(bestpd^.cl5_count-currpd^.cl5_count); + if (res=0) then + begin +- { less cl3 parameters? } +- res:=(bestpd^.cl3_count-currpd^.cl3_count); ++ { less cl4 parameters? } ++ res:=(bestpd^.cl4_count-currpd^.cl4_count); + if (res=0) then + begin +- { less cl2 parameters? } +- res:=(bestpd^.cl2_count-currpd^.cl2_count); +- if (res=0) then +- begin +- { less cl1 parameters? } +- res:=(bestpd^.cl1_count-currpd^.cl1_count); +- if (res=0) then +- begin +- { more exact parameters? } +- res:=(currpd^.exact_count-bestpd^.exact_count); +- if (res=0) then +- begin +- { less equal parameters? } +- res:=(bestpd^.equal_count-currpd^.equal_count); +- if (res=0) then +- begin +- { smaller ordinal distance? } +- if (currpd^.ordinal_distance<bestpd^.ordinal_distance) then +- res:=1 +- else +- if (currpd^.ordinal_distance>bestpd^.ordinal_distance) then +- res:=-1 +- else +- res:=0; +- end; +- end; +- end; +- end; ++ { less cl3 parameters? } ++ res:=(bestpd^.cl3_count-currpd^.cl3_count); ++ if (res=0) then ++ begin ++ { less cl2 parameters? } ++ res:=(bestpd^.cl2_count-currpd^.cl2_count); ++ if (res=0) then ++ begin ++ { less cl1 parameters? } ++ res:=(bestpd^.cl1_count-currpd^.cl1_count); ++ if (res=0) then ++ begin ++ { less equal parameters? } ++ res:=(bestpd^.equal_count-currpd^.equal_count); ++ if (res=0) then ++ begin ++ { smaller ordinal distance? } ++ if (currpd^.ordinal_distance<bestpd^.ordinal_distance) then ++ res:=1 ++ else ++ if (currpd^.ordinal_distance>bestpd^.ordinal_distance) then ++ res:=-1 ++ else ++ res:=0; ++ end; ++ end; ++ end; ++ end; + end; + end; +- end; ++ end; + end; + end; + end; +@@ -3608,7 +3641,7 @@ + cpoptions:=cpoptions+[cpo_rtlproc]; + + compare_by_old_sortout_check := 0; // can't decide, bestpd probably wasn't sorted out in unpatched +- if (compare_paras(pd^.data.paras,bestpd^.data.paras,cp_value_equal_const,cpoptions)>=te_equal) and ++ if (compare_paras(pd^.data.paras,bestpd^.data.paras,cp_value_equal_const,cpoptions)>te_equal) and + (not(po_objc in bestpd^.data.procoptions) or (bestpd^.data.messageinf.str^=pd^.data.messageinf.str^)) then + compare_by_old_sortout_check := 1; // bestpd was sorted out before patch + end; +@@ -3643,7 +3676,6 @@ + end; + end; + +- + function tcallcandidates.choose_best(var bestpd:tabstractprocdef; singlevariant: boolean):integer; + var + pd: tprocdef; diff --git a/fpc-src-svn/PKGBUILD b/fpc-src-svn/PKGBUILD new file mode 100644 index 000000000..4db37322a --- /dev/null +++ b/fpc-src-svn/PKGBUILD @@ -0,0 +1,47 @@ +# Maintainer: Erich Eckner <arch at eckner dot net> +# Contributor: L <alaviss 0 at gmail dot com> +# Contributor: Sergej Pupykin <pupykin.s+arch@gmail.com> +# Contributor: Valeriy Lyasotskiy <onestep@ukr.net> +# Contributor: Jan Willemson <janwil@hot.ee> +# Contributor: Hugo Ideler <hugoideler@dse.nl> +# Contributor: BlackIkeEagle <ike DOT devolder AT gmail DOT com> +# Original PKGBUILD: Andre Naumann <anaumann@SPARCed.org> +# See http://bbs.archlinux.org/viewtopic.php?t=9318&highlight=fpc + +pkgname='fpc-src-svn' +pkgver=3.3.1.r49238 +_pkgver="${pkgver%.r*}" +_revision="${pkgver##*.r}" +pkgrel=1 +arch=('any') +url='http://www.freepascal.org/' +license=('GPL' 'LGPL' 'custom') +depends=() +pkgdesc='Sources for the Free Pascal Compiler (required by the Lazarus IDE)' +options=('!strip') +conflicts=('fpc-src') +provides=("fpc-src=${pkgver}") + +source=('38680_refined_htypechk.pas-2.patch' +'fpcsrc::svn+http://svn.freepascal.org/svn/fpc/trunk#revision='"${_revision}") +sha512sums=('583e26eca23d4fde9b6dc163c8e97cd5f271ca98e38560e0da0b79d30652a876f5c66e4b7c2ea32b429f34855b1cdc48987f4fd7bb7cf63eeafcbb6a08ee9693' + 'SKIP') + +pkgver() { + cd "${srcdir}"/fpcsrc + printf '%s.r%s' \ + $(grep -m 1 'version' Makefile.fpc | cut -d '=' -f 2) \ + $(svnversion | tr -d [A-z]) +} + +prepare() { + cd "${srcdir}"/fpcsrc + patch -p0 -i "${srcdir}/38680_refined_htypechk.pas-2.patch" +} + +package() { + + install -dm755 "${pkgdir}"/usr/lib/fpc/src + + mv "${srcdir}"/fpcsrc/* "${pkgdir}"/usr/lib/fpc/src/ +} |