aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL-WIN32.md14
-rw-r--r--erts/doc/src/driver.xml2
-rw-r--r--erts/doc/src/erl_driver.xml46
-rw-r--r--lib/asn1/src/asn1_db.erl16
-rw-r--r--lib/asn1/src/asn1ct.erl4
-rw-r--r--lib/asn1/src/asn1ct_check.erl88
-rw-r--r--lib/asn1/test/asn1_SUITE_data/Constraints.py1
-rw-r--r--lib/asn1/test/testConstraints.erl19
-rw-r--r--lib/common_test/doc/src/getting_started_chapter.xml4
-rw-r--r--lib/eldap/doc/src/eldap.xml4
-rw-r--r--lib/eldap/doc/src/notes.xml4
-rw-r--r--lib/eldap/doc/src/release_notes.xml4
-rw-r--r--lib/wx/api_gen/wx_gen_erl.erl4
-rw-r--r--lib/wx/src/gen/wxCheckListBox.erl2
-rw-r--r--lib/wx/src/gen/wxChoice.erl6
-rw-r--r--lib/wx/src/gen/wxComboBox.erl6
-rw-r--r--lib/wx/src/gen/wxControlWithItems.erl2
-rw-r--r--lib/wx/src/gen/wxFileDataObject.erl2
-rw-r--r--lib/wx/src/gen/wxFileDialog.erl4
-rw-r--r--lib/wx/src/gen/wxGridCellChoiceEditor.erl4
-rw-r--r--lib/wx/src/gen/wxListBox.erl10
-rw-r--r--lib/wx/src/gen/wxMultiChoiceDialog.erl4
-rw-r--r--lib/wx/src/gen/wxRadioBox.erl8
-rw-r--r--lib/wx/src/gen/wxSingleChoiceDialog.erl4
24 files changed, 126 insertions, 136 deletions
diff --git a/INSTALL-WIN32.md b/INSTALL-WIN32.md
index 93b7e3a1e1..4e14c6fee4 100644
--- a/INSTALL-WIN32.md
+++ b/INSTALL-WIN32.md
@@ -211,10 +211,10 @@ Frequently Asked Questions
A: For Cygwin and Msys alike, we try to use the latest releases
available when building. What versions you use shouldn't really
matter, I try to include workarounds for the bugs I've found in
- different Cygwin/Msys releases, please help me to add workarounds
+ different Cygwin/Msys releases, please help me add workarounds
for new Cygwin/Msys-related bugs as soon as you encounter
them. Also please do submit bug reports to the appropriate Cygwin
- adn/or Msys developers. The GCC we used for %OTP-REL% was version
+ and/or Msys developers. The GCC we used for %OTP-REL% was version
4.7.0 (MinGW 64bit) and 4.3.4 (Cygwin 32bit). We used VC++ 10.0
(i.e. Visual studio 2010), Sun's JDK 1.5.0\_17 (32bit) and Sun's
JDK 1.7.0\_1 (64bit), NSIS 2.46, and Win32 OpenSSL 0.9.8r. Please
@@ -291,7 +291,7 @@ OpenSSL. Well' here's the list:
used but Sun's Java compiler and virtual machine...
If you are going to build a 64bit Windows version, you should make
- sure to get MinGWs 64bit gcc installed with cygwin. It's in one of
+ sure to get MinGW's 64bit gcc installed with cygwin. It's in one of
the development packages.
URL: <http://www.cygwin.com>
@@ -428,7 +428,7 @@ OpenSSL. Well' here's the list:
e.g. `C:\Program`, they might still reside in `C:\Program Files`
in reality...
- If you are building a 64 bit verision of Erlang, you should set up
+ If you are building a 64 bit version of Erlang, you should set up
PATHs etc a little differently. I use the following script to
make things work in both Cygwin and Msys:
@@ -977,7 +977,7 @@ URL:<http://code.google.com/p/msysgit/>
that makes a nice Git port. The msys prompt you get from MsysGIT is
however not compatible with the full version from MinGW, so you will
-need to check out files using MsysGITs command prompt and then switch
+need to check out files using MsysGIT's command prompt and then switch
to a common Msys command prompt for building. Also all test suites
cannot be built as MsysGIT/Msys does not handle symbolic links. To
build test suites on Windows, you will need Cygwin for now. Hopefully
@@ -1002,11 +1002,11 @@ deserved.
Of course this would have been completely impossible without the
excellent Cygwin. The guys at Cygnus solutions and
-Redhat deserves a huge THANKS! as well as all the other people in the
+Redhat deserve a huge THANKS! as well as all the other people in the
free software community who have helped in creating the magnificent
software that constitutes Cygwin.
-Also the people developing the alternative command prompt Msys anfd
+Also the people developing the alternative command prompt Msys and
the MinGW compiler are worth huge THANKS! The 64bit port would have
been impossible without the 64bit MinGW compiler.
diff --git a/erts/doc/src/driver.xml b/erts/doc/src/driver.xml
index ac5729880d..52283879c7 100644
--- a/erts/doc/src/driver.xml
+++ b/erts/doc/src/driver.xml
@@ -31,7 +31,7 @@
<note><p>This document was written a long time ago. A lot of it is still
interesting since it explains important concepts, but it was
- written for an older driver interface so the examples does not
+ written for an older driver interface so the examples do not
work anymore. The reader is encouraged to read
<seealso marker="erl_driver">erl_driver</seealso> and the
<seealso marker="driver_entry">driver_entry</seealso> documentation.
diff --git a/erts/doc/src/erl_driver.xml b/erts/doc/src/erl_driver.xml
index b5df4ca0c8..4fd74b783e 100644
--- a/erts/doc/src/erl_driver.xml
+++ b/erts/doc/src/erl_driver.xml
@@ -43,8 +43,8 @@
to the runtime system at driver initialization, and some new
driver API functions. </p>
<note>
- <p>As of erts version 5.9 old drivers has to be recompiled
- and has to use the extended interface. They also has to be
+ <p>As of erts version 5.9 old drivers have to be recompiled
+ and have to use the extended interface. They also have to be
adjusted to the
<seealso marker="#rewrites_for_64_bits">64-bit capable driver interface.
</seealso>
@@ -283,7 +283,7 @@
called return garbage sizes to the emulator causing it
to read random memory and create huge incorrect result blobs.</p>
<p>Therefore it is not enough to just recompile drivers written with
- version management for pre-R15B types; the types has to be changed
+ version management for pre-R15B types; the types have to be changed
in the driver suggesting other rewrites especially regarding
size variables. Investigate all warnings when recompiling!</p>
<p>Also, the API driver functions <c>driver_output*</c>,
@@ -356,19 +356,19 @@
<p>
Driver callback
<c><seealso marker="driver_entry#output">output</seealso></c>
- now gets <c>ErlDrvSizeT</c> as 3:rd argument instead
+ now gets <c>ErlDrvSizeT</c> as 3rd argument instead
of previously <c>int</c>.
</p>
<p>
Driver callback
<c><seealso marker="driver_entry#control">control</seealso></c>
- now gets <c>ErlDrvSizeT</c> as 4:th and 6:th arguments instead
+ now gets <c>ErlDrvSizeT</c> as 4th and 6th arguments instead
of previously <c>int</c>.
</p>
<p>
Driver callback
<c><seealso marker="driver_entry#call">call</seealso></c>
- now gets <c>ErlDrvSizeT</c> as 4:th and 6:th arguments instead
+ now gets <c>ErlDrvSizeT</c> as 4th and 6th arguments instead
of previously <c>int</c>.
</p>
<p>
@@ -410,54 +410,54 @@
<tag>Arguments and return values in the driver API</tag>
<item>
<p>
- Many driver API functions has changed argument type
+ Many driver API functions have changed argument type
and/or return value to <c>ErlDrvSizeT</c> from mostly <c>int</c>.
Automatic type casting probably makes these changes necessary only
for a driver that encounters sizes larger than 32 bits.
</p>
<taglist>
<tag><seealso marker="#driver_output">driver_output</seealso></tag>
- <item>3:rd argument</item>
+ <item>3rd argument</item>
<tag><seealso marker="#driver_output2">driver_output2</seealso></tag>
- <item>3:rd and 5:th arguments</item>
+ <item>3rd and 5th arguments</item>
<tag>
<seealso marker="#driver_output_binary">driver_output_binary</seealso>
</tag>
- <item>3:rd 5:th and 6:th arguments</item>
+ <item>3rd 5th and 6th arguments</item>
<tag><seealso marker="#driver_outputv">driver_outputv</seealso></tag>
- <item>3:rd and 5:th arguments</item>
+ <item>3rd and 5th arguments</item>
<tag>
<seealso marker="#driver_vec_to_buf">driver_vec_to_buf</seealso>
</tag>
- <item>3:rd argument and return value</item>
+ <item>3rd argument and return value</item>
<tag><seealso marker="#driver_alloc">driver_alloc</seealso></tag>
- <item>1:st argument</item>
+ <item>1st argument</item>
<tag><seealso marker="#driver_realloc">driver_realloc</seealso></tag>
- <item>2:nd argument</item>
+ <item>2nd argument</item>
<tag>
<seealso marker="#driver_alloc_binary">driver_alloc_binary</seealso>
</tag>
- <item>1:st argument</item>
+ <item>1st argument</item>
<tag>
<seealso marker="#driver_realloc_binary">driver_realloc_binary</seealso>
</tag>
- <item>2:nd argument</item>
+ <item>2nd argument</item>
<tag><seealso marker="#driver_enq">driver_enq</seealso></tag>
- <item>3:rd argument</item>
+ <item>3rd argument</item>
<tag><seealso marker="#driver_pushq">driver_pushq</seealso></tag>
- <item>3:rd argument</item>
+ <item>3rd argument</item>
<tag><seealso marker="#driver_deq">driver_deq</seealso></tag>
- <item>2:nd argument and return value</item>
+ <item>2nd argument and return value</item>
<tag><seealso marker="#driver_sizeq">driver_sizeq</seealso></tag>
<item>return value</item>
<tag><seealso marker="#driver_enq_bin">driver_enq_bin</seealso></tag>
- <item>3:rd and 4:th argument</item>
+ <item>3rd and 4th argument</item>
<tag><seealso marker="#driver_pushq_bin">driver_pushq_bin</seealso></tag>
- <item>3:rd and 4:th argument</item>
+ <item>3rd and 4th argument</item>
<tag><seealso marker="#driver_enqv">driver_enqv</seealso></tag>
- <item>3:rd argument</item>
+ <item>3rd argument</item>
<tag><seealso marker="#driver_pushqv">driver_pushqv</seealso></tag>
- <item>3:rd argument</item>
+ <item>3rd argument</item>
<tag><seealso marker="#driver_peekqv">driver_peekqv</seealso></tag>
<item>return value</item>
</taglist>
diff --git a/lib/asn1/src/asn1_db.erl b/lib/asn1/src/asn1_db.erl
index 0862ef6e02..843fc66c9c 100644
--- a/lib/asn1/src/asn1_db.erl
+++ b/lib/asn1/src/asn1_db.erl
@@ -48,11 +48,19 @@ dbstop() -> Resp = req(stop), erase(?MODULE), Resp.
%% Internal functions
req(Request) ->
- get(?MODULE) ! {self(), Request},
- receive {?MODULE, Reply} -> Reply after 5000 -> exit(db_timeout) end.
+ DbPid = get(?MODULE),
+ Ref = erlang:monitor(process,DbPid),
+ get(?MODULE) ! {{Ref, self()}, Request},
+ receive
+ {{Ref,?MODULE}, Reply} ->
+ erlang:demonitor(Ref,[flush]),
+ Reply;
+ {'DOWN',Ref,_,_,Info} ->
+ exit({db_error,Info})
+ end.
-reply(From, Response) ->
- From ! {?MODULE, Response}.
+reply({Ref,From}, Response) ->
+ From ! {{Ref,?MODULE}, Response}.
init(Parent, Includes) ->
MRef = erlang:monitor(process, Parent),
diff --git a/lib/asn1/src/asn1ct.erl b/lib/asn1/src/asn1ct.erl
index 2d17f73a2c..99755a95a6 100644
--- a/lib/asn1/src/asn1ct.erl
+++ b/lib/asn1/src/asn1ct.erl
@@ -816,7 +816,9 @@ check({true,M},File,OutFile,Includes,EncodingRule,DbFile,Options,InputMods) ->
asn1_db:dbsave(DbFile,M#module.name),
verbose("--~p--~n",[{generated,DbFile}],Options),
{true,{M,NewM,GenTypeOrVal}}
- end
+ end;
+ ErrorList = {error,_} ->
+ {false,ErrorList}
end;
check({false,M},_,_,_,_,_,_,_) ->
{false,M}.
diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl
index c223561f12..187339fb53 100644
--- a/lib/asn1/src/asn1ct_check.erl
+++ b/lib/asn1/src/asn1ct_check.erl
@@ -4399,22 +4399,22 @@ constraint_union(_S,C) ->
constraint_union1(S,[A={'ValueRange',_},union,B={'ValueRange',_}|Rest],Acc) ->
AunionB = constraint_union_vr([A,B]),
- constraint_union1(S,Rest,AunionB++Acc);
+ constraint_union1(S,Rest,Acc ++ AunionB);
constraint_union1(S,[A={'SingleValue',_},union,B={'SingleValue',_}|Rest],Acc) ->
AunionB = constraint_union_sv(S,[A,B]),
- constraint_union1(S,Rest,AunionB++Acc);
+ constraint_union1(S,Rest,Acc ++ AunionB);
constraint_union1(S,[A={'SingleValue',_},union,B={'ValueRange',_}|Rest],Acc) ->
AunionB = union_sv_vr(S,A,B),
- constraint_union1(S,Rest,AunionB++Acc);
+ constraint_union1(S,Rest,Acc ++ AunionB);
constraint_union1(S,[A={'ValueRange',_},union,B={'SingleValue',_}|Rest],Acc) ->
AunionB = union_sv_vr(S,B,A),
- constraint_union1(S,Rest,AunionB++Acc);
+ constraint_union1(S,Rest,Acc ++ AunionB);
constraint_union1(S,[union|Rest],Acc) -> %skip when unsupported constraints
constraint_union1(S,Rest,Acc);
constraint_union1(S,[A|Rest],Acc) ->
constraint_union1(S,Rest,[A|Acc]);
constraint_union1(_S,[],Acc) ->
- lists:reverse(Acc).
+ Acc.
constraint_union_sv(_S,SV) ->
Values=lists:map(fun({_,V})->V end,SV),
@@ -4467,63 +4467,33 @@ constraint_union_vr([{_,{_,Ub2}}|Rest],A=[{_,{_,Ub1}}|_Acc]) when Ub2=<Ub1->
constraint_union_vr([VR|Rest],Acc) ->
constraint_union_vr(Rest,[VR|Acc]).
-union_sv_vr(_S,C1={'SingleValue',SV},C2={'ValueRange',VR={Lb,Ub}})
+union_sv_vr(_S,{'SingleValue',SV},VR)
when is_integer(SV) ->
- case is_int_in_vr(SV,C2) of
- true -> [C2];
- _ ->
- case VR of
- {'MIN',Ub} when SV==Ub+1 -> [{'ValueRange',{'MIN',SV}}];
- {Lb,'MAX'} when SV==Lb-1 -> [{'ValueRange',{SV,'MAX'}}];
- {Lb,Ub} when SV==Ub+1 -> [{'ValueRange',{Lb,SV}}];
- {Lb,Ub} when SV==Lb-1 -> [{'ValueRange',{SV,Ub}}];
- _ ->
- [C1,C2]
- end
- end;
-union_sv_vr(_S,C1={'SingleValue',SV},C2={'ValueRange',{_Lb,_Ub}})
+ union_sv_vr(_S,{'SingleValue',[SV]},VR);
+union_sv_vr(_S,{'SingleValue',SV},{'ValueRange',{VLb,VUb}})
when is_list(SV) ->
- case lists:filter(fun(X)->is_int_in_vr(X,C2) end,SV) of
- [] -> [C2];
- L ->
- case expand_vr(L,C2) of
- {[],C3} -> [C3];
- {L,C2} -> [C1,C2];
- {[Val],C3} -> [{'SingleValue',Val},C3];
- {L2,C3} -> [{'SingleValue',L2},C3]
- end
- end.
-
-expand_vr(L,VR={_,{Lb,Ub}}) ->
- case lower_Lb(L,Lb) of
- false ->
- case higher_Ub(L,Ub) of
- false ->
- {L,VR};
- {L1,UbNew} ->
- expand_vr(L1,{'ValueRange',{Lb,UbNew}})
- end;
- {L1,LbNew} ->
- expand_vr(L1,{'ValueRange',{LbNew,Ub}})
- end.
-
-lower_Lb(_,'MIN') ->
- false;
-lower_Lb(L,Lb) ->
- remove_val_from_list(Lb - 1,L).
-
-higher_Ub(_,'MAX') ->
- false;
-higher_Ub(L,Ub) ->
- remove_val_from_list(Ub + 1,L).
+ L = lists:sort(SV++[VLb,VUb]),
+ {Lb,L1} = case lists:member('MIN',L) of
+ true -> {'MIN',L--['MIN']}; % remove 'MIN' so it does not disturb
+ false -> {hd(L),tl(L)}
+ end,
+ Ub = case lists:member('MAX',L1) of
+ true -> 'MAX';
+ false -> lists:last(L1)
+ end,
+ case SV of
+ [H] -> H;
+ _ -> SV
+ end,
+ %% for now we through away the Singlevalues so that they don't disturb
+ %% in the code generating phase (the effective Valuerange is already
+ %% calculated. If we want to keep the Singlevalues as well for
+ %% use in code gen phases we need to introduce a new representation
+ %% like {'ValueRange',{Lb,Ub},[ListOfRanges|AntiValues|Singlevalues]
+ %% These could be used to generate guards which allows only the specific
+ %% values , not the full range
+ [{'ValueRange',{Lb,Ub}}].
-remove_val_from_list(Val,List) ->
- case lists:member(Val,List) of
- true ->
- {lists:delete(Val,List),Val};
- false ->
- false
- end.
%% get_constraints/2
%% Arguments are a list of constraints, which has the format {key,value},
diff --git a/lib/asn1/test/asn1_SUITE_data/Constraints.py b/lib/asn1/test/asn1_SUITE_data/Constraints.py
index b18c29bd89..de48c4c2ca 100644
--- a/lib/asn1/test/asn1_SUITE_data/Constraints.py
+++ b/lib/asn1/test/asn1_SUITE_data/Constraints.py
@@ -51,6 +51,7 @@ Thing ::= INTEGER {fred (0),fred2 (1),fred3 (2)}
AnotherThing ::= Thing (fred | fred2)
I ::= INTEGER (0|15..269) -- OTP-5457
+X1 ::= INTEGER (1..4 | 8 | 10 | 20) -- OTP-9946
-- OTP-5511
diff --git a/lib/asn1/test/testConstraints.erl b/lib/asn1/test/testConstraints.erl
index cb15a24359..1ce68ec522 100644
--- a/lib/asn1/test/testConstraints.erl
+++ b/lib/asn1/test/testConstraints.erl
@@ -127,17 +127,26 @@ int_constraints(Rules) ->
?line {ok,0} = asn1_wrapper:decode('Constraints','I',Bytes12),
?line {ok,Bytes13} = asn1_wrapper:encode('Constraints','I',20),
?line {ok,20} = asn1_wrapper:decode('Constraints','I',Bytes13),
-
+
+ %%==========================================================
+ %% Constraint Combinations (Duboisson p. 285)
+ %% X1 ::= INTEGER (1..4|8|10|20)
+ %%==========================================================
+
+ ?line {ok,Bytes14} = asn1_wrapper:encode('Constraints','X1',1),
+ ?line {ok,1} = asn1_wrapper:decode('Constraints','X1',Bytes14),
+ ?line {ok,Bytes15} = asn1_wrapper:encode('Constraints','X1',20),
+ ?line {ok,20} = asn1_wrapper:decode('Constraints','X1',Bytes15),
%%==========================================================
%% SIZE Constraint (Duboisson p. 268)
%% T ::= IA5String (SIZE (1|2, ..., SIZE (1|2|3)))
%% T2 ::= IA5String (SIZE (1|2, ..., 3))
%%==========================================================
- ?line {ok,Bytes14} = asn1_wrapper:encode('Constraints','T',"IA"),
- ?line {ok,"IA"} = asn1_wrapper:decode('Constraints','T',Bytes14),
- ?line {ok,Bytes15} = asn1_wrapper:encode('Constraints','T2',"IA"),
- ?line {ok,"IA"} = asn1_wrapper:decode('Constraints','T2',Bytes15).
+ ?line {ok,Bytes16} = asn1_wrapper:encode('Constraints','T',"IA"),
+ ?line {ok,"IA"} = asn1_wrapper:decode('Constraints','T',Bytes16),
+ ?line {ok,Bytes17} = asn1_wrapper:encode('Constraints','T2',"IA"),
+ ?line {ok,"IA"} = asn1_wrapper:decode('Constraints','T2',Bytes17).
refed_NNL_name(_Erule) ->
diff --git a/lib/common_test/doc/src/getting_started_chapter.xml b/lib/common_test/doc/src/getting_started_chapter.xml
index 05e21241cb..7919edd183 100644
--- a/lib/common_test/doc/src/getting_started_chapter.xml
+++ b/lib/common_test/doc/src/getting_started_chapter.xml
@@ -90,7 +90,7 @@
<p>As you can understand from the illustration above, Common Test requires
that a test case generates a runtime error to indicate failure (e.g.
by causing a bad match error or by calling <c>exit/1</c>, preferrably
- through the <c>ct:fail/1/2</c> help function). A succesful execution is
+ through the <c>ct:fail/1,2</c> help function). A succesful execution is
indicated by means of a normal return from the test case function.
</p>
</section>
@@ -198,7 +198,7 @@
<pre>
1> ct:run_test([{suite, "check_log_SUITE"}]).</pre>
<p>
- The result from running our test is printed in log files on HTML format
+ The result from running our test is printed in log files in HTML format
(stored in unique log directories on different level). This illustration
shows the log file structure:
</p>
diff --git a/lib/eldap/doc/src/eldap.xml b/lib/eldap/doc/src/eldap.xml
index 7040085c49..04dad2eee7 100644
--- a/lib/eldap/doc/src/eldap.xml
+++ b/lib/eldap/doc/src/eldap.xml
@@ -247,12 +247,12 @@ filter() See present/1, substrings/2,
<desc> <p>Always derefrence aliases.</p> </desc>
</func>
<func>
- <name> derefInSearching() -> dereference()</name>
+ <name>derefInSearching() -> dereference()</name>
<fsummary>Create search option.</fsummary>
<desc> <p>Derefrence aliases only when searching.</p> </desc>
</func>
<func>
- <name> derefFindingBaseObj() -> dereference()</name>
+ <name>derefFindingBaseObj() -> dereference()</name>
<fsummary>Create search option.</fsummary>
<desc> <p>Derefrence aliases only in finding the base.</p> </desc>
</func>
diff --git a/lib/eldap/doc/src/notes.xml b/lib/eldap/doc/src/notes.xml
index 4ded452bc3..d9b11875de 100644
--- a/lib/eldap/doc/src/notes.xml
+++ b/lib/eldap/doc/src/notes.xml
@@ -21,8 +21,8 @@
</legalnotice>
- <title>Crypto Release Notes</title>
- <prepared>Peter H&ouml;gfeldt</prepared>
+ <title>Eldap Release Notes</title>
+ <prepared>OTP team</prepared>
<docno></docno>
<date>2003-06-06</date>
<rev>B</rev>
diff --git a/lib/eldap/doc/src/release_notes.xml b/lib/eldap/doc/src/release_notes.xml
index 65c1d09bb6..778a49b894 100644
--- a/lib/eldap/doc/src/release_notes.xml
+++ b/lib/eldap/doc/src/release_notes.xml
@@ -22,8 +22,8 @@
The Initial Developer of the Original Code is Ericsson AB.
</legalnotice>
- <title>Crypto Release Notes</title>
- <prepared>Peter Hj&ouml;gfeldt</prepared>
+ <title>Eldap Release Notes</title>
+ <prepared>OTP team</prepared>
<docno></docno>
<date>2003-06-01</date>
<rev>B</rev>
diff --git a/lib/wx/api_gen/wx_gen_erl.erl b/lib/wx/api_gen/wx_gen_erl.erl
index 6159b7c4bd..a8f23575f3 100644
--- a/lib/wx/api_gen/wx_gen_erl.erl
+++ b/lib/wx/api_gen/wx_gen_erl.erl
@@ -763,8 +763,8 @@ doc_arg_type3(#type{base=string}, in) -> "unicode:chardata()";
doc_arg_type3(#type{base=string}, out) -> "unicode:charlist()";
doc_arg_type3(#type{name="wxChar", single=S},in) when S =/= true -> "unicode:chardata()";
doc_arg_type3(#type{name="wxChar", single=S},out) when S =/= true -> "unicode:charlist()";
-doc_arg_type3(#type{name="wxArrayString"},in) -> "[unicode:chardata()]";
-doc_arg_type3(#type{name="wxArrayString"},out) -> "[unicode:charlist()]";
+doc_arg_type3(#type{name="wxArrayString"},in) -> "unicode:chardata()";
+doc_arg_type3(#type{name="wxArrayString"},out) -> "unicode:charlist()";
doc_arg_type3(#type{name="wxDateTime"}, _) -> "wx:wx_datetime()";
doc_arg_type3(#type{name="wxArtClient"}, _) -> "unicode:chardata()";
doc_arg_type3(#type{base=int}, _) -> "integer()";
diff --git a/lib/wx/src/gen/wxCheckListBox.erl b/lib/wx/src/gen/wxCheckListBox.erl
index 083a9e32f4..382345abfa 100644
--- a/lib/wx/src/gen/wxCheckListBox.erl
+++ b/lib/wx/src/gen/wxCheckListBox.erl
@@ -104,7 +104,7 @@ new(Parent,Id)
Parent::wxWindow:wxWindow(), Id::integer(),
Option :: {pos, {X::integer(), Y::integer()}}
| {size, {W::integer(), H::integer()}}
- | {choices, [[unicode:chardata()]]}
+ | {choices, [unicode:chardata()]}
| {style, integer()}
| {validator, wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
diff --git a/lib/wx/src/gen/wxChoice.erl b/lib/wx/src/gen/wxChoice.erl
index 2a2b2688fe..92b094036e 100644
--- a/lib/wx/src/gen/wxChoice.erl
+++ b/lib/wx/src/gen/wxChoice.erl
@@ -102,7 +102,7 @@ new(Parent,Id)
Parent::wxWindow:wxWindow(), Id::integer(),
Option :: {pos, {X::integer(), Y::integer()}}
| {size, {W::integer(), H::integer()}}
- | {choices, [[unicode:chardata()]]}
+ | {choices, [unicode:chardata()]}
| {style, integer()}
| {validator, wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
@@ -120,7 +120,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
%% @equiv create(This,Parent,Id,Pos,Size,Choices, [])
-spec create(This, Parent, Id, Pos, Size, Choices) -> boolean() when
- This::wxChoice(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]].
+ This::wxChoice(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()].
create(This,Parent,Id,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
when is_record(This, wx_ref),is_record(Parent, wx_ref),is_integer(Id),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices) ->
@@ -128,7 +128,7 @@ create(This,Parent,Id,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxchoice.html#wxchoicecreate">external documentation</a>.
-spec create(This, Parent, Id, Pos, Size, Choices, [Option]) -> boolean() when
- This::wxChoice(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]],
+ This::wxChoice(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
Option :: {style, integer()}
| {validator, wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{PosX,PosY},{SizeW,SizeH},Choices, Options)
diff --git a/lib/wx/src/gen/wxComboBox.erl b/lib/wx/src/gen/wxComboBox.erl
index c67ff82bbc..4e6b247f67 100644
--- a/lib/wx/src/gen/wxComboBox.erl
+++ b/lib/wx/src/gen/wxComboBox.erl
@@ -105,7 +105,7 @@ new(Parent,Id)
Option :: {value, unicode:chardata()}
| {pos, {X::integer(), Y::integer()}}
| {size, {W::integer(), H::integer()}}
- | {choices, [[unicode:chardata()]]}
+ | {choices, [unicode:chardata()]}
| {style, integer()}
| {validator, wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
@@ -124,7 +124,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
%% @equiv create(This,Parent,Id,Value,Pos,Size,Choices, [])
-spec create(This, Parent, Id, Value, Pos, Size, Choices) -> boolean() when
- This::wxComboBox(), Parent::wxWindow:wxWindow(), Id::integer(), Value::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]].
+ This::wxComboBox(), Parent::wxWindow:wxWindow(), Id::integer(), Value::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()].
create(This,Parent,Id,Value,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
when is_record(This, wx_ref),is_record(Parent, wx_ref),is_integer(Id),is_list(Value),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices) ->
@@ -132,7 +132,7 @@ create(This,Parent,Id,Value,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxcombobox.html#wxcomboboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Value, Pos, Size, Choices, [Option]) -> boolean() when
- This::wxComboBox(), Parent::wxWindow:wxWindow(), Id::integer(), Value::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]],
+ This::wxComboBox(), Parent::wxWindow:wxWindow(), Id::integer(), Value::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
Option :: {style, integer()}
| {validator, wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,Value,{PosX,PosY},{SizeW,SizeH},Choices, Options)
diff --git a/lib/wx/src/gen/wxControlWithItems.erl b/lib/wx/src/gen/wxControlWithItems.erl
index 1e2f89dbf0..92632a1c31 100644
--- a/lib/wx/src/gen/wxControlWithItems.erl
+++ b/lib/wx/src/gen/wxControlWithItems.erl
@@ -103,7 +103,7 @@ append(#wx_ref{type=ThisT,ref=ThisRef},Item,ClientData)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxcontrolwithitems.html#wxcontrolwithitemsappend">external documentation</a>.
-spec appendStrings(This, Strings) -> ok when
- This::wxControlWithItems(), Strings::[[unicode:chardata()]].
+ This::wxControlWithItems(), Strings::[unicode:chardata()].
appendStrings(#wx_ref{type=ThisT,ref=ThisRef},Strings)
when is_list(Strings) ->
?CLASS(ThisT,wxControlWithItems),
diff --git a/lib/wx/src/gen/wxFileDataObject.erl b/lib/wx/src/gen/wxFileDataObject.erl
index bcb30a5ece..435c795cdc 100644
--- a/lib/wx/src/gen/wxFileDataObject.erl
+++ b/lib/wx/src/gen/wxFileDataObject.erl
@@ -55,7 +55,7 @@ addFile(#wx_ref{type=ThisT,ref=ThisRef},Filename)
<<ThisRef:32/?UI,(byte_size(Filename_UC)):32/?UI,(Filename_UC)/binary, 0:(((8- ((0+byte_size(Filename_UC)) band 16#7)) band 16#7))/unit:8>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxfiledataobject.html#wxfiledataobjectgetfilenames">external documentation</a>.
--spec getFilenames(This) -> [[unicode:charlist()]] when
+-spec getFilenames(This) -> [unicode:charlist()] when
This::wxFileDataObject().
getFilenames(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxFileDataObject),
diff --git a/lib/wx/src/gen/wxFileDialog.erl b/lib/wx/src/gen/wxFileDialog.erl
index 3d65c92758..a257905795 100644
--- a/lib/wx/src/gen/wxFileDialog.erl
+++ b/lib/wx/src/gen/wxFileDialog.erl
@@ -138,7 +138,7 @@ getFilename(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxfiledialog.html#wxfiledialoggetfilenames">external documentation</a>.
--spec getFilenames(This) -> [[unicode:charlist()]] when
+-spec getFilenames(This) -> [unicode:charlist()] when
This::wxFileDialog().
getFilenames(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxFileDialog),
@@ -170,7 +170,7 @@ getPath(#wx_ref{type=ThisT,ref=ThisRef}) ->
<<ThisRef:32/?UI>>).
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxfiledialog.html#wxfiledialoggetpaths">external documentation</a>.
--spec getPaths(This) -> [[unicode:charlist()]] when
+-spec getPaths(This) -> [unicode:charlist()] when
This::wxFileDialog().
getPaths(#wx_ref{type=ThisT,ref=ThisRef}) ->
?CLASS(ThisT,wxFileDialog),
diff --git a/lib/wx/src/gen/wxGridCellChoiceEditor.erl b/lib/wx/src/gen/wxGridCellChoiceEditor.erl
index 6f7d7ceffb..6b037e01b3 100644
--- a/lib/wx/src/gen/wxGridCellChoiceEditor.erl
+++ b/lib/wx/src/gen/wxGridCellChoiceEditor.erl
@@ -41,7 +41,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxGridCellChoiceEditor() :: wx:wx_object().
%% @equiv new(Choices, [])
-spec new(Choices) -> wxGridCellChoiceEditor() when
- Choices::[[unicode:chardata()]].
+ Choices::[unicode:chardata()].
new(Choices)
when is_list(Choices) ->
@@ -49,7 +49,7 @@ new(Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxgridcellchoiceeditor.html#wxgridcellchoiceeditorwxgridcellchoiceeditor">external documentation</a>.
-spec new(Choices, [Option]) -> wxGridCellChoiceEditor() when
- Choices::[[unicode:chardata()]],
+ Choices::[unicode:chardata()],
Option :: {allowOthers, boolean()}.
new(Choices, Options)
when is_list(Choices),is_list(Options) ->
diff --git a/lib/wx/src/gen/wxListBox.erl b/lib/wx/src/gen/wxListBox.erl
index 3b41de9ffc..fa4cbd01d5 100644
--- a/lib/wx/src/gen/wxListBox.erl
+++ b/lib/wx/src/gen/wxListBox.erl
@@ -102,7 +102,7 @@ new(Parent,Id)
Parent::wxWindow:wxWindow(), Id::integer(),
Option :: {pos, {X::integer(), Y::integer()}}
| {size, {W::integer(), H::integer()}}
- | {choices, [[unicode:chardata()]]}
+ | {choices, [unicode:chardata()]}
| {style, integer()}
| {validator, wx:wx_object()}.
new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
@@ -120,7 +120,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id, Options)
%% @equiv create(This,Parent,Id,Pos,Size,Choices, [])
-spec create(This, Parent, Id, Pos, Size, Choices) -> boolean() when
- This::wxListBox(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]].
+ This::wxListBox(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()].
create(This,Parent,Id,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
when is_record(This, wx_ref),is_record(Parent, wx_ref),is_integer(Id),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices) ->
@@ -128,7 +128,7 @@ create(This,Parent,Id,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistbox.html#wxlistboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Pos, Size, Choices, [Option]) -> boolean() when
- This::wxListBox(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]],
+ This::wxListBox(), Parent::wxWindow:wxWindow(), Id::integer(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
Option :: {style, integer()}
| {validator, wx:wx_object()}.
create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef},Id,{PosX,PosY},{SizeW,SizeH},Choices, Options)
@@ -164,7 +164,7 @@ getSelections(#wx_ref{type=ThisT,ref=ThisRef}) ->
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistbox.html#wxlistboxinsertitems">external documentation</a>.
-spec insertItems(This, Items, Pos) -> ok when
- This::wxListBox(), Items::[[unicode:chardata()]], Pos::integer().
+ This::wxListBox(), Items::[unicode:chardata()], Pos::integer().
insertItems(#wx_ref{type=ThisT,ref=ThisRef},Items,Pos)
when is_list(Items),is_integer(Pos) ->
?CLASS(ThisT,wxListBox),
@@ -184,7 +184,7 @@ isSelected(#wx_ref{type=ThisT,ref=ThisRef},N)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxlistbox.html#wxlistboxset">external documentation</a>.
-spec set(This, Items) -> ok when
- This::wxListBox(), Items::[[unicode:chardata()]].
+ This::wxListBox(), Items::[unicode:chardata()].
set(#wx_ref{type=ThisT,ref=ThisRef},Items)
when is_list(Items) ->
?CLASS(ThisT,wxListBox),
diff --git a/lib/wx/src/gen/wxMultiChoiceDialog.erl b/lib/wx/src/gen/wxMultiChoiceDialog.erl
index 04cbb832ea..6a6a6b833a 100644
--- a/lib/wx/src/gen/wxMultiChoiceDialog.erl
+++ b/lib/wx/src/gen/wxMultiChoiceDialog.erl
@@ -94,7 +94,7 @@ new() ->
%% @equiv new(Parent,Message,Caption,Choices, [])
-spec new(Parent, Message, Caption, Choices) -> wxMultiChoiceDialog() when
- Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[[unicode:chardata()]].
+ Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[unicode:chardata()].
new(Parent,Message,Caption,Choices)
when is_record(Parent, wx_ref),is_list(Message),is_list(Caption),is_list(Choices) ->
@@ -102,7 +102,7 @@ new(Parent,Message,Caption,Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxmultichoicedialog.html#wxmultichoicedialogwxmultichoicedialog">external documentation</a>.
-spec new(Parent, Message, Caption, Choices, [Option]) -> wxMultiChoiceDialog() when
- Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[[unicode:chardata()]],
+ Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[unicode:chardata()],
Option :: {style, integer()}
| {pos, {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message,Caption,Choices, Options)
diff --git a/lib/wx/src/gen/wxRadioBox.erl b/lib/wx/src/gen/wxRadioBox.erl
index 7843fde488..b7f52d7d9c 100644
--- a/lib/wx/src/gen/wxRadioBox.erl
+++ b/lib/wx/src/gen/wxRadioBox.erl
@@ -82,7 +82,7 @@ parent_class(_Class) -> erlang:error({badtype, ?MODULE}).
-type wxRadioBox() :: wx:wx_object().
%% @equiv new(Parent,Id,Title,Pos,Size,Choices, [])
-spec new(Parent, Id, Title, Pos, Size, Choices) -> wxRadioBox() when
- Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]].
+ Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()].
new(Parent,Id,Title,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
when is_record(Parent, wx_ref),is_integer(Id),is_list(Title),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices) ->
@@ -90,7 +90,7 @@ new(Parent,Id,Title,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxradiobox.html#wxradioboxwxradiobox">external documentation</a>.
-spec new(Parent, Id, Title, Pos, Size, Choices, [Option]) -> wxRadioBox() when
- Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]],
+ Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
Option :: {majorDim, integer()}
| {style, integer()}
| {val, wx:wx_object()}.
@@ -110,7 +110,7 @@ new(#wx_ref{type=ParentT,ref=ParentRef},Id,Title,{PosX,PosY},{SizeW,SizeH},Choic
%% @equiv create(This,Parent,Id,Title,Pos,Size,Choices, [])
-spec create(This, Parent, Id, Title, Pos, Size, Choices) -> boolean() when
- This::wxRadioBox(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]].
+ This::wxRadioBox(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()].
create(This,Parent,Id,Title,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
when is_record(This, wx_ref),is_record(Parent, wx_ref),is_integer(Id),is_list(Title),is_integer(PosX),is_integer(PosY),is_integer(SizeW),is_integer(SizeH),is_list(Choices) ->
@@ -118,7 +118,7 @@ create(This,Parent,Id,Title,Pos={PosX,PosY},Size={SizeW,SizeH},Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxradiobox.html#wxradioboxcreate">external documentation</a>.
-spec create(This, Parent, Id, Title, Pos, Size, Choices, [Option]) -> boolean() when
- This::wxRadioBox(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[[unicode:chardata()]],
+ This::wxRadioBox(), Parent::wxWindow:wxWindow(), Id::integer(), Title::unicode:chardata(), Pos::{X::integer(), Y::integer()}, Size::{W::integer(), H::integer()}, Choices::[unicode:chardata()],
Option :: {majorDim, integer()}
| {style, integer()}
| {val, wx:wx_object()}.
diff --git a/lib/wx/src/gen/wxSingleChoiceDialog.erl b/lib/wx/src/gen/wxSingleChoiceDialog.erl
index 6f96e283c8..db6b41ae75 100644
--- a/lib/wx/src/gen/wxSingleChoiceDialog.erl
+++ b/lib/wx/src/gen/wxSingleChoiceDialog.erl
@@ -94,7 +94,7 @@ new() ->
%% @equiv new(Parent,Message,Caption,Choices, [])
-spec new(Parent, Message, Caption, Choices) -> wxSingleChoiceDialog() when
- Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[[unicode:chardata()]].
+ Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[unicode:chardata()].
new(Parent,Message,Caption,Choices)
when is_record(Parent, wx_ref),is_list(Message),is_list(Caption),is_list(Choices) ->
@@ -102,7 +102,7 @@ new(Parent,Message,Caption,Choices)
%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxsinglechoicedialog.html#wxsinglechoicedialogwxsinglechoicedialog">external documentation</a>.
-spec new(Parent, Message, Caption, Choices, [Option]) -> wxSingleChoiceDialog() when
- Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[[unicode:chardata()]],
+ Parent::wxWindow:wxWindow(), Message::unicode:chardata(), Caption::unicode:chardata(), Choices::[unicode:chardata()],
Option :: {style, integer()}
| {pos, {X::integer(), Y::integer()}}.
new(#wx_ref{type=ParentT,ref=ParentRef},Message,Caption,Choices, Options)