summaryrefslogtreecommitdiff
path: root/mathoms.c
Commit message (Collapse)AuthorAgeFilesLines
* Various pods: Add C<> around many typed-as-is thingsKarl Williamson2015-09-031-14/+14
| | | | Removes 'the' in front of parameter names in some instances.
* perlapi, perlintern: Add L<> links to podKarl Williamson2015-09-031-3/+3
|
* perlapi: Use C<> instead of I<> for parameter names, etcKarl Williamson2015-08-011-1/+1
| | | | | The majority of perlapi uses C<> to specify these things, but a few things used I<> instead. Standardize to C<>.
* Revert "Mathomise save_re_context"David Mitchell2015-03-301-6/+0
| | | | | | This reverts commit 0ddd4a5b1910c8bfa9b7e55eb0db60a115fe368c. Turns out we need the save_re_context() function after all.
* Replace common Emacs file-local variables with dir-localsDagfinn Ilmari Mannsåker2015-03-221-6/+0
| | | | | | | | | | | | | | | | An empty cpan/.dir-locals.el stops Emacs using the core defaults for code imported from CPAN. Committer's work: To keep t/porting/cmp_version.t and t/porting/utils.t happy, $VERSION needed to be incremented in many files, including throughout dist/PathTools. perldelta entry for module updates. Add two Emacs control files to MANIFEST; re-sort MANIFEST. For: RT #124119.
* Remove out-dated comment from mathoms.cSteve Hay2015-01-271-2/+0
| | | | | | | The previous commit did not honour this comment, and was evidently not the first to have not seen it either: at least 09d7a3ba91 and 0d7d409d8d have already added new functions in the 'wrong' place, so just remove the comment.
* move functions marked as mathomed in embed.fnc to mathoms.cDaniel Dragan2015-01-271-0/+24
| | | | | | | | | | | | | | | | Ever since commit 075eb5c9b6 mathom functions must be in mathoms.c for their symbols to be skipped in makedef.pl on Win32 Perl. If a function is marked 'b' in embed.fnc, regen.pl does NOT add its prototype to proto.h (it is commented out). Without the proto.h entry, EXTERN_C will be missing and a -DNO_MATHOMS + C++ Win32 Perl build will not link, since the C function will have a mangled name and the symbol will not be found for creating the perl linking library. Also add EXTERN_C to Win32CORE, the init_Win32CORE symbol is special cased for exporting in makedef.pl. Perl_is_utf8_char_buf was marked as 'b' in commit 3cedd9d930 Perl_sv_copypv was marked as 'b' in commit 4bac9ae47b
* makedef.pl: don't hard-code list of mathomsAaron Crane2014-12-141-1/+2
| | | | | | | | | | | | | | | It's easy enough to read the list out of mathoms.c directly, and this should prevent almost all bugs of the sort that were fixed by 083750a56b7927292a4bf7b1bf64aa26dd2a6858. (Only names that don't begin with "Perl_" will cause a problem.) The list of names detected automatically may actually differ slightly from the hard-coded list; for example, the definition of Perl_huge() is inside "#if defined(HUGE_VAL) || (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL))", but the new code in makedef.pl ignores preprocessor conditions. However, the list is used as names to *skip*, rather than to include, so it's not a problem if makedef.pl is willing to skip names that it will never be asked to include.
* fix incomplete mathoming of Perl_pad_compname_typeDaniel Dragan2014-12-011-0/+2
| | | | | commit 09d7a3ba91 moved Perl_pad_compname_type to mathoms but didn't update makedef.pl. This causes a link failure of perl521.dll on Win32.
* Mathomise pad_compname_typeFather Chrysostomos2014-11-301-0/+16
|
* Mathomise save_re_contextFather Chrysostomos2014-09-121-0/+7
| | | | at Jarkko’s suggestion.
* Remove or downgrade unnecessary dVAR.Jarkko Hietaniemi2014-06-251-58/+0
| | | | | | | | You need to configure with g++ *and* -Accflags=-DPERL_GLOBAL_STRUCT or -Accflags=-DPERL_GLOBAL_STRUCT_PRIVATE to see any difference. (g++ does not do the "post-annotation" form of "unused".) The version code has some of these issues, reported upstream.
* Silence -Wunused-parameter my_perl under threads.Jarkko Hietaniemi2014-06-191-0/+27
| | | | | | | | | | | | | | For S_ functions, remove the context. For Perl_ functions, add PERL_UNUSED_CONTEXT. Tricky because sometimes depends on DEBUGGING, and sometimes on whether we are have PERL_IMPLICIT_SYS. (Why all the mathoms Perl_is_uni_... and Perl_is_utf8_... functions are not being whined about is a mystery.) vutil.c (included via util.c) has one of these, but it's cpan/, and a known problem: https://rt.cpan.org/Ticket/Display.html?id=96100
* perlapi: Refactor placements, headings of some functionsKarl Williamson2014-06-051-0/+8
| | | | | | | | | | | | | | It is not very user friendly to list functions as "Functions found in file FOO". Better is to group them by purpose, as many were already. I went through and placed the ones that weren't already so grouped into groups. Patches welcome if you have a better classification. I changed the headings of some so that the important disctinction was the first word so that they are placed in the file more appropriately. And a couple of ones that I had created myself, I came up with a name that I think is better than the original
* Move some deprecated utf8-handling functions to mathomsKarl Williamson2014-05-311-0/+162
| | | | | This entailed creating new internal functions for some of them to call so that the functionality can be retained during the deprecation period.
* add va_end() calls where missing for a va_start() or va_end().Jarkko Hietaniemi2014-05-291-2/+8
| | | | | | | | | | | | | Fix for Coverity perl5 CIDs 29225, 29226, 29227, 29228, 29229: Missing varargs init or cleanup (VARARGS) missing va_end: va_end was not called for foo. Use of va_args must be finished off with va_end (in other words, use of va_start or va_copy must be bracketed off with va_end). In most platforms va_end is a no-op, but in some platforms it is required for proper cleanup (or face stack smash, or memory leak). Tony: move va_start() out of the declaration block
* Taint more operands with case changesKarl Williamson2014-01-271-4/+4
| | | | | | | | | | The documentation says that Perl taints certain operations when subject to locale rules, such as lc() and ucfirst(). Prior to this commit there were exceptions when the operand to these functions contained no characters whose case change actually varied depending on the locale, for example the empty string or above-Latin1 code points. Changing to conform to the documentation simplifies the core code, and yields more consistent results.
* utf8.c: Move a bunch of deprecated fcns to mathoms.cKarl Williamson2014-01-051-0/+395
| | | | | These functions will be out of the way in mathoms. There were a few that could not be moved, as-is, so I left them.
* perlapi: Consistent spaces after dotsFather Chrysostomos2013-12-291-17/+19
| | | | plus some typo fixes. I probably changed some things in perlintern, too.
* [perl #115736] fix undocumented param from newATTRSUB_flagsDaniel Dragan2013-12-231-1/+1
| | | | | flags param was poorly designed and didn't have a formal api. Replace it with the bool it really is. See #115736 for details.
* remove almost unreachable NULL sv arg code from sv_2*n_flagsDaniel Dragan2013-11-281-0/+6
| | | | | | | | | | | The NULL sv code being removed dates to commit e334a159a5 Perl 1.0 as the pre-SV str_2ptr and str_2num calls. When SVs were intoduced in commit 79072805bf Perl 5.0 alpha 2, the NULL sv code was copied to the new SV functions. The functions were bulk marked non-NULL in commit f54cb97a39 during 5.9.3 development. The docs were corrected to say NULLOK support in commit 53e8571218 during 5.11.0. See the perldelta part of this patch for the rest of commit body.
* fix multi-eval of Perl_custom_op_xop in XopENTRYDaniel Dragan2013-11-101-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 1830b3d9c8 introduced a flaw where XopENTRY calls Perl_custom_op_xop twice to retrieve the same XOP *. This is inefficient and causes extra machine code. Since I found no CPAN or upstream=blead usage of Perl_custom_op_xop, and its previous docs say it isn't 100% public, it is being converted to a macro. Most usage of Perl_custom_op_xop is to conditionally fetch a member of the XOP struct, which was previously implemented by XopENTRY. Move the XopENTRY logic and picking defaults to an expanded version of Perl_custom_op_xop. The union allows Perl_custom_op_get_field to return its result in 1 register, since the union is similar to a void * or IV, but with the machine code overhead of casting, if any, being done in the callee (Perl_custom_op_get_field), not the caller. Perl_custom_op_get_field can also return the XOP * without looking inside it to implement Perl_custom_op_xop. XopENTRYCUSTOM is a wrapper around Perl_custom_op_get_field with XopENTRY-like usage. XopENTRY is used by the OP_* macros, which are heavily used (but rarely called, since custom ops are rare) by Perl lang warnings system. The vararg warning arguments are usually evaluted no matter if the warning will be printed to STDERR or not. Since some people like to ignore warnings or run no strict; and warnings branches are frequent in pp_*, it is beneficial to make the OP_* macros smaller in machine code. The design of Perl_custom_op_get_field supports these goals. This commit does not pass judgement on Ben Morrow's unclear public or private API designation of Perl_custom_op_xop, and whether Perl_custom_op_xop should deprecated and removed from public API. It was trivial to leave a form of Perl_custom_op_xop in the new design. XOPe enums are identical to XOPf constants so no conversion has to be done between the field selector parameter and the field flag to test in machine code. ASSUME and NOT_REACHED are being introduced. The closest to the 2 previously was "assert(0)". Perl has not used ASSUME or CC specific versions of it before. Clang, GCC >= 4.5, and Visual C are supported. For completeness, ARMCC's __promise was added, but Perl is not known to have any support for ARMCC by this commiter. This patch is part of perl #115032.
* Move functions prematurely placed into mathoms back to utf8.cKarl Williamson2013-09-041-54/+0
| | | | | | | These functions are still called by some CPAN-upstream modules, so can't go into mathoms until those are fixed. There are other changes needed in these modules, so I'm deferring sending patching to their maintainers until I know all the necessary changes.
* utf8.c: Remove wrapper functions.Karl Williamson2013-08-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now that the Unicode data is stored in native character set order, it is rare to need to work with the Unicode order. Traditionally, the real work was done in functions that worked with the Unicode order, and wrapper functions (or macros) were used to translate to/from native. There are two groups of functions: one that translates from code point to UTF-8, and the other group goes the opposite direction. This commit changes the base function that translates from UTF-8 to code point to output native instead of Unicode. Those extremely rare instances where Unicode output is needed instead will have to hand-wrap calls to this function with a translation macro, as now described in the API pod. Prior to this, it was the other way, the native was wrapped, and the rare, strict Unicode wasn't. This eliminates a layer of function call overhead for a common case. The base function that translates from code point to UTF-8 retains its Unicode input, as that is more natural to process. However, it is de-emphasized in the pod, with the functionality description moved to the pod for a native input wrapper function. And, those wrappers are now macros in all cases; previously there was function call overhead sometimes. (Equivalent exported functions are retained, however, for XS code that uses the Perl_foo() form.) I had hoped to rebase this commit, squashing it with an earlier commit in this series, eliminating the use of a temporary function name change, but the work involved turns out to be large, with no real payoff.
* utf8.c: Stop using two functionsKarl Williamson2013-08-291-1/+46
| | | | | | | | | | | | | | | | | This is in preparation for deprecating these functions, to force any code that has been using these functions to change. Since the Unicode tables are now stored in native order, these functions should only rarely be needed. However, the functionality of these is needed, and in actuality, on ASCII platforms, the native functions are #defined to these. So what this commit does is rename the functions to something else, and create wrappers with the old names, so that anyone using them will get the deprecation when it actually goes into effect: we are waiting for CPAN files distributed with the core to change before doing the deprecation. According to cpan.grep.me, this should affect fewer than 10 additional CPAN distributions.
* Deprecate NATIVE_TO_NEED and ASCII_TO_NEEDKarl Williamson2013-08-291-0/+15
| | | | | | | | | | | | | | | | | | These macros are no longer called in the Perl core. This commit turns them into functions so that they can use gcc's deprecation facility. I believe these were defective right from the beginning, and I have struggled to understand what's going on. From the name, it appears NATIVE_TO_NEED taks a native byte and turns it into UTF-8 if the appropriate parameter indicates that. But that is impossible to do correctly from that API, as for variant characters, it needs to return two bytes. It could only work correctly if ch is an I8 byte, which isn't native, and hence the name would be wrong. Similar arguments for ASCII_TO_NEED. The function S_append_utf8_from_native_byte(const U8 byte, U8** dest) does what I think NATIVE_TO_NEED intended.
* embed.fnc, mathoms.c: Add commentsKarl Williamson2012-11-281-0/+2
|
* Remove "register" declarationsKarl Williamson2012-11-241-43/+43
| | | | | | | This finishes the removal of register declarations started by eb578fdb5569b91c28466a4d1939e381ff6ceaf4. It neglected the ones in function parameter declarations, and didn't include things in dist, ext, and lib, which this does include
* [perl #115440] Fix various leaks with fatal FETCHFather Chrysostomos2012-10-251-2/+4
| | | | | | | | | | | | | Various pieces of code were creating an SV and then assigning to it from a value that might be magical. If the source scalar is magical, it could die when magic is called, leaking the scalar that would have been assigned to. So we call get-magic before creating the new scalar, and then use a non-magical assignment. Also, anonhash and anonlist were doing nothing to protect the aggre- gate if an argument should die on FETCH, resulting in a leak.
* Perl_sv_mortalcopy expects a return value.Craig A. Berry2012-10-071-1/+1
| | | | | | | | | Courtesy of the OpenVMS C compiler, which said: SV * ^ %CC-I-MISSINGRETURN, Non-void function "Perl_sv_mortalcopy" does not contain a return statement. at line number 1206 in file D0:[craig.blead]mathoms.c;1
* [perl #79824] Don’t cow for sv_mortalcopy call from XSFather Chrysostomos2012-10-051-0/+7
| | | | | | | | XS code doing sv_mortalcopy(sv) will expect to get a true copy, and not a COW ‘copy’. So make sv_mortalcopy and wrapper around the new sv_mortalcopy_flags that passes it SV_DO_COW_SVSETSV, which is defined as 0 for XS code.
* Omnibus removal of register declarationsKarl Williamson2012-08-181-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This removes most register declarations in C code (and accompanying documentation) in the Perl core. Retained are those in the ext directory, Configure, and those that are associated with assembly language. See: http://stackoverflow.com/questions/314994/whats-a-good-example-of-register-variable-usage-in-c which says, in part: There is no good example of register usage when using modern compilers (read: last 10+ years) because it almost never does any good and can do some bad. When you use register, you are telling the compiler "I know how to optimize my code better than you do" which is almost never the case. One of three things can happen when you use register: The compiler ignores it, this is most likely. In this case the only harm is that you cannot take the address of the variable in the code. The compiler honors your request and as a result the code runs slower. The compiler honors your request and the code runs faster, this is the least likely scenario. Even if one compiler produces better code when you use register, there is no reason to believe another will do the same. If you have some critical code that the compiler is not optimizing well enough your best bet is probably to use assembler for that part anyway but of course do the appropriate profiling to verify the generated code is really a problem first.
* update the editor hints for spaces, not tabsRicardo Signes2012-05-291-2/+2
| | | | | This updates the editor hints in our files for Emacs and vim to request that tabs be inserted as spaces.
* Use the (START|END)_EXTERN_C macros.Craig A. Berry2012-05-241-6/+2
| | | | We seem to use them everywhere else in core.
* Unmangle mathoms under C++.Craig A. Berry2012-05-241-0/+11
| | | | | | | In order to actually provide binary compatibility, we have to serve up these functions under the names they were known by before making their way into mathoms.c. We've always done that under C, but not C++.
* Bump several file copyright datesSteffen Schwigon2012-01-191-1/+2
| | | | | | | Sync copyright dates with actual changes according to git history. [Plus run regen_perly.h to update the SHA-256 checksums, and regen/regcharclass.pl to update regcharclass.h]
* need backwards-compatile to_utf8_foo()Karl Williamson2012-01-081-0/+37
| | | | | | | | | | These 4 functions have been replaced by variants to_utf8_foo_flags(), but for XS code that called the old ones in the Perl_to_utf8_foo() forms, backwards compatibility versions need to be created. For calls of just the to_utf8_foo() forms, macros have been used to automatically call the new forms without the performance penalty of going through the compatibility functions.
* do_exec needs no compatibility version in mathoms.c as it's not in the API.Nicholas Clark2011-07-241-11/+0
| | | | | | | | | 9555a685dbd794b0 replaced it with a macro and added the full-name version in mathoms.c to retain compatibility with any program whose source code uses the full name. However, as do_exec was never in the API, no program would be using it. (It's also unconditionally explicitly not exported on various platforms including Win32. Google Codesearch and grep.cpan.me find no users of it outside the core.)
* More apidoc entries need \n\n before =cutFather Chrysostomos2011-07-161-0/+2
|
* mathoms.c: pod: fix broken linkKarl Williamson2011-05-181-1/+1
|
* Protect sv_collxfrm in mathoms.c with a USE_LOCALE_COLLATE ifdefDavid Leadbeater2011-03-281-0/+2
| | | | | It calls sv_collxfrm_flags which is only defined if USE_LOCALE_COLLATE is set.
* Replace OP stubs in mathoms.c with #define aliases in opcode.hNicholas Clark2011-01-091-438/+0
| | | | | | | External code that references OPs by name will still link (and work). Unlike the other compatibility functions in mathoms.c, the OP stubs were simply making calls onwards to their replacements, so simply taking up space without adding anything.
* Merge the opcode bodies for pp_bind and pp_connect.Nicholas Clark2010-12-301-0/+5
|
* Merge the opcode bodies for chop/chomp and schop/schomp.Nicholas Clark2010-12-271-0/+10
|
* Convert newSUB() to a macro wrapping Perl_newATTRSUB()Nicholas Clark2010-11-171-0/+7
| | | | | Provide a Perl_newSUB() function in mathoms.c for anyone referencing it by its full name.
* Document the new custom op functions.Ben Morrow2010-11-141-0/+14
|
* Improve custom OP support.Ben Morrow2010-11-141-0/+14
| | | | | | | | | | | | | | | | | Change the custom op registrations from two separate hashes to one hash holding structure pointers, and add API functions to register ops and look them up. This will make it easier to add new properties of custom ops in the future. Copy entries across from the old hashes where necessary, to preserve compatibility. Add two new properties, in addition to the already-existing 'name' and 'description': 'class' and 'peep'. 'class' is one of the OA_*OP constants, and allows B and other introspection mechanisms to work with custom ops that aren't BASEOPs. 'peep' is a pointer to a function that will be called for ops of this type from Perl_rpeep. Adjust B.xs to take account of the new properties, and also to give custom ops their registered name rather than simply 'custom'.
* mro_isa_changed_in3 is no longer necessaryFather Chrysostomos2010-11-111-7/+0
| | | | | | | | as of 80ebaca. It was nice while it lasted. This reverts 6f86b615fa.
* ANSI C-ify the Perl_mro_isa_changed_in return mathoms.cTony Cook2010-10-131-1/+1
| | | | | | | | A return statement with an expression shall not appear in a function whose return type is void. See http://source.test-smoke.org/tsdb?mode=report&rid=86779&top=86781 for an example build failure.
* Correct prototype of mathom Perl_mro_isa_changed_in() for ithreads.Nicholas Clark2010-10-111-1/+1
| | | | 6f86b615fa775fad forgot the pTHX_