summaryrefslogtreecommitdiff
path: root/pp.c
diff options
context:
space:
mode:
authorKarl Williamson <public@khwilliamson.com>2012-09-03 16:59:09 -0600
committerKarl Williamson <public@khwilliamson.com>2012-09-13 21:14:03 -0600
commit685289b5657b776e8a3871de68a57785e6ccd797 (patch)
treeeffb3627422467ccc329131b12c3de913ff5b8a4 /pp.c
parentb1af8fefbdf1c044271e0b9d8898e2d808ab7879 (diff)
downloadperl-685289b5657b776e8a3871de68a57785e6ccd797.tar.gz
Use macro not swash for utf8 quotemeta
The rules for matching whether an above-Latin1 code point are now saved in a macro generated from a trie by regen/regcharclass.pl, and these are now used by pp.c to test these cases. This allows removal of a wrapper subroutine, and also there is no need for dynamic loading at run-time into a swash. This macro is about as big as I'm comfortable compiling in, but it saves the building of a hash that can grow over time, and removes a subroutine and interpreter variables. Indeed, performance benchmarks show that it is about the same speed as a hash, but it does not require having to load the rules in from disk the first time it is used.
Diffstat (limited to 'pp.c')
-rw-r--r--pp.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/pp.c b/pp.c
index e1a6c78268..171201d1a9 100644
--- a/pp.c
+++ b/pp.c
@@ -29,6 +29,7 @@
#include "keywords.h"
#include "reentr.h"
+#include "regcharclass.h"
/* XXX I can't imagine anyone who doesn't have this actually _needs_
it, since pid_t is an integral type.
@@ -4041,7 +4042,7 @@ PP(pp_quotemeta)
to_quote = TRUE;
}
}
- else if (_is_utf8_quotemeta((U8 *) s)) {
+ else if (is_QUOTEMETA_high(s)) {
to_quote = TRUE;
}