| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.188 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.4.188 |
| Problem: SIZEOF_LONG clashes with similar defines in header files. |
| Solution: Rename to a name starting with VIM_. Also for SIZEOF_INT. |
| Files: src/if_ruby.c, src/vim.h, src/configure.in, src/auto/configure, |
| src/config.h.in, src/fileio.c, src/if_python.c, src/message.c, |
| src/spell.c, src/feature.h, src/os_os2_cfg.h, src/os_vms_conf.h, |
| src/os_win16.h, src/structs.h |
| |
| |
| |
| |
| |
| *** 89,97 **** |
| #endif |
| |
| #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \ |
| ! && SIZEOF_INT < SIZEOF_LONG |
| /* Ruby 2.0 defines a number of static functions which use rb_fix2int and |
| ! * rb_num2int if SIZEOF_INT < SIZEOF_LONG (64bit) */ |
| # define rb_fix2int rb_fix2int_stub |
| # define rb_num2int rb_num2int_stub |
| #endif |
| --- 89,97 ---- |
| #endif |
| |
| #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \ |
| ! && VIM_SIZEOF_INT < VIM_SIZEOF_LONG |
| /* Ruby 2.0 defines a number of static functions which use rb_fix2int and |
| ! * rb_num2int if VIM_SIZEOF_INT < VIM_SIZEOF_LONG (64bit) */ |
| # define rb_fix2int rb_fix2int_stub |
| # define rb_num2int rb_num2int_stub |
| #endif |
| |
| *** 202,208 **** |
| # define rb_hash_new dll_rb_hash_new |
| # define rb_inspect dll_rb_inspect |
| # define rb_int2inum dll_rb_int2inum |
| ! # if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */ |
| # define rb_fix2int dll_rb_fix2int |
| # define rb_num2int dll_rb_num2int |
| # define rb_num2uint dll_rb_num2uint |
| --- 202,208 ---- |
| # define rb_hash_new dll_rb_hash_new |
| # define rb_inspect dll_rb_inspect |
| # define rb_int2inum dll_rb_int2inum |
| ! # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */ |
| # define rb_fix2int dll_rb_fix2int |
| # define rb_num2int dll_rb_num2int |
| # define rb_num2uint dll_rb_num2uint |
| |
| *** 310,316 **** |
| static VALUE (*dll_rb_hash_new) (void); |
| static VALUE (*dll_rb_inspect) (VALUE); |
| static VALUE (*dll_rb_int2inum) (long); |
| ! # if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */ |
| static long (*dll_rb_fix2int) (VALUE); |
| static long (*dll_rb_num2int) (VALUE); |
| static unsigned long (*dll_rb_num2uint) (VALUE); |
| --- 310,316 ---- |
| static VALUE (*dll_rb_hash_new) (void); |
| static VALUE (*dll_rb_inspect) (VALUE); |
| static VALUE (*dll_rb_int2inum) (long); |
| ! # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */ |
| static long (*dll_rb_fix2int) (VALUE); |
| static long (*dll_rb_num2int) (VALUE); |
| static unsigned long (*dll_rb_num2uint) (VALUE); |
| |
| *** 393,399 **** |
| return dll_rb_int2big(x); |
| } |
| # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \ |
| ! && SIZEOF_INT < SIZEOF_LONG |
| long rb_fix2int_stub(VALUE x) |
| { |
| return dll_rb_fix2int(x); |
| --- 393,399 ---- |
| return dll_rb_int2big(x); |
| } |
| # if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \ |
| ! && VIM_SIZEOF_INT < VIM_SIZEOF_LONG |
| long rb_fix2int_stub(VALUE x) |
| { |
| return dll_rb_fix2int(x); |
| |
| *** 466,472 **** |
| {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new}, |
| {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect}, |
| {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum}, |
| ! # if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */ |
| {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int}, |
| {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int}, |
| {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint}, |
| --- 466,472 ---- |
| {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new}, |
| {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect}, |
| {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum}, |
| ! # if VIM_SIZEOF_INT < VIM_SIZEOF_LONG /* 64 bits only */ |
| {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int}, |
| {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int}, |
| {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint}, |
| |
| |
| |
| *** 43,49 **** |
| * it becomes zero. This is likely a problem of not being able to run the |
| * test program. Other items from configure may also be wrong then! |
| */ |
| ! # if (SIZEOF_INT == 0) |
| Error: configure did not run properly. Check auto/config.log. |
| # endif |
| |
| --- 43,49 ---- |
| * it becomes zero. This is likely a problem of not being able to run the |
| * test program. Other items from configure may also be wrong then! |
| */ |
| ! # if (VIM_SIZEOF_INT == 0) |
| Error: configure did not run properly. Check auto/config.log. |
| # endif |
| |
| |
| *** 148,169 **** |
| #endif |
| |
| /* |
| ! * SIZEOF_INT is used in feature.h, and the system-specific included files |
| ! * need items from feature.h. Therefore define SIZEOF_INT here. |
| */ |
| #ifdef WIN3264 |
| ! # define SIZEOF_INT 4 |
| #endif |
| #ifdef MSDOS |
| # ifdef DJGPP |
| # ifndef FEAT_GUI_GTK /* avoid problems when generating prototypes */ |
| ! # define SIZEOF_INT 4 /* 32 bit ints */ |
| # endif |
| # define DOS32 |
| # define FEAT_CLIPBOARD |
| # else |
| # ifndef FEAT_GUI_GTK /* avoid problems when generating prototypes */ |
| ! # define SIZEOF_INT 2 /* 16 bit ints */ |
| # endif |
| # define SMALL_MALLOC /* 16 bit storage allocation */ |
| # define DOS16 |
| --- 148,169 ---- |
| #endif |
| |
| /* |
| ! * VIM_SIZEOF_INT is used in feature.h, and the system-specific included files |
| ! * need items from feature.h. Therefore define VIM_SIZEOF_INT here. |
| */ |
| #ifdef WIN3264 |
| ! # define VIM_SIZEOF_INT 4 |
| #endif |
| #ifdef MSDOS |
| # ifdef DJGPP |
| # ifndef FEAT_GUI_GTK /* avoid problems when generating prototypes */ |
| ! # define VIM_SIZEOF_INT 4 /* 32 bit ints */ |
| # endif |
| # define DOS32 |
| # define FEAT_CLIPBOARD |
| # else |
| # ifndef FEAT_GUI_GTK /* avoid problems when generating prototypes */ |
| ! # define VIM_SIZEOF_INT 2 /* 16 bit ints */ |
| # endif |
| # define SMALL_MALLOC /* 16 bit storage allocation */ |
| # define DOS16 |
| |
| *** 174,191 **** |
| /* Be conservative about sizeof(int). It could be 4 too. */ |
| # ifndef FEAT_GUI_GTK /* avoid problems when generating prototypes */ |
| # ifdef __GNUC__ |
| ! # define SIZEOF_INT 4 |
| # else |
| ! # define SIZEOF_INT 2 |
| # endif |
| # endif |
| #endif |
| #ifdef MACOS |
| # if defined(__POWERPC__) || defined(MACOS_X) || defined(__fourbyteints__) \ |
| || defined(__MRC__) || defined(__SC__) || defined(__APPLE_CC__)/* MPW Compilers */ |
| ! # define SIZEOF_INT 4 |
| # else |
| ! # define SIZEOF_INT 2 |
| # endif |
| #endif |
| |
| --- 174,191 ---- |
| /* Be conservative about sizeof(int). It could be 4 too. */ |
| # ifndef FEAT_GUI_GTK /* avoid problems when generating prototypes */ |
| # ifdef __GNUC__ |
| ! # define VIM_SIZEOF_INT 4 |
| # else |
| ! # define VIM_SIZEOF_INT 2 |
| # endif |
| # endif |
| #endif |
| #ifdef MACOS |
| # if defined(__POWERPC__) || defined(MACOS_X) || defined(__fourbyteints__) \ |
| || defined(__MRC__) || defined(__SC__) || defined(__APPLE_CC__)/* MPW Compilers */ |
| ! # define VIM_SIZEOF_INT 4 |
| # else |
| ! # define VIM_SIZEOF_INT 2 |
| # endif |
| #endif |
| |
| |
| *** 417,428 **** |
| #define PRINTF_DECIMAL_LONG_U SCANF_DECIMAL_LONG_U |
| |
| /* |
| ! * Only systems which use configure will have SIZEOF_OFF_T and SIZEOF_LONG |
| * defined, which is ok since those are the same systems which can have |
| * varying sizes for off_t. The other systems will continue to use "%ld" to |
| * print off_t since off_t is simply a typedef to long for them. |
| */ |
| ! #if defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T > SIZEOF_LONG) |
| # define LONG_LONG_OFF_T |
| #endif |
| |
| --- 417,428 ---- |
| #define PRINTF_DECIMAL_LONG_U SCANF_DECIMAL_LONG_U |
| |
| /* |
| ! * Only systems which use configure will have SIZEOF_OFF_T and VIM_SIZEOF_LONG |
| * defined, which is ok since those are the same systems which can have |
| * varying sizes for off_t. The other systems will continue to use "%ld" to |
| * print off_t since off_t is simply a typedef to long for them. |
| */ |
| ! #if defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T > VIM_SIZEOF_LONG) |
| # define LONG_LONG_OFF_T |
| #endif |
| |
| |
| *** 448,454 **** |
| # ifdef UNICODE16 |
| typedef unsigned short u8char_T; /* short should be 16 bits */ |
| # else |
| ! # if SIZEOF_INT >= 4 |
| typedef unsigned int u8char_T; /* int is 32 bits */ |
| # else |
| typedef unsigned long u8char_T; /* long should be 32 bits or more */ |
| --- 448,454 ---- |
| # ifdef UNICODE16 |
| typedef unsigned short u8char_T; /* short should be 16 bits */ |
| # else |
| ! # if VIM_SIZEOF_INT >= 4 |
| typedef unsigned int u8char_T; /* int is 32 bits */ |
| # else |
| typedef unsigned long u8char_T; /* long should be 32 bits or more */ |
| |
| *** 1608,1614 **** |
| * With this we restrict the maximum line length to 1073741823. I guess this is |
| * not a real problem. BTW: Longer lines are split. |
| */ |
| ! #if SIZEOF_INT >= 4 |
| # ifdef __MVS__ |
| # define MAXCOL (0x3fffffffL) /* maximum column number, 30 bits */ |
| # else |
| --- 1608,1614 ---- |
| * With this we restrict the maximum line length to 1073741823. I guess this is |
| * not a real problem. BTW: Longer lines are split. |
| */ |
| ! #if VIM_SIZEOF_INT >= 4 |
| # ifdef __MVS__ |
| # define MAXCOL (0x3fffffffL) /* maximum column number, 30 bits */ |
| # else |
| |
| |
| |
| *** 3581,3586 **** |
| --- 3581,3590 ---- |
| AC_CHECK_SIZEOF([time_t]) |
| AC_CHECK_SIZEOF([off_t]) |
| |
| + dnl Use different names to avoid clashing with other header files. |
| + AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int]) |
| + AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long]) |
| + |
| dnl Make sure that uint32_t is really 32 bits unsigned. |
| AC_MSG_CHECKING([uint32_t is 32 bits]) |
| AC_TRY_RUN([ |
| |
| |
| |
| *** 5199,5207 **** |
| --- 5199,5217 ---- |
| $as_echo_n "checking for mzscheme_base.c... " >&6; } |
| if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then |
| MZSCHEME_EXTRA="mzscheme_base.c" |
| + MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc" |
| + MZSCHEME_MOD="++lib scheme/base" |
| else |
| if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then |
| MZSCHEME_EXTRA="mzscheme_base.c" |
| + MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc" |
| + MZSCHEME_MOD="++lib scheme/base" |
| + else |
| + if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then |
| + MZSCHEME_EXTRA="mzscheme_base.c" |
| + MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool" |
| + MZSCHEME_MOD="" |
| + fi |
| fi |
| fi |
| if test "X$MZSCHEME_EXTRA" != "X" ; then |
| |
| *** 12323,12328 **** |
| --- 12333,12347 ---- |
| |
| |
| |
| + cat >>confdefs.h <<_ACEOF |
| + #define VIM_SIZEOF_INT $ac_cv_sizeof_int |
| + _ACEOF |
| + |
| + cat >>confdefs.h <<_ACEOF |
| + #define VIM_SIZEOF_LONG $ac_cv_sizeof_long |
| + _ACEOF |
| + |
| + |
| { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5 |
| $as_echo_n "checking uint32_t is 32 bits... " >&6; } |
| if test "$cross_compiling" = yes; then : |
| |
| |
| |
| *** 37,46 **** |
| #undef UNIX |
| |
| /* Defined to the size of an int */ |
| ! #undef SIZEOF_INT |
| |
| /* Defined to the size of a long */ |
| ! #undef SIZEOF_LONG |
| |
| /* Defined to the size of off_t */ |
| #undef SIZEOF_OFF_T |
| --- 37,46 ---- |
| #undef UNIX |
| |
| /* Defined to the size of an int */ |
| ! #undef VIM_SIZEOF_INT |
| |
| /* Defined to the size of a long */ |
| ! #undef VIM_SIZEOF_LONG |
| |
| /* Defined to the size of off_t */ |
| #undef SIZEOF_OFF_T |
| |
| |
| |
| *** 1185,1191 **** |
| * The amount is limited by the fact that read() only can read |
| * upto max_unsigned characters (and other things). |
| */ |
| ! #if SIZEOF_INT <= 2 |
| if (linerest >= 0x7ff0) |
| { |
| ++split; |
| --- 1185,1191 ---- |
| * The amount is limited by the fact that read() only can read |
| * upto max_unsigned characters (and other things). |
| */ |
| ! #if VIM_SIZEOF_INT <= 2 |
| if (linerest >= 0x7ff0) |
| { |
| ++split; |
| |
| *** 1197,1203 **** |
| { |
| if (!skip_read) |
| { |
| ! #if SIZEOF_INT > 2 |
| # if defined(SSIZE_MAX) && (SSIZE_MAX < 0x10000L) |
| size = SSIZE_MAX; /* use max I/O size, 52K */ |
| # else |
| --- 1197,1203 ---- |
| { |
| if (!skip_read) |
| { |
| ! #if VIM_SIZEOF_INT > 2 |
| # if defined(SSIZE_MAX) && (SSIZE_MAX < 0x10000L) |
| size = SSIZE_MAX; /* use max I/O size, 52K */ |
| # else |
| |
| |
| |
| *** 613,619 **** |
| # endif |
| # endif |
| # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \ |
| ! && SIZEOF_SIZE_T != SIZEOF_INT |
| # ifdef Py_DEBUG |
| {"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4}, |
| # else |
| --- 613,619 ---- |
| # endif |
| # endif |
| # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \ |
| ! && SIZEOF_SIZE_T != VIM_SIZEOF_INT |
| # ifdef Py_DEBUG |
| {"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4}, |
| # else |
| |
| |
| |
| *** 4376,4382 **** |
| { |
| /* Don't put the #if inside memchr(), it can be a |
| * macro. */ |
| ! #if SIZEOF_INT <= 2 |
| char *q = memchr(str_arg, '\0', precision); |
| #else |
| /* memchr on HP does not like n > 2^31 !!! */ |
| --- 4376,4382 ---- |
| { |
| /* Don't put the #if inside memchr(), it can be a |
| * macro. */ |
| ! #if VIM_SIZEOF_INT <= 2 |
| char *q = memchr(str_arg, '\0', precision); |
| #else |
| /* memchr on HP does not like n > 2^31 !!! */ |
| |
| |
| |
| *** 317,323 **** |
| |
| /* Type used for indexes in the word tree need to be at least 4 bytes. If int |
| * is 8 bytes we could use something smaller, but what? */ |
| ! #if SIZEOF_INT > 3 |
| typedef int idx_T; |
| #else |
| typedef long idx_T; |
| --- 317,323 ---- |
| |
| /* Type used for indexes in the word tree need to be at least 4 bytes. If int |
| * is 8 bytes we could use something smaller, but what? */ |
| ! #if VIM_SIZEOF_INT > 3 |
| typedef int idx_T; |
| #else |
| typedef long idx_T; |
| |
| |
| |
| *** 328,334 **** |
| * |
| * Disabled for EBCDIC as it requires multibyte. |
| */ |
| ! #if defined(FEAT_BIG) && !defined(WIN16) && SIZEOF_INT >= 4 && !defined(EBCDIC) |
| # define FEAT_ARABIC |
| #endif |
| #ifdef FEAT_ARABIC |
| --- 328,334 ---- |
| * |
| * Disabled for EBCDIC as it requires multibyte. |
| */ |
| ! #if defined(FEAT_BIG) && !defined(WIN16) && VIM_SIZEOF_INT >= 4 && !defined(EBCDIC) |
| # define FEAT_ARABIC |
| #endif |
| #ifdef FEAT_ARABIC |
| |
| *** 640,646 **** |
| */ |
| #if (defined(FEAT_NORMAL) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \ |
| && !defined(FEAT_MBYTE) && !defined(WIN16) \ |
| ! && SIZEOF_INT >= 4 && !defined(EBCDIC) |
| # define FEAT_MBYTE |
| #endif |
| |
| --- 640,646 ---- |
| */ |
| #if (defined(FEAT_NORMAL) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \ |
| && !defined(FEAT_MBYTE) && !defined(WIN16) \ |
| ! && VIM_SIZEOF_INT >= 4 && !defined(EBCDIC) |
| # define FEAT_MBYTE |
| #endif |
| |
| |
| *** 661,667 **** |
| # define FEAT_MBYTE |
| #endif |
| |
| ! #if defined(FEAT_MBYTE) && SIZEOF_INT < 4 && !defined(PROTO) |
| Error: Can only handle multi-byte feature with 32 bit int or larger |
| #endif |
| |
| --- 661,667 ---- |
| # define FEAT_MBYTE |
| #endif |
| |
| ! #if defined(FEAT_MBYTE) && VIM_SIZEOF_INT < 4 && !defined(PROTO) |
| Error: Can only handle multi-byte feature with 32 bit int or larger |
| #endif |
| |
| |
| |
| |
| *** 47,53 **** |
| #undef UNIX /* define always by current configure script */ |
| |
| /* Defined to the size of an int */ |
| ! #define SIZEOF_INT 4 |
| |
| /* |
| * If we cannot trust one of the following from the libraries, we use our |
| --- 47,53 ---- |
| #undef UNIX /* define always by current configure script */ |
| |
| /* Defined to the size of an int */ |
| ! #define VIM_SIZEOF_INT 4 |
| |
| /* |
| * If we cannot trust one of the following from the libraries, we use our |
| |
| |
| |
| *** 23,29 **** |
| #define HAVE_DATE_TIME |
| |
| /* Defined to the size of an int */ |
| ! #define SIZEOF_INT 4 |
| |
| /* #undef USEBCOPY */ |
| #define USEMEMMOVE |
| --- 23,29 ---- |
| #define HAVE_DATE_TIME |
| |
| /* Defined to the size of an int */ |
| ! #define VIM_SIZEOF_INT 4 |
| |
| /* #undef USEBCOPY */ |
| #define USEMEMMOVE |
| |
| |
| |
| *** 55,62 **** |
| |
| #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */ |
| |
| ! #ifndef SIZEOF_INT |
| ! # define SIZEOF_INT 2 |
| #endif |
| |
| typedef long off_t; |
| --- 55,62 ---- |
| |
| #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */ |
| |
| ! #ifndef VIM_SIZEOF_INT |
| ! # define VIM_SIZEOF_INT 2 |
| #endif |
| |
| typedef long off_t; |
| |
| |
| |
| *** 364,370 **** |
| /* |
| * structures used in undo.c |
| */ |
| ! #if SIZEOF_INT > 2 |
| # define ALIGN_LONG /* longword alignment and use filler byte */ |
| # define ALIGN_SIZE (sizeof(long)) |
| #else |
| --- 364,370 ---- |
| /* |
| * structures used in undo.c |
| */ |
| ! #if VIM_SIZEOF_INT > 2 |
| # define ALIGN_LONG /* longword alignment and use filler byte */ |
| # define ALIGN_SIZE (sizeof(long)) |
| #else |
| |
| *** 1094,1100 **** |
| typedef long_u hash_T; /* Type for hi_hash */ |
| |
| |
| ! #if SIZEOF_INT <= 3 /* use long if int is smaller than 32 bits */ |
| typedef long varnumber_T; |
| #else |
| typedef int varnumber_T; |
| --- 1094,1100 ---- |
| typedef long_u hash_T; /* Type for hi_hash */ |
| |
| |
| ! #if VIM_SIZEOF_INT <= 3 /* use long if int is smaller than 32 bits */ |
| typedef long varnumber_T; |
| #else |
| typedef int varnumber_T; |
| |
| |
| |
| *** 740,741 **** |
| --- 740,743 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 188, |
| /**/ |
| |
| -- |
| I'm sure that I asked CBuilder to do a "full" install. Looks like I got |
| a "fool" install, instead. Charles E Campbell, Jr, PhD |
| |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |