diff options
212 files changed, 3139 insertions, 2007 deletions
diff --git a/bootstrap/bin/start.boot b/bootstrap/bin/start.boot Binary files differindex 940541dbf8..71d72c4b7d 100644 --- a/bootstrap/bin/start.boot +++ b/bootstrap/bin/start.boot diff --git a/bootstrap/bin/start.script b/bootstrap/bin/start.script index 08ed9939f7..2d6b18ae0c 100644 --- a/bootstrap/bin/start.script +++ b/bootstrap/bin/start.script @@ -1,4 +1,4 @@ -%% script generated at {2010,5,11} {9,2,55} +%% script generated at {2010,6,2} {14,44,59} {script, {"OTP APN 181 01","R14A"}, [{preLoaded, @@ -24,7 +24,7 @@ standard_error,user,user_drv,user_sup,wrap_log_reader]}, {path,["$ROOT/lib/stdlib/ebin"]}, {primLoad, - [array,base64,beam_lib,c,calendar,dets,dets_server,dets_sup, + [array,base64,beam_lib,binary,c,calendar,dets,dets_server,dets_sup, dets_utils,dets_v8,dets_v9,dict,digraph,digraph_utils,edlin, edlin_expand,epp,erl_bits,erl_compile,erl_eval,erl_expand_records, erl_internal,erl_lint,erl_parse,erl_posix_msg,erl_pp,erl_scan, @@ -83,19 +83,19 @@ {vsn,"1.17"}, {id,[]}, {modules, - [array,base64,beam_lib,c,calendar,dets,dets_server, - dets_sup,dets_utils,dets_v8,dets_v9,dict,digraph, - digraph_utils,edlin,edlin_expand,epp,eval_bits, - erl_bits,erl_compile,erl_eval,erl_expand_records, - erl_internal,erl_lint,erl_parse,erl_posix_msg,erl_pp, - erl_scan,erl_tar,error_logger_file_h, - error_logger_tty_h,escript,ets,file_sorter,filelib, - filename,gb_trees,gb_sets,gen,gen_event,gen_fsm, - gen_server,io,io_lib,io_lib_format,io_lib_fread, - io_lib_pretty,lib,lists,log_mf_h,math,ms_transform, - orddict,ordsets,otp_internal,pg,pool,proc_lib, - proplists,qlc,qlc_pt,queue,random,re,regexp,sets, - shell,shell_default,slave,sofs,string,supervisor, + [array,base64,beam_lib,binary,c,calendar,dets, + dets_server,dets_sup,dets_utils,dets_v8,dets_v9,dict, + digraph,digraph_utils,edlin,edlin_expand,epp, + eval_bits,erl_bits,erl_compile,erl_eval, + erl_expand_records,erl_internal,erl_lint,erl_parse, + erl_posix_msg,erl_pp,erl_scan,erl_tar, + error_logger_file_h,error_logger_tty_h,escript,ets, + file_sorter,filelib,filename,gb_trees,gb_sets,gen, + gen_event,gen_fsm,gen_server,io,io_lib,io_lib_format, + io_lib_fread,io_lib_pretty,lib,lists,log_mf_h,math, + ms_transform,orddict,ordsets,otp_internal,pg,pool, + proc_lib,proplists,qlc,qlc_pt,queue,random,re,regexp, + sets,shell,shell_default,slave,sofs,string,supervisor, supervisor_bridge,sys,timer,unicode,win32reg,zip]}, {registered, [timer_server,rsh_starter,take_over_monitor, diff --git a/bootstrap/bin/start_clean.boot b/bootstrap/bin/start_clean.boot Binary files differindex 940541dbf8..71d72c4b7d 100644 --- a/bootstrap/bin/start_clean.boot +++ b/bootstrap/bin/start_clean.boot diff --git a/bootstrap/bin/start_clean.script b/bootstrap/bin/start_clean.script index 08ed9939f7..2d6b18ae0c 100644 --- a/bootstrap/bin/start_clean.script +++ b/bootstrap/bin/start_clean.script @@ -1,4 +1,4 @@ -%% script generated at {2010,5,11} {9,2,55} +%% script generated at {2010,6,2} {14,44,59} {script, {"OTP APN 181 01","R14A"}, [{preLoaded, @@ -24,7 +24,7 @@ standard_error,user,user_drv,user_sup,wrap_log_reader]}, {path,["$ROOT/lib/stdlib/ebin"]}, {primLoad, - [array,base64,beam_lib,c,calendar,dets,dets_server,dets_sup, + [array,base64,beam_lib,binary,c,calendar,dets,dets_server,dets_sup, dets_utils,dets_v8,dets_v9,dict,digraph,digraph_utils,edlin, edlin_expand,epp,erl_bits,erl_compile,erl_eval,erl_expand_records, erl_internal,erl_lint,erl_parse,erl_posix_msg,erl_pp,erl_scan, @@ -83,19 +83,19 @@ {vsn,"1.17"}, {id,[]}, {modules, - [array,base64,beam_lib,c,calendar,dets,dets_server, - dets_sup,dets_utils,dets_v8,dets_v9,dict,digraph, - digraph_utils,edlin,edlin_expand,epp,eval_bits, - erl_bits,erl_compile,erl_eval,erl_expand_records, - erl_internal,erl_lint,erl_parse,erl_posix_msg,erl_pp, - erl_scan,erl_tar,error_logger_file_h, - error_logger_tty_h,escript,ets,file_sorter,filelib, - filename,gb_trees,gb_sets,gen,gen_event,gen_fsm, - gen_server,io,io_lib,io_lib_format,io_lib_fread, - io_lib_pretty,lib,lists,log_mf_h,math,ms_transform, - orddict,ordsets,otp_internal,pg,pool,proc_lib, - proplists,qlc,qlc_pt,queue,random,re,regexp,sets, - shell,shell_default,slave,sofs,string,supervisor, + [array,base64,beam_lib,binary,c,calendar,dets, + dets_server,dets_sup,dets_utils,dets_v8,dets_v9,dict, + digraph,digraph_utils,edlin,edlin_expand,epp, + eval_bits,erl_bits,erl_compile,erl_eval, + erl_expand_records,erl_internal,erl_lint,erl_parse, + erl_posix_msg,erl_pp,erl_scan,erl_tar, + error_logger_file_h,error_logger_tty_h,escript,ets, + file_sorter,filelib,filename,gb_trees,gb_sets,gen, + gen_event,gen_fsm,gen_server,io,io_lib,io_lib_format, + io_lib_fread,io_lib_pretty,lib,lists,log_mf_h,math, + ms_transform,orddict,ordsets,otp_internal,pg,pool, + proc_lib,proplists,qlc,qlc_pt,queue,random,re,regexp, + sets,shell,shell_default,slave,sofs,string,supervisor, supervisor_bridge,sys,timer,unicode,win32reg,zip]}, {registered, [timer_server,rsh_starter,take_over_monitor, diff --git a/bootstrap/lib/compiler/ebin/beam_asm.beam b/bootstrap/lib/compiler/ebin/beam_asm.beam Binary files differindex 2db98a2013..23046bac9f 100644 --- a/bootstrap/lib/compiler/ebin/beam_asm.beam +++ b/bootstrap/lib/compiler/ebin/beam_asm.beam diff --git a/bootstrap/lib/compiler/ebin/beam_block.beam b/bootstrap/lib/compiler/ebin/beam_block.beam Binary files differindex e494c90788..4d71b65e23 100644 --- a/bootstrap/lib/compiler/ebin/beam_block.beam +++ b/bootstrap/lib/compiler/ebin/beam_block.beam diff --git a/bootstrap/lib/compiler/ebin/beam_bool.beam b/bootstrap/lib/compiler/ebin/beam_bool.beam Binary files differindex a1ff7e705d..ef6e7823cc 100644 --- a/bootstrap/lib/compiler/ebin/beam_bool.beam +++ b/bootstrap/lib/compiler/ebin/beam_bool.beam diff --git a/bootstrap/lib/compiler/ebin/beam_bsm.beam b/bootstrap/lib/compiler/ebin/beam_bsm.beam Binary files differindex 87bdc81d1e..fb331ee690 100644 --- a/bootstrap/lib/compiler/ebin/beam_bsm.beam +++ b/bootstrap/lib/compiler/ebin/beam_bsm.beam diff --git a/bootstrap/lib/compiler/ebin/beam_clean.beam b/bootstrap/lib/compiler/ebin/beam_clean.beam Binary files differindex 9127a20bda..0b28815f2a 100644 --- a/bootstrap/lib/compiler/ebin/beam_clean.beam +++ b/bootstrap/lib/compiler/ebin/beam_clean.beam diff --git a/bootstrap/lib/compiler/ebin/beam_dead.beam b/bootstrap/lib/compiler/ebin/beam_dead.beam Binary files differindex bdba7d1bfd..56288dc79e 100644 --- a/bootstrap/lib/compiler/ebin/beam_dead.beam +++ b/bootstrap/lib/compiler/ebin/beam_dead.beam diff --git a/bootstrap/lib/compiler/ebin/beam_disasm.beam b/bootstrap/lib/compiler/ebin/beam_disasm.beam Binary files differindex b58b44c68c..c8e2b27623 100644 --- a/bootstrap/lib/compiler/ebin/beam_disasm.beam +++ b/bootstrap/lib/compiler/ebin/beam_disasm.beam diff --git a/bootstrap/lib/compiler/ebin/beam_flatten.beam b/bootstrap/lib/compiler/ebin/beam_flatten.beam Binary files differindex 8546e1233a..402f2a14ae 100644 --- a/bootstrap/lib/compiler/ebin/beam_flatten.beam +++ b/bootstrap/lib/compiler/ebin/beam_flatten.beam diff --git a/bootstrap/lib/compiler/ebin/beam_jump.beam b/bootstrap/lib/compiler/ebin/beam_jump.beam Binary files differindex 2643874e07..1ee7b725fb 100644 --- a/bootstrap/lib/compiler/ebin/beam_jump.beam +++ b/bootstrap/lib/compiler/ebin/beam_jump.beam diff --git a/bootstrap/lib/compiler/ebin/beam_opcodes.beam b/bootstrap/lib/compiler/ebin/beam_opcodes.beam Binary files differindex 8c5378e05e..6ded472cb0 100644 --- a/bootstrap/lib/compiler/ebin/beam_opcodes.beam +++ b/bootstrap/lib/compiler/ebin/beam_opcodes.beam diff --git a/bootstrap/lib/compiler/ebin/beam_peep.beam b/bootstrap/lib/compiler/ebin/beam_peep.beam Binary files differindex 9fcb2536c8..279dd272b5 100644 --- a/bootstrap/lib/compiler/ebin/beam_peep.beam +++ b/bootstrap/lib/compiler/ebin/beam_peep.beam diff --git a/bootstrap/lib/compiler/ebin/beam_receive.beam b/bootstrap/lib/compiler/ebin/beam_receive.beam Binary files differindex ef7afd8113..4d88e80acd 100644 --- a/bootstrap/lib/compiler/ebin/beam_receive.beam +++ b/bootstrap/lib/compiler/ebin/beam_receive.beam diff --git a/bootstrap/lib/compiler/ebin/beam_trim.beam b/bootstrap/lib/compiler/ebin/beam_trim.beam Binary files differindex 74b0cec2f6..5c0d405843 100644 --- a/bootstrap/lib/compiler/ebin/beam_trim.beam +++ b/bootstrap/lib/compiler/ebin/beam_trim.beam diff --git a/bootstrap/lib/compiler/ebin/beam_type.beam b/bootstrap/lib/compiler/ebin/beam_type.beam Binary files differindex 2f2b518994..cccf58b7a4 100644 --- a/bootstrap/lib/compiler/ebin/beam_type.beam +++ b/bootstrap/lib/compiler/ebin/beam_type.beam diff --git a/bootstrap/lib/compiler/ebin/beam_utils.beam b/bootstrap/lib/compiler/ebin/beam_utils.beam Binary files differindex 51975f77d4..7b9c08439e 100644 --- a/bootstrap/lib/compiler/ebin/beam_utils.beam +++ b/bootstrap/lib/compiler/ebin/beam_utils.beam diff --git a/bootstrap/lib/compiler/ebin/beam_validator.beam b/bootstrap/lib/compiler/ebin/beam_validator.beam Binary files differindex e04c9efa69..9dda0621c0 100644 --- a/bootstrap/lib/compiler/ebin/beam_validator.beam +++ b/bootstrap/lib/compiler/ebin/beam_validator.beam diff --git a/bootstrap/lib/compiler/ebin/cerl.beam b/bootstrap/lib/compiler/ebin/cerl.beam Binary files differindex b0fef4fd1a..9f45f9f441 100644 --- a/bootstrap/lib/compiler/ebin/cerl.beam +++ b/bootstrap/lib/compiler/ebin/cerl.beam diff --git a/bootstrap/lib/compiler/ebin/compile.beam b/bootstrap/lib/compiler/ebin/compile.beam Binary files differindex 3d44822af6..3db3a08335 100644 --- a/bootstrap/lib/compiler/ebin/compile.beam +++ b/bootstrap/lib/compiler/ebin/compile.beam diff --git a/bootstrap/lib/compiler/ebin/core_lib.beam b/bootstrap/lib/compiler/ebin/core_lib.beam Binary files differindex 43c29138b8..8796f7e13e 100644 --- a/bootstrap/lib/compiler/ebin/core_lib.beam +++ b/bootstrap/lib/compiler/ebin/core_lib.beam diff --git a/bootstrap/lib/compiler/ebin/core_lint.beam b/bootstrap/lib/compiler/ebin/core_lint.beam Binary files differindex 75e8b9b162..e7db1d3f72 100644 --- a/bootstrap/lib/compiler/ebin/core_lint.beam +++ b/bootstrap/lib/compiler/ebin/core_lint.beam diff --git a/bootstrap/lib/compiler/ebin/core_parse.beam b/bootstrap/lib/compiler/ebin/core_parse.beam Binary files differindex 19202ce827..631c5d6aba 100644 --- a/bootstrap/lib/compiler/ebin/core_parse.beam +++ b/bootstrap/lib/compiler/ebin/core_parse.beam diff --git a/bootstrap/lib/compiler/ebin/core_pp.beam b/bootstrap/lib/compiler/ebin/core_pp.beam Binary files differindex 94baecf93c..fb9001c52f 100644 --- a/bootstrap/lib/compiler/ebin/core_pp.beam +++ b/bootstrap/lib/compiler/ebin/core_pp.beam diff --git a/bootstrap/lib/compiler/ebin/core_scan.beam b/bootstrap/lib/compiler/ebin/core_scan.beam Binary files differindex d9a088f4c6..cd2146d722 100644 --- a/bootstrap/lib/compiler/ebin/core_scan.beam +++ b/bootstrap/lib/compiler/ebin/core_scan.beam diff --git a/bootstrap/lib/compiler/ebin/erl_bifs.beam b/bootstrap/lib/compiler/ebin/erl_bifs.beam Binary files differindex 8132234cb1..128f8a88d2 100644 --- a/bootstrap/lib/compiler/ebin/erl_bifs.beam +++ b/bootstrap/lib/compiler/ebin/erl_bifs.beam diff --git a/bootstrap/lib/compiler/ebin/rec_env.beam b/bootstrap/lib/compiler/ebin/rec_env.beam Binary files differindex 9e3d93482e..8a1de81396 100644 --- a/bootstrap/lib/compiler/ebin/rec_env.beam +++ b/bootstrap/lib/compiler/ebin/rec_env.beam diff --git a/bootstrap/lib/compiler/ebin/sys_core_fold.beam b/bootstrap/lib/compiler/ebin/sys_core_fold.beam Binary files differindex 6d96618ce7..f780a2fae6 100644 --- a/bootstrap/lib/compiler/ebin/sys_core_fold.beam +++ b/bootstrap/lib/compiler/ebin/sys_core_fold.beam diff --git a/bootstrap/lib/compiler/ebin/sys_expand_pmod.beam b/bootstrap/lib/compiler/ebin/sys_expand_pmod.beam Binary files differindex c0b1ebd802..3323279d7d 100644 --- a/bootstrap/lib/compiler/ebin/sys_expand_pmod.beam +++ b/bootstrap/lib/compiler/ebin/sys_expand_pmod.beam diff --git a/bootstrap/lib/compiler/ebin/sys_pre_expand.beam b/bootstrap/lib/compiler/ebin/sys_pre_expand.beam Binary files differindex 2333028391..919e97fe3e 100644 --- a/bootstrap/lib/compiler/ebin/sys_pre_expand.beam +++ b/bootstrap/lib/compiler/ebin/sys_pre_expand.beam diff --git a/bootstrap/lib/compiler/ebin/v3_codegen.beam b/bootstrap/lib/compiler/ebin/v3_codegen.beam Binary files differindex d55373f6ac..5555d01b2a 100644 --- a/bootstrap/lib/compiler/ebin/v3_codegen.beam +++ b/bootstrap/lib/compiler/ebin/v3_codegen.beam diff --git a/bootstrap/lib/compiler/ebin/v3_core.beam b/bootstrap/lib/compiler/ebin/v3_core.beam Binary files differindex df65af76c7..5d889ea4f3 100644 --- a/bootstrap/lib/compiler/ebin/v3_core.beam +++ b/bootstrap/lib/compiler/ebin/v3_core.beam diff --git a/bootstrap/lib/compiler/ebin/v3_kernel.beam b/bootstrap/lib/compiler/ebin/v3_kernel.beam Binary files differindex 2f3efc7dfb..f87360f259 100644 --- a/bootstrap/lib/compiler/ebin/v3_kernel.beam +++ b/bootstrap/lib/compiler/ebin/v3_kernel.beam diff --git a/bootstrap/lib/compiler/ebin/v3_life.beam b/bootstrap/lib/compiler/ebin/v3_life.beam Binary files differindex 3b39cffbf9..3f0a409447 100644 --- a/bootstrap/lib/compiler/ebin/v3_life.beam +++ b/bootstrap/lib/compiler/ebin/v3_life.beam diff --git a/bootstrap/lib/compiler/egen/beam_opcodes.erl b/bootstrap/lib/compiler/egen/beam_opcodes.erl index 05587800b4..fda227f90f 100644 --- a/bootstrap/lib/compiler/egen/beam_opcodes.erl +++ b/bootstrap/lib/compiler/egen/beam_opcodes.erl @@ -8,7 +8,7 @@ -spec format_number() -> 0. format_number() -> 0. --spec opcode(atom(), 0..8) -> 1..151. +-spec opcode(atom(), 0..8) -> 1..152. opcode(label, 1) -> 1; opcode(func_info, 3) -> 2; opcode(int_code_end, 0) -> 3; @@ -118,7 +118,7 @@ opcode(try_case, 1) -> 106; opcode(try_case_end, 1) -> 107; opcode(raise, 2) -> 108; opcode(bs_init2, 6) -> 109; -opcode(bs_bits_to_bytes, 3) -> 110; +%%opcode(bs_bits_to_bytes, 3) -> 110; opcode(bs_add, 5) -> 111; opcode(apply, 1) -> 112; opcode(apply_last, 2) -> 113; @@ -160,9 +160,10 @@ opcode(bs_put_utf32, 3) -> 148; opcode(on_load, 0) -> 149; opcode(recv_mark, 1) -> 150; opcode(recv_set, 1) -> 151; +opcode(gc_bif3, 7) -> 152; opcode(Name, Arity) -> erlang:error(badarg, [Name,Arity]). --spec opname(1..151) -> {atom(),0..8}. +-spec opname(1..152) -> {atom(),0..8}. opname(1) -> {label,1}; opname(2) -> {func_info,3}; opname(3) -> {int_code_end,0}; @@ -314,4 +315,5 @@ opname(148) -> {bs_put_utf32,3}; opname(149) -> {on_load,0}; opname(150) -> {recv_mark,1}; opname(151) -> {recv_set,1}; +opname(152) -> {gc_bif3,7}; opname(Number) -> erlang:error(badarg, [Number]). diff --git a/bootstrap/lib/compiler/egen/core_parse.erl b/bootstrap/lib/compiler/egen/core_parse.erl index 093ab4d1a3..05624beb14 100644 --- a/bootstrap/lib/compiler/egen/core_parse.erl +++ b/bootstrap/lib/compiler/egen/core_parse.erl @@ -13,7 +13,7 @@ tok_val(T) -> element(3, T). tok_line(T) -> element(2, T). --file("/usr/local/lib/erlang/lib/parsetools-2.0.2/include/yeccpre.hrl", 0). +-file("/usr/local/otp/releases/sles10_32_R13B04_patched/lib/parsetools-2.0.2/include/yeccpre.hrl", 0). %% %% %CopyrightBegin% %% @@ -194,7 +194,7 @@ yecctoken2string(Other) -> --file("/Users/bjorng/Downloads/otp/bootstrap/lib/compiler/egen/core_parse.erl", 197). +-file("/clearcase/otp/erts/bootstrap/lib/compiler/egen/core_parse.erl", 197). yeccpars2(0=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_0(S, Cat, Ss, Stack, T, Ts, Tzr); diff --git a/bootstrap/lib/kernel/ebin/application_controller.beam b/bootstrap/lib/kernel/ebin/application_controller.beam Binary files differindex 093c2adbdf..113faeda01 100644 --- a/bootstrap/lib/kernel/ebin/application_controller.beam +++ b/bootstrap/lib/kernel/ebin/application_controller.beam diff --git a/bootstrap/lib/kernel/ebin/application_master.beam b/bootstrap/lib/kernel/ebin/application_master.beam Binary files differindex 1d82fcd682..602dc36104 100644 --- a/bootstrap/lib/kernel/ebin/application_master.beam +++ b/bootstrap/lib/kernel/ebin/application_master.beam diff --git a/bootstrap/lib/kernel/ebin/application_starter.beam b/bootstrap/lib/kernel/ebin/application_starter.beam Binary files differindex e33c9a5028..405d2f388a 100644 --- a/bootstrap/lib/kernel/ebin/application_starter.beam +++ b/bootstrap/lib/kernel/ebin/application_starter.beam diff --git a/bootstrap/lib/kernel/ebin/auth.beam b/bootstrap/lib/kernel/ebin/auth.beam Binary files differindex 9fc133efe7..3c038f87aa 100644 --- a/bootstrap/lib/kernel/ebin/auth.beam +++ b/bootstrap/lib/kernel/ebin/auth.beam diff --git a/bootstrap/lib/kernel/ebin/code.beam b/bootstrap/lib/kernel/ebin/code.beam Binary files differindex e82b91cf8e..bca88dfe7c 100644 --- a/bootstrap/lib/kernel/ebin/code.beam +++ b/bootstrap/lib/kernel/ebin/code.beam diff --git a/bootstrap/lib/kernel/ebin/code_server.beam b/bootstrap/lib/kernel/ebin/code_server.beam Binary files differindex 5bf9b13367..8f95f91348 100644 --- a/bootstrap/lib/kernel/ebin/code_server.beam +++ b/bootstrap/lib/kernel/ebin/code_server.beam diff --git a/bootstrap/lib/kernel/ebin/disk_log.beam b/bootstrap/lib/kernel/ebin/disk_log.beam Binary files differindex 86927f1125..b432811d6e 100644 --- a/bootstrap/lib/kernel/ebin/disk_log.beam +++ b/bootstrap/lib/kernel/ebin/disk_log.beam diff --git a/bootstrap/lib/kernel/ebin/disk_log_1.beam b/bootstrap/lib/kernel/ebin/disk_log_1.beam Binary files differindex 942e1188ac..96f4e1953f 100644 --- a/bootstrap/lib/kernel/ebin/disk_log_1.beam +++ b/bootstrap/lib/kernel/ebin/disk_log_1.beam diff --git a/bootstrap/lib/kernel/ebin/disk_log_server.beam b/bootstrap/lib/kernel/ebin/disk_log_server.beam Binary files differindex 46d7a9f546..089b5d578b 100644 --- a/bootstrap/lib/kernel/ebin/disk_log_server.beam +++ b/bootstrap/lib/kernel/ebin/disk_log_server.beam diff --git a/bootstrap/lib/kernel/ebin/dist_ac.beam b/bootstrap/lib/kernel/ebin/dist_ac.beam Binary files differindex 3060733116..59c75602ec 100644 --- a/bootstrap/lib/kernel/ebin/dist_ac.beam +++ b/bootstrap/lib/kernel/ebin/dist_ac.beam diff --git a/bootstrap/lib/kernel/ebin/dist_util.beam b/bootstrap/lib/kernel/ebin/dist_util.beam Binary files differindex d823f8d5c6..167a70e99d 100644 --- a/bootstrap/lib/kernel/ebin/dist_util.beam +++ b/bootstrap/lib/kernel/ebin/dist_util.beam diff --git a/bootstrap/lib/kernel/ebin/erl_boot_server.beam b/bootstrap/lib/kernel/ebin/erl_boot_server.beam Binary files differindex 52d638fb32..d88224b5d0 100644 --- a/bootstrap/lib/kernel/ebin/erl_boot_server.beam +++ b/bootstrap/lib/kernel/ebin/erl_boot_server.beam diff --git a/bootstrap/lib/kernel/ebin/erl_ddll.beam b/bootstrap/lib/kernel/ebin/erl_ddll.beam Binary files differindex 81daa5376b..c83b5e393c 100644 --- a/bootstrap/lib/kernel/ebin/erl_ddll.beam +++ b/bootstrap/lib/kernel/ebin/erl_ddll.beam diff --git a/bootstrap/lib/kernel/ebin/erl_epmd.beam b/bootstrap/lib/kernel/ebin/erl_epmd.beam Binary files differindex 9ba74e3303..09746d0403 100644 --- a/bootstrap/lib/kernel/ebin/erl_epmd.beam +++ b/bootstrap/lib/kernel/ebin/erl_epmd.beam diff --git a/bootstrap/lib/kernel/ebin/erts_debug.beam b/bootstrap/lib/kernel/ebin/erts_debug.beam Binary files differindex 26288e0633..9108d7e6d5 100644 --- a/bootstrap/lib/kernel/ebin/erts_debug.beam +++ b/bootstrap/lib/kernel/ebin/erts_debug.beam diff --git a/bootstrap/lib/kernel/ebin/file.beam b/bootstrap/lib/kernel/ebin/file.beam Binary files differindex 0f11da59e1..2504c16024 100644 --- a/bootstrap/lib/kernel/ebin/file.beam +++ b/bootstrap/lib/kernel/ebin/file.beam diff --git a/bootstrap/lib/kernel/ebin/file_io_server.beam b/bootstrap/lib/kernel/ebin/file_io_server.beam Binary files differindex 9b02183180..ce14722f4c 100644 --- a/bootstrap/lib/kernel/ebin/file_io_server.beam +++ b/bootstrap/lib/kernel/ebin/file_io_server.beam diff --git a/bootstrap/lib/kernel/ebin/file_server.beam b/bootstrap/lib/kernel/ebin/file_server.beam Binary files differindex 37e598a10f..70bdb58805 100644 --- a/bootstrap/lib/kernel/ebin/file_server.beam +++ b/bootstrap/lib/kernel/ebin/file_server.beam diff --git a/bootstrap/lib/kernel/ebin/gen_sctp.beam b/bootstrap/lib/kernel/ebin/gen_sctp.beam Binary files differindex f66b4635a2..a55e9090a5 100644 --- a/bootstrap/lib/kernel/ebin/gen_sctp.beam +++ b/bootstrap/lib/kernel/ebin/gen_sctp.beam diff --git a/bootstrap/lib/kernel/ebin/global.beam b/bootstrap/lib/kernel/ebin/global.beam Binary files differindex 4dc43450f0..20053eb877 100644 --- a/bootstrap/lib/kernel/ebin/global.beam +++ b/bootstrap/lib/kernel/ebin/global.beam diff --git a/bootstrap/lib/kernel/ebin/global_group.beam b/bootstrap/lib/kernel/ebin/global_group.beam Binary files differindex 6e9d6e8dfd..00d03a24f5 100644 --- a/bootstrap/lib/kernel/ebin/global_group.beam +++ b/bootstrap/lib/kernel/ebin/global_group.beam diff --git a/bootstrap/lib/kernel/ebin/global_search.beam b/bootstrap/lib/kernel/ebin/global_search.beam Binary files differindex 8270772543..fe18f8f49a 100644 --- a/bootstrap/lib/kernel/ebin/global_search.beam +++ b/bootstrap/lib/kernel/ebin/global_search.beam diff --git a/bootstrap/lib/kernel/ebin/group.beam b/bootstrap/lib/kernel/ebin/group.beam Binary files differindex 8e75aaef55..b72a13dbc7 100644 --- a/bootstrap/lib/kernel/ebin/group.beam +++ b/bootstrap/lib/kernel/ebin/group.beam diff --git a/bootstrap/lib/kernel/ebin/heart.beam b/bootstrap/lib/kernel/ebin/heart.beam Binary files differindex e2aa55f9b0..9d381acaff 100644 --- a/bootstrap/lib/kernel/ebin/heart.beam +++ b/bootstrap/lib/kernel/ebin/heart.beam diff --git a/bootstrap/lib/kernel/ebin/inet.beam b/bootstrap/lib/kernel/ebin/inet.beam Binary files differindex a8983e79c1..c712be3bdc 100644 --- a/bootstrap/lib/kernel/ebin/inet.beam +++ b/bootstrap/lib/kernel/ebin/inet.beam diff --git a/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam b/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam Binary files differindex 1f9ace4ad5..c2dac7dee1 100644 --- a/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam +++ b/bootstrap/lib/kernel/ebin/inet6_tcp_dist.beam diff --git a/bootstrap/lib/kernel/ebin/inet_config.beam b/bootstrap/lib/kernel/ebin/inet_config.beam Binary files differindex ad3f46010e..edc1e2f6fb 100644 --- a/bootstrap/lib/kernel/ebin/inet_config.beam +++ b/bootstrap/lib/kernel/ebin/inet_config.beam diff --git a/bootstrap/lib/kernel/ebin/inet_db.beam b/bootstrap/lib/kernel/ebin/inet_db.beam Binary files differindex 7009d9b9c1..2bba1e88c9 100644 --- a/bootstrap/lib/kernel/ebin/inet_db.beam +++ b/bootstrap/lib/kernel/ebin/inet_db.beam diff --git a/bootstrap/lib/kernel/ebin/inet_dns.beam b/bootstrap/lib/kernel/ebin/inet_dns.beam Binary files differindex 59e8936722..cfd46c29da 100644 --- a/bootstrap/lib/kernel/ebin/inet_dns.beam +++ b/bootstrap/lib/kernel/ebin/inet_dns.beam diff --git a/bootstrap/lib/kernel/ebin/inet_gethost_native.beam b/bootstrap/lib/kernel/ebin/inet_gethost_native.beam Binary files differindex e712d25405..0b901a8f27 100644 --- a/bootstrap/lib/kernel/ebin/inet_gethost_native.beam +++ b/bootstrap/lib/kernel/ebin/inet_gethost_native.beam diff --git a/bootstrap/lib/kernel/ebin/inet_parse.beam b/bootstrap/lib/kernel/ebin/inet_parse.beam Binary files differindex 926f21e99c..914397158a 100644 --- a/bootstrap/lib/kernel/ebin/inet_parse.beam +++ b/bootstrap/lib/kernel/ebin/inet_parse.beam diff --git a/bootstrap/lib/kernel/ebin/inet_res.beam b/bootstrap/lib/kernel/ebin/inet_res.beam Binary files differindex 3b6f72aaa0..0167a10b36 100644 --- a/bootstrap/lib/kernel/ebin/inet_res.beam +++ b/bootstrap/lib/kernel/ebin/inet_res.beam diff --git a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam Binary files differindex 07f6ad2521..6c98977be5 100644 --- a/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam +++ b/bootstrap/lib/kernel/ebin/inet_tcp_dist.beam diff --git a/bootstrap/lib/kernel/ebin/inet_udp.beam b/bootstrap/lib/kernel/ebin/inet_udp.beam Binary files differindex 2ac9537087..7bd4848f07 100644 --- a/bootstrap/lib/kernel/ebin/inet_udp.beam +++ b/bootstrap/lib/kernel/ebin/inet_udp.beam diff --git a/bootstrap/lib/kernel/ebin/kernel.beam b/bootstrap/lib/kernel/ebin/kernel.beam Binary files differindex 3eea9dda68..471ab154e8 100644 --- a/bootstrap/lib/kernel/ebin/kernel.beam +++ b/bootstrap/lib/kernel/ebin/kernel.beam diff --git a/bootstrap/lib/kernel/ebin/kernel_config.beam b/bootstrap/lib/kernel/ebin/kernel_config.beam Binary files differindex 73431675bf..da5fa04de5 100644 --- a/bootstrap/lib/kernel/ebin/kernel_config.beam +++ b/bootstrap/lib/kernel/ebin/kernel_config.beam diff --git a/bootstrap/lib/kernel/ebin/net_adm.beam b/bootstrap/lib/kernel/ebin/net_adm.beam Binary files differindex 02b6c8b486..21d54cac85 100644 --- a/bootstrap/lib/kernel/ebin/net_adm.beam +++ b/bootstrap/lib/kernel/ebin/net_adm.beam diff --git a/bootstrap/lib/kernel/ebin/net_kernel.beam b/bootstrap/lib/kernel/ebin/net_kernel.beam Binary files differindex 50b4c7ac4c..562ee24678 100644 --- a/bootstrap/lib/kernel/ebin/net_kernel.beam +++ b/bootstrap/lib/kernel/ebin/net_kernel.beam diff --git a/bootstrap/lib/kernel/ebin/os.beam b/bootstrap/lib/kernel/ebin/os.beam Binary files differindex 4a4051d0c1..4b3bcf80dd 100644 --- a/bootstrap/lib/kernel/ebin/os.beam +++ b/bootstrap/lib/kernel/ebin/os.beam diff --git a/bootstrap/lib/kernel/ebin/packages.beam b/bootstrap/lib/kernel/ebin/packages.beam Binary files differindex 710fc55908..cbe6bc6590 100644 --- a/bootstrap/lib/kernel/ebin/packages.beam +++ b/bootstrap/lib/kernel/ebin/packages.beam diff --git a/bootstrap/lib/kernel/ebin/pg2.beam b/bootstrap/lib/kernel/ebin/pg2.beam Binary files differindex 51912f2263..b14425b01c 100644 --- a/bootstrap/lib/kernel/ebin/pg2.beam +++ b/bootstrap/lib/kernel/ebin/pg2.beam diff --git a/bootstrap/lib/kernel/ebin/ram_file.beam b/bootstrap/lib/kernel/ebin/ram_file.beam Binary files differindex f9488df846..402c7ea2d3 100644 --- a/bootstrap/lib/kernel/ebin/ram_file.beam +++ b/bootstrap/lib/kernel/ebin/ram_file.beam diff --git a/bootstrap/lib/kernel/ebin/rpc.beam b/bootstrap/lib/kernel/ebin/rpc.beam Binary files differindex 1763808337..5fe7a7fffe 100644 --- a/bootstrap/lib/kernel/ebin/rpc.beam +++ b/bootstrap/lib/kernel/ebin/rpc.beam diff --git a/bootstrap/lib/kernel/ebin/standard_error.beam b/bootstrap/lib/kernel/ebin/standard_error.beam Binary files differindex 95edb1860a..62ab951bff 100644 --- a/bootstrap/lib/kernel/ebin/standard_error.beam +++ b/bootstrap/lib/kernel/ebin/standard_error.beam diff --git a/bootstrap/lib/kernel/ebin/user.beam b/bootstrap/lib/kernel/ebin/user.beam Binary files differindex 0f2fe211ab..76e9973a93 100644 --- a/bootstrap/lib/kernel/ebin/user.beam +++ b/bootstrap/lib/kernel/ebin/user.beam diff --git a/bootstrap/lib/kernel/ebin/user_drv.beam b/bootstrap/lib/kernel/ebin/user_drv.beam Binary files differindex 3feffb9332..ddb0442f28 100644 --- a/bootstrap/lib/kernel/ebin/user_drv.beam +++ b/bootstrap/lib/kernel/ebin/user_drv.beam diff --git a/bootstrap/lib/kernel/ebin/wrap_log_reader.beam b/bootstrap/lib/kernel/ebin/wrap_log_reader.beam Binary files differindex cdb87c3fd5..9f648c9a42 100644 --- a/bootstrap/lib/kernel/ebin/wrap_log_reader.beam +++ b/bootstrap/lib/kernel/ebin/wrap_log_reader.beam diff --git a/bootstrap/lib/stdlib/ebin/array.beam b/bootstrap/lib/stdlib/ebin/array.beam Binary files differindex a3049ae953..1c26f19403 100644 --- a/bootstrap/lib/stdlib/ebin/array.beam +++ b/bootstrap/lib/stdlib/ebin/array.beam diff --git a/bootstrap/lib/stdlib/ebin/base64.beam b/bootstrap/lib/stdlib/ebin/base64.beam Binary files differindex 101ffc3904..d48d8d6f58 100644 --- a/bootstrap/lib/stdlib/ebin/base64.beam +++ b/bootstrap/lib/stdlib/ebin/base64.beam diff --git a/bootstrap/lib/stdlib/ebin/beam_lib.beam b/bootstrap/lib/stdlib/ebin/beam_lib.beam Binary files differindex 58123d66be..e7ba44d542 100644 --- a/bootstrap/lib/stdlib/ebin/beam_lib.beam +++ b/bootstrap/lib/stdlib/ebin/beam_lib.beam diff --git a/bootstrap/lib/stdlib/ebin/binary.beam b/bootstrap/lib/stdlib/ebin/binary.beam Binary files differnew file mode 100644 index 0000000000..5180c122d2 --- /dev/null +++ b/bootstrap/lib/stdlib/ebin/binary.beam diff --git a/bootstrap/lib/stdlib/ebin/c.beam b/bootstrap/lib/stdlib/ebin/c.beam Binary files differindex ea36930179..099bb5ad90 100644 --- a/bootstrap/lib/stdlib/ebin/c.beam +++ b/bootstrap/lib/stdlib/ebin/c.beam diff --git a/bootstrap/lib/stdlib/ebin/dets.beam b/bootstrap/lib/stdlib/ebin/dets.beam Binary files differindex 8b637ab064..ccd277b7ad 100644 --- a/bootstrap/lib/stdlib/ebin/dets.beam +++ b/bootstrap/lib/stdlib/ebin/dets.beam diff --git a/bootstrap/lib/stdlib/ebin/dets_utils.beam b/bootstrap/lib/stdlib/ebin/dets_utils.beam Binary files differindex 36d38c4e9a..b0c3e351d2 100644 --- a/bootstrap/lib/stdlib/ebin/dets_utils.beam +++ b/bootstrap/lib/stdlib/ebin/dets_utils.beam diff --git a/bootstrap/lib/stdlib/ebin/dets_v8.beam b/bootstrap/lib/stdlib/ebin/dets_v8.beam Binary files differindex 6537f0e44d..f48768ca53 100644 --- a/bootstrap/lib/stdlib/ebin/dets_v8.beam +++ b/bootstrap/lib/stdlib/ebin/dets_v8.beam diff --git a/bootstrap/lib/stdlib/ebin/dets_v9.beam b/bootstrap/lib/stdlib/ebin/dets_v9.beam Binary files differindex 2a247effc1..0694437929 100644 --- a/bootstrap/lib/stdlib/ebin/dets_v9.beam +++ b/bootstrap/lib/stdlib/ebin/dets_v9.beam diff --git a/bootstrap/lib/stdlib/ebin/dict.beam b/bootstrap/lib/stdlib/ebin/dict.beam Binary files differindex 3d0b4194b6..ebf01cb9b5 100644 --- a/bootstrap/lib/stdlib/ebin/dict.beam +++ b/bootstrap/lib/stdlib/ebin/dict.beam diff --git a/bootstrap/lib/stdlib/ebin/digraph.beam b/bootstrap/lib/stdlib/ebin/digraph.beam Binary files differindex 41043bf729..38195e8957 100644 --- a/bootstrap/lib/stdlib/ebin/digraph.beam +++ b/bootstrap/lib/stdlib/ebin/digraph.beam diff --git a/bootstrap/lib/stdlib/ebin/digraph_utils.beam b/bootstrap/lib/stdlib/ebin/digraph_utils.beam Binary files differindex e0c15a218a..ce329ab2ab 100644 --- a/bootstrap/lib/stdlib/ebin/digraph_utils.beam +++ b/bootstrap/lib/stdlib/ebin/digraph_utils.beam diff --git a/bootstrap/lib/stdlib/ebin/edlin.beam b/bootstrap/lib/stdlib/ebin/edlin.beam Binary files differindex fe51f7f417..9fc93d042c 100644 --- a/bootstrap/lib/stdlib/ebin/edlin.beam +++ b/bootstrap/lib/stdlib/ebin/edlin.beam diff --git a/bootstrap/lib/stdlib/ebin/epp.beam b/bootstrap/lib/stdlib/ebin/epp.beam Binary files differindex 71e0d21db1..8059231d6e 100644 --- a/bootstrap/lib/stdlib/ebin/epp.beam +++ b/bootstrap/lib/stdlib/ebin/epp.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_bits.beam b/bootstrap/lib/stdlib/ebin/erl_bits.beam Binary files differindex 7b1f8bb764..d338fe3778 100644 --- a/bootstrap/lib/stdlib/ebin/erl_bits.beam +++ b/bootstrap/lib/stdlib/ebin/erl_bits.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_compile.beam b/bootstrap/lib/stdlib/ebin/erl_compile.beam Binary files differindex cc4ef260d0..3f0cb585e8 100644 --- a/bootstrap/lib/stdlib/ebin/erl_compile.beam +++ b/bootstrap/lib/stdlib/ebin/erl_compile.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_eval.beam b/bootstrap/lib/stdlib/ebin/erl_eval.beam Binary files differindex dfd10fb4bf..cac3a46319 100644 --- a/bootstrap/lib/stdlib/ebin/erl_eval.beam +++ b/bootstrap/lib/stdlib/ebin/erl_eval.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam Binary files differindex 2a2ec9b4e1..983fe23879 100644 --- a/bootstrap/lib/stdlib/ebin/erl_expand_records.beam +++ b/bootstrap/lib/stdlib/ebin/erl_expand_records.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_internal.beam b/bootstrap/lib/stdlib/ebin/erl_internal.beam Binary files differindex 1609ae4997..bb2cbef866 100644 --- a/bootstrap/lib/stdlib/ebin/erl_internal.beam +++ b/bootstrap/lib/stdlib/ebin/erl_internal.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_lint.beam b/bootstrap/lib/stdlib/ebin/erl_lint.beam Binary files differindex 21ec2e638f..f2b85fadb7 100644 --- a/bootstrap/lib/stdlib/ebin/erl_lint.beam +++ b/bootstrap/lib/stdlib/ebin/erl_lint.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_parse.beam b/bootstrap/lib/stdlib/ebin/erl_parse.beam Binary files differindex 1a61eb31ac..0d7c12e53f 100644 --- a/bootstrap/lib/stdlib/ebin/erl_parse.beam +++ b/bootstrap/lib/stdlib/ebin/erl_parse.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_pp.beam b/bootstrap/lib/stdlib/ebin/erl_pp.beam Binary files differindex 161db6cef0..eb7462cb0e 100644 --- a/bootstrap/lib/stdlib/ebin/erl_pp.beam +++ b/bootstrap/lib/stdlib/ebin/erl_pp.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_scan.beam b/bootstrap/lib/stdlib/ebin/erl_scan.beam Binary files differindex 0b04a411b5..cffdda03ae 100644 --- a/bootstrap/lib/stdlib/ebin/erl_scan.beam +++ b/bootstrap/lib/stdlib/ebin/erl_scan.beam diff --git a/bootstrap/lib/stdlib/ebin/erl_tar.beam b/bootstrap/lib/stdlib/ebin/erl_tar.beam Binary files differindex 40d41d0202..369e5a8c6d 100644 --- a/bootstrap/lib/stdlib/ebin/erl_tar.beam +++ b/bootstrap/lib/stdlib/ebin/erl_tar.beam diff --git a/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam b/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam Binary files differindex ae5a7020ea..13a91def18 100644 --- a/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam +++ b/bootstrap/lib/stdlib/ebin/error_logger_file_h.beam diff --git a/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam b/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam Binary files differindex 6065cfa8f1..50dd448b1b 100644 --- a/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam +++ b/bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam diff --git a/bootstrap/lib/stdlib/ebin/escript.beam b/bootstrap/lib/stdlib/ebin/escript.beam Binary files differindex 3c4b3f4eb6..15f1cb8354 100644 --- a/bootstrap/lib/stdlib/ebin/escript.beam +++ b/bootstrap/lib/stdlib/ebin/escript.beam diff --git a/bootstrap/lib/stdlib/ebin/ets.beam b/bootstrap/lib/stdlib/ebin/ets.beam Binary files differindex 70916dd1ae..bcb1b9684c 100644 --- a/bootstrap/lib/stdlib/ebin/ets.beam +++ b/bootstrap/lib/stdlib/ebin/ets.beam diff --git a/bootstrap/lib/stdlib/ebin/eval_bits.beam b/bootstrap/lib/stdlib/ebin/eval_bits.beam Binary files differindex de2d528f2e..1db24ccfc9 100644 --- a/bootstrap/lib/stdlib/ebin/eval_bits.beam +++ b/bootstrap/lib/stdlib/ebin/eval_bits.beam diff --git a/bootstrap/lib/stdlib/ebin/file_sorter.beam b/bootstrap/lib/stdlib/ebin/file_sorter.beam Binary files differindex f03cd21072..1a6e54f2ab 100644 --- a/bootstrap/lib/stdlib/ebin/file_sorter.beam +++ b/bootstrap/lib/stdlib/ebin/file_sorter.beam diff --git a/bootstrap/lib/stdlib/ebin/filelib.beam b/bootstrap/lib/stdlib/ebin/filelib.beam Binary files differindex e03b753c09..8a59a62379 100644 --- a/bootstrap/lib/stdlib/ebin/filelib.beam +++ b/bootstrap/lib/stdlib/ebin/filelib.beam diff --git a/bootstrap/lib/stdlib/ebin/filename.beam b/bootstrap/lib/stdlib/ebin/filename.beam Binary files differindex f419480f6e..4cdb6064d2 100644 --- a/bootstrap/lib/stdlib/ebin/filename.beam +++ b/bootstrap/lib/stdlib/ebin/filename.beam diff --git a/bootstrap/lib/stdlib/ebin/gb_sets.beam b/bootstrap/lib/stdlib/ebin/gb_sets.beam Binary files differindex 1ce3e0bd83..1928430e56 100644 --- a/bootstrap/lib/stdlib/ebin/gb_sets.beam +++ b/bootstrap/lib/stdlib/ebin/gb_sets.beam diff --git a/bootstrap/lib/stdlib/ebin/gb_trees.beam b/bootstrap/lib/stdlib/ebin/gb_trees.beam Binary files differindex c462bee0c1..7bebf1a54e 100644 --- a/bootstrap/lib/stdlib/ebin/gb_trees.beam +++ b/bootstrap/lib/stdlib/ebin/gb_trees.beam diff --git a/bootstrap/lib/stdlib/ebin/gen.beam b/bootstrap/lib/stdlib/ebin/gen.beam Binary files differindex 4b047eb838..3ad4d282f0 100644 --- a/bootstrap/lib/stdlib/ebin/gen.beam +++ b/bootstrap/lib/stdlib/ebin/gen.beam diff --git a/bootstrap/lib/stdlib/ebin/gen_event.beam b/bootstrap/lib/stdlib/ebin/gen_event.beam Binary files differindex 69a18e0c6e..264071fe5f 100644 --- a/bootstrap/lib/stdlib/ebin/gen_event.beam +++ b/bootstrap/lib/stdlib/ebin/gen_event.beam diff --git a/bootstrap/lib/stdlib/ebin/gen_fsm.beam b/bootstrap/lib/stdlib/ebin/gen_fsm.beam Binary files differindex 4d7528be15..73df87a7ef 100644 --- a/bootstrap/lib/stdlib/ebin/gen_fsm.beam +++ b/bootstrap/lib/stdlib/ebin/gen_fsm.beam diff --git a/bootstrap/lib/stdlib/ebin/gen_server.beam b/bootstrap/lib/stdlib/ebin/gen_server.beam Binary files differindex 8d76d138f1..3b066ada0b 100644 --- a/bootstrap/lib/stdlib/ebin/gen_server.beam +++ b/bootstrap/lib/stdlib/ebin/gen_server.beam diff --git a/bootstrap/lib/stdlib/ebin/io.beam b/bootstrap/lib/stdlib/ebin/io.beam Binary files differindex a9f24817b3..36c276166c 100644 --- a/bootstrap/lib/stdlib/ebin/io.beam +++ b/bootstrap/lib/stdlib/ebin/io.beam diff --git a/bootstrap/lib/stdlib/ebin/io_lib.beam b/bootstrap/lib/stdlib/ebin/io_lib.beam Binary files differindex af10b8d0e9..c0af612d77 100644 --- a/bootstrap/lib/stdlib/ebin/io_lib.beam +++ b/bootstrap/lib/stdlib/ebin/io_lib.beam diff --git a/bootstrap/lib/stdlib/ebin/io_lib_format.beam b/bootstrap/lib/stdlib/ebin/io_lib_format.beam Binary files differindex 16907bb3aa..25f8f7b37a 100644 --- a/bootstrap/lib/stdlib/ebin/io_lib_format.beam +++ b/bootstrap/lib/stdlib/ebin/io_lib_format.beam diff --git a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam Binary files differindex 6b8b7a3267..9a8b68c6e0 100644 --- a/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam +++ b/bootstrap/lib/stdlib/ebin/io_lib_pretty.beam diff --git a/bootstrap/lib/stdlib/ebin/lib.beam b/bootstrap/lib/stdlib/ebin/lib.beam Binary files differindex d7e591ed35..fb08310f36 100644 --- a/bootstrap/lib/stdlib/ebin/lib.beam +++ b/bootstrap/lib/stdlib/ebin/lib.beam diff --git a/bootstrap/lib/stdlib/ebin/ms_transform.beam b/bootstrap/lib/stdlib/ebin/ms_transform.beam Binary files differindex 0dc991553b..918c2537ea 100644 --- a/bootstrap/lib/stdlib/ebin/ms_transform.beam +++ b/bootstrap/lib/stdlib/ebin/ms_transform.beam diff --git a/bootstrap/lib/stdlib/ebin/otp_internal.beam b/bootstrap/lib/stdlib/ebin/otp_internal.beam Binary files differindex e2550578e7..cac4a97ae0 100644 --- a/bootstrap/lib/stdlib/ebin/otp_internal.beam +++ b/bootstrap/lib/stdlib/ebin/otp_internal.beam diff --git a/bootstrap/lib/stdlib/ebin/pg.beam b/bootstrap/lib/stdlib/ebin/pg.beam Binary files differindex aadf03ca28..026d102a75 100644 --- a/bootstrap/lib/stdlib/ebin/pg.beam +++ b/bootstrap/lib/stdlib/ebin/pg.beam diff --git a/bootstrap/lib/stdlib/ebin/pool.beam b/bootstrap/lib/stdlib/ebin/pool.beam Binary files differindex 35c2da9051..74377d404b 100644 --- a/bootstrap/lib/stdlib/ebin/pool.beam +++ b/bootstrap/lib/stdlib/ebin/pool.beam diff --git a/bootstrap/lib/stdlib/ebin/proc_lib.beam b/bootstrap/lib/stdlib/ebin/proc_lib.beam Binary files differindex c366aafadf..f6c7a4f748 100644 --- a/bootstrap/lib/stdlib/ebin/proc_lib.beam +++ b/bootstrap/lib/stdlib/ebin/proc_lib.beam diff --git a/bootstrap/lib/stdlib/ebin/proplists.beam b/bootstrap/lib/stdlib/ebin/proplists.beam Binary files differindex 378392c791..bed96c6b1a 100644 --- a/bootstrap/lib/stdlib/ebin/proplists.beam +++ b/bootstrap/lib/stdlib/ebin/proplists.beam diff --git a/bootstrap/lib/stdlib/ebin/qlc.beam b/bootstrap/lib/stdlib/ebin/qlc.beam Binary files differindex 27dd5d5be0..2e05a4c546 100644 --- a/bootstrap/lib/stdlib/ebin/qlc.beam +++ b/bootstrap/lib/stdlib/ebin/qlc.beam diff --git a/bootstrap/lib/stdlib/ebin/qlc_pt.beam b/bootstrap/lib/stdlib/ebin/qlc_pt.beam Binary files differindex 10349ebd1a..92b1bc8bee 100644 --- a/bootstrap/lib/stdlib/ebin/qlc_pt.beam +++ b/bootstrap/lib/stdlib/ebin/qlc_pt.beam diff --git a/bootstrap/lib/stdlib/ebin/re.beam b/bootstrap/lib/stdlib/ebin/re.beam Binary files differindex 06c02fc10c..fb8888ad58 100644 --- a/bootstrap/lib/stdlib/ebin/re.beam +++ b/bootstrap/lib/stdlib/ebin/re.beam diff --git a/bootstrap/lib/stdlib/ebin/regexp.beam b/bootstrap/lib/stdlib/ebin/regexp.beam Binary files differindex f45899702c..d021c5779b 100644 --- a/bootstrap/lib/stdlib/ebin/regexp.beam +++ b/bootstrap/lib/stdlib/ebin/regexp.beam diff --git a/bootstrap/lib/stdlib/ebin/sets.beam b/bootstrap/lib/stdlib/ebin/sets.beam Binary files differindex b8ce3ebe89..9be4e8ab5b 100644 --- a/bootstrap/lib/stdlib/ebin/sets.beam +++ b/bootstrap/lib/stdlib/ebin/sets.beam diff --git a/bootstrap/lib/stdlib/ebin/shell.beam b/bootstrap/lib/stdlib/ebin/shell.beam Binary files differindex a537d0936e..737223aaf8 100644 --- a/bootstrap/lib/stdlib/ebin/shell.beam +++ b/bootstrap/lib/stdlib/ebin/shell.beam diff --git a/bootstrap/lib/stdlib/ebin/sofs.beam b/bootstrap/lib/stdlib/ebin/sofs.beam Binary files differindex d8e984f217..51af30d7e8 100644 --- a/bootstrap/lib/stdlib/ebin/sofs.beam +++ b/bootstrap/lib/stdlib/ebin/sofs.beam diff --git a/bootstrap/lib/stdlib/ebin/stdlib.app b/bootstrap/lib/stdlib/ebin/stdlib.app index b7cb765910..880e85627e 100644 --- a/bootstrap/lib/stdlib/ebin/stdlib.app +++ b/bootstrap/lib/stdlib/ebin/stdlib.app @@ -23,6 +23,7 @@ {modules, [array, base64, beam_lib, + binary, c, calendar, dets, diff --git a/bootstrap/lib/stdlib/ebin/supervisor.beam b/bootstrap/lib/stdlib/ebin/supervisor.beam Binary files differindex 0526384a20..9cbf8912fe 100644 --- a/bootstrap/lib/stdlib/ebin/supervisor.beam +++ b/bootstrap/lib/stdlib/ebin/supervisor.beam diff --git a/bootstrap/lib/stdlib/ebin/sys.beam b/bootstrap/lib/stdlib/ebin/sys.beam Binary files differindex 5a75152833..e08ec9e70d 100644 --- a/bootstrap/lib/stdlib/ebin/sys.beam +++ b/bootstrap/lib/stdlib/ebin/sys.beam diff --git a/bootstrap/lib/stdlib/ebin/timer.beam b/bootstrap/lib/stdlib/ebin/timer.beam Binary files differindex 9d9d42f96d..a20cc97935 100644 --- a/bootstrap/lib/stdlib/ebin/timer.beam +++ b/bootstrap/lib/stdlib/ebin/timer.beam diff --git a/bootstrap/lib/stdlib/ebin/unicode.beam b/bootstrap/lib/stdlib/ebin/unicode.beam Binary files differindex 66d6991283..4ca769b9a2 100644 --- a/bootstrap/lib/stdlib/ebin/unicode.beam +++ b/bootstrap/lib/stdlib/ebin/unicode.beam diff --git a/bootstrap/lib/stdlib/ebin/zip.beam b/bootstrap/lib/stdlib/ebin/zip.beam Binary files differindex f0df604d79..6c5b31cd1f 100644 --- a/bootstrap/lib/stdlib/ebin/zip.beam +++ b/bootstrap/lib/stdlib/ebin/zip.beam diff --git a/bootstrap/lib/stdlib/egen/erl_parse.erl b/bootstrap/lib/stdlib/egen/erl_parse.erl index 2f985589c9..9271bfd74c 100644 --- a/bootstrap/lib/stdlib/egen/erl_parse.erl +++ b/bootstrap/lib/stdlib/egen/erl_parse.erl @@ -1,6 +1,6 @@ -module(erl_parse). -export([parse/1, parse_and_scan/1, format_error/1]). --file("erl_parse.yrl", 491). +-file("erl_parse.yrl", 492). -export([parse_form/1,parse_exprs/1,parse_term/1]). -export([normalise/1,abstract/1,tokens/1,tokens/2]). @@ -109,6 +109,10 @@ find_arity_from_specs([Spec|_]) -> {type, _, 'fun', [{type, _, product, Args},_]} = Fun, length(Args). +build_def(LHS, Types) -> + IsSubType = {atom, ?line(LHS), is_subtype}, + {type, ?line(LHS), constraint, [IsSubType, [LHS, Types]]}. + lift_unions(T1, {type, _La, union, List}) -> {type, ?line(T1), union, [T1|List]}; lift_unions(T1, T2) -> @@ -547,7 +551,7 @@ get_attribute(L, Name) -> get_attributes(L) -> erl_scan:attributes_info(L). --file("/usr/local/lib/erlang/lib/parsetools-2.0.2/include/yeccpre.hrl", 0). +-file("/usr/local/otp/releases/sles10_32_R13B04_patched/lib/parsetools-2.0.2/include/yeccpre.hrl", 0). %% %% %CopyrightBegin% %% @@ -728,7 +732,7 @@ yecctoken2string(Other) -> --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 731). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 735). yeccpars2(0=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_0(S, Cat, Ss, Stack, T, Ts, Tzr); @@ -1413,55 +1417,55 @@ yeccpars2(339=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2(340=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_340(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(341=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_341(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(342=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_342(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(343=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(344=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_344(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(342=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_342(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(343=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_343(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(344=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_344(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(345=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_345(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(346=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_346(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(347=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_347(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(348=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_348(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(348=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_348(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(349=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_349(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(350=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_350(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(351=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_351(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(350=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_350(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(351=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_351(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(352=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_352(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(353=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_353(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(354=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_354(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(353=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_353(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(354=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_354(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(355=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_355(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(356=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_356(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(356=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_356(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(357=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_357(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(358=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_358(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(359=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_359(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(360=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_360(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(361=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_361(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(360=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_360(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(361=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_361(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(362=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_362(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(363=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_363(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(364=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_364(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(365=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_365(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(364=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_364(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(365=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_365(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(366=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_366(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(367=S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -1472,182 +1476,178 @@ yeccpars2(369=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_369(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(370=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_370(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(371=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_371(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(371=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_371(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(372=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_372(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(373=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_373(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(374=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_374(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(375=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_375(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(375=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_375(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(376=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_376(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(377=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_377(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(378=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_378(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(379=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_379(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(378=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_378(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(379=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_379(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(380=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_380(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(381=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(382=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_382(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_381(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(382=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_382(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(383=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_383(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(384=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_384(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(384=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_384(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(385=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_385(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(386=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_386(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(387=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_387(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(387=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(388=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_388(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(389=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_389(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(390=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_390(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(390=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_390(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(391=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_391(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(392=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_392(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(393=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_393(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(394=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(392=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_392(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(393=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_393(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(394=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_394(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(395=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_395(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(395=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_395(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(396=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_396(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(397=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_397(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(398=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_398(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(399=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_331(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(400=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_400(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(401=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_401(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(402=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(402=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_402(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(403=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_403(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(404=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_331(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(405=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_405(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_404(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(405=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_405(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(406=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_406(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(407=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_407(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(408=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_408(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(409=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_409(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(410=S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2(408=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(411=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_411(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(412=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_412(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(409=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_409(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(410=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_410(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(411=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_401(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(412=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_412(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(413=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_406(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_295(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(414=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_414(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(415=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_295(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_415(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(416=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_416(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(417=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_417(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(417=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_417(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(418=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_418(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(419=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_419(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(420=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_420(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(420=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_45(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(421=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_421(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(422=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_45(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(423=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_423(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(424=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_424(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(425=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_425(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(426=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2(422=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_422(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(423=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_423(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(424=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(425=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_425(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(426=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_426(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(427=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_427(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(428=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_428(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(428=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_68(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(429=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_429(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(430=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_68(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(430=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_430(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(431=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_431(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(432=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_432(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(433=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_433(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(434=S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2(432=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_45(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(435=S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2(433=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(436=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_436(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(434=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_434(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(435=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_435(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(436=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_45(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(437=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_437(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(438=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_45(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(439=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_439(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(440=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_440(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(438=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_438(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(439=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_439(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(440=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_440(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(441=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_441(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(442=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_442(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(443=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_443(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_423(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(443=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_443(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(444=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_425(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(445=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_445(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_444(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(445=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_445(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(446=S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_446(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(447=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_447(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(447=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_447(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(448=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_448(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_10(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(449=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_449(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(450=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_10(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(451=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_451(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(452=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2(450=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_83(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(453=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_453(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(451=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_451(S, Cat, Ss, Stack, T, Ts, Tzr); +yeccpars2(452=S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_452(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(453=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_453(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(454=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_454(S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_10(S, Cat, Ss, Stack, T, Ts, Tzr); %% yeccpars2(455=S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_455(S, Cat, Ss, Stack, T, Ts, Tzr); -yeccpars2(456=S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_10(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(457=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_457(S, Cat, Ss, Stack, T, Ts, Tzr); -%% yeccpars2(458=S, Cat, Ss, Stack, T, Ts, Tzr) -> -%% yeccpars2_458(S, Cat, Ss, Stack, T, Ts, Tzr); +%% yeccpars2(456=S, Cat, Ss, Stack, T, Ts, Tzr) -> +%% yeccpars2_456(S, Cat, Ss, Stack, T, Ts, Tzr); yeccpars2(Other, _, _, _, _, _, _) -> erlang:error({yecc_bug,"1.3",{missing_state_in_action_table, Other}}). @@ -1661,32 +1661,32 @@ yeccpars2_1(_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_rule(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). yeccpars2_2(S, ';', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 454, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 452, Ss, Stack, T, Ts, Tzr); yeccpars2_2(_S, Cat, Ss, Stack, T, Ts, Tzr) -> NewStack = yeccpars2_2_(Stack), yeccgoto_rule_clauses(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). yeccpars2_3(S, dot, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 453, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 451, Ss, Stack, T, Ts, Tzr). yeccpars2_4(_S, Cat, Ss, Stack, T, Ts, Tzr) -> NewStack = yeccpars2_4_(Stack), yeccgoto_function(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). yeccpars2_5(S, ';', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 448, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 446, Ss, Stack, T, Ts, Tzr); yeccpars2_5(_S, Cat, Ss, Stack, T, Ts, Tzr) -> NewStack = yeccpars2_5_(Stack), yeccgoto_function_clauses(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). yeccpars2_6(S, dot, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 447, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 445, Ss, Stack, T, Ts, Tzr). yeccpars2_7(_S, '$end', _Ss, Stack, _T, _Ts, _Tzr) -> {ok, hd(Stack)}. yeccpars2_8(S, dot, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 446, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 444, Ss, Stack, T, Ts, Tzr). yeccpars2_9(S, atom, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 292, Ss, Stack, T, Ts, Tzr); @@ -3075,7 +3075,7 @@ yeccpars2_291(_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_292(S, '#', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 44, Ss, Stack, T, Ts, Tzr); yeccpars2_292(S, '(', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 422, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 420, Ss, Stack, T, Ts, Tzr); yeccpars2_292(S, '+', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 47, Ss, Stack, T, Ts, Tzr); yeccpars2_292(S, '-', Ss, Stack, T, Ts, Tzr) -> @@ -3155,16 +3155,16 @@ yeccpars2_305(_S, Cat, Ss, Stack, T, Ts, Tzr) -> %% yeccpars2_306: see yeccpars2_295 yeccpars2_307(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 417, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 415, Ss, Stack, T, Ts, Tzr). yeccpars2_308(S, ';', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 415, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 413, Ss, Stack, T, Ts, Tzr); yeccpars2_308(_S, Cat, Ss, Stack, T, Ts, Tzr) -> NewStack = yeccpars2_308_(Stack), yeccgoto_type_sigs(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). yeccpars2_309(S, 'when', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 406, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 401, Ss, Stack, T, Ts, Tzr); yeccpars2_309(_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_type_sig(hd(Ss), Cat, Ss, Stack, T, Ts, Tzr). @@ -3195,24 +3195,24 @@ yeccpars2_cont_310(S, '{', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 327, Ss, Stack, T, Ts, Tzr). yeccpars2_311(S, '|', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 404, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 399, Ss, Stack, T, Ts, Tzr); yeccpars2_311(_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_top_type_100(hd(Ss), Cat, Ss, Stack, T, Ts, Tzr). yeccpars2_312(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 401, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 396, Ss, Stack, T, Ts, Tzr). yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_top_type(hd(Ss), Cat, Ss, Stack, T, Ts, Tzr). yeccpars2_314(S, ',', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 399, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 394, Ss, Stack, T, Ts, Tzr); yeccpars2_314(_S, Cat, Ss, Stack, T, Ts, Tzr) -> NewStack = yeccpars2_314_(Stack), yeccgoto_top_types(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). -yeccpars2_315(S, '.', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 396, Ss, Stack, T, Ts, Tzr); +yeccpars2_315(S, '..', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 392, Ss, Stack, T, Ts, Tzr); yeccpars2_315(_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_type(hd(Ss), Cat, Ss, Stack, T, Ts, Tzr). @@ -3220,7 +3220,7 @@ yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_type(hd(Ss), Cat, Ss, Stack, T, Ts, Tzr). yeccpars2_317(S, atom, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 385, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 381, Ss, Stack, T, Ts, Tzr). yeccpars2_318(S, '-', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 320, Ss, Stack, T, Ts, Tzr); @@ -3232,20 +3232,20 @@ yeccpars2_318(S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_cont_310(S, Cat, Ss, Stack, T, Ts, Tzr). yeccpars2_319(S, '->', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 381, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 377, Ss, Stack, T, Ts, Tzr). yeccpars2_320(S, integer, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 380, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 376, Ss, Stack, T, Ts, Tzr). yeccpars2_321(S, '>>', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 366, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 362, Ss, Stack, T, Ts, Tzr); yeccpars2_321(S, var, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 367, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 363, Ss, Stack, T, Ts, Tzr). yeccpars2_322(S, '-', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 320, Ss, Stack, T, Ts, Tzr); yeccpars2_322(S, ']', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 357, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 355, Ss, Stack, T, Ts, Tzr); yeccpars2_322(S, integer, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 325, Ss, Stack, T, Ts, Tzr); yeccpars2_322(S, var, Ss, Stack, T, Ts, Tzr) -> @@ -3254,9 +3254,9 @@ yeccpars2_322(S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_cont_310(S, Cat, Ss, Stack, T, Ts, Tzr). yeccpars2_323(S, '(', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 346, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 344, Ss, Stack, T, Ts, Tzr); yeccpars2_323(S, ':', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 347, Ss, Stack, T, Ts, Tzr); + yeccpars1(S, 345, Ss, Stack, T, Ts, Tzr); yeccpars2_323(_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_type(hd(Ss), Cat, Ss, Stack, T, Ts, Tzr). @@ -3318,7 +3318,7 @@ yeccpars2_334(S, ')', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 338, Ss, Stack, T, Ts, Tzr). yeccpars2_335(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 345, Ss, Stack, T, Ts, Tzr). + yeccpars1(S, 343, Ss, Stack, T, Ts, Tzr). yeccpars2_336(_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_fun_type_100(hd(Ss), Cat, Ss, Stack, T, Ts, Tzr). @@ -3327,7 +3327,7 @@ yeccpars2_337(S, ')', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 319, Ss, Stack, T, Ts, Tzr); yeccpars2_337(S, '-', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 320, Ss, Stack, T, Ts, Tzr); -yeccpars2_337(S, '.', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_337(S, '...', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 339, Ss, Stack, T, Ts, Tzr); yeccpars2_337(S, integer, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 325, Ss, Stack, T, Ts, Tzr); @@ -3341,520 +3341,517 @@ yeccpars2_338(_S, Cat, Ss, Stack, T, Ts, Tzr) -> NewStack = yeccpars2_338_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_339(S, '.', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_339(S, ')', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 340, Ss, Stack, T, Ts, Tzr). -yeccpars2_340(S, '.', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_340(S, '->', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 341, Ss, Stack, T, Ts, Tzr). -yeccpars2_341(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 342, Ss, Stack, T, Ts, Tzr). - -yeccpars2_342(S, '->', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 343, Ss, Stack, T, Ts, Tzr). +%% yeccpars2_341: see yeccpars2_318 -%% yeccpars2_343: see yeccpars2_318 - -yeccpars2_344(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - [_,_,_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_344_(Stack), +yeccpars2_342(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + [_,_,_,_|Nss] = Ss, + NewStack = yeccpars2_342_(Stack), yeccgoto_fun_type_100(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_345(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_343(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_|Nss] = Ss, - NewStack = yeccpars2_345_(Stack), + NewStack = yeccpars2_343_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_346(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 354, Ss, Stack, T, Ts, Tzr); -yeccpars2_346(S, '-', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_344(S, ')', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 352, Ss, Stack, T, Ts, Tzr); +yeccpars2_344(S, '-', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 320, Ss, Stack, T, Ts, Tzr); -yeccpars2_346(S, integer, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_344(S, integer, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 325, Ss, Stack, T, Ts, Tzr); -yeccpars2_346(S, var, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_344(S, var, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 326, Ss, Stack, T, Ts, Tzr); -yeccpars2_346(S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_344(S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_cont_310(S, Cat, Ss, Stack, T, Ts, Tzr). -yeccpars2_347(S, atom, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 348, Ss, Stack, T, Ts, Tzr). +yeccpars2_345(S, atom, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 346, Ss, Stack, T, Ts, Tzr). -yeccpars2_348(S, '(', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 349, Ss, Stack, T, Ts, Tzr). +yeccpars2_346(S, '(', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 347, Ss, Stack, T, Ts, Tzr). -yeccpars2_349(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 351, Ss, Stack, T, Ts, Tzr); -yeccpars2_349(S, '-', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_347(S, ')', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 349, Ss, Stack, T, Ts, Tzr); +yeccpars2_347(S, '-', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 320, Ss, Stack, T, Ts, Tzr); -yeccpars2_349(S, integer, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_347(S, integer, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 325, Ss, Stack, T, Ts, Tzr); -yeccpars2_349(S, var, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_347(S, var, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 326, Ss, Stack, T, Ts, Tzr); -yeccpars2_349(S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_347(S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_cont_310(S, Cat, Ss, Stack, T, Ts, Tzr). -yeccpars2_350(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 352, Ss, Stack, T, Ts, Tzr). +yeccpars2_348(S, ')', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 350, Ss, Stack, T, Ts, Tzr). -yeccpars2_351(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_349(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_351_(Stack), + NewStack = yeccpars2_349_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_352(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_350(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_352_(Stack), + NewStack = yeccpars2_350_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_353(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 355, Ss, Stack, T, Ts, Tzr). +yeccpars2_351(S, ')', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 353, Ss, Stack, T, Ts, Tzr). -yeccpars2_354(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_352(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_354_(Stack), + NewStack = yeccpars2_352_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_355(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_353(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_|Nss] = Ss, - NewStack = yeccpars2_355_(Stack), + NewStack = yeccpars2_353_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_356(S, ',', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 358, Ss, Stack, T, Ts, Tzr); -yeccpars2_356(S, ']', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 359, Ss, Stack, T, Ts, Tzr). +yeccpars2_354(S, ',', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 356, Ss, Stack, T, Ts, Tzr); +yeccpars2_354(S, ']', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 357, Ss, Stack, T, Ts, Tzr). -yeccpars2_357(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_355(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_|Nss] = Ss, - NewStack = yeccpars2_357_(Stack), + NewStack = yeccpars2_355_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_358(S, '.', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 360, Ss, Stack, T, Ts, Tzr). +yeccpars2_356(S, '...', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 358, Ss, Stack, T, Ts, Tzr). -yeccpars2_359(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_357(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_359_(Stack), + NewStack = yeccpars2_357_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_360(S, '.', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 361, Ss, Stack, T, Ts, Tzr). - -yeccpars2_361(S, '.', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 362, Ss, Stack, T, Ts, Tzr). - -yeccpars2_362(S, ']', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 363, Ss, Stack, T, Ts, Tzr). +yeccpars2_358(S, ']', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 359, Ss, Stack, T, Ts, Tzr). -yeccpars2_363(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - [_,_,_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_363_(Stack), +yeccpars2_359(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + [_,_,_,_|Nss] = Ss, + NewStack = yeccpars2_359_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_364(S, '>>', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 379, Ss, Stack, T, Ts, Tzr). +yeccpars2_360(S, '>>', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 375, Ss, Stack, T, Ts, Tzr). -yeccpars2_365(S, ',', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 373, Ss, Stack, T, Ts, Tzr); -yeccpars2_365(S, '>>', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 374, Ss, Stack, T, Ts, Tzr). +yeccpars2_361(S, ',', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 369, Ss, Stack, T, Ts, Tzr); +yeccpars2_361(S, '>>', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 370, Ss, Stack, T, Ts, Tzr). -yeccpars2_366(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_362(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_|Nss] = Ss, - NewStack = yeccpars2_366_(Stack), + NewStack = yeccpars2_362_(Stack), yeccgoto_binary_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_367(S, ':', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 368, Ss, Stack, T, Ts, Tzr). +yeccpars2_363(S, ':', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 364, Ss, Stack, T, Ts, Tzr). -yeccpars2_368(S, integer, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 369, Ss, Stack, T, Ts, Tzr); -yeccpars2_368(S, var, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 370, Ss, Stack, T, Ts, Tzr). +yeccpars2_364(S, integer, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 365, Ss, Stack, T, Ts, Tzr); +yeccpars2_364(S, var, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 366, Ss, Stack, T, Ts, Tzr). -yeccpars2_369(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_365(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_369_(Stack), + NewStack = yeccpars2_365_(Stack), yeccgoto_bin_base_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_370(S, '*', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 371, Ss, Stack, T, Ts, Tzr). +yeccpars2_366(S, '*', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 367, Ss, Stack, T, Ts, Tzr). -yeccpars2_371(S, integer, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 372, Ss, Stack, T, Ts, Tzr). +yeccpars2_367(S, integer, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 368, Ss, Stack, T, Ts, Tzr). -yeccpars2_372(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_368(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_372_(Stack), + NewStack = yeccpars2_368_(Stack), yeccgoto_bin_unit_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_373(S, var, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 376, Ss, Stack, T, Ts, Tzr). +yeccpars2_369(S, var, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 372, Ss, Stack, T, Ts, Tzr). -yeccpars2_374(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_370(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_374_(Stack), + NewStack = yeccpars2_370_(Stack), yeccgoto_binary_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_375(S, '>>', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 378, Ss, Stack, T, Ts, Tzr). +yeccpars2_371(S, '>>', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 374, Ss, Stack, T, Ts, Tzr). -yeccpars2_376(S, ':', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 377, Ss, Stack, T, Ts, Tzr). +yeccpars2_372(S, ':', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 373, Ss, Stack, T, Ts, Tzr). -yeccpars2_377(S, var, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 370, Ss, Stack, T, Ts, Tzr). +yeccpars2_373(S, var, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 366, Ss, Stack, T, Ts, Tzr). -yeccpars2_378(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_374(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_378_(Stack), + NewStack = yeccpars2_374_(Stack), yeccgoto_binary_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_379(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_375(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_379_(Stack), + NewStack = yeccpars2_375_(Stack), yeccgoto_binary_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_380(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_376(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_|Nss] = Ss, - NewStack = yeccpars2_380_(Stack), + NewStack = yeccpars2_376_(Stack), yeccgoto_int_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_381: see yeccpars2_318 +%% yeccpars2_377: see yeccpars2_318 -yeccpars2_382(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_378(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_|Nss] = Ss, - NewStack = yeccpars2_382_(Stack), + NewStack = yeccpars2_378_(Stack), yeccgoto_fun_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_383(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 384, Ss, Stack, T, Ts, Tzr). +yeccpars2_379(S, ')', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 380, Ss, Stack, T, Ts, Tzr). -yeccpars2_384(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_380(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_384_(Stack), + NewStack = yeccpars2_380_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_385(S, '{', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 386, Ss, Stack, T, Ts, Tzr). +yeccpars2_381(S, '{', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 382, Ss, Stack, T, Ts, Tzr). -yeccpars2_386(S, atom, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 389, Ss, Stack, T, Ts, Tzr); -yeccpars2_386(S, '}', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 390, Ss, Stack, T, Ts, Tzr). +yeccpars2_382(S, atom, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 385, Ss, Stack, T, Ts, Tzr); +yeccpars2_382(S, '}', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 386, Ss, Stack, T, Ts, Tzr). -yeccpars2_387(S, '}', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 395, Ss, Stack, T, Ts, Tzr). +yeccpars2_383(S, '}', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 391, Ss, Stack, T, Ts, Tzr). -yeccpars2_388(S, ',', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 393, Ss, Stack, T, Ts, Tzr); -yeccpars2_388(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - NewStack = yeccpars2_388_(Stack), +yeccpars2_384(S, ',', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 389, Ss, Stack, T, Ts, Tzr); +yeccpars2_384(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + NewStack = yeccpars2_384_(Stack), yeccgoto_field_types(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). -yeccpars2_389(S, '::', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 391, Ss, Stack, T, Ts, Tzr). +yeccpars2_385(S, '::', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 387, Ss, Stack, T, Ts, Tzr). -yeccpars2_390(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_386(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_|Nss] = Ss, - NewStack = yeccpars2_390_(Stack), + NewStack = yeccpars2_386_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_391: see yeccpars2_318 +%% yeccpars2_387: see yeccpars2_318 -yeccpars2_392(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_388(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_392_(Stack), + NewStack = yeccpars2_388_(Stack), yeccgoto_field_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_393(S, atom, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 389, Ss, Stack, T, Ts, Tzr). +yeccpars2_389(S, atom, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 385, Ss, Stack, T, Ts, Tzr). -yeccpars2_394(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_390(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_394_(Stack), + NewStack = yeccpars2_390_(Stack), yeccgoto_field_types(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_395(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_391(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_395_(Stack), + NewStack = yeccpars2_391_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_396(S, '.', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 397, Ss, Stack, T, Ts, Tzr). - -yeccpars2_397(S, '-', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_392(S, '-', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 320, Ss, Stack, T, Ts, Tzr); -yeccpars2_397(S, integer, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_392(S, integer, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 325, Ss, Stack, T, Ts, Tzr). -yeccpars2_398(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - [_,_,_|Nss] = Ss, - NewStack = yeccpars2_398_(Stack), +yeccpars2_393(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + [_,_|Nss] = Ss, + NewStack = yeccpars2_393_(Stack), yeccgoto_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_399: see yeccpars2_318 +%% yeccpars2_394: see yeccpars2_318 -yeccpars2_400(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_395(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_400_(Stack), + NewStack = yeccpars2_395_(Stack), yeccgoto_top_types(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_401(S, '->', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 402, Ss, Stack, T, Ts, Tzr). +yeccpars2_396(S, '->', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 397, Ss, Stack, T, Ts, Tzr). -%% yeccpars2_402: see yeccpars2_318 +%% yeccpars2_397: see yeccpars2_318 -yeccpars2_403(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_398(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_403_(Stack), + NewStack = yeccpars2_398_(Stack), yeccgoto_fun_type(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_404: see yeccpars2_331 +%% yeccpars2_399: see yeccpars2_331 -yeccpars2_405(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_400(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_405_(Stack), + NewStack = yeccpars2_400_(Stack), yeccgoto_top_type_100(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_406(S, atom, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 409, Ss, Stack, T, Ts, Tzr). +yeccpars2_401(S, atom, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 404, Ss, Stack, T, Ts, Tzr); +yeccpars2_401(S, var, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 405, Ss, Stack, T, Ts, Tzr). -yeccpars2_407(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_402(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_407_(Stack), + NewStack = yeccpars2_402_(Stack), yeccgoto_type_sig(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_408(S, ',', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 413, Ss, Stack, T, Ts, Tzr); -yeccpars2_408(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - NewStack = yeccpars2_408_(Stack), +yeccpars2_403(S, ',', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 411, Ss, Stack, T, Ts, Tzr); +yeccpars2_403(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + NewStack = yeccpars2_403_(Stack), yeccgoto_type_guards(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). -yeccpars2_409(S, '(', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 410, Ss, Stack, T, Ts, Tzr). +yeccpars2_404(S, '(', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 408, Ss, Stack, T, Ts, Tzr). -%% yeccpars2_410: see yeccpars2_318 +yeccpars2_405(S, '::', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 406, Ss, Stack, T, Ts, Tzr). -yeccpars2_411(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 412, Ss, Stack, T, Ts, Tzr). +%% yeccpars2_406: see yeccpars2_318 -yeccpars2_412(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_407(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + [_,_|Nss] = Ss, + NewStack = yeccpars2_407_(Stack), + yeccgoto_type_guard(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). + +%% yeccpars2_408: see yeccpars2_318 + +yeccpars2_409(S, ')', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 410, Ss, Stack, T, Ts, Tzr). + +yeccpars2_410(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_|Nss] = Ss, - NewStack = yeccpars2_412_(Stack), + NewStack = yeccpars2_410_(Stack), yeccgoto_type_guard(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_413: see yeccpars2_406 +%% yeccpars2_411: see yeccpars2_401 -yeccpars2_414(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_412(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_414_(Stack), + NewStack = yeccpars2_412_(Stack), yeccgoto_type_guards(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_415: see yeccpars2_295 +%% yeccpars2_413: see yeccpars2_295 -yeccpars2_416(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_414(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_416_(Stack), + NewStack = yeccpars2_414_(Stack), yeccgoto_type_sigs(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_417(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_415(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_|Nss] = Ss, - NewStack = yeccpars2_417_(Stack), + NewStack = yeccpars2_415_(Stack), yeccgoto_type_spec(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_418(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_416(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_|Nss] = Ss, - NewStack = yeccpars2_418_(Stack), + NewStack = yeccpars2_416_(Stack), yeccgoto_type_spec(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_419(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_417(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_419_(Stack), + NewStack = yeccpars2_417_(Stack), yeccgoto_attribute(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_420(S, ',', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 444, Ss, Stack, T, Ts, Tzr); -yeccpars2_420(S, '::', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 426, Ss, Stack, T, Ts, Tzr); -yeccpars2_420(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - NewStack = yeccpars2_420_(Stack), +yeccpars2_418(S, ',', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 442, Ss, Stack, T, Ts, Tzr); +yeccpars2_418(S, '::', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 424, Ss, Stack, T, Ts, Tzr); +yeccpars2_418(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + NewStack = yeccpars2_418_(Stack), yeccgoto_attr_val(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). -yeccpars2_421(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_419(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_421_(Stack), + NewStack = yeccpars2_419_(Stack), yeccgoto_attribute(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_422: see yeccpars2_45 +%% yeccpars2_420: see yeccpars2_45 -yeccpars2_423(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 443, Ss, Stack, T, Ts, Tzr). +yeccpars2_421(S, ')', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 441, Ss, Stack, T, Ts, Tzr). -yeccpars2_424(S, ')', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_422(S, ')', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 210, Ss, Stack, T, Ts, Tzr); -yeccpars2_424(S, ',', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 425, Ss, Stack, T, Ts, Tzr); -yeccpars2_424(S, '::', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 426, Ss, Stack, T, Ts, Tzr). +yeccpars2_422(S, ',', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 423, Ss, Stack, T, Ts, Tzr); +yeccpars2_422(S, '::', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 424, Ss, Stack, T, Ts, Tzr). -yeccpars2_425(S, '#', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, '#', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 44, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, '(', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, '(', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 45, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, '+', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, '+', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 47, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, '-', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, '-', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 48, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, '.', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, '.', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 49, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, atom, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, atom, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 52, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, 'bnot', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, 'bnot', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 54, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, 'catch', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, 'catch', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 56, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, 'not', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, 'not', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 62, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, var, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, var, Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 67, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, '{', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 430, Ss, Stack, T, Ts, Tzr); -yeccpars2_425(S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_423(S, '{', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 428, Ss, Stack, T, Ts, Tzr); +yeccpars2_423(S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_cont_13(S, Cat, Ss, Stack, T, Ts, Tzr). -%% yeccpars2_426: see yeccpars2_318 +%% yeccpars2_424: see yeccpars2_318 -yeccpars2_427(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_425(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_427_(Stack), + NewStack = yeccpars2_425_(Stack), yeccgoto_typed_attr_val(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_428(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_426(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_428_(Stack), + NewStack = yeccpars2_426_(Stack), yeccgoto_typed_attr_val(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_429(S, ')', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 442, Ss, Stack, T, Ts, Tzr). +yeccpars2_427(S, ')', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 440, Ss, Stack, T, Ts, Tzr). -%% yeccpars2_430: see yeccpars2_68 +%% yeccpars2_428: see yeccpars2_68 -yeccpars2_431(S, '}', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 441, Ss, Stack, T, Ts, Tzr). +yeccpars2_429(S, '}', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 439, Ss, Stack, T, Ts, Tzr). -yeccpars2_432(S, ',', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 438, Ss, Stack, T, Ts, Tzr); -yeccpars2_432(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - NewStack = yeccpars2_432_(Stack), +yeccpars2_430(S, ',', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 436, Ss, Stack, T, Ts, Tzr); +yeccpars2_430(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + NewStack = yeccpars2_430_(Stack), yeccgoto_typed_exprs(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). -yeccpars2_433(S, ',', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 434, Ss, Stack, T, Ts, Tzr); -yeccpars2_433(S, '::', Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 435, Ss, Stack, T, Ts, Tzr); -yeccpars2_433(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - NewStack = yeccpars2_433_(Stack), +yeccpars2_431(S, ',', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 432, Ss, Stack, T, Ts, Tzr); +yeccpars2_431(S, '::', Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 433, Ss, Stack, T, Ts, Tzr); +yeccpars2_431(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + NewStack = yeccpars2_431_(Stack), yeccgoto_exprs(hd(Ss), Cat, Ss, NewStack, T, Ts, Tzr). -%% yeccpars2_434: see yeccpars2_45 +%% yeccpars2_432: see yeccpars2_45 -%% yeccpars2_435: see yeccpars2_318 +%% yeccpars2_433: see yeccpars2_318 -yeccpars2_436(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_434(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_436_(Stack), + NewStack = yeccpars2_434_(Stack), yeccgoto_typed_expr(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_437(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_435(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_437_(Stack), + NewStack = yeccpars2_435_(Stack), yeccgoto_typed_exprs(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_438: see yeccpars2_45 +%% yeccpars2_436: see yeccpars2_45 -yeccpars2_439(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_437(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_439_(Stack), + NewStack = yeccpars2_437_(Stack), yeccgoto_typed_exprs(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_440(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_438(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_440_(Stack), + NewStack = yeccpars2_438_(Stack), yeccgoto_typed_exprs(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_441(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_439(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_441_(Stack), + NewStack = yeccpars2_439_(Stack), yeccgoto_typed_record_fields(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_442(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_440(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_442_(Stack), + NewStack = yeccpars2_440_(Stack), yeccgoto_attr_val(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_443(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_441(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_,_,_|Nss] = Ss, - NewStack = yeccpars2_443_(Stack), + NewStack = yeccpars2_441_(Stack), yeccgoto_attribute(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_444: see yeccpars2_425 +%% yeccpars2_442: see yeccpars2_423 -yeccpars2_445(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_443(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_445_(Stack), + NewStack = yeccpars2_443_(Stack), yeccgoto_attr_val(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_446(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_444(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_|Nss] = Ss, - NewStack = yeccpars2_446_(Stack), + NewStack = yeccpars2_444_(Stack), yeccgoto_form(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_447(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_445(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_|Nss] = Ss, - NewStack = yeccpars2_447_(Stack), + NewStack = yeccpars2_445_(Stack), yeccgoto_form(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_448(S, atom, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 450, Ss, Stack, T, Ts, Tzr). +yeccpars2_446(S, atom, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 448, Ss, Stack, T, Ts, Tzr). -yeccpars2_449(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_447(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_449_(Stack), + NewStack = yeccpars2_447_(Stack), yeccgoto_function_clauses(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_450: see yeccpars2_10 +%% yeccpars2_448: see yeccpars2_10 -yeccpars2_451(S, 'when', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_449(S, 'when', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 84, Ss, Stack, T, Ts, Tzr); -yeccpars2_451(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - NewStack = yeccpars2_451_(Stack), - yeccpars2_83(452, Cat, [451 | Ss], NewStack, T, Ts, Tzr). +yeccpars2_449(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + NewStack = yeccpars2_449_(Stack), + yeccpars2_83(450, Cat, [449 | Ss], NewStack, T, Ts, Tzr). -%% yeccpars2_452: see yeccpars2_83 +%% yeccpars2_450: see yeccpars2_83 -yeccpars2_453(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_451(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_|Nss] = Ss, - NewStack = yeccpars2_453_(Stack), + NewStack = yeccpars2_451_(Stack), yeccgoto_form(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -yeccpars2_454(S, atom, Ss, Stack, T, Ts, Tzr) -> - yeccpars1(S, 456, Ss, Stack, T, Ts, Tzr). +yeccpars2_452(S, atom, Ss, Stack, T, Ts, Tzr) -> + yeccpars1(S, 454, Ss, Stack, T, Ts, Tzr). -yeccpars2_455(_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccpars2_453(_S, Cat, Ss, Stack, T, Ts, Tzr) -> [_,_|Nss] = Ss, - NewStack = yeccpars2_455_(Stack), + NewStack = yeccpars2_453_(Stack), yeccgoto_rule_clauses(hd(Nss), Cat, Nss, NewStack, T, Ts, Tzr). -%% yeccpars2_456: see yeccpars2_10 +%% yeccpars2_454: see yeccpars2_10 -yeccpars2_457(S, 'when', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_455(S, 'when', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 84, Ss, Stack, T, Ts, Tzr); -yeccpars2_457(_S, Cat, Ss, Stack, T, Ts, Tzr) -> - NewStack = yeccpars2_457_(Stack), - yeccpars2_458(458, Cat, [457 | Ss], NewStack, T, Ts, Tzr). +yeccpars2_455(_S, Cat, Ss, Stack, T, Ts, Tzr) -> + NewStack = yeccpars2_455_(Stack), + yeccpars2_456(456, Cat, [455 | Ss], NewStack, T, Ts, Tzr). -yeccpars2_458(S, ':-', Ss, Stack, T, Ts, Tzr) -> +yeccpars2_456(S, ':-', Ss, Stack, T, Ts, Tzr) -> yeccpars1(S, 290, Ss, Stack, T, Ts, Tzr). yeccgoto_add_op(33, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -3868,9 +3865,9 @@ yeccgoto_argument_list(59, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_151(151, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_argument_list(161, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_151(151, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_argument_list(450=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_argument_list(448=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_12(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_argument_list(456=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_argument_list(454=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_12(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_atomic(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -3977,27 +3974,27 @@ yeccgoto_atomic(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_43(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_atomic(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_43(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_atomic(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_atomic(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_43(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_atomic(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_atomic(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_43(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_atomic(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_atomic(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_43(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_atomic(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_atomic(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_43(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_atomic(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_atomic(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_43(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_atomic(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_atomic(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_43(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_attr_val(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_421(_S, Cat, Ss, Stack, T, Ts, Tzr). + yeccpars2_419(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_attribute(0, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_8(8, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_bin_base_type(321, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_365(365, Cat, Ss, Stack, T, Ts, Tzr). + yeccpars2_361(361, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_bin_element(50, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_186(186, Cat, Ss, Stack, T, Ts, Tzr); @@ -4010,9 +4007,9 @@ yeccgoto_bin_elements(188=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_189(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_bin_unit_type(321, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_364(364, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_bin_unit_type(373, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_375(375, Cat, Ss, Stack, T, Ts, Tzr). + yeccpars2_360(360, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_bin_unit_type(369, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_371(371, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_binary(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_42(_S, Cat, Ss, Stack, T, Ts, Tzr); @@ -4118,17 +4115,17 @@ yeccgoto_binary(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_133(133, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_binary(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_42(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_42(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_42(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_42(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_42(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_42(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_42(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_binary_comprehension(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -4235,17 +4232,17 @@ yeccgoto_binary_comprehension(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_41(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_binary_comprehension(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_41(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_comprehension(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_comprehension(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_41(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_comprehension(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_comprehension(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_41(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_comprehension(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_comprehension(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_41(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_comprehension(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_comprehension(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_41(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_comprehension(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_comprehension(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_41(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_comprehension(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_comprehension(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_41(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_binary_type(310=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -4260,27 +4257,29 @@ yeccgoto_binary_type(331=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_binary_type(337=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(343=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(341=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(346=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(344=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(349=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(347=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(381=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(377=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(391=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(387=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(399=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(394=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_binary_type(397=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(402=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(399=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(404=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(406=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(410=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(408=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(426=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(424=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_binary_type(435=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_binary_type(433=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_316(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_bit_expr(50, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -4405,25 +4404,25 @@ yeccgoto_case_expr(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_40(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_case_expr(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_40(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_case_expr(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_case_expr(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_40(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_case_expr(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_case_expr(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_40(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_case_expr(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_case_expr(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_40(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_case_expr(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_case_expr(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_40(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_case_expr(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_case_expr(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_40(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_case_expr(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_case_expr(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_40(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_clause_args(10, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_11(11, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_clause_args(450, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_451(451, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_clause_args(456, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_457(457, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_clause_args(448, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_449(449, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_clause_args(454, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_455(455, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_clause_body(83=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_89(_S, Cat, Ss, Stack, T, Ts, Tzr); @@ -4443,7 +4442,7 @@ yeccgoto_clause_body(159=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_160(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_clause_body(287=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_289(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_clause_body(452=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_clause_body(450=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_289(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_clause_guard(11, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -4458,10 +4457,10 @@ yeccgoto_clause_guard(102, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_83(103, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_clause_guard(151, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_83(159, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_clause_guard(451, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_83(452, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_clause_guard(457, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_458(458, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_clause_guard(449, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_83(450, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_clause_guard(455, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_456(456, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_comp_op(34, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_230(238, Cat, Ss, Stack, T, Ts, Tzr). @@ -4559,18 +4558,18 @@ yeccgoto_expr(228, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_expr(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_132(132, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr(292, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_420(420, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr(422, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_424(424, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr(425, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_418(418, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_expr(420, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_422(422, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_expr(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_39(39, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr(430, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_433(433, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr(434, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_433(433, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr(438, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_433(433, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr(428, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_431(431, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_expr(432, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_431(431, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_expr(436, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_431(431, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_expr(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_39(39, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_100(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -4653,17 +4652,17 @@ yeccgoto_expr_100(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_38(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_100(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_38(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_100(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_100(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_38(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_100(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_100(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_38(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_100(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_100(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_38(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_100(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_100(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_38(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_100(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_100(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_38(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_100(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_100(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_38(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_150(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -4748,17 +4747,17 @@ yeccgoto_expr_150(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_37(37, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_150(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_37(37, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_150(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_150(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_37(37, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_150(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_150(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_37(37, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_150(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_150(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_37(37, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_150(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_150(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_37(37, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_150(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_150(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_37(37, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_150(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_150(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_37(37, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_160(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -4845,17 +4844,17 @@ yeccgoto_expr_160(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_36(36, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_160(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_36(36, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_160(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_160(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_36(36, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_160(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_160(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_36(36, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_160(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_160(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_36(36, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_160(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_160(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_36(36, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_160(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_160(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_36(36, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_160(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_160(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_36(36, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_200(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -4942,17 +4941,17 @@ yeccgoto_expr_200(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_35(35, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_200(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_35(35, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_200(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_200(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_35(35, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_200(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_200(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_35(35, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_200(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_200(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_35(35, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_200(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_200(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_35(35, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_200(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_200(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_35(35, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_200(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_200(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_35(35, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_300(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5043,17 +5042,17 @@ yeccgoto_expr_300(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_34(34, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_300(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_34(34, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_300(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_300(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_34(34, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_300(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_300(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_34(34, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_300(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_300(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_34(34, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_300(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_300(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_34(34, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_300(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_300(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_34(34, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_300(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_300(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_34(34, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_400(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5144,17 +5143,17 @@ yeccgoto_expr_400(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_33(33, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_400(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_33(33, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_400(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_400(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_33(33, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_400(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_400(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_33(33, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_400(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_400(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_33(33, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_400(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_400(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_33(33, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_400(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_400(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_33(33, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_400(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_400(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_33(33, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_500(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5247,17 +5246,17 @@ yeccgoto_expr_500(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_32(32, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_500(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_32(32, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_500(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_500(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_32(32, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_500(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_500(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_32(32, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_500(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_500(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_32(32, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_500(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_500(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_32(32, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_500(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_500(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_32(32, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_500(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_500(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_32(32, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_600(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5352,17 +5351,17 @@ yeccgoto_expr_600(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_31(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_600(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_31(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_600(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_600(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_31(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_600(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_600(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_31(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_600(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_600(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_31(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_600(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_600(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_31(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_600(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_600(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_31(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_600(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_600(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_31(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_700(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5459,17 +5458,17 @@ yeccgoto_expr_700(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_30(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_700(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_30(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_700(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_700(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_30(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_700(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_700(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_30(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_700(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_700(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_30(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_700(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_700(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_30(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_700(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_700(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_30(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_700(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_700(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_30(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_800(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5566,17 +5565,17 @@ yeccgoto_expr_800(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_29(29, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_800(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_29(29, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_800(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_800(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_29(29, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_800(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_800(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_29(29, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_800(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_800(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_29(29, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_800(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_800(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_29(29, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_800(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_800(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_29(29, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_800(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_800(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_29(29, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_900(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5673,17 +5672,17 @@ yeccgoto_expr_900(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_28(28, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_900(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_28(28, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_900(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_900(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_28(28, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_900(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_900(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_28(28, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_900(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_900(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_28(28, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_900(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_900(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_28(28, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_900(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_900(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_28(28, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_900(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_900(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_28(28, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_expr_max(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5790,17 +5789,17 @@ yeccgoto_expr_max(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_27(27, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_expr_max(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_27(27, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_max(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_max(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_27(27, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_max(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_max(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_27(27, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_max(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_max(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_27(27, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_max(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_max(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_27(27, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_max(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_max(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_27(27, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_expr_max(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_expr_max(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_27(27, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_exprs(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5827,26 +5826,26 @@ yeccgoto_exprs(146, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_86(86, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_exprs(228=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_229(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_exprs(425, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_429(429, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_exprs(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_exprs(423, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_427(427, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_exprs(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_69(69, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_exprs(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_exprs(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_229(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_exprs(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_440(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_exprs(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_445(_S, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_exprs(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_438(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_exprs(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_443(_S, Cat, Ss, Stack, T, Ts, Tzr). -yeccgoto_field_type(386, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_388(388, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_field_type(393, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_388(388, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_field_type(382, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_384(384, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_field_type(389, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_384(384, Cat, Ss, Stack, T, Ts, Tzr). -yeccgoto_field_types(386, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_387(387, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_field_types(393=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_394(_S, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_field_types(382, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_383(383, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_field_types(389=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_390(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_form(0, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_7(7, Cat, Ss, Stack, T, Ts, Tzr). @@ -5965,17 +5964,17 @@ yeccgoto_fun_expr(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_25(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_fun_expr(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_25(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_fun_expr(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_fun_expr(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_25(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_fun_expr(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_fun_expr(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_25(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_fun_expr(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_fun_expr(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_25(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_fun_expr(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_fun_expr(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_25(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_fun_expr(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_fun_expr(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_25(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_fun_expr(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_fun_expr(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_25(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_fun_type(295, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -5984,7 +5983,7 @@ yeccgoto_fun_type(306, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_309(309, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_fun_type(334=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_336(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_fun_type(415, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_fun_type(413, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_309(309, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_fun_type_100(334, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -6087,28 +6086,28 @@ yeccgoto_function_call(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_24(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_function_call(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_24(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_function_call(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_function_call(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_24(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_function_call(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_function_call(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_24(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_function_call(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_function_call(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_24(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_function_call(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_function_call(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_24(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_function_call(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_function_call(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_24(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_function_call(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_function_call(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_24(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_function_clause(0, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_5(5, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_function_clause(448, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_function_clause(446, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_5(5, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_function_clauses(0=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_4(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_function_clauses(448=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_449(_S, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_function_clauses(446=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_447(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_guard(60, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_83(144, Cat, Ss, Stack, T, Ts, Tzr); @@ -6233,17 +6232,17 @@ yeccgoto_if_expr(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_if_expr(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_if_expr(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_if_expr(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_if_expr(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_if_expr(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_if_expr(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_if_expr(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_if_expr(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_if_expr(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_if_expr(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_if_expr(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_if_expr(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_if_expr(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_23(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_int_type(310, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -6258,29 +6257,31 @@ yeccgoto_int_type(331, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_int_type(337, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(343, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(341, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(346, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(344, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(349, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(347, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(381, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(377, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(391, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(387, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(397=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_398(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(399, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(392=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_393(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_int_type(394, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(402, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(397, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(404, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(399, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_int_type(406, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(410, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(408, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(426, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(424, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_int_type(435, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_int_type(433, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_315(315, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_lc_expr(129, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -6405,17 +6406,17 @@ yeccgoto_list(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_22(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_list(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_22(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_22(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_22(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_22(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_22(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_22(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_22(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_list_comprehension(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -6524,17 +6525,17 @@ yeccgoto_list_comprehension(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_21(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_list_comprehension(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_21(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list_comprehension(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list_comprehension(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_21(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list_comprehension(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list_comprehension(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_21(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list_comprehension(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list_comprehension(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_21(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list_comprehension(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list_comprehension(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_21(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list_comprehension(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list_comprehension(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_21(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_list_comprehension(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_list_comprehension(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_21(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_list_op(33, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -6647,17 +6648,17 @@ yeccgoto_prefix_op(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_20(20, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_prefix_op(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_20(20, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_prefix_op(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_prefix_op(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_20(20, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_prefix_op(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_prefix_op(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_20(20, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_prefix_op(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_prefix_op(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_20(20, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_prefix_op(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_prefix_op(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_20(20, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_prefix_op(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_prefix_op(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_20(20, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_prefix_op(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_prefix_op(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_20(20, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_query_expr(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -6764,17 +6765,17 @@ yeccgoto_query_expr(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_19(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_query_expr(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_19(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_query_expr(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_query_expr(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_19(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_query_expr(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_query_expr(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_19(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_query_expr(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_query_expr(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_19(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_query_expr(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_query_expr(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_19(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_query_expr(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_query_expr(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_19(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_query_expr(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_query_expr(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_19(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_receive_expr(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -6881,17 +6882,17 @@ yeccgoto_receive_expr(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_18(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_receive_expr(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_18(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_receive_expr(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_receive_expr(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_18(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_receive_expr(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_receive_expr(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_18(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_receive_expr(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_receive_expr(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_18(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_receive_expr(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_receive_expr(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_18(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_receive_expr(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_receive_expr(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_18(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_receive_expr(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_receive_expr(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_18(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_record_expr(13, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -6988,17 +6989,17 @@ yeccgoto_record_expr(290, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_17(17, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_record_expr(292, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_17(17, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_record_expr(422, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_record_expr(420, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_17(17, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_record_expr(425, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_record_expr(423, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_17(17, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_record_expr(430, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_record_expr(428, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_17(17, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_record_expr(434, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_record_expr(432, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_17(17, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_record_expr(438, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_record_expr(436, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_17(17, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_record_expr(444, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_record_expr(442, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_17(17, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_record_field(214, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -7023,18 +7024,18 @@ yeccgoto_rule(0, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_rule_body(287=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_288(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_rule_body(458=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_rule_body(456=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_288(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_rule_clause(0, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_2(2, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_rule_clause(454, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_rule_clause(452, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_2(2, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_rule_clauses(0=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_1(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_rule_clauses(454=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_455(_S, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_rule_clauses(452=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_453(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_spec_fun(293, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_295(295, Cat, Ss, Stack, T, Ts, Tzr); @@ -7147,17 +7148,17 @@ yeccgoto_strings(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_16(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_strings(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_16(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_strings(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_strings(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_16(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_strings(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_strings(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_16(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_strings(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_strings(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_16(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_strings(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_strings(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_16(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_strings(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_strings(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_16(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_strings(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_strings(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_16(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_tail(171=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -7168,33 +7169,35 @@ yeccgoto_tail(179=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccgoto_top_type(310, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_314(314, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_top_type(318, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_383(383, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_379(379, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_top_type(322, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_356(356, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_354(354, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_top_type(327, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_314(314, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_top_type(337, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_314(314, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(343=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_344(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(346, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type(341=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_342(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_type(344, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_314(314, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(349, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type(347, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_314(314, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(381=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_382(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(391=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_392(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(399, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type(377=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_378(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_type(387=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_388(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_type(394, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_314(314, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(402=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_403(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(410, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type(397=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_398(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_type(406=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_407(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_type(408, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_314(314, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(426=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_427(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type(435=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_436(_S, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_top_type(424=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_425(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_type(433=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_434(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_top_type_100(310=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); @@ -7208,27 +7211,29 @@ yeccgoto_top_type_100(331=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_332(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_top_type_100(337=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(343=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(341=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(346=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(344=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(349=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(347=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(381=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(377=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(391=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(387=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(399=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(394=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(402=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(397=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(404=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_405(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(410=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(399=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_400(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_type_100(406=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_type_100(408=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(426=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(424=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_type_100(435=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_top_type_100(433=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_313(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_top_types(310, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -7237,14 +7242,14 @@ yeccgoto_top_types(327, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_328(328, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_top_types(337, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_312(312, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_types(346, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_353(353, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_types(349, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_350(350, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_types(399=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_400(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_top_types(410, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_411(411, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_top_types(344, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_351(351, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_types(347, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_348(348, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_types(394=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_395(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_top_types(408, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_409(409, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_try_catch(72=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_73(_S, Cat, Ss, Stack, T, Ts, Tzr); @@ -7365,17 +7370,17 @@ yeccgoto_try_expr(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_15(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_try_expr(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_15(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_try_expr(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_try_expr(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_15(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_try_expr(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_try_expr(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_15(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_try_expr(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_try_expr(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_15(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_try_expr(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_try_expr(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_15(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_try_expr(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_try_expr(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_15(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_try_expr(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_try_expr(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_15(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_tuple(13=_S, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -7482,17 +7487,17 @@ yeccgoto_tuple(290=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_tuple(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_tuple(422=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_tuple(420=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_tuple(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_tuple(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_tuple(430=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_tuple(428=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_tuple(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_tuple(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_tuple(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_tuple(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_tuple(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_tuple(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_14(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_type(310, Cat, Ss, Stack, T, Ts, Tzr) -> @@ -7507,82 +7512,84 @@ yeccgoto_type(331, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_type(337, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(343, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(341, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(346, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(344, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(349, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(347, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(381, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(377, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(391, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(387, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(399, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(394, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(402, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(397, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(404, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(399, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_type(406, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(410, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(408, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(426, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(424, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type(435, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type(433, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_311(311, Cat, Ss, Stack, T, Ts, Tzr). -yeccgoto_type_guard(406, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_408(408, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type_guard(413, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_408(408, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_type_guard(401, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_403(403, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_type_guard(411, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_403(403, Cat, Ss, Stack, T, Ts, Tzr). -yeccgoto_type_guards(406=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_407(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type_guards(413=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_414(_S, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_type_guards(401=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_402(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_type_guards(411=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_412(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_type_sig(295, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_308(308, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_type_sig(306, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_308(308, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type_sig(415, Cat, Ss, Stack, T, Ts, Tzr) -> +yeccgoto_type_sig(413, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_308(308, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_type_sigs(295=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_418(_S, Cat, Ss, Stack, T, Ts, Tzr); + yeccpars2_416(_S, Cat, Ss, Stack, T, Ts, Tzr); yeccgoto_type_sigs(306, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_307(307, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_type_sigs(415=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_416(_S, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_type_sigs(413=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_414(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_type_spec(293=_S, Cat, Ss, Stack, T, Ts, Tzr) -> yeccpars2_294(_S, Cat, Ss, Stack, T, Ts, Tzr). yeccgoto_typed_attr_val(292=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_419(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_typed_attr_val(422, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_423(423, Cat, Ss, Stack, T, Ts, Tzr). - -yeccgoto_typed_expr(430, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_432(432, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_typed_expr(434, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_432(432, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_typed_expr(438, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_432(432, Cat, Ss, Stack, T, Ts, Tzr). - -yeccgoto_typed_exprs(430, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_431(431, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_typed_exprs(434=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_437(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_typed_exprs(438=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_439(_S, Cat, Ss, Stack, T, Ts, Tzr). + yeccpars2_417(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_typed_attr_val(420, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_421(421, Cat, Ss, Stack, T, Ts, Tzr). + +yeccgoto_typed_expr(428, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_430(430, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_typed_expr(432, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_430(430, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_typed_expr(436, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_430(430, Cat, Ss, Stack, T, Ts, Tzr). + +yeccgoto_typed_exprs(428, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_429(429, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_typed_exprs(432=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_435(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_typed_exprs(436=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_437(_S, Cat, Ss, Stack, T, Ts, Tzr). -yeccgoto_typed_record_fields(425=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_428(_S, Cat, Ss, Stack, T, Ts, Tzr); -yeccgoto_typed_record_fields(444=_S, Cat, Ss, Stack, T, Ts, Tzr) -> - yeccpars2_428(_S, Cat, Ss, Stack, T, Ts, Tzr). +yeccgoto_typed_record_fields(423=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_426(_S, Cat, Ss, Stack, T, Ts, Tzr); +yeccgoto_typed_record_fields(442=_S, Cat, Ss, Stack, T, Ts, Tzr) -> + yeccpars2_426(_S, Cat, Ss, Stack, T, Ts, Tzr). -compile({inline,yeccpars2_1_/1}). --file("erl_parse.yrl", 476). +-file("erl_parse.yrl", 477). yeccpars2_1_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -7590,7 +7597,7 @@ yeccpars2_1_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_2_/1}). --file("erl_parse.yrl", 478). +-file("erl_parse.yrl", 479). yeccpars2_2_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -7598,7 +7605,7 @@ yeccpars2_2_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_4_/1}). --file("erl_parse.yrl", 186). +-file("erl_parse.yrl", 187). yeccpars2_4_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -7606,7 +7613,7 @@ yeccpars2_4_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_5_/1}). --file("erl_parse.yrl", 188). +-file("erl_parse.yrl", 189). yeccpars2_5_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -7614,14 +7621,14 @@ yeccpars2_5_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_11_/1}). --file("erl_parse.yrl", 198). +-file("erl_parse.yrl", 199). yeccpars2_11_(__Stack0) -> [begin [ ] end | __Stack0]. -compile({inline,yeccpars2_12_/1}). --file("erl_parse.yrl", 195). +-file("erl_parse.yrl", 196). yeccpars2_12_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -7629,43 +7636,43 @@ yeccpars2_12_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_39_/1}). --file("erl_parse.yrl", 427). +-file("erl_parse.yrl", 428). yeccpars2_39_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7639). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7646). -compile({inline,yeccpars2_46_/1}). --file("erl_parse.yrl", 423). +-file("erl_parse.yrl", 424). yeccpars2_46_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { [ ] , ? line ( __1 ) } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7648). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7655). -compile({inline,yeccpars2_70_/1}). --file("erl_parse.yrl", 314). +-file("erl_parse.yrl", 315). yeccpars2_70_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { tuple , ? line ( __1 ) , [ ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7657). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7664). -compile({inline,yeccpars2_71_/1}). --file("erl_parse.yrl", 315). +-file("erl_parse.yrl", 316). yeccpars2_71_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { tuple , ? line ( __1 ) , __2 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7666). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7673). -compile({inline,yeccpars2_73_/1}). --file("erl_parse.yrl", 397). +-file("erl_parse.yrl", 398). yeccpars2_73_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7673,14 +7680,14 @@ yeccpars2_73_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_77_/1}). --file("erl_parse.yrl", 198). +-file("erl_parse.yrl", 199). yeccpars2_77_(__Stack0) -> [begin [ ] end | __Stack0]. -compile({inline,yeccpars2_79_/1}). --file("erl_parse.yrl", 366). +-file("erl_parse.yrl", 367). yeccpars2_79_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -7688,16 +7695,16 @@ yeccpars2_79_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_81_/1}). --file("erl_parse.yrl", 367). +-file("erl_parse.yrl", 368). yeccpars2_81_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7698). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7705). -compile({inline,yeccpars2_82_/1}). --file("erl_parse.yrl", 395). +-file("erl_parse.yrl", 396). yeccpars2_82_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7705,7 +7712,7 @@ yeccpars2_82_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_85_/1}). --file("erl_parse.yrl", 197). +-file("erl_parse.yrl", 198). yeccpars2_85_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin @@ -7713,7 +7720,7 @@ yeccpars2_85_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_86_/1}). --file("erl_parse.yrl", 430). +-file("erl_parse.yrl", 431). yeccpars2_86_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -7721,16 +7728,16 @@ yeccpars2_86_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_88_/1}). --file("erl_parse.yrl", 431). +-file("erl_parse.yrl", 432). yeccpars2_88_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7731). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7738). -compile({inline,yeccpars2_89_/1}). --file("erl_parse.yrl", 370). +-file("erl_parse.yrl", 371). yeccpars2_89_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7738,7 +7745,7 @@ yeccpars2_89_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_91_/1}). --file("erl_parse.yrl", 200). +-file("erl_parse.yrl", 201). yeccpars2_91_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin @@ -7746,7 +7753,7 @@ yeccpars2_91_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_93_/1}). --file("erl_parse.yrl", 406). +-file("erl_parse.yrl", 407). yeccpars2_93_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -7754,22 +7761,22 @@ yeccpars2_93_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_94_/1}). --file("erl_parse.yrl", 198). +-file("erl_parse.yrl", 199). yeccpars2_94_(__Stack0) -> [begin [ ] end | __Stack0]. -compile({inline,yeccpars2_98_/1}). --file("erl_parse.yrl", 198). +-file("erl_parse.yrl", 199). yeccpars2_98_(__Stack0) -> [begin [ ] end | __Stack0]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7770). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7777). -compile({inline,yeccpars2_100_/1}). --file("erl_parse.yrl", 416). +-file("erl_parse.yrl", 417). yeccpars2_100_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7778,15 +7785,15 @@ yeccpars2_100_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_102_/1}). --file("erl_parse.yrl", 198). +-file("erl_parse.yrl", 199). yeccpars2_102_(__Stack0) -> [begin [ ] end | __Stack0]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7787). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7794). -compile({inline,yeccpars2_104_/1}). --file("erl_parse.yrl", 413). +-file("erl_parse.yrl", 414). yeccpars2_104_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7794,9 +7801,9 @@ yeccpars2_104_(__Stack0) -> { clause , L , [ { tuple , L , [ __1 , __3 , { var , L , '_' } ] } ] , __4 , __5 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7797). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7804). -compile({inline,yeccpars2_106_/1}). --file("erl_parse.yrl", 410). +-file("erl_parse.yrl", 411). yeccpars2_106_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7805,7 +7812,7 @@ yeccpars2_106_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_108_/1}). --file("erl_parse.yrl", 407). +-file("erl_parse.yrl", 408). yeccpars2_108_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7813,7 +7820,7 @@ yeccpars2_108_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_110_/1}). --file("erl_parse.yrl", 400). +-file("erl_parse.yrl", 401). yeccpars2_110_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7821,7 +7828,7 @@ yeccpars2_110_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_112_/1}). --file("erl_parse.yrl", 402). +-file("erl_parse.yrl", 403). yeccpars2_112_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7829,43 +7836,43 @@ yeccpars2_112_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_114_/1}). --file("erl_parse.yrl", 404). +-file("erl_parse.yrl", 405). yeccpars2_114_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { [ ] , __2 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7839). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7846). -compile({inline,yeccpars2_115_/1}). --file("erl_parse.yrl", 441). +-file("erl_parse.yrl", 442). yeccpars2_115_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { string , ? line ( __1 ) , element ( 3 , __1 ) ++ element ( 3 , __2 ) } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7848). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7855). -compile({inline,yeccpars2_120_/1}). --file("erl_parse.yrl", 375). +-file("erl_parse.yrl", 376). yeccpars2_120_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { 'receive' , ? line ( __1 ) , [ ] , __3 , __4 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7857). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7864). -compile({inline,yeccpars2_122_/1}). --file("erl_parse.yrl", 373). +-file("erl_parse.yrl", 374). yeccpars2_122_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { 'receive' , ? line ( __1 ) , __2 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7866). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7873). -compile({inline,yeccpars2_125_/1}). --file("erl_parse.yrl", 377). +-file("erl_parse.yrl", 378). yeccpars2_125_(__Stack0) -> [__6,__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7873,25 +7880,25 @@ yeccpars2_125_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_131_/1}). --file("erl_parse.yrl", 307). +-file("erl_parse.yrl", 308). yeccpars2_131_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7883). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7890). -compile({inline,yeccpars2_135_/1}). --file("erl_parse.yrl", 312). +-file("erl_parse.yrl", 313). yeccpars2_135_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { b_generate , ? line ( __2 ) , __1 , __3 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7892). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7899). -compile({inline,yeccpars2_137_/1}). --file("erl_parse.yrl", 311). +-file("erl_parse.yrl", 312). yeccpars2_137_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7899,25 +7906,25 @@ yeccpars2_137_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_139_/1}). --file("erl_parse.yrl", 308). +-file("erl_parse.yrl", 309). yeccpars2_139_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7909). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7916). -compile({inline,yeccpars2_140_/1}). --file("erl_parse.yrl", 304). +-file("erl_parse.yrl", 305). yeccpars2_140_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { lc , ? line ( __1 ) , __2 , __4 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7918). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7925). -compile({inline,yeccpars2_141_/1}). --file("erl_parse.yrl", 420). +-file("erl_parse.yrl", 421). yeccpars2_141_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7925,16 +7932,16 @@ yeccpars2_141_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_143_/1}). --file("erl_parse.yrl", 356). +-file("erl_parse.yrl", 357). yeccpars2_143_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7935). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7942). -compile({inline,yeccpars2_145_/1}). --file("erl_parse.yrl", 360). +-file("erl_parse.yrl", 361). yeccpars2_145_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin @@ -7942,16 +7949,16 @@ yeccpars2_145_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_147_/1}). --file("erl_parse.yrl", 357). +-file("erl_parse.yrl", 358). yeccpars2_147_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7952). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7959). -compile({inline,yeccpars2_148_/1}). --file("erl_parse.yrl", 354). +-file("erl_parse.yrl", 355). yeccpars2_148_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7959,7 +7966,7 @@ yeccpars2_148_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_150_/1}). --file("erl_parse.yrl", 387). +-file("erl_parse.yrl", 388). yeccpars2_150_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -7967,24 +7974,24 @@ yeccpars2_150_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_151_/1}). --file("erl_parse.yrl", 198). +-file("erl_parse.yrl", 199). yeccpars2_151_(__Stack0) -> [begin [ ] end | __Stack0]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7976). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7983). -compile({inline,yeccpars2_157_/1}). --file("erl_parse.yrl", 383). +-file("erl_parse.yrl", 384). yeccpars2_157_(__Stack0) -> [__6,__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { 'fun' , ? line ( __1 ) , { function , element ( 3 , __2 ) , element ( 3 , __4 ) , element ( 3 , __6 ) } } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 7985). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 7992). -compile({inline,yeccpars2_158_/1}). --file("erl_parse.yrl", 381). +-file("erl_parse.yrl", 382). yeccpars2_158_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin @@ -7992,7 +7999,7 @@ yeccpars2_158_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_160_/1}). --file("erl_parse.yrl", 391). +-file("erl_parse.yrl", 392). yeccpars2_160_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8001,70 +8008,70 @@ yeccpars2_160_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_162_/1}). --file("erl_parse.yrl", 388). +-file("erl_parse.yrl", 389). yeccpars2_162_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8011). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8018). -compile({inline,yeccpars2_163_/1}). --file("erl_parse.yrl", 385). +-file("erl_parse.yrl", 386). yeccpars2_163_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin build_fun ( ? line ( __1 ) , __2 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8020). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8027). -compile({inline,yeccpars2_164_/1}). --file("erl_parse.yrl", 203). +-file("erl_parse.yrl", 204). yeccpars2_164_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { 'catch' , ? line ( __1 ) , __2 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8029). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8036). -compile({inline,yeccpars2_168_/1}). --file("erl_parse.yrl", 364). +-file("erl_parse.yrl", 365). yeccpars2_168_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { 'case' , ? line ( __1 ) , __2 , __4 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8038). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8045). -compile({inline,yeccpars2_170_/1}). --file("erl_parse.yrl", 259). +-file("erl_parse.yrl", 260). yeccpars2_170_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { block , ? line ( __1 ) , __2 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8047). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8054). -compile({inline,yeccpars2_172_/1}). --file("erl_parse.yrl", 268). +-file("erl_parse.yrl", 269). yeccpars2_172_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { nil , ? line ( __1 ) } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8056). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8063). -compile({inline,yeccpars2_173_/1}). --file("erl_parse.yrl", 269). +-file("erl_parse.yrl", 270). yeccpars2_173_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { cons , ? line ( __1 ) , __2 , __3 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8065). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8072). -compile({inline,yeccpars2_175_/1}). --file("erl_parse.yrl", 271). +-file("erl_parse.yrl", 272). yeccpars2_175_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -8072,16 +8079,16 @@ yeccpars2_175_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_178_/1}). --file("erl_parse.yrl", 272). +-file("erl_parse.yrl", 273). yeccpars2_178_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin __2 end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8082). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8089). -compile({inline,yeccpars2_180_/1}). --file("erl_parse.yrl", 273). +-file("erl_parse.yrl", 274). yeccpars2_180_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8089,23 +8096,23 @@ yeccpars2_180_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_183_/1}). --file("erl_parse.yrl", 289). +-file("erl_parse.yrl", 290). yeccpars2_183_(__Stack0) -> [begin default end | __Stack0]. -compile({inline,yeccpars2_186_/1}). --file("erl_parse.yrl", 279). +-file("erl_parse.yrl", 280). yeccpars2_186_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8106). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8113). -compile({inline,yeccpars2_187_/1}). --file("erl_parse.yrl", 276). +-file("erl_parse.yrl", 277). yeccpars2_187_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin @@ -8113,25 +8120,25 @@ yeccpars2_187_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_189_/1}). --file("erl_parse.yrl", 280). +-file("erl_parse.yrl", 281). yeccpars2_189_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8123). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8130). -compile({inline,yeccpars2_190_/1}). --file("erl_parse.yrl", 277). +-file("erl_parse.yrl", 278). yeccpars2_190_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { bin , ? line ( __1 ) , __2 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8132). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8139). -compile({inline,yeccpars2_193_/1}). --file("erl_parse.yrl", 306). +-file("erl_parse.yrl", 307). yeccpars2_193_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8139,23 +8146,23 @@ yeccpars2_193_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_194_/1}). --file("erl_parse.yrl", 292). +-file("erl_parse.yrl", 293). yeccpars2_194_(__Stack0) -> [begin default end | __Stack0]. -compile({inline,yeccpars2_197_/1}). --file("erl_parse.yrl", 288). +-file("erl_parse.yrl", 289). yeccpars2_197_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin __2 end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8156). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8163). -compile({inline,yeccpars2_198_/1}). --file("erl_parse.yrl", 283). +-file("erl_parse.yrl", 284). yeccpars2_198_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8163,7 +8170,7 @@ yeccpars2_198_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_200_/1}). --file("erl_parse.yrl", 291). +-file("erl_parse.yrl", 292). yeccpars2_200_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin @@ -8171,7 +8178,7 @@ yeccpars2_200_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_201_/1}). --file("erl_parse.yrl", 295). +-file("erl_parse.yrl", 296). yeccpars2_201_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -8179,7 +8186,7 @@ yeccpars2_201_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_202_/1}). --file("erl_parse.yrl", 297). +-file("erl_parse.yrl", 298). yeccpars2_202_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -8187,7 +8194,7 @@ yeccpars2_202_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_204_/1}). --file("erl_parse.yrl", 298). +-file("erl_parse.yrl", 299). yeccpars2_204_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8195,25 +8202,25 @@ yeccpars2_204_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_206_/1}). --file("erl_parse.yrl", 294). +-file("erl_parse.yrl", 295). yeccpars2_206_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8205). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8212). -compile({inline,yeccpars2_207_/1}). --file("erl_parse.yrl", 285). +-file("erl_parse.yrl", 286). yeccpars2_207_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin ? mkop1 ( __1 , __2 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8214). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8221). -compile({inline,yeccpars2_208_/1}). --file("erl_parse.yrl", 245). +-file("erl_parse.yrl", 246). yeccpars2_208_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin @@ -8221,16 +8228,16 @@ yeccpars2_208_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_210_/1}). --file("erl_parse.yrl", 258). +-file("erl_parse.yrl", 259). yeccpars2_210_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin __2 end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8231). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8238). -compile({inline,yeccpars2_212_/1}). --file("erl_parse.yrl", 329). +-file("erl_parse.yrl", 330). yeccpars2_212_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8238,7 +8245,7 @@ yeccpars2_212_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_216_/1}). --file("erl_parse.yrl", 342). +-file("erl_parse.yrl", 343). yeccpars2_216_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin @@ -8246,25 +8253,25 @@ yeccpars2_216_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_219_/1}). --file("erl_parse.yrl", 339). +-file("erl_parse.yrl", 340). yeccpars2_219_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin [ ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8256). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8263). -compile({inline,yeccpars2_221_/1}). --file("erl_parse.yrl", 345). +-file("erl_parse.yrl", 346). yeccpars2_221_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { record_field , ? line ( __1 ) , __1 , __3 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8265). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8272). -compile({inline,yeccpars2_223_/1}). --file("erl_parse.yrl", 346). +-file("erl_parse.yrl", 347). yeccpars2_223_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8272,7 +8279,7 @@ yeccpars2_223_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_225_/1}). --file("erl_parse.yrl", 343). +-file("erl_parse.yrl", 344). yeccpars2_225_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8280,16 +8287,16 @@ yeccpars2_225_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_226_/1}). --file("erl_parse.yrl", 340). +-file("erl_parse.yrl", 341). yeccpars2_226_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin __2 end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8290). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8297). -compile({inline,yeccpars2_227_/1}). --file("erl_parse.yrl", 327). +-file("erl_parse.yrl", 328). yeccpars2_227_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8297,178 +8304,178 @@ yeccpars2_227_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_229_/1}). --file("erl_parse.yrl", 428). +-file("erl_parse.yrl", 429). yeccpars2_229_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8307). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8314). -compile({inline,yeccpars2_232_/1}). --file("erl_parse.yrl", 206). +-file("erl_parse.yrl", 207). yeccpars2_232_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { match , ? line ( __2 ) , __1 , __3 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8316). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8323). -compile({inline,yeccpars2_233_/1}). --file("erl_parse.yrl", 207). +-file("erl_parse.yrl", 208). yeccpars2_233_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin ? mkop2 ( __1 , __2 , __3 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8325). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8332). -compile({inline,yeccpars2_235_/1}). --file("erl_parse.yrl", 210). +-file("erl_parse.yrl", 211). yeccpars2_235_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin ? mkop2 ( __1 , __2 , __3 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8334). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8341). -compile({inline,yeccpars2_237_/1}). --file("erl_parse.yrl", 213). +-file("erl_parse.yrl", 214). yeccpars2_237_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin ? mkop2 ( __1 , __2 , __3 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8343). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8350). -compile({inline,yeccpars2_247_/1}). --file("erl_parse.yrl", 217). +-file("erl_parse.yrl", 218). yeccpars2_247_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin ? mkop2 ( __1 , __2 , __3 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8352). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8359). -compile({inline,yeccpars2_260_/1}). --file("erl_parse.yrl", 225). +-file("erl_parse.yrl", 226). yeccpars2_260_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin ? mkop2 ( __1 , __2 , __3 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8361). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8368). -compile({inline,yeccpars2_268_/1}). --file("erl_parse.yrl", 229). +-file("erl_parse.yrl", 230). yeccpars2_268_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin ? mkop2 ( __1 , __2 , __3 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8370). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8377). -compile({inline,yeccpars2_269_/1}). --file("erl_parse.yrl", 221). +-file("erl_parse.yrl", 222). yeccpars2_269_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin ? mkop2 ( __1 , __2 , __3 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8379). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8386). -compile({inline,yeccpars2_270_/1}). --file("erl_parse.yrl", 351). +-file("erl_parse.yrl", 352). yeccpars2_270_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { call , ? line ( __1 ) , __1 , element ( 1 , __2 ) } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8388). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8395). -compile({inline,yeccpars2_273_/1}). --file("erl_parse.yrl", 241). +-file("erl_parse.yrl", 242). yeccpars2_273_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { remote , ? line ( __2 ) , __1 , __3 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8397). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8404). -compile({inline,yeccpars2_274_/1}). --file("erl_parse.yrl", 247). +-file("erl_parse.yrl", 248). yeccpars2_274_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { record_field , ? line ( __2 ) , __1 , __3 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8406). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8413). -compile({inline,yeccpars2_277_/1}). --file("erl_parse.yrl", 333). +-file("erl_parse.yrl", 334). yeccpars2_277_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin { record , ? line ( __2 ) , __1 , element ( 3 , __3 ) , __4 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8415). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8422). -compile({inline,yeccpars2_279_/1}). --file("erl_parse.yrl", 331). +-file("erl_parse.yrl", 332). yeccpars2_279_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { record_field , ? line ( __2 ) , __1 , element ( 3 , __3 ) , __5 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8424). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8431). -compile({inline,yeccpars2_280_/1}). --file("erl_parse.yrl", 424). +-file("erl_parse.yrl", 425). yeccpars2_280_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { __2 , ? line ( __1 ) } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8433). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8440). -compile({inline,yeccpars2_281_/1}). --file("erl_parse.yrl", 233). +-file("erl_parse.yrl", 234). yeccpars2_281_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin ? mkop1 ( __1 , __2 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8442). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8449). -compile({inline,yeccpars2_284_/1}). --file("erl_parse.yrl", 337). +-file("erl_parse.yrl", 338). yeccpars2_284_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin { record , ? line ( __2 ) , __1 , element ( 3 , __3 ) , __4 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8451). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8458). -compile({inline,yeccpars2_286_/1}). --file("erl_parse.yrl", 335). +-file("erl_parse.yrl", 336). yeccpars2_286_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { record_field , ? line ( __2 ) , __1 , element ( 3 , __3 ) , __5 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8460). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8467). -compile({inline,yeccpars2_288_/1}). --file("erl_parse.yrl", 482). +-file("erl_parse.yrl", 483). yeccpars2_288_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin { clause , ? line ( __1 ) , element ( 3 , __1 ) , __2 , __3 , __4 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8469). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8476). -compile({inline,yeccpars2_289_/1}). --file("erl_parse.yrl", 192). +-file("erl_parse.yrl", 193). yeccpars2_289_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin @@ -8476,7 +8483,7 @@ yeccpars2_289_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_291_/1}). --file("erl_parse.yrl", 484). +-file("erl_parse.yrl", 485). yeccpars2_291_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin @@ -8524,137 +8531,137 @@ yeccpars2_308_(__Stack0) -> end | __Stack]. -compile({inline,yeccpars2_314_/1}). --file("erl_parse.yrl", 112). +-file("erl_parse.yrl", 113). yeccpars2_314_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8534). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8541). -compile({inline,yeccpars2_329_/1}). --file("erl_parse.yrl", 135). +-file("erl_parse.yrl", 136). yeccpars2_329_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , tuple , [ ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8543). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8550). -compile({inline,yeccpars2_330_/1}). --file("erl_parse.yrl", 136). +-file("erl_parse.yrl", 137). yeccpars2_330_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , tuple , __2 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8552). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8559). -compile({inline,yeccpars2_332_/1}). --file("erl_parse.yrl", 115). +-file("erl_parse.yrl", 116). yeccpars2_332_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { ann_type , ? line ( __1 ) , [ __1 , __3 ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8561). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8568). -compile({inline,yeccpars2_338_/1}). --file("erl_parse.yrl", 144). +-file("erl_parse.yrl", 145). yeccpars2_338_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , 'fun' , [ ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8570). --compile({inline,yeccpars2_344_/1}). --file("erl_parse.yrl", 152). -yeccpars2_344_(__Stack0) -> - [__7,__6,__5,__4,__3,__2,__1 | __Stack] = __Stack0, +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8577). +-compile({inline,yeccpars2_342_/1}). +-file("erl_parse.yrl", 153). +yeccpars2_342_(__Stack0) -> + [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , 'fun' , - [ { type , ? line ( __1 ) , any } , __7 ] } + [ { type , ? line ( __1 ) , any } , __5 ] } end | __Stack]. --compile({inline,yeccpars2_345_/1}). --file("erl_parse.yrl", 145). -yeccpars2_345_(__Stack0) -> +-compile({inline,yeccpars2_343_/1}). +-file("erl_parse.yrl", 146). +yeccpars2_343_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin __3 end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8588). --compile({inline,yeccpars2_351_/1}). --file("erl_parse.yrl", 127). -yeccpars2_351_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8595). +-compile({inline,yeccpars2_349_/1}). +-file("erl_parse.yrl", 128). +yeccpars2_349_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { remote_type , ? line ( __1 ) , [ __1 , __3 , [ ] ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8598). --compile({inline,yeccpars2_352_/1}). --file("erl_parse.yrl", 129). -yeccpars2_352_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8605). +-compile({inline,yeccpars2_350_/1}). +-file("erl_parse.yrl", 130). +yeccpars2_350_(__Stack0) -> [__6,__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { remote_type , ? line ( __1 ) , [ __1 , __3 , __5 ] } end | __Stack]. --compile({inline,yeccpars2_354_/1}). --file("erl_parse.yrl", 124). -yeccpars2_354_(__Stack0) -> +-compile({inline,yeccpars2_352_/1}). +-file("erl_parse.yrl", 125). +yeccpars2_352_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin build_gen_type ( __1 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8616). --compile({inline,yeccpars2_355_/1}). --file("erl_parse.yrl", 125). -yeccpars2_355_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8623). +-compile({inline,yeccpars2_353_/1}). +-file("erl_parse.yrl", 126). +yeccpars2_353_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , normalise ( __1 ) , __3 } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8626). --compile({inline,yeccpars2_357_/1}). --file("erl_parse.yrl", 131). -yeccpars2_357_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8633). +-compile({inline,yeccpars2_355_/1}). +-file("erl_parse.yrl", 132). +yeccpars2_355_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , nil , [ ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8635). --compile({inline,yeccpars2_359_/1}). --file("erl_parse.yrl", 132). -yeccpars2_359_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8642). +-compile({inline,yeccpars2_357_/1}). +-file("erl_parse.yrl", 133). +yeccpars2_357_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , list , [ __2 ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8644). --compile({inline,yeccpars2_363_/1}). --file("erl_parse.yrl", 133). -yeccpars2_363_(__Stack0) -> - [__7,__6,__5,__4,__3,__2,__1 | __Stack] = __Stack0, +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8651). +-compile({inline,yeccpars2_359_/1}). +-file("erl_parse.yrl", 134). +yeccpars2_359_(__Stack0) -> + [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , nonempty_list , [ __2 ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8654). --compile({inline,yeccpars2_366_/1}). --file("erl_parse.yrl", 168). -yeccpars2_366_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8661). +-compile({inline,yeccpars2_362_/1}). +-file("erl_parse.yrl", 169). +yeccpars2_362_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , binary , @@ -8662,395 +8669,403 @@ yeccpars2_366_(__Stack0) -> abstract ( 0 , ? line ( __1 ) ) ] } end | __Stack]. --compile({inline,yeccpars2_369_/1}). --file("erl_parse.yrl", 178). -yeccpars2_369_(__Stack0) -> +-compile({inline,yeccpars2_365_/1}). +-file("erl_parse.yrl", 179). +yeccpars2_365_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin build_bin_type ( [ __1 ] , __3 ) end | __Stack]. --compile({inline,yeccpars2_372_/1}). --file("erl_parse.yrl", 180). -yeccpars2_372_(__Stack0) -> +-compile({inline,yeccpars2_368_/1}). +-file("erl_parse.yrl", 181). +yeccpars2_368_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin build_bin_type ( [ __1 , __3 ] , __5 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8681). --compile({inline,yeccpars2_374_/1}). --file("erl_parse.yrl", 171). -yeccpars2_374_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8688). +-compile({inline,yeccpars2_370_/1}). +-file("erl_parse.yrl", 172). +yeccpars2_370_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , binary , [ __2 , abstract ( 0 , ? line ( __1 ) ) ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8691). --compile({inline,yeccpars2_378_/1}). --file("erl_parse.yrl", 176). -yeccpars2_378_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8698). +-compile({inline,yeccpars2_374_/1}). +-file("erl_parse.yrl", 177). +yeccpars2_374_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , binary , [ __2 , __4 ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8700). --compile({inline,yeccpars2_379_/1}). --file("erl_parse.yrl", 173). -yeccpars2_379_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8707). +-compile({inline,yeccpars2_375_/1}). +-file("erl_parse.yrl", 174). +yeccpars2_375_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , binary , [ abstract ( 0 , ? line ( __1 ) ) , __2 ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8710). --compile({inline,yeccpars2_380_/1}). --file("erl_parse.yrl", 148). -yeccpars2_380_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8717). +-compile({inline,yeccpars2_376_/1}). +-file("erl_parse.yrl", 149). +yeccpars2_376_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin abstract ( - normalise ( __2 ) , ? line ( __2 ) ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8720). --compile({inline,yeccpars2_382_/1}). --file("erl_parse.yrl", 156). -yeccpars2_382_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8727). +-compile({inline,yeccpars2_378_/1}). +-file("erl_parse.yrl", 157). +yeccpars2_378_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , 'fun' , [ { type , ? line ( __1 ) , product , [ ] } , __4 ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8730). --compile({inline,yeccpars2_384_/1}). --file("erl_parse.yrl", 121). -yeccpars2_384_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8737). +-compile({inline,yeccpars2_380_/1}). +-file("erl_parse.yrl", 122). +yeccpars2_380_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { paren_type , ? line ( __2 ) , [ __2 ] } end | __Stack]. --compile({inline,yeccpars2_388_/1}). --file("erl_parse.yrl", 162). -yeccpars2_388_(__Stack0) -> +-compile({inline,yeccpars2_384_/1}). +-file("erl_parse.yrl", 163). +yeccpars2_384_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8747). --compile({inline,yeccpars2_390_/1}). --file("erl_parse.yrl", 137). -yeccpars2_390_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8754). +-compile({inline,yeccpars2_386_/1}). +-file("erl_parse.yrl", 138). +yeccpars2_386_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , record , [ __2 ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8756). --compile({inline,yeccpars2_392_/1}). --file("erl_parse.yrl", 165). -yeccpars2_392_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8763). +-compile({inline,yeccpars2_388_/1}). +-file("erl_parse.yrl", 166). +yeccpars2_388_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , field_type , [ __1 , __3 ] } end | __Stack]. --compile({inline,yeccpars2_394_/1}). --file("erl_parse.yrl", 163). -yeccpars2_394_(__Stack0) -> +-compile({inline,yeccpars2_390_/1}). +-file("erl_parse.yrl", 164). +yeccpars2_390_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8774). --compile({inline,yeccpars2_395_/1}). --file("erl_parse.yrl", 138). -yeccpars2_395_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8781). +-compile({inline,yeccpars2_391_/1}). +-file("erl_parse.yrl", 139). +yeccpars2_391_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , record , [ __2 | __4 ] } end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8784). --compile({inline,yeccpars2_398_/1}). --file("erl_parse.yrl", 142). -yeccpars2_398_(__Stack0) -> - [__4,__3,__2,__1 | __Stack] = __Stack0, +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8791). +-compile({inline,yeccpars2_393_/1}). +-file("erl_parse.yrl", 143). +yeccpars2_393_(__Stack0) -> + [__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , range , - [ __1 , __4 ] } + [ __1 , __3 ] } end | __Stack]. --compile({inline,yeccpars2_400_/1}). --file("erl_parse.yrl", 113). -yeccpars2_400_(__Stack0) -> +-compile({inline,yeccpars2_395_/1}). +-file("erl_parse.yrl", 114). +yeccpars2_395_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8802). --compile({inline,yeccpars2_403_/1}). --file("erl_parse.yrl", 159). -yeccpars2_403_(__Stack0) -> +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8809). +-compile({inline,yeccpars2_398_/1}). +-file("erl_parse.yrl", 160). +yeccpars2_398_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , 'fun' , [ { type , ? line ( __1 ) , product , __2 } , __5 ] } end | __Stack]. --compile({inline,yeccpars2_405_/1}). --file("erl_parse.yrl", 119). -yeccpars2_405_(__Stack0) -> +-compile({inline,yeccpars2_400_/1}). +-file("erl_parse.yrl", 120). +yeccpars2_400_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin lift_unions ( __1 , __3 ) end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8820). --compile({inline,yeccpars2_407_/1}). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8827). +-compile({inline,yeccpars2_402_/1}). -file("erl_parse.yrl", 103). -yeccpars2_407_(__Stack0) -> +yeccpars2_402_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , bounded_fun , [ __1 , __3 ] } end | __Stack]. --compile({inline,yeccpars2_408_/1}). +-compile({inline,yeccpars2_403_/1}). -file("erl_parse.yrl", 106). -yeccpars2_408_(__Stack0) -> +yeccpars2_403_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8838). --compile({inline,yeccpars2_412_/1}). +-compile({inline,yeccpars2_407_/1}). +-file("erl_parse.yrl", 111). +yeccpars2_407_(__Stack0) -> + [__3,__2,__1 | __Stack] = __Stack0, + [begin + build_def ( __1 , __3 ) + end | __Stack]. + +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8853). +-compile({inline,yeccpars2_410_/1}). -file("erl_parse.yrl", 109). -yeccpars2_412_(__Stack0) -> +yeccpars2_410_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin { type , ? line ( __1 ) , constraint , [ __1 , __3 ] } end | __Stack]. --compile({inline,yeccpars2_414_/1}). +-compile({inline,yeccpars2_412_/1}). -file("erl_parse.yrl", 107). -yeccpars2_414_(__Stack0) -> +yeccpars2_412_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --compile({inline,yeccpars2_416_/1}). +-compile({inline,yeccpars2_414_/1}). -file("erl_parse.yrl", 100). -yeccpars2_416_(__Stack0) -> +yeccpars2_414_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --compile({inline,yeccpars2_417_/1}). +-compile({inline,yeccpars2_415_/1}). -file("erl_parse.yrl", 78). -yeccpars2_417_(__Stack0) -> +yeccpars2_415_(__Stack0) -> [__4,__3,__2,__1 | __Stack] = __Stack0, [begin { __2 , __3 } end | __Stack]. --compile({inline,yeccpars2_418_/1}). +-compile({inline,yeccpars2_416_/1}). -file("erl_parse.yrl", 77). -yeccpars2_418_(__Stack0) -> +yeccpars2_416_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin { __1 , __2 } end | __Stack]. --compile({inline,yeccpars2_419_/1}). +-compile({inline,yeccpars2_417_/1}). -file("erl_parse.yrl", 73). -yeccpars2_419_(__Stack0) -> +yeccpars2_417_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin build_typed_attribute ( __2 , __3 ) end | __Stack]. --compile({inline,yeccpars2_420_/1}). --file("erl_parse.yrl", 182). -yeccpars2_420_(__Stack0) -> +-compile({inline,yeccpars2_418_/1}). +-file("erl_parse.yrl", 183). +yeccpars2_418_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --compile({inline,yeccpars2_421_/1}). +-compile({inline,yeccpars2_419_/1}). -file("erl_parse.yrl", 72). -yeccpars2_421_(__Stack0) -> +yeccpars2_419_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin build_attribute ( __2 , __3 ) end | __Stack]. --compile({inline,yeccpars2_427_/1}). +-compile({inline,yeccpars2_425_/1}). -file("erl_parse.yrl", 88). -yeccpars2_427_(__Stack0) -> +yeccpars2_425_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { type_def , __1 , __3 } end | __Stack]. --compile({inline,yeccpars2_428_/1}). +-compile({inline,yeccpars2_426_/1}). -file("erl_parse.yrl", 87). -yeccpars2_428_(__Stack0) -> +yeccpars2_426_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { typed_record , __1 , __3 } end | __Stack]. --compile({inline,yeccpars2_432_/1}). +-compile({inline,yeccpars2_430_/1}). -file("erl_parse.yrl", 92). -yeccpars2_432_(__Stack0) -> +yeccpars2_430_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --compile({inline,yeccpars2_433_/1}). --file("erl_parse.yrl", 427). -yeccpars2_433_(__Stack0) -> +-compile({inline,yeccpars2_431_/1}). +-file("erl_parse.yrl", 428). +yeccpars2_431_(__Stack0) -> [__1 | __Stack] = __Stack0, [begin [ __1 ] end | __Stack]. --compile({inline,yeccpars2_436_/1}). +-compile({inline,yeccpars2_434_/1}). -file("erl_parse.yrl", 97). -yeccpars2_436_(__Stack0) -> +yeccpars2_434_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { typed , __1 , __3 } end | __Stack]. --compile({inline,yeccpars2_437_/1}). +-compile({inline,yeccpars2_435_/1}). -file("erl_parse.yrl", 94). -yeccpars2_437_(__Stack0) -> +yeccpars2_435_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --compile({inline,yeccpars2_439_/1}). +-compile({inline,yeccpars2_437_/1}). -file("erl_parse.yrl", 93). -yeccpars2_439_(__Stack0) -> +yeccpars2_437_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --compile({inline,yeccpars2_440_/1}). +-compile({inline,yeccpars2_438_/1}). -file("erl_parse.yrl", 95). -yeccpars2_440_(__Stack0) -> +yeccpars2_438_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --file("/Users/bjorng/Downloads/otp/bootstrap/lib/stdlib/egen/erl_parse.erl", 8968). --compile({inline,yeccpars2_441_/1}). +-file("/clearcase/otp/erts/bootstrap/lib/stdlib/egen/erl_parse.erl", 8983). +-compile({inline,yeccpars2_439_/1}). -file("erl_parse.yrl", 90). -yeccpars2_441_(__Stack0) -> +yeccpars2_439_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin { tuple , ? line ( __1 ) , __2 } end | __Stack]. --compile({inline,yeccpars2_442_/1}). --file("erl_parse.yrl", 184). -yeccpars2_442_(__Stack0) -> +-compile({inline,yeccpars2_440_/1}). +-file("erl_parse.yrl", 185). +yeccpars2_440_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin [ __2 | __4 ] end | __Stack]. --compile({inline,yeccpars2_443_/1}). +-compile({inline,yeccpars2_441_/1}). -file("erl_parse.yrl", 74). -yeccpars2_443_(__Stack0) -> +yeccpars2_441_(__Stack0) -> [__5,__4,__3,__2,__1 | __Stack] = __Stack0, [begin build_typed_attribute ( __2 , __4 ) end | __Stack]. --compile({inline,yeccpars2_445_/1}). --file("erl_parse.yrl", 183). -yeccpars2_445_(__Stack0) -> +-compile({inline,yeccpars2_443_/1}). +-file("erl_parse.yrl", 184). +yeccpars2_443_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --compile({inline,yeccpars2_446_/1}). +-compile({inline,yeccpars2_444_/1}). -file("erl_parse.yrl", 68). -yeccpars2_446_(__Stack0) -> +yeccpars2_444_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin __1 end | __Stack]. --compile({inline,yeccpars2_447_/1}). +-compile({inline,yeccpars2_445_/1}). -file("erl_parse.yrl", 69). -yeccpars2_447_(__Stack0) -> +yeccpars2_445_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin __1 end | __Stack]. --compile({inline,yeccpars2_449_/1}). --file("erl_parse.yrl", 189). -yeccpars2_449_(__Stack0) -> +-compile({inline,yeccpars2_447_/1}). +-file("erl_parse.yrl", 190). +yeccpars2_447_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --compile({inline,yeccpars2_451_/1}). --file("erl_parse.yrl", 198). -yeccpars2_451_(__Stack0) -> +-compile({inline,yeccpars2_449_/1}). +-file("erl_parse.yrl", 199). +yeccpars2_449_(__Stack0) -> [begin [ ] end | __Stack0]. --compile({inline,yeccpars2_453_/1}). +-compile({inline,yeccpars2_451_/1}). -file("erl_parse.yrl", 70). -yeccpars2_453_(__Stack0) -> +yeccpars2_451_(__Stack0) -> [__2,__1 | __Stack] = __Stack0, [begin __1 end | __Stack]. --compile({inline,yeccpars2_455_/1}). --file("erl_parse.yrl", 479). -yeccpars2_455_(__Stack0) -> +-compile({inline,yeccpars2_453_/1}). +-file("erl_parse.yrl", 480). +yeccpars2_453_(__Stack0) -> [__3,__2,__1 | __Stack] = __Stack0, [begin [ __1 | __3 ] end | __Stack]. --compile({inline,yeccpars2_457_/1}). --file("erl_parse.yrl", 198). -yeccpars2_457_(__Stack0) -> +-compile({inline,yeccpars2_455_/1}). +-file("erl_parse.yrl", 199). +yeccpars2_455_(__Stack0) -> [begin [ ] end | __Stack0]. --file("erl_parse.yrl", 1037). +-file("erl_parse.yrl", 1042). diff --git a/erts/aclocal.m4 b/erts/aclocal.m4 index 3d935b7295..61244c7cd3 100644 --- a/erts/aclocal.m4 +++ b/erts/aclocal.m4 @@ -512,6 +512,8 @@ dnl AC_DEFUN(LM_CHECK_THR_LIB, [ +NEED_NPTL_PTHREAD_H=no + dnl win32? AC_MSG_CHECKING([for native win32 threads]) if test "X$host_os" = "Xwin32"; then @@ -585,7 +587,9 @@ dnl On ofs1 the '-pthread' switch should be used fi if test $nptl = yes; then need_nptl_incldir=no - AC_CHECK_HEADER(nptl/pthread.h, need_nptl_incldir=yes) + AC_CHECK_HEADER(nptl/pthread.h, + [need_nptl_incldir=yes + NEED_NPTL_PTHREAD_H=yes]) if test $need_nptl_incldir = yes; then # Ahh... nptl_path="$C_INCLUDE_PATH:$CPATH" @@ -799,6 +803,11 @@ case "$THR_LIB_NAME" in AC_DEFINE(ETHR_HAVE_MIT_PTHREAD_H, 1, \ [Define if the pthread.h header file is in pthread/mit directory.])) + if test $NEED_NPTL_PTHREAD_H = yes; then + AC_DEFINE(ETHR_NEED_NPTL_PTHREAD_H, 1, \ +[Define if you need the <nptl/pthread.h> header file.]) + fi + AC_CHECK_HEADER(sys/time.h, \ AC_DEFINE(ETHR_HAVE_SYS_TIME_H, 1, \ [Define if you have the <sys/time.h> header file.])) @@ -826,23 +835,70 @@ case "$THR_LIB_NAME" in AC_CHECK_FUNC(pthread_spin_lock, \ AC_DEFINE(ETHR_HAVE_PTHREAD_SPIN_LOCK, 1, \ [Define if you have the pthread_spin_lock function.])) - test "$force_linux_pthread_rwlocks" = "yes" || { - force_linux_pthread_rwlocks=no - } - case "$force_linux_pthread_rwlocks-$host_os" in - no-linux*) # Writers may get starved - # TODO: write a test that tests the implementation - ;; - *) - AC_CHECK_FUNC(pthread_rwlock_init, \ - AC_DEFINE(ETHR_HAVE_PTHREAD_RWLOCK_INIT, 1, \ -[Define if you have a pthread_rwlock implementation that can be used.])) - ;; - esac + + have_pthread_rwlock_init=no + AC_CHECK_FUNC(pthread_rwlock_init, [have_pthread_rwlock_init=yes]) + if test $have_pthread_rwlock_init = yes; then + + AC_DEFINE(ETHR_HAVE_PTHREAD_RWLOCK_INIT, 1, \ +[Define if you have a pthread_rwlock implementation that can be used.]) + + ethr_have_pthread_rwlockattr_setkind_np=no + AC_CHECK_FUNC(pthread_rwlockattr_setkind_np, + [ethr_have_pthread_rwlockattr_setkind_np=yes]) + + if test $ethr_have_pthread_rwlockattr_setkind_np = yes; then + AC_DEFINE(ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP, 1, \ +[Define if you have the pthread_rwlockattr_setkind_np() function.]) + + AC_MSG_CHECKING([for PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP]) + ethr_pthread_rwlock_writer_nonrecursive_initializer_np=no + AC_TRY_LINK([ + #if defined(ETHR_NEED_NPTL_PTHREAD_H) + #include <nptl/pthread.h> + #elif defined(ETHR_HAVE_MIT_PTHREAD_H) + #include <pthread/mit/pthread.h> + #elif defined(ETHR_HAVE_PTHREAD_H) + #include <pthread.h> + #endif + ], + [ + pthread_rwlockattr_t *attr; + return pthread_rwlockattr_setkind_np(attr, + PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); + ], + [ethr_pthread_rwlock_writer_nonrecursive_initializer_np=yes]) + AC_MSG_RESULT([$ethr_pthread_rwlock_writer_nonrecursive_initializer_np]) + if test $ethr_pthread_rwlock_writer_nonrecursive_initializer_np = yes; then + AC_DEFINE(ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, 1, \ +[Define if you have the PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP rwlock attribute.]) + fi + fi + fi + + + AC_CHECK_FUNC(pthread_attr_setguardsize, \ AC_DEFINE(ETHR_HAVE_PTHREAD_ATTR_SETGUARDSIZE, 1, \ [Define if you have the pthread_attr_setguardsize function.])) + AC_MSG_CHECKING([for GCC atomic operations]) + ethr_have_gcc_atomic_ops=no + AC_TRY_LINK([], + [ + long res; + volatile long val; + res = __sync_val_compare_and_swap(&val, (long) 1, (long) 0); + res = __sync_add_and_fetch(&val, (long) 1); + res = __sync_sub_and_fetch(&val, (long) 1); + res = __sync_fetch_and_and(&val, (long) 1); + res = __sync_fetch_and_or(&val, (long) 1); + ], + [ethr_have_native_atomics=yes + ethr_have_gcc_atomic_ops=yes]) + AC_MSG_RESULT([$ethr_have_gcc_atomic_ops]) + test $ethr_have_gcc_atomic_ops = yes && AC_DEFINE(ETHR_HAVE_GCC_ATOMIC_OPS, 1, [Define if you have gcc atomic operations]) + dnl Restore LIBS LIBS=$saved_libs dnl restore CPPFLAGS @@ -873,6 +929,17 @@ if test "X$disable_native_ethr_impls" = "Xyes"; then AC_DEFINE(ETHR_DISABLE_NATIVE_IMPLS, 1, [Define if you want to disable native ethread implementations]) fi +AC_ARG_ENABLE(prefer-gcc-native-ethr-impls, + AS_HELP_STRING([--enable-prefer-gcc-native-ethr-impls], + [enable prefer gcc native ethread implementations]), +[ case "$enableval" in + yes) enable_prefer_gcc_native_ethr_impls=yes ;; + *) enable_prefer_gcc_native_ethr_impls=no ;; + esac ], enable_prefer_gcc_native_ethr_impls=no) + +test $enable_prefer_gcc_native_ethr_impls = yes && + AC_DEFINE(ETHR_PREFER_GCC_NATIVE_IMPLS, 1, [Define if you prefer gcc native ethread implementations]) + AC_DEFINE(ETHR_HAVE_ETHREAD_DEFINES, 1, \ [Define if you have all ethread defines]) diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml index e683f161f1..c3c0dd77d7 100644 --- a/erts/doc/src/erlang.xml +++ b/erts/doc/src/erlang.xml @@ -407,7 +407,7 @@ iolist() = [char() | binary() | iolist()] </desc> </func> <func> - <name>erlang:binary_to_term(Binary, Opts) -> term()</name> + <name>binary_to_term(Binary, Opts) -> term()</name> <fsummary>Decode an Erlang external term format binary</fsummary> <type> <v>Opts = [safe]</v> diff --git a/erts/doc/src/match_spec.xml b/erts/doc/src/match_spec.xml index d6492198ca..f0390c9db8 100644 --- a/erts/doc/src/match_spec.xml +++ b/erts/doc/src/match_spec.xml @@ -60,7 +60,7 @@ <section> <title>Grammar</title> - <p>A match_spec can be described in this <em>informal</em> grammar:</p> + <p>A match_spec used in tracing can be described in this <em>informal</em> grammar:</p> <list type="bulleted"> <item>MatchExpression ::= [ MatchFunction, ... ] </item> @@ -117,6 +117,52 @@ <c><![CDATA[display]]></c> | <c><![CDATA[caller]]></c> | <c><![CDATA[set_tcw]]></c> | <c><![CDATA[silent]]></c></item> </list> + + <p>A match_spec used in ets can be described in this <em>informal</em> grammar:</p> + <list type="bulleted"> + <item>MatchExpression ::= [ MatchFunction, ... ] + </item> + <item>MatchFunction ::= { MatchHead, MatchConditions, MatchBody } + </item> + <item>MatchHead ::= MatchVariable | <c><![CDATA['_']]></c> | { MatchHeadPart, ... } + </item> + <item>MatchHeadPart ::= term() | MatchVariable | <c><![CDATA['_']]></c></item> + <item>MatchVariable ::= '$<number>' + </item> + <item>MatchConditions ::= [ MatchCondition, ...] | <c><![CDATA[[]]]></c></item> + <item>MatchCondition ::= { GuardFunction } | + { GuardFunction, ConditionExpression, ... } + </item> + <item>BoolFunction ::= <c><![CDATA[is_atom]]></c> | <c><![CDATA[is_constant]]></c> | + <c><![CDATA[is_float]]></c> | <c><![CDATA[is_integer]]></c> | <c><![CDATA[is_list]]></c> | + <c><![CDATA[is_number]]></c> | <c><![CDATA[is_pid]]></c> | <c><![CDATA[is_port]]></c> | + <c><![CDATA[is_reference]]></c> | <c><![CDATA[is_tuple]]></c> | <c><![CDATA[is_binary]]></c> | + <c><![CDATA[is_function]]></c> | <c><![CDATA[is_record]]></c> | <c><![CDATA[is_seq_trace]]></c> | + <c><![CDATA['and']]></c> | <c><![CDATA['or']]></c> | <c><![CDATA['not']]></c> | <c><![CDATA['xor']]></c> | + <c><![CDATA[andalso]]></c> | <c><![CDATA[orelse]]></c></item> + <item>ConditionExpression ::= ExprMatchVariable | { GuardFunction } | + { GuardFunction, ConditionExpression, ... } | TermConstruct + </item> + <item>ExprMatchVariable ::= MatchVariable (bound in the MatchHead) | + <c><![CDATA['$_']]></c> | <c><![CDATA['$$']]></c></item> + <item>TermConstruct = {{}} | {{ ConditionExpression, ... }} | + <c><![CDATA[[]]]></c> | [ConditionExpression, ...] | NonCompositeTerm | Constant + </item> + <item>NonCompositeTerm ::= term() (not list or tuple) + </item> + <item>Constant ::= {<c><![CDATA[const]]></c>, term()} + </item> + <item>GuardFunction ::= BoolFunction | <c><![CDATA[abs]]></c> | + <c><![CDATA[element]]></c> | <c><![CDATA[hd]]></c> | <c><![CDATA[length]]></c> | <c><![CDATA[node]]></c> | + <c><![CDATA[round]]></c> | <c><![CDATA[size]]></c> | <c><![CDATA[tl]]></c> | <c><![CDATA[trunc]]></c> | + <c><![CDATA['+']]></c> | <c><![CDATA['-']]></c> | <c><![CDATA['*']]></c> | <c><![CDATA['div']]></c> | + <c><![CDATA['rem']]></c> | <c><![CDATA['band']]></c> | <c><![CDATA['bor']]></c> | <c><![CDATA['bxor']]></c> | + <c><![CDATA['bnot']]></c> | <c><![CDATA['bsl']]></c> | <c><![CDATA['bsr']]></c> | <c><![CDATA['>']]></c> | + <c><![CDATA['>=']]></c> | <c><![CDATA['<']]></c> | <c><![CDATA['=<']]></c> | <c><![CDATA['=:=']]></c> | + <c><![CDATA['==']]></c> | <c><![CDATA['=/=']]></c> | <c><![CDATA['/=']]></c> | <c><![CDATA[self]]></c> | + <c><![CDATA[get_tcw]]></c></item> + <item>MatchBody ::= [ ConditionExpression, ... ]</item> + </list> </section> <section> @@ -453,8 +499,8 @@ <section> <title>Differences between match specifications in ETS and tracing</title> <p>ETS match specifications are there to produce a return - value. Usually the expression contains one single - <c><![CDATA[ActionTerm]]></c> which defines the return value without having + value. Usually the <c><![CDATA[MatchBody]]></c> contains one single + <c><![CDATA[ConditionExpression]]></c> which defines the return value without having any side effects. Calls with side effects are not allowed in the ETS context.</p> <p>When tracing there is no return value to produce, the diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in index d767194d4d..eca6121a1e 100644 --- a/erts/emulator/Makefile.in +++ b/erts/emulator/Makefile.in @@ -341,7 +341,6 @@ ERLANG_OSTYPE = @ERLANG_OSTYPE@ ENABLE_ALLOC_TYPE_VARS += @ERLANG_OSTYPE@ -EMULATOR_EXECUTABLE_SAE = beam_evm$(TF_MARKER) EMULATOR_EXECUTABLE_ELIB = beam.elib$(TF_MARKER) ifeq ($(TARGET), win32) EMULATOR_EXECUTABLE = beam$(TF_MARKER).dll @@ -406,7 +405,7 @@ endif @set -e ; cd zlib && $(MAKE) clean @set -e ; cd pcre && $(MAKE) clean -.PHONY: all sae zlib pcre clean +.PHONY: all zlib pcre clean docs: @@ -640,10 +639,6 @@ $(BINDIR)/$(CS_EXECUTABLE): $(CS_SRC) $(OBJDIR)/%.elib.o: beam/%.c $(CC) $(ELIB_FLAGS) $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@ -# Disable vfork() for sae (then we don't need the child_setup program) -$(OBJDIR)/sys_sae.o: sys/$(ERLANG_OSTYPE)/sys.c - $(CC) -DDISABLE_VFORK=1 $(CFLAGS) $(INCLUDES) -c $< -o $@ - $(OBJDIR)/%.kp.o: sys/common/%.c $(CC) -DERTS_KERNEL_POLL_VERSION $(subst -O2, $(GEN_OPT_FLGS), $(CFLAGS)) $(INCLUDES) -c $< -o $@ @@ -689,8 +684,6 @@ endif INIT_OBJS = $(OBJDIR)/erl_main.o $(PRELOAD) -INIT_OBJS_SAE = $(OBJDIR)/erl9_start.o - EMU_OBJS = \ $(OBJDIR)/beam_emu.o $(OBJDIR)/beam_opcodes.o \ $(OBJDIR)/beam_load.o $(OBJDIR)/beam_bif_load.o \ @@ -826,7 +819,6 @@ endif BASE_OBJS = $(RUN_OBJS) $(EMU_OBJS) $(OS_OBJS) $(EXTRA_BASE_OBJS) OBJS = $(BASE_OBJS) $(DRV_OBJS) -OBJS_SAE = $(subst sys.o,sys_sae.o,$(OBJS)) ELIB_C_FILES = beam/elib_malloc.c \ beam/elib_memmove.c \ @@ -933,10 +925,6 @@ $(BINDIR)/$(EMULATOR_EXECUTABLE_ELIB): $(INIT_OBJS) $(OBJS_ELIB) $(DEPLIBS) $(PURIFY) $(LD) -o $(BINDIR)/$(EMULATOR_EXECUTABLE_ELIB) \ $(LDFLAGS) $(DEXPORT) $(INIT_OBJS) $(OBJS_ELIB) $(LIBS) -$(BINDIR)/$(EMULATOR_EXECUTABLE_SAE): $(INIT_OBJS_SAE) $(OBJS_SAE) $(DEPLIBS) - $(PURIFY) $(LD) -o $(BINDIR)/$(EMULATOR_EXECUTABLE_SAE) \ - $(LDFLAGS) $(DEXPORT) $(INIT_OBJS_SAE) $(OBJS_SAE) $(LIBS) - endif # diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c index 85bf584337..10cc2e9003 100644 --- a/erts/emulator/beam/bif.c +++ b/erts/emulator/beam/bif.c @@ -4143,54 +4143,6 @@ void erts_init_bif(void) await_proc_exit_trap = erts_export_put(am_erlang,am_await_proc_exit,3); } -BIF_RETTYPE blocking_read_file_1(BIF_ALIST_1) -{ - Eterm bin; - Eterm* hp; - byte *buff; - int i, buff_size; - FILE *file; - struct stat file_info; - char *filename = NULL; - size_t size; - - i = list_length(BIF_ARG_1); - if (i < 0) { - BIF_ERROR(BIF_P, BADARG); - } - filename = erts_alloc(ERTS_ALC_T_TMP, i + 1); - if (intlist_to_buf(BIF_ARG_1, filename, i) != i) - erl_exit(1, "%s:%d: Internal error\n", __FILE__, __LINE__); - filename[i] = '\0'; - - hp = HAlloc(BIF_P, 3); - - file = fopen(filename, "r"); - if(file == NULL){ - erts_free(ERTS_ALC_T_TMP, (void *) filename); - BIF_RET(TUPLE2(hp, am_error, am_nofile)); - } - - stat(filename, &file_info); - erts_free(ERTS_ALC_T_TMP, (void *) filename); - - buff_size = file_info.st_size; - buff = (byte *) erts_alloc_fnf(ERTS_ALC_T_TMP, buff_size); - if (!buff) { - fclose(file); - BIF_RET(TUPLE2(hp, am_error, am_allocator)); - } - size = fread(buff, 1, buff_size, file); - fclose(file); - if (size < 0) - size = 0; - else if (size > buff_size) - size = (size_t) buff_size; - bin = new_binary(BIF_P, buff, (int) size); - erts_free(ERTS_ALC_T_TMP, (void *) buff); - - BIF_RET(TUPLE2(hp, am_ok, bin)); -} #ifdef HARDDEBUG /* You'll need this line in bif.tab to be able to use this debug bif diff --git a/erts/emulator/beam/bif.tab b/erts/emulator/beam/bif.tab index 9feb302a3d..38e2dd77d3 100644 --- a/erts/emulator/beam/bif.tab +++ b/erts/emulator/beam/bif.tab @@ -686,8 +686,6 @@ bif 'erl.system.code':make_stub_module/3 ebif_code_make_stub_module_3 bif code:is_module_native/1 bif 'erl.system.code':is_native/1 ebif_code_is_native_1 code_is_module_native_1 -bif erlang:blocking_read_file/1 - # # New Bifs in R9C. # diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c index f2e71ae98d..2ee802cf3e 100644 --- a/erts/emulator/beam/erl_init.c +++ b/erts/emulator/beam/erl_init.c @@ -336,59 +336,6 @@ init_shared_memory(int argc, char **argv) #endif } - -/* - * Create the very first process. - */ - -void -erts_first_process(Eterm modname, void* code, unsigned size, int argc, char** argv) -{ - int i; - Eterm args; - Eterm pid; - Eterm* hp; - Process parent; - Process* p; - ErlSpawnOpts so; - - if (erts_find_function(modname, am_start, 1) == NULL) { - char sbuf[256]; - Atom* ap; - - ap = atom_tab(atom_val(modname)); - memcpy(sbuf, ap->name, ap->len); - sbuf[ap->len] = '\0'; - erl_exit(5, "No function %s:start/1\n", sbuf); - } - - /* - * We need a dummy parent process to be able to call erl_create_process(). - */ - erts_init_empty_process(&parent); - hp = HAlloc(&parent, argc*2 + 4); - args = NIL; - for (i = argc-1; i >= 0; i--) { - int len = sys_strlen(argv[i]); - args = CONS(hp, new_binary(&parent, (byte*)argv[i], len), args); - hp += 2; - } - args = CONS(hp, new_binary(&parent, code, size), args); - hp += 2; - args = CONS(hp, args, NIL); - - so.flags = 0; - pid = erl_create_process(&parent, modname, am_start, args, &so); - p = process_tab[internal_pid_index(pid)]; - p->group_leader = pid; - - erts_cleanup_empty_process(&parent); -} - -/* - * XXX Old way of starting. Hopefully soon obsolete. - */ - static void erl_first_process_otp(char* modname, void* code, unsigned size, int argc, char** argv) { diff --git a/erts/emulator/beam/erl_port_task.c b/erts/emulator/beam/erl_port_task.c index 0b6bb0d8e9..967a14f0d1 100644 --- a/erts/emulator/beam/erl_port_task.c +++ b/erts/emulator/beam/erl_port_task.c @@ -969,11 +969,11 @@ erts_port_task_execute(ErtsRunQueue *runq, Port **curr_port_pp) erts_port_release(pp); #else { - long refc = erts_smp_atomic_dectest(&pp->refc); + long refc; + erts_smp_mtx_unlock(pp->lock); + refc = erts_smp_atomic_dectest(&pp->refc); ASSERT(refc >= 0); - if (refc > 0) - erts_smp_mtx_unlock(pp->lock); - else { + if (refc == 0) { erts_smp_runq_unlock(runq); erts_port_cleanup(pp); /* Might aquire runq lock */ erts_smp_runq_lock(runq); diff --git a/erts/emulator/beam/erl_threads.h b/erts/emulator/beam/erl_threads.h index d635916dd8..21f85bd045 100644 --- a/erts/emulator/beam/erl_threads.h +++ b/erts/emulator/beam/erl_threads.h @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 2001-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 2001-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% */ @@ -34,6 +34,8 @@ #include "erl_lock_count.h" #include "erl_term.h" +#define ERTS_THR_MEMORY_BARRIER ETHR_MEMORY_BARRIER + #ifdef ERTS_ENABLE_LOCK_COUNT #define erts_mtx_lock(L) erts_mtx_lock_x(L, __FILE__, __LINE__) #define erts_spin_lock(L) erts_spin_lock_x(L, __FILE__, __LINE__) @@ -122,6 +124,8 @@ __decl_noreturn void __noreturn erts_thr_fatal_error(int, char *); #else /* #ifdef USE_THREADS */ +#define ERTS_THR_MEMORY_BARRIER + #define ERTS_THR_OPTS_DEFAULT_INITER 0 typedef int erts_thr_opts_t; typedef int erts_thr_init_data_t; diff --git a/erts/emulator/beam/erl_trace.c b/erts/emulator/beam/erl_trace.c index 8addfcf5ad..381a182e39 100644 --- a/erts/emulator/beam/erl_trace.c +++ b/erts/emulator/beam/erl_trace.c @@ -1941,11 +1941,13 @@ trace_proc(Process *c_p, Process *t_p, Eterm what, Eterm data) Eterm* hp; int need; + ERTS_SMP_LC_ASSERT((erts_proc_lc_my_proc_locks(t_p) != 0) || erts_is_system_blocked(0)); if (is_internal_port(t_p->tracer_proc)) { #define LOCAL_HEAP_SIZE (5+5) DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE); UseTmpHeapNoproc(LOCAL_HEAP_SIZE); + hp = local_heap; mess = TUPLE4(hp, am_trace, t_p->id, what, data); hp += 5; @@ -2727,6 +2729,8 @@ trace_port(Port *t_p, Eterm what, Eterm data) { Eterm mess; Eterm* hp; + ERTS_SMP_LC_ASSERT(erts_lc_is_port_locked(t_p) || erts_is_system_blocked(0)); + if (is_internal_port(t_p->tracer_proc)) { #define LOCAL_HEAP_SIZE (5+5) DeclareTmpHeapNoproc(local_heap,LOCAL_HEAP_SIZE); diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h index a7990e1799..d5d63631ff 100644 --- a/erts/emulator/beam/global.h +++ b/erts/emulator/beam/global.h @@ -1192,12 +1192,11 @@ erts_smp_port_unlock(Port *prt) { #ifdef ERTS_SMP long refc; + erts_smp_mtx_unlock(prt->lock); refc = erts_smp_atomic_dectest(&prt->refc); ASSERT(refc >= 0); if (refc == 0) erts_port_cleanup(prt); - else - erts_smp_mtx_unlock(prt->lock); #endif } @@ -1720,7 +1719,6 @@ int erts_print_system_version(int to, void *arg, Process *c_p); * Interface to erl_init */ void erl_init(void); -void erts_first_process(Eterm modname, void* code, unsigned size, int argc, char** argv); #define seq_trace_output(token, msg, type, receiver, process) \ seq_trace_output_generic((token), (msg), (type), (receiver), (process), NIL) diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c index 10f1082039..68625801cf 100644 --- a/erts/emulator/beam/io.c +++ b/erts/emulator/beam/io.c @@ -280,10 +280,36 @@ erts_test_next_port(int set, Uint next) return res; } + +static void port_cleanup(Port *prt); + +#ifdef ERTS_SMP + +static void +sched_port_cleanup(void *vprt) +{ + Port *prt = (Port *) vprt; + erts_smp_mtx_lock(prt->lock); + port_cleanup(prt); +} + +#endif + void erts_port_cleanup(Port *prt) { #ifdef ERTS_SMP + if (erts_smp_mtx_trylock(prt->lock) == EBUSY) + erts_schedule_misc_op(sched_port_cleanup, (void *) prt); + else +#endif + port_cleanup(prt); +} + +void +port_cleanup(Port *prt) +{ +#ifdef ERTS_SMP Uint32 port_specific; erts_smp_mtx_t *mtx; #endif diff --git a/erts/emulator/beam/register.c b/erts/emulator/beam/register.c index 964c10a380..900ebcbbf7 100644 --- a/erts/emulator/beam/register.c +++ b/erts/emulator/beam/register.c @@ -476,8 +476,9 @@ int erts_unregister_name(Process *c_p, * on c_prt. */ - if (!c_p) + if (!c_p) { c_p_locks = 0; + } current_c_p_locks = c_p_locks; restart: @@ -489,9 +490,15 @@ int erts_unregister_name(Process *c_p, if (is_non_value(name)) { /* Unregister current process name */ ASSERT(c_p); - if (c_p->reg) +#ifdef ERTS_SMP + if (current_c_p_locks != c_p_locks) { + erts_smp_proc_lock(c_p, c_p_locks); + current_c_p_locks = c_p_locks; + } +#endif + if (c_p->reg) { r.name = c_p->reg->name; - else { + } else { /* Name got unregistered while main lock was released */ res = 0; goto done; @@ -533,24 +540,25 @@ int erts_unregister_name(Process *c_p, } } else if (rp->p) { - Process* p = rp->p; + #ifdef ERTS_SMP erts_proc_safelock(c_p, current_c_p_locks, c_p_locks, rp->p, - 0, + (c_p == rp->p) ? current_c_p_locks : 0, ERTS_PROC_LOCK_MAIN); current_c_p_locks = c_p_locks; #endif - p->reg = NULL; + rp->p->reg = NULL; + if (IS_TRACED_FL(rp->p, F_TRACE_PROCS)) { + trace_proc(c_p, rp->p, am_unregister, r.name); + } #ifdef ERTS_SMP - if (rp->p != c_p) + if (rp->p != c_p) { erts_smp_proc_unlock(rp->p, ERTS_PROC_LOCK_MAIN); -#endif - if (IS_TRACED_FL(p, F_TRACE_PROCS)) { - trace_proc(c_p, p, am_unregister, r.name); } +#endif } hash_erase(&process_reg, (void*) &r); res = 1; @@ -560,14 +568,17 @@ int erts_unregister_name(Process *c_p, reg_write_unlock(); if (c_prt != port) { - if (port) + if (port) { erts_smp_port_unlock(port); - if (c_prt) + } + if (c_prt) { erts_smp_port_lock(c_prt); + } } #ifdef ERTS_SMP - if (c_p && !current_c_p_locks) + if (c_p && !current_c_p_locks) { erts_smp_proc_lock(c_p, c_p_locks); + } #endif return res; } diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h index 0f20d36167..ca87d3d70f 100644 --- a/erts/emulator/beam/sys.h +++ b/erts/emulator/beam/sys.h @@ -648,7 +648,7 @@ extern char *erts_sys_ddll_error(int code); /* - * System interfaces for startup/sae code (functions found in respective sys.c) + * System interfaces for startup. */ diff --git a/erts/emulator/drivers/win32/win_efile.c b/erts/emulator/drivers/win32/win_efile.c index d5f2b79706..24b6fb30dc 100644 --- a/erts/emulator/drivers/win32/win_efile.c +++ b/erts/emulator/drivers/win32/win_efile.c @@ -689,7 +689,8 @@ Sint64* pSize; /* Where to store the size of the file. */ if (flags & EFILE_MODE_APPEND) { crFlags = OPEN_ALWAYS; } - fd = CreateFile(name, access, FILE_SHARE_READ | FILE_SHARE_WRITE, + fd = CreateFile(name, access, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, crFlags, FILE_ATTRIBUTE_NORMAL, NULL); /* diff --git a/erts/emulator/sys/common/erl_poll.c b/erts/emulator/sys/common/erl_poll.c index d268547e1a..09fb6337f7 100644 --- a/erts/emulator/sys/common/erl_poll.c +++ b/erts/emulator/sys/common/erl_poll.c @@ -130,13 +130,18 @@ #define ERTS_POLLSET_IS_POLLED(PS) \ ((int) erts_smp_atomic_read(&(PS)->polled)) -#define ERTS_POLLSET_SET_POLLER_WOKEN_CHK(PS) \ - ((int) erts_smp_atomic_xchg(&(PS)->woken, (long) 1)) -#define ERTS_POLLSET_SET_POLLER_WOKEN(PS) \ - erts_smp_atomic_set(&(PS)->woken, (long) 1) -#define ERTS_POLLSET_UNSET_POLLER_WOKEN(PS) \ - erts_smp_atomic_set(&(PS)->woken, (long) 0) -#define ERTS_POLLSET_IS_POLLER_WOKEN(PS) \ +#define ERTS_POLLSET_SET_POLLER_WOKEN_CHK(PS) set_poller_woken_chk((PS)) +#define ERTS_POLLSET_SET_POLLER_WOKEN(PS) \ +do { \ + ERTS_THR_MEMORY_BARRIER; \ + erts_smp_atomic_set(&(PS)->woken, (long) 1); \ +} while (0) +#define ERTS_POLLSET_UNSET_POLLER_WOKEN(PS) \ +do { \ + erts_smp_atomic_set(&(PS)->woken, (long) 0); \ + ERTS_THR_MEMORY_BARRIER; \ +} while (0) +#define ERTS_POLLSET_IS_POLLER_WOKEN(PS) \ ((int) erts_smp_atomic_read(&(PS)->woken)) #else @@ -194,13 +199,18 @@ #else -#define ERTS_POLLSET_UNSET_INTERRUPTED_CHK(PS) \ - ((int) erts_smp_atomic_xchg(&(PS)->interrupt, (long) 0)) -#define ERTS_POLLSET_UNSET_INTERRUPTED(PS) \ - erts_smp_atomic_set(&(PS)->interrupt, (long) 0) -#define ERTS_POLLSET_SET_INTERRUPTED(PS) \ - erts_smp_atomic_set(&(PS)->interrupt, (long) 1) -#define ERTS_POLLSET_IS_INTERRUPTED(PS) \ +#define ERTS_POLLSET_UNSET_INTERRUPTED_CHK(PS) unset_interrupted_chk((PS)) +#define ERTS_POLLSET_UNSET_INTERRUPTED(PS) \ +do { \ + erts_smp_atomic_set(&(PS)->interrupt, (long) 0); \ + ERTS_THR_MEMORY_BARRIER; \ +} while (0) +#define ERTS_POLLSET_SET_INTERRUPTED(PS) \ +do { \ + ERTS_THR_MEMORY_BARRIER; \ + erts_smp_atomic_set(&(PS)->interrupt, (long) 1); \ +} while (0) +#define ERTS_POLLSET_IS_INTERRUPTED(PS) \ ((int) erts_smp_atomic_read(&(PS)->interrupt)) #endif @@ -336,16 +346,30 @@ struct ErtsPollSet_ { #endif }; -#if ERTS_POLL_ASYNC_INTERRUPT_SUPPORT && !defined(ERTS_SMP) - static ERTS_INLINE int unset_interrupted_chk(ErtsPollSet ps) { + int res; +#if ERTS_POLL_ASYNC_INTERRUPT_SUPPORT && !defined(ERTS_SMP) /* This operation isn't atomic, but we have no need at all for an atomic operation here... */ - int res = ps->interrupt; + res = ps->interrupt; ps->interrupt = 0; +#else + res = (int) erts_smp_atomic_xchg(&ps->interrupt, (long) 0); + ERTS_THR_MEMORY_BARRIER; +#endif return res; + +} + +#ifdef ERTS_SMP + +static ERTS_INLINE int +set_poller_woken_chk(ErtsPollSet ps) +{ + ERTS_THR_MEMORY_BARRIER; + return (int) erts_smp_atomic_xchg(&ps->woken, (long) 1); } #endif diff --git a/erts/emulator/sys/unix/erl9_start.c b/erts/emulator/sys/unix/erl9_start.c deleted file mode 100644 index 578062d7e2..0000000000 --- a/erts/emulator/sys/unix/erl9_start.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * %CopyrightBegin% - * - * Copyright Ericsson AB 2002-2009. All Rights Reserved. - * - * The contents of this file are subject to the Erlang Public License, - * Version 1.1, (the "License"); you may not use this file except in - * compliance with the License. You should have received a copy of the - * Erlang Public License along with this software. If not, it can be - * retrieved online at http://www.erlang.org/. - * - * Software distributed under the License is distributed on an "AS IS" - * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - * the License for the specific language governing rights and limitations - * under the License. - * - * %CopyrightEnd% - */ -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif -#include "sys.h" -#include "erl_vm.h" -#include "global.h" -#include <stdio.h> -#include <string.h> -#include <stdlib.h> - -/* - * XXX This is a temporary dummy to make sys.c happy until we'll rewrite it. - */ -unsigned preloaded_size_ring0 = 1; -unsigned char preloaded_ring0[1] = {0}; - -Preload pre_loaded[] = { - {"ring0", 1, preloaded_ring0}, - {0, 0, 0} -}; - -int -main(int argc, char** argv) -{ - char sbuf[1024]; - struct { - void* p; - int sz; - } bins[2]; - int bin_num = 0; - FILE* fp; - char* progname = argv[0]; - char* eq; - - argv++, argc--; - - if (argc > 0 && argv[0][0] == '-') { - argv++, argc--; - } - if (argc < 1) { - abort(); - } - if ((fp = fopen(argv[0], "r")) == NULL) { - abort(); - } - - /* Needs to be called before any memory allocation */ - erts_short_init(); - - while (fgets(sbuf, sizeof sbuf, fp)) { - if (sbuf[0] == '#') { - continue; /* Comment */ - } else if (sbuf[0] == 'e' && strncmp("exec", sbuf, 4) == 0) { - continue; /* Comment ;-) */ - } else if ((eq = strchr(sbuf, '=')) != NULL) { - char* val; - char* p = strchr(sbuf, '\n'); - if (p) { - *p = '\0'; - } - *eq = '\0'; - val = erts_read_env(sbuf); - if (val == NULL) { - *eq = '='; - erts_sys_putenv(sbuf, eq - &sbuf[0]); - } - erts_free_read_env(val); - } else if (sbuf[0] == ':' && '0' <= sbuf[1] && sbuf[1] <= '9') { - int load_size = atoi(sbuf+1); - void* bin; - - bin = malloc(load_size); - if (fread(bin, 1, load_size, fp) != load_size) { - abort(); - } - bins[bin_num].p = bin; - bins[bin_num].sz = load_size; - bin_num++; - } else if (strcmp(sbuf, "--end--\n") == 0) { - int rval; - Eterm mod = NIL; - char *val; - - fclose(fp); - - if (bin_num != 2) { - abort(); - } - - val = erts_read_env("ERLBREAKHANDLER"); - if (val) { - init_break_handler(); - } - erts_free_read_env(val); - - if ((rval = erts_load_module(NULL, 0, NIL, &mod, bins[0].p, bins[0].sz)) < 0) { - fprintf(stderr, "%s: Load of initial module failed: %d\n", - progname, rval); - abort(); - } - erts_first_process(mod, bins[1].p, bins[1].sz, argc, argv); - free(bins[0].p); - free(bins[1].p); - process_main(); - abort(); - } else { - fprintf(stderr, "%s: bad line: %s\n", progname, sbuf); - abort(); - } - } - abort(); -} diff --git a/erts/emulator/sys/win32/erl_poll.c b/erts/emulator/sys/win32/erl_poll.c index d816cc2c07..a766fe9575 100644 --- a/erts/emulator/sys/win32/erl_poll.c +++ b/erts/emulator/sys/win32/erl_poll.c @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 2007-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 2007-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% */ #ifdef HAVE_CONFIG_H @@ -304,24 +304,51 @@ struct ErtsPollSet_ { erts_smp_atomic_set(&(PS)->polled, (long) 0) #define ERTS_POLLSET_IS_POLLED(PS) \ ((int) erts_smp_atomic_read(&(PS)->polled)) -#define ERTS_POLLSET_SET_POLLER_WOKEN_CHK(PS) \ - ((int) erts_smp_atomic_xchg(&(PS)->woken, (long) 1)) -#define ERTS_POLLSET_SET_POLLER_WOKEN(PS) \ - erts_smp_atomic_set(&(PS)->woken, (long) 1) -#define ERTS_POLLSET_UNSET_POLLER_WOKEN(PS) \ - erts_smp_atomic_set(&(PS)->woken, (long) 0) -#define ERTS_POLLSET_IS_POLLER_WOKEN(PS) \ + +#define ERTS_POLLSET_SET_POLLER_WOKEN_CHK(PS) set_poller_woken_chk((PS)) +#define ERTS_POLLSET_SET_POLLER_WOKEN(PS) \ +do { \ + ERTS_THR_MEMORY_BARRIER; \ + erts_smp_atomic_set(&(PS)->woken, (long) 1); \ +} while (0) +#define ERTS_POLLSET_UNSET_POLLER_WOKEN(PS) \ +do { \ + erts_smp_atomic_set(&(PS)->woken, (long) 0); \ + ERTS_THR_MEMORY_BARRIER; \ +} while (0) +#define ERTS_POLLSET_IS_POLLER_WOKEN(PS) \ ((int) erts_smp_atomic_read(&(PS)->woken)) -#define ERTS_POLLSET_UNSET_INTERRUPTED_CHK(PS) \ - ((int) erts_smp_atomic_xchg(&(PS)->interrupt, (long) 0)) -#define ERTS_POLLSET_UNSET_INTERRUPTED(PS) \ - erts_smp_atomic_set(&(PS)->interrupt, (long) 0) -#define ERTS_POLLSET_SET_INTERRUPTED(PS) \ - erts_smp_atomic_set(&(PS)->interrupt, (long) 1) -#define ERTS_POLLSET_IS_INTERRUPTED(PS) \ +#define ERTS_POLLSET_UNSET_INTERRUPTED_CHK(PS) unset_interrupted_chk((PS)) +#define ERTS_POLLSET_UNSET_INTERRUPTED(PS) \ +do { \ + erts_smp_atomic_set(&(PS)->interrupt, (long) 0); \ + ERTS_THR_MEMORY_BARRIER; \ +} while (0) +#define ERTS_POLLSET_SET_INTERRUPTED(PS) \ +do { \ + ERTS_THR_MEMORY_BARRIER; \ + erts_smp_atomic_set(&(PS)->interrupt, (long) 1); \ +} while (0) +#define ERTS_POLLSET_IS_INTERRUPTED(PS) \ ((int) erts_smp_atomic_read(&(PS)->interrupt)) +static ERTS_INLINE int +unset_interrupted_chk(ErtsPollSet ps) +{ + int res = (int) erts_smp_atomic_xchg(&ps->interrupt, (long) 0); + ERTS_THR_MEMORY_BARRIER; + return res; + +} + +static ERTS_INLINE int +set_poller_woken_chk(ErtsPollSet ps) +{ + ERTS_THR_MEMORY_BARRIER; + return (int) erts_smp_atomic_xchg(&ps->woken, (long) 1); +} + #else #define ERTS_POLLSET_LOCK(PS) diff --git a/erts/emulator/sys/win32/sys.c b/erts/emulator/sys/win32/sys.c index 65719a91d6..d3921a14f8 100644 --- a/erts/emulator/sys/win32/sys.c +++ b/erts/emulator/sys/win32/sys.c @@ -3010,12 +3010,6 @@ erts_sys_pre_init(void) erts_sys_env_init(); } -/* - * the last two only used for standalone erlang - * they should are used by sae_main in beam dll to - * enable standalone execution via erl_api-routines - */ - void noinherit_std_handle(DWORD type) { HANDLE h = GetStdHandle(type); diff --git a/erts/emulator/test/binary_SUITE.erl b/erts/emulator/test/binary_SUITE.erl index 7ecc31aa29..77d2579848 100644 --- a/erts/emulator/test/binary_SUITE.erl +++ b/erts/emulator/test/binary_SUITE.erl @@ -438,11 +438,11 @@ terms(Config) when is_list(Config) -> ok end, Term = binary_to_term(Bin), - Term = erlang:binary_to_term(Bin, [safe]), + Term = binary_to_term(Bin, [safe]), Unaligned = make_unaligned_sub_binary(Bin), Term = binary_to_term(Unaligned), - Term = erlang:binary_to_term(Unaligned, []), - Term = erlang:binary_to_term(Bin, [safe]), + Term = binary_to_term(Unaligned, []), + Term = binary_to_term(Bin, [safe]), BinC = erlang:term_to_binary(Term, [compressed]), Term = binary_to_term(BinC), true = size(BinC) =< size(Bin), @@ -542,7 +542,7 @@ bad_bin_to_term(BadBin) -> {'EXIT',{badarg,_}} = (catch binary_to_term(BadBin)). bad_bin_to_term(BadBin,Opts) -> - {'EXIT',{badarg,_}} = (catch erlang:binary_to_term(BadBin,Opts)). + {'EXIT',{badarg,_}} = (catch binary_to_term(BadBin,Opts)). safe_binary_to_term2(doc) -> "Test safety options for binary_to_term/2"; safe_binary_to_term2(Config) when is_list(Config) -> @@ -553,7 +553,7 @@ safe_binary_to_term2(Config) when is_list(Config) -> BadRef = <<131,114,0,3,BadHostAtom/binary,0,<<0,0,0,255>>/binary, Empty/binary,Empty/binary>>, ?line bad_bin_to_term(BadRef, [safe]), % good ref, with a bad atom - ?line fullsweep_after = erlang:binary_to_term(<<131,100,0,15,"fullsweep_after">>, [safe]), % should be a good atom + ?line fullsweep_after = binary_to_term(<<131,100,0,15,"fullsweep_after">>, [safe]), % should be a good atom BadExtFun = <<131,113,100,0,4,98,108,117,101,100,0,4,109,111,111,110,97,3>>, ?line bad_bin_to_term(BadExtFun, [safe]), ok. diff --git a/erts/include/internal/ethread.h b/erts/include/internal/ethread.h index 934a79c6f9..4e7a38cd5c 100644 --- a/erts/include/internal/ethread.h +++ b/erts/include/internal/ethread.h @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 2004-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 2004-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% */ @@ -375,6 +375,12 @@ ETHR_INLINE_FUNC_NAME_(ethr_mutex_unlock)(ethr_mutex *mtx) #define ETHR_HAVE_OPTIMIZED_ATOMIC_OPS 1 #define ETHR_HAVE_OPTIMIZED_LOCKS 1 +#define ETHR_MEMORY_BARRIER \ +do { \ + volatile LONG x___ = 0; \ + (void) _InterlockedCompareExchange(&x___, (LONG) 1, (LONG) 0); \ +} while (0) + typedef struct { volatile LONG value; } ethr_atomic_t; @@ -688,25 +694,33 @@ ETHR_INLINE_FUNC_NAME_(ethr_write_lock)(ethr_rwlock_t *lock) #endif /* For CPU-optimised atomics, spinlocks, and rwlocks. */ -#if !defined(ETHR_DISABLE_NATIVE_IMPLS) && defined(__GNUC__) -# if ETHR_SIZEOF_PTR == 4 -# if defined(__i386__) -# include "i386/ethread.h" -# elif (defined(__powerpc__) || defined(__ppc__)) && !defined(__powerpc64__) -# include "ppc32/ethread.h" -# elif defined(__sparc__) -# include "sparc32/ethread.h" -# elif defined(__tile__) -# include "tile/ethread.h" +#if !defined(ETHR_DISABLE_NATIVE_IMPLS) +# if defined(__GNUC__) +# if defined(ETHR_PREFER_GCC_NATIVE_IMPLS) +# include "gcc/ethread.h" # endif -# elif ETHR_SIZEOF_PTR == 8 -# if defined(__x86_64__) -# include "x86_64/ethread.h" -# elif defined(__sparc__) && defined(__arch64__) -# include "sparc64/ethread.h" +# ifndef ETHR_HAVE_NATIVE_ATOMICS +# if ETHR_SIZEOF_PTR == 4 +# if defined(__i386__) +# include "i386/ethread.h" +# elif (defined(__powerpc__)||defined(__ppc__))&&!defined(__powerpc64__) +# include "ppc32/ethread.h" +# elif defined(__sparc__) +# include "sparc32/ethread.h" +# elif defined(__tile__) +# include "tile/ethread.h" +# endif +# elif ETHR_SIZEOF_PTR == 8 +# if defined(__x86_64__) +# include "x86_64/ethread.h" +# elif defined(__sparc__) && defined(__arch64__) +# include "sparc64/ethread.h" +# endif +# endif +# include "gcc/ethread.h" # endif # endif -#endif /* !defined(ETHR_DISABLE_NATIVE_IMPLS) && defined(__GNUC__) */ +#endif /* !defined(ETHR_DISABLE_NATIVE_IMPLS) */ #ifdef ETHR_HAVE_OPTIMIZED_ATOMIC_OPS # undef ETHR_HAVE_NATIVE_ATOMICS @@ -1124,8 +1138,14 @@ ETHR_INLINE_FUNC_NAME_(ethr_write_lock)(ethr_rwlock_t *lock) */ #ifndef ETHR_HAVE_OPTIMIZED_ATOMIC_OPS -#define ETHR_ATOMIC_ADDR_BITS 4 -#define ETHR_ATOMIC_ADDR_SHIFT 3 +/* + * ETHR_MEMORY_BARRIER orders between locked and atomic accesses only, + * i.e. when this atomic fallback is used a noop is sufficient. + */ +#define ETHR_MEMORY_BARRIER + +#define ETHR_ATOMIC_ADDR_BITS 10 +#define ETHR_ATOMIC_ADDR_SHIFT 6 typedef struct { union { diff --git a/erts/include/internal/ethread_header_config.h.in b/erts/include/internal/ethread_header_config.h.in index e5b4946a53..c9fd87c2f6 100644 --- a/erts/include/internal/ethread_header_config.h.in +++ b/erts/include/internal/ethread_header_config.h.in @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 2004-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 2004-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% */ @@ -50,6 +50,19 @@ /* Define if you have a pthread_rwlock implementation that can be used */ #undef ETHR_HAVE_PTHREAD_RWLOCK_INIT +/* Define if you have the pthread_rwlockattr_setkind_np() function. */ +#undef ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP + +/* Define if you have the PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP rwlock + attribute. */ +#undef ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP + +/* Define if you have gcc atomic operations */ +#undef ETHR_HAVE_GCC_ATOMIC_OPS + +/* Define if you prefer gcc native ethread implementations */ +#undef ETHR_PREFER_GCC_NATIVE_IMPLS + /* Define if you want to turn on extra sanity checking in the ethread library */ #undef ETHR_XCHK diff --git a/erts/include/internal/gcc/ethr_atomic.h b/erts/include/internal/gcc/ethr_atomic.h new file mode 100644 index 0000000000..775030c8d5 --- /dev/null +++ b/erts/include/internal/gcc/ethr_atomic.h @@ -0,0 +1,164 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2010. All Rights Reserved. + * + * The contents of this file are subject to the Erlang Public License, + * Version 1.1, (the "License"); you may not use this file except in + * compliance with the License. You should have received a copy of the + * Erlang Public License along with this software. If not, it can be + * retrieved online at http://www.erlang.org/. + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and limitations + * under the License. + * + * %CopyrightEnd% + */ + +/* + * Description: Native atomics ethread support using gcc's builtins + * Author: Rickard Green + */ + +#ifndef ETHR_GCC_ATOMIC_H__ +#define ETHR_GCC_ATOMIC_H__ + +#if !defined(ETHR_HAVE_NATIVE_ATOMICS) && defined(ETHR_HAVE_GCC_ATOMIC_OPS) +#define ETHR_HAVE_NATIVE_ATOMICS 1 + +#define ETHR_IMMED_ATOMIC_SET_GET_SAFE__ 0 +/* Enable immediate read/write on platforms where we know it is safe */ +#if defined(__i386__) || defined(__x86_64__) || defined(__sparc__) \ + || defined(__powerpc__) || defined(__ppc__) +# undef ETHR_IMMED_ATOMIC_SET_GET_SAFE__ +# define ETHR_IMMED_ATOMIC_SET_GET_SAFE__ 1 +#endif + +typedef struct { + volatile long counter; +} ethr_native_atomic_t; + + +/* + * According to the documentation this is what we want: + * #define ETHR_MEMORY_BARRIER __sync_synchronize() + * However, __sync_synchronize() is known to erroneously be + * a noop on at least some platforms with some gcc versions. + * This has suposedly been fixed in some gcc version, but we + * don't know from which version. Therefore, we use the + * workaround implemented below on all gcc versions. + */ +#define ETHR_MEMORY_BARRIER \ +do { \ + volatile long x___ = 0; \ + (void) __sync_val_compare_and_swap(&x___, (long) 0, (long) 1); \ +} while (0) + +#if defined(ETHR_TRY_INLINE_FUNCS) || defined(ETHR_AUX_IMPL__) + +static ETHR_INLINE void +ethr_native_atomic_set(ethr_native_atomic_t *var, long value) +{ +#if ETHR_IMMED_ATOMIC_SET_GET_SAFE__ + var->counter = value; +#else + /* + * Unfortunately no __sync_store() or similar exist in the gcc atomic + * op interface. We therefore have to simulate it this way... + */ + long act = 0, exp; + do { + exp = act; + act = __sync_val_compare_and_swap(&var->counter, exp, value); + } while (act != exp); +#endif +} + +#define ethr_native_atomic_init ethr_native_atomic_set + +static ETHR_INLINE long +ethr_native_atomic_read(ethr_native_atomic_t *var) +{ +#if ETHR_IMMED_ATOMIC_SET_GET_SAFE__ + return var->counter; +#else + /* + * Unfortunately no __sync_fetch() or similar exist in the gcc atomic + * op interface. We therefore have to simulate it this way... + */ + return __sync_add_and_fetch(&var->counter, (long) 0); +#endif +} + +static ETHR_INLINE void +ethr_native_atomic_add(ethr_native_atomic_t *var, long incr) +{ + (void) __sync_add_and_fetch(&var->counter, incr); +} + +static ETHR_INLINE long +ethr_native_atomic_add_return(ethr_native_atomic_t *var, long incr) +{ + return __sync_add_and_fetch(&var->counter, incr); +} + +static ETHR_INLINE void +ethr_native_atomic_inc(ethr_native_atomic_t *var) +{ + (void) __sync_add_and_fetch(&var->counter, (long) 1); +} + +static ETHR_INLINE void +ethr_native_atomic_dec(ethr_native_atomic_t *var) +{ + (void) __sync_sub_and_fetch(&var->counter, (long) 1); +} + +static ETHR_INLINE long +ethr_native_atomic_inc_return(ethr_native_atomic_t *var) +{ + return __sync_add_and_fetch(&var->counter, (long) 1); +} + +static ETHR_INLINE long +ethr_native_atomic_dec_return(ethr_native_atomic_t *var) +{ + return __sync_sub_and_fetch(&var->counter, (long) 1); +} + +static ETHR_INLINE long +ethr_native_atomic_and_retold(ethr_native_atomic_t *var, long mask) +{ + return __sync_fetch_and_and(&var->counter, mask); +} + +static ETHR_INLINE long +ethr_native_atomic_or_retold(ethr_native_atomic_t *var, long mask) +{ + return (long) __sync_fetch_and_or(&var->counter, mask); +} + +static ETHR_INLINE long +ethr_native_atomic_cmpxchg(ethr_native_atomic_t *var, long new, long old) +{ + return __sync_val_compare_and_swap(&var->counter, old, new); +} + +static ETHR_INLINE long +ethr_native_atomic_xchg(ethr_native_atomic_t *var, long new) +{ + long exp, act = 0; + do { + exp = act; + act = __sync_val_compare_and_swap(&var->counter, exp, new); + } while (act != exp); + return act; +} + +#endif + +#endif + +#endif diff --git a/erts/include/internal/gcc/ethread.h b/erts/include/internal/gcc/ethread.h new file mode 100644 index 0000000000..bb378e31e0 --- /dev/null +++ b/erts/include/internal/gcc/ethread.h @@ -0,0 +1,30 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2010. All Rights Reserved. + * + * The contents of this file are subject to the Erlang Public License, + * Version 1.1, (the "License"); you may not use this file except in + * compliance with the License. You should have received a copy of the + * Erlang Public License along with this software. If not, it can be + * retrieved online at http://www.erlang.org/. + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and limitations + * under the License. + * + * %CopyrightEnd% + */ + +/* + * Description: Native atomic ethread support when using gcc + * Author: Rickard Green + */ + +#ifndef ETHREAD_GCC_H__ +#define ETHREAD_GCC_H__ + +#include "ethr_atomic.h" + +#endif diff --git a/erts/include/internal/i386/atomic.h b/erts/include/internal/i386/atomic.h index 3291ad38e5..90b4c5f773 100644 --- a/erts/include/internal/i386/atomic.h +++ b/erts/include/internal/i386/atomic.h @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 2005-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 2005-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% */ @@ -32,6 +32,16 @@ typedef struct { volatile long counter; } ethr_native_atomic_t; +#ifdef __x86_64__ +#define ETHR_MEMORY_BARRIER __asm__ __volatile__("mfence" : : : "memory") +#else +#define ETHR_MEMORY_BARRIER \ +do { \ + volatile long x___ = 0; \ + __asm__ __volatile__("lock; incl %0" : "=m"(x___) : "m"(x___) : "memory"); \ +} while (0) +#endif + #ifdef ETHR_TRY_INLINE_FUNCS #ifdef __x86_64__ diff --git a/erts/include/internal/ppc32/atomic.h b/erts/include/internal/ppc32/atomic.h index fa701c6a92..105d874995 100644 --- a/erts/include/internal/ppc32/atomic.h +++ b/erts/include/internal/ppc32/atomic.h @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 2005-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 2005-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% */ @@ -32,6 +32,7 @@ typedef struct { volatile int counter; } ethr_native_atomic_t; +#define ETHR_MEMORY_BARRIER __asm__ __volatile__("sync" : : : "memory") #ifdef ETHR_TRY_INLINE_FUNCS diff --git a/erts/include/internal/sparc32/atomic.h b/erts/include/internal/sparc32/atomic.h index d6fdc6b2a4..8fde449a52 100644 --- a/erts/include/internal/sparc32/atomic.h +++ b/erts/include/internal/sparc32/atomic.h @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 2005-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 2005-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% */ @@ -28,6 +28,10 @@ typedef struct { volatile long counter; } ethr_native_atomic_t; +#define ETHR_MEMORY_BARRIER \ + __asm__ __volatile__("membar #LoadLoad|#LoadStore|#StoreLoad|#StoreStore\n" \ + : : : "memory") + #ifdef ETHR_TRY_INLINE_FUNCS #if defined(__arch64__) diff --git a/erts/include/internal/tile/atomic.h b/erts/include/internal/tile/atomic.h index 59a9250e7c..5e4c7ac9fe 100644 --- a/erts/include/internal/tile/atomic.h +++ b/erts/include/internal/tile/atomic.h @@ -32,6 +32,8 @@ typedef struct { volatile long counter; } ethr_native_atomic_t; +#define ETHR_MEMORY_BARRIER __insn_mf() + #ifdef ETHR_TRY_INLINE_FUNCS static ETHR_INLINE void diff --git a/erts/lib_src/Makefile.in b/erts/lib_src/Makefile.in index 49f5b1f048..e7caac8072 100644 --- a/erts/lib_src/Makefile.in +++ b/erts/lib_src/Makefile.in @@ -447,7 +447,7 @@ INTERNAL_RELEASE_INCLUDES= \ $(ERTS_INCL_INT)/erl_misc_utils.h \ $(ERTS_INCL_INT)/erl_errno.h -INTERNAL_X_RELEASE_INCLUDE_DIRS= i386 x86_64 ppc32 sparc32 sparc64 tile +INTERNAL_X_RELEASE_INCLUDE_DIRS= i386 x86_64 ppc32 sparc32 sparc64 tile gcc INTERNAL_RELEASE_LIBS= \ ../lib/internal/README \ diff --git a/erts/lib_src/common/ethread.c b/erts/lib_src/common/ethread.c index eb4d0cad20..9c88233934 100644 --- a/erts/lib_src/common/ethread.c +++ b/erts/lib_src/common/ethread.c @@ -1,19 +1,19 @@ /* * %CopyrightBegin% - * - * Copyright Ericsson AB 2004-2009. All Rights Reserved. - * + * + * Copyright Ericsson AB 2004-2010. All Rights Reserved. + * * The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved online at http://www.erlang.org/. - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. - * + * * %CopyrightEnd% */ @@ -269,6 +269,11 @@ static ethr_mutex no_ethrs_mtx; #warning "Cannot enforce fork-safety" #endif +#ifdef ETHR_HAVE_PTHREAD_RWLOCK_INIT +static pthread_rwlockattr_t write_pref_attr_data; +static pthread_rwlockattr_t *write_pref_attr; +#endif + /* * ---------------------------------------------------------------------------- * Static functions @@ -525,6 +530,24 @@ ethr_init(ethr_init_data *id) } #endif +#ifdef ETHR_HAVE_PTHREAD_RWLOCK_INIT +#if defined(ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP) \ + && defined(ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP) + res = pthread_rwlockattr_init(&write_pref_attr_data); + if (res != 0) + goto error; + res = pthread_rwlockattr_setkind_np( + &write_pref_attr_data, + PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); + if (res != 0) + goto error; + write_pref_attr = &write_pref_attr_data; +#else + write_pref_attr = NULL; +#endif +#endif + + return 0; error: @@ -1060,7 +1083,7 @@ ethr_rwmutex_init(ethr_rwmutex *rwmtx) } rwmtx->initialized = ETHR_RWMUTEX_INITIALIZED; #endif - return pthread_rwlock_init(&rwmtx->pt_rwlock, NULL); + return pthread_rwlock_init(&rwmtx->pt_rwlock, write_pref_attr); } int @@ -3193,7 +3216,7 @@ ethr_rwmutex_tryrlock(ethr_rwmutex *rwmtx) res = ethr_mutex_trylock__(&rwmtx->mtx); if (res != 0) return res; - if (!rwmtx->waiting_writers) { + if (rwmtx->waiting_writers) { res = ethr_mutex_unlock__(&rwmtx->mtx); if (res == 0) return EBUSY; diff --git a/lib/compiler/src/beam_dead.erl b/lib/compiler/src/beam_dead.erl index 7b4cd814a2..bb93110176 100644 --- a/lib/compiler/src/beam_dead.erl +++ b/lib/compiler/src/beam_dead.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 2002-2010. All Rights Reserved. +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. -%% +%% %% %CopyrightEnd% %% @@ -281,12 +281,12 @@ forward([{test,is_eq_exact,_,[Dst,Src]}=I,{move,Src,Dst}|Is], D, Lc, Acc) -> forward([I|Is], D, Lc, Acc); forward([{test,is_nil,_,[Dst]}=I,{move,nil,Dst}|Is], D, Lc, Acc) -> forward([I|Is], D, Lc, Acc); -forward([{test,is_eq_exact,_,[_,{atom,_}]}=I|Is], D, Lc, [{label,_}|_]=Acc) -> +forward([{test,is_eq_exact,_,_}=I|Is], D, Lc, Acc) -> case Is of [{label,_}|_] -> forward(Is, D, Lc, [I|Acc]); _ -> forward(Is, D, Lc+1, [{label,Lc},I|Acc]) end; -forward([{test,is_ne_exact,_,[_,{atom,_}]}=I|Is], D, Lc, [{label,_}|_]=Acc) -> +forward([{test,is_ne_exact,_,_}=I|Is], D, Lc, Acc) -> case Is of [{label,_}|_] -> forward(Is, D, Lc, [I|Acc]); _ -> forward(Is, D, Lc+1, [{label,Lc},I|Acc]) @@ -371,10 +371,10 @@ backward([{test,bs_start_match2,{f,To0},Live,[Src|_]=Info,Dst}|Is], D, Acc) -> To = shortcut_bs_start_match(To0, Src, D), I = {test,bs_start_match2,{f,To},Live,Info,Dst}, backward(Is, D, [I|Acc]); -backward([{test,is_eq_exact=Op,{f,To0},[Reg,{atom,Val}]=Ops}|Is], D, Acc) -> +backward([{test,is_eq_exact,{f,To0},[Reg,{atom,Val}]=Ops}|Is], D, Acc) -> To1 = shortcut_bs_test(To0, Is, D), To = shortcut_fail_label(To1, Reg, Val, D), - I = {test,Op,{f,To},Ops}, + I = combine_eqs(To, Ops, D, Acc), backward(Is, D, [I|Acc]); backward([{test,Op,{f,To0},Ops0}|Is], D, Acc) -> To1 = shortcut_bs_test(To0, Is, D), @@ -394,7 +394,10 @@ backward([{test,Op,{f,To0},Ops0}|Is], D, Acc) -> _Code -> To2 end, - I = {test,Op,{f,To},Ops0}, + I = case Op of + is_eq_exact -> combine_eqs(To, Ops0, D, Acc); + _ -> {test,Op,{f,To},Ops0} + end, backward(Is, D, [I|Acc]); backward([{test,Op,{f,To0},Live,Ops0,Dst}|Is], D, Acc) -> To1 = shortcut_bs_test(To0, Is, D), @@ -519,6 +522,41 @@ bif_to_test(Name, Args, Fail) -> not_possible() -> throw(not_possible). +%% combine_eqs(To, Operands, Acc) -> Instruction. +%% Combine two is_eq_exact instructions or (an is_eq_exact +%% instruction and a select_val instruction) to a select_val +%% instruction if possible. +%% +%% Example: +%% +%% is_eq_exact F1 Reg Lit1 select_val Reg F2 [ Lit1 L1 +%% L1: . Lit2 L2 ] +%% . +%% . ==> +%% . +%% F1: is_eq_exact F2 Reg Lit2 F1: is_eq_exact F2 Reg Lit2 +%% L2: .... L2: +%% +combine_eqs(To, [Reg,{Type,_}=Lit1]=Ops, D, [{label,L1}|_]) + when Type =:= atom; Type =:= integer -> + case beam_utils:code_at(To, D) of + [{test,is_eq_exact,{f,F2},[Reg,{Type,_}=Lit2]}, + {label,L2}|_] when Lit1 =/= Lit2 -> + {select_val,Reg,{f,F2},{list,[Lit1,{f,L1},Lit2,{f,L2}]}}; + [{select_val,Reg,{f,F2},{list,[{Type,_}|_]=List0}}|_] -> + List = remove_from_list(Lit1, List0), + {select_val,Reg,{f,F2},{list,[Lit1,{f,L1}|List]}}; + _Is -> + {test,is_eq_exact,{f,To},Ops} + end; +combine_eqs(To, Ops, _D, _Acc) -> + {test,is_eq_exact,{f,To},Ops}. + +remove_from_list(Lit, [Lit,{f,_}|T]) -> + T; +remove_from_list(Lit, [Val,{f,_}=Fail|T]) -> + [Val,Fail|remove_from_list(Lit, T)]; +remove_from_list(_, []) -> []. %% shortcut_bs_test(TargetLabel, [Instruction], D) -> TargetLabel' %% Try to shortcut the failure label for a bit syntax matching. diff --git a/lib/compiler/src/beam_peep.erl b/lib/compiler/src/beam_peep.erl index d03ac4b1f4..f39fc50b95 100644 --- a/lib/compiler/src/beam_peep.erl +++ b/lib/compiler/src/beam_peep.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2008-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 2008-2010. All Rights Reserved. +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. -%% +%% %% %CopyrightEnd% %% @@ -64,22 +64,7 @@ function({function,Name,Arity,CLabel,Is0}) -> %% InEncoding =:= latin1, OutEncoding =:= unicode; %% InEncoding =:= latin1, OutEncoding =:= utf8 -> %% -%% (2) Code like -%% -%% is_ne_exact Fail Reg Literal1 -%% is_ne_exact Fail Reg Literal2 -%% is_ne_exact Fail Reg Literal3 -%% is_eq_exact UltimateFail Reg Literal4 -%% Fail: .... -%% -%% can be rewritten to -%% -%% select_val Reg UltimateFail [ Literal1 Fail -%% Literal2 Fail -%% Literal3 Fail -%% Literal4 Fail ] -%% -%% (3) A select_val/4 instruction that only verifies that +%% (2) A select_val/4 instruction that only verifies that %% its argument is either 'true' or 'false' can be %% be replaced with an is_boolean/2 instruction. That is: %% @@ -132,7 +117,7 @@ peep([{test,Op,_,Ops}=I|Is], SeenTests0, Acc) -> false -> %% Remember that we have seen this test. SeenTests = gb_sets:insert(Test, SeenTests0), - make_select_val(I, Is, SeenTests, Acc) + peep(Is, SeenTests, [I|Acc]) end end; peep([{select_val,Src,Fail, @@ -151,33 +136,6 @@ peep([I|Is], _, Acc) -> peep(Is, gb_sets:empty(), [I|Acc]); peep([], _, Acc) -> reverse(Acc). -make_select_val({test,is_ne_exact,{f,Fail},[Val,Lit]}=I0, - Is0, SeenTests, Acc) -> - try - Type = case Lit of - {atom,_} -> atom; - {integer,_} -> integer; - _ -> throw(impossible) - end, - {I,Is} = make_select_val_1(Is0, Fail, Val, Type, [Lit,{f,Fail}]), - peep([I|Is], SeenTests, Acc) - catch - impossible -> - peep(Is0, SeenTests, [I0|Acc]) - end; -make_select_val(I, Is, SeenTests, Acc) -> - peep(Is, SeenTests, [I|Acc]). - -make_select_val_1([{test,is_ne_exact,{f,Fail},[Val,{Type,_}=Lit]}|Is], - Fail, Val, Type, Acc) -> - make_select_val_1(Is, Fail, Val, Type, [Lit,{f,Fail}|Acc]); -make_select_val_1([{test,is_eq_exact,{f,UltimateFail},[Val,{Type,_}=Lit]} | - [{label,Fail}|_]=Is], Fail, Val, Type, Acc) -> - Choices = [Lit,{f,Fail}|Acc], - I = {select_val,Val,{f,UltimateFail},{list,Choices}}, - {I,Is}; -make_select_val_1(_Is, _Fail, _Val, _Type, _Acc) -> throw(impossible). - kill_seen(Dst, Seen0) -> gb_sets:from_ordset(kill_seen_1(gb_sets:to_list(Seen0), Dst)). @@ -187,5 +145,3 @@ kill_seen_1([{_,Ops}=Test|T], Dst) -> false -> [Test|kill_seen_1(T, Dst)] end; kill_seen_1([], _) -> []. - - diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl index 6202f07479..96015fbe58 100644 --- a/lib/compiler/src/sys_core_fold.erl +++ b/lib/compiler/src/sys_core_fold.erl @@ -1038,6 +1038,8 @@ fold_non_lit_args(Call, lists, append, [Arg1,Arg2], _) -> eval_append(Call, Arg1, Arg2); fold_non_lit_args(Call, erlang, setelement, [Arg1,Arg2,Arg3], _) -> eval_setelement(Call, Arg1, Arg2, Arg3); +fold_non_lit_args(Call, erlang, is_record, [Arg1,Arg2,Arg3], Sub) -> + eval_is_record(Call, Arg1, Arg2, Arg3, Sub); fold_non_lit_args(Call, erlang, N, Args, Sub) -> NumArgs = length(Args), case erl_internal:comp_op(N, NumArgs) of @@ -1194,19 +1196,22 @@ eval_element(Call, #c_literal{val=Pos}, #c_tuple{es=Es}, _Types) when is_integer true -> eval_failure(Call, badarg) end; -%% eval_element(Call, #c_literal{val=Pos}, #c_var{name=V}, Types) -%% when is_integer(Pos) -> -%% case orddict:find(V, Types#sub.t) of -%% {ok,#c_tuple{es=Elements}} -> -%% if -%% 1 =< Pos, Pos =< length(Elements) -> -%% lists:nth(Pos, Elements); -%% true -> -%% eval_failure(Call, badarg) -%% end; -%% error -> -%% Call -%% end; +eval_element(Call, #c_literal{val=Pos}, #c_var{name=V}, Types) + when is_integer(Pos) -> + case orddict:find(V, Types#sub.t) of + {ok,#c_tuple{es=Elements}} -> + if + 1 =< Pos, Pos =< length(Elements) -> + case lists:nth(Pos, Elements) of + #c_alias{var=Alias} -> Alias; + Res -> Res + end; + true -> + eval_failure(Call, badarg) + end; + error -> + Call + end; eval_element(Call, Pos, Tuple, _Types) -> case is_not_integer(Pos) orelse is_not_tuple(Tuple) of true -> @@ -1215,6 +1220,20 @@ eval_element(Call, Pos, Tuple, _Types) -> Call end. +%% eval_is_record(Call, Var, Tag, Size, Types) -> Val. +%% Evaluates is_record/3 using type information. +%% +eval_is_record(Call, #c_var{name=V}, #c_literal{val=NeededTag}=Lit, + #c_literal{val=Size}, Types) -> + case orddict:find(V, Types#sub.t) of + {ok,#c_tuple{es=[#c_literal{val=Tag}|_]=Es}} -> + Lit#c_literal{val=Tag =:= NeededTag andalso + length(Es) =:= Size}; + _ -> + Call + end; +eval_is_record(Call, _, _, _, _) -> Call. + %% is_not_integer(Core) -> true | false. %% Returns true if Core is definitely not an integer. diff --git a/lib/kernel/src/dist_util.erl b/lib/kernel/src/dist_util.erl index a2937d60b8..f0d54a2f3e 100644 --- a/lib/kernel/src/dist_util.erl +++ b/lib/kernel/src/dist_util.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1999-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 1999-2010. All Rights Reserved. +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. -%% +%% %% %CopyrightEnd% %% %%%---------------------------------------------------------------------- @@ -564,7 +564,7 @@ recv_challenge(#hs_data{socket=Socket,other_node=Node, case Recv(Socket, 0, infinity) of {ok,[$n,V1,V0,Fl1,Fl2,Fl3,Fl4,CA3,CA2,CA1,CA0 | Ns]} -> Flags = ?u32(Fl1,Fl2,Fl3,Fl4), - case {list_to_existing_atom(Ns),?u16(V1,V0)} of + try {list_to_existing_atom(Ns),?u16(V1,V0)} of {Node,Version} -> Challenge = ?u32(CA3,CA2,CA1,CA0), ?trace("recv: node=~w, challenge=~w version=~w\n", @@ -572,6 +572,9 @@ recv_challenge(#hs_data{socket=Socket,other_node=Node, {Flags,Challenge}; _ -> ?shutdown(no_node) + catch + error:badarg -> + ?shutdown(no_node) end; _ -> ?shutdown(no_node) diff --git a/lib/kernel/src/inet_dns.erl b/lib/kernel/src/inet_dns.erl index 669a361c9d..1289e176c7 100644 --- a/lib/kernel/src/inet_dns.erl +++ b/lib/kernel/src/inet_dns.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 1997-2010. All Rights Reserved. +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. -%% +%% %% %CopyrightEnd% %% -module(inet_dns). @@ -129,27 +129,33 @@ do_decode(<<Id:16, RA:1,PR:1,_:2,Rcode:4, QdCount:16,AnCount:16,NsCount:16,ArCount:16, QdBuf/binary>>=Buffer) -> - {AnBuf,QdList} = decode_query_section(QdBuf,QdCount,Buffer), - {NsBuf,AnList} = decode_rr_section(AnBuf,AnCount,Buffer), - {ArBuf,NsList} = decode_rr_section(NsBuf,NsCount,Buffer), - {Rest,ArList} = decode_rr_section(ArBuf,ArCount,Buffer), + {AnBuf,QdList,QdTC} = decode_query_section(QdBuf,QdCount,Buffer), + {NsBuf,AnList,AnTC} = decode_rr_section(AnBuf,AnCount,Buffer), + {ArBuf,NsList,NsTC} = decode_rr_section(NsBuf,NsCount,Buffer), + {Rest,ArList,ArTC} = decode_rr_section(ArBuf,ArCount,Buffer), case Rest of <<>> -> + HdrTC = decode_boolean(TC), DnsHdr = #dns_header{id=Id, qr=decode_boolean(QR), opcode=decode_opcode(Opcode), aa=decode_boolean(AA), - tc=decode_boolean(TC), + tc=HdrTC, rd=decode_boolean(RD), ra=decode_boolean(RA), pr=decode_boolean(PR), rcode=Rcode}, - #dns_rec{header=DnsHdr, - qdlist=QdList, - anlist=AnList, - nslist=NsList, - arlist=ArList}; + case QdTC or AnTC or NsTC or ArTC of + true when not HdrTC -> + throw(?DECODE_ERROR); + _ -> + #dns_rec{header=DnsHdr, + qdlist=QdList, + anlist=AnList, + nslist=NsList, + arlist=ArList} + end; _ -> %% Garbage data after DNS message throw(?DECODE_ERROR) @@ -161,8 +167,10 @@ do_decode(_) -> decode_query_section(Bin, N, Buffer) -> decode_query_section(Bin, N, Buffer, []). +decode_query_section(<<>>=Rest, N, _Buffer, Qs) -> + {Rest,reverse(Qs),N =/= 0}; decode_query_section(Rest, 0, _Buffer, Qs) -> - {Rest,reverse(Qs)}; + {Rest,reverse(Qs),false}; decode_query_section(Bin, N, Buffer, Qs) -> case decode_name(Bin, Buffer) of {<<Type:16,Class:16,Rest/binary>>,Name} -> @@ -179,8 +187,10 @@ decode_query_section(Bin, N, Buffer, Qs) -> decode_rr_section(Bin, N, Buffer) -> decode_rr_section(Bin, N, Buffer, []). +decode_rr_section(<<>>=Rest, N, _Buffer, RRs) -> + {Rest,reverse(RRs),N =/= 0}; decode_rr_section(Rest, 0, _Buffer, RRs) -> - {Rest,reverse(RRs)}; + {Rest,reverse(RRs),false}; decode_rr_section(Bin, N, Buffer, RRs) -> case decode_name(Bin, Buffer) of {<<T:16/unsigned,C:16/unsigned,TTL:4/binary, diff --git a/lib/kernel/src/inet_res.erl b/lib/kernel/src/inet_res.erl index 9b9e078898..de0f23bf24 100644 --- a/lib/kernel/src/inet_res.erl +++ b/lib/kernel/src/inet_res.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1997-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 1997-2010. All Rights Reserved. +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. -%% +%% %% %CopyrightEnd% %% %% RFC 1035, 2671, 2782, 2915. @@ -592,6 +592,7 @@ query_retries(_Q, _NSs, _Timer, Retry, Retry, S) -> query_retries(Q, NSs, Timer, Retry, I, S0) -> Num = length(NSs), if Num =:= 0 -> + udp_close(S0), {error,timeout}; true -> case query_nss(Q, NSs, Timer, Retry, I, S0, []) of diff --git a/lib/kernel/src/net_kernel.erl b/lib/kernel/src/net_kernel.erl index 3afaedf274..0e17c059e5 100644 --- a/lib/kernel/src/net_kernel.erl +++ b/lib/kernel/src/net_kernel.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 1996-2010. All Rights Reserved. +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. -%% +%% %% %CopyrightEnd% %% -module(net_kernel). @@ -72,7 +72,7 @@ -export([publish_on_node/1, update_publish_nodes/1]). -%% Internal Exports +%% Internal Exports -export([do_spawn/3, spawn_func/6, ticker/2, @@ -94,7 +94,7 @@ connecttime, %% the connection setuptime. connections, %% table of connections conn_owners = [], %% List of connection owner pids, - pend_owners = [], %% List of potential owners + pend_owners = [], %% List of potential owners listen, %% list of #listen allowed, %% list of allowed nodes in a restricted system verbose = 0, %% level of verboseness @@ -232,7 +232,7 @@ do_connect(Node, Type, WaitForBarred) -> %% Type = normal | hidden %% "connected from other end.~n",[Node]), true; {Pid, false} -> - ?connect_failure(Node,{barred_connection, + ?connect_failure(Node,{barred_connection, ets:lookup(sys_dist, Node)}), %%io:format("Net Kernel: barred connection (~p) " %% "- failure.~n",[Node]), @@ -244,12 +244,12 @@ do_connect(Node, Type, WaitForBarred) -> %% Type = normal | hidden {ok, never} -> ?connect_failure(Node,{dist_auto_connect,never}), false; - % This might happen due to connection close + % This might happen due to connection close % not beeing propagated to user space yet. - % Save the day by just not connecting... + % Save the day by just not connecting... {ok, once} when Else =/= [], (hd(Else))#connection.state =:= up -> - ?connect_failure(Node,{barred_connection, + ?connect_failure(Node,{barred_connection, ets:lookup(sys_dist, Node)}), false; _ -> @@ -276,8 +276,8 @@ passive_connect_monitor(Parent, Node) -> Parent ! {self(),true} end end. - -%% If the net_kernel isn't running we ignore all requests to the + +%% If the net_kernel isn't running we ignore all requests to the %% kernel, thus basically accepting them :-) request(Req) -> case whereis(net_kernel) of @@ -302,7 +302,7 @@ start_link([Name, LongOrShortNames]) -> start_link([Name, LongOrShortNames, 15000]); start_link([Name, LongOrShortNames, Ticktime]) -> - case gen_server:start_link({local, net_kernel}, net_kernel, + case gen_server:start_link({local, net_kernel}, net_kernel, {Name, LongOrShortNames, Ticktime}, []) of {ok, Pid} -> {ok, Pid}; @@ -313,7 +313,7 @@ start_link([Name, LongOrShortNames, Ticktime]) -> end. %% auth:get_cookie should only be able to return an atom -%% tuple cookies are unknowns +%% tuple cookies are unknowns init({Name, LongOrShortNames, TickT}) -> process_flag(trap_exit,true), @@ -354,13 +354,13 @@ init({Name, LongOrShortNames, TickT}) -> %% The response is delayed until the connection is up and %% running. %% -handle_call({connect, _, Node}, _From, State) when Node =:= node() -> - {reply, true, State}; +handle_call({connect, _, Node}, From, State) when Node =:= node() -> + async_reply({reply, true, State}, From); handle_call({connect, Type, Node}, From, State) -> verbose({connect, Type, Node}, 1, State), case ets:lookup(sys_dist, Node) of [Conn] when Conn#connection.state =:= up -> - {reply, true, State}; + async_reply({reply, true, State}, From); [Conn] when Conn#connection.state =:= pending -> Waiting = Conn#connection.waiting, ets:insert(sys_dist, Conn#connection{waiting = [From|Waiting]}), @@ -376,74 +376,75 @@ handle_call({connect, Type, Node}, From, State) -> {noreply,State#state{conn_owners=Owners}}; _ -> ?connect_failure(Node, {setup_call, failed}), - {reply, false, State} + async_reply({reply, false, State}, From) end end; %% %% Close the connection to Node. %% -handle_call({disconnect, Node}, _From, State) when Node =:= node() -> - {reply, false, State}; -handle_call({disconnect, Node}, _From, State) -> +handle_call({disconnect, Node}, From, State) when Node =:= node() -> + async_reply({reply, false, State}, From); +handle_call({disconnect, Node}, From, State) -> verbose({disconnect, Node}, 1, State), {Reply, State1} = do_disconnect(Node, State), - {reply, Reply, State1}; + async_reply({reply, Reply, State1}, From); -%% +%% %% The spawn/4 BIF ends up here. -%% +%% handle_call({spawn,M,F,A,Gleader},{From,Tag},State) when is_pid(From) -> do_spawn([no_link,{From,Tag},M,F,A,Gleader],[],State); -%% +%% %% The spawn_link/4 BIF ends up here. -%% +%% handle_call({spawn_link,M,F,A,Gleader},{From,Tag},State) when is_pid(From) -> do_spawn([link,{From,Tag},M,F,A,Gleader],[],State); -%% +%% %% The spawn_opt/5 BIF ends up here. -%% +%% handle_call({spawn_opt,M,F,A,O,L,Gleader},{From,Tag},State) when is_pid(From) -> do_spawn([L,{From,Tag},M,F,A,Gleader],O,State); -%% +%% %% Only allow certain nodes. -%% -handle_call({allow, Nodes}, _From, State) -> +%% +handle_call({allow, Nodes}, From, State) -> case all_atoms(Nodes) of true -> Allowed = State#state.allowed, - {reply,ok,State#state{allowed = Allowed ++ Nodes}}; + async_reply({reply,ok,State#state{allowed = Allowed ++ Nodes}}, + From); false -> - {reply,error,State} + async_reply({reply,error,State}, From) end; -%% +%% %% authentication, used by auth. Simply works as this: %% if the message comes through, the other node IS authorized. -%% -handle_call({is_auth, _Node}, _From, State) -> - {reply,yes,State}; +%% +handle_call({is_auth, _Node}, From, State) -> + async_reply({reply,yes,State}, From); -%% +%% %% Not applicable any longer !? -%% -handle_call({apply,_Mod,_Fun,_Args}, {From,Tag}, State) +%% +handle_call({apply,_Mod,_Fun,_Args}, {From,Tag}, State) when is_pid(From), node(From) =:= node() -> - gen_server:reply({From,Tag}, not_implemented), + async_gen_server_reply({From,Tag}, not_implemented), % Port = State#state.port, % catch apply(Mod,Fun,[Port|Args]), {noreply,State}; -handle_call(longnames, _From, State) -> - {reply, get(longnames), State}; +handle_call(longnames, From, State) -> + async_reply({reply, get(longnames), State}, From); -handle_call({update_publish_nodes, Ns}, _From, State) -> - {reply, ok, State#state{publish_on_nodes = Ns}}; +handle_call({update_publish_nodes, Ns}, From, State) -> + async_reply({reply, ok, State#state{publish_on_nodes = Ns}}, From); -handle_call({publish_on_node, Node}, _From, State) -> +handle_call({publish_on_node, Node}, From, State) -> NewState = case State#state.publish_on_nodes of undefined -> State#state{publish_on_nodes = @@ -457,11 +458,12 @@ handle_call({publish_on_node, Node}, _From, State) -> Nodes -> lists:member(Node, Nodes) end, - {reply, Publish, NewState}; + async_reply({reply, Publish, NewState}, From); -handle_call({verbose, Level}, _From, State) -> - {reply, State#state.verbose, State#state{verbose = Level}}; +handle_call({verbose, Level}, From, State) -> + async_reply({reply, State#state.verbose, State#state{verbose = Level}}, + From); %% %% Set new ticktime @@ -471,16 +473,16 @@ handle_call({verbose, Level}, _From, State) -> %% #tick_change{} record if the ticker process has been upgraded; %% otherwise, an integer or an atom. -handle_call(ticktime, _, #state{tick = #tick{time = T}} = State) -> - {reply, T, State}; -handle_call(ticktime, _, #state{tick = #tick_change{time = T}} = State) -> - {reply, {ongoing_change_to, T}, State}; +handle_call(ticktime, From, #state{tick = #tick{time = T}} = State) -> + async_reply({reply, T, State}, From); +handle_call(ticktime, From, #state{tick = #tick_change{time = T}} = State) -> + async_reply({reply, {ongoing_change_to, T}, State}, From); -handle_call({new_ticktime,T,_TP}, _, #state{tick = #tick{time = T}} = State) -> +handle_call({new_ticktime,T,_TP}, From, #state{tick = #tick{time = T}} = State) -> ?tckr_dbg(no_tick_change), - {reply, unchanged, State}; + async_reply({reply, unchanged, State}, From); -handle_call({new_ticktime,T,TP}, _, #state{tick = #tick{ticker = Tckr, +handle_call({new_ticktime,T,TP}, From, #state{tick = #tick{ticker = Tckr, time = OT}} = State) -> ?tckr_dbg(initiating_tick_change), start_aux_ticker(T, OT, TP), @@ -493,14 +495,18 @@ handle_call({new_ticktime,T,TP}, _, #state{tick = #tick{ticker = Tckr, ?tckr_dbg(shorter_ticktime), shorter end, - {reply, change_initiated, State#state{tick = #tick_change{ticker = Tckr, - time = T, - how = How}}}; + async_reply({reply, change_initiated, + State#state{tick = #tick_change{ticker = Tckr, + time = T, + how = How}}}, From); -handle_call({new_ticktime,_,_}, +handle_call({new_ticktime,From,_}, _, #state{tick = #tick_change{time = T}} = State) -> - {reply, {ongoing_change_to, T}, State}. + async_reply({reply, {ongoing_change_to, T}, State}, From); + +handle_call(_Msg, _From, State) -> + {noreply, State}. %% ------------------------------------------------------------ %% handle_cast. @@ -568,7 +574,7 @@ handle_info({accept,AcceptPid,Socket,Family,Proto}, State) -> %% %% A node has successfully been connected. %% -handle_info({SetupPid, {nodeup,Node,Address,Type,Immediate}}, +handle_info({SetupPid, {nodeup,Node,Address,Type,Immediate}}, State) -> case {Immediate, ets:lookup(sys_dist, Node)} of {true, [Conn]} when Conn#connection.state =:= pending, @@ -656,7 +662,7 @@ handle_info({From,registered_send,To,Mess},State) -> send(From,To,Mess), {noreply,State}; -%% badcookies SHOULD not be sent +%% badcookies SHOULD not be sent %% (if someone does erlang:set_cookie(node(),foo) this may be) handle_info({From,badcookie,_To,_Mess}, State) -> error_logger:error_msg("~n** Got OLD cookie from ~w~n", @@ -704,7 +710,7 @@ handle_info(X, State) -> %% 4. The ticker process. %% (5. Garbage pid.) %% -%% The process type function that handled the process throws +%% The process type function that handled the process throws %% the handle_info return value ! %% ----------------------------------------------------------- @@ -994,9 +1000,9 @@ ticker(Kernel, Tick) when is_integer(Tick) -> ticker_loop(Kernel, Tick). to_integer(T) when is_integer(T) -> T; -to_integer(T) when is_atom(T) -> +to_integer(T) when is_atom(T) -> list_to_integer(atom_to_list(T)); -to_integer(T) when is_list(T) -> +to_integer(T) when is_list(T) -> list_to_integer(T). ticker_loop(Kernel, Tick) -> @@ -1004,7 +1010,7 @@ ticker_loop(Kernel, Tick) -> {new_ticktime, NewTick} -> ?tckr_dbg({ticker_changed_time, Tick, NewTick}), ?MODULE:ticker_loop(Kernel, NewTick) - after Tick -> + after Tick -> Kernel ! tick, ?MODULE:ticker_loop(Kernel, Tick) end. @@ -1052,7 +1058,7 @@ send(_From,To,Mess) -> -ifdef(UNUSED). safesend(Name,Mess) when is_atom(Name) -> - case whereis(Name) of + case whereis(Name) of undefined -> Mess; P when is_pid(P) -> @@ -1063,11 +1069,12 @@ safesend(Pid, Mess) -> Pid ! Mess. -endif. do_spawn(SpawnFuncArgs, SpawnOpts, State) -> + [_,From|_] = SpawnFuncArgs, case catch spawn_opt(?MODULE, spawn_func, SpawnFuncArgs, SpawnOpts) of - {'EXIT', {Reason,_}} -> - {reply, {'EXIT', {Reason,[]}}, State}; - {'EXIT', Reason} -> - {reply, {'EXIT', {Reason,[]}}, State}; + {'EXIT', {Reason,_}} -> + async_reply({reply, {'EXIT', {Reason,[]}}, State}, From); + {'EXIT', Reason} -> + async_reply({reply, {'EXIT', {Reason,[]}}, State}, From); _ -> {noreply,State} end. @@ -1079,11 +1086,11 @@ do_spawn(SpawnFuncArgs, SpawnOpts, State) -> spawn_func(link,{From,Tag},M,F,A,Gleader) -> link(From), - gen_server:reply({From,Tag},self()), %% ahhh + async_gen_server_reply({From,Tag},self()), %% ahhh group_leader(Gleader,self()), apply(M,F,A); spawn_func(_,{From,Tag},M,F,A,Gleader) -> - gen_server:reply({From,Tag},self()), %% ahhh + async_gen_server_reply({From,Tag},self()), %% ahhh group_leader(Gleader,self()), apply(M,F,A). @@ -1145,7 +1152,7 @@ get_proto_mod(Family,Protocol,[L|Ls]) -> true -> get_proto_mod(Family,Protocol,Ls) end; -get_proto_mod(_Family, _Protocol, []) -> +get_proto_mod(_Family, _Protocol, []) -> error. %% -------- Initialisation functions ------------------------ @@ -1156,9 +1163,9 @@ init_node(Name, LongOrShortNames) -> case create_name(Name, LongOrShortNames, 1) of {ok,Node} -> case start_protos(list_to_atom(NameWithoutHost),Node) of - {ok, Ls} -> + {ok, Ls} -> {ok, Node, Ls}; - Error -> + Error -> Error end; Error -> @@ -1167,9 +1174,9 @@ init_node(Name, LongOrShortNames) -> %% Create the node name create_name(Name, LongOrShortNames, Try) -> - put(longnames, case LongOrShortNames of - shortnames -> false; - longnames -> true + put(longnames, case LongOrShortNames of + shortnames -> false; + longnames -> true end), {Head,Host1} = create_hostpart(Name, LongOrShortNames), case Host1 of @@ -1218,7 +1225,7 @@ create_hostpart(Name, LongOrShortNames) -> {Head,Host1}. %% -%% +%% %% protocol_childspecs() -> case init:get_argument(proto_dist) of @@ -1228,7 +1235,7 @@ protocol_childspecs() -> protocol_childspecs(["inet_tcp"]) end. -protocol_childspecs([]) -> +protocol_childspecs([]) -> []; protocol_childspecs([H|T]) -> Mod = list_to_atom(H ++ "_dist"), @@ -1238,15 +1245,15 @@ protocol_childspecs([H|T]) -> _ -> protocol_childspecs(T) end. - - + + %% %% epmd_module() -> module_name of erl_epmd or similar gen_server_module. %% epmd_module() -> case init:get_argument(epmd_module) of - {ok,[[Module]]} -> + {ok,[[Module]]} -> Module; _ -> erl_epmd @@ -1293,7 +1300,7 @@ start_protos(Name, [Proto | Ps], Node, Ls) -> error_logger:info_msg("Protocol: ~p: not supported~n", [Proto]), start_protos(Name,Ps, Node, Ls); {'EXIT', Reason} -> - error_logger:info_msg("Protocol: ~p: register error: ~p~n", + error_logger:info_msg("Protocol: ~p: register error: ~p~n", [Proto, Reason]), start_protos(Name,Ps, Node, Ls); {error, duplicate_name} -> @@ -1303,7 +1310,7 @@ start_protos(Name, [Proto | Ps], Node, Ls) -> [Proto]), start_protos(Name,Ps, Node, Ls); {error, Reason} -> - error_logger:info_msg("Protocol: ~p: register/listen error: ~p~n", + error_logger:info_msg("Protocol: ~p: register/listen error: ~p~n", [Proto, Reason]), start_protos(Name,Ps, Node, Ls) end; @@ -1409,7 +1416,7 @@ reply_waiting(_Node, Waiting, Rep) -> reply_waiting1(lists:reverse(Waiting), Rep). reply_waiting1([From|W], Rep) -> - gen_server:reply(From, Rep), + async_gen_server_reply(From, Rep), reply_waiting1(W, Rep); reply_waiting1([], _) -> ok. @@ -1455,7 +1462,7 @@ display_info({Node, Info}, {I,O}) -> integer_to_list(In), integer_to_list(Out), Address), {I+In,O+Out}. -fmt_address(undefined) -> +fmt_address(undefined) -> "-"; fmt_address(A) -> case A#net_address.family of @@ -1511,3 +1518,19 @@ verbose(_, _, _) -> getnode(P) when is_pid(P) -> node(P); getnode(P) -> P. + +async_reply({reply, Msg, State}, From) -> + async_gen_server_reply(From, Msg), + {noreply, State}. + +async_gen_server_reply(From, Msg) -> + {Pid, Tag} = From, + M = {Tag, Msg}, + case catch erlang:send(Pid, M, [nosuspend, noconnect]) of + true -> + M; + false -> + spawn(fun() -> gen_server:reply(From, Msg) end); + EXIT -> + EXIT + end. diff --git a/lib/kernel/src/os.erl b/lib/kernel/src/os.erl index d0b498edc9..75a11a8afd 100644 --- a/lib/kernel/src/os.erl +++ b/lib/kernel/src/os.erl @@ -50,7 +50,7 @@ find_executable(Name, Path) -> relative -> find_executable1(Name, split_path(Path), Extensions); _ -> - case verify_executable(Name, Extensions) of + case verify_executable(Name, Extensions, Extensions) of {ok, Complete} -> Complete; error -> @@ -60,7 +60,7 @@ find_executable(Name, Path) -> find_executable1(Name, [Base|Rest], Extensions) -> Complete0 = filename:join(Base, Name), - case verify_executable(Complete0, Extensions) of + case verify_executable(Complete0, Extensions, Extensions) of {ok, Complete} -> Complete; error -> @@ -69,7 +69,7 @@ find_executable1(Name, [Base|Rest], Extensions) -> find_executable1(_Name, [], _Extensions) -> false. -verify_executable(Name0, [Ext|Rest]) -> +verify_executable(Name0, [Ext|Rest], OrigExtensions) -> Name1 = Name0 ++ Ext, case os:type() of vxworks -> @@ -78,7 +78,7 @@ verify_executable(Name0, [Ext|Rest]) -> {ok, _} -> {ok, Name1}; _ -> - verify_executable(Name0, Rest) + verify_executable(Name0, Rest, OrigExtensions) end; _ -> case file:read_file_info(Name1) of @@ -87,12 +87,30 @@ verify_executable(Name0, [Ext|Rest]) -> %% on Unix, since we test if any execution bit is set. {ok, Name1}; _ -> - verify_executable(Name0, Rest) + verify_executable(Name0, Rest, OrigExtensions) end end; -verify_executable(_, []) -> +verify_executable(Name, [], OrigExtensions) when OrigExtensions =/= [""] -> %% Windows + %% Will only happen on windows, hence case insensitivity + case can_be_full_name(string:to_lower(Name),OrigExtensions) of + true -> + verify_executable(Name,[""],[""]); + _ -> + error + end; +verify_executable(_, [], _) -> error. +can_be_full_name(_Name,[]) -> + false; +can_be_full_name(Name,[H|T]) -> + case lists:suffix(H,Name) of %% Name is in lowercase, cause this is a windows thing + true -> + true; + _ -> + can_be_full_name(Name,T) + end. + split_path(Path) -> case type() of {win32, _} -> @@ -119,6 +137,7 @@ reverse_element(List) -> lists:reverse(List). -spec extensions() -> [string()]. +%% Extensions in lower case extensions() -> case type() of {win32, _} -> [".exe",".com",".cmd",".bat"]; diff --git a/lib/kernel/test/os_SUITE.erl b/lib/kernel/test/os_SUITE.erl index 6a3534b094..ace9501d18 100644 --- a/lib/kernel/test/os_SUITE.erl +++ b/lib/kernel/test/os_SUITE.erl @@ -137,6 +137,13 @@ find_executable(Config) when is_list(Config) -> ?line find_exe(Abin, "my_ar", ".exe", Path), ?line find_exe(Abin, "my_ascii", ".com", Path), ?line find_exe(Abin, "my_adb", ".bat", Path), + %% OTP-3626 find names of executables given with extension + ?line find_exe(Abin, "my_ar.exe", "", Path), + ?line find_exe(Abin, "my_ascii.com", "", Path), + ?line find_exe(Abin, "my_adb.bat", "", Path), + ?line find_exe(Abin, "my_ar.EXE", "", Path), + ?line find_exe(Abin, "my_ascii.COM", "", Path), + ?line find_exe(Abin, "MY_ADB.BAT", "", Path), %% Search for programs in Abin (second element in PATH). ?line find_exe(Abin, "my_ar", ".exe", Path), diff --git a/lib/megaco/doc/src/megaco.xml b/lib/megaco/doc/src/megaco.xml index 0fb9d5aac6..ae9e250965 100644 --- a/lib/megaco/doc/src/megaco.xml +++ b/lib/megaco/doc/src/megaco.xml @@ -4,7 +4,7 @@ <erlref> <header> <copyright> - <year>2000</year><year>2009</year> + <year>2000</year><year>2010</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> @@ -13,12 +13,12 @@ compliance with the License. You should have received a copy of the Erlang Public License along with this software. If not, it can be retrieved online at http://www.erlang.org/. - + Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. - + </legalnotice> <title>megaco</title> @@ -40,6 +40,16 @@ <section> <title>DATA TYPES</title> <code type="none"><![CDATA[ +megaco_mid() = ip4Address() | ip6Address() | + domainName() | deviceName() | + mtpAddress() +ip4Address() = #'IP4Address'{} +ip6Address() = #'IP6Address'{} +domainName() = #'DomainName'{} +deviceName() = pathName() +pathName() = ia5String(1..64) +mtpAddress() = octetString(2..4) + action_request() = #'ActionRequest'{} action_reply() = #'ActionReply'{} error_desc() = #'ErrorDescriptor'{} diff --git a/lib/megaco/doc/src/notes.xml b/lib/megaco/doc/src/notes.xml index ab17dd50ca..99a3784402 100644 --- a/lib/megaco/doc/src/notes.xml +++ b/lib/megaco/doc/src/notes.xml @@ -66,6 +66,16 @@ <list type="bulleted"> <item> + <p>A raise condition when, during high load, processing + both the original and a resent message and delivering + this as two separate messages to the user. </p> + <p>Note that this solution only protects against multiple + reply deliveries! </p> + <p>Own Id: OTP-8529</p> + <p>Aux Id: Seq 10915</p> + </item> + + <item> <p>Fix shared libraries installation. </p> <p>The flex shared lib(s) were incorrectly installed as data files. </p> @@ -73,6 +83,13 @@ <p>Own Id: OTP-8627</p> </item> + <item> + <p>Eliminated a possible raise condition while creating + pending counters. </p> + <p>Own Id: OTP-8634</p> + <p>Aux Id: Seq 11579</p> + </item> + </list> </section> diff --git a/lib/megaco/src/app/megaco.appup.src b/lib/megaco/src/app/megaco.appup.src index 5df31f2923..f939f5e6cf 100644 --- a/lib/megaco/src/app/megaco.appup.src +++ b/lib/megaco/src/app/megaco.appup.src @@ -133,13 +133,16 @@ [ {"3.14", [ + {load_module, megaco_messenger, soft_purge, soft_purge, [megaco_monitor]}, + {update, megaco_monitor, soft, soft_purge, soft_purge, []}, {update, megaco_config, soft, soft_purge, soft_purge, []} ] }, {"3.13", [ - {load_module, megaco_messenger, soft_purge, soft_purge, []}, + {load_module, megaco_messenger, soft_purge, soft_purge, [megaco_monitor]}, {load_module, megaco_filter, soft_purge, soft_purge, []}, + {update, megaco_monitor, soft, soft_purge, soft_purge, []}, {update, megaco_config, soft, soft_purge, soft_purge, []}, {update, megaco_flex_scanner_handler, {advanced, downgrade_to_pre_3_13_1}, soft_purge, soft_purge, []} @@ -173,13 +176,16 @@ [ {"3.14", [ + {load_module, megaco_messenger, soft_purge, soft_purge, [megaco_monitor]}, + {update, megaco_monitor, soft, soft_purge, soft_purge, []}, {update, megaco_config, soft, soft_purge, soft_purge, []} ] }, {"3.13", [ - {load_module, megaco_messenger, soft_purge, soft_purge, []}, + {load_module, megaco_messenger, soft_purge, soft_purge, [megaco_monitor]}, {load_module, megaco_filter, soft_purge, soft_purge, []}, + {update, megaco_monitor, soft, soft_purge, soft_purge, []}, {update, megaco_config, soft, soft_purge, soft_purge, []}, {update, megaco_flex_scanner_handler, {advanced, upgrade_from_pre_3_13_1}, soft_purge, soft_purge, []} diff --git a/lib/megaco/src/app/megaco_internal.hrl b/lib/megaco/src/app/megaco_internal.hrl index adbaacacef..2c124e9060 100644 --- a/lib/megaco/src/app/megaco_internal.hrl +++ b/lib/megaco/src/app/megaco_internal.hrl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1999-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 1999-2010. All Rights Reserved. +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. -%% +%% %% %CopyrightEnd% %% @@ -139,6 +139,22 @@ [?APPLICATION, ?MODULE, self()|A]))). +-define(megaco_ereport(Label, Report), + ?megaco_report(error_report, Label, Report)). + +-define(megaco_wreport(Label, Report), + ?megaco_report(warning_report, Label, Report)). + +-define(megaco_ireport(Label, Report), + ?megaco_report(info_report, Label, Report)). + +-define(megaco_report(Func, Label, Report), + (catch error_logger:Func([{label, Label}, + {application, ?APPLICATION}, + {module, ?MODULE}, + {process, self()} | Report]))). + + %%%---------------------------------------------------------------------- %%% Default (ignore) value of the Extra argument to the %%% megaco:receive_message/5 and process_received_message functions/5. diff --git a/lib/megaco/src/engine/megaco_config.erl b/lib/megaco/src/engine/megaco_config.erl index 0445f10838..6805db790d 100644 --- a/lib/megaco/src/engine/megaco_config.erl +++ b/lib/megaco/src/engine/megaco_config.erl @@ -628,31 +628,19 @@ incr_counter(Item, Incr) -> end catch error:_ -> + %% Counter does not exist, so try creat it try begin cre_counter(Item, Incr) end catch exit:_ -> - %% Ok, some other process got there before us, - %% so try again + %% This is a raise condition. + %% When we tried to update the counter above, it + %% did not exist, but now it does... ets:update_counter(megaco_config, Item, Incr) end end. -%% incr_counter(Item, Incr) -> -%% case (catch ets:update_counter(megaco_config, Item, Incr)) of -%% {'EXIT', _} -> -%% case (catch cre_counter(Item, Incr)) of -%% {'EXIT', _} -> -%% %% Ok, some other process got there before us, -%% %% so try again -%% ets:update_counter(megaco_config, Item, Incr); -%% NewVal -> -%% NewVal -%% end; -%% NewVal -> -%% NewVal -%% end. cre_counter(Item, Initial) -> case whereis(?SERVER) =:= self() of @@ -660,8 +648,8 @@ cre_counter(Item, Initial) -> case call({cre_counter, Item, Initial}) of {ok, Value} -> Value; - Error -> - exit(Error) + {error, Reason} -> + exit({failed_creating_counter, Item, Initial, Reason}) end; true -> %% Check that the counter does not already exists @@ -671,7 +659,7 @@ cre_counter(Item, Initial) -> ets:insert(megaco_config, {Item, Initial}), {ok, Initial}; [_] -> - %% Ouch, now what? + %% Possibly a raise condition {error, already_exists} end diff --git a/lib/megaco/src/engine/megaco_messenger.erl b/lib/megaco/src/engine/megaco_messenger.erl index 5756e8e896..5fad29931b 100644 --- a/lib/megaco/src/engine/megaco_messenger.erl +++ b/lib/megaco/src/engine/megaco_messenger.erl @@ -1541,30 +1541,6 @@ check_pending_limit(Limit, Direction, TransId) -> aborted end. -%% check_pending_limit(infinity, _, _) -> -%% {ok, 0}; -%% check_pending_limit(Limit, Direction, TransId) -> -%% ?rt2("check pending limit", [Direction, Limit, TransId]), -%% case (catch megaco_config:get_pending_counter(Direction, TransId)) of -%% {'EXIT', _} -> -%% %% This function is only called when we "know" the -%% %% counter to exist. So, the only reason that this -%% %% would happen is of the counter has been removed. -%% %% This only happen if the pending limit has been -%% %% reached. In any case, this is basically the same -%% %% as aborted! -%% ?rt2("check pending limit - exit", []), -%% aborted; -%% Val when Val =< Limit -> -%% %% Since we have no intention to increment here, it -%% %% is ok to be _at_ the limit -%% ?rt2("check pending limit - ok", [Val]), -%% {ok, Val}; -%% _Val -> -%% ?rt2("check pending limit - aborted", [_Val]), -%% aborted -%% end. - check_and_maybe_incr_pending_limit(infinity, _, _) -> ok; @@ -1572,59 +1548,42 @@ check_and_maybe_incr_pending_limit(Limit, Direction, TransId) -> %% %% We need this kind of test to detect when we _pass_ the limit %% - ?rt2("check and maybe incr pending limit", [Direction, Limit, TransId]), + ?rt2("check and maybe incr pending limit", [{direction, Direction}, + {transaction_id, TransId}, + {counter_limit, Limit}]), try megaco_config:get_pending_counter(Direction, TransId) of Val when Val > Limit -> - ?rt2("check and maybe incr - aborted", [Direction, Val, Limit]), + ?rt2("check and maybe incr - aborted", [{counter_value, Val}]), aborted; % Already passed the limit Val -> - ?rt2("check and maybe incr - incr", [Direction, Val, Limit]), + ?rt2("check and maybe incr - incr", [{counter_value, Val}]), megaco_config:incr_pending_counter(Direction, TransId), if Val < Limit -> ok; % Still within the limit true -> ?rt2("check and maybe incr - error", - [Direction, Val, Limit]), + [{counter_value, Val}]), error % Passed the limit end catch _:_ -> %% Has not been created yet (connect). - megaco_config:cre_pending_counter(Direction, TransId, 1), - ok + %% Try create it, but bevare of possible raise condition + try + begin + megaco_config:cre_pending_counter(Direction, TransId, 1), + ok + end + catch + _:_ -> + %% Ouch, raise condition, increment instead... + megaco_config:incr_pending_counter(Direction, TransId), + ok + end end. -%% check_and_maybe_incr_pending_limit(infinity, _, _) -> -%% ok; -%% check_and_maybe_incr_pending_limit(Limit, Direction, TransId) -> -%% %% -%% %% We need this kind of test to detect when we _pass_ the limit -%% %% -%% ?rt2("check and maybe incr pending limit", [Direction, Limit, TransId]), -%% case (catch megaco_config:get_pending_counter(Direction, TransId)) of -%% {'EXIT', _} -> -%% %% Has not been created yet (connect). -%% megaco_config:cre_pending_counter(Direction, TransId, 1), -%% ok; -%% Val when Val > Limit -> -%% ?rt2("check and maybe incr - aborted", [Direction, Val, Limit]), -%% aborted; % Already passed the limit -%% Val -> -%% ?rt2("check and maybe incr - incr", [Direction, Val, Limit]), -%% megaco_config:incr_pending_counter(Direction, TransId), -%% if -%% Val < Limit -> -%% ok; % Still within the limit -%% true -> -%% ?rt2("check and maybe incr - error", -%% [Direction, Val, Limit]), -%% error % Passed the limit -%% end -%% end. - - %% BUGBUG BUGBUG BUGBUG %% %% Do we know that the Rep is still valid? A previous transaction @@ -2648,33 +2607,84 @@ handle_reply( handle_reply(#conn_data{conn_handle = CH} = CD, T, Extra) -> TransId = to_local_trans_id(CD), ?rt2("handle reply", [T, TransId]), - case megaco_monitor:lookup_request(TransId) of - [Req] when (is_record(Req, request) andalso - (CD#conn_data.cancel =:= true)) -> + case {megaco_monitor:request_lockcnt_inc(TransId), + megaco_monitor:lookup_request(TransId)} of + {_Cnt, [Req]} when (is_record(Req, request) andalso + (CD#conn_data.cancel =:= true)) -> ?TC_AWAIT_REPLY_EVENT(true), + ?report_trace(CD, "trans reply - cancel(1)", [T]), do_handle_reply_cancel(CD, Req, T); - [#request{remote_mid = RMid} = Req] when ((RMid =:= preliminary_mid) orelse - (RMid =:= CH#megaco_conn_handle.remote_mid)) -> + {Cnt, [#request{remote_mid = RMid} = Req]} when + ((Cnt =:= 1) andalso + ((RMid =:= preliminary_mid) orelse + (RMid =:= CH#megaco_conn_handle.remote_mid))) -> + ?TC_AWAIT_REPLY_EVENT(false), + %% Just in case conn_data got update after our lookup + %% but before we looked up the request record, we + %% check the cancel field again. + case megaco_config:conn_info(CD, cancel) of + true -> + ?report_trace(CD, "trans reply - cancel(2)", [T]), + megaco_monitor:request_lockcnt_del(TransId), + do_handle_reply_cancel(CD, Req, T); + false -> + ?report_trace(CD, "trans reply", [T]), + do_handle_reply(CD, Req, TransId, T, Extra) + end; + + {Cnt, [#request{remote_mid = RMid} = _Req]} when + (is_integer(Cnt) andalso + ((RMid =:= preliminary_mid) orelse + (RMid =:= CH#megaco_conn_handle.remote_mid))) -> + ?TC_AWAIT_REPLY_EVENT(false), + %% Ok, someone got there before me, now what? + %% This is a plain old raise condition + ?report_important(CD, "trans reply - raise condition", + [T, {request_lockcnt, Cnt}]), + megaco_monitor:request_lockcnt_dec(TransId); + + %% no counter + {_Cnt, [#request{remote_mid = RMid} = Req]} when + ((RMid =:= preliminary_mid) orelse + (RMid =:= CH#megaco_conn_handle.remote_mid)) -> ?TC_AWAIT_REPLY_EVENT(false), + %% The counter does not exist. + %% This can only mean a code upgrade raise condition. + %% That is, this request record was created before + %% this feature (the counters) was instroduced. + %% The simples solution is this is to behave exactly as + %% before, that is pass it along, and leave it to the + %% user to figure out. + %% Just in case conn_data got update after our lookup %% but before we looked up the request record, we %% check the cancel field again. + ?report_verbose(CD, "trans reply - old style", [T]), case megaco_config:conn_info(CD, cancel) of true -> + megaco_monitor:request_lockcnt_del(TransId), do_handle_reply_cancel(CD, Req, T); false -> do_handle_reply(CD, Req, TransId, T, Extra) end; - [#request{user_mod = UserMod, - user_args = UserArgs, - reply_action = Action, - reply_data = UserData, - remote_mid = RMid}] -> + {Cnt, [#request{user_mod = UserMod, + user_args = UserArgs, + reply_action = Action, + reply_data = UserData, + remote_mid = RMid}]} -> ?report_trace(CD, "received trans reply with invalid remote mid", - [T, RMid]), + [{transaction, T}, + {remote_mid, RMid}, + {request_lockcnt, Cnt}]), + if + is_integer(Cnt) -> + megaco_monitor:request_lockcnt_dec(TransId); + true -> + ok + end, WrongMid = CH#megaco_conn_handle.remote_mid, T2 = transform_transaction_reply_enc(CD#conn_data.protocol_version, T), @@ -2685,7 +2695,15 @@ handle_reply(#conn_data{conn_handle = CH} = CD, T, Extra) -> reply_data = UserData}, return_reply(CD2, TransId, UserReply, Extra); - [] -> + {Cnt, []} when is_integer(Cnt) -> + ?TC_AWAIT_REPLY_EVENT(undefined), + ?report_trace(CD, "trans reply (no receiver)", + [T, {request_lockcnt, Cnt}]), + megaco_monitor:request_lockcnt_dec(TransId), + return_unexpected_trans(CD, T, Extra); + + %% No counter + {_Cnt, []} -> ?TC_AWAIT_REPLY_EVENT(undefined), ?report_trace(CD, "trans reply (no receiver)", [T]), return_unexpected_trans(CD, T, Extra) @@ -2716,6 +2734,7 @@ do_handle_reply(CD, %% This is the first reply (maybe of many) megaco_monitor:delete_request(TransId), + megaco_monitor:request_lockcnt_del(TransId), megaco_monitor:cancel_apply_after(Ref), % OTP-4843 megaco_config:del_pending_counter(recv, TransId), % OTP-7189 @@ -3739,6 +3758,11 @@ insert_requests(ConnData, ConnHandle, insert_request(ConnData, ConnHandle, TransId, Action, Data, InitTimer, LongTimer) -> + %% We dont check the result of the lock-counter creation because + %% the only way it could already exist is if the transaction-id + %% range has wrapped and an old counter was not deleted. + megaco_monitor:request_lockcnt_cre(TransId), + #megaco_conn_handle{remote_mid = RemoteMid} = ConnHandle, #conn_data{protocol_version = Version, user_mod = UserMod, @@ -4323,6 +4347,7 @@ cancel_request(ConnData, Req, Reason) -> cancel_request2(ConnData, TransId, UserReply) -> megaco_monitor:delete_request(TransId), + megaco_monitor:request_lockcnt_del(TransId), megaco_config:del_pending_counter(recv, TransId), % OTP-7189 Serial = TransId#trans_id.serial, ConnData2 = ConnData#conn_data{serial = Serial}, @@ -4380,29 +4405,67 @@ receive_reply_remote(ConnData, UserReply) -> receive_reply_remote(ConnData, UserReply, Extra) -> TransId = to_local_trans_id(ConnData), - case (catch megaco_monitor:lookup_request(TransId)) of - [#request{timer_ref = {_Type, Ref}} = Req] -> %% OTP-4843 + case {megaco_monitor:request_lockcnt_inc(TransId), + (catch megaco_monitor:lookup_request(TransId))} of + {Cnt, [Req]} when (Cnt =:= 1) andalso is_record(Req, request) -> %% Don't care about Req and Rep version diff - megaco_monitor:delete_request(TransId), - megaco_monitor:cancel_apply_after(Ref), % OTP-4843 - megaco_config:del_pending_counter(recv, TransId), % OTP-7189 - - UserMod = Req#request.user_mod, - UserArgs = Req#request.user_args, - Action = Req#request.reply_action, - UserData = Req#request.reply_data, - ConnData2 = ConnData#conn_data{user_mod = UserMod, - user_args = UserArgs, - reply_action = Action, - reply_data = UserData}, - return_reply(ConnData2, TransId, UserReply, Extra); - + do_receive_reply_remote(ConnData, TransId, Req, UserReply, Extra); + + {Cnt, [Req]} when is_integer(Cnt) andalso is_record(Req, request) -> + %% Another process is accessing, handle as unexpected + %% (so it has a possibillity to get logged). + ?report_important(ConnData, "trans reply (no receiver)", + [{user_reply, UserReply}, + {request_lockcnt, Cnt}]), + megaco_monitor:request_lockcnt_dec(TransId), + return_unexpected_trans_reply(ConnData, TransId, UserReply, Extra); + + %% no counter + {_Cnt, [Req]} when is_record(Req, request) -> + %% The counter does not exist. + %% This can only mean a code upgrade raise condition. + %% That is, this request record was created before + %% this feature (the counters) was instroduced. + %% The simples solution to this is to behave exactly as + %% before, that is, pass it along, and leave it to the + %% user to figure out. + ?report_trace(ConnData, + "remote reply - " + "code upgrade raise condition", + [{user_reply, UserReply}]), + do_receive_reply_remote(ConnData, TransId, Req, UserReply, Extra); + + {Cnt, _} when is_integer(Cnt) -> + ?report_trace(ConnData, "trans reply (no receiver)", + [{user_reply, UserReply}, {request_lockcnt, Cnt}]), + megaco_monitor:request_lockcnt_dec(TransId), + return_unexpected_trans_reply(ConnData, TransId, UserReply, Extra); + _ -> ?report_trace(ConnData, "remote reply (no receiver)", - [UserReply]), + [{user_reply, UserReply}]), return_unexpected_trans_reply(ConnData, TransId, UserReply, Extra) end. +do_receive_reply_remote(ConnData, TransId, + #request{timer_ref = {_Type, Ref}, + user_mod = UserMod, + user_args = UserArgs, + reply_action = Action, + reply_data = UserData} = _Req, + UserReply, Extra) -> + megaco_monitor:delete_request(TransId), + megaco_monitor:request_lockcnt_del(TransId), + megaco_monitor:cancel_apply_after(Ref), % OTP-4843 + megaco_config:del_pending_counter(recv, TransId), % OTP-7189 + + ConnData2 = ConnData#conn_data{user_mod = UserMod, + user_args = UserArgs, + reply_action = Action, + reply_data = UserData}, + return_reply(ConnData2, TransId, UserReply, Extra). + + cancel_reply(ConnData, #reply{state = waiting_for_ack, user_mod = UserMod, user_args = UserArgs} = Rep, Reason) -> diff --git a/lib/megaco/src/engine/megaco_monitor.erl b/lib/megaco/src/engine/megaco_monitor.erl index f95a20cf58..29275371be 100644 --- a/lib/megaco/src/engine/megaco_monitor.erl +++ b/lib/megaco/src/engine/megaco_monitor.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2000-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 2000-2010. All Rights Reserved. +%% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. -%% +%% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. -%% +%% %% %CopyrightEnd% %% @@ -51,6 +51,11 @@ update_request_field/3, update_request_fields/2, delete_request/1, + request_lockcnt_cre/1, + request_lockcnt_del/1, + request_lockcnt_inc/1, + request_lockcnt_dec/1, + lookup_reply/1, lookup_reply_field/2, match_replies/1, @@ -115,6 +120,24 @@ update_request_fields(Key, NewFields) when is_list(NewFields) -> delete_request(Key) -> ets:delete(megaco_requests, Key). + +request_lockcnt_cre(TransId) -> + Key = {TransId, lockcnt}, + ets:insert_new(megaco_requests, {Key, 1}). + +request_lockcnt_del(TransId) -> + Key = {TransId, lockcnt}, + ets:delete(megaco_requests, Key). + +request_lockcnt_inc(TransId) -> + Key = {TransId, lockcnt}, + (catch ets:update_counter(megaco_requests, Key, 1)). + +request_lockcnt_dec(TransId) -> + Key = {TransId, lockcnt}, + (catch ets:update_counter(megaco_requests, Key, -1)). + + lookup_reply(Key) -> ets:lookup(megaco_replies, Key). diff --git a/lib/megaco/vsn.mk b/lib/megaco/vsn.mk index cf5957460d..cab3a1a4e0 100644 --- a/lib/megaco/vsn.mk +++ b/lib/megaco/vsn.mk @@ -19,10 +19,10 @@ APPLICATION = megaco MEGACO_VSN = 3.14.1 -PRE_VSN = +PRE_VSN =-p03 APP_VSN = "$(APPLICATION)-$(MEGACO_VSN)$(PRE_VSN)" -TICKETS = OTP-8561 OTP-8627 +TICKETS = OTP-8529 OTP-8561 OTP-8627 OTP-8634 TICKETS_3_14 = OTP-8317 OTP-8323 OTP-8328 OTP-8362 OTP-8403 diff --git a/lib/public_key/asn1/OTP-PKIX.asn1 b/lib/public_key/asn1/OTP-PKIX.asn1 index 2bcacc0990..c0cf440496 100644 --- a/lib/public_key/asn1/OTP-PKIX.asn1 +++ b/lib/public_key/asn1/OTP-PKIX.asn1 @@ -313,7 +313,7 @@ SupportedPublicKeyAlgorithms PUBLIC-KEY-ALGORITHM-CLASS ::= { dsa-with-sha1 SIGNATURE-ALGORITHM-CLASS ::= { ID id-dsa-with-sha1 - TYPE NULL } -- XXX Must be empty and not NULL + TYPE Dss-Parms } -- -- RSA Keys and Signatures diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl index 2764ea2e43..e3b6ffa125 100644 --- a/lib/ssh/src/ssh_cli.erl +++ b/lib/ssh/src/ssh_cli.erl @@ -327,7 +327,7 @@ window_change(Tty, OldTty, Buf) {[], Buf}; window_change(Tty, OldTty, {Buf, BufTail, Col}) -> M1 = move_cursor(Col, 0, OldTty), - N = max(Tty#ssh_pty.width - OldTty#ssh_pty.width, 0) * 2, + N = erlang:max(Tty#ssh_pty.width - OldTty#ssh_pty.width, 0) * 2, S = lists:reverse(Buf, [BufTail | lists:duplicate(N, $ )]), M2 = move_cursor(length(Buf) + length(BufTail) + N, Col, Tty), {[M1, S | M2], {Buf, BufTail, Col}}. @@ -398,10 +398,6 @@ nthtail(0, A) -> A; nthtail(N, [_ | A]) when N > 0 -> nthtail(N-1, A); nthtail(_, _) -> []. -%%% utils -max(A, B) when A > B -> A; -max(_A, B) -> B. - ifelse(Cond, A, B) -> case Cond of true -> A; diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl index 822ef8f8f9..d46002c494 100644 --- a/lib/ssh/src/ssh_connection_handler.erl +++ b/lib/ssh/src/ssh_connection_handler.erl @@ -527,7 +527,7 @@ handle_info({Protocol, Socket, Data}, Statename, %% Implementations SHOULD decrypt the length after receiving the %% first 8 (or cipher block size, whichever is larger) bytes of a %% packet. (RFC 4253: Section 6 - Binary Packet Protocol) - case size(EncData0) + size(Data) >= max(8, BlockSize) of + case size(EncData0) + size(Data) >= erlang:max(8, BlockSize) of true -> {Ssh, SshPacketLen, DecData, EncData} = @@ -758,11 +758,6 @@ after_new_keys(#state{renegotiate = false, ssh_params = #ssh{role = server}} = State) -> {userauth, State}. -max(N, M) when N > M -> - N; -max(_, M) -> - M. - handle_ssh_packet_data(RemainingSshPacketLen, DecData, EncData, StateName, State) -> EncSize = size(EncData), diff --git a/lib/stdlib/src/erl_expand_records.erl b/lib/stdlib/src/erl_expand_records.erl index a38b7639d8..18c467db81 100644 --- a/lib/stdlib/src/erl_expand_records.erl +++ b/lib/stdlib/src/erl_expand_records.erl @@ -95,8 +95,9 @@ forms([F | Fs0], St0) -> forms([], St) -> {[],St}. clauses([{clause,Line,H0,G0,B0} | Cs0], St0) -> - {H,St1} = head(H0, St0), - {G,St2} = guard(G0, St1), + {H1,St1} = head(H0, St0), + {G1,St2} = guard(G0, St1), + {H,G} = optimize_is_record(H1, G1), {B,St3} = exprs(B0, St2), {Cs,St4} = clauses(Cs0, St3), {[{clause,Line,H,G,B} | Cs],St4}; @@ -800,5 +801,132 @@ imported(F, A, St) -> error -> no end. +%%% +%%% Replace is_record/3 in guards with matching if possible. +%%% + +optimize_is_record(H0, G0) -> + case opt_rec_vars(G0) of + [] -> + {H0,G0}; + Rs0 -> + {H,Rs} = opt_pattern_list(H0, Rs0), + G = opt_remove(G0, Rs), + {H,G} + end. + + +%% opt_rec_vars(Guards) -> Vars. +%% Search through the guard expression, looking for +%% variables referenced in those is_record/3 calls that +%% will fail the entire guard if they evaluate to 'false' +%% +%% In the following code +%% +%% f(X, Y, Z) when is_record(X, r1) andalso +%% (is_record(Y, r2) orelse is_record(Z, r3)) +%% +%% the entire guard will be false if the record test for +%% X fails, and the clause can be rewritten to: +%% +%% f({r1,...}=X, Y, Z) when true andalso +%% (is_record(Y, r2) or is_record(Z, r3)) +%% +opt_rec_vars([G|Gs]) -> + Rs = opt_rec_vars_1(G, orddict:new()), + opt_rec_vars(Gs, Rs); +opt_rec_vars([]) -> orddict:new(). + +opt_rec_vars([G|Gs], Rs0) -> + Rs1 = opt_rec_vars_1(G, orddict:new()), + Rs = ordsets:intersection(Rs0, Rs1), + opt_rec_vars(Gs, Rs); +opt_rec_vars([], Rs) -> Rs. + +opt_rec_vars_1([T|Ts], Rs0) -> + Rs = opt_rec_vars_2(T, Rs0), + opt_rec_vars_1(Ts, Rs); +opt_rec_vars_1([], Rs) -> Rs. + +opt_rec_vars_2({op,_,'and',A1,A2}, Rs) -> + opt_rec_vars_1([A1,A2], Rs); +opt_rec_vars_2({op,_,'andalso',A1,A2}, Rs) -> + opt_rec_vars_1([A1,A2], Rs); +opt_rec_vars_2({op,_,'orelse',Arg,{atom,_,fail}}, Rs) -> + %% Since the second argument guarantees failure, + %% it is safe to inspect the first argument. + opt_rec_vars_2(Arg, Rs); +opt_rec_vars_2({call,_,{remote,_,{atom,_,erlang},{atom,_,is_record}}, + [{var,_,V},{atom,_,Tag},{integer,_,Sz}]}, Rs) -> + orddict:store(V, {Tag,Sz}, Rs); +opt_rec_vars_2({call,_,{atom,_,is_record}, + [{var,_,V},{atom,_,Tag},{integer,_,Sz}]}, Rs) -> + orddict:store(V, {Tag,Sz}, Rs); +opt_rec_vars_2(_, Rs) -> Rs. + +opt_pattern_list(Ps, Rs) -> + opt_pattern_list(Ps, Rs, []). + +opt_pattern_list([P0|Ps], Rs0, Acc) -> + {P,Rs} = opt_pattern(P0, Rs0), + opt_pattern_list(Ps, Rs, [P|Acc]); +opt_pattern_list([], Rs, Acc) -> + {reverse(Acc),Rs}. + +opt_pattern({var,_,V}=Var, Rs0) -> + case orddict:find(V, Rs0) of + {ok,{Tag,Sz}} -> + Rs = orddict:store(V, {remove,Tag,Sz}, Rs0), + {opt_var(Var, Tag, Sz),Rs}; + _ -> + {Var,Rs0} + end; +opt_pattern({cons,Line,H0,T0}, Rs0) -> + {H,Rs1} = opt_pattern(H0, Rs0), + {T,Rs} = opt_pattern(T0, Rs1), + {{cons,Line,H,T},Rs}; +opt_pattern({tuple,Line,Es0}, Rs0) -> + {Es,Rs} = opt_pattern_list(Es0, Rs0), + {{tuple,Line,Es},Rs}; +opt_pattern({match,Line,Pa0,Pb0}, Rs0) -> + {Pa,Rs1} = opt_pattern(Pa0, Rs0), + {Pb,Rs} = opt_pattern(Pb0, Rs1), + {{match,Line,Pa,Pb},Rs}; +opt_pattern(P, Rs) -> {P,Rs}. + +opt_var({var,Line,_}=Var, Tag, Sz) -> + Rp = record_pattern(2, -1, ignore, Sz, Line, [{atom,Line,Tag}]), + {match,Line,{tuple,Line,Rp},Var}. + +opt_remove(Gs, Rs) -> + [opt_remove_1(G, Rs) || G <- Gs]. + +opt_remove_1(Ts, Rs) -> + [opt_remove_2(T, Rs) || T <- Ts]. + +opt_remove_2({op,L,'and'=Op,A1,A2}, Rs) -> + {op,L,Op,opt_remove_2(A1, Rs),opt_remove_2(A2, Rs)}; +opt_remove_2({op,L,'andalso'=Op,A1,A2}, Rs) -> + {op,L,Op,opt_remove_2(A1, Rs),opt_remove_2(A2, Rs)}; +opt_remove_2({op,L,'orelse',A1,A2}, Rs) -> + {op,L,'orelse',opt_remove_2(A1, Rs),A2}; +opt_remove_2({call,Line,{remote,_,{atom,_,erlang},{atom,_,is_record}}, + [{var,_,V},{atom,_,Tag},{integer,_,Sz}]}=A, Rs) -> + case orddict:find(V, Rs) of + {ok,{remove,Tag,Sz}} -> + {atom,Line,true}; + _ -> + A + end; +opt_remove_2({call,Line,{atom,_,is_record}, + [{var,_,V},{atom,_,Tag},{integer,_,Sz}]}=A, Rs) -> + case orddict:find(V, Rs) of + {ok,{remove,Tag,Sz}} -> + {atom,Line,true}; + _ -> + A + end; +opt_remove_2(A, _) -> A. + neg_line(L) -> erl_parse:set_line(L, fun(Line) -> -abs(Line) end). diff --git a/lib/stdlib/src/erl_internal.erl b/lib/stdlib/src/erl_internal.erl index 2471c545dd..f78d8dc609 100644 --- a/lib/stdlib/src/erl_internal.erl +++ b/lib/stdlib/src/erl_internal.erl @@ -238,6 +238,7 @@ bif(binary_to_existing_atom, 2) -> true; bif(binary_to_list, 1) -> true; bif(binary_to_list, 3) -> true; bif(binary_to_term, 1) -> true; +bif(binary_to_term, 2) -> true; bif(bitsize, 1) -> true; bif(bit_size, 1) -> true; bif(bitstring_to_list, 1) -> true; diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl index 94ad560549..2cc5c6a5ac 100644 --- a/lib/stdlib/src/erl_lint.erl +++ b/lib/stdlib/src/erl_lint.erl @@ -242,10 +242,10 @@ format_error({untyped_record,T}) -> format_error({unbound_var,V}) -> io_lib:format("variable ~w is unbound", [V]); format_error({unsafe_var,V,{What,Where}}) -> - io_lib:format("variable ~w unsafe in ~w ~s", + io_lib:format("variable ~w unsafe in ~w ~s", [V,What,format_where(Where)]); format_error({exported_var,V,{What,Where}}) -> - io_lib:format("variable ~w exported from ~w ~s", + io_lib:format("variable ~w exported from ~w ~s", [V,What,format_where(Where)]); format_error({shadowed_var,V,In}) -> io_lib:format("variable ~w shadowed in ~w", [V,In]); @@ -296,16 +296,16 @@ format_error({unused_type, {TypeName, Arity}}) -> io_lib:format("type ~w~s is unused", [TypeName, gen_type_paren(Arity)]); format_error({new_builtin_type, {TypeName, Arity}}) -> io_lib:format("type ~w~s is a new builtin type; " - "its (re)definition is allowed only until the next release", + "its (re)definition is allowed only until the next release", [TypeName, gen_type_paren(Arity)]); format_error({builtin_type, {TypeName, Arity}}) -> - io_lib:format("type ~w~s is a builtin type; it cannot be redefined", + io_lib:format("type ~w~s is a builtin type; it cannot be redefined", [TypeName, gen_type_paren(Arity)]); format_error({renamed_type, OldName, NewName}) -> io_lib:format("type ~w() is now called ~w(); " "please use the new name instead", [OldName, NewName]); format_error({redefine_type, {TypeName, Arity}}) -> - io_lib:format("type ~w~s already defined", + io_lib:format("type ~w~s already defined", [TypeName, gen_type_paren(Arity)]); format_error({type_syntax, Constr}) -> io_lib:format("bad ~w type", [Constr]); @@ -354,7 +354,7 @@ pseudolocals() -> %% %% Used by erl_eval.erl to check commands. -%% +%% exprs(Exprs, BindingsList) -> exprs_opt(Exprs, BindingsList, []). @@ -362,7 +362,7 @@ exprs_opt(Exprs, BindingsList, Opts) -> {St0,Vs} = foldl(fun({{record,_SequenceNumber,_Name},Attr0}, {St1,Vs1}) -> Attr = zip_file_and_line(Attr0, "none"), {attribute_state(Attr, St1),Vs1}; - ({V,_}, {St1,Vs1}) -> + ({V,_}, {St1,Vs1}) -> {St1,[{V,{bound,unused,[]}} | Vs1]} end, {start("nofile",Opts),[]}, BindingsList), Vt = orddict:from_list(Vs), @@ -391,7 +391,7 @@ module(Forms) -> Opts = compiler_options(Forms), St = forms(Forms, start("nofile", Opts)), return_status(St). - + module(Forms, FileName) -> Opts = compiler_options(Forms), St = forms(Forms, start(FileName, Opts)), @@ -506,7 +506,7 @@ pack_errors(Es) -> %% Sort on line number. pack_warnings(Ws) -> - [{File,lists:sort([W || {F,W} <- Ws, F =:= File])} || + [{File,lists:sort([W || {F,W} <- Ws, F =:= File])} || File <- lists:usort([F || {F,_} <- Ws])]. %% add_error(ErrorDescriptor, State) -> State' @@ -516,13 +516,13 @@ pack_warnings(Ws) -> add_error(E, St) -> St#lint{errors=[{St#lint.file,E}|St#lint.errors]}. -add_error(FileLine, E, St) -> +add_error(FileLine, E, St) -> {File,Location} = loc(FileLine), add_error({Location,erl_lint,E}, St#lint{file = File}). add_warning(W, St) -> St#lint{warnings=[{St#lint.file,W}|St#lint.warnings]}. -add_warning(FileLine, W, St) -> +add_warning(FileLine, W, St) -> {File,Location} = loc(FileLine), add_warning({Location,erl_lint,W}, St#lint{file = File}). @@ -561,7 +561,7 @@ pre_scan([_ | Fs], St) -> pre_scan(Fs, St); pre_scan([], St) -> St. - + includes_qlc_hrl(Forms, St) -> %% QLC calls erl_lint several times, sometimes with the compile %% attribute removed. The file attribute, however, is left as is. @@ -735,12 +735,12 @@ is_bif_clash(Name, Arity, #lint{clashes=Clashes}) -> not_deprecated(Forms, St0) -> %% There are no line numbers in St0#lint.compile. - MFAsL = [{MFA,L} || + MFAsL = [{MFA,L} || {attribute, L, compile, Args} <- Forms, {nowarn_deprecated_function, MFAs0} <- lists:flatten([Args]), MFA <- lists:flatten([MFAs0])], Nowarn = [MFA || {MFA,_L} <- MFAsL], - Bad = [MFAL || {{M,F,A},_L}=MFAL <- MFAsL, + Bad = [MFAL || {{M,F,A},_L}=MFAL <- MFAsL, otp_internal:obsolete(M, F, A) =:= no], St1 = func_line_warning(bad_nowarn_deprecated_function, Bad, St0), St1#lint{not_deprecated = ordsets:from_list(Nowarn)}. @@ -862,7 +862,7 @@ check_deprecated(Forms, St0) -> Bad = [{E,L} || {attribute, L, deprecated, Depr} <- Forms, D <- lists:flatten([Depr]), E <- depr_cat(D, X, Mod)], - foldl(fun ({E,L}, St1) -> + foldl(fun ({E,L}, St1) -> add_error(L, E, St1) end, St0, Bad). @@ -912,7 +912,7 @@ check_imports(Forms, St0) -> true -> Usage = St0#lint.usage, Unused = ordsets:subtract(St0#lint.imports, Usage#usage.imported), - Imports = [{{FA,list_to_atom(package_to_string(Mod))},L} + Imports = [{{FA,list_to_atom(package_to_string(Mod))},L} || {attribute,L,import,{Mod,Fs}} <- Forms, FA <- lists:usort(Fs)], Bad = [{FM,L} || FM <- Unused, {FM2,L} <- Imports, FM =:= FM2], @@ -932,7 +932,7 @@ check_unused_functions(Forms, St0) -> Opts = St1#lint.compile, case member(export_all, Opts) orelse not is_warn_enabled(unused_function, St1) of - true -> + true -> St1; false -> Nowarn = nowarn_function(nowarn_unused_function, Opts), @@ -1008,7 +1008,7 @@ check_option_functions(Forms, Tag0, Type, St0) -> func_line_error(Type, Bad, St0). nowarn_function(Tag, Opts) -> - ordsets:from_list([FA || {Tag1,FAs} <- Opts, + ordsets:from_list([FA || {Tag1,FAs} <- Opts, Tag1 =:= Tag, FA <- lists:flatten([FAs])]). @@ -1048,10 +1048,10 @@ check_unused_records(Forms, St0) -> %% functions count. Usage = St0#lint.usage, UsedRecords = sets:to_list(Usage#usage.used_records), - URecs = foldl(fun (Used, Recs) -> - dict:erase(Used, Recs) + URecs = foldl(fun (Used, Recs) -> + dict:erase(Used, Recs) end, St0#lint.records, UsedRecords), - Unused = [{Name,FileLine} || + Unused = [{Name,FileLine} || {Name,{FileLine,_Fields}} <- dict:to_list(URecs), element(1, loc(FileLine)) =:= FirstFile], foldl(fun ({N,L}, St) -> @@ -1061,14 +1061,14 @@ check_unused_records(Forms, St0) -> St0 end. -%% For storing the import list we use the orddict module. +%% For storing the import list we use the orddict module. %% We know an empty set is []. %% export(Line, Exports, State) -> State. %% Mark functions as exported, also as called from the export line. export(Line, Es, #lint{exports = Es0, called = Called} = St0) -> - {Es1,C1,St1} = + {Es1,C1,St1} = foldl(fun (NA, {E,C,St2}) -> St = case gb_sets:is_element(NA, E) of true -> @@ -1196,7 +1196,7 @@ call_function(Line, F, A, #lint{usage=Usage0,called=Cd,func=Func}=St) -> is_function_exported(Name, Arity, #lint{exports=Exports,compile=Compile}) -> gb_sets:is_element({Name,Arity}, Exports) orelse member(export_all, Compile). - + %% function(Line, Name, Arity, Clauses, State) -> State. function(Line, instance, _Arity, _Cs, St) when St#lint.global_vt =/= [] -> @@ -1258,7 +1258,7 @@ head([P|Ps], Vt, Old, St0) -> {vtmerge_pat(Pvt, Psvt),vtmerge_pat(Bvt1,Bvt2),St2}; head([], _Vt, _Env, St) -> {[],[],St}. -%% pattern(Pattern, VarTable, Old, BinVarTable, State) -> +%% pattern(Pattern, VarTable, Old, BinVarTable, State) -> %% {UpdVarTable,BinVarTable,State}. %% Check pattern return variables. Old is the set of variables used for %% deciding whether an occurrence is a binding occurrence or a use, and @@ -1276,7 +1276,7 @@ pattern(P, Vt, St) -> pattern({var,_Line,'_'}, _Vt, _Old, _Bvt, St) -> {[],[],St}; %Ignore anonymous variable -pattern({var,Line,V}, _Vt, Old, Bvt, St) -> +pattern({var,Line,V}, _Vt, Old, Bvt, St) -> pat_var(V, Line, Old, Bvt, St); pattern({char,_Line,_C}, _Vt, _Old, _Bvt, St) -> {[],[],St}; pattern({integer,_Line,_I}, _Vt, _Old, _Bvt, St) -> {[],[],St}; @@ -1294,7 +1294,7 @@ pattern({tuple,_Line,Ps}, Vt, Old, Bvt, St) -> %%pattern({struct,_Line,_Tag,Ps}, Vt, Old, Bvt, St) -> %% pattern_list(Ps, Vt, Old, Bvt, St); pattern({record_index,Line,Name,Field}, _Vt, _Old, _Bvt, St) -> - {Vt1,St1} = + {Vt1,St1} = check_record(Line, Name, St, fun (Dfs, St1) -> pattern_field(Field, Name, Dfs, St1) @@ -1309,7 +1309,7 @@ pattern({record_field,Line,_,_}=M, _Vt, _Old, _Bvt, St0) -> end; pattern({record,Line,Name,Pfs}, Vt, Old, Bvt, St) -> case dict:find(Name, St#lint.records) of - {ok,{_Line,Fields}} -> + {ok,{_Line,Fields}} -> St1 = used_record(Name, St), pattern_fields(Pfs, Name, Fields, Vt, Old, Bvt, St1); error -> {[],[],add_error(Line, {undefined_record,Name}, St)} @@ -1369,7 +1369,7 @@ reject_bin_alias({cons,_,H1,T1}, {cons,_,H2,T2}, St0) -> reject_bin_alias(T1, T2, St); reject_bin_alias({tuple,_,Es1}, {tuple,_,Es2}, St) -> reject_bin_alias_list(Es1, Es2, St); -reject_bin_alias({record,_,Name1,Pfs1}, {record,_,Name2,Pfs2}, +reject_bin_alias({record,_,Name1,Pfs1}, {record,_,Name2,Pfs2}, #lint{records=Recs}=St) -> case {dict:find(Name1, Recs),dict:find(Name2, Recs)} of {{ok,{_Line1,Fields1}},{ok,{_Line2,Fields2}}} -> @@ -1451,7 +1451,7 @@ is_pattern_expr_1({op,_Line,Op,A1,A2}) -> erl_internal:arith_op(Op, 2) andalso all(fun is_pattern_expr/1, [A1,A2]); is_pattern_expr_1(_Other) -> false. -%% pattern_bin([Element], VarTable, Old, BinVarTable, State) -> +%% pattern_bin([Element], VarTable, Old, BinVarTable, State) -> %% {UpdVarTable,UpdBinVarTable,State}. %% Check a pattern group. BinVarTable are used binsize variables. @@ -1498,7 +1498,7 @@ good_string_size_type(default, Ts) -> end, Ts); good_string_size_type(_, _) -> false. -%% pat_bit_expr(Pattern, OldVarTable, BinVarTable,State) -> +%% pat_bit_expr(Pattern, OldVarTable, BinVarTable,State) -> %% {UpdVarTable,UpdBinVarTable,State}. %% Check pattern bit expression, only allow really valid patterns! @@ -1513,7 +1513,7 @@ pat_bit_expr(P, _Old, _Bvt, St) -> false -> {[],[],add_error(element(2, P), illegal_pattern, St)} end. -%% pat_bit_size(Size, VarTable, BinVarTable, State) -> +%% pat_bit_size(Size, VarTable, BinVarTable, State) -> %% {Value,UpdVarTable,UpdBinVarTable,State}. %% Check pattern size expression, only allow really valid sizes! @@ -1596,7 +1596,7 @@ bit_size_check(Line, Size, #bittype{type=Type,unit=Unit}, St) -> Sz = Unit * Size, %Total number of bits! St2 = elemtype_check(Line, Type, Sz, St), {Sz,St2}. - + elemtype_check(_Line, float, 32, St) -> St; elemtype_check(_Line, float, 64, St) -> St; elemtype_check(Line, float, _Size, St) -> @@ -1710,7 +1710,7 @@ gexpr({call,_Line,{atom,_Lr,is_record},[E,{atom,Ln,Name}]}, Vt, St0) -> gexpr({call,Line,{atom,_Lr,is_record},[E,R]}, Vt, St0) -> {Asvt,St1} = gexpr_list([E,R], Vt, St0), {Asvt,add_error(Line, illegal_guard_expr, St1)}; -gexpr({call,Line,{remote,_Lr,{atom,_Lm,erlang},{atom,Lf,is_record}},[E,A]}, +gexpr({call,Line,{remote,_Lr,{atom,_Lm,erlang},{atom,Lf,is_record}},[E,A]}, Vt, St0) -> gexpr({call,Line,{atom,Lf,is_record},[E,A]}, Vt, St0); gexpr({call,_Line,{atom,_Lr,is_record},[E,{atom,_,_Name},{integer,_,_}]}, @@ -1777,7 +1777,7 @@ is_guard_test(E) -> %% is_guard_test(Expression, Forms) -> boolean(). is_guard_test(Expression, Forms) -> RecordAttributes = [A || A = {attribute, _, record, _D} <- Forms], - St0 = foldl(fun(Attr0, St1) -> + St0 = foldl(fun(Attr0, St1) -> Attr = zip_file_and_line(Attr0, "none"), attribute_state(Attr, St1) end, start(), RecordAttributes), @@ -1798,7 +1798,7 @@ is_guard_test2(G, RDs) -> %% is_guard_expr(Expression) -> boolean(). %% Test if an expression is a guard expression. -is_guard_expr(E) -> is_gexpr(E, []). +is_guard_expr(E) -> is_gexpr(E, []). is_gexpr({var,_L,_V}, _RDs) -> true; is_gexpr({char,_L,_C}, _RDs) -> true; @@ -1820,7 +1820,7 @@ is_gexpr({record_field,_L,Rec,_Name,Field}, RDs) -> is_gexpr({record,L,Name,Inits}, RDs) -> is_gexpr_fields(Inits, L, Name, RDs); is_gexpr({bin,_L,Fs}, RDs) -> - all(fun ({bin_element,_Line,E,Sz,_Ts}) -> + all(fun ({bin_element,_Line,E,Sz,_Ts}) -> is_gexpr(E, RDs) and (Sz =:= default orelse is_gexpr(Sz, RDs)) end, Fs); is_gexpr({call,_L,{atom,_Lf,F},As}, RDs) -> @@ -1902,8 +1902,8 @@ expr({record_index,Line,Name,Field}, _Vt, St) -> fun (Dfs, St1) -> record_field(Field, Name, Dfs, St1) end); expr({record,Line,Name,Inits}, Vt, St) -> check_record(Line, Name, St, - fun (Dfs, St1) -> - init_fields(Inits, Line, Name, Dfs, Vt, St1) + fun (Dfs, St1) -> + init_fields(Inits, Line, Name, Dfs, Vt, St1) end); expr({record_field,Line,_,_}=M, _Vt, St0) -> case expand_package(M, St0) of @@ -1969,7 +1969,7 @@ expr({'fun',Line,Body}, Vt, St) -> expr({call,_Line,{atom,_Lr,is_record},[E,{atom,Ln,Name}]}, Vt, St0) -> {Rvt,St1} = expr(E, Vt, St0), {Rvt,exist_record(Ln, Name, St1)}; -expr({call,Line,{remote,_Lr,{atom,_Lm,erlang},{atom,Lf,is_record}},[E,A]}, +expr({call,Line,{remote,_Lr,{atom,_Lm,erlang},{atom,Lf,is_record}},[E,A]}, Vt, St0) -> expr({call,Line,{atom,Lf,is_record},[E,A]}, Vt, St0); expr({call,L,{tuple,Lt,[{atom,Lm,erlang},{atom,Lf,is_record}]},As}, Vt, St) -> @@ -1995,7 +1995,7 @@ expr({call,Line,{atom,La,F},As}, Vt, St0) -> case erl_internal:bif(F, A) of true -> St3 = deprecated_function(Line, erlang, F, As, St2), - {Asvt,case is_warn_enabled(bif_clash, St3) andalso + {Asvt,case is_warn_enabled(bif_clash, St3) andalso is_bif_clash(F, A, St3) of false -> St3; @@ -2155,7 +2155,7 @@ def_fields(Fs0, Name, St0) -> foldl(fun ({record_field,Lf,{atom,La,F},V}, {Fs,St}) -> case exist_field(F, Fs) of true -> {Fs,add_error(Lf, {redefine_field,Name,F}, St)}; - false -> + false -> St1 = St#lint{recdef_top = true}, {_,St2} = expr(V, [], St1), %% Warnings and errors found are kept, but @@ -2306,7 +2306,7 @@ init_fields(Ifs, Line, Name, Dfs, Vt0, St0) -> Defs = init_fields(Ifs, Line, Dfs), {_,St2} = check_fields(Defs, Name, Dfs, Vt1, St1, fun expr/3), {Vt1,St1#lint{usage = St2#lint.usage}}. - + ginit_fields(Ifs, Line, Name, Dfs, Vt0, St0) -> {Vt1,St1} = check_fields(Ifs, Name, Dfs, Vt0, St0, fun gexpr/3), Defs = init_fields(Ifs, Line, Dfs), @@ -2316,7 +2316,7 @@ ginit_fields(Ifs, Line, Name, Dfs, Vt0, St0) -> IllErrs = [E || {_File,{_Line,erl_lint,illegal_guard_expr}}=E <- Errors], St4 = St1#lint{usage = Usage, errors = IllErrs ++ St1#lint.errors}, {Vt1,St4}. - + %% Default initializations to be carried out init_fields(Ifs, Line, Dfs) -> [ {record_field,Lf,{atom,La,F},copy_expr(Di, Line)} || @@ -2394,7 +2394,7 @@ check_type({ann_type, _L, [_Var, Type]}, SeenVars, St) -> check_type(Type, SeenVars, St); check_type({paren_type, _L, [Type]}, SeenVars, St) -> check_type(Type, SeenVars, St); -check_type({remote_type, L, [{atom, _, Mod}, {atom, _, Name}, Args]}, +check_type({remote_type, L, [{atom, _, Mod}, {atom, _, Name}, Args]}, SeenVars, #lint{module=CurrentMod} = St) -> St1 = case (dict:is_key({Name, length(Args)}, default_types()) @@ -2432,7 +2432,7 @@ check_type({type, L, 'fun', [Dom, Range]}, SeenVars, St) -> check_type({type, -1, product, [Dom, Range]}, SeenVars, St1); check_type({type, L, range, [From, To]}, SeenVars, St) -> St1 = - case {From, To} of + case {erl_eval:partial_eval(From), erl_eval:partial_eval(To)} of {{integer, _, X}, {integer, _, Y}} when X < Y -> St; _ -> add_error(L, {type_syntax, range}, St) end, @@ -2441,8 +2441,8 @@ check_type({type, _L, tuple, any}, SeenVars, St) -> {SeenVars, St}; check_type({type, _L, any}, SeenVars, St) -> {SeenVars, St}; check_type({type, L, binary, [Base, Unit]}, SeenVars, St) -> St1 = - case {Base, Unit} of - {{integer, _, BaseVal}, + case {erl_eval:partial_eval(Base), erl_eval:partial_eval(Unit)} of + {{integer, _, BaseVal}, {integer, _, UnitVal}} when BaseVal >= 0, UnitVal >= 0 -> St; _ -> add_error(L, {type_syntax, binary}, St) end, @@ -2467,7 +2467,13 @@ check_type({type, La, TypeName, Args}, SeenVars, #lint{usage=Usage} = St) -> UsedTypes = dict:store({TypeName, Arity}, La, OldUsed), St#lint{usage=Usage#usage{used_types=UsedTypes}} end, - check_type({type, -1, product, Args}, SeenVars, St1). + check_type({type, -1, product, Args}, SeenVars, St1); +check_type(I, SeenVars, St) -> + case erl_eval:partial_eval(I) of + {integer,_ILn,_Integer} -> {SeenVars, St}; + _Other -> + {SeenVars, add_error(element(2, I), {type_syntax, integer}, St)} + end. check_record_types(Line, Name, Fields, SeenVars, St) -> case dict:find(Name, St#lint.records) of @@ -2475,12 +2481,12 @@ check_record_types(Line, Name, Fields, SeenVars, St) -> case lists:all(fun({type, _, field_type, _}) -> true; (_) -> false end, Fields) of - true -> + true -> check_record_types(Fields, Name, DefFields, SeenVars, St, []); false -> {SeenVars, add_error(Line, {type_syntax, record}, St)} end; - error -> + error -> {SeenVars, add_error(Line, {undefined_record, Name}, St)} end. @@ -2606,7 +2612,7 @@ spec_decl(Line, MFA0, TypeSpecs, St0 = #lint{specs = Specs, module = Mod}) -> check_specs([FunType|Left], Arity, St0) -> {FunType1, CTypes} = case FunType of - {type, _, bounded_fun, [FT = {type, _, 'fun', _}, Cs]} -> + {type, _, bounded_fun, [FT = {type, _, 'fun', _}, Cs]} -> Types0 = [T || {type, _, constraint, [_, T]} <- Cs], {FT, lists:append(Types0)}; {type, _, 'fun', _} = FT -> {FT, []} @@ -2679,7 +2685,7 @@ check_unused_types(Forms, St = #lint{usage=Usage, types=Types}) -> {FirstFile, _} -> case dict:is_key(Type, UsedTypes) of true -> AccSt; - false -> + false -> add_warning(FileLine, {unused_type, Type}, AccSt) @@ -2834,7 +2840,7 @@ fun_clause({clause,_Line,H,G,B}, Vt0, St0) -> %% %% used variable has been used %% unused variable has been bound but not used -%% +%% %% Lines is a list of line numbers where the variable was bound. %% %% Report variable errors/warnings as soon as possible and then change @@ -2864,9 +2870,9 @@ pat_var(V, Line, Vt, Bvt, St) -> case orddict:find(V, Bvt) of {ok, {bound,_Usage,Ls}} -> {[],[{V,{bound,used,Ls}}],St}; - error -> + error -> case orddict:find(V, Vt) of - {ok,{bound,_Usage,Ls}} -> + {ok,{bound,_Usage,Ls}} -> {[{V,{bound,used,Ls}}],[],St}; {ok,{{unsafe,In},_Usage,Ls}} -> {[{V,{bound,used,Ls}}],[], @@ -2919,7 +2925,7 @@ pat_binsize_var(V, Line, Vt, Bvt, St) -> expr_var(V, Line, Vt, St0) -> case orddict:find(V, Vt) of - {ok,{bound,_Usage,Ls}} -> + {ok,{bound,_Usage,Ls}} -> {[{V,{bound,used,Ls}}],St0}; {ok,{{unsafe,In},_Usage,Ls}} -> {[{V,{bound,used,Ls}}], @@ -2957,7 +2963,7 @@ check_old_unused_vars(Vt, Vt0, St0) -> warn_unused_vars(U, Vt, St0). unused_vars(Vt, Vt0, _St0) -> - U0 = orddict:filter(fun (V, {_State,unused,_Ls}) -> + U0 = orddict:filter(fun (V, {_State,unused,_Ls}) -> case atom_to_list(V) of "_"++_ -> false; _ -> true @@ -2973,7 +2979,7 @@ warn_unused_vars(U, Vt, St0) -> false -> St0; true -> foldl(fun ({V,{_,unused,Ls}}, St) -> - foldl(fun (L, St2) -> + foldl(fun (L, St2) -> add_warning(L, {unused_var,V}, St2) end, St, Ls) @@ -3073,7 +3079,7 @@ vt_no_unsafe(Vt) -> [V || {_,{S,_U,_L}}=V <- Vt, -ifdef(NOTUSED). vunion(Vs1, Vs2) -> ordsets:union(vtnames(Vs1), vtnames(Vs2)). -vunion(Vss) -> foldl(fun (Vs, Uvs) -> +vunion(Vss) -> foldl(fun (Vs, Uvs) -> ordsets:union(vtnames(Vs), Uvs) end, [], Vss). @@ -3103,7 +3109,7 @@ modify_line(T, F0) -> %% Forms. modify_line1({function,F,A}, _Mf) -> {function,F,A}; modify_line1({function,M,F,A}, _Mf) -> {function,M,F,A}; -modify_line1({attribute,L,record,{Name,Fields}}, Mf) -> +modify_line1({attribute,L,record,{Name,Fields}}, Mf) -> {attribute,Mf(L),record,{Name,modify_line1(Fields, Mf)}}; modify_line1({attribute,L,spec,{Fun,Types}}, Mf) -> {attribute,Mf(L),spec,{Fun,modify_line1(Types, Mf)}}; @@ -3118,7 +3124,7 @@ modify_line1({warning,W}, _Mf) -> {warning,W}; modify_line1({error,W}, _Mf) -> {error,W}; %% Expressions. modify_line1({clauses,Cs}, Mf) -> {clauses,modify_line1(Cs, Mf)}; -modify_line1({typed_record_field,Field,Type}, Mf) -> +modify_line1({typed_record_field,Field,Type}, Mf) -> {typed_record_field,modify_line1(Field, Mf),modify_line1(Type, Mf)}; modify_line1({Tag,L}, Mf) -> {Tag,Mf(L)}; modify_line1({Tag,L,E1}, Mf) -> @@ -3154,7 +3160,7 @@ check_record_info_call(Line,_La,_As,St) -> has_wildcard_field([{record_field,_Lf,{var,_La,'_'},_Val}|_Fs]) -> true; has_wildcard_field([_|Fs]) -> has_wildcard_field(Fs); has_wildcard_field([]) -> false. - + %% check_remote_function(Line, ModuleName, FuncName, [Arg], State) -> State. %% Perform checks on known remote calls. @@ -3170,7 +3176,7 @@ check_remote_function(Line, M, F, As, St0) -> check_qlc_hrl(Line, M, F, As, St) -> Arity = length(As), case As of - [{lc,_L,_E,_Qs}|_] when M =:= qlc, F =:= q, + [{lc,_L,_E,_Qs}|_] when M =:= qlc, F =:= q, Arity < 3, not St#lint.xqlc -> add_warning(Line, {missing_qlc_hrl, Arity}, St); _ -> @@ -3355,11 +3361,11 @@ extract_sequence(3, [$.,_|Fmt], Need) -> extract_sequence(4, Fmt, Need); extract_sequence(3, Fmt, Need) -> extract_sequence(4, Fmt, Need); -extract_sequence(4, [$t, $c | Fmt], Need) -> - extract_sequence(5, [$c|Fmt], Need); -extract_sequence(4, [$t, $s | Fmt], Need) -> - extract_sequence(5, [$s|Fmt], Need); -extract_sequence(4, [$t, C | _Fmt], _Need) -> +extract_sequence(4, [$t, $c | Fmt], Need) -> + extract_sequence(5, [$c|Fmt], Need); +extract_sequence(4, [$t, $s | Fmt], Need) -> + extract_sequence(5, [$s|Fmt], Need); +extract_sequence(4, [$t, C | _Fmt], _Need) -> {error,"invalid control ~t" ++ [C]}; extract_sequence(4, Fmt, Need) -> extract_sequence(5, Fmt, Need); diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl index 141ee18afd..bb4b18cf9b 100644 --- a/lib/stdlib/src/erl_parse.yrl +++ b/lib/stdlib/src/erl_parse.yrl @@ -47,7 +47,7 @@ opt_bit_size_expr bit_size_expr opt_bit_type_list bit_type_list bit_type top_type top_type_100 top_types type typed_expr typed_attr_val type_sig type_sigs type_guard type_guards fun_type fun_type_100 binary_type type_spec spec_fun typed_exprs typed_record_fields field_types field_type -bin_base_type bin_unit_type int_type. +bin_base_type bin_unit_type type_200 type_300 type_400 type_500. Terminals char integer float atom string var @@ -120,8 +120,24 @@ top_types -> top_type ',' top_types : ['$1'|'$3']. top_type -> var '::' top_type_100 : {ann_type, ?line('$1'), ['$1','$3']}. top_type -> top_type_100 : '$1'. -top_type_100 -> type : '$1'. -top_type_100 -> type '|' top_type_100 : lift_unions('$1','$3'). +top_type_100 -> type_200 : '$1'. +top_type_100 -> type_200 '|' top_type_100 : lift_unions('$1','$3'). + +type_200 -> type_300 '..' type_300 : {type, ?line('$1'), range, + [skip_paren('$1'), + skip_paren('$3')]}. +type_200 -> type_300 : '$1'. + +type_300 -> type_300 add_op type_400 : ?mkop2(skip_paren('$1'), + '$2', skip_paren('$3')). +type_300 -> type_400 : '$1'. + +type_400 -> type_400 mult_op type_500 : ?mkop2(skip_paren('$1'), + '$2', skip_paren('$3')). +type_400 -> type_500 : '$1'. + +type_500 -> prefix_op type : ?mkop1('$1', skip_paren('$2')). +type_500 -> type : '$1'. type -> '(' top_type ')' : {paren_type, ?line('$2'), ['$2']}. type -> var : '$1'. @@ -143,16 +159,10 @@ type -> '#' atom '{' '}' : {type, ?line('$1'), record, ['$2']}. type -> '#' atom '{' field_types '}' : {type, ?line('$1'), record, ['$2'|'$4']}. type -> binary_type : '$1'. -type -> int_type : '$1'. -type -> int_type '..' int_type : {type, ?line('$1'), range, - ['$1', '$3']}. +type -> integer : '$1'. type -> 'fun' '(' ')' : {type, ?line('$1'), 'fun', []}. type -> 'fun' '(' fun_type_100 ')' : '$3'. -int_type -> integer : '$1'. -int_type -> '-' integer : abstract(-normalise('$2'), - ?line('$2')). - fun_type_100 -> '(' '...' ')' '->' top_type : {type, ?line('$1'), 'fun', [{type, ?line('$1'), any}, '$5']}. @@ -180,9 +190,9 @@ binary_type -> '<<' bin_unit_type '>>' : {type, ?line('$1'),binary, binary_type -> '<<' bin_base_type ',' bin_unit_type '>>' : {type, ?line('$1'), binary, ['$2', '$4']}. -bin_base_type -> var ':' integer : build_bin_type(['$1'], '$3'). +bin_base_type -> var ':' type : build_bin_type(['$1'], '$3'). -bin_unit_type -> var ':' var '*' integer : build_bin_type(['$1', '$3'], '$5'). +bin_unit_type -> var ':' var '*' type : build_bin_type(['$1', '$3'], '$5'). attr_val -> expr : ['$1']. attr_val -> expr ',' exprs : ['$1' | '$3']. @@ -607,6 +617,11 @@ lift_unions(T1, {type, _La, union, List}) -> lift_unions(T1, T2) -> {type, ?line(T1), union, [T1, T2]}. +skip_paren({paren_type,_L,[Type]}) -> + skip_paren(Type); +skip_paren(Type) -> + Type. + build_gen_type({atom, La, tuple}) -> {type, La, tuple, any}; build_gen_type({atom, La, Name}) -> @@ -615,7 +630,7 @@ build_gen_type({atom, La, Name}) -> build_bin_type([{var, _, '_'}|Left], Int) -> build_bin_type(Left, Int); build_bin_type([], Int) -> - Int; + skip_paren(Int); build_bin_type([{var, La, _}|_], _) -> ret_err(La, "Bad binary type"). diff --git a/lib/stdlib/src/erl_pp.erl b/lib/stdlib/src/erl_pp.erl index 0859bf0466..df4a20b833 100644 --- a/lib/stdlib/src/erl_pp.erl +++ b/lib/stdlib/src/erl_pp.erl @@ -115,7 +115,7 @@ lattribute({attribute,_Line,Name,Arg}, Hook) -> lattribute(module, {M,Vs}, _Hook) -> attr("module",[{var,0,pname(M)}, - foldr(fun(V, C) -> {cons,0,{var,0,V},C} + foldr(fun(V, C) -> {cons,0,{var,0,V},C} end, {nil,0}, Vs)]); lattribute(module, M, _Hook) -> attr("module", [{var,0,pname(M)}]); @@ -140,7 +140,7 @@ typeattr(Tag, {TypeName,Type,Args}, _Hook) -> ltype({ann_type,_Line,[V,T]}) -> typed(lexpr(V, none), T); ltype({paren_type,_Line,[T]}) -> - [$(,ltype(T),$)]; + [$(,ltype(T),$)]; ltype({type,_Line,union,Ts}) -> {seq,[],[],[' |'],ltypes(Ts)}; ltype({type,_Line,list,[T]}) -> @@ -153,7 +153,7 @@ ltype({type,Line,tuple,any}) -> simple_type({atom,Line,tuple}, []); ltype({type,_Line,tuple,Ts}) -> tuple_type(Ts, fun ltype/1); -ltype({type,_Line,record,[N|Fs]}) -> +ltype({type,_Line,record,[{atom,_,N}|Fs]}) -> record_type(N, Fs); ltype({type,_Line,range,[_I1,_I2]=Es}) -> expr_list(Es, '..', fun lexpr/2, none); @@ -174,12 +174,15 @@ ltype({atom,_,T}) -> ltype(E) -> lexpr(E, 0, none). -binary_type({integer,_,Int1}=I1, {integer,_,Int2}=I2) -> - E1 = [[leaf("_:"),lexpr(I1, 0, none)] || Int1 =/= 0], - E2 = [[leaf("_:_*"),lexpr(I2, 0, none)] || Int2 =/= 0], +binary_type(I1, I2) -> + B = [[] || {integer,_,0} <- [I1]] =:= [], + U = [[] || {integer,_,0} <- [I2]] =:= [], + P = max_prec(), + E1 = [[leaf("_:"),lexpr(I1, P, none)] || B], + E2 = [[leaf("_:_*"),lexpr(I2, P, none)] || U], {seq,'<<','>>',[$,],E1++E2}. -record_type({atom,_,Name}, Fields) -> +record_type(Name, Fields) -> {first,[record_name(Name)],field_types(Fields)}. field_types(Fs) -> @@ -443,7 +446,7 @@ lexpr({op,_,Op,Arg}, Prec, Hook) -> Ol = leaf(format("~s ", [Op])), El = [Ol,lexpr(Arg, R, Hook)], maybe_paren(P, Prec, El); -lexpr({op,_,Op,Larg,Rarg}, Prec, Hook) when Op =:= 'orelse'; +lexpr({op,_,Op,Larg,Rarg}, Prec, Hook) when Op =:= 'orelse'; Op =:= 'andalso' -> %% Breaks lines since R12B. {L,P,R} = inop_prec(Op), @@ -727,15 +730,15 @@ frmt(Item, I) -> %%% and indentation are inserted between IPs. %%% - {first,I,IP2}: IP2 follows after I, and is output with an indentation %%% updated with the width of I. -%%% - {seq,Before,After,Separator,IPs}: a sequence of Is separated by -%%% Separator. Before is output before IPs, and the indentation of IPs +%%% - {seq,Before,After,Separator,IPs}: a sequence of Is separated by +%%% Separator. Before is output before IPs, and the indentation of IPs %%% is updated with the width of Before. After follows after IPs. %%% - {force_nl,ExtraInfo,I}: fun-info (a comment) forces linebreak before I. %%% - {prefer_nl,Sep,IPs}: forces linebreak between Is unlesss negative %%% indentation. %%% - {string,S}: a string. %%% - {hook,...}, {ehook,...}: hook expressions. -%%% +%%% %%% list, first, seq, force_nl, and prefer_nl all accept IPs, where each %%% element is either an item or a tuple {step|cstep,I1,I2}. step means %%% that I2 is output after linebreak and an incremented indentation. @@ -761,7 +764,7 @@ f({seq,Before,After,Sep,LItems}, I0, ST, WT) -> {CharsL,SizeL} = unz(CharsSizeL), {BCharsL,BSizeL} = unz1([BCharsSize]), Sizes = BSizeL ++ SizeL, - NSepChars = if + NSepChars = if is_list(Sep), Sep =/= [] -> erlang:max(0, length(CharsL)-1); true -> @@ -876,7 +879,7 @@ nl_indent(I, T) when I > 0 -> [$\n|spaces(I, T)]. same_line(I0, SizeL, NSepChars) -> - try + try Size = lists:sum(SizeL) + NSepChars, true = incr(I0, Size) =< ?MAXLINE, {yes,Size} @@ -956,9 +959,9 @@ write_a_string(S, N, Len) -> -define(N_SPACES, 30). spacetab() -> - {[_|L],_} = mapfoldl(fun(_, A) -> {A,[$\s|A]} + {[_|L],_} = mapfoldl(fun(_, A) -> {A,[$\s|A]} end, [], lists:seq(0, ?N_SPACES)), - list_to_tuple(L). + list_to_tuple(L). spaces(N, T) when N =< ?N_SPACES -> element(N, T); @@ -966,7 +969,7 @@ spaces(N, T) -> [element(?N_SPACES, T)|spaces(N-?N_SPACES, T)]. wordtable() -> - L = [begin {leaf,Sz,S} = leaf(W), {S,Sz} end || + L = [begin {leaf,Sz,S} = leaf(W), {S,Sz} end || W <- [" ->"," =","<<",">>","[]","after","begin","case","catch", "end","fun","if","of","receive","try","when"," ::","..", " |"]], diff --git a/lib/stdlib/test/erl_pp_SUITE.erl b/lib/stdlib/test/erl_pp_SUITE.erl index 66730b7b94..c57541fba9 100644 --- a/lib/stdlib/test/erl_pp_SUITE.erl +++ b/lib/stdlib/test/erl_pp_SUITE.erl @@ -46,7 +46,7 @@ neg_indent/1, tickets/1, otp_6321/1, otp_6911/1, otp_6914/1, otp_8150/1, otp_8238/1, - otp_8473/1, otp_8522/1, otp_8567/1]). + otp_8473/1, otp_8522/1, otp_8567/1, otp_8664/1]). %% Internal export. -export([ehook/6]). @@ -765,7 +765,7 @@ neg_indent(Config) when is_list(Config) -> tickets(suite) -> [otp_6321, otp_6911, otp_6914, otp_8150, otp_8238, otp_8473, otp_8522, - otp_8567]. + otp_8567, otp_8664]. otp_6321(doc) -> "OTP_6321. Bug fix of exprs()."; @@ -995,6 +995,38 @@ otp_8567(Config) when is_list(Config) -> ok. +otp_8664(doc) -> + "OTP_8664. Types with integer expressions."; +otp_8664(suite) -> []; +otp_8664(Config) when is_list(Config) -> + FileName = filename('otp_8664.erl', Config), + C1 = <<"-module(otp_8664).\n" + "-export([t/0]).\n" + "-define(A, -3).\n" + "-define(B, (?A*(-1 band (((2)))))).\n" + "-type t1() :: ?B | ?A.\n" + "-type t2() :: ?B-1 .. -?B.\n" + "-type t3() :: 9 band (8 - 3) | 1+2 | 5 band 3.\n" + "-type b1() :: <<_:_*(3-(-1))>>\n" + " | <<_:(-(?B))>>\n" + " | <<_:4>>.\n" + "-type u() :: 1 .. 2 | 3.. 4 | (8-3) ..6 | 5+0..6.\n" + "-type t() :: t1() | t2() | t3() | b1() | u().\n" + "-spec t() -> t().\n" + "t() -> 3.\n">>, + ?line ok = file:write_file(FileName, C1), + ?line {ok, _, []} = compile:file(FileName, [return]), + + C2 = <<"-module(otp_8664).\n" + "-export([t/0]).\n" + "-spec t() -> 9 and 4.\n" + "t() -> 0.\n">>, + ?line ok = file:write_file(FileName, C2), + ?line {error,[{_,[{3,erl_lint,{type_syntax,integer}}]}],_} = + compile:file(FileName, [return]), + + ok. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% compile(Config, Tests) -> diff --git a/lib/stdlib/test/qlc_SUITE.erl b/lib/stdlib/test/qlc_SUITE.erl index aa12ed57da..e21de8770a 100644 --- a/lib/stdlib/test/qlc_SUITE.erl +++ b/lib/stdlib/test/qlc_SUITE.erl @@ -3184,7 +3184,9 @@ lookup2(Config) when is_list(Config) -> [] = qlc:e(Q), false = lookup_keys(Q) end, [{1,b},{2,3}])">>, - {warnings,[{{3,48},qlc,nomatch_filter}]}}, + {warnings,[{2,sys_core_fold,nomatch_guard}, + {3,qlc,nomatch_filter}, + {3,sys_core_fold,{eval_failure,badarg}}]}}, <<"etsc(fun(E) -> Q = qlc:q([X || {X} <- ets:table(E), element(1,{X}) =:= 1]), diff --git a/lib/tools/emacs/Makefile b/lib/tools/emacs/Makefile index 0028df247c..8533488463 100644 --- a/lib/tools/emacs/Makefile +++ b/lib/tools/emacs/Makefile @@ -42,6 +42,7 @@ EMACS_FILES= \ erlang_appwiz \ erlang-start \ erlang-eunit \ + erlang-flymake \ erlang README_FILES= README diff --git a/lib/tools/emacs/README b/lib/tools/emacs/README index ca068d04c4..cc107dcd41 100644 --- a/lib/tools/emacs/README +++ b/lib/tools/emacs/README @@ -42,7 +42,14 @@ Files\erl-<Ver>: (setq erlang-root-dir "C:/Program Files/erl<Ver>") (setq exec-path (cons "C:/Program Files/erl<Ver>/bin" exec-path)) (require 'erlang-start) - +Miscellaneous addons +-------------------- + +In order to check erlang source code on the fly, add the following +line to your .emacs file (after erlang-start, see above). See +erlang-flymake.el for more information on how to customize the syntax +check. + (require 'erlang-flymake) diff --git a/lib/tools/emacs/erlang-flymake.el b/lib/tools/emacs/erlang-flymake.el new file mode 100644 index 0000000000..bc368e9454 --- /dev/null +++ b/lib/tools/emacs/erlang-flymake.el @@ -0,0 +1,102 @@ +;; erlang-flymake.el +;; +;; Syntax check erlang source code on the fly (integrates with flymake). +;; +;; Start using flymake with erlang by putting the following somewhere +;; in your .emacs file: +;; +;; (require 'erlang-flymake) +;; +;; Flymake is rather eager and does its syntax checks frequently by +;; default and if you are bothered by this, you might want to put the +;; following in your .emacs as well: +;; +;; (erlang-flymake-only-on-save) +;; +;; There are a couple of variables which control the compilation options: +;; * erlang-flymake-get-code-path-dirs-function +;; * erlang-flymake-get-include-dirs-function +;; * erlang-flymake-extra-opts +;; +;; This code is inspired by http://www.emacswiki.org/emacs/FlymakeErlang. + +(require 'flymake) +(eval-when-compile + (require 'cl)) + +(defvar erlang-flymake-command + "erlc" + "The command that will be used to perform the syntax check") + +(defvar erlang-flymake-get-code-path-dirs-function + 'erlang-flymake-get-code-path-dirs + "Return a list of ebin directories to add to the code path.") + +(defvar erlang-flymake-get-include-dirs-function + 'erlang-flymake-get-include-dirs + "Return a list of include directories to add to the compiler options.") + +(defvar erlang-flymake-extra-opts + (list "+warn_obsolete_guard" + "+warn_unused_import" + "+warn_shadow_vars" + "+warn_export_vars" + "+strong_validation" + "+report") + "A list of options that will be passed to the compiler") + +(defun erlang-flymake-only-on-save () + "Trigger flymake only when the buffer is saved (disables syntax +check on newline and when there are no changes)." + (interactive) + ;; There doesn't seem to be a way of disabling this; set to the + ;; largest int available as a workaround (most-positive-fixnum + ;; equates to 8.5 years on my machine, so it ought to be enough ;-) ) + (setq flymake-no-changes-timeout most-positive-fixnum) + (setq flymake-start-syntax-check-on-newline nil)) + + +(defun erlang-flymake-get-code-path-dirs () + (list (concat (erlang-flymake-get-app-dir) "ebin"))) + +(defun erlang-flymake-get-include-dirs () + (list (concat (erlang-flymake-get-app-dir) "include"))) + +(defun erlang-flymake-get-app-dir () + (let ((src-path (file-name-directory (buffer-file-name)))) + (file-name-directory (directory-file-name src-path)))) + +(defun erlang-flymake-init () + (let* ((temp-file + (flet ((flymake-get-temp-dir () (erlang-flymake-temp-dir))) + (flymake-init-create-temp-buffer-copy + 'flymake-create-temp-with-folder-structure))) + (code-dir-opts + (erlang-flymake-flatten + (mapcar (lambda (dir) (list "-pa" dir)) + (funcall erlang-flymake-get-code-path-dirs-function)))) + (inc-dir-opts + (erlang-flymake-flatten + (mapcar (lambda (dir) (list "-I" dir)) + (funcall erlang-flymake-get-include-dirs-function)))) + (compile-opts + (append inc-dir-opts + code-dir-opts + erlang-flymake-extra-opts))) + (list erlang-flymake-command (append compile-opts (list temp-file))))) + +(defun erlang-flymake-temp-dir () + ;; Squeeze the user's name in there in order to make sure that files + ;; for two users who are working on the same computer (like a linux + ;; box) don't collide + (format "%s/flymake-%s" temporary-file-directory user-login-name)) + +(defun erlang-flymake-flatten (list) + (apply #'append list)) + +(add-to-list 'flymake-allowed-file-name-masks + '("\\.erl\\'" erlang-flymake-init)) +(add-hook 'erlang-mode-hook 'flymake-mode) + +(provide 'erlang-flymake) +;; erlang-flymake ends here diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el index c31f76025e..91acfdf2b6 100644 --- a/lib/tools/emacs/erlang.el +++ b/lib/tools/emacs/erlang.el @@ -659,24 +659,30 @@ resulting regexp is surrounded by \\_< and \\_>." (eval-and-compile (defconst erlang-guards-regexp (erlang-regexp-opt erlang-guards 'symbols))) - (eval-and-compile (defvar erlang-predefined-types '("any" "arity" + "boolean" "byte" "char" "cons" "deep_string" + "iolist" "maybe_improper_list" + "module" "mfa" "nil" + "neg_integer" "none" "non_neg_integer" "nonempty_list" "nonempty_improper_list" "nonempty_maybe_improper_list" + "no_return" + "pos_integer" "string" + "term" "timeout") "Erlang type specs types")) @@ -2484,9 +2490,10 @@ Value is list (stack token-start token-type in-what)." ((looking-at "\\(of\\)[^_a-zA-Z0-9]") ;; Must handle separately, try X of -> catch (if (and stack (eq (car (car stack)) 'try)) - (let ((try-column (nth 2 (car stack)))) + (let ((try-column (nth 2 (car stack))) + (try-pos (nth 1 (car stack)))) (erlang-pop stack) - (erlang-push (list 'icr token try-column) stack)))) + (erlang-push (list 'icr try-pos try-column) stack)))) ((looking-at "\\(fun\\)[^_a-zA-Z0-9]") ;; Push a new layer if we are defining a `fun' @@ -2747,7 +2754,7 @@ Return nil if inside string, t if in a comment." ;; ;; `after' should be indented to the same level as the ;; corresponding receive. - (cond ((looking-at "\\(after\\|catch\\|of\\)\\($\\|[^_a-zA-Z0-9]\\)") + (cond ((looking-at "\\(after\\|of\\)\\($\\|[^_a-zA-Z0-9]\\)") (nth 2 stack-top)) ((looking-at "when[^_a-zA-Z0-9]") ;; Handling one when part @@ -2766,7 +2773,7 @@ Return nil if inside string, t if in a comment." ((and (eq (car stack-top) '||) (looking-at "\\(]\\|>>\\)[^_a-zA-Z0-9]")) (nth 2 (car (cdr stack)))) ;; Real indentation, where operators create extra indentation etc. - ((memq (car stack-top) '(-> || begin try)) + ((memq (car stack-top) '(-> || try begin)) (if (looking-at "\\(of\\)[^_a-zA-Z0-9]") (nth 2 stack-top) (goto-char (nth 1 stack-top)) @@ -2795,19 +2802,24 @@ Return nil if inside string, t if in a comment." (erlang-caddr (car stack)) 0)) ((looking-at "catch\\($\\|[^_a-zA-Z0-9]\\)") - (if (or (eq (car stack-top) 'try) - (eq (car (car (cdr stack))) 'icr)) - (progn - (if (eq (car stack-top) '->) - (erlang-pop stack)) - (if stack - (erlang-caddr (car stack)) - 0)) - base)) ;; old catch + ;; Are we in a try + (let ((start (if (eq (car stack-top) '->) + (car (cdr stack)) + stack-top))) + (if (null start) nil + (goto-char (nth 1 start))) + (cond ((looking-at "try\\($\\|[^_a-zA-Z0-9]\\)") + (progn + (if (eq (car stack-top) '->) + (erlang-pop stack)) + (if stack + (erlang-caddr (car stack)) + 0))) + (t (erlang-indent-standard indent-point token base 'nil))))) ;; old catch (t (erlang-indent-standard indent-point token base 'nil) )))) - )) + )) ((eq (car stack-top) 'when) (goto-char (nth 1 stack-top)) (if (looking-at "when\\s *\\($\\|%\\)") @@ -2833,27 +2845,32 @@ Return nil if inside string, t if in a comment." (current-column))) ;; Type and Spec indentation ((eq (car stack-top) '::) - (cond ((null erlang-argument-indent) - ;; indent to next column. - (+ 2 (nth 2 stack-top))) - ((looking-at "::[^_a-zA-Z0-9]") - (nth 2 stack-top)) - (t - (let ((start-alternativ (if (looking-at "|") 2 0))) - (goto-char (nth 1 stack-top)) - (- (cond ((looking-at "::\\s *\\($\\|%\\)") - ;; Line ends with :: - (if (eq (car (car (last stack))) 'spec) + (if (looking-at "}") + ;; Closing record definition with types + ;; pop stack and recurse + (erlang-calculate-stack-indent indent-point + (cons (erlang-pop stack) (cdr state))) + (cond ((null erlang-argument-indent) + ;; indent to next column. + (+ 2 (nth 2 stack-top))) + ((looking-at "::[^_a-zA-Z0-9]") + (nth 2 stack-top)) + (t + (let ((start-alternativ (if (looking-at "|") 2 0))) + (goto-char (nth 1 stack-top)) + (- (cond ((looking-at "::\\s *\\($\\|%\\)") + ;; Line ends with :: + (if (eq (car (car (last stack))) 'spec) (+ (erlang-indent-find-preceding-expr 1) erlang-argument-indent) - (+ (erlang-indent-find-preceding-expr 2) - erlang-argument-indent))) - (t - ;; Indent to the same column as the first - ;; argument. - (goto-char (+ 2 (nth 1 stack-top))) - (skip-chars-forward " \t") - (current-column))) start-alternativ))))) + (+ (erlang-indent-find-preceding-expr 2) + erlang-argument-indent))) + (t + ;; Indent to the same column as the first + ;; argument. + (goto-char (+ 2 (nth 1 stack-top))) + (skip-chars-forward " \t") + (current-column))) start-alternativ)))))) ))) (defun erlang-indent-standard (indent-point token base inside-parenthesis) diff --git a/lib/tools/emacs/test.erl.indented b/lib/tools/emacs/test.erl.indented index 1dc976d8dc..2948ccf1b5 100644 --- a/lib/tools/emacs/test.erl.indented +++ b/lib/tools/emacs/test.erl.indented @@ -93,11 +93,27 @@ -type t13() :: maybe_improper_list(integer(), t11()). -type t14() :: [erl_scan:foo() | %% Should be highlighted - non_neg_integer() | nonempty_list() | + term() | + bool() | + byte() | + char() | + non_neg_integer() | nonempty_list() | + pos_integer() | + neg_integer() | + number() | + list() | nonempty_improper_list() | nonempty_maybe_improper_list() | + maybe_improper_list() | string() | iolist() | byte() | + module() | + mfa() | + node() | + timeout() | + no_return() | %% Should not be highlighted nonempty_() | nonlist() | - erl_scan:bar(34, 92) | t13() | m:f(integer() | <<_:_*16>>)]. + erl_scan:bar(34, 92) | t13() | m:f(integer() | <<_:_*16>>)]. + + -type t15() :: {binary(),<<>>,<<_:34>>,<<_:_*42>>, <<_:3,_:_*14>>,<<>>} | [<<>>|<<_:34>>|<<_:16>>| <<_:3,_:_*1472>>|<<_:19,_:_*14>>| <<_:34>>| @@ -172,6 +188,9 @@ f19 = 3 :: integer()|undefined, f5 = 3 :: undefined|integer()}). +-record(state, { + sequence_number = 1 :: integer() + }). highlighting(X) % Function definitions should be highlighted @@ -493,7 +512,9 @@ indent_try_catch() -> file:close(Xfile) end; indent_try_catch() -> - try foo(bar) of + try + foo(bar) + of X when true andalso kalle -> io:format(stdout, "Parsing file ~s, ", @@ -551,14 +572,57 @@ indent_catch() -> C = catch B + float(43.1), - case catch (X) of + case catch foo(X) of + A -> + B + end, + + case + catch foo(X) + of A -> B end, + + case + foo(X) + of + A -> + catch B, + X + end, + try sune of _ -> foo catch _:_ -> baf - end. + end, + + try + sune + of + _ -> + X = 5, + (catch foo(X)), + X + 10 + catch _:_ -> baf + end, + + try + (catch sune) + of + _ -> + catch foo() %% BUGBUG can't handle catch inside try without parentheses + catch _:_ -> + baf + end, + + try + (catch exit()) + catch + _ -> + catch baf() + end, + ok. indent_binary() -> X = lists:foldr(fun(M) -> diff --git a/lib/tools/emacs/test.erl.orig b/lib/tools/emacs/test.erl.orig index feb9e4e5a1..1221c5655e 100644 --- a/lib/tools/emacs/test.erl.orig +++ b/lib/tools/emacs/test.erl.orig @@ -93,11 +93,27 @@ -type t13() :: maybe_improper_list(integer(), t11()). -type t14() :: [erl_scan:foo() | %% Should be highlighted - non_neg_integer() | nonempty_list() | + term() | + bool() | + byte() | + char() | + non_neg_integer() | nonempty_list() | + pos_integer() | + neg_integer() | + number() | + list() | nonempty_improper_list() | nonempty_maybe_improper_list() | + maybe_improper_list() | string() | iolist() | byte() | + module() | + mfa() | + node() | + timeout() | + no_return() | %% Should not be highlighted nonempty_() | nonlist() | -erl_scan:bar(34, 92) | t13() | m:f(integer() | <<_:_*16>>)]. + erl_scan:bar(34, 92) | t13() | m:f(integer() | <<_:_*16>>)]. + + -type t15() :: {binary(),<<>>,<<_:34>>,<<_:_*42>>, <<_:3,_:_*14>>,<<>>} | [<<>>|<<_:34>>|<<_:16>>| <<_:3,_:_*1472>>|<<_:19,_:_*14>>| <<_:34>>| @@ -172,6 +188,9 @@ f18 :: 1 | 2 | 'undefined', f19 = 3 :: integer()|undefined, f5 = 3 :: undefined|integer()}). +-record(state, { + sequence_number = 1 :: integer() + }). highlighting(X) % Function definitions should be highlighted @@ -493,7 +512,9 @@ indent_try_catch() -> file:close(Xfile) end; indent_try_catch() -> - try foo(bar) of + try + foo(bar) + of X when true andalso kalle -> io:format(stdout, "Parsing file ~s, ", @@ -551,14 +572,57 @@ indent_catch() -> C = catch B + float(43.1), - case catch (X) of + case catch foo(X) of A -> B end, + + case + catch foo(X) + of + A -> + B + end, + + case + foo(X) + of + A -> + catch B, + X + end, + try sune of - _ -> foo - catch _:_ -> baf - end. + _ -> foo + catch _:_ -> baf + end, + + try +sune + of + _ -> + X = 5, + (catch foo(X)), + X + 10 + catch _:_ -> baf + end, + + try + (catch sune) + of + _ -> + catch foo() %% BUGBUG can't handle catch inside try without parentheses + catch _:_ -> + baf + end, + + try +(catch exit()) + catch +_ -> + catch baf() + end, + ok. indent_binary() -> X = lists:foldr(fun(M) -> diff --git a/xcomp/erl-xcomp-mips-linux.conf b/xcomp/erl-xcomp-mips-linux.conf new file mode 100644 index 0000000000..3ac057bb4c --- /dev/null +++ b/xcomp/erl-xcomp-mips-linux.conf @@ -0,0 +1,258 @@ +## -*-shell-script-*- +## +## %CopyrightBegin% +## +## Copyright Ericsson AB 2010. All Rights Reserved. +## +## The contents of this file are subject to the Erlang Public License, +## Version 1.1, (the "License"); you may not use this file except in +## compliance with the License. You should have received a copy of the +## Erlang Public License along with this software. If not, it can be +## retrieved online at http://www.erlang.org/. +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and limitations +## under the License. +## +## %CopyrightEnd% +## +## File: erl-xcomp-mips-linux.conf +## Author: Matthias Lang +## +## ----------------------------------------------------------------------------- +## When cross compiling Erlang/OTP using `otp_build', copy this file and set +## the variables needed below. Then pass the path to the copy of this file as +## an argument to `otp_build' in the configure stage: +## `otp_build configure --xcomp-conf=<FILE>' +## ----------------------------------------------------------------------------- + +## Note that you cannot define arbitrary variables in a cross compilation +## configuration file. Only the ones listed below will be guaranteed to be +## visible throughout the whole execution of all `configure' scripts. Other +## variables needs to be defined as arguments to `configure' or exported in +## the environment. + +## -- Variables for `otp_build' Only ------------------------------------------- + +## Variables in this section are only used, when configuring Erlang/OTP for +## cross compilation using `$ERL_TOP/otp_build configure'. + +## *NOTE*! These variables currently have *no* effect if you configure using +## the `configure' script directly. + +# * `erl_xcomp_build' - The build system used. This value will be passed as +# `--build=$erl_xcomp_build' argument to the `configure' script. It does +# not have to be a full `CPU-VENDOR-OS' triplet, but can be. The full +# `CPU-VENDOR-OS' triplet will be created by +# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_build'. If set to `guess', +# the build system will be guessed using +# `$ERL_TOP/erts/autoconf/config.guess'. +erl_xcomp_build=guess + +# * `erl_xcomp_host' - Cross host/target system to build for. This value will +# be passed as `--host=$erl_xcomp_host' argument to the `configure' script. +# It does not have to be a full `CPU-VENDOR-OS' triplet, but can be. The +# full `CPU-VENDOR-OS' triplet will be created by +# `$ERL_TOP/erts/autoconf/config.sub $erl_xcomp_host'. +erl_xcomp_host=mips-linux + +# * `erl_xcomp_configure_flags' - Extra configure flags to pass to the +# `configure' script. +#erl_xcomp_configure_flags= + +## -- Cross Compiler and Other Tools ------------------------------------------- + +## If the cross compilation tools are prefixed by `<HOST>-' you probably do +## not need to set these variables (where `<HOST>' is what has been passed as +## `--host=<HOST>' argument to `configure'). + +## All variables in this section can also be used when native compiling. + +# * `CC' - C compiler. +#CC= + +# * `CFLAGS' - C compiler flags. +CFLAGS=-Os + +# * `STATIC_CFLAGS' - Static C compiler flags. +#STATIC_CFLAGS= + +# * `CFLAG_RUNTIME_LIBRARY_PATH' - This flag should set runtime library +# search path for the shared libraries. Note that this actually is a +# linker flag, but it needs to be passed via the compiler. +#CFLAG_RUNTIME_LIBRARY_PATH= + +# * `CPP' - C pre-processor. +#CPP= + +# * `CPPFLAGS' - C pre-processor flags. +#CPPFLAGS= + +# * `CXX' - C++ compiler. +#CXX= + +# * `CXXFLAGS' - C++ compiler flags. +#CXXFLAGS= + +# * `LD' - Linker. +#LD= + +# * `LDFLAGS' - Linker flags. +#LDFLAGS= + +# * `LIBS' - Libraries. +#LIBS= + +## -- *D*ynamic *E*rlang *D*river Linking -- + +## *NOTE*! Either set all or none of the `DED_LD*' variables. + +# * `DED_LD' - Linker for Dynamically loaded Erlang Drivers. +#DED_LD= + +# * `DED_LDFLAGS' - Linker flags to use with `DED_LD'. +#DED_LDFLAGS= + +# * `DED_LD_FLAG_RUNTIME_LIBRARY_PATH' - This flag should set runtime library +# search path for shared libraries when linking with `DED_LD'. +#DED_LD_FLAG_RUNTIME_LIBRARY_PATH= + +## -- Large File Support -- + +## *NOTE*! Either set all or none of the `LFS_*' variables. + +# * `LFS_CFLAGS' - Large file support C compiler flags. +#LFS_CFLAGS= + +# * `LFS_LDFLAGS' - Large file support linker flags. +#LFS_LDFLAGS= + +# * `LFS_LIBS' - Large file support libraries. +#LFS_LIBS= + +## -- Other Tools -- + +# * `RANLIB' - `ranlib' archive index tool. +#RANLIB= + +# * `AR' - `ar' archiving tool. +#AR= + +# * `GETCONF' - `getconf' system configuration inspection tool. `getconf' is +# currently used for finding out large file support flags to use, and +# on Linux systems for finding out if we have an NPTL thread library or +# not. +#GETCONF= + +## -- Cross System Root Locations ---------------------------------------------- + +# * `erl_xcomp_sysroot' - The absolute path to the system root of the cross +# compilation environment. Currently, the `crypto', `odbc', `ssh' and +# `ssl' applications need the system root. These applications will be +# skipped if the system root has not been set. The system root might be +# needed for other things too. If this is the case and the system root +# has not been set, `configure' will fail and request you to set it. +#erl_xcomp_sysroot= + +# * `erl_xcomp_isysroot' - The absolute path to the system root for includes +# of the cross compilation environment. If not set, this value defaults +# to `$erl_xcomp_sysroot', i.e., only set this value if the include system +# root path is not the same as the system root path. +#erl_xcomp_isysroot= + +## -- Optional Feature, and Bug Tests ------------------------------------------ + +## These tests cannot (always) be done automatically when cross compiling. You +## usually do not need to set these variables. Only set these if you really +## know what you are doing. + +## Note that some of these values will override results of tests performed +## by `configure', and some will not be used until `configure' is sure that +## it cannot figure the result out. + +## The `configure' script will issue a warning when a default value is used. +## When a variable has been set, no warning will be issued. + +# * `erl_xcomp_after_morecore_hook' - `yes|no'. Defaults to `no'. If `yes', +# the target system must have a working `__after_morecore_hook' that can be +# used for tracking used `malloc()' implementations core memory usage. +# This is currently only used by unsupported features. +#erl_xcomp_after_morecore_hook= + +# * `erl_xcomp_bigendian' - `yes|no'. No default. If `yes', the target system +# must be big endian. If `no', little endian. This can often be +# automatically detected, but not always. If not automatically detected, +# `configure' will fail unless this variable is set. Since no default +# value is used, `configure' will try to figure this out automatically. +#erl_xcomp_bigendian= + +# * `erl_xcomp_clock_gettime_cpu_time' - `yes|no'. Defaults to `no'. If `yes', +# the target system must have a working `clock_gettime()' implementation +# that can be used for retrieving process CPU time. +#erl_xcomp_clock_gettime_cpu_time= + +# * `erl_xcomp_getaddrinfo' - `yes|no'. Defaults to `no'. If `yes', the target +# system must have a working `getaddrinfo()' implementation that can +# handle both IPv4 and IPv6. +#erl_xcomp_getaddrinfo= + +# * `erl_xcomp_gethrvtime_procfs_ioctl' - `yes|no'. Defaults to `no'. If `yes', +# the target system must have a working `gethrvtime()' implementation and +# is used with procfs `ioctl()'. +#erl_xcomp_gethrvtime_procfs_ioctl= + +# * `erl_xcomp_dlsym_brk_wrappers' - `yes|no'. Defaults to `no'. If `yes', the +# target system must have a working `dlsym(RTLD_NEXT, <S>)' implementation +# that can be used on `brk' and `sbrk' symbols used by the `malloc()' +# implementation in use, and by this track the `malloc()' implementations +# core memory usage. This is currently only used by unsupported features. +#erl_xcomp_dlsym_brk_wrappers= + +# * `erl_xcomp_kqueue' - `yes|no'. Defaults to `no'. If `yes', the target +# system must have a working `kqueue()' implementation that returns a file +# descriptor which can be used by `poll()' and/or `select()'. If `no' and +# the target system has not got `epoll()' or `/dev/poll', the kernel-poll +# feature will be disabled. +#erl_xcomp_kqueue= + +# * `erl_xcomp_linux_clock_gettime_correction' - `yes|no'. Defaults to `yes' on +# Linux; otherwise, `no'. If `yes', `clock_gettime(CLOCK_MONOTONIC, _)' on +# the target system must work. This variable is recommended to be set to +# `no' on Linux systems with kernel versions less than 2.6. +#erl_xcomp_linux_clock_gettime_correction= + +# * `erl_xcomp_linux_nptl' - `yes|no'. Defaults to `yes' on Linux; otherwise, +# `no'. If `yes', the target system must have NPTL (Native POSIX Thread +# Library). Older Linux systems have LinuxThreads instead of NPTL (Linux +# kernel versions typically less than 2.6). +#erl_xcomp_linux_nptl= + +# * `erl_xcomp_linux_usable_sigaltstack' - `yes|no'. Defaults to `yes' on Linux; +# otherwise, `no'. If `yes', `sigaltstack()' must be usable on the target +# system. `sigaltstack()' on Linux kernel versions less than 2.4 are +# broken. +#erl_xcomp_linux_usable_sigaltstack= + +# * `erl_xcomp_linux_usable_sigusrx' - `yes|no'. Defaults to `yes'. If `yes', +# the `SIGUSR1' and `SIGUSR2' signals must be usable by the ERTS. Old +# LinuxThreads thread libraries (Linux kernel versions typically less than +# 2.2) used these signals and made them unusable by the ERTS. +#erl_xcomp_linux_usable_sigusrx= + +# * `erl_xcomp_poll' - `yes|no'. Defaults to `no' on Darwin/MacOSX; otherwise, +# `yes'. If `yes', the target system must have a working `poll()' +# implementation that also can handle devices. If `no', `select()' will be +# used instead of `poll()'. +#erl_xcomp_poll= + +# * `erl_xcomp_putenv_copy' - `yes|no'. Defaults to `no'. If `yes', the target +# system must have a `putenv()' implementation that stores a copy of the +# key/value pair. +#erl_xcomp_putenv_copy= + +# * `erl_xcomp_reliable_fpe' - `yes|no'. Defaults to `no'. If `yes', the target +# system must have reliable floating point exceptions. +#erl_xcomp_reliable_fpe= + +## ----------------------------------------------------------------------------- |