aboutsummaryrefslogtreecommitdiffstats
path: root/lang
diff options
context:
space:
mode:
authorolgeni <olgeni@FreeBSD.org>2005-05-01 17:16:02 +0800
committerolgeni <olgeni@FreeBSD.org>2005-05-01 17:16:02 +0800
commitcab8c8f37fd00ac648a5512f0223371bee012f7c (patch)
treef6f480a389f0d442a82eeb8492cf415672a7cce5 /lang
parent1d00c2fbc3e6c0d0612597eb33b357eb98ba9c42 (diff)
downloadfreebsd-ports-graphics-cab8c8f37fd00ac648a5512f0223371bee012f7c.tar.gz
freebsd-ports-graphics-cab8c8f37fd00ac648a5512f0223371bee012f7c.tar.zst
freebsd-ports-graphics-cab8c8f37fd00ac648a5512f0223371bee012f7c.zip
Upgrade to version R10B-4.
Diffstat (limited to 'lang')
-rw-r--r--lang/erlang/Makefile9
-rw-r--r--lang/erlang/Makefile.lib32
-rw-r--r--lang/erlang/distinfo12
-rw-r--r--lang/erlang/files/patch-lib_compiler_src_beam__validator.erl117
-rw-r--r--lang/erlang/files/patch-lib_inets_src_http__client_httpc__request.erl14
-rw-r--r--lang/erlang/files/patch-lib_kernel_src_rpc.erl28
-rw-r--r--lang/erlang/pkg-message2
-rw-r--r--lang/erlang14/Makefile9
-rw-r--r--lang/erlang14/Makefile.lib32
-rw-r--r--lang/erlang14/distinfo12
-rw-r--r--lang/erlang14/files/patch-lib_compiler_src_beam__validator.erl117
-rw-r--r--lang/erlang14/files/patch-lib_inets_src_http__client_httpc__request.erl14
-rw-r--r--lang/erlang14/files/patch-lib_kernel_src_rpc.erl28
-rw-r--r--lang/erlang14/pkg-message2
14 files changed, 288 insertions, 140 deletions
diff --git a/lang/erlang/Makefile b/lang/erlang/Makefile
index 1c0445cfc89..603de9479e3 100644
--- a/lang/erlang/Makefile
+++ b/lang/erlang/Makefile
@@ -6,8 +6,7 @@
#
PORTNAME= erlang
-PORTVERSION= r10b3
-PORTREVISION= 1
+PORTVERSION= r10b4
PORTEPOCH= 1
CATEGORIES= lang parallel
MASTER_SITES= http://www.erlang.org/download/ \
@@ -15,7 +14,7 @@ MASTER_SITES= http://www.erlang.org/download/ \
http://www.erlang.org/download/ \
http://erlang.stacken.kth.se/download/ \
http://www.csd.uu.se/ftp/mirror/erlang/download/
-DISTNAME= otp_src_R10B-3
+DISTNAME= otp_src_R10B-4
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} ${ERLANG_MAN} ${ERLANG_DOCS}
DIST_SUBDIR= erlang
@@ -32,9 +31,9 @@ RUN_DEPENDS= wish8.4:${PORTSDIR}/x11-toolkits/tk84
JAVABINDIR?= ${LOCALBASE}/jdk1.4.2/bin
JAVAPORT?= ${JAVABINDIR}/javac:${PORTSDIR}/java/jdk14
-ERLANG_MAN= otp_doc_man_R10B-3.tar.gz
+ERLANG_MAN= otp_doc_man_R10B-4.tar.gz
.if !defined(NOPORTDOCS)
-ERLANG_DOCS= otp_doc_html_R10B-3.tar.gz
+ERLANG_DOCS= otp_doc_html_R10B-4.tar.gz
.endif
USE_GMAKE= yes
diff --git a/lang/erlang/Makefile.lib b/lang/erlang/Makefile.lib
index 1e38ead4abe..754c2e65a78 100644
--- a/lang/erlang/Makefile.lib
+++ b/lang/erlang/Makefile.lib
@@ -1,9 +1,9 @@
# $FreeBSD$
-ERTS_VSN= 5.4.4
+ERTS_VSN= 5.4.5
OTP_LIBS= appmon-2.1.4 \
- asn1-1.4.4.4 \
- compiler-4.3.3 \
+ asn1-1.4.4.5 \
+ compiler-4.3.5 \
cosEvent-2.1 \
cosEventDomain-1.1 \
cosFileTransfer-1.1.2 \
@@ -14,33 +14,33 @@ OTP_LIBS= appmon-2.1.4 \
crypto-1.2.3 \
debugger-2.3.2 \
edoc-0.6.1 \
- erl_interface-3.5.1 \
+ erl_interface-3.5.2 \
et-1.0 \
gs-1.5.4 \
- hipe-3.0.2 \
- ic-4.2.7 \
- inets-4.2 \
+ hipe-3.4.0 \
+ ic-4.2.9 \
+ inets-4.3.1 \
jinterface-1.3 \
- kernel-2.10.4 \
- megaco-3.0 \
+ kernel-2.10.6 \
+ megaco-3.0.1 \
mnemosyne-1.2.5 \
mnesia-4.2.1 \
mnesia_session-1.1.5 \
- observer-0.9.6 \
- odbc-2.0.2 \
+ observer-0.9.6.1 \
+ odbc-2.0.3 \
orber-3.5.3 \
- os_mon-1.7.2 \
+ os_mon-1.7.3 \
otp_mibs-1.0.4 \
- parsetools-1.3.1 \
+ parsetools-1.3.2 \
pman-2.5.2 \
runtime_tools-1.5.1 \
sasl-2.0.1 \
- snmp-4.1.1 \
+ snmp-4.1.2 \
ssl-3.0.5 \
- stdlib-1.13.4 \
+ stdlib-1.13.5 \
syntax_tools-1.4.1 \
toolbar-1.2.1 \
- tools-2.4.1 \
+ tools-2.4.2 \
tv-2.1.2 \
webtool-0.8.2 \
xmerl-1.0
diff --git a/lang/erlang/distinfo b/lang/erlang/distinfo
index 5e48b9defbc..a34260b7870 100644
--- a/lang/erlang/distinfo
+++ b/lang/erlang/distinfo
@@ -1,6 +1,6 @@
-MD5 (erlang/otp_src_R10B-3.tar.gz) = 4eb8a702b6cf98f3dfa8602d9d7c20fb
-SIZE (erlang/otp_src_R10B-3.tar.gz) = 9936188
-MD5 (erlang/otp_doc_man_R10B-3.tar.gz) = 4ceb6d8b9c44716b1695ecb36e3d8330
-SIZE (erlang/otp_doc_man_R10B-3.tar.gz) = 593032
-MD5 (erlang/otp_doc_html_R10B-3.tar.gz) = 4b0bf3a4fff2d4632885efa047b5fd5b
-SIZE (erlang/otp_doc_html_R10B-3.tar.gz) = 4568533
+MD5 (erlang/otp_src_R10B-4.tar.gz) = 253700bdcd966909f140ea0bfbeb9b7c
+SIZE (erlang/otp_src_R10B-4.tar.gz) = 9988051
+MD5 (erlang/otp_doc_man_R10B-4.tar.gz) = 1d5f850706c0d321e712bc7971adedc5
+SIZE (erlang/otp_doc_man_R10B-4.tar.gz) = 594849
+MD5 (erlang/otp_doc_html_R10B-4.tar.gz) = 57fffd9113d88cc1a16c7890c3552f9e
+SIZE (erlang/otp_doc_html_R10B-4.tar.gz) = 4582699
diff --git a/lang/erlang/files/patch-lib_compiler_src_beam__validator.erl b/lang/erlang/files/patch-lib_compiler_src_beam__validator.erl
new file mode 100644
index 00000000000..23d4a21953a
--- /dev/null
+++ b/lang/erlang/files/patch-lib_compiler_src_beam__validator.erl
@@ -0,0 +1,117 @@
+
+$FreeBSD$
+
+--- lib/compiler/src/beam_validator.erl.orig
++++ lib/compiler/src/beam_validator.erl
+@@ -415,7 +415,7 @@
+ TupleType0 = get_term_type(Tuple, Vst0),
+ PosType = get_term_type(Pos, Vst0),
+ Vst1 = branch_state(Fail, Vst0),
+- TupleType = upgrade_type({tuple,[get_tuple_size(PosType)]}, TupleType0),
++ TupleType = upgrade_tuple_type({tuple,[get_tuple_size(PosType)]}, TupleType0),
+ Vst = set_type(TupleType, Tuple, Vst1),
+ set_type_reg(term, Dst, Vst);
+ valfun_4({arithbif,Op,F,Src,Dst}, Vst) ->
+@@ -529,8 +529,9 @@
+ assert_term(Float, Vst),
+ set_type({float,[]}, Float, branch_state(Lbl, Vst));
+ valfun_4({test,is_tuple,{f,Lbl},[Tuple]}, Vst) ->
+- assert_term(Tuple, Vst),
+- set_type({tuple,[0]}, Tuple, branch_state(Lbl, Vst));
++ Type0 = get_term_type(Tuple, Vst),
++ Type = upgrade_tuple_type({tuple,[0]}, Type0),
++ set_type(Type, Tuple, branch_state(Lbl, Vst));
+ valfun_4({test,is_nonempty_list,{f,Lbl},[Cons]}, Vst) ->
+ assert_term(Cons, Vst),
+ set_type(cons, Cons, branch_state(Lbl, Vst));
+@@ -843,54 +844,25 @@
+ assert_type(Needed, Actual) ->
+ error({bad_type,{needed,Needed},{actual,Actual}}).
+
+-%% upgrade_type/2 is used when linear code finds out more and
+-%% more information about a type, so the type gets "narrower"
+-%% or perhaps inconsistent. In the case of inconsistency
+-%% we mostly widen the type to 'term' to make subsequent
+-%% code fail if it assumes anything about the type.
+
+-upgrade_type(Same, Same) -> Same;
+-upgrade_type(term, OldT) -> OldT;
+-upgrade_type(NewT, term) -> NewT;
+-upgrade_type({Type,New}=NewT, {Type,Old}=OldT)
+- when Type == atom; Type == integer; Type == float ->
+- if New =:= Old -> OldT;
+- New =:= [] -> OldT;
+- Old =:= [] -> NewT;
+- true -> term
+- end;
+-upgrade_type({Type,_}=NewT, number)
+- when Type == integer; Type == float ->
+- NewT;
+-upgrade_type(number, {Type,_}=OldT)
+- when Type == integer; Type == float ->
+- OldT;
+-upgrade_type(bool, {atom,A}) ->
+- upgrade_bool(A);
+-upgrade_type({atom,A}, bool) ->
+- upgrade_bool(A);
+-upgrade_type({tuple,[Sz]}, {tuple,[OldSz]})
+- when is_integer(Sz) ->
+- {tuple,[max(Sz, OldSz)]};
+-upgrade_type({tuple,Sz}=T, {tuple,[_]})
+- when is_integer(Sz) ->
+- %% This also takes care of the user error when a tuple element
+- %% is accesed outside the known exact tuple size; there is
+- %% no more type information, just a runtime error which is not
+- %% our problem.
+- T;
+-upgrade_type({tuple,[Sz]}, {tuple,_}=T)
+- when is_integer(Sz) ->
+- %% Same as the previous clause but mirrored.
+- T;
+-upgrade_type(_A, _B) ->
+- %%io:format("upgrade_type: ~p ~p\n", [_A,_B]),
+- term.
++%% upgrade_tuple_type(NewTupleType, OldType) -> TupleType.
++%% upgrade_tuple_type/2 is used when linear code finds out more and
++%% more information about a tuple type, so that the type gets more
++%% specialized. If OldType is not a tuple type, the type information
++%% is inconsistent, and we know that some instructions will never
++%% be executed at run-time.
+
+-upgrade_bool([]) -> bool;
+-upgrade_bool(true) -> {atom,true};
+-upgrade_bool(false) -> {atom,false};
+-upgrade_bool(_) -> term.
++upgrade_tuple_type({tuple,[Sz]}, {tuple,[OldSz]}=T) when Sz < OldSz ->
++ %% The old type has a higher value for the least tuple size.
++ T;
++upgrade_tuple_type({tuple,_}=T, _) ->
++ %% The new type information is exact or has a higher value for
++ %% the least tuple size.
++ %% Note that inconsistencies are also handled in this
++ %% clause, e.g. if the old type was an integer or a tuple accessed
++ %% outside its size; inconsistences will generally cause an exception
++ %% at run-time but are safe from our point of view.
++ T.
+
+ get_tuple_size({integer,[]}) -> 0;
+ get_tuple_size({integer,Sz}) -> Sz;
+@@ -1172,7 +1144,7 @@
+ end,
+ case get_term_type({x,0}, Vst) of
+ {integer,[]} -> TupleType;
+- {integer,I} -> upgrade_type({tuple,[I]}, TupleType);
++ {integer,I} -> upgrade_tuple_type({tuple,[I]}, TupleType);
+ _ -> TupleType
+ end;
+ return_type_1(erlang, F, A, _) ->
+@@ -1214,9 +1186,6 @@
+
+ min(A, B) when is_integer(A), is_integer(B), A < B -> A;
+ min(A, B) when is_integer(A), is_integer(B) -> B.
+-
+-max(A, B) when is_integer(A), is_integer(B), A > B -> A;
+-max(A, B) when is_integer(A), is_integer(B) -> B.
+
+ gb_trees_from_list(L) -> gb_trees:from_orddict(orddict:from_list(L)).
+
diff --git a/lang/erlang/files/patch-lib_inets_src_http__client_httpc__request.erl b/lang/erlang/files/patch-lib_inets_src_http__client_httpc__request.erl
deleted file mode 100644
index 41663e66341..00000000000
--- a/lang/erlang/files/patch-lib_inets_src_http__client_httpc__request.erl
+++ /dev/null
@@ -1,14 +0,0 @@
-
-$FreeBSD$
-
---- lib/inets/src/http_client/httpc_request.erl.orig
-+++ lib/inets/src/http_client/httpc_request.erl
-@@ -78,7 +78,7 @@
- %%%========================================================================
- post_data(Method, Headers, {ContentType, Body})
- when Method == post; Method == put ->
-- ContentLength = length(Body),
-+ ContentLength = integer_to_list(length(Body)),
- NewBody = case Headers#http_request_h.expect of
- "100-continue" ->
- "";
diff --git a/lang/erlang/files/patch-lib_kernel_src_rpc.erl b/lang/erlang/files/patch-lib_kernel_src_rpc.erl
deleted file mode 100644
index 7a94e2a9657..00000000000
--- a/lang/erlang/files/patch-lib_kernel_src_rpc.erl
+++ /dev/null
@@ -1,28 +0,0 @@
-
-$FreeBSD$
-
---- lib/kernel/src/rpc.erl.orig
-+++ lib/kernel/src/rpc.erl
-@@ -495,16 +495,16 @@
- ReplyTo ! {self(), {promise_reply, R}} %% self() is key
- end).
-
--yield(Key) when pid(Key) ->
-- {value, R} = do_yield(Key, infinite),
-+yield(Key) when is_pid(Key) ->
-+ {value,R} = do_yield(Key, infinity),
- R.
-
--nb_yield(Key, infinite) when pid(Key) ->
-- do_yield(Key, infinite);
--nb_yield(Key, Timeout) when pid(Key), integer(Timeout), Timeout >= 0 ->
-+nb_yield(Key, infinity=Inf) when is_pid(Key) ->
-+ do_yield(Key, Inf);
-+nb_yield(Key, Timeout) when is_pid(Key), is_integer(Timeout), Timeout >= 0 ->
- do_yield(Key, Timeout).
-
--nb_yield(Key) when pid(Key) ->
-+nb_yield(Key) when is_pid(Key) ->
- do_yield(Key, 0).
-
- do_yield(Key, Timeout) ->
diff --git a/lang/erlang/pkg-message b/lang/erlang/pkg-message
index d6bad9c3831..663ff59e717 100644
--- a/lang/erlang/pkg-message
+++ b/lang/erlang/pkg-message
@@ -7,7 +7,7 @@ Installation tips:
You can find an emacs mode for Erlang here:
- ${LOCALBASE}/lib/erlang/lib/tools-2.4.1/emacs
+ ${LOCALBASE}/lib/erlang/lib/tools-2.4.2/emacs
You may wish to add the following line to /etc/manpath.config:
diff --git a/lang/erlang14/Makefile b/lang/erlang14/Makefile
index 1c0445cfc89..603de9479e3 100644
--- a/lang/erlang14/Makefile
+++ b/lang/erlang14/Makefile
@@ -6,8 +6,7 @@
#
PORTNAME= erlang
-PORTVERSION= r10b3
-PORTREVISION= 1
+PORTVERSION= r10b4
PORTEPOCH= 1
CATEGORIES= lang parallel
MASTER_SITES= http://www.erlang.org/download/ \
@@ -15,7 +14,7 @@ MASTER_SITES= http://www.erlang.org/download/ \
http://www.erlang.org/download/ \
http://erlang.stacken.kth.se/download/ \
http://www.csd.uu.se/ftp/mirror/erlang/download/
-DISTNAME= otp_src_R10B-3
+DISTNAME= otp_src_R10B-4
DISTFILES= ${DISTNAME}${EXTRACT_SUFX} ${ERLANG_MAN} ${ERLANG_DOCS}
DIST_SUBDIR= erlang
@@ -32,9 +31,9 @@ RUN_DEPENDS= wish8.4:${PORTSDIR}/x11-toolkits/tk84
JAVABINDIR?= ${LOCALBASE}/jdk1.4.2/bin
JAVAPORT?= ${JAVABINDIR}/javac:${PORTSDIR}/java/jdk14
-ERLANG_MAN= otp_doc_man_R10B-3.tar.gz
+ERLANG_MAN= otp_doc_man_R10B-4.tar.gz
.if !defined(NOPORTDOCS)
-ERLANG_DOCS= otp_doc_html_R10B-3.tar.gz
+ERLANG_DOCS= otp_doc_html_R10B-4.tar.gz
.endif
USE_GMAKE= yes
diff --git a/lang/erlang14/Makefile.lib b/lang/erlang14/Makefile.lib
index 1e38ead4abe..754c2e65a78 100644
--- a/lang/erlang14/Makefile.lib
+++ b/lang/erlang14/Makefile.lib
@@ -1,9 +1,9 @@
# $FreeBSD$
-ERTS_VSN= 5.4.4
+ERTS_VSN= 5.4.5
OTP_LIBS= appmon-2.1.4 \
- asn1-1.4.4.4 \
- compiler-4.3.3 \
+ asn1-1.4.4.5 \
+ compiler-4.3.5 \
cosEvent-2.1 \
cosEventDomain-1.1 \
cosFileTransfer-1.1.2 \
@@ -14,33 +14,33 @@ OTP_LIBS= appmon-2.1.4 \
crypto-1.2.3 \
debugger-2.3.2 \
edoc-0.6.1 \
- erl_interface-3.5.1 \
+ erl_interface-3.5.2 \
et-1.0 \
gs-1.5.4 \
- hipe-3.0.2 \
- ic-4.2.7 \
- inets-4.2 \
+ hipe-3.4.0 \
+ ic-4.2.9 \
+ inets-4.3.1 \
jinterface-1.3 \
- kernel-2.10.4 \
- megaco-3.0 \
+ kernel-2.10.6 \
+ megaco-3.0.1 \
mnemosyne-1.2.5 \
mnesia-4.2.1 \
mnesia_session-1.1.5 \
- observer-0.9.6 \
- odbc-2.0.2 \
+ observer-0.9.6.1 \
+ odbc-2.0.3 \
orber-3.5.3 \
- os_mon-1.7.2 \
+ os_mon-1.7.3 \
otp_mibs-1.0.4 \
- parsetools-1.3.1 \
+ parsetools-1.3.2 \
pman-2.5.2 \
runtime_tools-1.5.1 \
sasl-2.0.1 \
- snmp-4.1.1 \
+ snmp-4.1.2 \
ssl-3.0.5 \
- stdlib-1.13.4 \
+ stdlib-1.13.5 \
syntax_tools-1.4.1 \
toolbar-1.2.1 \
- tools-2.4.1 \
+ tools-2.4.2 \
tv-2.1.2 \
webtool-0.8.2 \
xmerl-1.0
diff --git a/lang/erlang14/distinfo b/lang/erlang14/distinfo
index 5e48b9defbc..a34260b7870 100644
--- a/lang/erlang14/distinfo
+++ b/lang/erlang14/distinfo
@@ -1,6 +1,6 @@
-MD5 (erlang/otp_src_R10B-3.tar.gz) = 4eb8a702b6cf98f3dfa8602d9d7c20fb
-SIZE (erlang/otp_src_R10B-3.tar.gz) = 9936188
-MD5 (erlang/otp_doc_man_R10B-3.tar.gz) = 4ceb6d8b9c44716b1695ecb36e3d8330
-SIZE (erlang/otp_doc_man_R10B-3.tar.gz) = 593032
-MD5 (erlang/otp_doc_html_R10B-3.tar.gz) = 4b0bf3a4fff2d4632885efa047b5fd5b
-SIZE (erlang/otp_doc_html_R10B-3.tar.gz) = 4568533
+MD5 (erlang/otp_src_R10B-4.tar.gz) = 253700bdcd966909f140ea0bfbeb9b7c
+SIZE (erlang/otp_src_R10B-4.tar.gz) = 9988051
+MD5 (erlang/otp_doc_man_R10B-4.tar.gz) = 1d5f850706c0d321e712bc7971adedc5
+SIZE (erlang/otp_doc_man_R10B-4.tar.gz) = 594849
+MD5 (erlang/otp_doc_html_R10B-4.tar.gz) = 57fffd9113d88cc1a16c7890c3552f9e
+SIZE (erlang/otp_doc_html_R10B-4.tar.gz) = 4582699
diff --git a/lang/erlang14/files/patch-lib_compiler_src_beam__validator.erl b/lang/erlang14/files/patch-lib_compiler_src_beam__validator.erl
new file mode 100644
index 00000000000..23d4a21953a
--- /dev/null
+++ b/lang/erlang14/files/patch-lib_compiler_src_beam__validator.erl
@@ -0,0 +1,117 @@
+
+$FreeBSD$
+
+--- lib/compiler/src/beam_validator.erl.orig
++++ lib/compiler/src/beam_validator.erl
+@@ -415,7 +415,7 @@
+ TupleType0 = get_term_type(Tuple, Vst0),
+ PosType = get_term_type(Pos, Vst0),
+ Vst1 = branch_state(Fail, Vst0),
+- TupleType = upgrade_type({tuple,[get_tuple_size(PosType)]}, TupleType0),
++ TupleType = upgrade_tuple_type({tuple,[get_tuple_size(PosType)]}, TupleType0),
+ Vst = set_type(TupleType, Tuple, Vst1),
+ set_type_reg(term, Dst, Vst);
+ valfun_4({arithbif,Op,F,Src,Dst}, Vst) ->
+@@ -529,8 +529,9 @@
+ assert_term(Float, Vst),
+ set_type({float,[]}, Float, branch_state(Lbl, Vst));
+ valfun_4({test,is_tuple,{f,Lbl},[Tuple]}, Vst) ->
+- assert_term(Tuple, Vst),
+- set_type({tuple,[0]}, Tuple, branch_state(Lbl, Vst));
++ Type0 = get_term_type(Tuple, Vst),
++ Type = upgrade_tuple_type({tuple,[0]}, Type0),
++ set_type(Type, Tuple, branch_state(Lbl, Vst));
+ valfun_4({test,is_nonempty_list,{f,Lbl},[Cons]}, Vst) ->
+ assert_term(Cons, Vst),
+ set_type(cons, Cons, branch_state(Lbl, Vst));
+@@ -843,54 +844,25 @@
+ assert_type(Needed, Actual) ->
+ error({bad_type,{needed,Needed},{actual,Actual}}).
+
+-%% upgrade_type/2 is used when linear code finds out more and
+-%% more information about a type, so the type gets "narrower"
+-%% or perhaps inconsistent. In the case of inconsistency
+-%% we mostly widen the type to 'term' to make subsequent
+-%% code fail if it assumes anything about the type.
+
+-upgrade_type(Same, Same) -> Same;
+-upgrade_type(term, OldT) -> OldT;
+-upgrade_type(NewT, term) -> NewT;
+-upgrade_type({Type,New}=NewT, {Type,Old}=OldT)
+- when Type == atom; Type == integer; Type == float ->
+- if New =:= Old -> OldT;
+- New =:= [] -> OldT;
+- Old =:= [] -> NewT;
+- true -> term
+- end;
+-upgrade_type({Type,_}=NewT, number)
+- when Type == integer; Type == float ->
+- NewT;
+-upgrade_type(number, {Type,_}=OldT)
+- when Type == integer; Type == float ->
+- OldT;
+-upgrade_type(bool, {atom,A}) ->
+- upgrade_bool(A);
+-upgrade_type({atom,A}, bool) ->
+- upgrade_bool(A);
+-upgrade_type({tuple,[Sz]}, {tuple,[OldSz]})
+- when is_integer(Sz) ->
+- {tuple,[max(Sz, OldSz)]};
+-upgrade_type({tuple,Sz}=T, {tuple,[_]})
+- when is_integer(Sz) ->
+- %% This also takes care of the user error when a tuple element
+- %% is accesed outside the known exact tuple size; there is
+- %% no more type information, just a runtime error which is not
+- %% our problem.
+- T;
+-upgrade_type({tuple,[Sz]}, {tuple,_}=T)
+- when is_integer(Sz) ->
+- %% Same as the previous clause but mirrored.
+- T;
+-upgrade_type(_A, _B) ->
+- %%io:format("upgrade_type: ~p ~p\n", [_A,_B]),
+- term.
++%% upgrade_tuple_type(NewTupleType, OldType) -> TupleType.
++%% upgrade_tuple_type/2 is used when linear code finds out more and
++%% more information about a tuple type, so that the type gets more
++%% specialized. If OldType is not a tuple type, the type information
++%% is inconsistent, and we know that some instructions will never
++%% be executed at run-time.
+
+-upgrade_bool([]) -> bool;
+-upgrade_bool(true) -> {atom,true};
+-upgrade_bool(false) -> {atom,false};
+-upgrade_bool(_) -> term.
++upgrade_tuple_type({tuple,[Sz]}, {tuple,[OldSz]}=T) when Sz < OldSz ->
++ %% The old type has a higher value for the least tuple size.
++ T;
++upgrade_tuple_type({tuple,_}=T, _) ->
++ %% The new type information is exact or has a higher value for
++ %% the least tuple size.
++ %% Note that inconsistencies are also handled in this
++ %% clause, e.g. if the old type was an integer or a tuple accessed
++ %% outside its size; inconsistences will generally cause an exception
++ %% at run-time but are safe from our point of view.
++ T.
+
+ get_tuple_size({integer,[]}) -> 0;
+ get_tuple_size({integer,Sz}) -> Sz;
+@@ -1172,7 +1144,7 @@
+ end,
+ case get_term_type({x,0}, Vst) of
+ {integer,[]} -> TupleType;
+- {integer,I} -> upgrade_type({tuple,[I]}, TupleType);
++ {integer,I} -> upgrade_tuple_type({tuple,[I]}, TupleType);
+ _ -> TupleType
+ end;
+ return_type_1(erlang, F, A, _) ->
+@@ -1214,9 +1186,6 @@
+
+ min(A, B) when is_integer(A), is_integer(B), A < B -> A;
+ min(A, B) when is_integer(A), is_integer(B) -> B.
+-
+-max(A, B) when is_integer(A), is_integer(B), A > B -> A;
+-max(A, B) when is_integer(A), is_integer(B) -> B.
+
+ gb_trees_from_list(L) -> gb_trees:from_orddict(orddict:from_list(L)).
+
diff --git a/lang/erlang14/files/patch-lib_inets_src_http__client_httpc__request.erl b/lang/erlang14/files/patch-lib_inets_src_http__client_httpc__request.erl
deleted file mode 100644
index 41663e66341..00000000000
--- a/lang/erlang14/files/patch-lib_inets_src_http__client_httpc__request.erl
+++ /dev/null
@@ -1,14 +0,0 @@
-
-$FreeBSD$
-
---- lib/inets/src/http_client/httpc_request.erl.orig
-+++ lib/inets/src/http_client/httpc_request.erl
-@@ -78,7 +78,7 @@
- %%%========================================================================
- post_data(Method, Headers, {ContentType, Body})
- when Method == post; Method == put ->
-- ContentLength = length(Body),
-+ ContentLength = integer_to_list(length(Body)),
- NewBody = case Headers#http_request_h.expect of
- "100-continue" ->
- "";
diff --git a/lang/erlang14/files/patch-lib_kernel_src_rpc.erl b/lang/erlang14/files/patch-lib_kernel_src_rpc.erl
deleted file mode 100644
index 7a94e2a9657..00000000000
--- a/lang/erlang14/files/patch-lib_kernel_src_rpc.erl
+++ /dev/null
@@ -1,28 +0,0 @@
-
-$FreeBSD$
-
---- lib/kernel/src/rpc.erl.orig
-+++ lib/kernel/src/rpc.erl
-@@ -495,16 +495,16 @@
- ReplyTo ! {self(), {promise_reply, R}} %% self() is key
- end).
-
--yield(Key) when pid(Key) ->
-- {value, R} = do_yield(Key, infinite),
-+yield(Key) when is_pid(Key) ->
-+ {value,R} = do_yield(Key, infinity),
- R.
-
--nb_yield(Key, infinite) when pid(Key) ->
-- do_yield(Key, infinite);
--nb_yield(Key, Timeout) when pid(Key), integer(Timeout), Timeout >= 0 ->
-+nb_yield(Key, infinity=Inf) when is_pid(Key) ->
-+ do_yield(Key, Inf);
-+nb_yield(Key, Timeout) when is_pid(Key), is_integer(Timeout), Timeout >= 0 ->
- do_yield(Key, Timeout).
-
--nb_yield(Key) when pid(Key) ->
-+nb_yield(Key) when is_pid(Key) ->
- do_yield(Key, 0).
-
- do_yield(Key, Timeout) ->
diff --git a/lang/erlang14/pkg-message b/lang/erlang14/pkg-message
index d6bad9c3831..663ff59e717 100644
--- a/lang/erlang14/pkg-message
+++ b/lang/erlang14/pkg-message
@@ -7,7 +7,7 @@ Installation tips:
You can find an emacs mode for Erlang here:
- ${LOCALBASE}/lib/erlang/lib/tools-2.4.1/emacs
+ ${LOCALBASE}/lib/erlang/lib/tools-2.4.2/emacs
You may wish to add the following line to /etc/manpath.config: