Updated msys2 to msys2-base-x86_64-20200903

This commit is contained in:
Gator96100 2020-09-07 18:14:14 +02:00
commit 2307d54cb1
18501 changed files with 1684082 additions and 720361 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,151 @@
#
# itcl.tcl
# ----------------------------------------------------------------------
# Invoked automatically upon startup to customize the interpreter
# for [incr Tcl].
# ----------------------------------------------------------------------
# AUTHOR: Michael J. McLennan
# Bell Labs Innovations for Lucent Technologies
# mmclennan@lucent.com
# http://www.tcltk.com/itcl
# ----------------------------------------------------------------------
# Copyright (c) 1993-1998 Lucent Technologies, Inc.
# ======================================================================
# See the file "license.terms" for information on usage and
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
proc ::itcl::delete_helper { name args } {
::itcl::delete object $name
}
# ----------------------------------------------------------------------
# USAGE: local <className> <objName> ?<arg> <arg>...?
#
# Creates a new object called <objName> in class <className>, passing
# the remaining <arg>'s to the constructor. Unlike the usual
# [incr Tcl] objects, however, an object created by this procedure
# will be automatically deleted when the local call frame is destroyed.
# This command is useful for creating objects that should only remain
# alive until a procedure exits.
# ----------------------------------------------------------------------
proc ::itcl::local {class name args} {
set ptr [uplevel [list $class $name] $args]
uplevel [list set itcl-local-$ptr $ptr]
set cmd [uplevel namespace which -command $ptr]
uplevel [list trace variable itcl-local-$ptr u \
"::itcl::delete_helper $cmd"]
return $ptr
}
# ----------------------------------------------------------------------
# auto_mkindex
# ----------------------------------------------------------------------
# Define Itcl commands that will be recognized by the auto_mkindex
# parser in Tcl...
#
#
# USAGE: itcl::class name body
# Adds an entry for the given class declaration.
#
foreach __cmd {itcl::class class itcl::type type ictl::widget widget itcl::widgetadaptor widgetadaptor itcl::extendedclass extendedclass} {
auto_mkindex_parser::command $__cmd {name body} {
variable index
variable scriptFile
append index "set [list auto_index([fullname $name])]"
append index " \[list source \[file join \$dir [list $scriptFile]\]\]\n"
variable parser
variable contextStack
set contextStack [linsert $contextStack 0 $name]
$parser eval $body
set contextStack [lrange $contextStack 1 end]
}
}
#
# USAGE: itcl::body name arglist body
# Adds an entry for the given method/proc body.
#
foreach __cmd {itcl::body body} {
auto_mkindex_parser::command $__cmd {name arglist body} {
variable index
variable scriptFile
append index "set [list auto_index([fullname $name])]"
append index " \[list source \[file join \$dir [list $scriptFile]\]\]\n"
}
}
#
# USAGE: itcl::configbody name arglist body
# Adds an entry for the given method/proc body.
#
foreach __cmd {itcl::configbody configbody} {
auto_mkindex_parser::command $__cmd {name body} {
variable index
variable scriptFile
append index "set [list auto_index([fullname $name])]"
append index " \[list source \[file join \$dir [list $scriptFile]\]\]\n"
}
}
#
# USAGE: ensemble name ?body?
# Adds an entry to the auto index list for the given ensemble name.
#
foreach __cmd {itcl::ensemble ensemble} {
auto_mkindex_parser::command $__cmd {name {body ""}} {
variable index
variable scriptFile
append index "set [list auto_index([fullname $name])]"
append index " \[list source \[file join \$dir [list $scriptFile]\]\]\n"
}
}
#
# USAGE: public arg ?arg arg...?
# protected arg ?arg arg...?
# private arg ?arg arg...?
#
# Evaluates the arguments as commands, so we can recognize proc
# declarations within classes.
#
foreach __cmd {public protected private} {
auto_mkindex_parser::command $__cmd {args} {
variable parser
$parser eval $args
}
}
# SF bug #246 unset variable __cmd to avoid problems in user programs!!
unset __cmd
# ----------------------------------------------------------------------
# auto_import
# ----------------------------------------------------------------------
# This procedure overrides the usual "auto_import" function in the
# Tcl library. It is invoked during "namespace import" to make see
# if the imported commands reside in an autoloaded library. If so,
# stubs are created to represent the commands. Executing a stub
# later on causes the real implementation to be autoloaded.
#
# Arguments -
# pattern The pattern of commands being imported (like "foo::*")
# a canonical namespace as returned by [namespace current]
proc auto_import {pattern} {
global auto_index
set ns [uplevel namespace current]
set patternList [auto_qualify $pattern $ns]
auto_load_index
foreach pattern $patternList {
foreach name [array names auto_index $pattern] {
if {"" == [info commands $name]} {
::itcl::import::stub create $name
}
}
}
}

View file

@ -0,0 +1,67 @@
# itclConfig.sh --
#
# This shell script (for sh) is generated automatically by Itcl's
# configure script. It will create shell variables for most of
# the configuration options discovered by the configure script.
# This script is intended to be included by the configure scripts
# for Itcl extensions so that they don't have to figure this all
# out for themselves. This file does not duplicate information
# already provided by tclConfig.sh, so you may need to use that
# file in addition to this one.
#
# The information in this file is specific to a single platform.
# Itcl's version number.
itcl_VERSION='4.2.0'
ITCL_VERSION='4.2.0'
# The name of the Itcl library (may be either a .a file or a shared library):
itcl_LIB_FILE=libitcl4.2.0.dll
ITCL_LIB_FILE=libitcl4.2.0.dll
# String to pass to linker to pick up the Itcl library from its
# build directory.
itcl_BUILD_LIB_SPEC='-L/msysdev/tcl/src/tcl8.6.10/unix/pkgs/itcl4.2.0 -litcl4.2.0'
ITCL_BUILD_LIB_SPEC='-L/msysdev/tcl/src/tcl8.6.10/unix/pkgs/itcl4.2.0 -litcl4.2.0'
# String to pass to linker to pick up the Itcl library from its
# installed directory.
itcl_LIB_SPEC='-L/usr/lib/itcl4.2.0 -litcl4.2.0'
ITCL_LIB_SPEC='-L/usr/lib/itcl4.2.0 -litcl4.2.0'
# The name of the Itcl stub library (a .a file):
itcl_STUB_LIB_FILE=libitclstub4.2.0.a
ITCL_STUB_LIB_FILE=libitclstub4.2.0.a
# String to pass to linker to pick up the Itcl stub library from its
# build directory.
itcl_BUILD_STUB_LIB_SPEC='-L/msysdev/tcl/src/tcl8.6.10/unix/pkgs/itcl4.2.0 -litclstub4.2.0'
ITCL_BUILD_STUB_LIB_SPEC='-L/msysdev/tcl/src/tcl8.6.10/unix/pkgs/itcl4.2.0 -litclstub4.2.0'
# String to pass to linker to pick up the Itcl stub library from its
# installed directory.
itcl_STUB_LIB_SPEC='-L/usr/lib/itcl4.2.0 -litclstub4.2.0'
ITCL_STUB_LIB_SPEC='-L/usr/lib/itcl4.2.0 -litclstub4.2.0'
# String to pass to linker to pick up the Itcl stub library from its
# build directory.
itcl_BUILD_STUB_LIB_PATH='/msysdev/tcl/src/tcl8.6.10/unix/pkgs/itcl4.2.0/libitclstub4.2.0.a'
ITCL_BUILD_STUB_LIB_PATH='/msysdev/tcl/src/tcl8.6.10/unix/pkgs/itcl4.2.0/libitclstub4.2.0.a'
# String to pass to linker to pick up the Itcl stub library from its
# installed directory.
itcl_STUB_LIB_PATH='/usr/lib/itcl4.2.0/libitclstub4.2.0.a'
ITCL_STUB_LIB_PATH='/usr/lib/itcl4.2.0/libitclstub4.2.0.a'
# Location of the top-level source directories from which [incr Tcl]
# was built. This is the directory that contains generic, unix, etc.
# If [incr Tcl] was compiled in a different place than the directory
# containing the source files, this points to the location of the sources,
# not the location where [incr Tcl] was compiled.
itcl_SRC_DIR='/msysdev/tcl/src/tcl8.6.10/pkgs/itcl4.2.0'
ITCL_SRC_DIR='/msysdev/tcl/src/tcl8.6.10/pkgs/itcl4.2.0'
# String to pass to the compiler so that an extension can
# find installed Itcl headers.
itcl_INCLUDE_SPEC='-I/msysdev/tcl/src/tcl8.6.10/pkgs/itcl4.2.0/generic'
ITCL_INCLUDE_SPEC='-I/msysdev/tcl/src/tcl8.6.10/pkgs/itcl4.2.0/generic'

View file

@ -0,0 +1,562 @@
#
# itclHullCmds.tcl
# ----------------------------------------------------------------------
# Invoked automatically upon startup to customize the interpreter
# for [incr Tcl] when one of setupcomponent or createhull is called.
# ----------------------------------------------------------------------
# AUTHOR: Arnulf P. Wiedemann
#
# ----------------------------------------------------------------------
# Copyright (c) 2008 Arnulf P. Wiedemann
# ======================================================================
# See the file "license.terms" for information on usage and
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
package require Tk 8.6
namespace eval ::itcl::internal::commands {
# ======================= widgetDeleted ===========================
proc widgetDeleted {oldName newName op} {
# The widget is beeing deleted, so we have to delete the object
# which had the widget as itcl_hull too!
# We have to get the real name from for example
# ::itcl::internal::widgets::hull1.lw
# we need only .lw here
#puts stderr "widgetDeleted!$oldName!$newName!$op!"
set cmdName [namespace tail $oldName]
set flds [split $cmdName {.}]
set cmdName .[join [lrange $flds 1 end] {.}]
#puts stderr "DELWIDGET![namespace current]!$cmdName![::info command $cmdName]!"
rename $cmdName {}
}
}
namespace eval ::itcl::builtin {
# ======================= createhull ===========================
# the hull widget is a tk widget which is the (mega) widget handled behind the itcl
# extendedclass/itcl widget.
# It is created be renaming the itcl class object to a temporary name <itcl object name>_
# creating the widget with the
# appropriate options and the installing that as the "hull" widget (the container)
# All the options in args and the options delegated to component itcl_hull are used
# Then a unique name (hull_widget_name) in the itcl namespace is created for widget:
# ::itcl::internal::widgets::hull<unique number><namespace tail path>
# and widget is renamed to that name
# Finally the <itcl object name>_ is renamed to the original <itcl object name> again
# Component itcl_hull is created if not existent
# itcl_hull is set to the hull_widget_name and the <itcl object name>
# is returned to the caller
# ==============================================================
proc createhull {widget_type path args} {
variable hullCount
upvar this this
upvar win win
#puts stderr "il-1![::info level -1]!$this!"
#puts stderr "createhull!$widget_type!$path!$args!$this![::info command $this]!"
#puts stderr "ns1![uplevel 1 namespace current]!"
#puts stderr "ns2![uplevel 2 namespace current]!"
#puts stderr "ns3![uplevel 3 namespace current]!"
#puts stderr "level-1![::info level -1]!"
#puts stderr "level-2![::info level -2]!"
# set my_this [namespace tail $this]
set my_this $this
set tmp $my_this
#puts stderr "II![::info command $this]![::info command $tmp]!"
#puts stderr "rename1!rename $my_this ${tmp}_!"
rename ::$my_this ${tmp}_
set options [list]
foreach {option_name value} $args {
switch -glob -- $option_name {
-class {
lappend options $option_name [namespace tail $value]
}
-* {
lappend options $option_name $value
}
default {
return -code error "bad option name\"$option_name\" options must start with a \"-\""
}
}
}
set my_win [namespace tail $path]
set cmd [list $widget_type $my_win]
#puts stderr "my_win!$my_win!cmd!$cmd!$path!"
if {[llength $options] > 0} {
lappend cmd {*}$options
}
set widget [uplevel 1 $cmd]
#puts stderr "widget!$widget!"
trace add command $widget delete ::itcl::internal::commands::widgetDeleted
set opts [uplevel 1 info delegated options]
foreach entry $opts {
foreach {optName compName} $entry break
if {$compName eq "itcl_hull"} {
set optInfos [uplevel 1 info delegated option $optName]
set realOptName [lindex $optInfos 4]
# strip off the "-" at the beginning
set myOptName [string range $realOptName 1 end]
set my_opt_val [option get $my_win $myOptName *]
if {$my_opt_val ne ""} {
$my_win configure -$myOptName $my_opt_val
}
}
}
set idx 1
while {1} {
set widgetName ::itcl::internal::widgets::hull${idx}$my_win
#puts stderr "widgetName!$widgetName!"
if {[string length [::info command $widgetName]] == 0} {
break
}
incr idx
}
#puts stderr "rename2!rename $widget $widgetName!"
set dorename 0
rename $widget $widgetName
#puts stderr "rename3!rename ${tmp}_ $tmp![::info command ${tmp}_]!my_this!$my_this!"
rename ${tmp}_ ::$tmp
set exists [uplevel 1 ::info exists itcl_hull]
if {!$exists} {
# that does not yet work, beacause of problems with resolving
::itcl::addcomponent $my_this itcl_hull
}
upvar itcl_hull itcl_hull
::itcl::setcomponent $my_this itcl_hull $widgetName
#puts stderr "IC![::info command $my_win]!"
set exists [uplevel 1 ::info exists itcl_interior]
if {!$exists} {
# that does not yet work, beacause of problems with resolving
::itcl::addcomponent $this itcl_interior
}
upvar itcl_interior itcl_interior
set itcl_interior $my_win
#puts stderr "hull end!win!$win!itcl_hull!$itcl_hull!itcl_interior!$itcl_interior!"
return $my_win
}
# ======================= addToItclOptions ===========================
proc addToItclOptions {my_class my_win myOptions argsDict} {
upvar win win
upvar itcl_hull itcl_hull
set opt_lst [list configure]
foreach opt [lsort $myOptions] {
#puts stderr "IOPT!$opt!$my_class!$my_win![::itcl::is class $my_class]!"
set isClass [::itcl::is class $my_class]
set found 0
if {$isClass} {
if {[catch {
set resource [namespace eval $my_class info option $opt -resource]
set class [namespace eval $my_class info option $opt -class]
set default_val [uplevel 2 info option $opt -default]
set found 1
} msg]} {
# puts stderr "MSG!$opt!$my_class!$msg!"
}
} else {
set tmp_win [uplevel #0 $my_class .___xx]
set my_info [$tmp_win configure $opt]
set resource [lindex $my_info 1]
set class [lindex $my_info 2]
set default_val [lindex $my_info 3]
uplevel #0 destroy $tmp_win
set found 1
}
if {$found} {
if {[catch {
set val [uplevel #0 ::option get $win $resource $class]
} msg]} {
set val ""
}
if {[::dict exists $argsDict $opt]} {
# we have an explicitly set option
set val [::dict get $argsDict $opt]
} else {
if {[string length $val] == 0} {
set val $default_val
}
}
set ::itcl::internal::variables::${my_win}::itcl_options($opt) $val
set ::itcl::internal::variables::${my_win}::__itcl_option_infos($opt) [list $resource $class $default_val]
#puts stderr "OPT1!$opt!$val!"
# uplevel 1 [list set itcl_options($opt) [list $val]]
if {[catch {uplevel 1 $win configure $opt [list $val]} msg]} {
#puts stderr "addToItclOptions ERR!$msg!$my_class!$win!configure!$opt!$val!"
}
}
}
}
# ======================= setupcomponent ===========================
proc setupcomponent {comp using widget_type path args} {
upvar this this
upvar win win
upvar itcl_hull itcl_hull
#puts stderr "setupcomponent!$comp!$widget_type!$path!$args!$this!$win!$itcl_hull!"
#puts stderr "CONT![uplevel 1 info context]!"
#puts stderr "ns1![uplevel 1 namespace current]!"
#puts stderr "ns2![uplevel 2 namespace current]!"
#puts stderr "ns3![uplevel 3 namespace current]!"
set my_comp_object [lindex [uplevel 1 info context] 1]
if {[::info exists ::itcl::internal::component_objects($my_comp_object)]} {
set my_comp_object [set ::itcl::internal::component_objects($my_comp_object)]
} else {
set ::itcl::internal::component_objects($path) $my_comp_object
}
set options [list]
foreach {option_name value} $args {
switch -glob -- $option_name {
-* {
lappend options $option_name $value
}
default {
return -code error "bad option name\"$option_name\" options must start with a \"-\""
}
}
}
if {[llength $args]} {
set argsDict [dict create {*}$args]
} else {
set argsDict [dict create]
}
set cmd [list $widget_type $path]
if {[llength $options] > 0} {
lappend cmd {*}$options
}
#puts stderr "cmd0![::info command $widget_type]!$path![::info command $path]!"
#puts stderr "cmd1!$cmd!"
# set my_comp [uplevel 3 $cmd]
set my_comp [uplevel #0 $cmd]
#puts stderr 111![::info command $path]!
::itcl::setcomponent $this $comp $my_comp
set opts [uplevel 1 info delegated options]
foreach entry $opts {
foreach {optName compName} $entry break
if {$compName eq $my_comp} {
set optInfos [uplevel 1 info delegated option $optName]
set realOptName [lindex $optInfos 4]
# strip off the "-" at the beginning
set myOptName [string range $realOptName 1 end]
set my_opt_val [option get $my_win $myOptName *]
if {$my_opt_val ne ""} {
$my_comp configure -$myOptName $my_opt_val
}
}
}
set my_class $widget_type
set my_parent_class [uplevel 1 namespace current]
if {[catch {
set myOptions [namespace eval $my_class {info classoptions}]
} msg]} {
set myOptions [list]
}
foreach entry [$path configure] {
foreach {opt dummy1 dummy2 dummy3} $entry break
lappend myOptions $opt
}
#puts stderr "OPTS!$myOptions!"
addToItclOptions $widget_type $my_comp_object $myOptions $argsDict
#puts stderr END!$path![::info command $path]!
}
proc itcl_initoptions {args} {
puts stderr "ITCL_INITOPT!$args!"
}
# ======================= initoptions ===========================
proc initoptions {args} {
upvar win win
upvar itcl_hull itcl_hull
upvar itcl_option_components itcl_option_components
#puts stderr "INITOPT!!$win!"
if {[llength $args]} {
set argsDict [dict create {*}$args]
} else {
set argsDict [dict create]
}
set my_class [uplevel 1 namespace current]
set myOptions [namespace eval $my_class {info classoptions}]
if {[dict exists $::itcl::internal::dicts::classComponents $my_class]} {
set class_info_dict [dict get $::itcl::internal::dicts::classComponents $my_class]
# set myOptions [lsort -unique [namespace eval $my_class {info options}]]
foreach comp [uplevel 1 info components] {
if {[dict exists $class_info_dict $comp -keptoptions]} {
foreach my_opt [dict get $class_info_dict $comp -keptoptions] {
if {[lsearch $myOptions $my_opt] < 0} {
#puts stderr "KEOPT!$my_opt!"
lappend myOptions $my_opt
}
}
}
}
} else {
set class_info_dict [list]
}
#puts stderr "OPTS!$win!$my_class![join [lsort $myOptions]] \n]!"
set opt_lst [list configure]
set my_win $win
foreach opt [lsort $myOptions] {
set found 0
if {[catch {
set resource [uplevel 1 info option $opt -resource]
set class [uplevel 1 info option $opt -class]
set default_val [uplevel 1 info option $opt -default]
set found 1
} msg]} {
# puts stderr "MSG!$opt!$msg!"
}
#puts stderr "OPT!$opt!$found!"
if {$found} {
if {[catch {
set val [uplevel #0 ::option get $my_win $resource $class]
} msg]} {
set val ""
}
if {[::dict exists $argsDict $opt]} {
# we have an explicitly set option
set val [::dict get $argsDict $opt]
} else {
if {[string length $val] == 0} {
set val $default_val
}
}
set ::itcl::internal::variables::${win}::itcl_options($opt) $val
set ::itcl::internal::variables::${win}::__itcl_option_infos($opt) [list $resource $class $default_val]
#puts stderr "OPT1!$opt!$val!"
# uplevel 1 [list set itcl_options($opt) [list $val]]
if {[catch {uplevel 1 $my_win configure $opt [list $val]} msg]} {
puts stderr "initoptions ERR!$msg!$my_class!$my_win!configure!$opt!$val!"
}
}
foreach comp [dict keys $class_info_dict] {
#puts stderr "OPT1!$opt!$comp![dict get $class_info_dict $comp]!"
if {[dict exists $class_info_dict $comp -keptoptions]} {
if {[lsearch [dict get $class_info_dict $comp -keptoptions] $opt] >= 0} {
if {$found == 0} {
# we use the option value of the first component for setting
# the option, as the components are traversed in the dict
# depending on the ordering of the component creation!!
set my_info [uplevel 1 \[set $comp\] configure $opt]
set resource [lindex $my_info 1]
set class [lindex $my_info 2]
set default_val [lindex $my_info 3]
set found 2
set val [uplevel #0 ::option get $my_win $resource $class]
if {[::dict exists $argsDict $opt]} {
# we have an explicitly set option
set val [::dict get $argsDict $opt]
} else {
if {[string length $val] == 0} {
set val $default_val
}
}
#puts stderr "OPT2!$opt!$val!"
set ::itcl::internal::variables::${win}::itcl_options($opt) $val
set ::itcl::internal::variables::${win}::__itcl_option_infos($opt) [list $resource $class $default_val]
# uplevel 1 [list set itcl_options($opt) [list $val]]
}
if {[catch {uplevel 1 \[set $comp\] configure $opt [list $val]} msg]} {
puts stderr "initoptions ERR2!$msg!$my_class!$comp!configure!$opt!$val!"
}
if {![uplevel 1 info exists itcl_option_components($opt)]} {
set itcl_option_components($opt) [list]
}
if {[lsearch [set itcl_option_components($opt)] $comp] < 0} {
if {![catch {
set optval [uplevel 1 [list set itcl_options($opt)]]
} msg3]} {
uplevel 1 \[set $comp\] configure $opt $optval
}
lappend itcl_option_components($opt) $comp
}
}
}
}
}
# uplevel 1 $opt_lst
}
# ======================= setoptions ===========================
proc setoptions {args} {
#puts stderr "setOPT!!$args!"
if {[llength $args]} {
set argsDict [dict create {*}$args]
} else {
set argsDict [dict create]
}
set my_class [uplevel 1 namespace current]
set myOptions [namespace eval $my_class {info options}]
#puts stderr "OPTS!$win!$my_class![join [lsort $myOptions]] \n]!"
set opt_lst [list configure]
foreach opt [lsort $myOptions] {
set found 0
if {[catch {
set resource [uplevel 1 info option $opt -resource]
set class [uplevel 1 info option $opt -class]
set default_val [uplevel 1 info option $opt -default]
set found 1
} msg]} {
# puts stderr "MSG!$opt!$msg!"
}
#puts stderr "OPT!$opt!$found!"
if {$found} {
set val ""
if {[::dict exists $argsDict $opt]} {
# we have an explicitly set option
set val [::dict get $argsDict $opt]
} else {
if {[string length $val] == 0} {
set val $default_val
}
}
set myObj [uplevel 1 set this]
#puts stderr "myObj!$myObj!"
set ::itcl::internal::variables::${myObj}::itcl_options($opt) $val
set ::itcl::internal::variables::${myObj}::__itcl_option_infos($opt) [list $resource $class $default_val]
#puts stderr "OPT1!$opt!$val!"
uplevel 1 [list set itcl_options($opt) [list $val]]
# if {[catch {uplevel 1 $myObj configure $opt [list $val]} msg]} {
#puts stderr "initoptions ERR!$msg!$my_class!$my_win!configure!$opt!$val!"
# }
}
}
# uplevel 1 $opt_lst
}
# ========================= keepcomponentoption ======================
# Invoked by Tcl during evaluating constructor whenever
# the "keepcomponentoption" command is invoked to list the options
# to be kept when an ::itcl::extendedclass component has been setup
# for an object.
#
# It checks, for all arguments, if the opt is an option of that class
# and of that component. If that is the case it adds the component name
# to the list of components for that option.
# The variable is the object variable: itcl_option_components($opt)
#
# Handles the following syntax:
#
# keepcomponentoption <componentName> <optionName> ?<optionName> ...?
#
# ======================================================================
proc keepcomponentoption {args} {
upvar win win
upvar itcl_hull itcl_hull
set usage "wrong # args, should be: keepcomponentoption componentName optionName ?optionName ...?"
#puts stderr "KEEP!$args![uplevel 1 namespace current]!"
if {[llength $args] < 2} {
puts stderr $usage
return -code error
}
set my_hull [uplevel 1 set itcl_hull]
set my_class [uplevel 1 namespace current]
set comp [lindex $args 0]
set args [lrange $args 1 end]
set class_info_dict [dict get $::itcl::internal::dicts::classComponents $my_class]
if {![dict exists $class_info_dict $comp]} {
puts stderr "keepcomponentoption cannot find component \"$comp\""
return -code error
}
set class_comp_dict [dict get $class_info_dict $comp]
if {![dict exists $class_comp_dict -keptoptions]} {
dict set class_comp_dict -keptoptions [list]
}
foreach opt $args {
#puts stderr "KEEP!$opt!"
if {[string range $opt 0 0] ne "-"} {
puts stderr "keepcomponentoption: option must begin with a \"-\"!"
return -code error
}
if {[lsearch [dict get $class_comp_dict -keptoptions] $opt] < 0} {
dict lappend class_comp_dict -keptoptions $opt
}
}
if {![info exists ::itcl::internal::component_objects([lindex [uplevel 1 info context] 1])]} {
set comp_object $::itcl::internal::component_objects([lindex [uplevel 1 info context] 1])
} else {
set comp_object "unknown_comp_obj_$comp!"
}
dict set class_info_dict $comp $class_comp_dict
dict set ::itcl::internal::dicts::classComponents $my_class $class_info_dict
puts stderr "CLDI!$class_comp_dict!"
addToItclOptions $my_class $comp_object $args [list]
}
proc ignorecomponentoption {args} {
puts stderr "IGNORE_COMPONENT_OPTION!$args!"
}
proc renamecomponentoption {args} {
puts stderr "rename_COMPONENT_OPTION!$args!"
}
proc addoptioncomponent {args} {
puts stderr "ADD_OPTION_COMPONENT!$args!"
}
proc ignoreoptioncomponent {args} {
puts stderr "IGNORE_OPTION_COMPONENT!$args!"
}
proc renameoptioncomponent {args} {
puts stderr "RENAME_OPTION_COMPONENT!$args!"
}
proc getEclassOptions {args} {
upvar win win
#puts stderr "getEclassOptions!$args!$win![uplevel 1 namespace current]!"
#parray ::itcl::internal::variables::${win}::itcl_options
set result [list]
foreach opt [array names ::itcl::internal::variables::${win}::itcl_options] {
if {[catch {
foreach {res cls def} [set ::itcl::internal::variables::${win}::__itcl_option_infos($opt)] break
lappend result [list $opt $res $cls $def [set ::itcl::internal::variables::${win}::itcl_options($opt)]]
} msg]} {
}
}
return $result
}
proc eclassConfigure {args} {
upvar win win
#puts stderr "+++ eclassConfigure!$args!"
if {[llength $args] > 1} {
foreach {opt val} $args break
if {[::info exists ::itcl::internal::variables::${win}::itcl_options($opt)]} {
set ::itcl::internal::variables::${win}::itcl_options($opt) $val
return
}
} else {
foreach {opt} $args break
if {[::info exists ::itcl::internal::variables::${win}::itcl_options($opt)]} {
#puts stderr "OP![set ::itcl::internal::variables::${win}::itcl_options($opt)]!"
foreach {res cls def} [set ::itcl::internal::variables::${win}::__itcl_option_infos($opt)] break
return [list $opt $res $cls $def [set ::itcl::internal::variables::${win}::itcl_options($opt)]]
}
}
return -code error
}
}

View file

@ -0,0 +1,447 @@
#
# itclWidget.tcl
# ----------------------------------------------------------------------
# Invoked automatically upon startup to customize the interpreter
# for [incr Tcl] when one of ::itcl::widget or ::itcl::widgetadaptor is called.
# ----------------------------------------------------------------------
# AUTHOR: Arnulf P. Wiedemann
#
# ----------------------------------------------------------------------
# Copyright (c) 2008 Arnulf P. Wiedemann
# ======================================================================
# See the file "license.terms" for information on usage and
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
package require Tk 8.6
# package require itclwidget [set ::itcl::version]
namespace eval ::itcl {
proc widget {name args} {
set result [uplevel 1 ::itcl::internal::commands::genericclass widget $name $args]
# we handle create by owerselfs !! allow classunknown to handle that
oo::objdefine $result unexport create
return $result
}
proc widgetadaptor {name args} {
set result [uplevel 1 ::itcl::internal::commands::genericclass widgetadaptor $name $args]
# we handle create by owerselfs !! allow classunknown to handle that
oo::objdefine $result unexport create
return $result
}
} ; # end ::itcl
namespace eval ::itcl::internal::commands {
proc initWidgetOptions {varNsName widgetName className} {
set myDict [set ::itcl::internal::dicts::classOptions]
if {$myDict eq ""} {
return
}
if {![dict exists $myDict $className]} {
return
}
set myDict [dict get $myDict $className]
foreach option [dict keys $myDict] {
set infos [dict get $myDict $option]
set resource [dict get $infos -resource]
set class [dict get $infos -class]
set value [::option get $widgetName $resource $class]
if {$value eq ""} {
if {[dict exists $infos -default]} {
set defaultValue [dict get $infos -default]
uplevel 1 set ${varNsName}::itcl_options($option) $defaultValue
}
} else {
uplevel 1 set ${varNsName}::itcl_options($option) $value
}
}
}
proc initWidgetDelegatedOptions {varNsName widgetName className args} {
set myDict [set ::itcl::internal::dicts::classDelegatedOptions]
if {$myDict eq ""} {
return
}
if {![dict exists $myDict $className]} {
return
}
set myDict [dict get $myDict $className]
foreach option [dict keys $myDict] {
set infos [dict get $myDict $option]
if {![dict exists $infos -resource]} {
# this is the case when delegating "*"
continue
}
if {![dict exists $infos -component]} {
# nothing to do
continue
}
# check if not in the command line options
# these have higher priority
set myOption $option
if {[dict exists $infos -as]} {
set myOption [dict get $infos -as]
}
set noOptionSet 0
foreach {optName optVal} $args {
if {$optName eq $myOption} {
set noOptionSet 1
break
}
}
if {$noOptionSet} {
continue
}
set resource [dict get $infos -resource]
set class [dict get $infos -class]
set component [dict get $infos -component]
set value [::option get $widgetName $resource $class]
if {$component ne ""} {
if {$value ne ""} {
set compVar [namespace eval ${varNsName}${className} "set $component"]
if {$compVar ne ""} {
uplevel 1 $compVar configure $myOption $value
}
}
}
}
}
proc widgetinitobjectoptions {varNsName widgetName className} {
#puts stderr "initWidgetObjectOptions!$varNsName!$widgetName!$className!"
}
proc deletehull {newName oldName what} {
if {$what eq "delete"} {
set name [namespace tail $newName]
regsub {hull[0-9]+} $name {} name
rename $name {}
}
if {$what eq "rename"} {
set name [namespace tail $newName]
regsub {hull[0-9]+} $name {} name
rename $name {}
}
}
proc hullandoptionsinstall {objectName className widgetClass hulltype args} {
if {$hulltype eq ""} {
set hulltype frame
}
set idx 0
set found 0
foreach {optName optValue} $args {
if {$optName eq "-class"} {
set found 1
set widgetClass $optValue
break
}
incr idx
}
if {$found} {
set args [lreplace $args $idx [expr {$idx + 1}]]
}
if {$widgetClass eq ""} {
set widgetClass $className
set widgetClass [string totitle $widgetClass]
}
set cmd "set win $objectName; ::itcl::builtin::installhull using $hulltype -class $widgetClass $args"
uplevel 2 $cmd
}
} ; # end ::itcl::internal::commands
namespace eval ::itcl::builtin {
proc installhull {args} {
set cmdPath ::itcl::internal::commands
set className [uplevel 1 info class]
set replace 0
switch -- [llength $args] {
0 {
return -code error\
"wrong # args: should be \"[lindex [info level 0] 0]\
name|using <widgetType> ?arg ...?\""
}
1 {
set widgetName [lindex $args 0]
set varNsName $::itcl::internal::varNsName($widgetName)
}
default {
upvar win win
set widgetName $win
set varNsName $::itcl::internal::varNsName($widgetName)
set widgetType [lindex $args 1]
incr replace
if {[llength $args] > 3 && [lindex $args 2] eq "-class"} {
set classNam [lindex $args 3]
incr replace 2
} else {
set classNam [string totitle $widgetType]
}
uplevel 1 [lreplace $args 0 $replace $widgetType $widgetName -class $classNam]
uplevel 1 [list ${cmdPath}::initWidgetOptions $varNsName $widgetName $className]
}
}
# initialize the itcl_hull variable
set i 0
set nam ::itcl::internal::widgets::hull
while {1} {
incr i
set hullNam ${nam}${i}$widgetName
if {[::info command $hullNam] eq ""} {
break
}
}
uplevel 1 [list ${cmdPath}::sethullwindowname $widgetName]
uplevel 1 [list ::rename $widgetName $hullNam]
uplevel 1 [list ::trace add command $hullNam {delete rename} ::itcl::internal::commands::deletehull]
catch {${cmdPath}::checksetitclhull [list] 0}
namespace eval ${varNsName}${className} "set itcl_hull $hullNam"
catch {${cmdPath}::checksetitclhull [list] 2}
uplevel 1 [lreplace $args 0 $replace ${cmdPath}::initWidgetDelegatedOptions $varNsName $widgetName $className]
}
proc installcomponent {args} {
upvar win win
set className [uplevel 1 info class]
set myType [${className}::info types [namespace tail $className]]
set isType 0
if {$myType ne ""} {
set isType 1
}
set numArgs [llength $args]
set usage "usage: installcomponent <componentName> using <widgetType> <widgetPath> ?-option value ...?"
if {$numArgs < 4} {
error $usage
}
foreach {componentName using widgetType widgetPath} $args break
set opts [lrange $args 4 end]
if {$using ne "using"} {
error $usage
}
if {!$isType} {
set hullExists [uplevel 1 ::info exists itcl_hull]
if {!$hullExists} {
error "cannot install \"$componentName\" before \"itcl_hull\" exists"
}
set hullVal [uplevel 1 set itcl_hull]
if {$hullVal eq ""} {
error "cannot install \"$componentName\" before \"itcl_hull\" exists"
}
}
# check for delegated option and ask the option database for the values
# first check for number of delegated options
set numOpts 0
set starOption 0
set myDict [set ::itcl::internal::dicts::classDelegatedOptions]
if {[dict exists $myDict $className]} {
set myDict [dict get $myDict $className]
foreach option [dict keys $myDict] {
if {$option eq "*"} {
set starOption 1
}
incr numOpts
}
}
set myOptionDict [set ::itcl::internal::dicts::classOptions]
if {[dict exists $myOptionDict $className]} {
set myOptionDict [dict get $myOptionDict $className]
}
set cmd [list $widgetPath configure]
set cmd1 "set $componentName \[$widgetType $widgetPath\]"
uplevel 1 $cmd1
if {$starOption} {
upvar $componentName compName
set cmd1 [list $compName configure]
set configInfos [uplevel 1 $cmd1]
foreach entry $configInfos {
if {[llength $entry] > 2} {
foreach {optName resource class defaultValue} $entry break
set val ""
catch {
set val [::option get $win $resource $class]
}
if {$val ne ""} {
set addOpt 1
if {[dict exists $myDict $$optName]} {
set addOpt 0
} else {
set starDict [dict get $myDict "*"]
if {[dict exists $starDict -except]} {
set exceptions [dict get $starDict -except]
if {[lsearch $exceptions $optName] >= 0} {
set addOpt 0
}
}
if {[dict exists $myOptionDict $optName]} {
set addOpt 0
}
}
if {$addOpt} {
lappend cmd $optName $val
}
}
}
}
} else {
foreach optName [dict keys $myDict] {
set optInfos [dict get $myDict $optName]
set resource [dict get $optInfos -resource]
set class [namespace tail $className]
set class [string totitle $class]
set val ""
catch {
set val [::option get $win $resource $class]
}
if {$val ne ""} {
if {[dict exists $optInfos -as] } {
set optName [dict get $optInfos -as]
}
lappend cmd $optName $val
}
}
}
lappend cmd {*}$opts
uplevel 1 $cmd
}
} ; # end ::itcl::builtin
set ::itcl::internal::dicts::hullTypes [list \
frame \
toplevel \
labelframe \
ttk:frame \
ttk:toplevel \
ttk:labelframe \
]
namespace eval ::itcl::builtin::Info {
proc hulltypes {args} {
namespace upvar ::itcl::internal::dicts hullTypes hullTypes
set numArgs [llength $args]
if {$numArgs > 1} {
error "wrong # args should be: info hulltypes ?<pattern>?"
}
set pattern ""
if {$numArgs > 0} {
set pattern [lindex $args 0]
}
if {$pattern ne ""} {
return [lsearch -all -inline -glob $hullTypes $pattern]
}
return $hullTypes
}
proc widgetclasses {args} {
set numArgs [llength $args]
if {$numArgs > 1} {
error "wrong # args should be: info widgetclasses ?<pattern>?"
}
set pattern ""
if {$numArgs > 0} {
set pattern [lindex $args 0]
}
set myDict [set ::itcl::internal::dicts::classes]
if {![dict exists $myDict widget]} {
return [list]
}
set myDict [dict get $myDict widget]
set result [list]
if {$pattern ne ""} {
foreach key [dict keys $myDict] {
set myInfo [dict get $myDict $key]
set value [dict get $myInfo -widget]
if {[string match $pattern $value]} {
lappend result $value
}
}
} else {
foreach key [dict keys $myDict] {
set myInfo [dict get $myDict $key]
lappend result [dict get $myInfo -widget]
}
}
return $result
}
proc widgets {args} {
set numArgs [llength $args]
if {$numArgs > 1} {
error "wrong # args should be: info widgets ?<pattern>?"
}
set pattern ""
if {$numArgs > 0} {
set pattern [lindex $args 0]
}
set myDict [set ::itcl::internal::dicts::classes]
if {![dict exists $myDict widget]} {
return [list]
}
set myDict [dict get $myDict widget]
set result [list]
if {$pattern ne ""} {
foreach key [dict keys $myDict] {
set myInfo [dict get $myDict $key]
set value [dict get $myInfo -name]
if {[string match $pattern $value]} {
lappend result $value
}
}
} else {
foreach key [dict keys $myDict] {
set myInfo [dict get $myDict $key]
lappend result [dict get $myInfo -name]
}
}
return $result
}
proc widgetadaptors {args} {
set numArgs [llength $args]
if {$numArgs > 1} {
error "wrong # args should be: info widgetadaptors ?<pattern>?"
}
set pattern ""
if {$numArgs > 0} {
set pattern [lindex $args 0]
}
set myDict [set ::itcl::internal::dicts::classes]
if {![dict exists $myDict widgetadaptor]} {
return [list]
}
set myDict [dict get $myDict widgetadaptor]
set result [list]
if {$pattern ne ""} {
foreach key [dict keys $myDict] {
set myInfo [dict get $myDict $key]
set value [dict get $myInfo -name]
if {[string match $pattern $value]} {
lappend result $value
}
}
} else {
foreach key [dict keys $myDict] {
set myInfo [dict get $myDict $key]
lappend result [dict get $myInfo -name]
}
}
return $result
}
} ; # end ::itcl::builtin::Info

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,21 @@
# Tcl package index file, version 1.0
#
# Do NOT try this command
#
# if {![package vsatisfies [package provide Tcl] 8.6-]} {return}
#
# as a way to accept working with all of Tcl 8.6, Tcl 8.X, X>6, and
# Tcl Y, for Y > 8.
# Itcl is a binary package, added to an interp with [load].
# There is no libitcl.so that will [load] into both Tcl 8 and Tcl 9.
# The indexed libitcl.so was built to [load] into one or the other.
# Thus the pkgIndex.tcl should only accept the version of Tcl for which
# the indexed libitcl4.2.0.dll was built.
#
# More work replacing the literal "8.6" below with the proper value substituted
# by configure is the right way forward.
if {![package vsatisfies [package provide Tcl] 8.6]} {return}
package ifneeded itcl 4.2.0 [list load [file join $dir "libitcl4.2.0.dll"] itcl]
package ifneeded Itcl 4.2.0 [list load [file join $dir "libitcl4.2.0.dll"] itcl]

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
msys2/usr/lib/libtcl.dll.a Normal file

Binary file not shown.

Binary file not shown.

BIN
msys2/usr/lib/libtclstub.a Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,217 @@
package B::Showlex;
our $VERSION = '1.05';
use strict;
use B qw(svref_2object comppadlist class);
use B::Terse ();
use B::Concise ();
#
# Invoke as
# perl -MO=Showlex,foo bar.pl
# to see the names of lexical variables used by &foo
# or as
# perl -MO=Showlex bar.pl
# to see the names of file scope lexicals used by bar.pl
#
# borrowed from B::Concise
our $walkHandle = \*STDOUT;
sub walk_output { # updates $walkHandle
$walkHandle = B::Concise::walk_output(@_);
#print "got $walkHandle";
#print $walkHandle "using it";
$walkHandle;
}
sub shownamearray {
my ($name, $av) = @_;
my @els = $av->ARRAY;
my $count = @els;
my $i;
print $walkHandle "$name has $count entries\n";
for ($i = 0; $i < $count; $i++) {
my $sv = $els[$i];
if (class($sv) ne "SPECIAL") {
printf $walkHandle "$i: (0x%lx) %s\n",
$$sv, $sv->PVX // "undef" || "const";
} else {
printf $walkHandle "$i: %s\n", $sv->terse;
#printf $walkHandle "$i: %s\n", B::Concise::concise_sv($sv);
}
}
}
sub showvaluearray {
my ($name, $av) = @_;
my @els = $av->ARRAY;
my $count = @els;
my $i;
print $walkHandle "$name has $count entries\n";
for ($i = 0; $i < $count; $i++) {
printf $walkHandle "$i: %s\n", $els[$i]->terse;
#print $walkHandle "$i: %s\n", B::Concise::concise_sv($els[$i]);
}
}
sub showlex {
my ($objname, $namesav, $valsav) = @_;
shownamearray("Pad of lexical names for $objname", $namesav);
showvaluearray("Pad of lexical values for $objname", $valsav);
}
my ($newlex, $nosp1); # rendering state vars
sub padname_terse {
my $name = shift;
return $name->terse if class($name) eq 'SPECIAL';
my $str = $name->PVX;
return sprintf "(0x%lx) %s",
$$name,
length $str ? qq'"$str"' : defined $str ? "const" : 'undef';
}
sub newlex { # drop-in for showlex
my ($objname, $names, $vals) = @_;
my @names = $names->ARRAY;
my @vals = $vals->ARRAY;
my $count = @names;
print $walkHandle "$objname Pad has $count entries\n";
printf $walkHandle "0: %s\n", padname_terse($names[0]) unless $nosp1;
for (my $i = 1; $i < $count; $i++) {
printf $walkHandle "$i: %s = %s\n", padname_terse($names[$i]),
$vals[$i]->terse,
unless $nosp1
and class($names[$i]) eq 'SPECIAL' || !$names[$i]->LEN;
}
}
sub showlex_obj {
my ($objname, $obj) = @_;
$objname =~ s/^&main::/&/;
showlex($objname, svref_2object($obj)->PADLIST->ARRAY) if !$newlex;
newlex ($objname, svref_2object($obj)->PADLIST->ARRAY) if $newlex;
}
sub showlex_main {
showlex("comppadlist", comppadlist->ARRAY) if !$newlex;
newlex ("main", comppadlist->ARRAY) if $newlex;
}
sub compile {
my @options = grep(/^-/, @_);
my @args = grep(!/^-/, @_);
for my $o (@options) {
$newlex = 1 if $o eq "-newlex";
$nosp1 = 1 if $o eq "-nosp";
}
return \&showlex_main unless @args;
return sub {
my $objref;
foreach my $objname (@args) {
next unless $objname; # skip nulls w/o carping
if (ref $objname) {
print $walkHandle "B::Showlex::compile($objname)\n";
$objref = $objname;
} else {
$objname = "main::$objname" unless $objname =~ /::/;
print $walkHandle "$objname:\n";
no strict 'refs';
die "err: unknown function ($objname)\n"
unless *{$objname}{CODE};
$objref = \&$objname;
}
showlex_obj($objname, $objref);
}
}
}
1;
__END__
=head1 NAME
B::Showlex - Show lexical variables used in functions or files
=head1 SYNOPSIS
perl -MO=Showlex[,-OPTIONS][,SUBROUTINE] foo.pl
=head1 DESCRIPTION
When a comma-separated list of subroutine names is given as options, Showlex
prints the lexical variables used in those subroutines. Otherwise, it prints
the file-scope lexicals in the file.
=head1 EXAMPLES
Traditional form:
$ perl -MO=Showlex -e 'my ($i,$j,$k)=(1,"foo")'
Pad of lexical names for comppadlist has 4 entries
0: (0x8caea4) undef
1: (0x9db0fb0) $i
2: (0x9db0f38) $j
3: (0x9db0f50) $k
Pad of lexical values for comppadlist has 5 entries
0: SPECIAL #1 &PL_sv_undef
1: NULL (0x9da4234)
2: NULL (0x9db0f2c)
3: NULL (0x9db0f44)
4: NULL (0x9da4264)
-e syntax OK
New-style form:
$ perl -MO=Showlex,-newlex -e 'my ($i,$j,$k)=(1,"foo")'
main Pad has 4 entries
0: (0x8caea4) undef
1: (0xa0c4fb8) "$i" = NULL (0xa0b8234)
2: (0xa0c4f40) "$j" = NULL (0xa0c4f34)
3: (0xa0c4f58) "$k" = NULL (0xa0c4f4c)
-e syntax OK
New form, no specials, outside O framework:
$ perl -MB::Showlex -e \
'my ($i,$j,$k)=(1,"foo"); B::Showlex::compile(-newlex,-nosp)->()'
main Pad has 4 entries
1: (0x998ffb0) "$i" = IV (0x9983234) 1
2: (0x998ff68) "$j" = PV (0x998ff5c) "foo"
3: (0x998ff80) "$k" = NULL (0x998ff74)
Note that this example shows the values of the lexicals, whereas the other
examples did not (as they're compile-time only).
=head2 OPTIONS
The C<-newlex> option produces a more readable C<< name => value >> format,
and is shown in the second example above.
The C<-nosp> option eliminates reporting of SPECIALs, such as C<0: SPECIAL
#1 &PL_sv_undef> above. Reporting of SPECIALs can sometimes overwhelm
your declared lexicals.
=head1 SEE ALSO
L<B::Showlex> can also be used outside of the O framework, as in the third
example. See L<B::Concise> for a fuller explanation of reasons.
=head1 TODO
Some of the reported info, such as hex addresses, is not particularly
valuable. Other information would be more useful for the typical
programmer, such as line-numbers, pad-slot reuses, etc.. Given this,
-newlex is not a particularly good flag-name.
=head1 AUTHOR
Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
=cut

View file

@ -0,0 +1,104 @@
package B::Terse;
our $VERSION = '1.09';
use strict;
use B qw(class @specialsv_name);
use B::Concise qw(concise_subref set_style_standard);
use Carp;
sub terse {
my ($order, $subref) = @_;
set_style_standard("terse");
if ($order eq "exec") {
concise_subref('exec', $subref);
} else {
concise_subref('basic', $subref);
}
}
sub compile {
my @args = @_;
my $order = @args ? shift(@args) : "";
$order = "-exec" if $order eq "exec";
unshift @args, $order if $order ne "";
B::Concise::compile("-terse", @args);
}
sub indent {
my ($level) = @_ ? shift : 0;
return " " x $level;
}
sub B::SV::terse {
my($sv, $level) = (@_, 0);
my %info;
B::Concise::concise_sv($sv, \%info);
my $s = indent($level)
. B::Concise::fmt_line(\%info, $sv,
"#svclass~(?((#svaddr))?)~#svval", 0);
chomp $s;
print "$s\n" unless defined wantarray;
$s;
}
sub B::NULL::terse {
my ($sv, $level) = (@_, 0);
my $s = indent($level) . sprintf "%s (0x%lx)", class($sv), $$sv;
print "$s\n" unless defined wantarray;
$s;
}
sub B::SPECIAL::terse {
my ($sv, $level) = (@_, 0);
my $s = indent($level)
. sprintf( "%s #%d %s", class($sv), $$sv, $specialsv_name[$$sv]);
print "$s\n" unless defined wantarray;
$s;
}
1;
__END__
=head1 NAME
B::Terse - Walk Perl syntax tree, printing terse info about ops
=head1 SYNOPSIS
perl -MO=Terse[,OPTIONS] foo.pl
=head1 DESCRIPTION
This module prints the contents of the parse tree, but without as much
information as CPAN module B::Debug. For comparison, C<print "Hello, world.">
produced 96 lines of output from B::Debug, but only 6 from B::Terse.
This module is useful for people who are writing their own back end,
or who are learning about the Perl internals. It's not useful to the
average programmer.
This version of B::Terse is really just a wrapper that calls L<B::Concise>
with the B<-terse> option. It is provided for compatibility with old scripts
(and habits) but using B::Concise directly is now recommended instead.
For compatibility with the old B::Terse, this module also adds a
method named C<terse> to B::OP and B::SV objects. The B::SV method is
largely compatible with the old one, though authors of new software
might be advised to choose a more user-friendly output format. The
B::OP C<terse> method, however, doesn't work well. Since B::Terse was
first written, much more information in OPs has migrated to the
scratchpad datastructure, but the C<terse> interface doesn't have any
way of getting to the correct pad. As a kludge, the new version will
always use the pad for the main program, but for OPs in subroutines
this will give the wrong answer or crash.
=head1 AUTHOR
The original version of B::Terse was written by Malcolm Beattie,
E<lt>mbeattie@sable.ox.ac.ukE<gt>. This wrapper was written by Stephen
McCamant, E<lt>smcc@MIT.EDUE<gt>.
=cut

View file

@ -0,0 +1,496 @@
package B::Xref;
our $VERSION = '1.07';
=head1 NAME
B::Xref - Generates cross reference reports for Perl programs
=head1 SYNOPSIS
perl -MO=Xref[,OPTIONS] foo.pl
=head1 DESCRIPTION
The B::Xref module is used to generate a cross reference listing of all
definitions and uses of variables, subroutines and formats in a Perl program.
It is implemented as a backend for the Perl compiler.
The report generated is in the following format:
File filename1
Subroutine subname1
Package package1
object1 line numbers
object2 line numbers
...
Package package2
...
Each B<File> section reports on a single file. Each B<Subroutine> section
reports on a single subroutine apart from the special cases
"(definitions)" and "(main)". These report, respectively, on subroutine
definitions found by the initial symbol table walk and on the main part of
the program or module external to all subroutines.
The report is then grouped by the B<Package> of each variable,
subroutine or format with the special case "(lexicals)" meaning
lexical variables. Each B<object> name (implicitly qualified by its
containing B<Package>) includes its type character(s) at the beginning
where possible. Lexical variables are easier to track and even
included dereferencing information where possible.
The C<line numbers> are a comma separated list of line numbers (some
preceded by code letters) where that object is used in some way.
Simple uses aren't preceded by a code letter. Introductions (such as
where a lexical is first defined with C<my>) are indicated with the
letter "i". Subroutine and method calls are indicated by the character
"&". Subroutine definitions are indicated by "s" and format
definitions by "f".
For instance, here's part of the report from the I<pod2man> program that
comes with Perl:
Subroutine clear_noremap
Package (lexical)
$ready_to_print i1069, 1079
Package main
$& 1086
$. 1086
$0 1086
$1 1087
$2 1085, 1085
$3 1085, 1085
$ARGV 1086
%HTML_Escapes 1085, 1085
This shows the variables used in the subroutine C<clear_noremap>. The
variable C<$ready_to_print> is a my() (lexical) variable,
B<i>ntroduced (first declared with my()) on line 1069, and used on
line 1079. The variable C<$&> from the main package is used on 1086,
and so on.
A line number may be prefixed by a single letter:
=over 4
=item i
Lexical variable introduced (declared with my()) for the first time.
=item &
Subroutine or method call.
=item s
Subroutine defined.
=item r
Format defined.
=back
The most useful option the cross referencer has is to save the report
to a separate file. For instance, to save the report on
I<myperlprogram> to the file I<report>:
$ perl -MO=Xref,-oreport myperlprogram
=head1 OPTIONS
Option words are separated by commas (not whitespace) and follow the
usual conventions of compiler backend options.
=over 8
=item C<-oFILENAME>
Directs output to C<FILENAME> instead of standard output.
=item C<-r>
Raw output. Instead of producing a human-readable report, outputs a line
in machine-readable form for each definition/use of a variable/sub/format.
=item C<-d>
Don't output the "(definitions)" sections.
=item C<-D[tO]>
(Internal) debug options, probably only useful if C<-r> included.
The C<t> option prints the object on the top of the stack as it's
being tracked. The C<O> option prints each operator as it's being
processed in the execution order of the program.
=back
=head1 BUGS
Non-lexical variables are quite difficult to track through a program.
Sometimes the type of a non-lexical variable's use is impossible to
determine. Introductions of non-lexical non-scalars don't seem to be
reported properly.
=head1 AUTHOR
Malcolm Beattie, mbeattie@sable.ox.ac.uk.
=cut
use strict;
use Config;
use B qw(peekop class comppadlist main_start svref_2object walksymtable
OPpLVAL_INTRO SVf_POK SVf_ROK OPpOUR_INTRO cstring
);
sub UNKNOWN { ["?", "?", "?"] }
my @pad; # lexicals in current pad
# as ["(lexical)", type, name]
my %done; # keyed by $$op: set when each $op is done
my $top = UNKNOWN; # shadows top element of stack as
# [pack, type, name] (pack can be "(lexical)")
my $file; # shadows current filename
my $line; # shadows current line number
my $subname; # shadows current sub name
my %table; # Multi-level hash to record all uses etc.
my @todo = (); # List of CVs that need processing
my %code = (intro => "i", used => "",
subdef => "s", subused => "&",
formdef => "f", meth => "->");
# Options
my ($debug_op, $debug_top, $nodefs, $raw);
sub process {
my ($var, $event) = @_;
my ($pack, $type, $name) = @$var;
if ($type eq "*") {
if ($event eq "used") {
return;
} elsif ($event eq "subused") {
$type = "&";
}
}
$type =~ s/(.)\*$/$1/g;
if ($raw) {
printf "%-16s %-12s %5d %-12s %4s %-16s %s\n",
$file, $subname, $line, $pack, $type, $name, $event;
} else {
# Wheee
push(@{$table{$file}->{$subname}->{$pack}->{$type.$name}->{$event}},
$line);
}
}
sub load_pad {
my $padlist = shift;
my ($namelistav, $vallistav, @namelist, $ix);
@pad = ();
return if class($padlist) =~ '^(?:SPECIAL|NULL)\z';
($namelistav,$vallistav) = $padlist->ARRAY;
@namelist = $namelistav->ARRAY;
for ($ix = 1; $ix < @namelist; $ix++) {
my $namesv = $namelist[$ix];
next if class($namesv) eq "SPECIAL";
my ($type, $name) = $namesv->PV =~ /^(.)([^\0]*)(\0.*)?$/;
$pad[$ix] = ["(lexical)", $type || '?', $name || '?'];
}
if ($Config{useithreads}) {
my (@vallist);
@vallist = $vallistav->ARRAY;
for ($ix = 1; $ix < @vallist; $ix++) {
my $valsv = $vallist[$ix];
next unless class($valsv) eq "GV";
next if class($valsv->STASH) eq 'SPECIAL';
# these pad GVs don't have corresponding names, so same @pad
# array can be used without collisions
$pad[$ix] = [$valsv->STASH->NAME, "*", $valsv->NAME];
}
}
}
sub xref {
my $start = shift;
my $op;
for ($op = $start; $$op; $op = $op->next) {
last if $done{$$op}++;
warn sprintf("top = [%s, %s, %s]\n", @$top) if $debug_top;
warn peekop($op), "\n" if $debug_op;
my $opname = $op->name;
if ($opname =~ /^(or|and|mapwhile|grepwhile|range|cond_expr)$/) {
xref($op->other);
} elsif ($opname eq "match" || $opname eq "subst") {
xref($op->pmreplstart);
} elsif ($opname eq "substcont") {
xref($op->other->pmreplstart);
$op = $op->other;
redo;
} elsif ($opname eq "enterloop") {
xref($op->redoop);
xref($op->nextop);
xref($op->lastop);
} elsif ($opname eq "subst") {
xref($op->pmreplstart);
} else {
no strict 'refs';
my $ppname = "pp_$opname";
&$ppname($op) if defined(&$ppname);
}
}
}
sub xref_cv {
my $cv = shift;
my $pack = $cv->GV->STASH->NAME;
$subname = ($pack eq "main" ? "" : "$pack\::") . $cv->GV->NAME;
load_pad($cv->PADLIST);
xref($cv->START);
$subname = "(main)";
}
sub xref_object {
my $cvref = shift;
xref_cv(svref_2object($cvref));
}
sub xref_main {
$subname = "(main)";
load_pad(comppadlist);
xref(main_start);
while (@todo) {
xref_cv(shift @todo);
}
}
sub pp_nextstate {
my $op = shift;
$file = $op->file;
$line = $op->line;
$top = UNKNOWN;
}
sub pp_padrange {
my $op = shift;
my $count = $op->private & 127;
for my $i (0..$count-1) {
$top = $pad[$op->targ + $i];
process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used");
}
}
sub pp_padsv {
my $op = shift;
$top = $pad[$op->targ];
process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used");
}
sub pp_padav { pp_padsv(@_) }
sub pp_padhv { pp_padsv(@_) }
sub deref {
my ($op, $var, $as) = @_;
$var->[1] = $as . $var->[1];
process($var, $op->private & OPpOUR_INTRO ? "intro" : "used");
}
sub pp_rv2cv { deref(shift, $top, "&"); }
sub pp_rv2hv { deref(shift, $top, "%"); }
sub pp_rv2sv { deref(shift, $top, "\$"); }
sub pp_rv2av { deref(shift, $top, "\@"); }
sub pp_rv2gv { deref(shift, $top, "*"); }
sub pp_gvsv {
my $op = shift;
my $gv;
if ($Config{useithreads}) {
$top = $pad[$op->padix];
$top = UNKNOWN unless $top;
$top->[1] = '$';
}
else {
$gv = $op->gv;
$top = [$gv->STASH->NAME, '$', $gv->SAFENAME];
}
process($top, $op->private & OPpLVAL_INTRO ||
$op->private & OPpOUR_INTRO ? "intro" : "used");
}
sub pp_gv {
my $op = shift;
my $gv;
if ($Config{useithreads}) {
$top = $pad[$op->padix];
$top = UNKNOWN unless $top;
$top->[1] = '*';
}
else {
$gv = $op->gv;
if ($gv->FLAGS & SVf_ROK) { # sub ref
my $cv = $gv->RV;
$top = [$cv->STASH->NAME, '*', B::safename($cv->NAME_HEK)]
}
else {
$top = [$gv->STASH->NAME, '*', $gv->SAFENAME];
}
}
process($top, $op->private & OPpLVAL_INTRO ? "intro" : "used");
}
sub pp_const {
my $op = shift;
my $sv = $op->sv;
# constant could be in the pad (under useithreads)
if ($$sv) {
$top = ["?", "",
(class($sv) ne "SPECIAL" && $sv->FLAGS & SVf_POK)
? cstring($sv->PV) : "?"];
}
else {
$top = $pad[$op->targ];
$top = UNKNOWN unless $top;
}
}
sub pp_method {
my $op = shift;
$top = ["(method)", "->".$top->[1], $top->[2]];
}
sub pp_entersub {
my $op = shift;
if ($top->[1] eq "m") {
process($top, "meth");
} else {
process($top, "subused");
}
$top = UNKNOWN;
}
#
# Stuff for cross referencing definitions of variables and subs
#
sub B::GV::xref {
my $gv = shift;
my $cv = $gv->CV;
if ($$cv) {
#return if $done{$$cv}++;
$file = $gv->FILE;
$line = $gv->LINE;
process([$gv->STASH->NAME, "&", $gv->NAME], "subdef");
push(@todo, $cv);
}
my $form = $gv->FORM;
if ($$form) {
return if $done{$$form}++;
$file = $gv->FILE;
$line = $gv->LINE;
process([$gv->STASH->NAME, "", $gv->NAME], "formdef");
}
}
sub xref_definitions {
my ($pack, %exclude);
return if $nodefs;
$subname = "(definitions)";
foreach $pack (qw(B O AutoLoader DynaLoader XSLoader Config DB VMS
strict vars FileHandle Exporter Carp PerlIO::Layer
attributes utf8 warnings)) {
$exclude{$pack."::"} = 1;
}
no strict qw(vars refs);
walksymtable(\%{"main::"}, "xref", sub { !defined($exclude{$_[0]}) });
}
sub output {
return if $raw;
my ($file, $subname, $pack, $name, $ev, $perfile, $persubname,
$perpack, $pername, $perev);
foreach $file (sort(keys(%table))) {
$perfile = $table{$file};
print "File $file\n";
foreach $subname (sort(keys(%$perfile))) {
$persubname = $perfile->{$subname};
print " Subroutine $subname\n";
foreach $pack (sort(keys(%$persubname))) {
$perpack = $persubname->{$pack};
print " Package $pack\n";
foreach $name (sort(keys(%$perpack))) {
$pername = $perpack->{$name};
my @lines;
foreach $ev (qw(intro formdef subdef meth subused used)) {
$perev = $pername->{$ev};
if (defined($perev) && @$perev) {
my $code = $code{$ev};
push(@lines, map("$code$_", @$perev));
}
}
printf " %-16s %s\n", $name, join(", ", @lines);
}
}
}
}
}
sub compile {
my @options = @_;
my ($option, $opt, $arg);
OPTION:
while ($option = shift @options) {
if ($option =~ /^-(.)(.*)/) {
$opt = $1;
$arg = $2;
} else {
unshift @options, $option;
last OPTION;
}
if ($opt eq "-" && $arg eq "-") {
shift @options;
last OPTION;
} elsif ($opt eq "o") {
$arg ||= shift @options;
open(STDOUT, '>', $arg) or return "$arg: $!\n";
} elsif ($opt eq "d") {
$nodefs = 1;
} elsif ($opt eq "r") {
$raw = 1;
} elsif ($opt eq "D") {
$arg ||= shift @options;
foreach $arg (split(//, $arg)) {
if ($arg eq "o") {
B->debug(1);
} elsif ($arg eq "O") {
$debug_op = 1;
} elsif ($arg eq "t") {
$debug_top = 1;
}
}
}
}
if (@options) {
return sub {
my $objname;
xref_definitions();
foreach $objname (@options) {
$objname = "main::$objname" unless $objname =~ /::/;
eval "xref_object(\\&$objname)";
die "xref_object(\\&$objname) failed: $@" if $@;
}
output();
}
} else {
return sub {
xref_definitions();
xref_main();
output();
}
}
}
1;

View file

@ -0,0 +1,57 @@
/* EXTERN.h
*
* Copyright (C) 1991, 1992, 1993, 1995, 1996, 1997, 1998, 1999,
* 2000, 2001, by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
/*
* EXT designates a global var which is defined in perl.h
* dEXT designates a global var which is defined in another
* file, so we can't count on finding it in perl.h
* (this practice should be avoided).
*/
#undef EXT
#undef dEXT
#undef EXTCONST
#undef dEXTCONST
# if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS)
/* miniperl should not export anything */
# if defined(PERL_IS_MINIPERL)
# define EXT extern
# define dEXT
# define EXTCONST extern const
# define dEXTCONST const
# elif defined(PERLDLL) || defined(__SYMBIAN32__)
# define EXT EXTERN_C __declspec(dllexport)
# define dEXT
# define EXTCONST EXTERN_C __declspec(dllexport) const
# define dEXTCONST const
# else
# define EXT EXTERN_C __declspec(dllimport)
# define dEXT
# define EXTCONST EXTERN_C __declspec(dllimport) const
# define dEXTCONST const
# endif
# else
# if defined(__CYGWIN__) && defined(USEIMPORTLIB)
# define EXT extern __declspec(dllimport)
# define dEXT
# define EXTCONST extern __declspec(dllimport) const
# define dEXTCONST const
# else
# define EXT extern
# define dEXT
# define EXTCONST extern const
# define dEXTCONST const
# endif
# endif
#undef INIT
#define INIT(x)
#undef DOINIT

View file

@ -0,0 +1,52 @@
/* INTERN.h
*
* Copyright (C) 1991, 1992, 1993, 1995, 1996, 1998, 2000, 2001,
* by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
/*
* EXT designates a global var which is defined in perl.h
* dEXT designates a global var which is defined in another
* file, so we can't count on finding it in perl.h
* (this practice should be avoided).
*/
#undef EXT
#undef dEXT
#undef EXTCONST
#undef dEXTCONST
# if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL)) \
|| defined(__SYMBIAN32__)
# ifdef __cplusplus
# define EXT __declspec(dllexport)
# define dEXT
# define EXTCONST __declspec(dllexport) extern const
# define dEXTCONST const
# else
# define EXT __declspec(dllexport)
# define dEXT
# define EXTCONST __declspec(dllexport) const
# define dEXTCONST const
# endif
# else
# ifdef __cplusplus
# define EXT
# define dEXT
# define EXTCONST EXTERN_C const
# define dEXTCONST const
# else
# define EXT
# define dEXT
# define EXTCONST const
# define dEXTCONST const
# endif
# endif
#undef INIT
#define INIT(x) = x
#define DOINIT

View file

@ -0,0 +1,709 @@
/* XSUB.h
*
* Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
* 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
#ifndef PERL_XSUB_H_
#define PERL_XSUB_H_ 1
/* first, some documentation for xsubpp-generated items */
/*
=head1 C<xsubpp> variables and internal functions
=for apidoc Amn|char*|CLASS
Variable which is setup by C<xsubpp> to indicate the
class name for a C++ XS constructor. This is always a C<char*>. See
C<L</THIS>>.
=for apidoc Amn|(whatever)|RETVAL
Variable which is setup by C<xsubpp> to hold the return value for an
XSUB. This is always the proper type for the XSUB. See
L<perlxs/"The RETVAL Variable">.
=for apidoc Amn|(whatever)|THIS
Variable which is setup by C<xsubpp> to designate the object in a C++
XSUB. This is always the proper type for the C++ object. See C<L</CLASS>> and
L<perlxs/"Using XS With C++">.
=for apidoc Amn|I32|ax
Variable which is setup by C<xsubpp> to indicate the stack base offset,
used by the C<ST>, C<XSprePUSH> and C<XSRETURN> macros. The C<dMARK> macro
must be called prior to setup the C<MARK> variable.
=for apidoc Amn|I32|items
Variable which is setup by C<xsubpp> to indicate the number of
items on the stack. See L<perlxs/"Variable-length Parameter Lists">.
=for apidoc Amn|I32|ix
Variable which is setup by C<xsubpp> to indicate which of an
XSUB's aliases was used to invoke it. See L<perlxs/"The ALIAS: Keyword">.
=for apidoc Am|SV*|ST|int ix
Used to access elements on the XSUB's stack.
=for apidoc AmnU||XS
Macro to declare an XSUB and its C parameter list. This is handled by
C<xsubpp>. It is the same as using the more explicit C<XS_EXTERNAL> macro.
=for apidoc AmU||XS_INTERNAL
Macro to declare an XSUB and its C parameter list without exporting the symbols.
This is handled by C<xsubpp> and generally preferable over exporting the XSUB
symbols unnecessarily.
=for apidoc AmnU||XS_EXTERNAL
Macro to declare an XSUB and its C parameter list explicitly exporting the symbols.
=for apidoc Amns||dAX
Sets up the C<ax> variable.
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
=for apidoc Amns||dAXMARK
Sets up the C<ax> variable and stack marker variable C<mark>.
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
=for apidoc Amns||dITEMS
Sets up the C<items> variable.
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
=for apidoc Amns||dXSARGS
Sets up stack and mark pointers for an XSUB, calling C<dSP> and C<dMARK>.
Sets up the C<ax> and C<items> variables by calling C<dAX> and C<dITEMS>.
This is usually handled automatically by C<xsubpp>.
=for apidoc Amns||dXSI32
Sets up the C<ix> variable for an XSUB which has aliases. This is usually
handled automatically by C<xsubpp>.
=for apidoc Amns||dUNDERBAR
Sets up any variable needed by the C<UNDERBAR> macro. It used to define
C<padoff_du>, but it is currently a noop. However, it is strongly advised
to still use it for ensuring past and future compatibility.
=for apidoc AmnU||UNDERBAR
The SV* corresponding to the C<$_> variable. Works even if there
is a lexical C<$_> in scope.
=cut
*/
#ifndef PERL_UNUSED_ARG
# define PERL_UNUSED_ARG(x) ((void)x)
#endif
#ifndef PERL_UNUSED_VAR
# define PERL_UNUSED_VAR(x) ((void)x)
#endif
#define ST(off) PL_stack_base[ax + (off)]
/* XSPROTO() is also used by SWIG like this:
*
* typedef XSPROTO(SwigPerlWrapper);
* typedef SwigPerlWrapper *SwigPerlWrapperPtr;
*
* This code needs to be compilable under both C and C++.
*
* Don't forget to change the __attribute__unused__ version of XS()
* below too if you change XSPROTO() here.
*/
/* XS_INTERNAL is the explicit static-linkage variant of the default
* XS macro.
*
* XS_EXTERNAL is the same as XS_INTERNAL except it does not include
* "STATIC", ie. it exports XSUB symbols. You probably don't want that.
*/
#define XSPROTO(name) void name(pTHX_ CV* cv __attribute__unused__)
#undef XS
#undef XS_EXTERNAL
#undef XS_INTERNAL
#if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING)
# define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name)
# define XS_INTERNAL(name) STATIC XSPROTO(name)
#elif defined(__SYMBIAN32__)
# define XS_EXTERNAL(name) EXPORT_C XSPROTO(name)
# define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name)
#elif defined(__cplusplus)
# define XS_EXTERNAL(name) extern "C" XSPROTO(name)
# define XS_INTERNAL(name) static XSPROTO(name)
#elif defined(HASATTRIBUTE_UNUSED)
# define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__)
# define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__)
#else
# define XS_EXTERNAL(name) XSPROTO(name)
# define XS_INTERNAL(name) STATIC XSPROTO(name)
#endif
/* We do export xsub symbols by default for the public XS macro.
* Try explicitly using XS_INTERNAL/XS_EXTERNAL instead, please. */
#define XS(name) XS_EXTERNAL(name)
#define dAX const I32 ax = (I32)(MARK - PL_stack_base + 1)
#define dAXMARK \
I32 ax = POPMARK; \
SV **mark = PL_stack_base + ax++
#define dITEMS I32 items = (I32)(SP - MARK)
#define dXSARGS \
dSP; dAXMARK; dITEMS
/* These 3 macros are replacements for dXSARGS macro only in bootstrap.
They factor out common code in every BOOT XSUB. Computation of vars mark
and items will optimize away in most BOOT functions. Var ax can never be
optimized away since BOOT must return &PL_sv_yes by default from xsubpp.
Note these macros are not drop in replacements for dXSARGS since they set
PL_xsubfilename. */
#define dXSBOOTARGSXSAPIVERCHK \
I32 ax = XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK; \
SV **mark = PL_stack_base + ax; dSP; dITEMS
#define dXSBOOTARGSAPIVERCHK \
I32 ax = XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK; \
SV **mark = PL_stack_base + ax; dSP; dITEMS
/* dXSBOOTARGSNOVERCHK has no API in xsubpp to choose it so do
#undef dXSBOOTARGSXSAPIVERCHK
#define dXSBOOTARGSXSAPIVERCHK dXSBOOTARGSNOVERCHK */
#define dXSBOOTARGSNOVERCHK \
I32 ax = XS_SETXSUBFN_POPMARK; \
SV **mark = PL_stack_base + ax; dSP; dITEMS
#define dXSTARG SV * const targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \
? PAD_SV(PL_op->op_targ) : sv_newmortal())
/* Should be used before final PUSHi etc. if not in PPCODE section. */
#define XSprePUSH (sp = PL_stack_base + ax - 1)
#define XSANY CvXSUBANY(cv)
#define dXSI32 I32 ix = XSANY.any_i32
#ifdef __cplusplus
# define XSINTERFACE_CVT(ret,name) ret (*name)(...)
# define XSINTERFACE_CVT_ANON(ret) ret (*)(...)
#else
# define XSINTERFACE_CVT(ret,name) ret (*name)()
# define XSINTERFACE_CVT_ANON(ret) ret (*)()
#endif
#define dXSFUNCTION(ret) XSINTERFACE_CVT(ret,XSFUNCTION)
#define XSINTERFACE_FUNC(ret,cv,f) ((XSINTERFACE_CVT_ANON(ret))(f))
#define XSINTERFACE_FUNC_SET(cv,f) \
CvXSUBANY(cv).any_dxptr = (void (*) (pTHX_ void*))(f)
#define dUNDERBAR dNOOP
#define UNDERBAR find_rundefsv()
/* Simple macros to put new mortal values onto the stack. */
/* Typically used to return values from XS functions. */
/*
=head1 Stack Manipulation Macros
=for apidoc Am|void|XST_mIV|int pos|IV iv
Place an integer into the specified position C<pos> on the stack. The
value is stored in a new mortal SV.
=for apidoc Am|void|XST_mNV|int pos|NV nv
Place a double into the specified position C<pos> on the stack. The value
is stored in a new mortal SV.
=for apidoc Am|void|XST_mPV|int pos|char* str
Place a copy of a string into the specified position C<pos> on the stack.
The value is stored in a new mortal SV.
=for apidoc Am|void|XST_mUV|int pos|UV uv
Place an unsigned integer into the specified position C<pos> on the stack. The
value is stored in a new mortal SV.
=for apidoc Am|void|XST_mNO|int pos
Place C<&PL_sv_no> into the specified position C<pos> on the
stack.
=for apidoc Am|void|XST_mYES|int pos
Place C<&PL_sv_yes> into the specified position C<pos> on the
stack.
=for apidoc Am|void|XST_mUNDEF|int pos
Place C<&PL_sv_undef> into the specified position C<pos> on the
stack.
=for apidoc Am|void|XSRETURN|int nitems
Return from XSUB, indicating number of items on the stack. This is usually
handled by C<xsubpp>.
=for apidoc Am|void|XSRETURN_IV|IV iv
Return an integer from an XSUB immediately. Uses C<XST_mIV>.
=for apidoc Am|void|XSRETURN_UV|IV uv
Return an integer from an XSUB immediately. Uses C<XST_mUV>.
=for apidoc Am|void|XSRETURN_NV|NV nv
Return a double from an XSUB immediately. Uses C<XST_mNV>.
=for apidoc Am|void|XSRETURN_PV|char* str
Return a copy of a string from an XSUB immediately. Uses C<XST_mPV>.
=for apidoc Amns||XSRETURN_NO
Return C<&PL_sv_no> from an XSUB immediately. Uses C<XST_mNO>.
=for apidoc Amns||XSRETURN_YES
Return C<&PL_sv_yes> from an XSUB immediately. Uses C<XST_mYES>.
=for apidoc Amns||XSRETURN_UNDEF
Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>.
=for apidoc Amns||XSRETURN_EMPTY
Return an empty list from an XSUB immediately.
=head1 Variables created by C<xsubpp> and C<xsubpp> internal functions
=for apidoc AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto
Used by C<xsubpp> to hook up XSUBs as Perl subs. Adds Perl prototypes to
the subs.
=for apidoc AmnU||XS_VERSION
The version identifier for an XS module. This is usually
handled automatically by C<ExtUtils::MakeMaker>. See
C<L</XS_VERSION_BOOTCHECK>>.
=for apidoc Amns||XS_VERSION_BOOTCHECK
Macro to verify that a PM module's C<$VERSION> variable matches the XS
module's C<XS_VERSION> variable. This is usually handled automatically by
C<xsubpp>. See L<perlxs/"The VERSIONCHECK: Keyword">.
=for apidoc Amns||XS_APIVERSION_BOOTCHECK
Macro to verify that the perl api version an XS module has been compiled against
matches the api version of the perl interpreter it's being loaded into.
=head1 Exception Handling (simple) Macros
=for apidoc Amns||dXCPT
Set up necessary local variables for exception handling.
See L<perlguts/"Exception Handling">.
=for apidoc AmnU||XCPT_TRY_START
Starts a try block. See L<perlguts/"Exception Handling">.
=for apidoc AmnU||XCPT_TRY_END
Ends a try block. See L<perlguts/"Exception Handling">.
=for apidoc AmnU||XCPT_CATCH
Introduces a catch block. See L<perlguts/"Exception Handling">.
=for apidoc Amns||XCPT_RETHROW
Rethrows a previously caught exception. See L<perlguts/"Exception Handling">.
=cut
*/
#define XST_mIV(i,v) (ST(i) = sv_2mortal(newSViv(v)) )
#define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) )
#define XST_mNV(i,v) (ST(i) = sv_2mortal(newSVnv(v)) )
#define XST_mPV(i,v) (ST(i) = sv_2mortal(newSVpv(v,0)))
#define XST_mPVN(i,v,n) (ST(i) = newSVpvn_flags(v,n, SVs_TEMP))
#define XST_mNO(i) (ST(i) = &PL_sv_no )
#define XST_mYES(i) (ST(i) = &PL_sv_yes )
#define XST_mUNDEF(i) (ST(i) = &PL_sv_undef)
#define XSRETURN(off) \
STMT_START { \
const IV tmpXSoff = (off); \
assert(tmpXSoff >= 0);\
PL_stack_sp = PL_stack_base + ax + (tmpXSoff - 1); \
return; \
} STMT_END
#define XSRETURN_IV(v) STMT_START { XST_mIV(0,v); XSRETURN(1); } STMT_END
#define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END
#define XSRETURN_NV(v) STMT_START { XST_mNV(0,v); XSRETURN(1); } STMT_END
#define XSRETURN_PV(v) STMT_START { XST_mPV(0,v); XSRETURN(1); } STMT_END
#define XSRETURN_PVN(v,n) STMT_START { XST_mPVN(0,v,n); XSRETURN(1); } STMT_END
#define XSRETURN_NO STMT_START { XST_mNO(0); XSRETURN(1); } STMT_END
#define XSRETURN_YES STMT_START { XST_mYES(0); XSRETURN(1); } STMT_END
#define XSRETURN_UNDEF STMT_START { XST_mUNDEF(0); XSRETURN(1); } STMT_END
#define XSRETURN_EMPTY STMT_START { XSRETURN(0); } STMT_END
#define newXSproto(a,b,c,d) newXS_flags(a,b,c,d,0)
#ifdef XS_VERSION
# define XS_VERSION_BOOTCHECK \
Perl_xs_handshake(HS_KEY(FALSE, FALSE, "", XS_VERSION), HS_CXT, __FILE__, \
items, ax, XS_VERSION)
#else
# define XS_VERSION_BOOTCHECK
#endif
#define XS_APIVERSION_BOOTCHECK \
Perl_xs_handshake(HS_KEY(FALSE, FALSE, "v" PERL_API_VERSION_STRING, ""), \
HS_CXT, __FILE__, items, ax, "v" PERL_API_VERSION_STRING)
/* public API, this is a combination of XS_VERSION_BOOTCHECK and
XS_APIVERSION_BOOTCHECK in 1, and is backportable */
#ifdef XS_VERSION
# define XS_BOTHVERSION_BOOTCHECK \
Perl_xs_handshake(HS_KEY(FALSE, FALSE, "v" PERL_API_VERSION_STRING, XS_VERSION), \
HS_CXT, __FILE__, items, ax, "v" PERL_API_VERSION_STRING, XS_VERSION)
#else
/* should this be a #error? if you want both checked, you better supply XS_VERSION right? */
# define XS_BOTHVERSION_BOOTCHECK XS_APIVERSION_BOOTCHECK
#endif
/* private API */
#define XS_APIVERSION_POPMARK_BOOTCHECK \
Perl_xs_handshake(HS_KEY(FALSE, TRUE, "v" PERL_API_VERSION_STRING, ""), \
HS_CXT, __FILE__, "v" PERL_API_VERSION_STRING)
#ifdef XS_VERSION
# define XS_BOTHVERSION_POPMARK_BOOTCHECK \
Perl_xs_handshake(HS_KEY(FALSE, TRUE, "v" PERL_API_VERSION_STRING, XS_VERSION), \
HS_CXT, __FILE__, "v" PERL_API_VERSION_STRING, XS_VERSION)
#else
/* should this be a #error? if you want both checked, you better supply XS_VERSION right? */
# define XS_BOTHVERSION_POPMARK_BOOTCHECK XS_APIVERSION_POPMARK_BOOTCHECK
#endif
#define XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK \
Perl_xs_handshake(HS_KEY(TRUE, TRUE, "v" PERL_API_VERSION_STRING, ""), \
HS_CXT, __FILE__, "v" PERL_API_VERSION_STRING)
#ifdef XS_VERSION
# define XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK \
Perl_xs_handshake(HS_KEY(TRUE, TRUE, "v" PERL_API_VERSION_STRING, XS_VERSION),\
HS_CXT, __FILE__, "v" PERL_API_VERSION_STRING, XS_VERSION)
#else
/* should this be a #error? if you want both checked, you better supply XS_VERSION right? */
# define XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK
#endif
/* For a normal bootstrap without API or XS version checking.
Useful for static XS modules or debugging/testing scenarios.
If this macro gets heavily used in the future, it should separated into
a separate function independent of Perl_xs_handshake for efficiency */
#define XS_SETXSUBFN_POPMARK \
Perl_xs_handshake(HS_KEY(TRUE, TRUE, "", "") | HSf_NOCHK, HS_CXT, __FILE__)
#ifdef NO_XSLOCKS
# define dXCPT dJMPENV; int rEtV = 0
# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0)
# define XCPT_TRY_END JMPENV_POP;
# define XCPT_CATCH if (rEtV != 0)
# define XCPT_RETHROW JMPENV_JUMP(rEtV)
#endif
/*
The DBM_setFilter & DBM_ckFilter macros are only used by
the *DB*_File modules
*/
#define DBM_setFilter(db_type,code) \
STMT_START { \
if (db_type) \
RETVAL = sv_mortalcopy(db_type) ; \
ST(0) = RETVAL ; \
if (db_type && (code == &PL_sv_undef)) { \
SvREFCNT_dec_NN(db_type) ; \
db_type = NULL ; \
} \
else if (code) { \
if (db_type) \
sv_setsv(db_type, code) ; \
else \
db_type = newSVsv(code) ; \
} \
} STMT_END
#define DBM_ckFilter(arg,type,name) \
STMT_START { \
if (db->type) { \
if (db->filtering) { \
croak("recursion detected in %s", name) ; \
} \
ENTER ; \
SAVETMPS ; \
SAVEINT(db->filtering) ; \
db->filtering = TRUE ; \
SAVE_DEFSV ; \
if (name[7] == 's') \
arg = newSVsv(arg); \
DEFSV_set(arg) ; \
SvTEMP_off(arg) ; \
PUSHMARK(SP) ; \
PUTBACK ; \
(void) perl_call_sv(db->type, G_DISCARD); \
SPAGAIN ; \
PUTBACK ; \
FREETMPS ; \
LEAVE ; \
if (name[7] == 's'){ \
arg = sv_2mortal(arg); \
} \
} } STMT_END
#if 1 /* for compatibility */
# define VTBL_sv &PL_vtbl_sv
# define VTBL_env &PL_vtbl_env
# define VTBL_envelem &PL_vtbl_envelem
# define VTBL_sigelem &PL_vtbl_sigelem
# define VTBL_pack &PL_vtbl_pack
# define VTBL_packelem &PL_vtbl_packelem
# define VTBL_dbline &PL_vtbl_dbline
# define VTBL_isa &PL_vtbl_isa
# define VTBL_isaelem &PL_vtbl_isaelem
# define VTBL_arylen &PL_vtbl_arylen
# define VTBL_glob &PL_vtbl_glob
# define VTBL_mglob &PL_vtbl_mglob
# define VTBL_nkeys &PL_vtbl_nkeys
# define VTBL_taint &PL_vtbl_taint
# define VTBL_substr &PL_vtbl_substr
# define VTBL_vec &PL_vtbl_vec
# define VTBL_pos &PL_vtbl_pos
# define VTBL_bm &PL_vtbl_bm
# define VTBL_fm &PL_vtbl_fm
# define VTBL_uvar &PL_vtbl_uvar
# define VTBL_defelem &PL_vtbl_defelem
# define VTBL_regexp &PL_vtbl_regexp
# define VTBL_regdata &PL_vtbl_regdata
# define VTBL_regdatum &PL_vtbl_regdatum
# ifdef USE_LOCALE_COLLATE
# define VTBL_collxfrm &PL_vtbl_collxfrm
# endif
# define VTBL_amagic &PL_vtbl_amagic
# define VTBL_amagicelem &PL_vtbl_amagicelem
#endif
#include "perlapi.h"
#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE)
# undef aTHX
# undef aTHX_
# define aTHX PERL_GET_THX
# define aTHX_ aTHX,
#endif
#if defined(PERL_IMPLICIT_SYS) && !defined(PERL_CORE)
# ifndef NO_XSLOCKS
# if defined (NETWARE) && defined (USE_STDIO)
# define times PerlProc_times
# define setuid PerlProc_setuid
# define setgid PerlProc_setgid
# define getpid PerlProc_getpid
# define pause PerlProc_pause
# define exit PerlProc_exit
# define _exit PerlProc__exit
# else
# undef closedir
# undef opendir
# undef stdin
# undef stdout
# undef stderr
# undef feof
# undef ferror
# undef fgetpos
# undef ioctl
# undef getlogin
# undef setjmp
# undef getc
# undef ungetc
# undef fileno
/* Following symbols were giving redefinition errors while building extensions - sgp 17th Oct 2000 */
#ifdef NETWARE
# undef readdir
# undef fstat
# undef stat
# undef longjmp
# undef endhostent
# undef endnetent
# undef endprotoent
# undef endservent
# undef gethostbyaddr
# undef gethostbyname
# undef gethostent
# undef getnetbyaddr
# undef getnetbyname
# undef getnetent
# undef getprotobyname
# undef getprotobynumber
# undef getprotoent
# undef getservbyname
# undef getservbyport
# undef getservent
# undef inet_ntoa
# undef sethostent
# undef setnetent
# undef setprotoent
# undef setservent
#endif /* NETWARE */
/* to avoid warnings: "xyz" redefined */
#ifdef WIN32
# undef popen
# undef pclose
#endif /* WIN32 */
# undef socketpair
# define mkdir PerlDir_mkdir
# define chdir PerlDir_chdir
# define rmdir PerlDir_rmdir
# define closedir PerlDir_close
# define opendir PerlDir_open
# define readdir PerlDir_read
# define rewinddir PerlDir_rewind
# define seekdir PerlDir_seek
# define telldir PerlDir_tell
# define putenv PerlEnv_putenv
# define getenv PerlEnv_getenv
# define uname PerlEnv_uname
# define stdin PerlSIO_stdin
# define stdout PerlSIO_stdout
# define stderr PerlSIO_stderr
# define fopen PerlSIO_fopen
# define fclose PerlSIO_fclose
# define feof PerlSIO_feof
# define ferror PerlSIO_ferror
# define clearerr PerlSIO_clearerr
# define getc PerlSIO_getc
# define fgets PerlSIO_fgets
# define fputc PerlSIO_fputc
# define fputs PerlSIO_fputs
# define fflush PerlSIO_fflush
# define ungetc PerlSIO_ungetc
# define fileno PerlSIO_fileno
# define fdopen PerlSIO_fdopen
# define freopen PerlSIO_freopen
# define fread PerlSIO_fread
# define fwrite PerlSIO_fwrite
# define setbuf PerlSIO_setbuf
# define setvbuf PerlSIO_setvbuf
# define setlinebuf PerlSIO_setlinebuf
# define stdoutf PerlSIO_stdoutf
# define vfprintf PerlSIO_vprintf
# define ftell PerlSIO_ftell
# define fseek PerlSIO_fseek
# define fgetpos PerlSIO_fgetpos
# define fsetpos PerlSIO_fsetpos
# define frewind PerlSIO_rewind
# define tmpfile PerlSIO_tmpfile
# define access PerlLIO_access
# define chmod PerlLIO_chmod
# define chsize PerlLIO_chsize
# define close PerlLIO_close
# define dup PerlLIO_dup
# define dup2 PerlLIO_dup2
# define flock PerlLIO_flock
# define fstat PerlLIO_fstat
# define ioctl PerlLIO_ioctl
# define isatty PerlLIO_isatty
# define link PerlLIO_link
# define lseek PerlLIO_lseek
# define lstat PerlLIO_lstat
# define mktemp PerlLIO_mktemp
# define open PerlLIO_open
# define read PerlLIO_read
# define rename PerlLIO_rename
# define setmode PerlLIO_setmode
# define stat(buf,sb) PerlLIO_stat(buf,sb)
# define tmpnam PerlLIO_tmpnam
# define umask PerlLIO_umask
# define unlink PerlLIO_unlink
# define utime PerlLIO_utime
# define write PerlLIO_write
# define malloc PerlMem_malloc
# define calloc PerlMem_calloc
# define realloc PerlMem_realloc
# define free PerlMem_free
# define abort PerlProc_abort
# define exit PerlProc_exit
# define _exit PerlProc__exit
# define execl PerlProc_execl
# define execv PerlProc_execv
# define execvp PerlProc_execvp
# define getuid PerlProc_getuid
# define geteuid PerlProc_geteuid
# define getgid PerlProc_getgid
# define getegid PerlProc_getegid
# define getlogin PerlProc_getlogin
# define kill PerlProc_kill
# define killpg PerlProc_killpg
# define pause PerlProc_pause
# define popen PerlProc_popen
# define pclose PerlProc_pclose
# define pipe PerlProc_pipe
# define setuid PerlProc_setuid
# define setgid PerlProc_setgid
# define sleep PerlProc_sleep
# define times PerlProc_times
# define wait PerlProc_wait
# define setjmp PerlProc_setjmp
# define longjmp PerlProc_longjmp
# define signal PerlProc_signal
# define getpid PerlProc_getpid
# define gettimeofday PerlProc_gettimeofday
# define htonl PerlSock_htonl
# define htons PerlSock_htons
# define ntohl PerlSock_ntohl
# define ntohs PerlSock_ntohs
# define accept PerlSock_accept
# define bind PerlSock_bind
# define connect PerlSock_connect
# define endhostent PerlSock_endhostent
# define endnetent PerlSock_endnetent
# define endprotoent PerlSock_endprotoent
# define endservent PerlSock_endservent
# define gethostbyaddr PerlSock_gethostbyaddr
# define gethostbyname PerlSock_gethostbyname
# define gethostent PerlSock_gethostent
# define gethostname PerlSock_gethostname
# define getnetbyaddr PerlSock_getnetbyaddr
# define getnetbyname PerlSock_getnetbyname
# define getnetent PerlSock_getnetent
# define getpeername PerlSock_getpeername
# define getprotobyname PerlSock_getprotobyname
# define getprotobynumber PerlSock_getprotobynumber
# define getprotoent PerlSock_getprotoent
# define getservbyname PerlSock_getservbyname
# define getservbyport PerlSock_getservbyport
# define getservent PerlSock_getservent
# define getsockname PerlSock_getsockname
# define getsockopt PerlSock_getsockopt
# define inet_addr PerlSock_inet_addr
# define inet_ntoa PerlSock_inet_ntoa
# define listen PerlSock_listen
# define recv PerlSock_recv
# define recvfrom PerlSock_recvfrom
# define select PerlSock_select
# define send PerlSock_send
# define sendto PerlSock_sendto
# define sethostent PerlSock_sethostent
# define setnetent PerlSock_setnetent
# define setprotoent PerlSock_setprotoent
# define setservent PerlSock_setservent
# define setsockopt PerlSock_setsockopt
# define shutdown PerlSock_shutdown
# define socket PerlSock_socket
# define socketpair PerlSock_socketpair
# endif /* NETWARE && USE_STDIO */
# undef fd_set
# undef FD_SET
# undef FD_CLR
# undef FD_ISSET
# undef FD_ZERO
# define fd_set Perl_fd_set
# define FD_SET(n,p) PERL_FD_SET(n,p)
# define FD_CLR(n,p) PERL_FD_CLR(n,p)
# define FD_ISSET(n,p) PERL_FD_ISSET(n,p)
# define FD_ZERO(p) PERL_FD_ZERO(p)
# endif /* NO_XSLOCKS */
#endif /* PERL_IMPLICIT_SYS && !PERL_CORE */
#endif /* PERL_XSUB_H_ */ /* include guard */
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

View file

@ -0,0 +1,109 @@
/* av.h
*
* Copyright (C) 1991, 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000,
* 2001, 2002, 2005, 2006, 2007, 2008, by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
struct xpvav {
HV* xmg_stash; /* class package */
union _xmgu xmg_u;
SSize_t xav_fill; /* Index of last element present */
SSize_t xav_max; /* max index for which array has space */
SV** xav_alloc; /* pointer to beginning of C array of SVs */
};
/* SV* xav_arylen; */
/* SVpav_REAL is set for all AVs whose xav_array contents are refcounted.
* Some things like "@_" and the scratchpad list do not set this, to
* indicate that they are cheating (for efficiency) by not refcounting
* the AV's contents.
*
* SVpav_REIFY is only meaningful on such "fake" AVs (i.e. where SVpav_REAL
* is not set). It indicates that the fake AV is capable of becoming
* real if the array needs to be modified in some way. Functions that
* modify fake AVs check both flags to call av_reify() as appropriate.
*
* Note that the Perl stack has neither flag set. (Thus,
* items that go on the stack are never refcounted.)
*
* These internal details are subject to change any time. AV
* manipulations external to perl should not care about any of this.
* GSAR 1999-09-10
*/
/*
=head1 Handy Values
=for apidoc ADmnU||Nullav
Null AV pointer.
(deprecated - use C<(AV *)NULL> instead)
=head1 Array Manipulation Functions
=for apidoc Am|int|AvFILL|AV* av
Same as C<av_top_index()> or C<av_tindex()>.
=for apidoc av_tindex
Same as C<av_top_index()>.
=for apidoc m|int|AvFILLp|AV* av
=cut
*/
#ifndef PERL_CORE
# define Nullav Null(AV*)
#endif
#define AvARRAY(av) ((av)->sv_u.svu_array)
#define AvALLOC(av) ((XPVAV*) SvANY(av))->xav_alloc
#define AvMAX(av) ((XPVAV*) SvANY(av))->xav_max
#define AvFILLp(av) ((XPVAV*) SvANY(av))->xav_fill
#define AvARYLEN(av) (*Perl_av_arylen_p(aTHX_ MUTABLE_AV(av)))
#define AvREAL(av) (SvFLAGS(av) & SVpav_REAL)
#define AvREAL_on(av) (SvFLAGS(av) |= SVpav_REAL)
#define AvREAL_off(av) (SvFLAGS(av) &= ~SVpav_REAL)
#define AvREAL_only(av) (AvREIFY_off(av), SvFLAGS(av) |= SVpav_REAL)
#define AvREIFY(av) (SvFLAGS(av) & SVpav_REIFY)
#define AvREIFY_on(av) (SvFLAGS(av) |= SVpav_REIFY)
#define AvREIFY_off(av) (SvFLAGS(av) &= ~SVpav_REIFY)
#define AvREIFY_only(av) (AvREAL_off(av), SvFLAGS(av) |= SVpav_REIFY)
#define AvREALISH(av) (SvFLAGS(av) & (SVpav_REAL|SVpav_REIFY))
#define AvFILL(av) ((SvRMAGICAL((const SV *) (av))) \
? mg_size(MUTABLE_SV(av)) : AvFILLp(av))
#define av_tindex(av) av_top_index(av)
/* Note that it doesn't make sense to do this:
* SvGETMAGIC(av); IV x = av_tindex_nomg(av);
*/
# define av_top_index_skip_len_mg(av) \
(__ASSERT_(SvTYPE(av) == SVt_PVAV) AvFILLp(av))
# define av_tindex_skip_len_mg(av) av_top_index_skip_len_mg(av)
#define NEGATIVE_INDICES_VAR "NEGATIVE_INDICES"
/*
=for apidoc newAV
Creates a new AV. The reference count is set to 1.
Perl equivalent: C<my @array;>.
=cut
*/
#define newAV() MUTABLE_AV(newSV_type(SVt_PVAV))
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

View file

@ -0,0 +1,18 @@
{
0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,324 @@
/* cv.h
*
* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001,
* 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
/* This structure must match the beginning of XPVFM in sv.h */
struct xpvcv {
_XPV_HEAD;
_XPVCV_COMMON;
};
/*
=head1 Handy Values
=for apidoc ADmnU||Nullcv
Null CV pointer.
(deprecated - use C<(CV *)NULL> instead)
=head1 CV Manipulation Functions
This section documents functions to manipulate CVs which are code-values,
or subroutines. For more information, see L<perlguts>.
=for apidoc Am|HV*|CvSTASH|CV* cv
Returns the stash of the CV. A stash is the symbol table hash, containing
the package-scoped variables in the package where the subroutine was defined.
For more information, see L<perlguts>.
This also has a special use with XS AUTOLOAD subs.
See L<perlguts/Autoloading with XSUBs>.
=cut
*/
#ifndef PERL_CORE
# define Nullcv Null(CV*)
#endif
#define CvSTASH(sv) (0+((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_stash)
#define CvSTASH_set(cv,st) Perl_cvstash_set(aTHX_ cv, st)
#define CvSTART(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_start_u.xcv_start
#define CvROOT(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_root
#define CvXSUB(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_xsub
#define CvXSUBANY(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_start_u.xcv_xsubany
#define CvGV(sv) Perl_CvGV(aTHX_ (CV *)(sv))
#define CvGV_set(cv,gv) Perl_cvgv_set(aTHX_ cv, gv)
#define CvHASGV(cv) cBOOL(SvANY(cv)->xcv_gv_u.xcv_gv)
#define CvFILE(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_file
#ifdef USE_ITHREADS
# define CvFILE_set_from_cop(sv, cop) \
(CvFILE(sv) = savepv(CopFILE(cop)), CvDYNFILE_on(sv))
#else
# define CvFILE_set_from_cop(sv, cop) \
(CvFILE(sv) = CopFILE(cop), CvDYNFILE_off(sv))
#endif
#define CvFILEGV(sv) (gv_fetchfile(CvFILE(sv)))
#define CvDEPTH(sv) (*Perl_CvDEPTH((const CV *)sv))
/* For use when you only have a XPVCV*, not a real CV*.
Must be assert protected as in Perl_CvDEPTH before use. */
#define CvDEPTHunsafe(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_depth
/* these CvPADLIST/CvRESERVED asserts can be reverted one day, once stabilized */
#define CvPADLIST(sv) (*(assert_(!CvISXSUB((CV*)(sv))) \
&(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_padlist)))
/* CvPADLIST_set is not public API, it can be removed one day, once stabilized */
#ifdef DEBUGGING
# define CvPADLIST_set(sv, padlist) Perl_set_padlist((CV*)sv, padlist)
#else
# define CvPADLIST_set(sv, padlist) (CvPADLIST(sv) = (padlist))
#endif
#define CvHSCXT(sv) *(assert_(CvISXSUB((CV*)(sv))) \
&(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_hscxt))
#ifdef DEBUGGING
# if PTRSIZE == 8
# define PoisonPADLIST(sv) \
(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_padlist = (PADLIST *)UINT64_C(0xEFEFEFEFEFEFEFEF))
# elif PTRSIZE == 4
# define PoisonPADLIST(sv) \
(((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist_u.xcv_padlist = (PADLIST *)0xEFEFEFEF)
# else
# error unknown pointer size
# endif
#else
# define PoisonPADLIST(sv) NOOP
#endif
#define CvOUTSIDE(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_outside
#define CvOUTSIDE_SEQ(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_outside_seq
#define CvFLAGS(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_flags
/* These two are sometimes called on non-CVs */
#define CvPROTO(sv) \
( \
SvPOK(sv) \
? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
? SvEND(sv)+1 : SvPVX_const(sv) \
: NULL \
)
#define CvPROTOLEN(sv) \
( \
SvPOK(sv) \
? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \
? SvLEN(sv)-SvCUR(sv)-2 \
: SvCUR(sv) \
: 0 \
)
#define CVf_METHOD 0x0001 /* CV is explicitly marked as a method */
#define CVf_LVALUE 0x0002 /* CV return value can be used as lvalue */
#define CVf_CONST 0x0004 /* inlinable sub */
#define CVf_ISXSUB 0x0008 /* CV is an XSUB, not pure perl. */
#define CVf_WEAKOUTSIDE 0x0010 /* CvOUTSIDE isn't ref counted */
#define CVf_CLONE 0x0020 /* anon CV uses external lexicals */
#define CVf_CLONED 0x0040 /* a clone of one of those */
#define CVf_ANON 0x0080 /* CV is not pointed to by a GV */
#define CVf_UNIQUE 0x0100 /* sub is only called once (eg PL_main_cv,
* require, eval). */
#define CVf_NODEBUG 0x0200 /* no DB::sub indirection for this CV
(esp. useful for special XSUBs) */
#define CVf_CVGV_RC 0x0400 /* CvGV is reference counted */
#ifdef PERL_CORE
# define CVf_SLABBED 0x0800 /* Holds refcount on op slab */
#endif
#define CVf_DYNFILE 0x1000 /* The filename is malloced */
#define CVf_AUTOLOAD 0x2000 /* SvPVX contains AUTOLOADed sub name */
#define CVf_HASEVAL 0x4000 /* contains string eval */
#define CVf_NAMED 0x8000 /* Has a name HEK */
#define CVf_LEXICAL 0x10000 /* Omit package from name */
#define CVf_ANONCONST 0x20000 /* :const - create anonconst op */
/* This symbol for optimised communication between toke.c and op.c: */
#define CVf_BUILTIN_ATTRS (CVf_METHOD|CVf_LVALUE|CVf_ANONCONST)
#define CvCLONE(cv) (CvFLAGS(cv) & CVf_CLONE)
#define CvCLONE_on(cv) (CvFLAGS(cv) |= CVf_CLONE)
#define CvCLONE_off(cv) (CvFLAGS(cv) &= ~CVf_CLONE)
#define CvCLONED(cv) (CvFLAGS(cv) & CVf_CLONED)
#define CvCLONED_on(cv) (CvFLAGS(cv) |= CVf_CLONED)
#define CvCLONED_off(cv) (CvFLAGS(cv) &= ~CVf_CLONED)
#define CvANON(cv) (CvFLAGS(cv) & CVf_ANON)
#define CvANON_on(cv) (CvFLAGS(cv) |= CVf_ANON)
#define CvANON_off(cv) (CvFLAGS(cv) &= ~CVf_ANON)
/* CvEVAL or CvSPECIAL */
#define CvUNIQUE(cv) (CvFLAGS(cv) & CVf_UNIQUE)
#define CvUNIQUE_on(cv) (CvFLAGS(cv) |= CVf_UNIQUE)
#define CvUNIQUE_off(cv) (CvFLAGS(cv) &= ~CVf_UNIQUE)
#define CvNODEBUG(cv) (CvFLAGS(cv) & CVf_NODEBUG)
#define CvNODEBUG_on(cv) (CvFLAGS(cv) |= CVf_NODEBUG)
#define CvNODEBUG_off(cv) (CvFLAGS(cv) &= ~CVf_NODEBUG)
#define CvMETHOD(cv) (CvFLAGS(cv) & CVf_METHOD)
#define CvMETHOD_on(cv) (CvFLAGS(cv) |= CVf_METHOD)
#define CvMETHOD_off(cv) (CvFLAGS(cv) &= ~CVf_METHOD)
#define CvLVALUE(cv) (CvFLAGS(cv) & CVf_LVALUE)
#define CvLVALUE_on(cv) (CvFLAGS(cv) |= CVf_LVALUE)
#define CvLVALUE_off(cv) (CvFLAGS(cv) &= ~CVf_LVALUE)
/* eval or PL_main_cv */
#define CvEVAL(cv) (CvUNIQUE(cv) && !SvFAKE(cv))
#define CvEVAL_on(cv) (CvUNIQUE_on(cv),SvFAKE_off(cv))
#define CvEVAL_off(cv) CvUNIQUE_off(cv)
/* BEGIN|CHECK|INIT|UNITCHECK|END */
#define CvSPECIAL(cv) (CvUNIQUE(cv) && SvFAKE(cv))
#define CvSPECIAL_on(cv) (CvUNIQUE_on(cv),SvFAKE_on(cv))
#define CvSPECIAL_off(cv) (CvUNIQUE_off(cv),SvFAKE_off(cv))
#define CvCONST(cv) (CvFLAGS(cv) & CVf_CONST)
#define CvCONST_on(cv) (CvFLAGS(cv) |= CVf_CONST)
#define CvCONST_off(cv) (CvFLAGS(cv) &= ~CVf_CONST)
#define CvWEAKOUTSIDE(cv) (CvFLAGS(cv) & CVf_WEAKOUTSIDE)
#define CvWEAKOUTSIDE_on(cv) (CvFLAGS(cv) |= CVf_WEAKOUTSIDE)
#define CvWEAKOUTSIDE_off(cv) (CvFLAGS(cv) &= ~CVf_WEAKOUTSIDE)
#define CvISXSUB(cv) (CvFLAGS(cv) & CVf_ISXSUB)
#define CvISXSUB_on(cv) (CvFLAGS(cv) |= CVf_ISXSUB)
#define CvISXSUB_off(cv) (CvFLAGS(cv) &= ~CVf_ISXSUB)
#define CvCVGV_RC(cv) (CvFLAGS(cv) & CVf_CVGV_RC)
#define CvCVGV_RC_on(cv) (CvFLAGS(cv) |= CVf_CVGV_RC)
#define CvCVGV_RC_off(cv) (CvFLAGS(cv) &= ~CVf_CVGV_RC)
#ifdef PERL_CORE
# define CvSLABBED(cv) (CvFLAGS(cv) & CVf_SLABBED)
# define CvSLABBED_on(cv) (CvFLAGS(cv) |= CVf_SLABBED)
# define CvSLABBED_off(cv) (CvFLAGS(cv) &= ~CVf_SLABBED)
#endif
#define CvDYNFILE(cv) (CvFLAGS(cv) & CVf_DYNFILE)
#define CvDYNFILE_on(cv) (CvFLAGS(cv) |= CVf_DYNFILE)
#define CvDYNFILE_off(cv) (CvFLAGS(cv) &= ~CVf_DYNFILE)
#define CvAUTOLOAD(cv) (CvFLAGS(cv) & CVf_AUTOLOAD)
#define CvAUTOLOAD_on(cv) (CvFLAGS(cv) |= CVf_AUTOLOAD)
#define CvAUTOLOAD_off(cv) (CvFLAGS(cv) &= ~CVf_AUTOLOAD)
#define CvHASEVAL(cv) (CvFLAGS(cv) & CVf_HASEVAL)
#define CvHASEVAL_on(cv) (CvFLAGS(cv) |= CVf_HASEVAL)
#define CvHASEVAL_off(cv) (CvFLAGS(cv) &= ~CVf_HASEVAL)
#define CvNAMED(cv) (CvFLAGS(cv) & CVf_NAMED)
#define CvNAMED_on(cv) (CvFLAGS(cv) |= CVf_NAMED)
#define CvNAMED_off(cv) (CvFLAGS(cv) &= ~CVf_NAMED)
#define CvLEXICAL(cv) (CvFLAGS(cv) & CVf_LEXICAL)
#define CvLEXICAL_on(cv) (CvFLAGS(cv) |= CVf_LEXICAL)
#define CvLEXICAL_off(cv) (CvFLAGS(cv) &= ~CVf_LEXICAL)
#define CvANONCONST(cv) (CvFLAGS(cv) & CVf_ANONCONST)
#define CvANONCONST_on(cv) (CvFLAGS(cv) |= CVf_ANONCONST)
#define CvANONCONST_off(cv) (CvFLAGS(cv) &= ~CVf_ANONCONST)
/* Flags for newXS_flags */
#define XS_DYNAMIC_FILENAME 0x01 /* The filename isn't static */
PERL_STATIC_INLINE HEK *
CvNAME_HEK(CV *sv)
{
return CvNAMED(sv)
? ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_hek
: 0;
}
/* helper for the common pattern:
CvNAMED(sv) ? CvNAME_HEK((CV *)sv) : GvNAME_HEK(CvGV(sv))
*/
#define CvGvNAME_HEK(sv) ( \
CvNAMED((CV*)sv) ? \
((XPVCV*)MUTABLE_PTR(SvANY((SV*)sv)))->xcv_gv_u.xcv_hek\
: GvNAME_HEK(CvGV( (SV*) sv)) \
)
/* This lowers the reference count of the previous value, but does *not*
increment the reference count of the new value. */
#define CvNAME_HEK_set(cv, hek) ( \
CvNAME_HEK((CV *)(cv)) \
? unshare_hek(SvANY((CV *)(cv))->xcv_gv_u.xcv_hek) \
: (void)0, \
((XPVCV*)MUTABLE_PTR(SvANY(cv)))->xcv_gv_u.xcv_hek = (hek), \
CvNAMED_on(cv) \
)
/*
=head1 CV reference counts and CvOUTSIDE
=for apidoc m|bool|CvWEAKOUTSIDE|CV *cv
Each CV has a pointer, C<CvOUTSIDE()>, to its lexically enclosing
CV (if any). Because pointers to anonymous sub prototypes are
stored in C<&> pad slots, it is a possible to get a circular reference,
with the parent pointing to the child and vice-versa. To avoid the
ensuing memory leak, we do not increment the reference count of the CV
pointed to by C<CvOUTSIDE> in the I<one specific instance> that the parent
has a C<&> pad slot pointing back to us. In this case, we set the
C<CvWEAKOUTSIDE> flag in the child. This allows us to determine under what
circumstances we should decrement the refcount of the parent when freeing
the child.
There is a further complication with non-closure anonymous subs (i.e. those
that do not refer to any lexicals outside that sub). In this case, the
anonymous prototype is shared rather than being cloned. This has the
consequence that the parent may be freed while there are still active
children, I<e.g.>,
BEGIN { $a = sub { eval '$x' } }
In this case, the BEGIN is freed immediately after execution since there
are no active references to it: the anon sub prototype has
C<CvWEAKOUTSIDE> set since it's not a closure, and $a points to the same
CV, so it doesn't contribute to BEGIN's refcount either. When $a is
executed, the C<eval '$x'> causes the chain of C<CvOUTSIDE>s to be followed,
and the freed BEGIN is accessed.
To avoid this, whenever a CV and its associated pad is freed, any
C<&> entries in the pad are explicitly removed from the pad, and if the
refcount of the pointed-to anon sub is still positive, then that
child's C<CvOUTSIDE> is set to point to its grandparent. This will only
occur in the single specific case of a non-closure anon prototype
having one or more active references (such as C<$a> above).
One other thing to consider is that a CV may be merely undefined
rather than freed, eg C<undef &foo>. In this case, its refcount may
not have reached zero, but we still delete its pad and its C<CvROOT> etc.
Since various children may still have their C<CvOUTSIDE> pointing at this
undefined CV, we keep its own C<CvOUTSIDE> for the time being, so that
the chain of lexical scopes is unbroken. For example, the following
should print 123:
my $x = 123;
sub tmp { sub { eval '$x' } }
my $a = tmp();
undef &tmp;
print $a->();
=cut
*/
typedef OP *(*Perl_call_checker)(pTHX_ OP *, GV *, SV *);
#define CALL_CHECKER_REQUIRE_GV MGf_REQUIRE_GV
#define CV_NAME_NOTQUAL 1
#ifdef PERL_CORE
# define CV_UNDEF_KEEP_NAME 1
#endif
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

View file

@ -0,0 +1,182 @@
/* dosish.h
*
* Copyright (C) 1993, 1994, 1996, 1997, 1998, 1999,
* 2000, 2001, 2002, 2007, by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
#define ABORT() abort();
#ifndef SH_PATH
#define SH_PATH "/bin/sh"
#endif
#ifdef DJGPP
# define BIT_BUCKET "nul"
# define OP_BINARY O_BINARY
# define PERL_SYS_INIT_BODY(c,v) \
MALLOC_CHECK_TAINT2(*c,*v) Perl_DJGPP_init(c,v); PERLIO_INIT
# define init_os_extras Perl_init_os_extras
# define HAS_UTIME
# define HAS_KILL
char *djgpp_pathexp (const char*);
void Perl_DJGPP_init (int *argcp,char ***argvp);
# if (DJGPP==2 && DJGPP_MINOR < 2)
# define NO_LOCALECONV_MON_THOUSANDS_SEP
# endif
# ifndef PERL_CORE
# define PERL_FS_VER_FMT "%d_%d_%d"
# endif
# define PERL_FS_VERSION STRINGIFY(PERL_REVISION) "_" \
STRINGIFY(PERL_VERSION) "_" \
STRINGIFY(PERL_SUBVERSION)
#elif defined(WIN32)
# define PERL_SYS_INIT_BODY(c,v) \
MALLOC_CHECK_TAINT2(*c,*v) Perl_win32_init(c,v); PERLIO_INIT
# define PERL_SYS_TERM_BODY() Perl_win32_term()
# define BIT_BUCKET "nul"
#elif defined(NETWARE)
# define PERL_SYS_INIT_BODY(c,v) \
MALLOC_CHECK_TAINT2(*c,*v) Perl_nw5_init(c,v); PERLIO_INIT
# define BIT_BUCKET "nwnul"
#else
# define PERL_SYS_INIT_BODY(c,v) \
MALLOC_CHECK_TAINT2(*c,*v); PERLIO_INIT
# define BIT_BUCKET "\\dev\\nul" /* "wanna be like, umm, Newlined, or somethin?" */
#endif
#ifndef PERL_SYS_TERM_BODY
# define PERL_SYS_TERM_BODY() \
HINTS_REFCNT_TERM; KEYWORD_PLUGIN_MUTEX_TERM; \
OP_CHECK_MUTEX_TERM; OP_REFCNT_TERM; PERLIO_TERM; \
MALLOC_TERM; LOCALE_TERM; USER_PROP_MUTEX_TERM; \
ENV_TERM;
#endif
#define dXSUB_SYS dNOOP
/* USEMYBINMODE
* This symbol, if defined, indicates that the program should
* use the routine my_binmode(FILE *fp, char iotype, int mode) to insure
* that a file is in "binary" mode -- that is, that no translation
* of bytes occurs on read or write operations.
*/
#undef USEMYBINMODE
/* Stat_t:
* This symbol holds the type used to declare buffers for information
* returned by stat(). It's usually just struct stat. It may be necessary
* to include <sys/stat.h> and <sys/types.h> to get any typedef'ed
* information.
*/
#if defined(WIN64) || defined(USE_LARGE_FILES)
# define Stat_t struct _stati64
#else
# define Stat_t struct stat
#endif
/* USE_STAT_RDEV:
* This symbol is defined if this system has a stat structure declaring
* st_rdev
*/
#define USE_STAT_RDEV /**/
/* ACME_MESS:
* This symbol, if defined, indicates that error messages should be
* should be generated in a format that allows the use of the Acme
* GUI/editor's autofind feature.
*/
#undef ACME_MESS /**/
/* ALTERNATE_SHEBANG:
* This symbol, if defined, contains a "magic" string which may be used
* as the first line of a Perl program designed to be executed directly
* by name, instead of the standard Unix #!. If ALTERNATE_SHEBANG
* begins with a character other then #, then Perl will only treat
* it as a command line if it finds the string "perl" in the first
* word; otherwise it's treated as the first line of code in the script.
* (IOW, Perl won't hand off to another interpreter via an alternate
* shebang sequence that might be legal Perl code.)
*/
/* #define ALTERNATE_SHEBANG "#!" / **/
#include <signal.h>
/*
* fwrite1() should be a routine with the same calling sequence as fwrite(),
* but which outputs all of the bytes requested as a single stream (unlike
* fwrite() itself, which on some systems outputs several distinct records
* if the number_of_items parameter is >1).
*/
#define fwrite1 fwrite
#define Fstat(fd,bufptr) fstat((fd),(bufptr))
#ifdef DJGPP
# define Fflush(fp) djgpp_fflush(fp)
#else
# define Fflush(fp) fflush(fp)
#endif
#define Mkdir(path,mode) mkdir((path),(mode))
#ifndef WIN32
# define Stat(fname,bufptr) stat((fname),(bufptr))
#else
# define HAS_IOCTL
# define HAS_UTIME
# define HAS_KILL
# define HAS_WAIT
# define HAS_CHOWN
#endif /* WIN32 */
/*
* <rich@phekda.freeserve.co.uk>: The DJGPP port has code that converts
* the return code of system() into the form that Unixy wait usually
* returns:
*
* - signal number in bits 0-6;
* - core dump flag in bit 7;
* - exit code in bits 8-15.
*
* Bits 0-7 are always zero for DJGPP, because it uses system().
* See djgpp.c.
*
* POSIX::W* use the W* macros from <sys/wait.h> to decode
* the return code. Unfortunately the W* macros for DJGPP use
* a different format than Unixy wait does. So there's a mismatch
* and, say, WEXITSTATUS($?) will return bogus values.
*
* So here we add hack to redefine the W* macros from DJGPP's <sys/wait.h>
* to work with our return-code conversion.
*/
#ifdef DJGPP
#include <sys/wait.h>
#undef WEXITSTATUS
#undef WIFEXITED
#undef WIFSIGNALED
#undef WIFSTOPPED
#undef WNOHANG
#undef WSTOPSIG
#undef WTERMSIG
#undef WUNTRACED
#define WEXITSTATUS(stat_val) ((stat_val) >> 8)
#define WIFEXITED(stat_val) 0
#define WIFSIGNALED(stat_val) 0
#define WIFSTOPPED(stat_val) 0
#define WNOHANG 0
#define WSTOPSIG(stat_val) 0
#define WTERMSIG(stat_val) 0
#define WUNTRACED 0
#endif
/* Don't go reading from /dev/urandom */
#define PERL_NO_DEV_RANDOM
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

View file

@ -0,0 +1,798 @@
/* -*- buffer-read-only: t -*-
* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
* This file is built by regen/ebcdic.pl.
* Any changes made here will be lost!
*/
#ifndef PERL_EBCDIC_TABLES_H_ /* Guard against nested #includes */
#define PERL_EBCDIC_TABLES_H_ 1
/* This file contains definitions for various tables used in EBCDIC handling.
* More info is in utfebcdic.h
*
* Some of the tables are adapted from
* https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* which requires this copyright notice:
Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
#if 'A' == 193 /* EBCDIC 1047 */ \
&& '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
&& '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
/* Index is ASCII platform code point; value is EBCDIC 1047 equivalent */
# ifndef DOINIT
EXTCONST U8 PL_a2e[];
# else
EXTCONST U8 PL_a2e[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x40,0x5A,0x7F,0x7B,0x5B,0x6C,0x50,0x7D,0x4D,0x5D,0x5C,0x4E,0x6B,0x60,0x4B,0x61,
/*3_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x7A,0x5E,0x4C,0x7E,0x6E,0x6F,
/*4_*/0x7C,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,
/*5_*/0xD7,0xD8,0xD9,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAD,0xE0,0xBD,0x5F,0x6D,
/*6_*/0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
/*7_*/0x97,0x98,0x99,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xC0,0x4F,0xD0,0xA1,0x07,
/*8_*/0x20,0x21,0x22,0x23,0x24,0x25,0x06,0x17,0x28,0x29,0x2A,0x2B,0x2C,0x09,0x0A,0x1B,
/*9_*/0x30,0x31,0x1A,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3A,0x3B,0x04,0x14,0x3E,0xFF,
/*A_*/0x41,0xAA,0x4A,0xB1,0x9F,0xB2,0x6A,0xB5,0xBB,0xB4,0x9A,0x8A,0xB0,0xCA,0xAF,0xBC,
/*B_*/0x90,0x8F,0xEA,0xFA,0xBE,0xA0,0xB6,0xB3,0x9D,0xDA,0x9B,0x8B,0xB7,0xB8,0xB9,0xAB,
/*C_*/0x64,0x65,0x62,0x66,0x63,0x67,0x9E,0x68,0x74,0x71,0x72,0x73,0x78,0x75,0x76,0x77,
/*D_*/0xAC,0x69,0xED,0xEE,0xEB,0xEF,0xEC,0xBF,0x80,0xFD,0xFE,0xFB,0xFC,0xBA,0xAE,0x59,
/*E_*/0x44,0x45,0x42,0x46,0x43,0x47,0x9C,0x48,0x54,0x51,0x52,0x53,0x58,0x55,0x56,0x57,
/*F_*/0x8C,0x49,0xCD,0xCE,0xCB,0xCF,0xCC,0xE1,0x70,0xDD,0xDE,0xDB,0xDC,0x8D,0x8E,0xDF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 1047 code point; value is ASCII platform equivalent */
# ifndef DOINIT
EXTCONST U8 PL_e2a[];
# else
EXTCONST U8 PL_e2a[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x80,0x81,0x82,0x83,0x84,0x85,0x17,0x1B,0x88,0x89,0x8A,0x8B,0x8C,0x05,0x06,0x07,
/*3_*/0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9A,0x9B,0x14,0x15,0x9E,0x1A,
/*4_*/0x20,0xA0,0xE2,0xE4,0xE0,0xE1,0xE3,0xE5,0xE7,0xF1,0xA2,0x2E,0x3C,0x28,0x2B,0x7C,
/*5_*/0x26,0xE9,0xEA,0xEB,0xE8,0xED,0xEE,0xEF,0xEC,0xDF,0x21,0x24,0x2A,0x29,0x3B,0x5E,
/*6_*/0x2D,0x2F,0xC2,0xC4,0xC0,0xC1,0xC3,0xC5,0xC7,0xD1,0xA6,0x2C,0x25,0x5F,0x3E,0x3F,
/*7_*/0xF8,0xC9,0xCA,0xCB,0xC8,0xCD,0xCE,0xCF,0xCC,0x60,0x3A,0x23,0x40,0x27,0x3D,0x22,
/*8_*/0xD8,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xAB,0xBB,0xF0,0xFD,0xFE,0xB1,
/*9_*/0xB0,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0xAA,0xBA,0xE6,0xB8,0xC6,0xA4,
/*A_*/0xB5,0x7E,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0xA1,0xBF,0xD0,0x5B,0xDE,0xAE,
/*B_*/0xAC,0xA3,0xA5,0xB7,0xA9,0xA7,0xB6,0xBC,0xBD,0xBE,0xDD,0xA8,0xAF,0x5D,0xB4,0xD7,
/*C_*/0x7B,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xAD,0xF4,0xF6,0xF2,0xF3,0xF5,
/*D_*/0x7D,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0xB9,0xFB,0xFC,0xF9,0xFA,0xFF,
/*E_*/0x5C,0xF7,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xB2,0xD4,0xD6,0xD2,0xD3,0xD5,
/*F_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xB3,0xDB,0xDC,0xD9,0xDA,0x9F
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* (Confusingly named) Index is EBCDIC 1047 I8 byte; value is
* EBCDIC 1047 UTF-EBCDIC equivalent */
# ifndef DOINIT
EXTCONST U8 PL_utf2e[];
# else
EXTCONST U8 PL_utf2e[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x40,0x5A,0x7F,0x7B,0x5B,0x6C,0x50,0x7D,0x4D,0x5D,0x5C,0x4E,0x6B,0x60,0x4B,0x61,
/*3_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x7A,0x5E,0x4C,0x7E,0x6E,0x6F,
/*4_*/0x7C,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,
/*5_*/0xD7,0xD8,0xD9,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAD,0xE0,0xBD,0x5F,0x6D,
/*6_*/0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
/*7_*/0x97,0x98,0x99,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xC0,0x4F,0xD0,0xA1,0x07,
/*8_*/0x20,0x21,0x22,0x23,0x24,0x25,0x06,0x17,0x28,0x29,0x2A,0x2B,0x2C,0x09,0x0A,0x1B,
/*9_*/0x30,0x31,0x1A,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3A,0x3B,0x04,0x14,0x3E,0xFF,
/*A_*/0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x51,0x52,0x53,0x54,0x55,0x56,
/*B_*/0x57,0x58,0x59,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x70,0x71,0x72,0x73,
/*C_*/0x74,0x75,0x76,0x77,0x78,0x80,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x9A,0x9B,0x9C,
/*D_*/0x9D,0x9E,0x9F,0xA0,0xAA,0xAB,0xAC,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,
/*E_*/0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBE,0xBF,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xDA,0xDB,
/*F_*/0xDC,0xDD,0xDE,0xDF,0xE1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xFA,0xFB,0xFC,0xFD,0xFE
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* (Confusingly named) Index is EBCDIC 1047 UTF-EBCDIC byte; value is
* EBCDIC 1047 I8 equivalent */
# ifndef DOINIT
EXTCONST U8 PL_e2utf[];
# else
EXTCONST U8 PL_e2utf[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x80,0x81,0x82,0x83,0x84,0x85,0x17,0x1B,0x88,0x89,0x8A,0x8B,0x8C,0x05,0x06,0x07,
/*3_*/0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9A,0x9B,0x14,0x15,0x9E,0x1A,
/*4_*/0x20,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0x2E,0x3C,0x28,0x2B,0x7C,
/*5_*/0x26,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0x21,0x24,0x2A,0x29,0x3B,0x5E,
/*6_*/0x2D,0x2F,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0x2C,0x25,0x5F,0x3E,0x3F,
/*7_*/0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3,0xC4,0x60,0x3A,0x23,0x40,0x27,0x3D,0x22,
/*8_*/0xC5,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,
/*9_*/0xCC,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,
/*A_*/0xD3,0x7E,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0xD4,0xD5,0xD6,0x5B,0xD7,0xD8,
/*B_*/0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0x5D,0xE6,0xE7,
/*C_*/0x7B,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,
/*D_*/0x7D,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,
/*E_*/0x5C,0xF4,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,
/*F_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xFB,0xFC,0xFD,0xFE,0xFF,0x9F
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 1047 UTF-EBCDIC byte; value is UTF8SKIP for start bytes
* (including for overlongs); 1 for continuation. Adapted from the shadow
* flags table in tr16. The entries marked 9 in tr16 are continuation bytes
* and are marked as length 1 here so that we can recover. */
# ifndef DOINIT
EXTCONST U8 PL_utf8skip[];
# else
EXTCONST U8 PL_utf8skip[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*1_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*2_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*3_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*4_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*5_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*6_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*7_*/ 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
/*8_*/ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
/*9_*/ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
/*A_*/ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2,
/*B_*/ 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 1, 3, 3,
/*C_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
/*D_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4,
/*E_*/ 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 5, 5, 5,
/*F_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 6, 7, 14, 1
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 1047 code point; value is its lowercase equivalent */
# ifndef DOINIT
EXTCONST U8 PL_latin1_lc[];
# else
EXTCONST U8 PL_latin1_lc[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
/*6_*/0x60,0x61,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
/*7_*/0x70,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
/*8_*/0x70,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
/*9_*/0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9C,0x9F,
/*A_*/0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0x8C,0xAD,0x8E,0xAF,
/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0x8D,0xBB,0xBC,0xBD,0xBE,0xBF,
/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xCB,0xCC,0xCD,0xCE,0xCF,
/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xDB,0xDC,0xDD,0xDE,0xFF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 1047 code point; value is its uppercase equivalent.
* The 'mod' in the name means that codepoints whose uppercase is above 255 or
* longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */
# ifndef DOINIT
EXTCONST U8 PL_mod_latin1_uc[];
# else
EXTCONST U8 PL_mod_latin1_uc[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
/*4_*/0x40,0x41,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
/*5_*/0x50,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0xDF,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
/*7_*/0x80,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0xAC,0xBA,0xAE,0x8F,
/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9E,0x9D,0x9E,0x9F,
/*A_*/0xDF,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
/*C_*/0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xEB,0xEC,0xED,0xEE,0xEF,
/*D_*/0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xFB,0xFC,0xFD,0xFE,0xDF,
/*E_*/0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 1047 code point; For A-Z, value is a-z; for a-z, value
* is A-Z; all other code points map to themselves */
# ifndef DOINIT
EXTCONST U8 PL_fold[];
# else
EXTCONST U8 PL_fold[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 1047 code point; value is its other fold-pair equivalent
* (A => a; a => A, etc) in the 0-255 range. If no such equivalent, value is
* the code point itself */
# ifndef DOINIT
EXTCONST U8 PL_fold_latin1[];
# else
EXTCONST U8 PL_fold_latin1[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
/*4_*/0x40,0x41,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
/*5_*/0x50,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
/*6_*/0x60,0x61,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
/*7_*/0x80,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
/*8_*/0x70,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0xAC,0xBA,0xAE,0x8F,
/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9E,0x9D,0x9C,0x9F,
/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0x8C,0xAD,0x8E,0xAF,
/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0x8D,0xBB,0xBC,0xBD,0xBE,0xBF,
/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xEB,0xEC,0xED,0xEE,0xEF,
/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xFB,0xFC,0xFD,0xFE,0xDF,
/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xCB,0xCC,0xCD,0xCE,0xCF,
/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xDB,0xDC,0xDD,0xDE,0xFF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* The table below is adapted from
* https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
# ifndef DOINIT
EXTCONST U8 PL_extended_utf8_dfa_tab[];
# else
EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*2_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*3_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*4_ */ 0, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10, 0, 0, 0, 0, 0,
/*5_ */ 0, 10, 10, 10, 10, 10, 10, 11, 11, 11, 0, 0, 0, 0, 0, 0,
/*6_ */ 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
/*7_ */ 11, 11, 11, 11, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
/*8_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*9_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*A_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2,
/*B_ */ 2, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 0, 3, 3,
/*C_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
/*D_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 12, 4, 4, 4,
/*E_ */ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 13, 5, 5,
/*F_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 6, 15, 1, 0,
/*N0= 0*/ 0, 1, 16, 32, 48, 64, 80, 1, 1, 1, 1, 1, 96,112,128,144,
/*N1= 16*/ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
/*N2= 32*/ 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 1, 1, 1, 1,
/*N3= 48*/ 1, 1, 1, 1, 1, 1, 1, 32, 32, 32, 32, 32, 1, 1, 1, 1,
/*N4= 64*/ 1, 1, 1, 1, 1, 1, 1, 48, 48, 48, 48, 48, 1, 1, 1, 1,
/*N5= 80*/ 1, 1, 1, 1, 1, 1, 1, 64, 64, 64, 64, 64, 1, 1, 1, 1,
/*N6= 96*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1, 1,
/*N7=112*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 48, 1, 1, 1, 1,
/*N8=128*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 64, 64, 1, 1, 1, 1,
/*N9=144*/ 1, 1, 1, 1, 1, 1, 1, 1, 80, 80, 80, 80, 1, 1, 1, 1
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15*/
};
# endif
/* The table below is adapted from
* https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
# ifndef DOINIT
EXTCONST U16 PL_strict_utf8_dfa_tab[];
# else
EXTCONST U16 PL_strict_utf8_dfa_tab[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*2_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*3_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*4_ */ 0, 10, 11, 12, 12, 12, 12, 12, 12, 13, 14, 0, 0, 0, 0, 0,
/*5_ */ 0, 13, 14, 13, 14, 15, 16, 17, 18, 17, 0, 0, 0, 0, 0, 0,
/*6_ */ 0, 0, 18, 17, 18, 19, 20, 17, 18, 17, 18, 0, 0, 0, 0, 0,
/*7_ */ 17, 18, 21, 22, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
/*8_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*9_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*A_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2,
/*B_ */ 2, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 0, 3, 3,
/*C_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
/*D_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 8, 6, 4, 5,
/*E_ */ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 5, 9, 7, 1,
/*F_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
/*N0 = 0*/ 0, 1, 23, 46, 69,138,115,184, 92,161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*N1 = 23*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*N2 = 46*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
/*N3 = 69*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
/*N4 = 92*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46,
/*N5 =115*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 1, 1, 46,207,
/*N6 =138*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,276,
/*N7 =161*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69,322, 69,322, 69,322, 69,322, 69,322,
/*N8 =184*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69,322, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*N9 =207*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23,230,253, 23, 23, 23, 23, 23,299,
/*N10=230*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
/*N11=253*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
/*N12=276*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,299,
/*N13=299*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
/*N14=322*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,345,
/*N15=345*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,299
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22*/
};
# endif
/* The table below is adapted from
* https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
# ifndef DOINIT
EXTCONST U8 PL_c9_utf8_dfa_tab[];
# else
EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*2_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*3_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*4_ */ 0, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 0, 0, 0, 0, 0,
/*5_ */ 0, 11, 11, 11, 11, 11, 11, 12, 12, 12, 0, 0, 0, 0, 0, 0,
/*6_ */ 0, 0, 12, 12, 12, 13, 13, 12, 12, 12, 12, 0, 0, 0, 0, 0,
/*7_ */ 12, 12, 12, 12, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
/*8_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*9_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*A_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2,
/*B_ */ 2, 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 0, 3, 3,
/*C_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
/*D_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 6, 5, 4, 4,
/*E_ */ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 8, 7, 1,
/*F_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
/*N0= 0*/ 0, 1, 14, 28, 42, 70, 56, 98, 84, 1, 1, 1, 1, 1,
/*N1=14*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
/*N2=28*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 14, 14, 14, 14,
/*N3=42*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28,
/*N4=56*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28,
/*N5=70*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 1,
/*N6=84*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 42, 42,
/*N7=98*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13*/
};
# endif
#endif /* EBCDIC 1047 */
#if 'A' == 193 /* EBCDIC 037 */ \
&& '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
&& '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
/* Index is ASCII platform code point; value is EBCDIC 037 equivalent */
# ifndef DOINIT
EXTCONST U8 PL_a2e[];
# else
EXTCONST U8 PL_a2e[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x40,0x5A,0x7F,0x7B,0x5B,0x6C,0x50,0x7D,0x4D,0x5D,0x5C,0x4E,0x6B,0x60,0x4B,0x61,
/*3_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x7A,0x5E,0x4C,0x7E,0x6E,0x6F,
/*4_*/0x7C,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,
/*5_*/0xD7,0xD8,0xD9,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xBA,0xE0,0xBB,0xB0,0x6D,
/*6_*/0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
/*7_*/0x97,0x98,0x99,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xC0,0x4F,0xD0,0xA1,0x07,
/*8_*/0x20,0x21,0x22,0x23,0x24,0x15,0x06,0x17,0x28,0x29,0x2A,0x2B,0x2C,0x09,0x0A,0x1B,
/*9_*/0x30,0x31,0x1A,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3A,0x3B,0x04,0x14,0x3E,0xFF,
/*A_*/0x41,0xAA,0x4A,0xB1,0x9F,0xB2,0x6A,0xB5,0xBD,0xB4,0x9A,0x8A,0x5F,0xCA,0xAF,0xBC,
/*B_*/0x90,0x8F,0xEA,0xFA,0xBE,0xA0,0xB6,0xB3,0x9D,0xDA,0x9B,0x8B,0xB7,0xB8,0xB9,0xAB,
/*C_*/0x64,0x65,0x62,0x66,0x63,0x67,0x9E,0x68,0x74,0x71,0x72,0x73,0x78,0x75,0x76,0x77,
/*D_*/0xAC,0x69,0xED,0xEE,0xEB,0xEF,0xEC,0xBF,0x80,0xFD,0xFE,0xFB,0xFC,0xAD,0xAE,0x59,
/*E_*/0x44,0x45,0x42,0x46,0x43,0x47,0x9C,0x48,0x54,0x51,0x52,0x53,0x58,0x55,0x56,0x57,
/*F_*/0x8C,0x49,0xCD,0xCE,0xCB,0xCF,0xCC,0xE1,0x70,0xDD,0xDE,0xDB,0xDC,0x8D,0x8E,0xDF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 037 code point; value is ASCII platform equivalent */
# ifndef DOINIT
EXTCONST U8 PL_e2a[];
# else
EXTCONST U8 PL_e2a[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x80,0x81,0x82,0x83,0x84,0x0A,0x17,0x1B,0x88,0x89,0x8A,0x8B,0x8C,0x05,0x06,0x07,
/*3_*/0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9A,0x9B,0x14,0x15,0x9E,0x1A,
/*4_*/0x20,0xA0,0xE2,0xE4,0xE0,0xE1,0xE3,0xE5,0xE7,0xF1,0xA2,0x2E,0x3C,0x28,0x2B,0x7C,
/*5_*/0x26,0xE9,0xEA,0xEB,0xE8,0xED,0xEE,0xEF,0xEC,0xDF,0x21,0x24,0x2A,0x29,0x3B,0xAC,
/*6_*/0x2D,0x2F,0xC2,0xC4,0xC0,0xC1,0xC3,0xC5,0xC7,0xD1,0xA6,0x2C,0x25,0x5F,0x3E,0x3F,
/*7_*/0xF8,0xC9,0xCA,0xCB,0xC8,0xCD,0xCE,0xCF,0xCC,0x60,0x3A,0x23,0x40,0x27,0x3D,0x22,
/*8_*/0xD8,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xAB,0xBB,0xF0,0xFD,0xFE,0xB1,
/*9_*/0xB0,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0xAA,0xBA,0xE6,0xB8,0xC6,0xA4,
/*A_*/0xB5,0x7E,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0xA1,0xBF,0xD0,0xDD,0xDE,0xAE,
/*B_*/0x5E,0xA3,0xA5,0xB7,0xA9,0xA7,0xB6,0xBC,0xBD,0xBE,0x5B,0x5D,0xAF,0xA8,0xB4,0xD7,
/*C_*/0x7B,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xAD,0xF4,0xF6,0xF2,0xF3,0xF5,
/*D_*/0x7D,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0xB9,0xFB,0xFC,0xF9,0xFA,0xFF,
/*E_*/0x5C,0xF7,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xB2,0xD4,0xD6,0xD2,0xD3,0xD5,
/*F_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xB3,0xDB,0xDC,0xD9,0xDA,0x9F
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* (Confusingly named) Index is EBCDIC 037 I8 byte; value is
* EBCDIC 037 UTF-EBCDIC equivalent */
# ifndef DOINIT
EXTCONST U8 PL_utf2e[];
# else
EXTCONST U8 PL_utf2e[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x40,0x5A,0x7F,0x7B,0x5B,0x6C,0x50,0x7D,0x4D,0x5D,0x5C,0x4E,0x6B,0x60,0x4B,0x61,
/*3_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0x7A,0x5E,0x4C,0x7E,0x6E,0x6F,
/*4_*/0x7C,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,
/*5_*/0xD7,0xD8,0xD9,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xBA,0xE0,0xBB,0xB0,0x6D,
/*6_*/0x79,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x91,0x92,0x93,0x94,0x95,0x96,
/*7_*/0x97,0x98,0x99,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xC0,0x4F,0xD0,0xA1,0x07,
/*8_*/0x20,0x21,0x22,0x23,0x24,0x15,0x06,0x17,0x28,0x29,0x2A,0x2B,0x2C,0x09,0x0A,0x1B,
/*9_*/0x30,0x31,0x1A,0x33,0x34,0x35,0x36,0x08,0x38,0x39,0x3A,0x3B,0x04,0x14,0x3E,0xFF,
/*A_*/0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x51,0x52,0x53,0x54,0x55,0x56,
/*B_*/0x57,0x58,0x59,0x5F,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x70,0x71,0x72,
/*C_*/0x73,0x74,0x75,0x76,0x77,0x78,0x80,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x9A,0x9B,
/*D_*/0x9C,0x9D,0x9E,0x9F,0xA0,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB1,0xB2,0xB3,0xB4,0xB5,
/*E_*/0xB6,0xB7,0xB8,0xB9,0xBC,0xBD,0xBE,0xBF,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xDA,0xDB,
/*F_*/0xDC,0xDD,0xDE,0xDF,0xE1,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xFA,0xFB,0xFC,0xFD,0xFE
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* (Confusingly named) Index is EBCDIC 037 UTF-EBCDIC byte; value is
* EBCDIC 037 I8 equivalent */
# ifndef DOINIT
EXTCONST U8 PL_e2utf[];
# else
EXTCONST U8 PL_e2utf[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x80,0x81,0x82,0x83,0x84,0x0A,0x17,0x1B,0x88,0x89,0x8A,0x8B,0x8C,0x05,0x06,0x07,
/*3_*/0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9A,0x9B,0x14,0x15,0x9E,0x1A,
/*4_*/0x20,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0x2E,0x3C,0x28,0x2B,0x7C,
/*5_*/0x26,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0x21,0x24,0x2A,0x29,0x3B,0xB3,
/*6_*/0x2D,0x2F,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0x2C,0x25,0x5F,0x3E,0x3F,
/*7_*/0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0x60,0x3A,0x23,0x40,0x27,0x3D,0x22,
/*8_*/0xC6,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,
/*9_*/0xCD,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,
/*A_*/0xD4,0x7E,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,
/*B_*/0x5E,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0x5B,0x5D,0xE4,0xE5,0xE6,0xE7,
/*C_*/0x7B,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,
/*D_*/0x7D,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,
/*E_*/0x5C,0xF4,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,
/*F_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xFB,0xFC,0xFD,0xFE,0xFF,0x9F
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 037 UTF-EBCDIC byte; value is UTF8SKIP for start bytes
* (including for overlongs); 1 for continuation. Adapted from the shadow
* flags table in tr16. The entries marked 9 in tr16 are continuation bytes
* and are marked as length 1 here so that we can recover. */
# ifndef DOINIT
EXTCONST U8 PL_utf8skip[];
# else
EXTCONST U8 PL_utf8skip[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*1_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*2_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*3_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*4_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*5_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*6_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*7_*/ 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
/*8_*/ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
/*9_*/ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
/*A_*/ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
/*B_*/ 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 3, 3, 3, 3,
/*C_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3,
/*D_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 4,
/*E_*/ 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 5, 5, 5,
/*F_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 6, 7, 14, 1
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 037 code point; value is its lowercase equivalent */
# ifndef DOINIT
EXTCONST U8 PL_latin1_lc[];
# else
EXTCONST U8 PL_latin1_lc[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
/*6_*/0x60,0x61,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
/*7_*/0x70,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
/*8_*/0x70,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
/*9_*/0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9C,0x9F,
/*A_*/0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0x8C,0x8D,0x8E,0xAF,
/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xCB,0xCC,0xCD,0xCE,0xCF,
/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xDB,0xDC,0xDD,0xDE,0xFF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 037 code point; value is its uppercase equivalent.
* The 'mod' in the name means that codepoints whose uppercase is above 255 or
* longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */
# ifndef DOINIT
EXTCONST U8 PL_mod_latin1_uc[];
# else
EXTCONST U8 PL_mod_latin1_uc[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
/*4_*/0x40,0x41,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
/*5_*/0x50,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0xDF,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
/*7_*/0x80,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0xAC,0xAD,0xAE,0x8F,
/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9E,0x9D,0x9E,0x9F,
/*A_*/0xDF,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
/*C_*/0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xEB,0xEC,0xED,0xEE,0xEF,
/*D_*/0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xFB,0xFC,0xFD,0xFE,0xDF,
/*E_*/0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 037 code point; For A-Z, value is a-z; for a-z, value
* is A-Z; all other code points map to themselves */
# ifndef DOINIT
EXTCONST U8 PL_fold[];
# else
EXTCONST U8 PL_fold[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* Index is EBCDIC 037 code point; value is its other fold-pair equivalent
* (A => a; a => A, etc) in the 0-255 range. If no such equivalent, value is
* the code point itself */
# ifndef DOINIT
EXTCONST U8 PL_fold_latin1[];
# else
EXTCONST U8 PL_fold_latin1[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
/*4_*/0x40,0x41,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
/*5_*/0x50,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
/*6_*/0x60,0x61,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
/*7_*/0x80,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
/*8_*/0x70,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0xAC,0xAD,0xAE,0x8F,
/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9E,0x9D,0x9C,0x9F,
/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0x8C,0x8D,0x8E,0xAF,
/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xEB,0xEC,0xED,0xEE,0xEF,
/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xFB,0xFC,0xFD,0xFE,0xDF,
/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xCB,0xCC,0xCD,0xCE,0xCF,
/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xDB,0xDC,0xDD,0xDE,0xFF
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
};
# endif
/* The table below is adapted from
* https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
# ifndef DOINIT
EXTCONST U8 PL_extended_utf8_dfa_tab[];
# else
EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*2_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*3_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*4_ */ 0, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10, 0, 0, 0, 0, 0,
/*5_ */ 0, 10, 10, 10, 10, 10, 10, 11, 11, 11, 0, 0, 0, 0, 0, 11,
/*6_ */ 0, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0,
/*7_ */ 11, 11, 11, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0,
/*8_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*9_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*A_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*B_ */ 0, 2, 2, 2, 2, 2, 1, 3, 3, 3, 0, 0, 3, 3, 3, 3,
/*C_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
/*D_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 12, 4, 4, 4,
/*E_ */ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 13, 5, 5,
/*F_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 6, 15, 1, 0,
/*N0= 0*/ 0, 1, 16, 32, 48, 64, 80, 1, 1, 1, 1, 1, 96,112,128,144,
/*N1= 16*/ 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
/*N2= 32*/ 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, 1, 1, 1, 1,
/*N3= 48*/ 1, 1, 1, 1, 1, 1, 1, 32, 32, 32, 32, 32, 1, 1, 1, 1,
/*N4= 64*/ 1, 1, 1, 1, 1, 1, 1, 48, 48, 48, 48, 48, 1, 1, 1, 1,
/*N5= 80*/ 1, 1, 1, 1, 1, 1, 1, 64, 64, 64, 64, 64, 1, 1, 1, 1,
/*N6= 96*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 32, 1, 1, 1, 1,
/*N7=112*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 48, 48, 1, 1, 1, 1,
/*N8=128*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 64, 64, 1, 1, 1, 1,
/*N9=144*/ 1, 1, 1, 1, 1, 1, 1, 1, 80, 80, 80, 80, 1, 1, 1, 1
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15*/
};
# endif
/* The table below is adapted from
* https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
# ifndef DOINIT
EXTCONST U16 PL_strict_utf8_dfa_tab[];
# else
EXTCONST U16 PL_strict_utf8_dfa_tab[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*2_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*3_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*4_ */ 0, 10, 11, 12, 12, 12, 12, 12, 12, 13, 14, 0, 0, 0, 0, 0,
/*5_ */ 0, 13, 14, 13, 14, 15, 16, 17, 18, 17, 0, 0, 0, 0, 0, 18,
/*6_ */ 0, 0, 17, 18, 19, 20, 17, 18, 17, 18, 17, 0, 0, 0, 0, 0,
/*7_ */ 18, 21, 22, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0,
/*8_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*9_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*A_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*B_ */ 0, 2, 2, 2, 2, 2, 1, 3, 3, 3, 0, 0, 3, 3, 3, 3,
/*C_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
/*D_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 8, 6, 4, 5,
/*E_ */ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 5, 9, 7, 1,
/*F_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
/*N0 = 0*/ 0, 1, 23, 46, 69,138,115,184, 92,161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*N1 = 23*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*N2 = 46*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
/*N3 = 69*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
/*N4 = 92*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46,
/*N5 =115*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 1, 1, 46,207,
/*N6 =138*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,276,
/*N7 =161*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69,322, 69,322, 69,322, 69,322, 69,322,
/*N8 =184*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69,322, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/*N9 =207*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23,230,253, 23, 23, 23, 23, 23,299,
/*N10=230*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
/*N11=253*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
/*N12=276*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,299,
/*N13=299*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
/*N14=322*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,345,
/*N15=345*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,299
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22*/
};
# endif
/* The table below is adapted from
* https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
# ifndef DOINIT
EXTCONST U8 PL_c9_utf8_dfa_tab[];
# else
EXTCONST U8 PL_c9_utf8_dfa_tab[] = {
/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/
/*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*2_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*3_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/*4_ */ 0, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 0, 0, 0, 0, 0,
/*5_ */ 0, 11, 11, 11, 11, 11, 11, 12, 12, 12, 0, 0, 0, 0, 0, 12,
/*6_ */ 0, 0, 12, 12, 13, 13, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0,
/*7_ */ 12, 12, 12, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0,
/*8_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*9_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*A_ */ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
/*B_ */ 0, 2, 2, 2, 2, 2, 1, 3, 3, 3, 0, 0, 3, 3, 3, 3,
/*C_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3,
/*D_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 6, 5, 4, 4,
/*E_ */ 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 8, 7, 1,
/*F_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
/*N0= 0*/ 0, 1, 14, 28, 42, 70, 56, 98, 84, 1, 1, 1, 1, 1,
/*N1=14*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
/*N2=28*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 14, 14, 14, 14,
/*N3=42*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28,
/*N4=56*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28,
/*N5=70*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 1,
/*N6=84*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 42, 42,
/*N7=98*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13*/
};
# endif
#endif /* EBCDIC 037 */
#endif /* PERL_EBCDIC_TABLES_H_ */
/* ex: set ro: */

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,508 @@
/* -*- buffer-read-only: t -*-
*
* embedvar.h
*
* Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
* 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
* This file is built by regen/embed.pl from data in embed.fnc,
* regen/embed.pl, regen/opcodes, intrpvar.h and perlvars.h.
* Any changes made here will be lost!
*
* Edit those files and run 'make regen_headers' to effect changes.
*/
/* (Doing namespace management portably in C is really gross.) */
/*
The following combinations of MULTIPLICITY and PERL_IMPLICIT_CONTEXT
are supported:
1) none
2) MULTIPLICITY # supported for compatibility
3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT
All other combinations of these flags are errors.
only #3 is supported directly, while #2 is a special
case of #3 (supported by redefining vTHX appropriately).
*/
#if defined(MULTIPLICITY)
/* cases 2 and 3 above */
# if defined(PERL_IMPLICIT_CONTEXT)
# define vTHX aTHX
# else
# define vTHX PERL_GET_INTERP
# endif
#define PL_AboveLatin1 (vTHX->IAboveLatin1)
#define PL_Assigned_invlist (vTHX->IAssigned_invlist)
#define PL_CCC_non0_non230 (vTHX->ICCC_non0_non230)
#define PL_DBcontrol (vTHX->IDBcontrol)
#define PL_DBcv (vTHX->IDBcv)
#define PL_DBgv (vTHX->IDBgv)
#define PL_DBline (vTHX->IDBline)
#define PL_DBsignal (vTHX->IDBsignal)
#define PL_DBsingle (vTHX->IDBsingle)
#define PL_DBsub (vTHX->IDBsub)
#define PL_DBtrace (vTHX->IDBtrace)
#define PL_Dir (vTHX->IDir)
#define PL_Env (vTHX->IEnv)
#define PL_GCB_invlist (vTHX->IGCB_invlist)
#define PL_HasMultiCharFold (vTHX->IHasMultiCharFold)
#define PL_InBitmap (vTHX->IInBitmap)
#define PL_InMultiCharFold (vTHX->IInMultiCharFold)
#define PL_LB_invlist (vTHX->ILB_invlist)
#define PL_LIO (vTHX->ILIO)
#define PL_Latin1 (vTHX->ILatin1)
#define PL_Mem (vTHX->IMem)
#define PL_MemParse (vTHX->IMemParse)
#define PL_MemShared (vTHX->IMemShared)
#define PL_Posix_ptrs (vTHX->IPosix_ptrs)
#define PL_Private_Use (vTHX->IPrivate_Use)
#define PL_Proc (vTHX->IProc)
#define PL_SB_invlist (vTHX->ISB_invlist)
#define PL_SCX_invlist (vTHX->ISCX_invlist)
#define PL_Sock (vTHX->ISock)
#define PL_StdIO (vTHX->IStdIO)
#define PL_Sv (vTHX->ISv)
#define PL_TR_SPECIAL_HANDLING_UTF8 (vTHX->ITR_SPECIAL_HANDLING_UTF8)
#define PL_UpperLatin1 (vTHX->IUpperLatin1)
#define PL_WB_invlist (vTHX->IWB_invlist)
#define PL_XPosix_ptrs (vTHX->IXPosix_ptrs)
#define PL_Xpv (vTHX->IXpv)
#define PL_an (vTHX->Ian)
#define PL_argvgv (vTHX->Iargvgv)
#define PL_argvout_stack (vTHX->Iargvout_stack)
#define PL_argvoutgv (vTHX->Iargvoutgv)
#define PL_basetime (vTHX->Ibasetime)
#define PL_beginav (vTHX->Ibeginav)
#define PL_beginav_save (vTHX->Ibeginav_save)
#define PL_blockhooks (vTHX->Iblockhooks)
#define PL_body_arenas (vTHX->Ibody_arenas)
#define PL_body_roots (vTHX->Ibody_roots)
#define PL_bodytarget (vTHX->Ibodytarget)
#define PL_breakable_sub_gen (vTHX->Ibreakable_sub_gen)
#define PL_checkav (vTHX->Icheckav)
#define PL_checkav_save (vTHX->Icheckav_save)
#define PL_chopset (vTHX->Ichopset)
#define PL_clocktick (vTHX->Iclocktick)
#define PL_collation_ix (vTHX->Icollation_ix)
#define PL_collation_name (vTHX->Icollation_name)
#define PL_collation_standard (vTHX->Icollation_standard)
#define PL_collxfrm_base (vTHX->Icollxfrm_base)
#define PL_collxfrm_mult (vTHX->Icollxfrm_mult)
#define PL_colors (vTHX->Icolors)
#define PL_colorset (vTHX->Icolorset)
#define PL_compcv (vTHX->Icompcv)
#define PL_compiling (vTHX->Icompiling)
#define PL_comppad (vTHX->Icomppad)
#define PL_comppad_name (vTHX->Icomppad_name)
#define PL_comppad_name_fill (vTHX->Icomppad_name_fill)
#define PL_comppad_name_floor (vTHX->Icomppad_name_floor)
#define PL_constpadix (vTHX->Iconstpadix)
#define PL_cop_seqmax (vTHX->Icop_seqmax)
#define PL_cryptseen (vTHX->Icryptseen)
#define PL_curcop (vTHX->Icurcop)
#define PL_curcopdb (vTHX->Icurcopdb)
#define PL_curlocales (vTHX->Icurlocales)
#define PL_curpad (vTHX->Icurpad)
#define PL_curpm (vTHX->Icurpm)
#define PL_curpm_under (vTHX->Icurpm_under)
#define PL_curstack (vTHX->Icurstack)
#define PL_curstackinfo (vTHX->Icurstackinfo)
#define PL_curstash (vTHX->Icurstash)
#define PL_curstname (vTHX->Icurstname)
#define PL_custom_op_descs (vTHX->Icustom_op_descs)
#define PL_custom_op_names (vTHX->Icustom_op_names)
#define PL_custom_ops (vTHX->Icustom_ops)
#define PL_cv_has_eval (vTHX->Icv_has_eval)
#define PL_dbargs (vTHX->Idbargs)
#define PL_debstash (vTHX->Idebstash)
#define PL_debug (vTHX->Idebug)
#define PL_debug_pad (vTHX->Idebug_pad)
#define PL_def_layerlist (vTHX->Idef_layerlist)
#define PL_defgv (vTHX->Idefgv)
#define PL_defoutgv (vTHX->Idefoutgv)
#define PL_defstash (vTHX->Idefstash)
#define PL_delaymagic (vTHX->Idelaymagic)
#define PL_delaymagic_egid (vTHX->Idelaymagic_egid)
#define PL_delaymagic_euid (vTHX->Idelaymagic_euid)
#define PL_delaymagic_gid (vTHX->Idelaymagic_gid)
#define PL_delaymagic_uid (vTHX->Idelaymagic_uid)
#define PL_destroyhook (vTHX->Idestroyhook)
#define PL_diehook (vTHX->Idiehook)
#define PL_doswitches (vTHX->Idoswitches)
#define PL_dowarn (vTHX->Idowarn)
#define PL_dump_re_max_len (vTHX->Idump_re_max_len)
#define PL_dumper_fd (vTHX->Idumper_fd)
#define PL_dumpindent (vTHX->Idumpindent)
#define PL_e_script (vTHX->Ie_script)
#define PL_efloatbuf (vTHX->Iefloatbuf)
#define PL_efloatsize (vTHX->Iefloatsize)
#define PL_endav (vTHX->Iendav)
#define PL_envgv (vTHX->Ienvgv)
#define PL_errgv (vTHX->Ierrgv)
#define PL_errors (vTHX->Ierrors)
#define PL_eval_root (vTHX->Ieval_root)
#define PL_eval_start (vTHX->Ieval_start)
#define PL_evalseq (vTHX->Ievalseq)
#define PL_exit_flags (vTHX->Iexit_flags)
#define PL_exitlist (vTHX->Iexitlist)
#define PL_exitlistlen (vTHX->Iexitlistlen)
#define PL_fdpid (vTHX->Ifdpid)
#define PL_filemode (vTHX->Ifilemode)
#define PL_firstgv (vTHX->Ifirstgv)
#define PL_forkprocess (vTHX->Iforkprocess)
#define PL_formtarget (vTHX->Iformtarget)
#define PL_generation (vTHX->Igeneration)
#define PL_gensym (vTHX->Igensym)
#define PL_globalstash (vTHX->Iglobalstash)
#define PL_globhook (vTHX->Iglobhook)
#define PL_hash_rand_bits (vTHX->Ihash_rand_bits)
#define PL_hash_rand_bits_enabled (vTHX->Ihash_rand_bits_enabled)
#define PL_hintgv (vTHX->Ihintgv)
#define PL_hv_fetch_ent_mh (vTHX->Ihv_fetch_ent_mh)
#define PL_in_clean_all (vTHX->Iin_clean_all)
#define PL_in_clean_objs (vTHX->Iin_clean_objs)
#define PL_in_eval (vTHX->Iin_eval)
#define PL_in_load_module (vTHX->Iin_load_module)
#define PL_in_some_fold (vTHX->Iin_some_fold)
#define PL_in_utf8_COLLATE_locale (vTHX->Iin_utf8_COLLATE_locale)
#define PL_in_utf8_CTYPE_locale (vTHX->Iin_utf8_CTYPE_locale)
#define PL_in_utf8_turkic_locale (vTHX->Iin_utf8_turkic_locale)
#define PL_incgv (vTHX->Iincgv)
#define PL_initav (vTHX->Iinitav)
#define PL_inplace (vTHX->Iinplace)
#define PL_internal_random_state (vTHX->Iinternal_random_state)
#define PL_isarev (vTHX->Iisarev)
#define PL_known_layers (vTHX->Iknown_layers)
#define PL_langinfo_buf (vTHX->Ilanginfo_buf)
#define PL_langinfo_bufsize (vTHX->Ilanginfo_bufsize)
#define PL_last_in_gv (vTHX->Ilast_in_gv)
#define PL_lastfd (vTHX->Ilastfd)
#define PL_lastgotoprobe (vTHX->Ilastgotoprobe)
#define PL_laststatval (vTHX->Ilaststatval)
#define PL_laststype (vTHX->Ilaststype)
#define PL_lc_numeric_mutex_depth (vTHX->Ilc_numeric_mutex_depth)
#define PL_locale_utf8ness (vTHX->Ilocale_utf8ness)
#define PL_localizing (vTHX->Ilocalizing)
#define PL_localpatches (vTHX->Ilocalpatches)
#define PL_lockhook (vTHX->Ilockhook)
#define PL_main_cv (vTHX->Imain_cv)
#define PL_main_root (vTHX->Imain_root)
#define PL_main_start (vTHX->Imain_start)
#define PL_mainstack (vTHX->Imainstack)
#define PL_markstack (vTHX->Imarkstack)
#define PL_markstack_max (vTHX->Imarkstack_max)
#define PL_markstack_ptr (vTHX->Imarkstack_ptr)
#define PL_max_intro_pending (vTHX->Imax_intro_pending)
#define PL_maxsysfd (vTHX->Imaxsysfd)
#define PL_mbrlen_ps (vTHX->Imbrlen_ps)
#define PL_mbrtowc_ps (vTHX->Imbrtowc_ps)
#define PL_memory_debug_header (vTHX->Imemory_debug_header)
#define PL_mess_sv (vTHX->Imess_sv)
#define PL_min_intro_pending (vTHX->Imin_intro_pending)
#define PL_minus_E (vTHX->Iminus_E)
#define PL_minus_F (vTHX->Iminus_F)
#define PL_minus_a (vTHX->Iminus_a)
#define PL_minus_c (vTHX->Iminus_c)
#define PL_minus_l (vTHX->Iminus_l)
#define PL_minus_n (vTHX->Iminus_n)
#define PL_minus_p (vTHX->Iminus_p)
#define PL_modcount (vTHX->Imodcount)
#define PL_modglobal (vTHX->Imodglobal)
#define PL_multideref_pc (vTHX->Imultideref_pc)
#define PL_my_cxt_list (vTHX->Imy_cxt_list)
#define PL_my_cxt_size (vTHX->Imy_cxt_size)
#define PL_na (vTHX->Ina)
#define PL_nomemok (vTHX->Inomemok)
#define PL_numeric_name (vTHX->Inumeric_name)
#define PL_numeric_radix_sv (vTHX->Inumeric_radix_sv)
#define PL_numeric_standard (vTHX->Inumeric_standard)
#define PL_numeric_underlying (vTHX->Inumeric_underlying)
#define PL_numeric_underlying_is_standard (vTHX->Inumeric_underlying_is_standard)
#define PL_ofsgv (vTHX->Iofsgv)
#define PL_oldname (vTHX->Ioldname)
#define PL_op (vTHX->Iop)
#define PL_op_exec_cnt (vTHX->Iop_exec_cnt)
#define PL_op_mask (vTHX->Iop_mask)
#define PL_opfreehook (vTHX->Iopfreehook)
#define PL_origalen (vTHX->Iorigalen)
#define PL_origargc (vTHX->Iorigargc)
#define PL_origargv (vTHX->Iorigargv)
#define PL_origenviron (vTHX->Iorigenviron)
#define PL_origfilename (vTHX->Iorigfilename)
#define PL_ors_sv (vTHX->Iors_sv)
#define PL_osname (vTHX->Iosname)
#define PL_pad_reset_pending (vTHX->Ipad_reset_pending)
#define PL_padix (vTHX->Ipadix)
#define PL_padix_floor (vTHX->Ipadix_floor)
#define PL_padlist_generation (vTHX->Ipadlist_generation)
#define PL_padname_const (vTHX->Ipadname_const)
#define PL_padname_undef (vTHX->Ipadname_undef)
#define PL_parser (vTHX->Iparser)
#define PL_patchlevel (vTHX->Ipatchlevel)
#define PL_peepp (vTHX->Ipeepp)
#define PL_perl_destruct_level (vTHX->Iperl_destruct_level)
#define PL_perldb (vTHX->Iperldb)
#define PL_perlio (vTHX->Iperlio)
#define PL_phase (vTHX->Iphase)
#define PL_pidstatus (vTHX->Ipidstatus)
#define PL_preambleav (vTHX->Ipreambleav)
#define PL_profiledata (vTHX->Iprofiledata)
#define PL_psig_name (vTHX->Ipsig_name)
#define PL_psig_pend (vTHX->Ipsig_pend)
#define PL_psig_ptr (vTHX->Ipsig_ptr)
#define PL_ptr_table (vTHX->Iptr_table)
#define PL_random_state (vTHX->Irandom_state)
#define PL_reentrant_buffer (vTHX->Ireentrant_buffer)
#define PL_reentrant_retint (vTHX->Ireentrant_retint)
#define PL_reg_curpm (vTHX->Ireg_curpm)
#define PL_regex_pad (vTHX->Iregex_pad)
#define PL_regex_padav (vTHX->Iregex_padav)
#define PL_registered_mros (vTHX->Iregistered_mros)
#define PL_regmatch_slab (vTHX->Iregmatch_slab)
#define PL_regmatch_state (vTHX->Iregmatch_state)
#define PL_replgv (vTHX->Ireplgv)
#define PL_restartjmpenv (vTHX->Irestartjmpenv)
#define PL_restartop (vTHX->Irestartop)
#define PL_rpeepp (vTHX->Irpeepp)
#define PL_rs (vTHX->Irs)
#define PL_runops (vTHX->Irunops)
#define PL_savebegin (vTHX->Isavebegin)
#define PL_savestack (vTHX->Isavestack)
#define PL_savestack_ix (vTHX->Isavestack_ix)
#define PL_savestack_max (vTHX->Isavestack_max)
#ifndef PL_sawampersand
#define PL_sawampersand (vTHX->Isawampersand)
#endif
#define PL_scopestack (vTHX->Iscopestack)
#define PL_scopestack_ix (vTHX->Iscopestack_ix)
#define PL_scopestack_max (vTHX->Iscopestack_max)
#define PL_scopestack_name (vTHX->Iscopestack_name)
#define PL_secondgv (vTHX->Isecondgv)
#define PL_setlocale_buf (vTHX->Isetlocale_buf)
#define PL_setlocale_bufsize (vTHX->Isetlocale_bufsize)
#define PL_sharehook (vTHX->Isharehook)
#define PL_sig_pending (vTHX->Isig_pending)
#define PL_sighandler1p (vTHX->Isighandler1p)
#define PL_sighandler3p (vTHX->Isighandler3p)
#define PL_sighandlerp (vTHX->Isighandlerp)
#define PL_signalhook (vTHX->Isignalhook)
#define PL_signals (vTHX->Isignals)
#define PL_sortcop (vTHX->Isortcop)
#define PL_sortstash (vTHX->Isortstash)
#define PL_splitstr (vTHX->Isplitstr)
#define PL_srand_called (vTHX->Isrand_called)
#define PL_stack_base (vTHX->Istack_base)
#define PL_stack_max (vTHX->Istack_max)
#define PL_stack_sp (vTHX->Istack_sp)
#define PL_start_env (vTHX->Istart_env)
#define PL_stashcache (vTHX->Istashcache)
#define PL_stashpad (vTHX->Istashpad)
#define PL_stashpadix (vTHX->Istashpadix)
#define PL_stashpadmax (vTHX->Istashpadmax)
#define PL_statcache (vTHX->Istatcache)
#define PL_statgv (vTHX->Istatgv)
#define PL_statname (vTHX->Istatname)
#define PL_statusvalue (vTHX->Istatusvalue)
#define PL_statusvalue_posix (vTHX->Istatusvalue_posix)
#define PL_statusvalue_vms (vTHX->Istatusvalue_vms)
#define PL_stderrgv (vTHX->Istderrgv)
#define PL_stdingv (vTHX->Istdingv)
#define PL_strtab (vTHX->Istrtab)
#define PL_strxfrm_NUL_replacement (vTHX->Istrxfrm_NUL_replacement)
#define PL_strxfrm_is_behaved (vTHX->Istrxfrm_is_behaved)
#define PL_strxfrm_max_cp (vTHX->Istrxfrm_max_cp)
#define PL_sub_generation (vTHX->Isub_generation)
#define PL_subline (vTHX->Isubline)
#define PL_subname (vTHX->Isubname)
#define PL_sv_arenaroot (vTHX->Isv_arenaroot)
#define PL_sv_consts (vTHX->Isv_consts)
#define PL_sv_count (vTHX->Isv_count)
#define PL_sv_immortals (vTHX->Isv_immortals)
#define PL_sv_no (vTHX->Isv_no)
#define PL_sv_root (vTHX->Isv_root)
#define PL_sv_serial (vTHX->Isv_serial)
#define PL_sv_undef (vTHX->Isv_undef)
#define PL_sv_yes (vTHX->Isv_yes)
#define PL_sv_zero (vTHX->Isv_zero)
#define PL_sys_intern (vTHX->Isys_intern)
#define PL_taint_warn (vTHX->Itaint_warn)
#define PL_tainted (vTHX->Itainted)
#define PL_tainting (vTHX->Itainting)
#define PL_threadhook (vTHX->Ithreadhook)
#define PL_tmps_floor (vTHX->Itmps_floor)
#define PL_tmps_ix (vTHX->Itmps_ix)
#define PL_tmps_max (vTHX->Itmps_max)
#define PL_tmps_stack (vTHX->Itmps_stack)
#define PL_top_env (vTHX->Itop_env)
#define PL_toptarget (vTHX->Itoptarget)
#define PL_underlying_numeric_obj (vTHX->Iunderlying_numeric_obj)
#define PL_unicode (vTHX->Iunicode)
#define PL_unitcheckav (vTHX->Iunitcheckav)
#define PL_unitcheckav_save (vTHX->Iunitcheckav_save)
#define PL_unlockhook (vTHX->Iunlockhook)
#define PL_unsafe (vTHX->Iunsafe)
#define PL_utf8_charname_begin (vTHX->Iutf8_charname_begin)
#define PL_utf8_charname_continue (vTHX->Iutf8_charname_continue)
#define PL_utf8_foldclosures (vTHX->Iutf8_foldclosures)
#define PL_utf8_idcont (vTHX->Iutf8_idcont)
#define PL_utf8_idstart (vTHX->Iutf8_idstart)
#define PL_utf8_mark (vTHX->Iutf8_mark)
#define PL_utf8_perl_idcont (vTHX->Iutf8_perl_idcont)
#define PL_utf8_perl_idstart (vTHX->Iutf8_perl_idstart)
#define PL_utf8_tofold (vTHX->Iutf8_tofold)
#define PL_utf8_tolower (vTHX->Iutf8_tolower)
#define PL_utf8_tosimplefold (vTHX->Iutf8_tosimplefold)
#define PL_utf8_totitle (vTHX->Iutf8_totitle)
#define PL_utf8_toupper (vTHX->Iutf8_toupper)
#define PL_utf8_xidcont (vTHX->Iutf8_xidcont)
#define PL_utf8_xidstart (vTHX->Iutf8_xidstart)
#define PL_utf8cache (vTHX->Iutf8cache)
#define PL_utf8locale (vTHX->Iutf8locale)
#define PL_warn_locale (vTHX->Iwarn_locale)
#define PL_warnhook (vTHX->Iwarnhook)
#define PL_watchaddr (vTHX->Iwatchaddr)
#define PL_watchok (vTHX->Iwatchok)
#define PL_wcrtomb_ps (vTHX->Iwcrtomb_ps)
#define PL_xsubfilename (vTHX->Ixsubfilename)
#endif /* MULTIPLICITY */
#if defined(PERL_GLOBAL_STRUCT)
#define PL_C_locale_obj (my_vars->GC_locale_obj)
#define PL_GC_locale_obj (my_vars->GC_locale_obj)
#define PL_appctx (my_vars->Gappctx)
#define PL_Gappctx (my_vars->Gappctx)
#define PL_check (my_vars->Gcheck)
#define PL_Gcheck (my_vars->Gcheck)
#define PL_check_mutex (my_vars->Gcheck_mutex)
#define PL_Gcheck_mutex (my_vars->Gcheck_mutex)
#define PL_csighandler1p (my_vars->Gcsighandler1p)
#define PL_Gcsighandler1p (my_vars->Gcsighandler1p)
#define PL_csighandler3p (my_vars->Gcsighandler3p)
#define PL_Gcsighandler3p (my_vars->Gcsighandler3p)
#define PL_csighandlerp (my_vars->Gcsighandlerp)
#define PL_Gcsighandlerp (my_vars->Gcsighandlerp)
#define PL_curinterp (my_vars->Gcurinterp)
#define PL_Gcurinterp (my_vars->Gcurinterp)
#define PL_do_undump (my_vars->Gdo_undump)
#define PL_Gdo_undump (my_vars->Gdo_undump)
#define PL_dollarzero_mutex (my_vars->Gdollarzero_mutex)
#define PL_Gdollarzero_mutex (my_vars->Gdollarzero_mutex)
#define PL_env_mutex (my_vars->Genv_mutex)
#define PL_Genv_mutex (my_vars->Genv_mutex)
#define PL_fold_locale (my_vars->Gfold_locale)
#define PL_Gfold_locale (my_vars->Gfold_locale)
#define PL_hash_chars (my_vars->Ghash_chars)
#define PL_Ghash_chars (my_vars->Ghash_chars)
#define PL_hash_seed (my_vars->Ghash_seed)
#define PL_Ghash_seed (my_vars->Ghash_seed)
#define PL_hash_seed_set (my_vars->Ghash_seed_set)
#define PL_Ghash_seed_set (my_vars->Ghash_seed_set)
#define PL_hash_state (my_vars->Ghash_state)
#define PL_Ghash_state (my_vars->Ghash_state)
#define PL_hints_mutex (my_vars->Ghints_mutex)
#define PL_Ghints_mutex (my_vars->Ghints_mutex)
#define PL_keyword_plugin (my_vars->Gkeyword_plugin)
#define PL_Gkeyword_plugin (my_vars->Gkeyword_plugin)
#define PL_keyword_plugin_mutex (my_vars->Gkeyword_plugin_mutex)
#define PL_Gkeyword_plugin_mutex (my_vars->Gkeyword_plugin_mutex)
#define PL_lc_numeric_mutex (my_vars->Glc_numeric_mutex)
#define PL_Glc_numeric_mutex (my_vars->Glc_numeric_mutex)
#define PL_locale_mutex (my_vars->Glocale_mutex)
#define PL_Glocale_mutex (my_vars->Glocale_mutex)
#define PL_malloc_mutex (my_vars->Gmalloc_mutex)
#define PL_Gmalloc_mutex (my_vars->Gmalloc_mutex)
#define PL_mmap_page_size (my_vars->Gmmap_page_size)
#define PL_Gmmap_page_size (my_vars->Gmmap_page_size)
#define PL_my_ctx_mutex (my_vars->Gmy_ctx_mutex)
#define PL_Gmy_ctx_mutex (my_vars->Gmy_ctx_mutex)
#define PL_my_cxt_index (my_vars->Gmy_cxt_index)
#define PL_Gmy_cxt_index (my_vars->Gmy_cxt_index)
#define PL_my_cxt_keys (my_vars->Gmy_cxt_keys)
#define PL_Gmy_cxt_keys (my_vars->Gmy_cxt_keys)
#define PL_my_cxt_keys_size (my_vars->Gmy_cxt_keys_size)
#define PL_Gmy_cxt_keys_size (my_vars->Gmy_cxt_keys_size)
#define PL_op_mutex (my_vars->Gop_mutex)
#define PL_Gop_mutex (my_vars->Gop_mutex)
#define PL_op_seq (my_vars->Gop_seq)
#define PL_Gop_seq (my_vars->Gop_seq)
#define PL_op_sequence (my_vars->Gop_sequence)
#define PL_Gop_sequence (my_vars->Gop_sequence)
#define PL_perlio_debug_fd (my_vars->Gperlio_debug_fd)
#define PL_Gperlio_debug_fd (my_vars->Gperlio_debug_fd)
#define PL_perlio_fd_refcnt (my_vars->Gperlio_fd_refcnt)
#define PL_Gperlio_fd_refcnt (my_vars->Gperlio_fd_refcnt)
#define PL_perlio_fd_refcnt_size (my_vars->Gperlio_fd_refcnt_size)
#define PL_Gperlio_fd_refcnt_size (my_vars->Gperlio_fd_refcnt_size)
#define PL_perlio_mutex (my_vars->Gperlio_mutex)
#define PL_Gperlio_mutex (my_vars->Gperlio_mutex)
#ifdef __VMS
#define PL_perllib_sep (my_vars->Gperllib_sep)
#define PL_Gperllib_sep (my_vars->Gperllib_sep)
#endif
#define PL_ppaddr (my_vars->Gppaddr)
#define PL_Gppaddr (my_vars->Gppaddr)
#ifdef OS2
#define PL_sh_path (my_vars->Gsh_path)
#define PL_Gsh_path (my_vars->Gsh_path)
#endif
#define PL_sig_defaulting (my_vars->Gsig_defaulting)
#define PL_Gsig_defaulting (my_vars->Gsig_defaulting)
#define PL_sig_handlers_initted (my_vars->Gsig_handlers_initted)
#define PL_Gsig_handlers_initted (my_vars->Gsig_handlers_initted)
#define PL_sig_ignoring (my_vars->Gsig_ignoring)
#define PL_Gsig_ignoring (my_vars->Gsig_ignoring)
#define PL_sig_trapped (my_vars->Gsig_trapped)
#define PL_Gsig_trapped (my_vars->Gsig_trapped)
#define PL_sigfpe_saved (my_vars->Gsigfpe_saved)
#define PL_Gsigfpe_saved (my_vars->Gsigfpe_saved)
#define PL_strategy_accept (my_vars->Gstrategy_accept)
#define PL_Gstrategy_accept (my_vars->Gstrategy_accept)
#define PL_strategy_dup (my_vars->Gstrategy_dup)
#define PL_Gstrategy_dup (my_vars->Gstrategy_dup)
#define PL_strategy_dup2 (my_vars->Gstrategy_dup2)
#define PL_Gstrategy_dup2 (my_vars->Gstrategy_dup2)
#define PL_strategy_mkstemp (my_vars->Gstrategy_mkstemp)
#define PL_Gstrategy_mkstemp (my_vars->Gstrategy_mkstemp)
#define PL_strategy_open (my_vars->Gstrategy_open)
#define PL_Gstrategy_open (my_vars->Gstrategy_open)
#define PL_strategy_open3 (my_vars->Gstrategy_open3)
#define PL_Gstrategy_open3 (my_vars->Gstrategy_open3)
#define PL_strategy_pipe (my_vars->Gstrategy_pipe)
#define PL_Gstrategy_pipe (my_vars->Gstrategy_pipe)
#define PL_strategy_socket (my_vars->Gstrategy_socket)
#define PL_Gstrategy_socket (my_vars->Gstrategy_socket)
#define PL_strategy_socketpair (my_vars->Gstrategy_socketpair)
#define PL_Gstrategy_socketpair (my_vars->Gstrategy_socketpair)
#define PL_sv_placeholder (my_vars->Gsv_placeholder)
#define PL_Gsv_placeholder (my_vars->Gsv_placeholder)
#define PL_thr_key (my_vars->Gthr_key)
#define PL_Gthr_key (my_vars->Gthr_key)
#define PL_timesbase (my_vars->Gtimesbase)
#define PL_Gtimesbase (my_vars->Gtimesbase)
#define PL_use_safe_putenv (my_vars->Guse_safe_putenv)
#define PL_Guse_safe_putenv (my_vars->Guse_safe_putenv)
#define PL_user_def_props (my_vars->Guser_def_props)
#define PL_Guser_def_props (my_vars->Guser_def_props)
#define PL_user_def_props_aTHX (my_vars->Guser_def_props_aTHX)
#define PL_Guser_def_props_aTHX (my_vars->Guser_def_props_aTHX)
#define PL_user_prop_mutex (my_vars->Guser_prop_mutex)
#define PL_Guser_prop_mutex (my_vars->Guser_prop_mutex)
#define PL_veto_cleanup (my_vars->Gveto_cleanup)
#define PL_Gveto_cleanup (my_vars->Gveto_cleanup)
#define PL_watch_pvx (my_vars->Gwatch_pvx)
#define PL_Gwatch_pvx (my_vars->Gwatch_pvx)
#endif /* PERL_GLOBAL_STRUCT */
/* ex: set ro: */

View file

@ -0,0 +1,127 @@
/* fakesdio.h
*
* Copyright (C) 2000, by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
/*
* This is "source level" stdio compatibility mode.
* We try and #define stdio functions in terms of PerlIO.
*/
#define _CANNOT "CANNOT"
#undef FILE
#define FILE PerlIO
#undef clearerr
#undef fclose
#undef fdopen
#undef feof
#undef ferror
#undef fflush
#undef fgetc
#undef fgetpos
#undef fgets
#undef fileno
#undef flockfile
#undef fopen
#undef fprintf
#undef fputc
#undef fputs
#undef fread
#undef freopen
#undef fscanf
#undef fseek
#undef fsetpos
#undef ftell
#undef ftrylockfile
#undef funlockfile
#undef fwrite
#undef getc
#undef getc_unlocked
#undef getw
#undef pclose
#undef popen
#undef putc
#undef putc_unlocked
#undef putw
#undef rewind
#undef setbuf
#undef setvbuf
#undef stderr
#undef stdin
#undef stdout
#undef tmpfile
#undef ungetc
#undef vfprintf
#undef printf
/* printf used to live in perl.h like this - more sophisticated
than the rest
*/
#if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
#define printf(fmt,args...) PerlIO_stdoutf(fmt,##args)
#else
#define printf PerlIO_stdoutf
#endif
#define fprintf PerlIO_printf
#define stdin PerlIO_stdin()
#define stdout PerlIO_stdout()
#define stderr PerlIO_stderr()
#define tmpfile() PerlIO_tmpfile()
#define fclose(f) PerlIO_close(f)
#define fflush(f) PerlIO_flush(f)
#define fopen(p,m) PerlIO_open(p,m)
#define vfprintf(f,fmt,a) PerlIO_vprintf(f,fmt,a)
#define fgetc(f) PerlIO_getc(f)
#define fputc(c,f) PerlIO_putc(f,c)
#define fputs(s,f) PerlIO_puts(f,s)
#define getc(f) PerlIO_getc(f)
#define getc_unlocked(f) PerlIO_getc(f)
#define putc(c,f) PerlIO_putc(f,c)
#define putc_unlocked(c,f) PerlIO_putc(c,f)
#define ungetc(c,f) PerlIO_ungetc(f,c)
#if 0
/* return values of read/write need work */
#define fread(b,s,c,f) PerlIO_read(f,b,(s*c))
#define fwrite(b,s,c,f) PerlIO_write(f,b,(s*c))
#else
#define fread(b,s,c,f) _CANNOT fread
#define fwrite(b,s,c,f) _CANNOT fwrite
#endif
#define fseek(f,o,w) PerlIO_seek(f,o,w)
#define ftell(f) PerlIO_tell(f)
#define rewind(f) PerlIO_rewind(f)
#define clearerr(f) PerlIO_clearerr(f)
#define feof(f) PerlIO_eof(f)
#define ferror(f) PerlIO_error(f)
#define fdopen(fd,p) PerlIO_fdopen(fd,p)
#define fileno(f) PerlIO_fileno(f)
#define popen(c,m) my_popen(c,m)
#define pclose(f) my_pclose(f)
#define fsetpos(f,p) _CANNOT _fsetpos_
#define fgetpos(f,p) _CANNOT _fgetpos_
#define __filbuf(f) _CANNOT __filbuf_
#define _filbuf(f) _CANNOT _filbuf_
#define __flsbuf(c,f) _CANNOT __flsbuf_
#define _flsbuf(c,f) _CANNOT _flsbuf_
#define getw(f) _CANNOT _getw_
#define putw(v,f) _CANNOT _putw_
#if SFIO_VERSION < 20000101L
#define flockfile(f) _CANNOT _flockfile_
#define ftrylockfile(f) _CANNOT _ftrylockfile_
#define funlockfile(f) _CANNOT _funlockfile_
#endif
#define freopen(p,m,f) _CANNOT _freopen_
#define setbuf(f,b) _CANNOT _setbuf_
#define setvbuf(f,b,x,s) _CANNOT _setvbuf_
#define fscanf _CANNOT _fscanf_
#define fgets(s,n,f) _CANNOT _fgets_
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

View file

@ -0,0 +1,340 @@
/* -*- buffer-read-only: t -*-
!!!!!!! DO NOT EDIT THIS FILE !!!!!!!
This file is built by regen/feature.pl.
Any changes made here will be lost!
*/
#ifndef PERL_FEATURE_H_
#define PERL_FEATURE_H_
#if defined(PERL_CORE) || defined (PERL_EXT)
#define HINT_FEATURE_SHIFT 26
#define FEATURE_BITWISE_BIT 0x0001
#define FEATURE___SUB___BIT 0x0002
#define FEATURE_MYREF_BIT 0x0004
#define FEATURE_EVALBYTES_BIT 0x0008
#define FEATURE_FC_BIT 0x0010
#define FEATURE_INDIRECT_BIT 0x0020
#define FEATURE_ISA_BIT 0x0040
#define FEATURE_POSTDEREF_QQ_BIT 0x0080
#define FEATURE_REFALIASING_BIT 0x0100
#define FEATURE_SAY_BIT 0x0200
#define FEATURE_SIGNATURES_BIT 0x0400
#define FEATURE_STATE_BIT 0x0800
#define FEATURE_SWITCH_BIT 0x1000
#define FEATURE_UNIEVAL_BIT 0x2000
#define FEATURE_UNICODE_BIT 0x4000
#define FEATURE_BUNDLE_DEFAULT 0
#define FEATURE_BUNDLE_510 1
#define FEATURE_BUNDLE_511 2
#define FEATURE_BUNDLE_515 3
#define FEATURE_BUNDLE_523 4
#define FEATURE_BUNDLE_527 5
#define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT)
#define CURRENT_HINTS \
(PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints)
#define CURRENT_FEATURE_BUNDLE \
((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
#define FEATURE_IS_ENABLED_MASK(mask) \
((CURRENT_HINTS & HINT_LOCALIZE_HH) \
? (PL_curcop->cop_features & (mask)) : FALSE)
/* The longest string we pass in. */
#define MAX_FEATURE_LEN (sizeof("postderef_qq")-1)
#define FEATURE_FC_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_FC_BIT)) \
)
#define FEATURE_ISA_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_ISA_BIT) \
)
#define FEATURE_SAY_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_SAY_BIT)) \
)
#define FEATURE_STATE_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_STATE_BIT)) \
)
#define FEATURE_SWITCH_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_SWITCH_BIT)) \
)
#define FEATURE_BITWISE_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_527 \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_BITWISE_BIT)) \
)
#define FEATURE_INDIRECT_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_INDIRECT_BIT)) \
)
#define FEATURE_EVALBYTES_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_EVALBYTES_BIT)) \
)
#define FEATURE_SIGNATURES_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_SIGNATURES_BIT) \
)
#define FEATURE___SUB___IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE___SUB___BIT)) \
)
#define FEATURE_REFALIASING_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_REFALIASING_BIT) \
)
#define FEATURE_POSTDEREF_QQ_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_523 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_POSTDEREF_QQ_BIT)) \
)
#define FEATURE_UNIEVAL_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_UNIEVAL_BIT)) \
)
#define FEATURE_MYREF_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_MYREF_BIT) \
)
#define FEATURE_UNICODE_IS_ENABLED \
( \
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_511 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
FEATURE_IS_ENABLED_MASK(FEATURE_UNICODE_BIT)) \
)
#define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features)
#define CLEARFEATUREBITS() (PL_compiling.cop_features = 0)
#define STOREFEATUREBITSHH(hh) \
(hv_stores((hh), "feature/bits", newSVuv(PL_compiling.cop_features)))
#define FETCHFEATUREBITSHH(hh) \
STMT_START { \
SV **fbsv = hv_fetchs((hh), "feature/bits", FALSE); \
PL_compiling.cop_features = fbsv ? SvUV(*fbsv) : 0; \
} STMT_END
#endif /* PERL_CORE or PERL_EXT */
#ifdef PERL_IN_OP_C
PERL_STATIC_INLINE void
S_enable_feature_bundle(pTHX_ SV *ver)
{
SV *comp_ver = sv_newmortal();
PL_hints = (PL_hints &~ HINT_FEATURE_MASK)
| (
(sv_setnv(comp_ver, 5.027),
vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
? FEATURE_BUNDLE_527 :
(sv_setnv(comp_ver, 5.023),
vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
? FEATURE_BUNDLE_523 :
(sv_setnv(comp_ver, 5.015),
vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
? FEATURE_BUNDLE_515 :
(sv_setnv(comp_ver, 5.011),
vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
? FEATURE_BUNDLE_511 :
(sv_setnv(comp_ver, 5.009005),
vcmp(ver, upg_version(comp_ver, FALSE)) >= 0)
? FEATURE_BUNDLE_510 :
FEATURE_BUNDLE_DEFAULT
) << HINT_FEATURE_SHIFT;
/* special case */
assert(PL_curcop == &PL_compiling);
if (FEATURE_UNICODE_IS_ENABLED) PL_hints |= HINT_UNI_8_BIT;
else PL_hints &= ~HINT_UNI_8_BIT;
}
#endif /* PERL_IN_OP_C */
#ifdef PERL_IN_MG_C
#define magic_sethint_feature(keysv, keypv, keylen, valsv, valbool) \
S_magic_sethint_feature(aTHX_ (keysv), (keypv), (keylen), (valsv), (valbool))
PERL_STATIC_INLINE void
S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
SV *valsv, bool valbool) {
if (keysv)
keypv = SvPV_const(keysv, keylen);
if (memBEGINs(keypv, keylen, "feature_")) {
const char *subf = keypv + (sizeof("feature_")-1);
U32 mask = 0;
switch (*subf) {
case '_':
if (keylen == sizeof("feature___SUB__")-1
&& memcmp(subf+1, "_SUB__", keylen - sizeof("feature_")) == 0) {
mask = FEATURE___SUB___BIT;
break;
}
return;
case 'b':
if (keylen == sizeof("feature_bitwise")-1
&& memcmp(subf+1, "itwise", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_BITWISE_BIT;
break;
}
return;
case 'e':
if (keylen == sizeof("feature_evalbytes")-1
&& memcmp(subf+1, "valbytes", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_EVALBYTES_BIT;
break;
}
return;
case 'f':
if (keylen == sizeof("feature_fc")-1
&& memcmp(subf+1, "c", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_FC_BIT;
break;
}
return;
case 'i':
if (keylen == sizeof("feature_indirect")-1
&& memcmp(subf+1, "ndirect", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_INDIRECT_BIT;
break;
}
else if (keylen == sizeof("feature_isa")-1
&& memcmp(subf+1, "sa", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_ISA_BIT;
break;
}
return;
case 'm':
if (keylen == sizeof("feature_myref")-1
&& memcmp(subf+1, "yref", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_MYREF_BIT;
break;
}
return;
case 'p':
if (keylen == sizeof("feature_postderef_qq")-1
&& memcmp(subf+1, "ostderef_qq", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_POSTDEREF_QQ_BIT;
break;
}
return;
case 'r':
if (keylen == sizeof("feature_refaliasing")-1
&& memcmp(subf+1, "efaliasing", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_REFALIASING_BIT;
break;
}
return;
case 's':
if (keylen == sizeof("feature_say")-1
&& memcmp(subf+1, "ay", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_SAY_BIT;
break;
}
else if (keylen == sizeof("feature_signatures")-1
&& memcmp(subf+1, "ignatures", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_SIGNATURES_BIT;
break;
}
else if (keylen == sizeof("feature_state")-1
&& memcmp(subf+1, "tate", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_STATE_BIT;
break;
}
else if (keylen == sizeof("feature_switch")-1
&& memcmp(subf+1, "witch", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_SWITCH_BIT;
break;
}
return;
case 'u':
if (keylen == sizeof("feature_unicode")-1
&& memcmp(subf+1, "nicode", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_UNICODE_BIT;
break;
}
else if (keylen == sizeof("feature_unieval")-1
&& memcmp(subf+1, "nieval", keylen - sizeof("feature_")) == 0) {
mask = FEATURE_UNIEVAL_BIT;
break;
}
return;
default:
return;
}
if (valsv ? SvTRUE(valsv) : valbool)
PL_compiling.cop_features |= mask;
else
PL_compiling.cop_features &= ~mask;
}
}
#endif /* PERL_IN_MG_C */
#endif /* PERL_FEATURE_H_ */
/* ex: set ro: */

View file

@ -0,0 +1,27 @@
/* form.h
*
* Copyright (C) 1991, 1992, 1993, 2000, 2004, 2011 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
#define FF_END 0 /* tidy up, then return */
#define FF_LINEMARK 1 /* start (or end) of a line */
#define FF_LITERAL 2 /* append <arg> literal chars */
#define FF_SKIP 3 /* skip <arg> chars in format */
#define FF_FETCH 4 /* get next item and set field size to <arg> */
#define FF_CHECKNL 5 /* find max len of item (up to \n) that fits field */
#define FF_CHECKCHOP 6 /* like CHECKNL, but up to highest split point */
#define FF_SPACE 7 /* append padding space (diff of field, item size) */
#define FF_HALFSPACE 8 /* like FF_SPACE, but only append half as many */
#define FF_ITEM 9 /* append a text item, while blanking ctrl chars */
#define FF_CHOP 10 /* (for ^*) chop the current item */
#define FF_LINEGLOB 11 /* process @* */
#define FF_DECIMAL 12 /* do @##, ^##, where <arg>=(precision|flags) */
#define FF_NEWLINE 13 /* delete trailing spaces, then append \n */
#define FF_BLANK 14 /* for arg==0: do '~'; for arg>0 : do '~~' */
#define FF_MORE 15 /* replace long end of string with '...' */
#define FF_0DECIMAL 16 /* like FF_DECIMAL but for 0### */
#define FF_LINESNGL 17 /* process ^* */

View file

@ -0,0 +1,8 @@
/**************************************************************************
* WARNING: 'git_version.h' is automatically generated by make_patchnum.pl
* DO NOT EDIT DIRECTLY - edit make_patchnum.pl instead
***************************************************************************/
#define PERL_GIT_UNPUSHED_COMMITS \
/*leave-this-comment*/

View file

@ -0,0 +1,285 @@
/* gv.h
*
* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
* 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
struct gp {
SV * gp_sv; /* scalar value */
struct io * gp_io; /* filehandle value */
CV * gp_cv; /* subroutine value */
U32 gp_cvgen; /* generational validity of cached gp_cv */
U32 gp_refcnt; /* how many globs point to this? */
HV * gp_hv; /* hash value */
AV * gp_av; /* array value */
CV * gp_form; /* format value */
GV * gp_egv; /* effective gv, if *glob */
PERL_BITFIELD32 gp_line:31; /* line first declared at (for -w) */
PERL_BITFIELD32 gp_flags:1;
HEK * gp_file_hek; /* file first declared in (for -w) */
};
#define GvXPVGV(gv) ((XPVGV*)SvANY(gv))
#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__INTEL_COMPILER)
# define GvGP(gv) \
(0+(*({GV *const _gvgp = (GV *) (gv); \
assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
assert(isGV_with_GP(_gvgp)); \
&((_gvgp)->sv_u.svu_gp);})))
# define GvGP_set(gv,gp) \
{GV *const _gvgp = (GV *) (gv); \
assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \
assert(isGV_with_GP(_gvgp)); \
(_gvgp)->sv_u.svu_gp = (gp); }
# define GvFLAGS(gv) \
(*({GV *const _gvflags = (GV *) (gv); \
assert(SvTYPE(_gvflags) == SVt_PVGV || SvTYPE(_gvflags) == SVt_PVLV); \
assert(isGV_with_GP(_gvflags)); \
&(GvXPVGV(_gvflags)->xpv_cur);}))
# define GvSTASH(gv) \
(*({ GV * const _gvstash = (GV *) (gv); \
assert(isGV_with_GP(_gvstash)); \
assert(SvTYPE(_gvstash) == SVt_PVGV || SvTYPE(_gvstash) >= SVt_PVLV); \
&(GvXPVGV(_gvstash)->xnv_u.xgv_stash); \
}))
# define GvNAME_HEK(gv) \
(*({ GV * const _gvname_hek = (GV *) (gv); \
assert(isGV_with_GP(_gvname_hek)); \
assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \
&(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek); \
}))
# define GvNAME_get(gv) ({ assert(GvNAME_HEK(gv)); (char *)HEK_KEY(GvNAME_HEK(gv)); })
# define GvNAMELEN_get(gv) ({ assert(GvNAME_HEK(gv)); HEK_LEN(GvNAME_HEK(gv)); })
# define GvNAMEUTF8(gv) ({ assert(GvNAME_HEK(gv)); HEK_UTF8(GvNAME_HEK(gv)); })
#else
# define GvGP(gv) (0+(gv)->sv_u.svu_gp)
# define GvGP_set(gv,gp) ((gv)->sv_u.svu_gp = (gp))
# define GvFLAGS(gv) (GvXPVGV(gv)->xpv_cur)
# define GvSTASH(gv) (GvXPVGV(gv)->xnv_u.xgv_stash)
# define GvNAME_HEK(gv) (GvXPVGV(gv)->xiv_u.xivu_namehek)
# define GvNAME_get(gv) HEK_KEY(GvNAME_HEK(gv))
# define GvNAMELEN_get(gv) HEK_LEN(GvNAME_HEK(gv))
# define GvNAMEUTF8(gv) HEK_UTF8(GvNAME_HEK(gv))
#endif
#define GvNAME(gv) GvNAME_get(gv)
#define GvNAMELEN(gv) GvNAMELEN_get(gv)
/*
=head1 GV Functions
=for apidoc Am|SV*|GvSV|GV* gv
Return the SV from the GV.
=for apidoc Am|AV*|GvAV|GV* gv
Return the AV from the GV.
=for apidoc Am|HV*|GvHV|GV* gv
Return the HV from the GV.
=for apidoc Am|CV*|GvCV|GV* gv
Return the CV from the GV.
=cut
*/
#define GvSV(gv) (GvGP(gv)->gp_sv)
#ifdef PERL_DONT_CREATE_GVSV
#define GvSVn(gv) (*(GvGP(gv)->gp_sv ? \
&(GvGP(gv)->gp_sv) : \
&(GvGP(gv_SVadd(gv))->gp_sv)))
#else
#define GvSVn(gv) GvSV(gv)
#endif
#define GvREFCNT(gv) (GvGP(gv)->gp_refcnt)
#define GvIO(gv) \
( \
(gv) \
&& ( \
SvTYPE((const SV*)(gv)) == SVt_PVGV \
|| SvTYPE((const SV*)(gv)) == SVt_PVLV \
) \
&& GvGP(gv) \
? GvIOp(gv) \
: NULL \
)
#define GvIOp(gv) (GvGP(gv)->gp_io)
#define GvIOn(gv) (GvIO(gv) ? GvIOp(gv) : GvIOp(gv_IOadd(gv)))
#define GvFORM(gv) (GvGP(gv)->gp_form)
#define GvAV(gv) (GvGP(gv)->gp_av)
#define GvAVn(gv) (GvGP(gv)->gp_av ? \
GvGP(gv)->gp_av : \
GvGP(gv_AVadd(gv))->gp_av)
#define GvHV(gv) ((GvGP(gv))->gp_hv)
#define GvHVn(gv) (GvGP(gv)->gp_hv ? \
GvGP(gv)->gp_hv : \
GvGP(gv_HVadd(gv))->gp_hv)
#define GvCV(gv) (0+GvGP(gv)->gp_cv)
#define GvCV_set(gv,cv) (GvGP(gv)->gp_cv = (cv))
#define GvCVGEN(gv) (GvGP(gv)->gp_cvgen)
#define GvCVu(gv) (GvGP(gv)->gp_cvgen ? NULL : GvGP(gv)->gp_cv)
#define GvGPFLAGS(gv) (GvGP(gv)->gp_flags)
#define GvLINE(gv) (GvGP(gv)->gp_line)
#define GvFILE_HEK(gv) (GvGP(gv)->gp_file_hek)
#define GvFILEx(gv) HEK_KEY(GvFILE_HEK(gv))
#define GvFILE(gv) (GvFILE_HEK(gv) ? GvFILEx(gv) : NULL)
#define GvFILEGV(gv) (GvFILE_HEK(gv) ? gv_fetchfile(GvFILEx(gv)) : NULL)
#define GvEGV(gv) (GvGP(gv)->gp_egv)
#define GvEGVx(gv) (isGV_with_GP(gv) ? GvEGV(gv) : NULL)
#define GvENAME(gv) GvNAME(GvEGV(gv) ? GvEGV(gv) : gv)
#define GvENAMELEN(gv) GvNAMELEN(GvEGV(gv) ? GvEGV(gv) : gv)
#define GvENAMEUTF8(gv) GvNAMEUTF8(GvEGV(gv) ? GvEGV(gv) : gv)
#define GvENAME_HEK(gv) GvNAME_HEK(GvEGV(gv) ? GvEGV(gv) : gv)
#define GvESTASH(gv) GvSTASH(GvEGV(gv) ? GvEGV(gv) : gv)
/* GVf_INTRO is one-shot flag which indicates that the next assignment
of a reference to the glob is to be localised; it distinguishes
'local *g = $ref' from '*g = $ref'.
*/
#define GVf_INTRO 0x01
#define GVf_MULTI 0x02
#define GVf_ASSUMECV 0x04
/* UNUSED 0x08 */
#define GVf_IMPORTED 0xF0
#define GVf_IMPORTED_SV 0x10
#define GVf_IMPORTED_AV 0x20
#define GVf_IMPORTED_HV 0x40
#define GVf_IMPORTED_CV 0x80
#define GvINTRO(gv) (GvFLAGS(gv) & GVf_INTRO)
#define GvINTRO_on(gv) (GvFLAGS(gv) |= GVf_INTRO)
#define GvINTRO_off(gv) (GvFLAGS(gv) &= ~GVf_INTRO)
#define GvMULTI(gv) (GvFLAGS(gv) & GVf_MULTI)
#define GvMULTI_on(gv) (GvFLAGS(gv) |= GVf_MULTI)
#define GvMULTI_off(gv) (GvFLAGS(gv) &= ~GVf_MULTI)
#define GvASSUMECV(gv) (GvFLAGS(gv) & GVf_ASSUMECV)
#define GvASSUMECV_on(gv) (GvFLAGS(gv) |= GVf_ASSUMECV)
#define GvASSUMECV_off(gv) (GvFLAGS(gv) &= ~GVf_ASSUMECV)
#define GvIMPORTED(gv) (GvFLAGS(gv) & GVf_IMPORTED)
#define GvIMPORTED_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED)
#define GvIMPORTED_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED)
#define GvIMPORTED_SV(gv) (GvFLAGS(gv) & GVf_IMPORTED_SV)
#define GvIMPORTED_SV_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED_SV)
#define GvIMPORTED_SV_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED_SV)
#define GvIMPORTED_AV(gv) (GvFLAGS(gv) & GVf_IMPORTED_AV)
#define GvIMPORTED_AV_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED_AV)
#define GvIMPORTED_AV_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED_AV)
#define GvIMPORTED_HV(gv) (GvFLAGS(gv) & GVf_IMPORTED_HV)
#define GvIMPORTED_HV_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED_HV)
#define GvIMPORTED_HV_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED_HV)
#define GvIMPORTED_CV(gv) (GvFLAGS(gv) & GVf_IMPORTED_CV)
#define GvIMPORTED_CV_on(gv) (GvFLAGS(gv) |= GVf_IMPORTED_CV)
#define GvIMPORTED_CV_off(gv) (GvFLAGS(gv) &= ~GVf_IMPORTED_CV)
#ifndef PERL_CORE
# define GvIN_PAD(gv) 0
# define GvIN_PAD_on(gv) NOOP
# define GvIN_PAD_off(gv) NOOP
# define Nullgv Null(GV*)
#endif
#define DM_RUID 0x001
#define DM_EUID 0x002
#define DM_UID (DM_RUID|DM_EUID)
#define DM_ARRAY_ISA 0x004
#define DM_RGID 0x010
#define DM_EGID 0x020
#define DM_GID (DM_RGID|DM_EGID)
#define DM_DELAY 0x100
/*
* symbol creation flags, for use in gv_fetchpv() and get_*v()
*/
#define GV_ADD 0x01 /* add, if symbol not already there
For gv_name_set, adding a HEK for the first
time, so don't try to free what's there. */
#define GV_ADDMULTI 0x02 /* add, pretending it has been added
already; used also by gv_init_* */
#define GV_ADDWARN 0x04 /* add, but warn if symbol wasn't already there */
/* 0x08 UNUSED */
#define GV_NOINIT 0x10 /* add, but don't init symbol, if type != PVGV */
/* This is used by toke.c to avoid turing placeholder constants in the symbol
table into full PVGVs with attached constant subroutines. */
#define GV_NOADD_NOINIT 0x20 /* Don't add the symbol if it's not there.
Don't init it if it is there but ! PVGV */
#define GV_NOEXPAND 0x40 /* Don't expand SvOK() entries to PVGV */
#define GV_NOTQUAL 0x80 /* A plain symbol name, not qualified with a
package (so skip checks for :: and ') */
#define GV_AUTOLOAD 0x100 /* gv_fetchmethod_flags() should AUTOLOAD */
#define GV_CROAK 0x200 /* gv_fetchmethod_flags() should croak */
#define GV_ADDMG 0x400 /* add if magical */
#define GV_NO_SVGMAGIC 0x800 /* Skip get-magic on an SV argument;
used only by gv_fetchsv(_nomg) */
#define GV_CACHE_ONLY 0x1000 /* return stash only if found in cache;
used only in flags parameter to gv_stash* family */
/* Flags for gv_fetchmeth_pvn and gv_autoload_pvn*/
#define GV_SUPER 0x1000 /* SUPER::method */
/* Flags for gv_autoload_*/
#define GV_AUTOLOAD_ISMETHOD 1 /* autoloading a method? */
/* SVf_UTF8 (more accurately the return value from SvUTF8) is also valid
as a flag to various gv_* functions, so ensure it lies
outside this range.
*/
#define GV_NOADD_MASK \
(SVf_UTF8|GV_NOADD_NOINIT|GV_NOEXPAND|GV_NOTQUAL|GV_ADDMG|GV_NO_SVGMAGIC)
/* The bit flags that don't cause gv_fetchpv() to add a symbol if not
found (with the exception GV_ADDMG, which *might* cause the symbol
to be added) */
#define gv_fullname3(sv,gv,prefix) gv_fullname4(sv,gv,prefix,TRUE)
#define gv_efullname3(sv,gv,prefix) gv_efullname4(sv,gv,prefix,TRUE)
#define gv_fetchmethod(stash, name) gv_fetchmethod_autoload(stash, name, TRUE)
#define gv_fetchsv_nomg(n,f,t) gv_fetchsv(n,(f)|GV_NO_SVGMAGIC,t)
#define gv_init(gv,stash,name,len,multi) \
gv_init_pvn(gv,stash,name,len,GV_ADDMULTI*!!(multi))
#define gv_fetchmeth(stash,name,len,level) gv_fetchmeth_pvn(stash, name, len, level, 0)
#define gv_fetchmeth_autoload(stash,name,len,level) gv_fetchmeth_pvn_autoload(stash, name, len, level, 0)
#define gv_fetchmethod_flags(stash,name,flags) gv_fetchmethod_pv_flags(stash, name, flags)
#define gv_autoload4(stash, name, len, method) \
gv_autoload_pvn(stash, name, len, !!(method))
#define newGVgen(pack) newGVgen_flags(pack, 0)
#define gv_method_changed(gv) \
( \
assert_(isGV_with_GP(gv)) \
GvREFCNT(gv) > 1 \
? (void)++PL_sub_generation \
: mro_method_changed_in(GvSTASH(gv)) \
)
#define gv_AVadd(gv) gv_add_by_type((gv), SVt_PVAV)
#define gv_HVadd(gv) gv_add_by_type((gv), SVt_PVHV)
#define gv_IOadd(gv) gv_add_by_type((gv), SVt_PVIO)
#define gv_SVadd(gv) gv_add_by_type((gv), SVt_NULL)
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,667 @@
/* hv.h
*
* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999,
* 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
/* These control hash traversal randomization and the environment variable PERL_PERTURB_KEYS.
* Currently disabling this functionality will break a few tests, but should otherwise work fine.
* See perlrun for more details. */
#if defined(PERL_PERTURB_KEYS_DISABLED)
# define PL_HASH_RAND_BITS_ENABLED 0
# define PERL_HASH_ITER_BUCKET(iter) ((iter)->xhv_riter)
#else
# define PERL_HASH_RANDOMIZE_KEYS 1
# if defined(PERL_PERTURB_KEYS_RANDOM)
# define PL_HASH_RAND_BITS_ENABLED 1
# elif defined(PERL_PERTURB_KEYS_DETERMINISTIC)
# define PL_HASH_RAND_BITS_ENABLED 2
# else
# define USE_PERL_PERTURB_KEYS 1
# define PL_HASH_RAND_BITS_ENABLED PL_hash_rand_bits_enabled
# endif
# define PERL_HASH_ITER_BUCKET(iter) (((iter)->xhv_riter) ^ ((iter)->xhv_rand))
#endif
/* entry in hash value chain */
struct he {
/* Keep hent_next first in this structure, because sv_free_arenas take
advantage of this to share code between the he arenas and the SV
body arenas */
HE *hent_next; /* next entry in chain */
HEK *hent_hek; /* hash key */
union {
SV *hent_val; /* scalar value that was hashed */
Size_t hent_refcount; /* references for this shared hash key */
} he_valu;
};
/* hash key -- defined separately for use as shared pointer */
struct hek {
U32 hek_hash; /* computed hash of key */
I32 hek_len; /* length of the hash key */
/* Be careful! Sometimes we store a pointer in the hek_key
* buffer, which means it must be 8 byte aligned or things
* dont work on aligned platforms like HPUX
* Also beware, the last byte of the hek_key buffer is a
* hidden flags byte about the key. */
char hek_key[1]; /* variable-length hash key */
/* the hash-key is \0-terminated */
/* after the \0 there is a byte for flags, such as whether the key
is UTF-8 or WAS-UTF-8, or an SV */
};
struct shared_he {
struct he shared_he_he;
struct hek shared_he_hek;
};
/* Subject to change.
Don't access this directly.
Use the funcs in mro_core.c
*/
struct mro_alg {
AV *(*resolve)(pTHX_ HV* stash, U32 level);
const char *name;
U16 length;
U16 kflags; /* For the hash API - set HVhek_UTF8 if name is UTF-8 */
U32 hash; /* or 0 */
};
struct mro_meta {
/* a hash holding the different MROs private data. */
HV *mro_linear_all;
/* a pointer directly to the current MROs private data. If mro_linear_all
is NULL, this owns the SV reference, else it is just a pointer to a
value stored in and owned by mro_linear_all. */
SV *mro_linear_current;
HV *mro_nextmethod; /* next::method caching */
U32 cache_gen; /* Bumping this invalidates our method cache */
U32 pkg_gen; /* Bumps when local methods/@ISA change */
const struct mro_alg *mro_which; /* which mro alg is in use? */
HV *isa; /* Everything this class @ISA */
HV *super; /* SUPER method cache */
CV *destroy; /* DESTROY method if destroy_gen non-zero */
U32 destroy_gen; /* Generation number of DESTROY cache */
};
#define MRO_GET_PRIVATE_DATA(smeta, which) \
(((smeta)->mro_which && (which) == (smeta)->mro_which) \
? (smeta)->mro_linear_current \
: Perl_mro_get_private_data(aTHX_ (smeta), (which)))
/* Subject to change.
Don't access this directly.
*/
union _xhvnameu {
HEK *xhvnameu_name; /* When xhv_name_count is 0 */
HEK **xhvnameu_names; /* When xhv_name_count is non-0 */
};
struct xpvhv_aux {
union _xhvnameu xhv_name_u; /* name, if a symbol table */
AV *xhv_backreferences; /* back references for weak references */
HE *xhv_eiter; /* current entry of iterator */
I32 xhv_riter; /* current root of iterator */
/* Concerning xhv_name_count: When non-zero, xhv_name_u contains a pointer
* to an array of HEK pointers, this being the length. The first element is
* the name of the stash, which may be NULL. If xhv_name_count is positive,
* then *xhv_name is one of the effective names. If xhv_name_count is nega-
* tive, then xhv_name_u.xhvnameu_names[1] is the first effective name.
*/
I32 xhv_name_count;
struct mro_meta *xhv_mro_meta;
#ifdef PERL_HASH_RANDOMIZE_KEYS
U32 xhv_rand; /* random value for hash traversal */
U32 xhv_last_rand; /* last random value for hash traversal,
used to detect each() after insert for warnings */
#endif
U32 xhv_aux_flags; /* assorted extra flags */
};
#define HvAUXf_SCAN_STASH 0x1 /* stash is being scanned by gv_check */
#define HvAUXf_NO_DEREF 0x2 /* @{}, %{} etc (and nomethod) not present */
/* hash structure: */
/* This structure must match the beginning of struct xpvmg in sv.h. */
struct xpvhv {
HV* xmg_stash; /* class package */
union _xmgu xmg_u;
STRLEN xhv_keys; /* total keys, including placeholders */
STRLEN xhv_max; /* subscript of last element of xhv_array */
};
/*
=head1 Hash Manipulation Functions
=for apidoc AmnU||HEf_SVKEY
This flag, used in the length slot of hash entries and magic structures,
specifies the structure contains an C<SV*> pointer where a C<char*> pointer
is to be expected. (For information only--not to be used).
=head1 Handy Values
=for apidoc ADmnU||Nullhv
Null HV pointer.
(deprecated - use C<(HV *)NULL> instead)
=head1 Hash Manipulation Functions
=for apidoc Am|char*|HvNAME|HV* stash
Returns the package name of a stash, or C<NULL> if C<stash> isn't a stash.
See C<L</SvSTASH>>, C<L</CvSTASH>>.
=for apidoc Am|STRLEN|HvNAMELEN|HV *stash
Returns the length of the stash's name.
=for apidoc Am|unsigned char|HvNAMEUTF8|HV *stash
Returns true if the name is in UTF-8 encoding.
=for apidoc Am|char*|HvENAME|HV* stash
Returns the effective name of a stash, or NULL if there is none. The
effective name represents a location in the symbol table where this stash
resides. It is updated automatically when packages are aliased or deleted.
A stash that is no longer in the symbol table has no effective name. This
name is preferable to C<HvNAME> for use in MRO linearisations and isa
caches.
=for apidoc Am|STRLEN|HvENAMELEN|HV *stash
Returns the length of the stash's effective name.
=for apidoc Am|unsigned char|HvENAMEUTF8|HV *stash
Returns true if the effective name is in UTF-8 encoding.
=for apidoc Am|void*|HeKEY|HE* he
Returns the actual pointer stored in the key slot of the hash entry. The
pointer may be either C<char*> or C<SV*>, depending on the value of
C<HeKLEN()>. Can be assigned to. The C<HePV()> or C<HeSVKEY()> macros are
usually preferable for finding the value of a key.
=for apidoc Am|STRLEN|HeKLEN|HE* he
If this is negative, and amounts to C<HEf_SVKEY>, it indicates the entry
holds an C<SV*> key. Otherwise, holds the actual length of the key. Can
be assigned to. The C<HePV()> macro is usually preferable for finding key
lengths.
=for apidoc Am|SV*|HeVAL|HE* he
Returns the value slot (type C<SV*>)
stored in the hash entry. Can be assigned
to.
SV *foo= HeVAL(hv);
HeVAL(hv)= sv;
=for apidoc Am|U32|HeHASH|HE* he
Returns the computed hash stored in the hash entry.
=for apidoc Am|char*|HePV|HE* he|STRLEN len
Returns the key slot of the hash entry as a C<char*> value, doing any
necessary dereferencing of possibly C<SV*> keys. The length of the string
is placed in C<len> (this is a macro, so do I<not> use C<&len>). If you do
not care about what the length of the key is, you may use the global
variable C<PL_na>, though this is rather less efficient than using a local
variable. Remember though, that hash keys in perl are free to contain
embedded nulls, so using C<strlen()> or similar is not a good way to find
the length of hash keys. This is very similar to the C<SvPV()> macro
described elsewhere in this document. See also C<L</HeUTF8>>.
If you are using C<HePV> to get values to pass to C<newSVpvn()> to create a
new SV, you should consider using C<newSVhek(HeKEY_hek(he))> as it is more
efficient.
=for apidoc Am|U32|HeUTF8|HE* he
Returns whether the C<char *> value returned by C<HePV> is encoded in UTF-8,
doing any necessary dereferencing of possibly C<SV*> keys. The value returned
will be 0 or non-0, not necessarily 1 (or even a value with any low bits set),
so B<do not> blindly assign this to a C<bool> variable, as C<bool> may be a
typedef for C<char>.
=for apidoc Am|SV*|HeSVKEY|HE* he
Returns the key as an C<SV*>, or C<NULL> if the hash entry does not
contain an C<SV*> key.
=for apidoc Am|SV*|HeSVKEY_force|HE* he
Returns the key as an C<SV*>. Will create and return a temporary mortal
C<SV*> if the hash entry contains only a C<char*> key.
=for apidoc Am|SV*|HeSVKEY_set|HE* he|SV* sv
Sets the key to a given C<SV*>, taking care to set the appropriate flags to
indicate the presence of an C<SV*> key, and returns the same
C<SV*>.
=cut
*/
#define PERL_HASH_DEFAULT_HvMAX 7
/* During hsplit(), if HvMAX(hv)+1 (the new bucket count) is >= this value,
* we preallocate the HvAUX() struct.
* The assumption being that we are using so much space anyway we might
* as well allocate the extra bytes and speed up later keys()
* or each() operations. We don't do this to small hashes as we assume
* that a) it will be easy/fast to resize them to add the iterator, and b) that
* many of them will be objects which won't be traversed. Larger hashes however
* will take longer to extend, and the size of the aux struct is swamped by the
* overall length of the bucket array.
* */
#define PERL_HV_ALLOC_AUX_SIZE (1 << 9)
/* these hash entry flags ride on hent_klen (for use only in magic/tied HVs) */
#define HEf_SVKEY -2 /* hent_key is an SV* */
#ifndef PERL_CORE
# define Nullhv Null(HV*)
#endif
#define HvARRAY(hv) ((hv)->sv_u.svu_hash)
/*
=for apidoc Am|STRLEN|HvFILL|HV *const hv
See L</hv_fill>.
=cut
*/
#define HvFILL(hv) Perl_hv_fill(aTHX_ MUTABLE_HV(hv))
#define HvMAX(hv) ((XPVHV*) SvANY(hv))->xhv_max
/* This quite intentionally does no flag checking first. That's your
responsibility. */
#define HvAUX(hv) ((struct xpvhv_aux*)&(HvARRAY(hv)[HvMAX(hv)+1]))
#define HvRITER(hv) (*Perl_hv_riter_p(aTHX_ MUTABLE_HV(hv)))
#define HvEITER(hv) (*Perl_hv_eiter_p(aTHX_ MUTABLE_HV(hv)))
#define HvRITER_set(hv,r) Perl_hv_riter_set(aTHX_ MUTABLE_HV(hv), r)
#define HvEITER_set(hv,e) Perl_hv_eiter_set(aTHX_ MUTABLE_HV(hv), e)
#define HvRITER_get(hv) (SvOOK(hv) ? HvAUX(hv)->xhv_riter : -1)
#define HvEITER_get(hv) (SvOOK(hv) ? HvAUX(hv)->xhv_eiter : NULL)
#define HvRAND_get(hv) (SvOOK(hv) ? HvAUX(hv)->xhv_rand : 0)
#define HvLASTRAND_get(hv) (SvOOK(hv) ? HvAUX(hv)->xhv_last_rand : 0)
#define HvNAME(hv) HvNAME_get(hv)
#define HvNAMELEN(hv) HvNAMELEN_get(hv)
#define HvENAME(hv) HvENAME_get(hv)
#define HvENAMELEN(hv) HvENAMELEN_get(hv)
/* Checking that hv is a valid package stash is the
caller's responsibility */
#define HvMROMETA(hv) (HvAUX(hv)->xhv_mro_meta \
? HvAUX(hv)->xhv_mro_meta \
: Perl_mro_meta_init(aTHX_ hv))
#define HvNAME_HEK_NN(hv) \
( \
HvAUX(hv)->xhv_name_count \
? *HvAUX(hv)->xhv_name_u.xhvnameu_names \
: HvAUX(hv)->xhv_name_u.xhvnameu_name \
)
/* This macro may go away without notice. */
#define HvNAME_HEK(hv) \
(SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvNAME_HEK_NN(hv) : NULL)
#define HvNAME_get(hv) \
((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
? HEK_KEY(HvNAME_HEK_NN(hv)) : NULL)
#define HvNAMELEN_get(hv) \
((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
? HEK_LEN(HvNAME_HEK_NN(hv)) : 0)
#define HvNAMEUTF8(hv) \
((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \
? HEK_UTF8(HvNAME_HEK_NN(hv)) : 0)
#define HvENAME_HEK_NN(hv) \
( \
HvAUX(hv)->xhv_name_count > 0 ? HvAUX(hv)->xhv_name_u.xhvnameu_names[0] : \
HvAUX(hv)->xhv_name_count < -1 ? HvAUX(hv)->xhv_name_u.xhvnameu_names[1] : \
HvAUX(hv)->xhv_name_count == -1 ? NULL : \
HvAUX(hv)->xhv_name_u.xhvnameu_name \
)
#define HvENAME_HEK(hv) \
(SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvENAME_HEK_NN(hv) : NULL)
#define HvENAME_get(hv) \
((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \
? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL)
#define HvENAMELEN_get(hv) \
((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \
? HEK_LEN(HvENAME_HEK_NN(hv)) : 0)
#define HvENAMEUTF8(hv) \
((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \
? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0)
/* the number of keys (including any placeholders) - NOT PART OF THE API */
#define XHvTOTALKEYS(xhv) ((xhv)->xhv_keys)
/*
* HvKEYS gets the number of keys that actually exist(), and is provided
* for backwards compatibility with old XS code. The core uses HvUSEDKEYS
* (keys, excluding placeholders) and HvTOTALKEYS (including placeholders)
*/
#define HvKEYS(hv) HvUSEDKEYS(hv)
#define HvUSEDKEYS(hv) (HvTOTALKEYS(hv) - HvPLACEHOLDERS_get(hv))
#define HvTOTALKEYS(hv) XHvTOTALKEYS((XPVHV*) SvANY(hv))
#define HvPLACEHOLDERS(hv) (*Perl_hv_placeholders_p(aTHX_ MUTABLE_HV(hv)))
#define HvPLACEHOLDERS_get(hv) (SvMAGIC(hv) ? Perl_hv_placeholders_get(aTHX_ (const HV *)hv) : 0)
#define HvPLACEHOLDERS_set(hv,p) Perl_hv_placeholders_set(aTHX_ MUTABLE_HV(hv), p)
#define HvSHAREKEYS(hv) (SvFLAGS(hv) & SVphv_SHAREKEYS)
#define HvSHAREKEYS_on(hv) (SvFLAGS(hv) |= SVphv_SHAREKEYS)
#define HvSHAREKEYS_off(hv) (SvFLAGS(hv) &= ~SVphv_SHAREKEYS)
/* This is an optimisation flag. It won't be set if all hash keys have a 0
* flag. Currently the only flags relate to utf8.
* Hence it won't be set if all keys are 8 bit only. It will be set if any key
* is utf8 (including 8 bit keys that were entered as utf8, and need upgrading
* when retrieved during iteration. It may still be set when there are no longer
* any utf8 keys.
* See HVhek_ENABLEHVKFLAGS for the trigger.
*/
#define HvHASKFLAGS(hv) (SvFLAGS(hv) & SVphv_HASKFLAGS)
#define HvHASKFLAGS_on(hv) (SvFLAGS(hv) |= SVphv_HASKFLAGS)
#define HvHASKFLAGS_off(hv) (SvFLAGS(hv) &= ~SVphv_HASKFLAGS)
#define HvLAZYDEL(hv) (SvFLAGS(hv) & SVphv_LAZYDEL)
#define HvLAZYDEL_on(hv) (SvFLAGS(hv) |= SVphv_LAZYDEL)
#define HvLAZYDEL_off(hv) (SvFLAGS(hv) &= ~SVphv_LAZYDEL)
#ifndef PERL_CORE
# define Nullhe Null(HE*)
#endif
#define HeNEXT(he) (he)->hent_next
#define HeKEY_hek(he) (he)->hent_hek
#define HeKEY(he) HEK_KEY(HeKEY_hek(he))
#define HeKEY_sv(he) (*(SV**)HeKEY(he))
#define HeKLEN(he) HEK_LEN(HeKEY_hek(he))
#define HeKUTF8(he) HEK_UTF8(HeKEY_hek(he))
#define HeKWASUTF8(he) HEK_WASUTF8(HeKEY_hek(he))
#define HeKLEN_UTF8(he) (HeKUTF8(he) ? -HeKLEN(he) : HeKLEN(he))
#define HeKFLAGS(he) HEK_FLAGS(HeKEY_hek(he))
#define HeVAL(he) (he)->he_valu.hent_val
#define HeHASH(he) HEK_HASH(HeKEY_hek(he))
#define HePV(he,lp) ((HeKLEN(he) == HEf_SVKEY) ? \
SvPV(HeKEY_sv(he),lp) : \
((lp = HeKLEN(he)), HeKEY(he)))
#define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \
SvUTF8(HeKEY_sv(he)) : \
(U32)HeKUTF8(he))
#define HeSVKEY(he) ((HeKEY(he) && \
HeKLEN(he) == HEf_SVKEY) ? \
HeKEY_sv(he) : NULL)
#define HeSVKEY_force(he) (HeKEY(he) ? \
((HeKLEN(he) == HEf_SVKEY) ? \
HeKEY_sv(he) : \
newSVpvn_flags(HeKEY(he), \
HeKLEN(he), \
SVs_TEMP | \
( HeKUTF8(he) ? SVf_UTF8 : 0 ))) : \
&PL_sv_undef)
#define HeSVKEY_set(he,sv) ((HeKLEN(he) = HEf_SVKEY), (HeKEY_sv(he) = sv))
#ifndef PERL_CORE
# define Nullhek Null(HEK*)
#endif
#define HEK_BASESIZE STRUCT_OFFSET(HEK, hek_key[0])
#define HEK_HASH(hek) (hek)->hek_hash
#define HEK_LEN(hek) (hek)->hek_len
#define HEK_KEY(hek) (hek)->hek_key
#define HEK_FLAGS(hek) (*((unsigned char *)(HEK_KEY(hek))+HEK_LEN(hek)+1))
#define HVhek_UTF8 0x01 /* Key is utf8 encoded. */
#define HVhek_WASUTF8 0x02 /* Key is bytes here, but was supplied as utf8. */
#define HVhek_UNSHARED 0x08 /* This key isn't a shared hash key. */
/* the following flags are options for functions, they are not stored in heks */
#define HVhek_FREEKEY 0x100 /* Internal flag to say key is Newx()ed. */
#define HVhek_PLACEHOLD 0x200 /* Internal flag to create placeholder.
* (may change, but Storable is a core module) */
#define HVhek_KEYCANONICAL 0x400 /* Internal flag - key is in canonical form.
If the string is UTF-8, it cannot be
converted to bytes. */
#define HVhek_MASK 0xFF
#define HVhek_ENABLEHVKFLAGS (HVhek_MASK & ~(HVhek_UNSHARED))
#define HEK_UTF8(hek) (HEK_FLAGS(hek) & HVhek_UTF8)
#define HEK_UTF8_on(hek) (HEK_FLAGS(hek) |= HVhek_UTF8)
#define HEK_UTF8_off(hek) (HEK_FLAGS(hek) &= ~HVhek_UTF8)
#define HEK_WASUTF8(hek) (HEK_FLAGS(hek) & HVhek_WASUTF8)
#define HEK_WASUTF8_on(hek) (HEK_FLAGS(hek) |= HVhek_WASUTF8)
#define HEK_WASUTF8_off(hek) (HEK_FLAGS(hek) &= ~HVhek_WASUTF8)
/* calculate HV array allocation */
#ifndef PERL_USE_LARGE_HV_ALLOC
/* Default to allocating the correct size - default to assuming that malloc()
is not broken and is efficient at allocating blocks sized at powers-of-two.
*/
# define PERL_HV_ARRAY_ALLOC_BYTES(size) ((size) * sizeof(HE*))
#else
# define MALLOC_OVERHEAD 16
# define PERL_HV_ARRAY_ALLOC_BYTES(size) \
(((size) < 64) \
? (size) * sizeof(HE*) \
: (size) * sizeof(HE*) * 2 - MALLOC_OVERHEAD)
#endif
/* Flags for hv_iternext_flags. */
#define HV_ITERNEXT_WANTPLACEHOLDERS 0x01 /* Don't skip placeholders. */
#define hv_iternext(hv) hv_iternext_flags(hv, 0)
#define hv_magic(hv, gv, how) sv_magic(MUTABLE_SV(hv), MUTABLE_SV(gv), how, NULL, 0)
#define hv_undef(hv) Perl_hv_undef_flags(aTHX_ hv, 0)
#define Perl_sharepvn(pv, len, hash) HEK_KEY(share_hek(pv, len, hash))
#define sharepvn(pv, len, hash) Perl_sharepvn(pv, len, hash)
#define share_hek_hek(hek) \
(++(((struct shared_he *)(((char *)hek) \
- STRUCT_OFFSET(struct shared_he, \
shared_he_hek))) \
->shared_he_he.he_valu.hent_refcount), \
hek)
#define hv_store_ent(hv, keysv, val, hash) \
((HE *) hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISSTORE, \
(val), (hash)))
#define hv_exists_ent(hv, keysv, hash) \
cBOOL(hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISEXISTS, 0, (hash)))
#define hv_fetch_ent(hv, keysv, lval, hash) \
((HE *) hv_common((hv), (keysv), NULL, 0, 0, \
((lval) ? HV_FETCH_LVALUE : 0), NULL, (hash)))
#define hv_delete_ent(hv, key, flags, hash) \
(MUTABLE_SV(hv_common((hv), (key), NULL, 0, 0, (flags) | HV_DELETE, \
NULL, (hash))))
#define hv_store_flags(hv, key, klen, val, hash, flags) \
((SV**) hv_common((hv), NULL, (key), (klen), (flags), \
(HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), (val), \
(hash)))
#define hv_store(hv, key, klen, val, hash) \
((SV**) hv_common_key_len((hv), (key), (klen), \
(HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), \
(val), (hash)))
#define hv_exists(hv, key, klen) \
cBOOL(hv_common_key_len((hv), (key), (klen), HV_FETCH_ISEXISTS, NULL, 0))
#define hv_fetch(hv, key, klen, lval) \
((SV**) hv_common_key_len((hv), (key), (klen), (lval) \
? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \
: HV_FETCH_JUST_SV, NULL, 0))
#define hv_delete(hv, key, klen, flags) \
(MUTABLE_SV(hv_common_key_len((hv), (key), (klen), \
(flags) | HV_DELETE, NULL, 0)))
/* Provide 's' suffix subs for constant strings (and avoid needing to count
* chars). See STR_WITH_LEN in handy.h - because these are macros we cant use
* STR_WITH_LEN to do the work, we have to unroll it. */
#define hv_existss(hv, key) \
hv_exists((hv), ("" key ""), (sizeof(key)-1))
#define hv_fetchs(hv, key, lval) \
hv_fetch((hv), ("" key ""), (sizeof(key)-1), (lval))
#define hv_deletes(hv, key, flags) \
hv_delete((hv), ("" key ""), (sizeof(key)-1), (flags))
#define hv_name_sets(hv, name, flags) \
hv_name_set((hv),("" name ""),(sizeof(name)-1), flags)
#define hv_stores(hv, key, val) \
hv_store((hv), ("" key ""), (sizeof(key)-1), (val), 0)
#ifdef PERL_CORE
# define hv_storehek(hv, hek, val) \
hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \
HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, (val), HEK_HASH(hek))
# define hv_fetchhek(hv, hek, lval) \
((SV **) \
hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \
(lval) \
? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \
: HV_FETCH_JUST_SV, \
NULL, HEK_HASH(hek)))
# define hv_deletehek(hv, hek, flags) \
hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \
(flags)|HV_DELETE, NULL, HEK_HASH(hek))
#endif
/* This refcounted he structure is used for storing the hints used for lexical
pragmas. Without threads, it's basically struct he + refcount.
With threads, life gets more complex as the structure needs to be shared
between threads (because it hangs from OPs, which are shared), hence the
alternate definition and mutex. */
struct refcounted_he;
/* flags for the refcounted_he API */
#define REFCOUNTED_HE_KEY_UTF8 0x00000001
#ifdef PERL_CORE
# define REFCOUNTED_HE_EXISTS 0x00000002
#endif
#ifdef PERL_CORE
/* Gosh. This really isn't a good name any longer. */
struct refcounted_he {
struct refcounted_he *refcounted_he_next; /* next entry in chain */
#ifdef USE_ITHREADS
U32 refcounted_he_hash;
U32 refcounted_he_keylen;
#else
HEK *refcounted_he_hek; /* hint key */
#endif
union {
IV refcounted_he_u_iv;
UV refcounted_he_u_uv;
STRLEN refcounted_he_u_len;
void *refcounted_he_u_ptr; /* Might be useful in future */
} refcounted_he_val;
U32 refcounted_he_refcnt; /* reference count */
/* First byte is flags. Then NUL-terminated value. Then for ithreads,
non-NUL terminated key. */
char refcounted_he_data[1];
};
/*
=for apidoc m|SV *|refcounted_he_fetch_pvs|const struct refcounted_he *chain|"key"|U32 flags
Like L</refcounted_he_fetch_pvn>, but takes a literal string
instead of a string/length pair, and no precomputed hash.
=cut
*/
#define refcounted_he_fetch_pvs(chain, key, flags) \
Perl_refcounted_he_fetch_pvn(aTHX_ chain, STR_WITH_LEN(key), 0, flags)
/*
=for apidoc m|struct refcounted_he *|refcounted_he_new_pvs|struct refcounted_he *parent|"key"|SV *value|U32 flags
Like L</refcounted_he_new_pvn>, but takes a literal string
instead of a string/length pair, and no precomputed hash.
=cut
*/
#define refcounted_he_new_pvs(parent, key, value, flags) \
Perl_refcounted_he_new_pvn(aTHX_ parent, STR_WITH_LEN(key), 0, value, flags)
/* Flag bits are HVhek_UTF8, HVhek_WASUTF8, then */
#define HVrhek_undef 0x00 /* Value is undef. */
#define HVrhek_delete 0x10 /* Value is placeholder - signifies delete. */
#define HVrhek_IV 0x20 /* Value is IV. */
#define HVrhek_UV 0x30 /* Value is UV. */
#define HVrhek_PV 0x40 /* Value is a (byte) string. */
#define HVrhek_PV_UTF8 0x50 /* Value is a (utf8) string. */
/* Two spare. As these have to live in the optree, you can't store anything
interpreter specific, such as SVs. :-( */
#define HVrhek_typemask 0x70
#ifdef USE_ITHREADS
/* A big expression to find the key offset */
#define REF_HE_KEY(chain) \
((((chain->refcounted_he_data[0] & 0x60) == 0x40) \
? chain->refcounted_he_val.refcounted_he_u_len + 1 : 0) \
+ 1 + chain->refcounted_he_data)
#endif
# ifdef USE_ITHREADS
# define HINTS_REFCNT_LOCK MUTEX_LOCK(&PL_hints_mutex)
# define HINTS_REFCNT_UNLOCK MUTEX_UNLOCK(&PL_hints_mutex)
# else
# define HINTS_REFCNT_LOCK NOOP
# define HINTS_REFCNT_UNLOCK NOOP
# endif
#endif
#ifdef USE_ITHREADS
# define HINTS_REFCNT_INIT MUTEX_INIT(&PL_hints_mutex)
# define HINTS_REFCNT_TERM MUTEX_DESTROY(&PL_hints_mutex)
#else
# define HINTS_REFCNT_INIT NOOP
# define HINTS_REFCNT_TERM NOOP
#endif
/* Hash actions
* Passed in PERL_MAGIC_uvar calls
*/
#define HV_DISABLE_UVAR_XKEY 0x01
/* We need to ensure that these don't clash with G_DISCARD, which is 2, as it
is documented as being passed to hv_delete(). */
#define HV_FETCH_ISSTORE 0x04
#define HV_FETCH_ISEXISTS 0x08
#define HV_FETCH_LVALUE 0x10
#define HV_FETCH_JUST_SV 0x20
#define HV_DELETE 0x40
#define HV_FETCH_EMPTY_HE 0x80 /* Leave HeVAL null. */
/* Must not conflict with HVhek_UTF8 */
#define HV_NAME_SETALL 0x02
/*
=for apidoc newHV
Creates a new HV. The reference count is set to 1.
=cut
*/
#define newHV() MUTABLE_HV(newSV_type(SVt_PVHV))
#include "hv_func.h"
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

View file

@ -0,0 +1,291 @@
/* hash a key
*--------------------------------------------------------------------------------------
* The "hash seed" feature was added in Perl 5.8.1 to perturb the results
* to avoid "algorithmic complexity attacks".
*
* If USE_HASH_SEED is defined, hash randomisation is done by default
* (see also perl.c:perl_parse() and S_init_tls_and_interp() and util.c:get_hash_seed())
*/
#ifndef PERL_SEEN_HV_FUNC_H /* compile once */
#define PERL_SEEN_HV_FUNC_H
#include "hv_macro.h"
#if !( 0 \
|| defined(PERL_HASH_FUNC_SIPHASH) \
|| defined(PERL_HASH_FUNC_SIPHASH13) \
|| defined(PERL_HASH_FUNC_STADTX) \
|| defined(PERL_HASH_FUNC_ZAPHOD32) \
)
# ifdef CAN64BITHASH
# define PERL_HASH_FUNC_STADTX
# else
# define PERL_HASH_FUNC_ZAPHOD32
# endif
#endif
#ifndef PERL_HASH_USE_SBOX32_ALSO
#define PERL_HASH_USE_SBOX32_ALSO 1
#endif
#ifndef SBOX32_MAX_LEN
#define SBOX32_MAX_LEN 24
#endif
/* this must be after the SBOX32_MAX_LEN define */
#include "sbox32_hash.h"
#if defined(PERL_HASH_FUNC_SIPHASH)
# define __PERL_HASH_FUNC "SIPHASH_2_4"
# define __PERL_HASH_SEED_BYTES 16
# define __PERL_HASH_STATE_BYTES 32
# define __PERL_HASH_SEED_STATE(seed,state) S_perl_siphash_seed_state(seed,state)
# define __PERL_HASH_WITH_STATE(state,str,len) S_perl_hash_siphash_2_4_with_state((state),(U8*)(str),(len))
#elif defined(PERL_HASH_FUNC_SIPHASH13)
# define __PERL_HASH_FUNC "SIPHASH_1_3"
# define __PERL_HASH_SEED_BYTES 16
# define __PERL_HASH_STATE_BYTES 32
# define __PERL_HASH_SEED_STATE(seed,state) S_perl_siphash_seed_state(seed,state)
# define __PERL_HASH_WITH_STATE(state,str,len) S_perl_hash_siphash_1_3_with_state((state),(U8*)(str),(len))
#elif defined(PERL_HASH_FUNC_STADTX)
# define __PERL_HASH_FUNC "STADTX"
# define __PERL_HASH_SEED_BYTES 16
# define __PERL_HASH_STATE_BYTES 32
# define __PERL_HASH_SEED_STATE(seed,state) stadtx_seed_state(seed,state)
# define __PERL_HASH_WITH_STATE(state,str,len) (U32)stadtx_hash_with_state((state),(U8*)(str),(len))
# include "stadtx_hash.h"
#elif defined(PERL_HASH_FUNC_ZAPHOD32)
# define __PERL_HASH_FUNC "ZAPHOD32"
# define __PERL_HASH_SEED_BYTES 12
# define __PERL_HASH_STATE_BYTES 12
# define __PERL_HASH_SEED_STATE(seed,state) zaphod32_seed_state(seed,state)
# define __PERL_HASH_WITH_STATE(state,str,len) (U32)zaphod32_hash_with_state((state),(U8*)(str),(len))
# include "zaphod32_hash.h"
#endif
#ifndef __PERL_HASH_WITH_STATE
#error "No hash function defined!"
#endif
#ifndef __PERL_HASH_SEED_BYTES
#error "__PERL_HASH_SEED_BYTES not defined"
#endif
#ifndef __PERL_HASH_FUNC
#error "__PERL_HASH_FUNC not defined"
#endif
#if PERL_HASH_USE_SBOX32_ALSO != 1
# define _PERL_HASH_FUNC __PERL_HASH_FUNC
# define _PERL_HASH_SEED_BYTES __PERL_HASH_SEED_BYTES
# define _PERL_HASH_STATE_BYTES __PERL_HASH_STATE_BYTES
# define _PERL_HASH_SEED_STATE(seed,state) __PERL_HASH_SEED_STATE(seed,state)
# define _PERL_HASH_WITH_STATE(state,str,len) __PERL_HASH_WITH_STATE(state,str,len)
#else
#define _PERL_HASH_FUNC "SBOX32_WITH_" __PERL_HASH_FUNC
#define _PERL_HASH_SEED_BYTES ( __PERL_HASH_SEED_BYTES + (int)( 3 * sizeof(U32) ) )
#define _PERL_HASH_STATE_BYTES \
( __PERL_HASH_STATE_BYTES + ( ( 1 + ( 256 * SBOX32_MAX_LEN ) ) * sizeof(U32) ) )
#define _PERL_HASH_SEED_STATE(seed,state) STMT_START { \
__PERL_HASH_SEED_STATE(seed,state); \
sbox32_seed_state96(seed + __PERL_HASH_SEED_BYTES, state + __PERL_HASH_STATE_BYTES); \
} STMT_END
#define _PERL_HASH_WITH_STATE(state,str,len) \
(LIKELY(len <= SBOX32_MAX_LEN) \
? sbox32_hash_with_state((state + __PERL_HASH_STATE_BYTES),(U8*)(str),(len)) \
: __PERL_HASH_WITH_STATE((state),(str),(len)))
#endif
PERL_STATIC_INLINE
U32 S_perl_hash_with_seed(const U8 * const seed, const U8 * const str, const STRLEN len)
{
U8 state[_PERL_HASH_STATE_BYTES];
_PERL_HASH_SEED_STATE(seed,state);
return _PERL_HASH_WITH_STATE(state,str,len);
}
#define PERL_HASH_WITH_SEED(seed,hash,str,len) \
(hash) = S_perl_hash_with_seed((const U8 *) seed, (const U8 *) str,len)
#define PERL_HASH_WITH_STATE(state,hash,str,len) \
(hash) = _PERL_HASH_WITH_STATE((state),(U8*)(str),(len))
#define PERL_HASH_SEED_STATE(seed,state) _PERL_HASH_SEED_STATE(seed,state)
#define PERL_HASH_SEED_BYTES _PERL_HASH_SEED_BYTES
#define PERL_HASH_STATE_BYTES _PERL_HASH_STATE_BYTES
#define PERL_HASH_FUNC _PERL_HASH_FUNC
#ifdef PERL_USE_SINGLE_CHAR_HASH_CACHE
#define PERL_HASH(state,str,len) \
(hash) = ((len) < 2 ? ( (len) == 0 ? PL_hash_chars[256] : PL_hash_chars[(U8)(str)[0]] ) \
: _PERL_HASH_WITH_STATE(PL_hash_state,(U8*)(str),(len)))
#else
#define PERL_HASH(hash,str,len) \
PERL_HASH_WITH_STATE(PL_hash_state,hash,(U8*)(str),(len))
#endif
/* Setup the hash seed, either we do things dynamically at start up,
* including reading from the environment, or we randomly setup the
* seed. The seed will be passed into the PERL_HASH_SEED_STATE() function
* defined for the configuration defined for this perl, which will then
* initialize whatever state it might need later in hashing. */
#ifndef PERL_HASH_SEED
# if defined(USE_HASH_SEED)
# define PERL_HASH_SEED PL_hash_seed
# else
/* this is a 512 bit seed, which should be more than enough for the
* configuration of any of our hash functions (with or without sbox).
* If you actually use a hard coded seed, you are strongly encouraged
* to replace this with something else of the correct length
* for the hash function you are using (24-32 bytes depending on build
* options). Repeat, you are *STRONGLY* encouraged not to use the value
* provided here.
*/
# define PERL_HASH_SEED \
((const U8 *)"A long string of pseudorandomly " \
"chosen bytes for hashing in Perl")
# endif
#endif
/* legacy - only mod_perl should be doing this. */
#ifdef PERL_HASH_INTERNAL_ACCESS
#define PERL_HASH_INTERNAL(hash,str,len) PERL_HASH(hash,str,len)
#endif
/* This is SipHash by Jean-Philippe Aumasson and Daniel J. Bernstein.
* The authors claim it is relatively secure compared to the alternatives
* and that performance wise it is a suitable hash for languages like Perl.
* See:
*
* https://www.131002.net/siphash/
*
* This implementation seems to perform slightly slower than one-at-a-time for
* short keys, but degrades slower for longer keys. Murmur Hash outperforms it
* regardless of keys size.
*
* It is 64 bit only.
*/
#ifdef CAN64BITHASH
#define SIPROUND \
STMT_START { \
v0 += v1; v1=ROTL64(v1,13); v1 ^= v0; v0=ROTL64(v0,32); \
v2 += v3; v3=ROTL64(v3,16); v3 ^= v2; \
v0 += v3; v3=ROTL64(v3,21); v3 ^= v0; \
v2 += v1; v1=ROTL64(v1,17); v1 ^= v2; v2=ROTL64(v2,32); \
} STMT_END
#define SIPHASH_SEED_STATE(key,v0,v1,v2,v3) \
do { \
v0 = v2 = U8TO64_LE(key + 0); \
v1 = v3 = U8TO64_LE(key + 8); \
/* "somepseudorandomlygeneratedbytes" */ \
v0 ^= UINT64_C(0x736f6d6570736575); \
v1 ^= UINT64_C(0x646f72616e646f6d); \
v2 ^= UINT64_C(0x6c7967656e657261); \
v3 ^= UINT64_C(0x7465646279746573); \
} while (0)
PERL_STATIC_INLINE
void S_perl_siphash_seed_state(const unsigned char * const seed_buf, unsigned char * state_buf) {
U64 *v= (U64*) state_buf;
SIPHASH_SEED_STATE(seed_buf, v[0],v[1],v[2],v[3]);
}
#define PERL_SIPHASH_FNC(FNC,SIP_ROUNDS,SIP_FINAL_ROUNDS) \
PERL_STATIC_INLINE U64 \
FNC ## _with_state_64 \
(const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
{ \
const int left = inlen & 7; \
const U8 *end = in + inlen - left; \
\
U64 b = ( ( U64 )(inlen) ) << 56; \
U64 m; \
U64 v0 = U8TO64_LE(state); \
U64 v1 = U8TO64_LE(state+8); \
U64 v2 = U8TO64_LE(state+16); \
U64 v3 = U8TO64_LE(state+24); \
\
for ( ; in != end; in += 8 ) \
{ \
m = U8TO64_LE( in ); \
v3 ^= m; \
\
SIP_ROUNDS; \
\
v0 ^= m; \
} \
\
switch( left ) \
{ \
case 7: b |= ( ( U64 )in[ 6] ) << 48; /*FALLTHROUGH*/ \
case 6: b |= ( ( U64 )in[ 5] ) << 40; /*FALLTHROUGH*/ \
case 5: b |= ( ( U64 )in[ 4] ) << 32; /*FALLTHROUGH*/ \
case 4: b |= ( ( U64 )in[ 3] ) << 24; /*FALLTHROUGH*/ \
case 3: b |= ( ( U64 )in[ 2] ) << 16; /*FALLTHROUGH*/ \
case 2: b |= ( ( U64 )in[ 1] ) << 8; /*FALLTHROUGH*/ \
case 1: b |= ( ( U64 )in[ 0] ); break; \
case 0: break; \
} \
\
v3 ^= b; \
\
SIP_ROUNDS; \
\
v0 ^= b; \
\
v2 ^= 0xff; \
\
SIP_FINAL_ROUNDS \
\
b = v0 ^ v1 ^ v2 ^ v3; \
return b; \
} \
\
PERL_STATIC_INLINE U32 \
FNC ## _with_state \
(const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \
{ \
union { \
U64 h64; \
U32 h32[2]; \
} h; \
h.h64= FNC ## _with_state_64(state,in,inlen); \
return h.h32[0] ^ h.h32[1]; \
} \
\
\
PERL_STATIC_INLINE U32 \
FNC (const unsigned char * const seed, const unsigned char *in, const STRLEN inlen) \
{ \
U64 state[4]; \
SIPHASH_SEED_STATE(seed,state[0],state[1],state[2],state[3]); \
return FNC ## _with_state((U8*)state,in,inlen); \
}
PERL_SIPHASH_FNC(
S_perl_hash_siphash_1_3
,SIPROUND;
,SIPROUND;SIPROUND;SIPROUND;
)
PERL_SIPHASH_FNC(
S_perl_hash_siphash_2_4
,SIPROUND;SIPROUND;
,SIPROUND;SIPROUND;SIPROUND;SIPROUND;
)
#endif /* defined(CAN64BITHASH) */
#endif /*compile once*/
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

View file

@ -0,0 +1,85 @@
#ifndef PERL_SEEN_HV_MACRO_H /* compile once */
#define PERL_SEEN_HV_MACRO_H
#if IVSIZE == 8
#define CAN64BITHASH
#endif
#ifdef CAN64BITHASH
#ifndef U64TYPE
/* This probably isn't going to work, but failing with a compiler error due to
lack of uint64_t is no worse than failing right now with an #error. */
#define U64 uint64_t
#endif
#endif
/*-----------------------------------------------------------------------------
* Endianess and util macros
*
* The following 3 macros are defined in this section. The other macros defined
* are only needed to help derive these 3.
*
* U8TO16_LE(x) Read a little endian unsigned 32-bit int
* U8TO32_LE(x) Read a little endian unsigned 32-bit int
* U8TO28_LE(x) Read a little endian unsigned 32-bit int
* ROTL32(x,r) Rotate x left by r bits
* ROTL64(x,r) Rotate x left by r bits
* ROTR32(x,r) Rotate x right by r bits
* ROTR64(x,r) Rotate x right by r bits
*/
#ifndef U8TO16_LE
#define _shifted_octet(type,ptr,idx,shift) (((type)(((U8*)(ptr))[(idx)]))<<(shift))
#ifdef USE_UNALIGNED_PTR_DEREF
#define U8TO16_LE(ptr) (*((const U16*)(ptr)))
#define U8TO32_LE(ptr) (*((const U32*)(ptr)))
#define U8TO64_LE(ptr) (*((const U64*)(ptr)))
#else
#define U8TO16_LE(ptr) (_shifted_octet(U16,(ptr),0, 0)|\
_shifted_octet(U16,(ptr),1, 8))
#define U8TO32_LE(ptr) (_shifted_octet(U32,(ptr),0, 0)|\
_shifted_octet(U32,(ptr),1, 8)|\
_shifted_octet(U32,(ptr),2,16)|\
_shifted_octet(U32,(ptr),3,24))
#define U8TO64_LE(ptr) (_shifted_octet(U64,(ptr),0, 0)|\
_shifted_octet(U64,(ptr),1, 8)|\
_shifted_octet(U64,(ptr),2,16)|\
_shifted_octet(U64,(ptr),3,24)|\
_shifted_octet(U64,(ptr),4,32)|\
_shifted_octet(U64,(ptr),5,40)|\
_shifted_octet(U64,(ptr),6,48)|\
_shifted_octet(U64,(ptr),7,56))
#endif
#endif
/* Find best way to ROTL32/ROTL64 */
#if defined(_MSC_VER)
#include <stdlib.h> /* Microsoft put _rotl declaration in here */
#define ROTL32(x,r) _rotl(x,r)
#define ROTR32(x,r) _rotr(x,r)
#define ROTL64(x,r) _rotl64(x,r)
#define ROTR64(x,r) _rotr64(x,r)
#else
/* gcc recognises this code and generates a rotate instruction for CPUs with one */
#define ROTL32(x,r) (((U32)(x) << (r)) | ((U32)(x) >> (32 - (r))))
#define ROTR32(x,r) (((U32)(x) << (32 - (r))) | ((U32)(x) >> (r)))
#define ROTL64(x,r) ( ( (U64)(x) << (r) ) | ( (U64)(x) >> ( 64 - (r) ) ) )
#define ROTR64(x,r) ( ( (U64)(x) << ( 64 - (r) ) ) | ( (U64)(x) >> (r) ) )
#endif
#ifdef UV_IS_QUAD
#define ROTL_UV(x,r) ROTL64(x,r)
#define ROTR_UV(x,r) ROTL64(x,r)
#else
#define ROTL_UV(x,r) ROTL32(x,r)
#define ROTR_UV(x,r) ROTR32(x,r)
#endif
#if IVSIZE == 8
#define CAN64BITHASH
#endif
#endif

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,962 @@
/* intrpvar.h
*
* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
* 2006, 2007, 2008 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
#include "handy.h"
/*
=head1 Per-Interpreter Variables
*/
/* These variables are per-interpreter in threaded/multiplicity builds,
* global otherwise.
* Don't forget to re-run regen/embed.pl to propagate changes! */
/* New variables must be added to the very end for binary compatibility. */
/* DON'T FORGET to add your variable also to perl_clone()! (in sv.c) */
/* The 'I' prefix is only needed for vars that need appropriate #defines
* generated when built with or without MULTIPLICITY. It is also used
* to generate the appropriate export list for win32. If the variable
* needs to be initialized, use PERLVARI.
*
* When building without MULTIPLICITY, these variables will be truly global.
*
* Important ones in the first cache line (if alignment is done right) */
PERLVAR(I, stack_sp, SV **) /* top of the stack */
PERLVAR(I, op, OP *) /* currently executing op */
PERLVAR(I, curpad, SV **) /* active pad (lexicals+tmps) */
PERLVAR(I, stack_base, SV **)
PERLVAR(I, stack_max, SV **)
PERLVAR(I, savestack, ANY *) /* items that need to be restored when
LEAVEing scopes we've ENTERed */
PERLVAR(I, savestack_ix, I32)
PERLVAR(I, savestack_max, I32)
PERLVAR(I, scopestack, I32 *) /* scopes we've ENTERed */
PERLVAR(I, scopestack_ix, I32)
PERLVAR(I, scopestack_max, I32)
PERLVAR(I, tmps_stack, SV **) /* mortals we've made */
PERLVARI(I, tmps_ix, SSize_t, -1)
PERLVARI(I, tmps_floor, SSize_t, -1)
PERLVAR(I, tmps_max, SSize_t) /* first unalloced slot in tmps stack */
PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */
PERLVAR(I, markstack, I32 *) /* stack_sp locations we're
remembering */
PERLVAR(I, markstack_ptr, I32 *)
PERLVAR(I, markstack_max, I32 *)
#ifdef PERL_HASH_RANDOMIZE_KEYS
#ifdef USE_PERL_PERTURB_KEYS
PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */
#endif
PERLVARI(I, hash_rand_bits, UV, 0) /* used to randomize hash stuff */
#endif
PERLVAR(I, strtab, HV *) /* shared string table */
/* prog counter for the currently executing OP_MULTIDEREF Used to signal
* to S_find_uninit_var() where we are */
PERLVAR(I, multideref_pc, UNOP_AUX_item *)
/* Fields used by magic variables such as $@, $/ and so on */
PERLVAR(I, curpm, PMOP *) /* what to do \ interps in REs from */
PERLVAR(I, curpm_under, PMOP *) /* what to do \ interps in REs from */
PERLVAR(I, tainting, bool) /* ? doing taint checks */
PERLVARI(I, tainted, bool, FALSE) /* using variables controlled by $< */
/* PL_delaymagic is currently used for two purposes: to assure simultaneous
* updates in ($<,$>) = ..., and to assure atomic update in push/unshift
* @ISA, It works like this: a few places such as pp_push set the DM_DELAY
* flag; then various places such as av_store() skip mg_set(ary) if this
* flag is set, and various magic vtable methods set flags like
* DM_ARRAY_ISA if they've seen something of that ilk. Finally when
* control returns to pp_push or whatever, it sees if any of those flags
* have been set, and if so finally calls mg_set().
*
* NB: PL_delaymagic is automatically saved and restored by JUMPENV_PUSH
* / POP. This removes the need to do ENTER/SAVEI16(PL_delaymagic)/LEAVE
* in hot code like pp_push.
*/
PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */
/*
=for apidoc Amn|GV *|PL_defgv
The GV representing C<*_>. Useful for access to C<$_>.
=cut
*/
PERLVAR(I, localizing, U8) /* are we processing a local() list? */
PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */
PERLVAR(I, defgv, GV *) /* the *_ glob */
/*
=for apidoc mn|U8|PL_dowarn
The C variable that roughly corresponds to Perl's C<$^W> warning variable.
However, C<$^W> is treated as a boolean, whereas C<PL_dowarn> is a
collection of flag bits.
=cut
*/
PERLVAR(I, dowarn, U8)
#if defined (PERL_UTF8_CACHE_ASSERT) || defined (DEBUGGING)
# define PERL___I -1
#else
# define PERL___I 1
#endif
PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */
#undef PERL___I
/*
=for apidoc Amn|HV*|PL_curstash
The stash for the package code will be compiled into.
=cut
*/
/* Stashes */
PERLVAR(I, defstash, HV *) /* main symbol table */
PERLVAR(I, curstash, HV *) /* symbol table for current package */
/*
=for apidoc Amn|COP*|PL_curcop
The currently active COP (control op) roughly representing the current
statement in the source.
=cut
*/
PERLVAR(I, curcop, COP *)
PERLVAR(I, curstack, AV *) /* THE STACK */
PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */
PERLVAR(I, mainstack, AV *) /* the stack when nothing funny is
happening */
/* memory management */
PERLVAR(I, sv_count, IV) /* how many SV* are currently allocated */
PERLVAR(I, sv_root, SV *) /* storage for SVs belonging to interp */
PERLVAR(I, sv_arenaroot, SV *) /* list of areas for garbage collection */
/* fake PMOP that PL_curpm points to while in (?{}) so $1 et al are visible */
PERLVARI(I, reg_curpm, PMOP*, NULL)
/* the currently active slab in a chain of slabs of regmatch states,
* and the currently active state within that slab. This stack of states
* is shared amongst re-entrant calls to the regex engine */
PERLVARI(I, regmatch_slab, regmatch_slab *, NULL)
PERLVAR(I, regmatch_state, regmatch_state *)
PERLVAR(I, comppad, PAD *) /* storage for lexically scoped temporaries */
/*
=for apidoc Amn|SV|PL_sv_undef
This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
=for apidoc Amn|SV|PL_sv_no
This is the C<false> SV. See C<L</PL_sv_yes>>. Always refer to this as
C<&PL_sv_no>.
=for apidoc Amn|SV|PL_sv_yes
This is the C<true> SV. See C<L</PL_sv_no>>. Always refer to this as
C<&PL_sv_yes>.
=for apidoc Amn|SV|PL_sv_zero
This readonly SV has a zero numeric value and a C<"0"> string value. It's
similar to C<L</PL_sv_no>> except for its string value. Can be used as a
cheap alternative to C<mXPUSHi(0)> for example. Always refer to this as
C<&PL_sv_zero>. Introduced in 5.28.
=cut
*/
#ifdef MULTIPLICITY
PERLVAR(I, sv_yes, SV)
PERLVAR(I, sv_undef, SV)
PERLVAR(I, sv_no, SV)
PERLVAR(I, sv_zero, SV)
#else
/* store the immortals as an array to ensure they are contiguous in
* memory: makes SvIMMORTAL_INTERP(sv) possible */
PERLVARA(I, sv_immortals, 4, SV)
#endif
PERLVAR(I, padname_undef, PADNAME)
PERLVAR(I, padname_const, PADNAME)
PERLVAR(I, Sv, SV *) /* used to hold temporary values */
PERLVAR(I, parser, yy_parser *) /* current parser state */
PERLVAR(I, stashcache, HV *) /* Cache to speed up S_method_common */
/*
=for apidoc Amn|STRLEN|PL_na
A convenience variable which is typically used with C<SvPV> when one
doesn't care about the length of the string. It is usually more efficient
to either declare a local variable and use that instead or to use the
C<SvPV_nolen> macro.
=cut
*/
PERLVAR(I, na, STRLEN) /* for use in SvPV when length is
Not Applicable */
/* stat stuff */
PERLVAR(I, statcache, Stat_t) /* _ */
PERLVAR(I, statgv, GV *)
PERLVARI(I, statname, SV *, NULL)
/*
=for apidoc mn|SV*|PL_rs
The input record separator - C<$/> in Perl space.
=for apidoc mn|GV*|PL_last_in_gv
The GV which was last used for a filehandle input operation. (C<< <FH> >>)
=for apidoc mn|GV*|PL_ofsgv
The glob containing the output field separator - C<*,> in Perl space.
=cut
*/
PERLVAR(I, rs, SV *) /* input record separator $/ */
PERLVAR(I, last_in_gv, GV *) /* GV used in last <FH> */
PERLVAR(I, ofsgv, GV *) /* GV of output field separator *, */
PERLVAR(I, defoutgv, GV *) /* default FH for output */
PERLVARI(I, chopset, const char *, " \n-") /* $: */
PERLVAR(I, formtarget, SV *)
PERLVAR(I, bodytarget, SV *)
PERLVAR(I, toptarget, SV *)
PERLVAR(I, restartop, OP *) /* propagating an error from croak? */
PERLVAR(I, restartjmpenv, JMPENV *) /* target frame for longjmp in die */
PERLVAR(I, top_env, JMPENV *) /* ptr to current sigjmp environment */
PERLVAR(I, start_env, JMPENV) /* empty startup sigjmp environment */
PERLVARI(I, errors, SV *, NULL) /* outstanding queued errors */
/* statics "owned" by various functions */
PERLVAR(I, hv_fetch_ent_mh, HE*) /* owned by hv_fetch_ent() */
PERLVAR(I, lastgotoprobe, OP*) /* from pp_ctl.c */
/* sort stuff */
PERLVAR(I, sortcop, OP *) /* user defined sort routine */
PERLVAR(I, sortstash, HV *) /* which is in some package or other */
PERLVAR(I, firstgv, GV *) /* $a */
PERLVAR(I, secondgv, GV *) /* $b */
/* float buffer */
PERLVAR(I, efloatbuf, char *)
PERLVAR(I, efloatsize, STRLEN)
PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump
indentation level */
/*
=for apidoc Amn|U8|PL_exit_flags
Contains flags controlling perl's behaviour on exit():
=over
=item * C<PERL_EXIT_DESTRUCT_END>
If set, END blocks are executed when the interpreter is destroyed.
This is normally set by perl itself after the interpreter is
constructed.
=item * C<PERL_EXIT_ABORT>
Call C<abort()> on exit. This is used internally by perl itself to
abort if exit is called while processing exit.
=item * C<PERL_EXIT_WARN>
Warn on exit.
=item * C<PERL_EXIT_EXPECTED>
Set by the L<perlfunc/exit> operator.
=back
=for apidoc Amnh||PERL_EXIT_EXPECTED
=for apidoc Amnh||PERL_EXIT_ABORT
=for apidoc Amnh||PERL_EXIT_DESTRUCT_END
=for apidoc Amnh||PERL_EXIT_WARN
=cut
*/
PERLVAR(I, exit_flags, U8) /* was exit() unexpected, etc. */
PERLVAR(I, utf8locale, bool) /* utf8 locale detected */
PERLVAR(I, in_utf8_CTYPE_locale, bool)
PERLVAR(I, in_utf8_COLLATE_locale, bool)
PERLVAR(I, in_utf8_turkic_locale, bool)
#if defined(USE_ITHREADS) && ! defined(USE_THREAD_SAFE_LOCALE)
PERLVARI(I, lc_numeric_mutex_depth, int, 0) /* Emulate general semaphore */
#endif
PERLVARA(I, locale_utf8ness, 256, char)
#ifdef USE_LOCALE_CTYPE
PERLVAR(I, warn_locale, SV *)
#endif
PERLVARA(I, colors,6, char *) /* values from PERL_RE_COLORS env var */
/*
=for apidoc Amn|peep_t|PL_peepp
Pointer to the per-subroutine peephole optimiser. This is a function
that gets called at the end of compilation of a Perl subroutine (or
equivalently independent piece of Perl code) to perform fixups of
some ops and to perform small-scale optimisations. The function is
called once for each subroutine that is compiled, and is passed, as sole
parameter, a pointer to the op that is the entry point to the subroutine.
It modifies the op tree in place.
The peephole optimiser should never be completely replaced. Rather,
add code to it by wrapping the existing optimiser. The basic way to do
this can be seen in L<perlguts/Compile pass 3: peephole optimization>.
If the new code wishes to operate on ops throughout the subroutine's
structure, rather than just at the top level, it is likely to be more
convenient to wrap the L</PL_rpeepp> hook.
=cut
*/
PERLVARI(I, peepp, peep_t, Perl_peep)
/*
=for apidoc Amn|peep_t|PL_rpeepp
Pointer to the recursive peephole optimiser. This is a function
that gets called at the end of compilation of a Perl subroutine (or
equivalently independent piece of Perl code) to perform fixups of some
ops and to perform small-scale optimisations. The function is called
once for each chain of ops linked through their C<op_next> fields;
it is recursively called to handle each side chain. It is passed, as
sole parameter, a pointer to the op that is at the head of the chain.
It modifies the op tree in place.
The peephole optimiser should never be completely replaced. Rather,
add code to it by wrapping the existing optimiser. The basic way to do
this can be seen in L<perlguts/Compile pass 3: peephole optimization>.
If the new code wishes to operate only on ops at a subroutine's top level,
rather than throughout the structure, it is likely to be more convenient
to wrap the L</PL_peepp> hook.
=cut
*/
PERLVARI(I, rpeepp, peep_t, Perl_rpeep)
/*
=for apidoc Amn|Perl_ophook_t|PL_opfreehook
When non-C<NULL>, the function pointed by this variable will be called each time an OP is freed with the corresponding OP as the argument.
This allows extensions to free any extra attribute they have locally attached to an OP.
It is also assured to first fire for the parent OP and then for its kids.
When you replace this variable, it is considered a good practice to store the possibly previously installed hook and that you recall it inside your own.
=cut
*/
PERLVARI(I, opfreehook, Perl_ophook_t, 0) /* op_free() hook */
PERLVARI(I, watchaddr, char **, 0)
PERLVAR(I, watchok, char *)
PERLVAR(I, perldb, U32)
PERLVAR(I, signals, U32) /* Using which pre-5.8 signals */
PERLVAR(I, reentrant_retint, int) /* Integer return value from reentrant functions */
/* pseudo environmental stuff */
PERLVAR(I, origargc, int)
PERLVAR(I, origargv, char **)
PERLVAR(I, envgv, GV *)
PERLVAR(I, incgv, GV *)
PERLVAR(I, hintgv, GV *)
PERLVAR(I, origfilename, char *)
PERLVARI(I, xsubfilename, const char *, NULL)
PERLVAR(I, diehook, SV *)
PERLVAR(I, warnhook, SV *)
/* switches */
PERLVAR(I, patchlevel, SV *)
PERLVAR(I, localpatches, const char * const *)
PERLVARI(I, splitstr, const char *, " ")
PERLVAR(I, minus_c, bool)
PERLVAR(I, minus_n, bool)
PERLVAR(I, minus_p, bool)
PERLVAR(I, minus_l, bool)
PERLVAR(I, minus_a, bool)
PERLVAR(I, minus_F, bool)
PERLVAR(I, doswitches, bool)
PERLVAR(I, minus_E, bool)
PERLVAR(I, inplace, char *)
PERLVAR(I, e_script, SV *)
PERLVAR(I, basetime, Time_t) /* $^T */
PERLVARI(I, maxsysfd, I32, MAXSYSFD)
/* top fd to pass to subprocesses */
PERLVAR(I, statusvalue, I32) /* $? */
#ifdef VMS
PERLVAR(I, statusvalue_vms, U32)
#else
PERLVAR(I, statusvalue_posix, I32)
#endif
PERLVARI(I, sig_pending, int, 0) /* Number if highest signal pending */
PERLVAR(I, psig_pend, int *) /* per-signal "count" of pending */
/* shortcuts to various I/O objects */
PERLVAR(I, stdingv, GV *) /* *STDIN */
PERLVAR(I, stderrgv, GV *) /* *STDERR */
PERLVAR(I, argvgv, GV *) /* *ARGV */
PERLVAR(I, argvoutgv, GV *) /* *ARGVOUT */
PERLVAR(I, argvout_stack, AV *)
/* shortcuts to regexp stuff */
PERLVAR(I, replgv, GV *) /* *^R */
/* shortcuts to misc objects */
PERLVAR(I, errgv, GV *) /* *@ */
/* shortcuts to debugging objects */
PERLVAR(I, DBgv, GV *) /* *DB::DB */
PERLVAR(I, DBline, GV *) /* *DB::line */
/*
=for apidoc mn|GV *|PL_DBsub
When Perl is run in debugging mode, with the B<-d> switch, this GV contains
the SV which holds the name of the sub being debugged. This is the C
variable which corresponds to Perl's $DB::sub variable. See
C<L</PL_DBsingle>>.
=for apidoc mn|SV *|PL_DBsingle
When Perl is run in debugging mode, with the B<-d> switch, this SV is a
boolean which indicates whether subs are being single-stepped.
Single-stepping is automatically turned on after every step. This is the C
variable which corresponds to Perl's $DB::single variable. See
C<L</PL_DBsub>>.
=for apidoc mn|SV *|PL_DBtrace
Trace variable used when Perl is run in debugging mode, with the B<-d>
switch. This is the C variable which corresponds to Perl's $DB::trace
variable. See C<L</PL_DBsingle>>.
=cut
*/
PERLVAR(I, DBsub, GV *) /* *DB::sub */
PERLVAR(I, DBsingle, SV *) /* $DB::single */
PERLVAR(I, DBtrace, SV *) /* $DB::trace */
PERLVAR(I, DBsignal, SV *) /* $DB::signal */
PERLVAR(I, dbargs, AV *) /* args to call listed by caller function */
PERLVARA(I, DBcontrol, DBVARMG_COUNT, IV) /* IV versions of $DB::single, trace, signal */
/* symbol tables */
PERLVAR(I, debstash, HV *) /* symbol table for perldb package */
PERLVAR(I, globalstash, HV *) /* global keyword overrides imported here */
PERLVAR(I, curstname, SV *) /* name of current package */
PERLVAR(I, beginav, AV *) /* names of BEGIN subroutines */
PERLVAR(I, endav, AV *) /* names of END subroutines */
PERLVAR(I, unitcheckav, AV *) /* names of UNITCHECK subroutines */
PERLVAR(I, checkav, AV *) /* names of CHECK subroutines */
PERLVAR(I, initav, AV *) /* names of INIT subroutines */
/* subprocess state */
PERLVAR(I, fdpid, AV *) /* keep fd-to-pid mappings for my_popen */
/* internal state */
PERLVARI(I, op_mask, char *, NULL) /* masked operations for safe evals */
/* current interpreter roots */
PERLVAR(I, main_cv, CV *)
PERLVAR(I, main_root, OP *)
PERLVAR(I, main_start, OP *)
PERLVAR(I, eval_root, OP *)
PERLVAR(I, eval_start, OP *)
/* runtime control stuff */
PERLVARI(I, curcopdb, COP *, NULL)
PERLVAR(I, filemode, int) /* so nextargv() can preserve mode */
PERLVAR(I, lastfd, int) /* what to preserve mode on */
PERLVAR(I, oldname, char *) /* what to preserve mode on */
/* Elements in this array have ';' appended and are injected as a single line
into the tokeniser. You can't put any (literal) newlines into any program
you stuff in into this array, as the point where it's injected is expecting
a single physical line. */
PERLVAR(I, preambleav, AV *)
PERLVAR(I, mess_sv, SV *)
PERLVAR(I, ors_sv, SV *) /* output record separator $\ */
/* funky return mechanisms */
PERLVAR(I, forkprocess, int) /* so do_open |- can return proc# */
/* statics moved here for shared library purposes */
PERLVARI(I, gensym, I32, 0) /* next symbol for getsym() to define */
PERLVARI(I, cv_has_eval, bool, FALSE) /* PL_compcv includes an entereval or similar */
PERLVAR(I, taint_warn, bool) /* taint warns instead of dying */
PERLVARI(I, laststype, U16, OP_STAT)
PERLVARI(I, laststatval, int, -1)
PERLVAR(I, modcount, I32) /* how much op_lvalue()ification in
assignment? */
/* interpreter atexit processing */
PERLVARI(I, exitlistlen, I32, 0) /* length of same */
PERLVARI(I, exitlist, PerlExitListEntry *, NULL)
/* list of exit functions */
/*
=for apidoc Amn|HV*|PL_modglobal
C<PL_modglobal> is a general purpose, interpreter global HV for use by
extensions that need to keep information on a per-interpreter basis.
In a pinch, it can also be used as a symbol table for extensions
to share data among each other. It is a good idea to use keys
prefixed by the package name of the extension that owns the data.
=cut
*/
PERLVAR(I, modglobal, HV *) /* per-interp module data */
/* these used to be in global before 5.004_68 */
PERLVARI(I, profiledata, U32 *, NULL) /* table of ops, counts */
PERLVAR(I, compiling, COP) /* compiling/done executing marker */
PERLVAR(I, compcv, CV *) /* currently compiling subroutine */
PERLVAR(I, comppad_name, PADNAMELIST *) /* variable names for "my" variables */
PERLVAR(I, comppad_name_fill, PADOFFSET)/* last "introduced" variable offset */
PERLVAR(I, comppad_name_floor, PADOFFSET)/* start of vars in innermost block */
#ifdef HAVE_INTERP_INTERN
PERLVAR(I, sys_intern, struct interp_intern)
/* platform internals */
#endif
/* more statics moved here */
PERLVAR(I, DBcv, CV *) /* from perl.c */
PERLVARI(I, generation, int, 100) /* scan sequence# for OP_AASSIGN
compile-time common elem detection */
PERLVAR(I, unicode, U32) /* Unicode features: $ENV{PERL_UNICODE} or -C */
PERLVARI(I, in_clean_objs,bool, FALSE) /* from sv.c */
PERLVARI(I, in_clean_all, bool, FALSE) /* ptrs to freed SVs now legal */
PERLVAR(I, nomemok, bool) /* let malloc context handle nomem */
PERLVARI(I, savebegin, bool, FALSE) /* save BEGINs for compiler */
PERLVAR(I, delaymagic_uid, Uid_t) /* current real user id, only for delaymagic */
PERLVAR(I, delaymagic_euid, Uid_t) /* current effective user id, only for delaymagic */
PERLVAR(I, delaymagic_gid, Gid_t) /* current real group id, only for delaymagic */
PERLVAR(I, delaymagic_egid, Gid_t) /* current effective group id, only for delaymagic */
PERLVARI(I, an, U32, 0) /* malloc sequence number */
/* Perl_Ibreakable_sub_generation_ptr was too long for VMS, hence "gen" */
PERLVARI(I, breakable_sub_gen, U32, 0)
#ifdef DEBUGGING
/* exercise wrap-around */
#define PERL_COP_SEQMAX (U32_MAX-50)
#else
#define PERL_COP_SEQMAX 0
#endif
PERLVARI(I, cop_seqmax, U32, PERL_COP_SEQMAX) /* statement sequence number */
#undef PERL_COP_SEQMAX
PERLVARI(I, evalseq, U32, 0) /* eval sequence number */
PERLVAR(I, origalen, U32)
PERLVAR(I, origenviron, char **)
#ifdef PERL_USES_PL_PIDSTATUS
PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */
#endif
PERLVAR(I, osname, char *) /* operating system */
PERLVAR(I, sighandlerp, Sighandler_t)
/* these two are provided only to solve library linkage issues; they
* should not be hooked by user code */
PERLVAR(I, sighandler1p, Sighandler1_t)
PERLVAR(I, sighandler3p, Sighandler3_t)
PERLVARA(I, body_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */
PERLVAR(I, debug, volatile U32) /* flags given to -D switch */
PERLVARI(I, padlist_generation, U32, 1) /* id to identify padlist clones */
/*
=for apidoc Amn|runops_proc_t|PL_runops
See L<perlguts/Pluggable runops>.
=cut
*/
PERLVARI(I, runops, runops_proc_t, RUNOPS_DEFAULT)
PERLVAR(I, subname, SV *) /* name of current subroutine */
PERLVAR(I, subline, I32) /* line this subroutine began on */
PERLVAR(I, min_intro_pending, PADOFFSET)/* start of vars to introduce */
PERLVAR(I, max_intro_pending, PADOFFSET)/* end of vars to introduce */
PERLVAR(I, padix, PADOFFSET) /* lowest unused index - 1
in current "register" pad */
PERLVAR(I, constpadix, PADOFFSET) /* lowest unused for constants */
PERLVAR(I, padix_floor, PADOFFSET) /* how low may inner block reset padix */
#if defined(USE_POSIX_2008_LOCALE) \
&& defined(USE_THREAD_SAFE_LOCALE) \
&& ! defined(HAS_QUERYLOCALE)
PERLVARA(I, curlocales, 12, char *)
#endif
#ifdef USE_LOCALE_COLLATE
PERLVAR(I, collation_name, char *) /* Name of current collation */
PERLVAR(I, collxfrm_base, Size_t) /* Basic overhead in *xfrm() */
PERLVARI(I, collxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */
PERLVARI(I, collation_ix, U32, 0) /* Collation generation index */
PERLVARI(I, strxfrm_NUL_replacement, U8, 0) /* Code point to replace NULs */
PERLVARI(I, strxfrm_is_behaved, bool, TRUE)
/* Assume until proven otherwise that it works */
PERLVARI(I, strxfrm_max_cp, U8, 0) /* Highest collating cp in locale */
PERLVARI(I, collation_standard, bool, TRUE)
/* Assume simple collation */
#endif /* USE_LOCALE_COLLATE */
PERLVARI(I, langinfo_buf, char *, NULL)
PERLVARI(I, langinfo_bufsize, Size_t, 0)
PERLVARI(I, setlocale_buf, char *, NULL)
PERLVARI(I, setlocale_bufsize, Size_t, 0)
#ifdef PERL_SAWAMPERSAND
PERLVAR(I, sawampersand, U8) /* must save all match strings */
#endif
PERLVAR(I, unsafe, bool)
PERLVAR(I, colorset, bool) /* PERL_RE_COLORS env var is in use */
/* current phase the interpreter is in
for ordering this structure to remove holes, we're assuming that this is 4
bytes. */
PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT)
PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */
/*
=for apidoc Amn|signed char|PL_perl_destruct_level
This value may be set when embedding for full cleanup.
Possible values:
=over
=item * 0 - none
=item * 1 - full
=item * 2 or greater - full with checks.
=back
If C<$ENV{PERL_DESTRUCT_LEVEL}> is set to an integer greater than the
value of C<PL_perl_destruct_level> its value is used instead.
=cut
*/
/* mod_perl is special, and also assigns a meaning -1 */
PERLVARI(I, perl_destruct_level, signed char, 0)
#ifdef USE_LOCALE_NUMERIC
PERLVARI(I, numeric_standard, int, TRUE)
/* Assume C locale numerics */
PERLVARI(I, numeric_underlying, bool, TRUE)
/* Assume underlying locale numerics */
PERLVARI(I, numeric_underlying_is_standard, bool, TRUE)
PERLVAR(I, numeric_name, char *) /* Name of current numeric locale */
PERLVAR(I, numeric_radix_sv, SV *) /* The radix separator if not '.' */
# ifdef HAS_POSIX_2008_LOCALE
PERLVARI(I, underlying_numeric_obj, locale_t, NULL)
# endif
#endif /* !USE_LOCALE_NUMERIC */
#ifdef FCRYPT
PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */
#else
/* One byte hole in the interpreter structure. */
#endif
PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */
PERLVAR(I, srand_called, bool)
/* Array of signal handlers, indexed by signal number, through which the C
signal handler dispatches. */
PERLVAR(I, psig_ptr, SV **)
/* Array of names of signals, indexed by signal number, for (re)use as the first
argument to a signal handler. Only one block of memory is allocated for
both psig_name and psig_ptr. */
PERLVAR(I, psig_name, SV **)
#if defined(PERL_IMPLICIT_SYS)
PERLVAR(I, Mem, struct IPerlMem *)
PERLVAR(I, MemShared, struct IPerlMem *)
PERLVAR(I, MemParse, struct IPerlMem *)
PERLVAR(I, Env, struct IPerlEnv *)
PERLVAR(I, StdIO, struct IPerlStdIO *)
PERLVAR(I, LIO, struct IPerlLIO *)
PERLVAR(I, Dir, struct IPerlDir *)
PERLVAR(I, Sock, struct IPerlSock *)
PERLVAR(I, Proc, struct IPerlProc *)
#endif
PERLVAR(I, ptr_table, PTR_TBL_t *)
PERLVARI(I, beginav_save, AV *, NULL) /* save BEGIN{}s when compiling */
PERLVAR(I, body_arenas, void *) /* pointer to list of body-arenas */
#if defined(USE_ITHREADS)
PERLVAR(I, regex_pad, SV **) /* Shortcut into the array of
regex_padav */
PERLVAR(I, regex_padav, AV *) /* All regex objects, indexed via the
values in op_pmoffset of pmop.
Entry 0 is an SV whose PV is a
"packed" list of IVs listing
the now-free slots in the array */
PERLVAR(I, stashpad, HV **) /* for CopSTASH */
PERLVARI(I, stashpadmax, PADOFFSET, 64)
PERLVARI(I, stashpadix, PADOFFSET, 0)
#endif
#ifdef USE_REENTRANT_API
PERLVAR(I, reentrant_buffer, REENTR *) /* here we store the _r buffers */
#endif
PERLVAR(I, custom_op_names, HV *) /* Names of user defined ops */
PERLVAR(I, custom_op_descs, HV *) /* Descriptions of user defined ops */
#ifdef PERLIO_LAYERS
PERLVARI(I, perlio, PerlIOl *, NULL)
PERLVARI(I, known_layers, PerlIO_list_t *, NULL)
PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL)
#endif
PERLVARI(I, checkav_save, AV *, NULL) /* save CHECK{}s when compiling */
PERLVARI(I, unitcheckav_save, AV *, NULL)
/* save UNITCHECK{}s when compiling */
PERLVARI(I, clocktick, long, 0) /* this many times() ticks in a second */
/* Hooks to shared SVs and locks. */
PERLVARI(I, sharehook, share_proc_t, Perl_sv_nosharing)
PERLVARI(I, lockhook, share_proc_t, Perl_sv_nosharing)
GCC_DIAG_IGNORE(-Wdeprecated-declarations)
#ifdef NO_MATHOMS
# define PERL_UNLOCK_HOOK Perl_sv_nosharing
#else
/* This reference ensures that the mathoms are linked with perl */
# define PERL_UNLOCK_HOOK Perl_sv_nounlocking
#endif
PERLVARI(I, unlockhook, share_proc_t, PERL_UNLOCK_HOOK)
GCC_DIAG_RESTORE
PERLVARI(I, threadhook, thrhook_proc_t, Perl_nothreadhook)
/* Can shared object be destroyed */
PERLVARI(I, destroyhook, destroyable_proc_t, Perl_sv_destroyable)
#ifndef PERL_MICRO
PERLVARI(I, signalhook, despatch_signals_proc_t, Perl_despatch_signals)
#endif
PERLVARI(I, isarev, HV *, NULL) /* Reverse map of @ISA dependencies */
/* Register of known Method Resolution Orders.
What this actually points to is an implementation detail (it may change to
a structure incorporating a reference count - use mro_get_from_name to
retrieve a C<struct mro_alg *> */
PERLVAR(I, registered_mros, HV *)
/* Compile-time block start/end hooks */
PERLVAR(I, blockhooks, AV *)
PERLVAR(I, custom_ops, HV *) /* custom op registrations */
PERLVAR(I, Xpv, XPV *) /* (unused) held temporary value */
/* name of the scopes we've ENTERed. Only used with -DDEBUGGING, but needs to be
present always, as -DDEBUGGING must be binary compatible with non. */
PERLVARI(I, scopestack_name, const char * *, NULL)
PERLVAR(I, debug_pad, struct perl_debug_pad) /* always needed because of the re extension */
/* Hook for File::Glob */
PERLVARI(I, globhook, globhook_t, NULL)
/* The last unconditional member of the interpreter structure when 5.18.0 was
released. The offset of the end of this is baked into a global variable in
any shared perl library which will allow a sanity test in future perl
releases. */
#define PERL_LAST_5_18_0_INTERP_MEMBER Iglobhook
#ifdef PERL_IMPLICIT_CONTEXT
PERLVARI(I, my_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */
PERLVARI(I, my_cxt_size, int, 0) /* size of PL_my_cxt_list */
#endif
#if defined(PERL_IMPLICIT_CONTEXT) || defined(PERL_DEBUG_READONLY_COW)
/* For use with the memory debugging code in util.c. This is used only in
* DEBUGGING builds (as long as the relevant structure is defined), but
* defining it in non-debug builds too means that we retain binary
* compatibility between otherwise-compatible plain and debug builds. */
PERLVAR(I, memory_debug_header, struct perl_memory_debug_header)
#endif
#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
/* File descriptor to talk to the child which dumps scalars. */
PERLVARI(I, dumper_fd, int, -1)
#endif
#ifdef DEBUG_LEAKING_SCALARS
PERLVARI(I, sv_serial, U32, 0) /* SV serial number, used in sv.c */
#endif
PERLVARA(I, sv_consts, SV_CONSTS_COUNT, SV*) /* constant SVs with precomputed hash value */
#ifdef PERL_TRACE_OPS
PERLVARA(I, op_exec_cnt, OP_max+2, UV) /* Counts of executed OPs of the given type.
If PERL_TRACE_OPS is enabled, we'll dump
a summary count of all ops executed in the
program at perl_destruct time. For
profiling/debugging only. Works only if
DEBUGGING is enabled, too. */
#endif
PERLVAR(I, random_state, PL_RANDOM_STATE_TYPE)
PERLVARI(I, dump_re_max_len, STRLEN, 60)
/* For internal uses of randomness, this ensures the sequence of
* random numbers returned by rand() isn't modified by perl's internal
* use of randomness.
* This is important if the user has called srand() with a seed.
*/
PERLVAR(I, internal_random_state, PL_RANDOM_STATE_TYPE)
PERLVARA(I, TR_SPECIAL_HANDLING_UTF8, UTF8_MAXBYTES, char)
PERLVAR(I, AboveLatin1, SV *)
PERLVAR(I, Assigned_invlist, SV *)
PERLVAR(I, GCB_invlist, SV *)
PERLVAR(I, HasMultiCharFold, SV *)
PERLVAR(I, InMultiCharFold, SV *)
PERLVAR(I, Latin1, SV *)
PERLVAR(I, LB_invlist, SV *)
PERLVAR(I, SB_invlist, SV *)
PERLVAR(I, SCX_invlist, SV *)
PERLVAR(I, UpperLatin1, SV *) /* Code points 128 - 255 */
/* List of characters that participate in any fold defined by Unicode */
PERLVAR(I, in_some_fold, SV *)
/* Everything that folds to a given character, for case insensitivity regex
* matching */
PERLVAR(I, utf8_foldclosures, SV *)
PERLVAR(I, utf8_idcont, SV *)
PERLVAR(I, utf8_idstart, SV *)
PERLVAR(I, utf8_perl_idcont, SV *)
PERLVAR(I, utf8_perl_idstart, SV *)
PERLVAR(I, utf8_xidcont, SV *)
PERLVAR(I, utf8_xidstart, SV *)
PERLVAR(I, WB_invlist, SV *)
PERLVARA(I, XPosix_ptrs, POSIX_CC_COUNT, SV *)
PERLVARA(I, Posix_ptrs, POSIX_CC_COUNT, SV *)
PERLVAR(I, utf8_toupper, SV *)
PERLVAR(I, utf8_totitle, SV *)
PERLVAR(I, utf8_tolower, SV *)
PERLVAR(I, utf8_tofold, SV *)
PERLVAR(I, utf8_tosimplefold, SV *)
PERLVAR(I, utf8_charname_begin, SV *)
PERLVAR(I, utf8_charname_continue, SV *)
PERLVAR(I, utf8_mark, SV *)
PERLVARI(I, InBitmap, SV *, NULL)
PERLVAR(I, CCC_non0_non230, SV *)
PERLVAR(I, Private_Use, SV *)
#ifdef HAS_MBRLEN
PERLVAR(I, mbrlen_ps, mbstate_t)
#endif
#ifdef HAS_MBRTOWC
PERLVAR(I, mbrtowc_ps, mbstate_t)
#endif
#ifdef HAS_WCRTOMB
PERLVAR(I, wcrtomb_ps, mbstate_t)
#endif
/* If you are adding a U8 or U16, check to see if there are 'Space' comments
* above on where there are gaps which currently will be structure padding. */
/* Within a stable branch, new variables must be added to the very end, before
* this comment, for binary compatibility (the offsets of the old members must
* not change).
* (Don't forget to add your variable also to perl_clone()!)
* XSUB.h provides wrapper functions via perlapi.h that make this
* irrelevant, but not all code may be expected to #include XSUB.h.
*/

View file

@ -0,0 +1,248 @@
/* invlist_inline.h
*
* Copyright (C) 2012 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*/
#ifndef PERL_INVLIST_INLINE_H_
#define PERL_INVLIST_INLINE_H_
#if defined(PERL_IN_UTF8_C) \
|| defined(PERL_IN_REGCOMP_C) \
|| defined(PERL_IN_REGEXEC_C) \
|| defined(PERL_IN_TOKE_C) \
|| defined(PERL_IN_PP_C) \
|| defined(PERL_IN_OP_C) \
|| defined(PERL_IN_DOOP_C)
/* An element is in an inversion list iff its index is even numbered: 0, 2, 4,
* etc */
#define ELEMENT_RANGE_MATCHES_INVLIST(i) (! ((i) & 1))
#define PREV_RANGE_MATCHES_INVLIST(i) (! ELEMENT_RANGE_MATCHES_INVLIST(i))
/* This converts to/from our UVs to what the SV code is expecting: bytes. */
#define TO_INTERNAL_SIZE(x) ((x) * sizeof(UV))
#define FROM_INTERNAL_SIZE(x) ((x)/ sizeof(UV))
PERL_STATIC_INLINE bool
S_is_invlist(SV* const invlist)
{
return invlist != NULL && SvTYPE(invlist) == SVt_INVLIST;
}
PERL_STATIC_INLINE bool*
S_get_invlist_offset_addr(SV* invlist)
{
/* Return the address of the field that says whether the inversion list is
* offset (it contains 1) or not (contains 0) */
PERL_ARGS_ASSERT_GET_INVLIST_OFFSET_ADDR;
assert(is_invlist(invlist));
return &(((XINVLIST*) SvANY(invlist))->is_offset);
}
PERL_STATIC_INLINE UV
S__invlist_len(SV* const invlist)
{
/* Returns the current number of elements stored in the inversion list's
* array */
PERL_ARGS_ASSERT__INVLIST_LEN;
assert(is_invlist(invlist));
return (SvCUR(invlist) == 0)
? 0
: FROM_INTERNAL_SIZE(SvCUR(invlist)) - *get_invlist_offset_addr(invlist);
}
PERL_STATIC_INLINE bool
S__invlist_contains_cp(SV* const invlist, const UV cp)
{
/* Does <invlist> contain code point <cp> as part of the set? */
IV index = _invlist_search(invlist, cp);
PERL_ARGS_ASSERT__INVLIST_CONTAINS_CP;
return index >= 0 && ELEMENT_RANGE_MATCHES_INVLIST(index);
}
PERL_STATIC_INLINE UV*
S_invlist_array(SV* const invlist)
{
/* Returns the pointer to the inversion list's array. Every time the
* length changes, this needs to be called in case malloc or realloc moved
* it */
PERL_ARGS_ASSERT_INVLIST_ARRAY;
/* Must not be empty. If these fail, you probably didn't check for <len>
* being non-zero before trying to get the array */
assert(_invlist_len(invlist));
/* The very first element always contains zero, The array begins either
* there, or if the inversion list is offset, at the element after it.
* The offset header field determines which; it contains 0 or 1 to indicate
* how much additionally to add */
assert(0 == *(SvPVX(invlist)));
return ((UV *) SvPVX(invlist) + *get_invlist_offset_addr(invlist));
}
#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_DOOP_C)
PERL_STATIC_INLINE void
S_invlist_extend(pTHX_ SV* const invlist, const UV new_max)
{
/* Grow the maximum size of an inversion list */
PERL_ARGS_ASSERT_INVLIST_EXTEND;
assert(SvTYPE(invlist) == SVt_INVLIST);
/* Add one to account for the zero element at the beginning which may not
* be counted by the calling parameters */
SvGROW((SV *)invlist, TO_INTERNAL_SIZE(new_max + 1));
}
PERL_STATIC_INLINE void
S_invlist_set_len(pTHX_ SV* const invlist, const UV len, const bool offset)
{
/* Sets the current number of elements stored in the inversion list.
* Updates SvCUR correspondingly */
PERL_UNUSED_CONTEXT;
PERL_ARGS_ASSERT_INVLIST_SET_LEN;
assert(SvTYPE(invlist) == SVt_INVLIST);
SvCUR_set(invlist,
(len == 0)
? 0
: TO_INTERNAL_SIZE(len + offset));
assert(SvLEN(invlist) == 0 || SvCUR(invlist) <= SvLEN(invlist));
}
PERL_STATIC_INLINE SV*
S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp) {
return _add_range_to_invlist(invlist, cp, cp);
}
PERL_STATIC_INLINE UV
S_invlist_highest(SV* const invlist)
{
/* Returns the highest code point that matches an inversion list. This API
* has an ambiguity, as it returns 0 under either the highest is actually
* 0, or if the list is empty. If this distinction matters to you, check
* for emptiness before calling this function */
UV len = _invlist_len(invlist);
UV *array;
PERL_ARGS_ASSERT_INVLIST_HIGHEST;
if (len == 0) {
return 0;
}
array = invlist_array(invlist);
/* The last element in the array in the inversion list always starts a
* range that goes to infinity. That range may be for code points that are
* matched in the inversion list, or it may be for ones that aren't
* matched. In the latter case, the highest code point in the set is one
* less than the beginning of this range; otherwise it is the final element
* of this range: infinity */
return (ELEMENT_RANGE_MATCHES_INVLIST(len - 1))
? UV_MAX
: array[len - 1] - 1;
}
#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C)
PERL_STATIC_INLINE STRLEN*
S_get_invlist_iter_addr(SV* invlist)
{
/* Return the address of the UV that contains the current iteration
* position */
PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR;
assert(is_invlist(invlist));
return &(((XINVLIST*) SvANY(invlist))->iterator);
}
PERL_STATIC_INLINE void
S_invlist_iterinit(SV* invlist) /* Initialize iterator for invlist */
{
PERL_ARGS_ASSERT_INVLIST_ITERINIT;
*get_invlist_iter_addr(invlist) = 0;
}
PERL_STATIC_INLINE void
S_invlist_iterfinish(SV* invlist)
{
/* Terminate iterator for invlist. This is to catch development errors.
* Any iteration that is interrupted before completed should call this
* function. Functions that add code points anywhere else but to the end
* of an inversion list assert that they are not in the middle of an
* iteration. If they were, the addition would make the iteration
* problematical: if the iteration hadn't reached the place where things
* were being added, it would be ok */
PERL_ARGS_ASSERT_INVLIST_ITERFINISH;
*get_invlist_iter_addr(invlist) = (STRLEN) UV_MAX;
}
STATIC bool
S_invlist_iternext(SV* invlist, UV* start, UV* end)
{
/* An C<invlist_iterinit> call on <invlist> must be used to set this up.
* This call sets in <*start> and <*end>, the next range in <invlist>.
* Returns <TRUE> if successful and the next call will return the next
* range; <FALSE> if was already at the end of the list. If the latter,
* <*start> and <*end> are unchanged, and the next call to this function
* will start over at the beginning of the list */
STRLEN* pos = get_invlist_iter_addr(invlist);
UV len = _invlist_len(invlist);
UV *array;
PERL_ARGS_ASSERT_INVLIST_ITERNEXT;
if (*pos >= len) {
*pos = (STRLEN) UV_MAX; /* Force iterinit() to be required next time */
return FALSE;
}
array = invlist_array(invlist);
*start = array[(*pos)++];
if (*pos >= len) {
*end = UV_MAX;
}
else {
*end = array[(*pos)++] - 1;
}
return TRUE;
}
#endif
#ifndef PERL_IN_REGCOMP_C
/* These symbols are only needed later in regcomp.c */
# undef TO_INTERNAL_SIZE
# undef FROM_INTERNAL_SIZE
#endif
#endif /* PERL_INVLIST_INLINE_H_ */

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,275 @@
/* -*- buffer-read-only: t -*-
*
* keywords.h
*
* Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2005,
* 2006, 2007 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
* This file is built by regen/keywords.pl from its data.
* Any changes made here will be lost!
*/
#define KEY_NULL 0
#define KEY___FILE__ 1
#define KEY___LINE__ 2
#define KEY___PACKAGE__ 3
#define KEY___DATA__ 4
#define KEY___END__ 5
#define KEY___SUB__ 6
#define KEY_AUTOLOAD 7
#define KEY_BEGIN 8
#define KEY_UNITCHECK 9
#define KEY_DESTROY 10
#define KEY_END 11
#define KEY_INIT 12
#define KEY_CHECK 13
#define KEY_abs 14
#define KEY_accept 15
#define KEY_alarm 16
#define KEY_and 17
#define KEY_atan2 18
#define KEY_bind 19
#define KEY_binmode 20
#define KEY_bless 21
#define KEY_break 22
#define KEY_caller 23
#define KEY_chdir 24
#define KEY_chmod 25
#define KEY_chomp 26
#define KEY_chop 27
#define KEY_chown 28
#define KEY_chr 29
#define KEY_chroot 30
#define KEY_close 31
#define KEY_closedir 32
#define KEY_cmp 33
#define KEY_connect 34
#define KEY_continue 35
#define KEY_cos 36
#define KEY_crypt 37
#define KEY_dbmclose 38
#define KEY_dbmopen 39
#define KEY_default 40
#define KEY_defined 41
#define KEY_delete 42
#define KEY_die 43
#define KEY_do 44
#define KEY_dump 45
#define KEY_each 46
#define KEY_else 47
#define KEY_elsif 48
#define KEY_endgrent 49
#define KEY_endhostent 50
#define KEY_endnetent 51
#define KEY_endprotoent 52
#define KEY_endpwent 53
#define KEY_endservent 54
#define KEY_eof 55
#define KEY_eq 56
#define KEY_eval 57
#define KEY_evalbytes 58
#define KEY_exec 59
#define KEY_exists 60
#define KEY_exit 61
#define KEY_exp 62
#define KEY_fc 63
#define KEY_fcntl 64
#define KEY_fileno 65
#define KEY_flock 66
#define KEY_for 67
#define KEY_foreach 68
#define KEY_fork 69
#define KEY_format 70
#define KEY_formline 71
#define KEY_ge 72
#define KEY_getc 73
#define KEY_getgrent 74
#define KEY_getgrgid 75
#define KEY_getgrnam 76
#define KEY_gethostbyaddr 77
#define KEY_gethostbyname 78
#define KEY_gethostent 79
#define KEY_getlogin 80
#define KEY_getnetbyaddr 81
#define KEY_getnetbyname 82
#define KEY_getnetent 83
#define KEY_getpeername 84
#define KEY_getpgrp 85
#define KEY_getppid 86
#define KEY_getpriority 87
#define KEY_getprotobyname 88
#define KEY_getprotobynumber 89
#define KEY_getprotoent 90
#define KEY_getpwent 91
#define KEY_getpwnam 92
#define KEY_getpwuid 93
#define KEY_getservbyname 94
#define KEY_getservbyport 95
#define KEY_getservent 96
#define KEY_getsockname 97
#define KEY_getsockopt 98
#define KEY_given 99
#define KEY_glob 100
#define KEY_gmtime 101
#define KEY_goto 102
#define KEY_grep 103
#define KEY_gt 104
#define KEY_hex 105
#define KEY_if 106
#define KEY_index 107
#define KEY_int 108
#define KEY_ioctl 109
#define KEY_isa 110
#define KEY_join 111
#define KEY_keys 112
#define KEY_kill 113
#define KEY_last 114
#define KEY_lc 115
#define KEY_lcfirst 116
#define KEY_le 117
#define KEY_length 118
#define KEY_link 119
#define KEY_listen 120
#define KEY_local 121
#define KEY_localtime 122
#define KEY_lock 123
#define KEY_log 124
#define KEY_lstat 125
#define KEY_lt 126
#define KEY_m 127
#define KEY_map 128
#define KEY_mkdir 129
#define KEY_msgctl 130
#define KEY_msgget 131
#define KEY_msgrcv 132
#define KEY_msgsnd 133
#define KEY_my 134
#define KEY_ne 135
#define KEY_next 136
#define KEY_no 137
#define KEY_not 138
#define KEY_oct 139
#define KEY_open 140
#define KEY_opendir 141
#define KEY_or 142
#define KEY_ord 143
#define KEY_our 144
#define KEY_pack 145
#define KEY_package 146
#define KEY_pipe 147
#define KEY_pop 148
#define KEY_pos 149
#define KEY_print 150
#define KEY_printf 151
#define KEY_prototype 152
#define KEY_push 153
#define KEY_q 154
#define KEY_qq 155
#define KEY_qr 156
#define KEY_quotemeta 157
#define KEY_qw 158
#define KEY_qx 159
#define KEY_rand 160
#define KEY_read 161
#define KEY_readdir 162
#define KEY_readline 163
#define KEY_readlink 164
#define KEY_readpipe 165
#define KEY_recv 166
#define KEY_redo 167
#define KEY_ref 168
#define KEY_rename 169
#define KEY_require 170
#define KEY_reset 171
#define KEY_return 172
#define KEY_reverse 173
#define KEY_rewinddir 174
#define KEY_rindex 175
#define KEY_rmdir 176
#define KEY_s 177
#define KEY_say 178
#define KEY_scalar 179
#define KEY_seek 180
#define KEY_seekdir 181
#define KEY_select 182
#define KEY_semctl 183
#define KEY_semget 184
#define KEY_semop 185
#define KEY_send 186
#define KEY_setgrent 187
#define KEY_sethostent 188
#define KEY_setnetent 189
#define KEY_setpgrp 190
#define KEY_setpriority 191
#define KEY_setprotoent 192
#define KEY_setpwent 193
#define KEY_setservent 194
#define KEY_setsockopt 195
#define KEY_shift 196
#define KEY_shmctl 197
#define KEY_shmget 198
#define KEY_shmread 199
#define KEY_shmwrite 200
#define KEY_shutdown 201
#define KEY_sin 202
#define KEY_sleep 203
#define KEY_socket 204
#define KEY_socketpair 205
#define KEY_sort 206
#define KEY_splice 207
#define KEY_split 208
#define KEY_sprintf 209
#define KEY_sqrt 210
#define KEY_srand 211
#define KEY_stat 212
#define KEY_state 213
#define KEY_study 214
#define KEY_sub 215
#define KEY_substr 216
#define KEY_symlink 217
#define KEY_syscall 218
#define KEY_sysopen 219
#define KEY_sysread 220
#define KEY_sysseek 221
#define KEY_system 222
#define KEY_syswrite 223
#define KEY_tell 224
#define KEY_telldir 225
#define KEY_tie 226
#define KEY_tied 227
#define KEY_time 228
#define KEY_times 229
#define KEY_tr 230
#define KEY_truncate 231
#define KEY_uc 232
#define KEY_ucfirst 233
#define KEY_umask 234
#define KEY_undef 235
#define KEY_unless 236
#define KEY_unlink 237
#define KEY_unpack 238
#define KEY_unshift 239
#define KEY_untie 240
#define KEY_until 241
#define KEY_use 242
#define KEY_utime 243
#define KEY_values 244
#define KEY_vec 245
#define KEY_wait 246
#define KEY_waitpid 247
#define KEY_wantarray 248
#define KEY_warn 249
#define KEY_when 250
#define KEY_while 251
#define KEY_write 252
#define KEY_x 253
#define KEY_xor 254
#define KEY_y 255
/* Generated from:
* f77998a5bc995c1b42d3d080de227ef5f11638bcd329367431d8f193aef2d3cc regen/keywords.pl
* ex: set ro: */

View file

@ -0,0 +1,796 @@
/* -*- buffer-read-only: t -*-
* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
* This file is built by regen/mk_PL_charclass.pl from Unicode::UCD.
* Any changes made here will be lost!
*/
/* For code points whose position is not the same as Unicode, both are shown
* in the comment*/
#if 'A' == 65 /* ASCII/Latin1 */
/* U+00 NUL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+01 SOH */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+02 STX */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+03 ETX */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+04 EOT */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+05 ENQ */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+06 ACK */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+07 BEL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+08 BS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+09 HT */ (1U<<_CC_ASCII)|(1U<<_CC_BLANK)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
/* U+0A LF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0B VT */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0C FF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0D CR */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0E SO */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+0F SI */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+10 DLE */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+11 DC1 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+12 DC2 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+13 DC3 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+14 DC4 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+15 NAK */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+16 SYN */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+17 ETB */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+18 CAN */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+19 EOM */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1A SUB */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1B ESC */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1C FS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1D GS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1E RS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1F US */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+20 SP */ (1U<<_CC_ASCII)|(1U<<_CC_BLANK)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
/* U+21 '!' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+22 '"' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+23 '#' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+24 '$' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+25 '%' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+26 '&' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+27 "'" */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+28 '(' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+29 ')' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+2A '*' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+2B '+' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+2C ',' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+2D '-' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+2E '.' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+2F '/' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+33 '3' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+34 '4' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+35 '5' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+36 '6' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+38 '8' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+39 '9' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+3A ':' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+3B ';' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+3C '<' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+3D '=' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+3E '>' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+3F '?' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+40 '@' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+41 'A' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+42 'B' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+43 'C' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+44 'D' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+45 'E' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+46 'F' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+47 'G' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+48 'H' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+49 'I' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+4A 'J' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+4B 'K' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+4C 'L' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+4D 'M' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+4E 'N' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+4F 'O' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+50 'P' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+51 'Q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+52 'R' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+53 'S' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+54 'T' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+55 'U' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+56 'V' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+57 'W' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+58 'X' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+59 'Y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+5A 'Z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+5B '[' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+5C '\' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+5D ']' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+5E '^' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+5F '_' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_WORDCHAR),
/* U+60 '`' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+61 'a' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+62 'b' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+63 'c' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+64 'd' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+65 'e' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+66 'f' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+67 'g' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+68 'h' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+69 'i' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+6A 'j' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+6B 'k' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+6C 'l' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+6D 'm' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+6E 'n' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+6F 'o' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+70 'p' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+71 'q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+72 'r' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+73 's' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+74 't' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+75 'u' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+76 'v' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+77 'w' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+78 'x' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+79 'y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+7A 'z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+7B '{' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+7C '|' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+7D '}' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+7E '~' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+7F DEL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+80 PAD */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+81 HOP */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+82 BPH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+83 NBH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+84 IND */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+85 NEL */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+86 SSA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+87 ESA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+88 HTS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+89 HTJ */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+8A VTS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+8B PLD */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+8C PLU */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+8D RI */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+8E SS2 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+8F SS3 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+90 DCS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+91 PU1 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+92 PU2 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+93 STS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+94 CCH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+95 MW */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+96 SPA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+97 EPA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+98 SOS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+99 SGC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+9A SCI */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+9B CSI */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+9C ST */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+9D OSC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+9E PM */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+A0 NBSP */ (1U<<_CC_BLANK)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
/* U+A1 INVERTED '!' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+A2 CENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+A3 POUND */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+A4 CURRENCY */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+A5 YEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+A6 BROKEN BAR */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+A7 SECTION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+A8 DIAERESIS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+A9 COPYRIGHT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+AA FEMININE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+AB LEFT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+AC NOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+AD SOFT HYPHEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+AE REGISTERED */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+AF MACRON */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+B0 DEGREE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+B1 PLUS-MINUS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+B2 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+B3 SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+B4 ACUTE ACCENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+B5 MICRO */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+B6 PILCROW */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+B7 MIDDLE DOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT),
/* U+B8 CEDILLA */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+B9 SUPERSCRIPT 1 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+BA MASCULINE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+BB RIGHT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+BC 1/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+BD 1/2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+BE 3/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* U+BF INVERTED '?' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+C0 A with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+C1 A with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+C2 A with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+C3 A with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+C4 A with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+C5 A with RING */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+C6 AE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+C7 C with CEDILLA */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+C8 E with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+C9 E with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+CA E with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+CB E with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+CC I with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+CD I with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+CE I with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+CF I with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+D0 ETH */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+D1 N with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+D2 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+D3 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+D4 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+D5 O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+D6 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+D7 MULTIPLICATION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+D8 O with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+D9 U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+DA U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+DB U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+DC U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+DD Y with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+DE THORN */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* U+DF sharp s */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E0 a with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E1 a with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E2 a with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E3 a with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E4 a with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E5 a with ring */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E6 ae */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E7 c with cedilla */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E8 e with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+E9 e with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+EA e with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+EB e with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+EC i with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+ED i with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+EE i with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+EF i with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+F0 eth */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+F1 n with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+F2 o with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+F3 o with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+F4 o with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+F5 o with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+F6 o with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+F7 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* U+F8 o with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+F9 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+FA u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+FB u with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+FC u with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+FD y with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+FE thorn */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* U+FF y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)
#endif /* ASCII/Latin1 */
#if 'A' == 193 /* EBCDIC 1047 */ \
&& '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
&& '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
/* U+00 NUL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+01 SOH */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+02 STX */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+03 ETX */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x04 U+9C ST */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x05 U+09 HT */ (1U<<_CC_ASCII)|(1U<<_CC_BLANK)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
/* 0x06 U+86 SSA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x07 U+7F DEL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x08 U+97 EPA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x09 U+8D RI */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x0A U+8E SS2 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+0B VT */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0C FF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0D CR */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0E SO */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+0F SI */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+10 DLE */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+11 DC1 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+12 DC2 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+13 DC3 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x14 U+9D OSC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x15 U+0A LF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* 0x16 U+08 BS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x17 U+87 ESA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+18 CAN */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+19 EOM */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x1A U+92 PU2 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x1B U+8F SS3 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1C FS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1D GS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1E RS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1F US */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x20 U+80 PAD */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x21 U+81 HOP */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x22 U+82 BPH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x23 U+83 NBH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x24 U+84 IND */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x25 U+85 NEL */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* 0x26 U+17 ETB */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x27 U+1B ESC */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x28 U+88 HTS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x29 U+89 HTJ */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2A U+8A VTS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2B U+8B PLD */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2C U+8C PLU */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2D U+05 ENQ */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2E U+06 ACK */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2F U+07 BEL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x30 U+90 DCS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x31 U+91 PU1 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x32 U+16 SYN */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x33 U+93 STS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x34 U+94 CCH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x35 U+95 MW */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x36 U+96 SPA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x37 U+04 EOT */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x38 U+98 SOS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x39 U+99 SGC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3A U+9A SCI */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3B U+9B CSI */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3C U+14 DC4 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3D U+15 NAK */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3E U+9E PM */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3F U+1A SUB */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x40 U+20 SP */ (1U<<_CC_ASCII)|(1U<<_CC_BLANK)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
/* 0x41 U+A0 NBSP */ (1U<<_CC_BLANK)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
/* 0x42 U+E2 I8=A1 a with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x43 U+E4 I8=A2 a with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x44 U+E0 I8=A3 a with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x45 U+E1 I8=A4 a with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x46 U+E3 I8=A5 a with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x47 U+E5 I8=A6 a with ring */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x48 U+E7 I8=A7 c with cedilla */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x49 U+F1 I8=A8 n with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x4A U+A2 I8=A9 CENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x4B U+2E '.' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4C U+3C '<' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4D U+28 '(' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4E U+2B '+' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4F U+7C '|' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x50 U+26 '&' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x51 U+E9 I8=AA e with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x52 U+EA I8=AB e with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x53 U+EB I8=AC e with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x54 U+E8 I8=AD e with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x55 U+ED I8=AE i with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x56 U+EE I8=AF i with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x57 U+EF I8=B0 i with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x58 U+EC I8=B1 i with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x59 U+DF I8=B2 sharp s */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x5A U+21 '!' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5B U+24 '$' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5C U+2A '*' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5D U+29 ')' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5E U+3B ';' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5F U+5E '^' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x60 U+2D '-' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x61 U+2F '/' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x62 U+C2 I8=B3 A with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x63 U+C4 I8=B4 A with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x64 U+C0 I8=B5 A with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x65 U+C1 I8=B6 A with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x66 U+C3 I8=B7 A with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x67 U+C5 I8=B8 A with RING */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x68 U+C7 I8=B9 C with CEDILLA */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x69 U+D1 I8=BA N with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x6A U+A6 I8=BB BROKEN BAR */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x6B U+2C ',' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6C U+25 '%' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6D U+5F '_' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_WORDCHAR),
/* 0x6E U+3E '>' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6F U+3F '?' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x70 U+F8 I8=BC o with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x71 U+C9 I8=BD E with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x72 U+CA I8=BE E with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x73 U+CB I8=BF E with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x74 U+C8 I8=C0 E with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x75 U+CD I8=C1 I with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x76 U+CE I8=C2 I with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x77 U+CF I8=C3 I with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x78 U+CC I8=C4 I with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x79 U+60 '`' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7A U+3A ':' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7B U+23 '#' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7C U+40 '@' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7D U+27 "'" */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7E U+3D '=' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7F U+22 '"' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x80 U+D8 I8=C5 O with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x81 U+61 'a' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x82 U+62 'b' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x83 U+63 'c' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x84 U+64 'd' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x85 U+65 'e' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x86 U+66 'f' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x87 U+67 'g' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x88 U+68 'h' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x89 U+69 'i' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x8A U+AB I8=C6 LEFT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x8B U+BB I8=C7 RIGHT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x8C U+F0 I8=C8 eth */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x8D U+FD I8=C9 y with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x8E U+FE I8=CA thorn */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x8F U+B1 I8=CB PLUS-MINUS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x90 U+B0 I8=CC DEGREE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x91 U+6A 'j' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x92 U+6B 'k' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x93 U+6C 'l' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x94 U+6D 'm' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x95 U+6E 'n' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x96 U+6F 'o' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x97 U+70 'p' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x98 U+71 'q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x99 U+72 'r' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x9A U+AA I8=CD FEMININE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x9B U+BA I8=CE MASCULINE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x9C U+E6 I8=CF ae */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x9D U+B8 I8=D0 CEDILLA */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0x9E U+C6 I8=D1 AE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x9F U+A4 I8=D2 CURRENCY */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xA0 U+B5 I8=D3 MICRO */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA1 U+7E '~' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xA2 U+73 's' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA3 U+74 't' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA4 U+75 'u' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA5 U+76 'v' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA6 U+77 'w' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA7 U+78 'x' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA8 U+79 'y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA9 U+7A 'z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xAA U+A1 I8=D4 INVERTED '!' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xAB U+BF I8=D5 INVERTED '?' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xAC U+D0 I8=D6 ETH */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xAD U+5B '[' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xAE U+DE I8=D7 THORN */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xAF U+AE I8=D8 REGISTERED */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB0 U+AC I8=D9 NOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB1 U+A3 I8=DA POUND */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB2 U+A5 I8=DB YEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB3 U+B7 I8=DC MIDDLE DOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT),
/* 0xB4 U+A9 I8=DD COPYRIGHT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB5 U+A7 I8=DE SECTION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+B6 I8=DF PILCROW */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xB7 U+BC I8=E0 1/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xB8 U+BD I8=E1 1/2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xB9 U+BE I8=E2 3/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBA U+DD I8=E3 Y with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xBB U+A8 I8=E4 DIAERESIS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBC U+AF I8=E5 MACRON */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBD U+5D ']' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xBE U+B4 I8=E6 ACUTE ACCENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBF U+D7 I8=E7 MULTIPLICATION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xC0 U+7B '{' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xC1 U+41 'A' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC2 U+42 'B' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC3 U+43 'C' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC4 U+44 'D' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC5 U+45 'E' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC6 U+46 'F' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC7 U+47 'G' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xC8 U+48 'H' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xC9 U+49 'I' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xCA U+AD I8=E8 SOFT HYPHEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xCB U+F4 I8=E9 o with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xCC U+F6 I8=EA o with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xCD U+F2 I8=EB o with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xCE U+F3 I8=EC o with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xCF U+F5 I8=ED o with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xD0 U+7D '}' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xD1 U+4A 'J' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD2 U+4B 'K' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD3 U+4C 'L' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD4 U+4D 'M' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD5 U+4E 'N' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD6 U+4F 'O' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD7 U+50 'P' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD8 U+51 'Q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD9 U+52 'R' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xDA U+B9 I8=EE SUPERSCRIPT 1 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xDB U+FB I8=EF u with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xDC U+FC I8=F0 u with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xE0 U+5C '\' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xE2 U+53 'S' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE3 U+54 'T' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE4 U+55 'U' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE5 U+56 'V' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE6 U+57 'W' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE7 U+58 'X' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE8 U+59 'Y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE9 U+5A 'Z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xF0 U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF1 U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF2 U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF3 U+33 '3' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF4 U+34 '4' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF5 U+35 '5' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF6 U+36 '6' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF7 U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF8 U+38 '8' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF9 U+39 '9' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)
#endif /* EBCDIC 1047 */
#if 'A' == 193 /* EBCDIC 037 */ \
&& '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
&& '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
/* U+00 NUL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+01 SOH */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+02 STX */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+03 ETX */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x04 U+9C ST */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x05 U+09 HT */ (1U<<_CC_ASCII)|(1U<<_CC_BLANK)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
/* 0x06 U+86 SSA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x07 U+7F DEL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x08 U+97 EPA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x09 U+8D RI */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x0A U+8E SS2 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+0B VT */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0C FF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0D CR */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* U+0E SO */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+0F SI */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+10 DLE */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+11 DC1 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+12 DC2 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+13 DC3 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x14 U+9D OSC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x15 U+85 NEL */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* 0x16 U+08 BS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x17 U+87 ESA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+18 CAN */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+19 EOM */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x1A U+92 PU2 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x1B U+8F SS3 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1C FS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1D GS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1E RS */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* U+1F US */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x20 U+80 PAD */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x21 U+81 HOP */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x22 U+82 BPH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x23 U+83 NBH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x24 U+84 IND */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x25 U+0A LF */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_VERTSPACE),
/* 0x26 U+17 ETB */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x27 U+1B ESC */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x28 U+88 HTS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x29 U+89 HTJ */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2A U+8A VTS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2B U+8B PLD */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2C U+8C PLU */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2D U+05 ENQ */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2E U+06 ACK */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x2F U+07 BEL */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_MNEMONIC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x30 U+90 DCS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x31 U+91 PU1 */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x32 U+16 SYN */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x33 U+93 STS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x34 U+94 CCH */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x35 U+95 MW */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x36 U+96 SPA */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x37 U+04 EOT */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x38 U+98 SOS */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x39 U+99 SGC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3A U+9A SCI */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3B U+9B CSI */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3C U+14 DC4 */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3D U+15 NAK */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3E U+9E PM */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3F U+1A SUB */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x40 U+20 SP */ (1U<<_CC_ASCII)|(1U<<_CC_BLANK)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
/* 0x41 U+A0 NBSP */ (1U<<_CC_BLANK)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
/* 0x42 U+E2 I8=A1 a with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x43 U+E4 I8=A2 a with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x44 U+E0 I8=A3 a with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x45 U+E1 I8=A4 a with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x46 U+E3 I8=A5 a with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x47 U+E5 I8=A6 a with ring */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x48 U+E7 I8=A7 c with cedilla */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x49 U+F1 I8=A8 n with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x4A U+A2 I8=A9 CENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x4B U+2E '.' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4C U+3C '<' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4D U+28 '(' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4E U+2B '+' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4F U+7C '|' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x50 U+26 '&' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x51 U+E9 I8=AA e with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x52 U+EA I8=AB e with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x53 U+EB I8=AC e with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x54 U+E8 I8=AD e with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x55 U+ED I8=AE i with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x56 U+EE I8=AF i with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x57 U+EF I8=B0 i with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x58 U+EC I8=B1 i with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x59 U+DF I8=B2 sharp s */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x5A U+21 '!' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5B U+24 '$' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5C U+2A '*' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5D U+29 ')' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5E U+3B ';' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5F U+AC I8=B3 NOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x60 U+2D '-' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x61 U+2F '/' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x62 U+C2 I8=B4 A with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x63 U+C4 I8=B5 A with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x64 U+C0 I8=B6 A with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x65 U+C1 I8=B7 A with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x66 U+C3 I8=B8 A with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x67 U+C5 I8=B9 A with RING */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x68 U+C7 I8=BA C with CEDILLA */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x69 U+D1 I8=BB N with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x6A U+A6 I8=BC BROKEN BAR */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x6B U+2C ',' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6C U+25 '%' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6D U+5F '_' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_WORDCHAR),
/* 0x6E U+3E '>' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6F U+3F '?' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x70 U+F8 I8=BD o with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x71 U+C9 I8=BE E with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x72 U+CA I8=BF E with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x73 U+CB I8=C0 E with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x74 U+C8 I8=C1 E with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x75 U+CD I8=C2 I with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x76 U+CE I8=C3 I with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x77 U+CF I8=C4 I with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x78 U+CC I8=C5 I with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x79 U+60 '`' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7A U+3A ':' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7B U+23 '#' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7C U+40 '@' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7D U+27 "'" */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7E U+3D '=' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7F U+22 '"' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x80 U+D8 I8=C6 O with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x81 U+61 'a' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x82 U+62 'b' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x83 U+63 'c' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x84 U+64 'd' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x85 U+65 'e' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x86 U+66 'f' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x87 U+67 'g' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x88 U+68 'h' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x89 U+69 'i' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x8A U+AB I8=C7 LEFT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x8B U+BB I8=C8 RIGHT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x8C U+F0 I8=C9 eth */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x8D U+FD I8=CA y with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x8E U+FE I8=CB thorn */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x8F U+B1 I8=CC PLUS-MINUS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x90 U+B0 I8=CD DEGREE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x91 U+6A 'j' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x92 U+6B 'k' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x93 U+6C 'l' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x94 U+6D 'm' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x95 U+6E 'n' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x96 U+6F 'o' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x97 U+70 'p' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x98 U+71 'q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x99 U+72 'r' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x9A U+AA I8=CE FEMININE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x9B U+BA I8=CF MASCULINE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x9C U+E6 I8=D0 ae */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x9D U+B8 I8=D1 CEDILLA */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0x9E U+C6 I8=D2 AE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x9F U+A4 I8=D3 CURRENCY */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xA0 U+B5 I8=D4 MICRO */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA1 U+7E '~' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xA2 U+73 's' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA3 U+74 't' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA4 U+75 'u' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA5 U+76 'v' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA6 U+77 'w' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA7 U+78 'x' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA8 U+79 'y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA9 U+7A 'z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xAA U+A1 I8=D5 INVERTED '!' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xAB U+BF I8=D6 INVERTED '?' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xAC U+D0 I8=D7 ETH */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xAD U+DD I8=D8 Y with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xAE U+DE I8=D9 THORN */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xAF U+AE I8=DA REGISTERED */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB0 U+5E '^' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xB1 U+A3 I8=DB POUND */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB2 U+A5 I8=DC YEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB3 U+B7 I8=DD MIDDLE DOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT),
/* 0xB4 U+A9 I8=DE COPYRIGHT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB5 U+A7 I8=DF SECTION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+B6 I8=E0 PILCROW */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xB7 U+BC I8=E1 1/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xB8 U+BD I8=E2 1/2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xB9 U+BE I8=E3 3/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBA U+5B '[' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xBB U+5D ']' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xBC U+AF I8=E4 MACRON */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBD U+A8 I8=E5 DIAERESIS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBE U+B4 I8=E6 ACUTE ACCENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBF U+D7 I8=E7 MULTIPLICATION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xC0 U+7B '{' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xC1 U+41 'A' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC2 U+42 'B' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC3 U+43 'C' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC4 U+44 'D' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC5 U+45 'E' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC6 U+46 'F' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC7 U+47 'G' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xC8 U+48 'H' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xC9 U+49 'I' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xCA U+AD I8=E8 SOFT HYPHEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xCB U+F4 I8=E9 o with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xCC U+F6 I8=EA o with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xCD U+F2 I8=EB o with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xCE U+F3 I8=EC o with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xCF U+F5 I8=ED o with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xD0 U+7D '}' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xD1 U+4A 'J' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD2 U+4B 'K' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD3 U+4C 'L' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD4 U+4D 'M' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD5 U+4E 'N' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD6 U+4F 'O' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD7 U+50 'P' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD8 U+51 'Q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD9 U+52 'R' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xDA U+B9 I8=EE SUPERSCRIPT 1 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xDB U+FB I8=EF u with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xDC U+FC I8=F0 u with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xE0 U+5C '\' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xE2 U+53 'S' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE3 U+54 'T' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE4 U+55 'U' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE5 U+56 'V' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE6 U+57 'W' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE7 U+58 'X' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE8 U+59 'Y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE9 U+5A 'Z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xF0 U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF1 U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF2 U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF3 U+33 '3' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF4 U+34 '4' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF5 U+35 '5' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF6 U+36 '6' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF7 U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF8 U+38 '8' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF9 U+39 '9' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)
#endif /* EBCDIC 037 */
/* ex: set ro: */

Binary file not shown.

View file

@ -0,0 +1,62 @@
#ifndef PERL_MALLOC_CTL_H_
# define PERL_MALLOC_CTL_H_
struct perl_mstats {
UV *nfree;
UV *ntotal;
IV topbucket, topbucket_ev, topbucket_odd, totfree, total, total_chain;
IV total_sbrk, sbrks, sbrk_good, sbrk_slack, start_slack, sbrked_remains;
IV minbucket;
/* Level 1 info */
UV *bucket_mem_size;
UV *bucket_available_size;
UV nbuckets;
};
typedef struct perl_mstats perl_mstats_t;
PERL_CALLCONV Malloc_t Perl_malloc (MEM_SIZE nbytes);
PERL_CALLCONV Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size);
PERL_CALLCONV Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes);
/* 'mfree' rather than 'free', since there is already a 'perl_free'
* that causes clashes with case-insensitive linkers */
PERL_CALLCONV Free_t Perl_mfree (Malloc_t where);
#ifndef NO_MALLOC_DYNAMIC_CFG
/* IV configuration data */
enum {
MallocCfg_FIRST_SBRK,
MallocCfg_MIN_SBRK,
MallocCfg_MIN_SBRK_FRAC1000,
MallocCfg_SBRK_ALLOW_FAILURES,
MallocCfg_SBRK_FAILURE_PRICE,
MallocCfg_sbrk_goodness,
MallocCfg_filldead,
MallocCfg_fillalive,
MallocCfg_fillcheck,
MallocCfg_skip_cfg_env,
MallocCfg_cfg_env_read,
MallocCfg_emergency_buffer_size,
MallocCfg_emergency_buffer_last_req,
MallocCfg_emergency_buffer_prepared_size,
MallocCfg_last
};
/* char* configuration data */
enum {
MallocCfgP_emergency_buffer,
MallocCfgP_emergency_buffer_prepared,
MallocCfgP_last
};
START_EXTERN_C
extern IV *MallocCfg_ptr;
extern char **MallocCfgP_ptr;
END_EXTERN_C
#endif
#endif

View file

@ -0,0 +1,17 @@
/* This is a placeholder file for symbols that should be exported
* into config_h.SH and Porting/Glossary. See also metaconfig.SH
*
* First version was created from the part in handy.h
* H.Merijn Brand 21 Dec 2010 (Tux)
*
* Mentioned variables are forced to be included into config_h.SH
* as they are only included if meta finds them referenced. That
* implies that noone can use them unless they are available and
* they won't be available unless used. When new symbols are probed
* in Configure, this is the way to force them into availability.
*
* Symbols should only be here temporarily. Once they are actually used,
* they should be removed from here.
*
* HAS_WCRTOMB
*/

View file

@ -0,0 +1,80 @@
/* mg.h
*
* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999,
* 2000, 2002, 2005, 2006, 2007, 2008 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
struct mgvtbl {
int (*svt_get) (pTHX_ SV *sv, MAGIC* mg);
int (*svt_set) (pTHX_ SV *sv, MAGIC* mg);
U32 (*svt_len) (pTHX_ SV *sv, MAGIC* mg);
int (*svt_clear)(pTHX_ SV *sv, MAGIC* mg);
int (*svt_free) (pTHX_ SV *sv, MAGIC* mg);
int (*svt_copy) (pTHX_ SV *sv, MAGIC* mg,
SV *nsv, const char *name, I32 namlen);
int (*svt_dup) (pTHX_ MAGIC *mg, CLONE_PARAMS *param);
int (*svt_local)(pTHX_ SV *nsv, MAGIC *mg);
};
struct magic {
MAGIC* mg_moremagic;
MGVTBL* mg_virtual; /* pointer to magic functions */
U16 mg_private;
char mg_type;
U8 mg_flags;
SSize_t mg_len;
SV* mg_obj;
char* mg_ptr;
};
#define MGf_TAINTEDDIR 1 /* PERL_MAGIC_envelem only */
#define MGf_MINMATCH 1 /* PERL_MAGIC_regex_global only */
#define MGf_REQUIRE_GV 1 /* PERL_MAGIC_checkcall only */
#define MGf_REFCOUNTED 2
#define MGf_GSKIP 4 /* skip further GETs until after next SET */
#define MGf_COPY 8 /* has an svt_copy MGVTBL entry */
#define MGf_DUP 0x10 /* has an svt_dup MGVTBL entry */
#define MGf_LOCAL 0x20 /* has an svt_local MGVTBL entry */
#define MGf_BYTES 0x40 /* PERL_MAGIC_regex_global only */
#define MGf_PERSIST 0x80 /* PERL_MAGIC_lvref only */
#define MgTAINTEDDIR(mg) (mg->mg_flags & MGf_TAINTEDDIR)
#define MgTAINTEDDIR_on(mg) (mg->mg_flags |= MGf_TAINTEDDIR)
#define MgTAINTEDDIR_off(mg) (mg->mg_flags &= ~MGf_TAINTEDDIR)
#define MgPV(mg,lp) ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ? \
SvPV(MUTABLE_SV((mg)->mg_ptr),lp) : \
(mg)->mg_ptr)
#define MgPV_const(mg,lp) ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ? \
SvPV_const(MUTABLE_SV((mg)->mg_ptr),lp) : \
(const char*)(mg)->mg_ptr)
#define MgPV_nolen_const(mg) (((((int)(mg)->mg_len)) == HEf_SVKEY) ? \
SvPV_nolen_const(MUTABLE_SV((mg)->mg_ptr)) : \
(const char*)(mg)->mg_ptr)
#define SvTIED_mg(sv,how) (SvRMAGICAL(sv) ? mg_find((sv),(how)) : NULL)
#define SvTIED_obj(sv,mg) \
((mg)->mg_obj ? (mg)->mg_obj : sv_2mortal(newRV(sv)))
#if defined(PERL_CORE) || defined(PERL_EXT)
# define MgBYTEPOS(mg,sv,pv,len) S_MgBYTEPOS(aTHX_ mg,sv,pv,len)
/* assumes get-magic and stringification have already occurred */
# define MgBYTEPOS_set(mg,sv,pv,off) ( \
assert_((mg)->mg_type == PERL_MAGIC_regex_global) \
SvPOK(sv) && (!SvGMAGICAL(sv) || sv_only_taint_gmagic(sv)) \
? (mg)->mg_len = (off), (mg)->mg_flags |= MGf_BYTES \
: ((mg)->mg_len = DO_UTF8(sv) \
? (SSize_t)utf8_length((U8 *)(pv), (U8 *)(pv)+(off)) \
: (SSize_t)(off), \
(mg)->mg_flags &= ~MGf_BYTES))
#endif
#define whichsig(pv) whichsig_pv(pv)
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

View file

@ -0,0 +1,299 @@
{
/* sv '\0' Special scalar variable */
want_vtbl_sv | PERL_MAGIC_READONLY_ACCEPTABLE,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
/* arylen '#' Array length ($#ary) */
want_vtbl_arylen | PERL_MAGIC_VALUE_MAGIC,
0,
/* rhash '%' Extra data for restricted hashes */
magic_vtable_max | PERL_MAGIC_VALUE_MAGIC,
0,
0,
0,
0,
/* debugvar '*' $DB::single, signal, trace vars */
want_vtbl_debugvar,
0,
0,
0,
/* pos '.' pos() lvalue */
want_vtbl_pos | PERL_MAGIC_VALUE_MAGIC,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
/* symtab ':' Extra data for symbol tables */
magic_vtable_max | PERL_MAGIC_VALUE_MAGIC,
0,
/* backref '<' For weak ref data */
want_vtbl_backref | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC,
0,
0,
0,
/* arylen_p '@' To move arylen out of XPVAV */
magic_vtable_max | PERL_MAGIC_VALUE_MAGIC,
0,
/* bm 'B' Boyer-Moore (fast string search) */
want_vtbl_regexp | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC,
0,
/* regdata 'D' Regex match position data (@+ and @- vars) */
want_vtbl_regdata,
/* env 'E' %ENV hash */
want_vtbl_env,
0,
0,
/* hints 'H' %^H hash */
want_vtbl_hints,
/* isa 'I' @ISA array */
want_vtbl_isa,
0,
0,
/* dbfile 'L' Debugger %_<filename */
magic_vtable_max,
0,
0,
0,
/* tied 'P' Tied array or hash */
want_vtbl_pack | PERL_MAGIC_VALUE_MAGIC,
0,
0,
/* sig 'S' %SIG hash */
magic_vtable_max,
0,
/* uvar 'U' Available for use by extensions */
want_vtbl_uvar,
/* vstring 'V' SV was vstring literal */
magic_vtable_max | PERL_MAGIC_VALUE_MAGIC,
0,
0,
/* nonelem 'Y' Array element that does not exist */
want_vtbl_nonelem | PERL_MAGIC_VALUE_MAGIC,
0,
0,
/* lvref '\' Lvalue reference constructor */
want_vtbl_lvref,
/* checkcall ']' Inlining/mutation of call to this CV */
want_vtbl_checkcall | PERL_MAGIC_VALUE_MAGIC,
0,
0,
0,
0,
0,
/* overload_table 'c' Holds overload table (AMT) on stash */
want_vtbl_ovrld,
/* regdatum 'd' Regex match position data element */
want_vtbl_regdatum,
/* envelem 'e' %ENV hash element */
want_vtbl_envelem,
/* fm 'f' Formline ('compiled' format) */
want_vtbl_regexp | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC,
/* regex_global 'g' m//g target */
want_vtbl_mglob | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC,
/* hintselem 'h' %^H hash element */
want_vtbl_hintselem,
/* isaelem 'i' @ISA array element */
want_vtbl_isaelem,
0,
/* nkeys 'k' scalar(keys()) lvalue */
want_vtbl_nkeys | PERL_MAGIC_VALUE_MAGIC,
/* dbline 'l' Debugger %_<filename element */
want_vtbl_dbline,
0,
0,
/* collxfrm 'o' Locale transformation */
want_vtbl_collxfrm | PERL_MAGIC_VALUE_MAGIC,
/* tiedelem 'p' Tied array or hash element */
want_vtbl_packelem,
/* tiedscalar 'q' Tied scalar or handle */
want_vtbl_packelem,
/* qr 'r' Precompiled qr// regex */
want_vtbl_regexp | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC,
/* sigelem 's' %SIG hash element */
want_vtbl_sigelem,
/* taint 't' Taintedness */
want_vtbl_taint | PERL_MAGIC_VALUE_MAGIC,
0,
/* vec 'v' vec() lvalue */
want_vtbl_vec | PERL_MAGIC_VALUE_MAGIC,
/* utf8 'w' Cached UTF-8 information */
want_vtbl_utf8 | PERL_MAGIC_VALUE_MAGIC,
/* substr 'x' substr() lvalue */
want_vtbl_substr | PERL_MAGIC_VALUE_MAGIC,
/* defelem 'y' Shadow "foreach" iterator variable / smart parameter vivification */
want_vtbl_defelem | PERL_MAGIC_VALUE_MAGIC,
0,
0,
0,
0,
/* ext '~' Available for use by extensions */
magic_vtable_max | PERL_MAGIC_READONLY_ACCEPTABLE,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
}

View file

@ -0,0 +1,92 @@
/* -*- buffer-read-only: t -*-
*
* mg_raw.h
* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
* This file is built by regen/mg_vtable.pl.
* Any changes made here will be lost!
*/
{ '\0', "want_vtbl_sv | PERL_MAGIC_READONLY_ACCEPTABLE",
"/* sv '\\0' Special scalar variable */" },
{ '#', "want_vtbl_arylen | PERL_MAGIC_VALUE_MAGIC",
"/* arylen '#' Array length ($#ary) */" },
{ '%', "magic_vtable_max | PERL_MAGIC_VALUE_MAGIC",
"/* rhash '%' Extra data for restricted hashes */" },
{ '*', "want_vtbl_debugvar",
"/* debugvar '*' $DB::single, signal, trace vars */" },
{ '.', "want_vtbl_pos | PERL_MAGIC_VALUE_MAGIC",
"/* pos '.' pos() lvalue */" },
{ ':', "magic_vtable_max | PERL_MAGIC_VALUE_MAGIC",
"/* symtab ':' Extra data for symbol tables */" },
{ '<', "want_vtbl_backref | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC",
"/* backref '<' For weak ref data */" },
{ '@', "magic_vtable_max | PERL_MAGIC_VALUE_MAGIC",
"/* arylen_p '@' To move arylen out of XPVAV */" },
{ 'B', "want_vtbl_regexp | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC",
"/* bm 'B' Boyer-Moore (fast string search) */" },
{ 'c', "want_vtbl_ovrld",
"/* overload_table 'c' Holds overload table (AMT) on stash */" },
{ 'D', "want_vtbl_regdata",
"/* regdata 'D' Regex match position data (@+ and @- vars) */" },
{ 'd', "want_vtbl_regdatum",
"/* regdatum 'd' Regex match position data element */" },
{ 'E', "want_vtbl_env",
"/* env 'E' %ENV hash */" },
{ 'e', "want_vtbl_envelem",
"/* envelem 'e' %ENV hash element */" },
{ 'f', "want_vtbl_regexp | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC",
"/* fm 'f' Formline ('compiled' format) */" },
{ 'g', "want_vtbl_mglob | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC",
"/* regex_global 'g' m//g target */" },
{ 'H', "want_vtbl_hints",
"/* hints 'H' %^H hash */" },
{ 'h', "want_vtbl_hintselem",
"/* hintselem 'h' %^H hash element */" },
{ 'I', "want_vtbl_isa",
"/* isa 'I' @ISA array */" },
{ 'i', "want_vtbl_isaelem",
"/* isaelem 'i' @ISA array element */" },
{ 'k', "want_vtbl_nkeys | PERL_MAGIC_VALUE_MAGIC",
"/* nkeys 'k' scalar(keys()) lvalue */" },
{ 'L', "magic_vtable_max",
"/* dbfile 'L' Debugger %_<filename */" },
{ 'l', "want_vtbl_dbline",
"/* dbline 'l' Debugger %_<filename element */" },
{ 'o', "want_vtbl_collxfrm | PERL_MAGIC_VALUE_MAGIC",
"/* collxfrm 'o' Locale transformation */" },
{ 'P', "want_vtbl_pack | PERL_MAGIC_VALUE_MAGIC",
"/* tied 'P' Tied array or hash */" },
{ 'p', "want_vtbl_packelem",
"/* tiedelem 'p' Tied array or hash element */" },
{ 'q', "want_vtbl_packelem",
"/* tiedscalar 'q' Tied scalar or handle */" },
{ 'r', "want_vtbl_regexp | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC",
"/* qr 'r' Precompiled qr// regex */" },
{ 'S', "magic_vtable_max",
"/* sig 'S' %SIG hash */" },
{ 's', "want_vtbl_sigelem",
"/* sigelem 's' %SIG hash element */" },
{ 't', "want_vtbl_taint | PERL_MAGIC_VALUE_MAGIC",
"/* taint 't' Taintedness */" },
{ 'U', "want_vtbl_uvar",
"/* uvar 'U' Available for use by extensions */" },
{ 'V', "magic_vtable_max | PERL_MAGIC_VALUE_MAGIC",
"/* vstring 'V' SV was vstring literal */" },
{ 'v', "want_vtbl_vec | PERL_MAGIC_VALUE_MAGIC",
"/* vec 'v' vec() lvalue */" },
{ 'w', "want_vtbl_utf8 | PERL_MAGIC_VALUE_MAGIC",
"/* utf8 'w' Cached UTF-8 information */" },
{ 'x', "want_vtbl_substr | PERL_MAGIC_VALUE_MAGIC",
"/* substr 'x' substr() lvalue */" },
{ 'Y', "want_vtbl_nonelem | PERL_MAGIC_VALUE_MAGIC",
"/* nonelem 'Y' Array element that does not exist */" },
{ 'y', "want_vtbl_defelem | PERL_MAGIC_VALUE_MAGIC",
"/* defelem 'y' Shadow \"foreach\" iterator variable / smart parameter vivification */" },
{ '\\', "want_vtbl_lvref",
"/* lvref '\\' Lvalue reference constructor */" },
{ ']', "want_vtbl_checkcall | PERL_MAGIC_VALUE_MAGIC",
"/* checkcall ']' Inlining/mutation of call to this CV */" },
{ '~', "magic_vtable_max | PERL_MAGIC_READONLY_ACCEPTABLE",
"/* ext '~' Available for use by extensions */" },
/* ex: set ro: */

View file

@ -0,0 +1,239 @@
/* -*- buffer-read-only: t -*-
*
* mg_vtable.h
* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
* This file is built by regen/mg_vtable.pl.
* Any changes made here will be lost!
*/
/* These constants should be used in preference to raw characters
* when using magic. Note that some perl guts still assume
* certain character properties of these constants, namely that
* isUPPER() and toLOWER() may do useful mappings.
*/
#define PERL_MAGIC_sv '\0' /* Special scalar variable */
#define PERL_MAGIC_arylen '#' /* Array length ($#ary) */
#define PERL_MAGIC_rhash '%' /* Extra data for restricted hashes */
#define PERL_MAGIC_debugvar '*' /* $DB::single, signal, trace vars */
#define PERL_MAGIC_pos '.' /* pos() lvalue */
#define PERL_MAGIC_symtab ':' /* Extra data for symbol tables */
#define PERL_MAGIC_backref '<' /* For weak ref data */
#define PERL_MAGIC_arylen_p '@' /* To move arylen out of XPVAV */
#define PERL_MAGIC_bm 'B' /* Boyer-Moore (fast string search) */
#define PERL_MAGIC_overload_table 'c' /* Holds overload table (AMT) on stash */
#define PERL_MAGIC_regdata 'D' /* Regex match position data
(@+ and @- vars) */
#define PERL_MAGIC_regdatum 'd' /* Regex match position data element */
#define PERL_MAGIC_env 'E' /* %ENV hash */
#define PERL_MAGIC_envelem 'e' /* %ENV hash element */
#define PERL_MAGIC_fm 'f' /* Formline ('compiled' format) */
#define PERL_MAGIC_regex_global 'g' /* m//g target */
#define PERL_MAGIC_hints 'H' /* %^H hash */
#define PERL_MAGIC_hintselem 'h' /* %^H hash element */
#define PERL_MAGIC_isa 'I' /* @ISA array */
#define PERL_MAGIC_isaelem 'i' /* @ISA array element */
#define PERL_MAGIC_nkeys 'k' /* scalar(keys()) lvalue */
#define PERL_MAGIC_dbfile 'L' /* Debugger %_<filename */
#define PERL_MAGIC_dbline 'l' /* Debugger %_<filename element */
#define PERL_MAGIC_shared 'N' /* Shared between threads */
#define PERL_MAGIC_shared_scalar 'n' /* Shared between threads */
#define PERL_MAGIC_collxfrm 'o' /* Locale transformation */
#define PERL_MAGIC_tied 'P' /* Tied array or hash */
#define PERL_MAGIC_tiedelem 'p' /* Tied array or hash element */
#define PERL_MAGIC_tiedscalar 'q' /* Tied scalar or handle */
#define PERL_MAGIC_qr 'r' /* Precompiled qr// regex */
#define PERL_MAGIC_sig 'S' /* %SIG hash */
#define PERL_MAGIC_sigelem 's' /* %SIG hash element */
#define PERL_MAGIC_taint 't' /* Taintedness */
#define PERL_MAGIC_uvar 'U' /* Available for use by extensions */
#define PERL_MAGIC_uvar_elem 'u' /* Reserved for use by extensions */
#define PERL_MAGIC_vstring 'V' /* SV was vstring literal */
#define PERL_MAGIC_vec 'v' /* vec() lvalue */
#define PERL_MAGIC_utf8 'w' /* Cached UTF-8 information */
#define PERL_MAGIC_substr 'x' /* substr() lvalue */
#define PERL_MAGIC_nonelem 'Y' /* Array element that does not exist */
#define PERL_MAGIC_defelem 'y' /* Shadow "foreach" iterator variable /
smart parameter vivification */
#define PERL_MAGIC_lvref '\\' /* Lvalue reference constructor */
#define PERL_MAGIC_checkcall ']' /* Inlining/mutation of call to this CV */
#define PERL_MAGIC_ext '~' /* Available for use by extensions */
enum { /* pass one of these to get_vtbl */
want_vtbl_arylen,
want_vtbl_arylen_p,
want_vtbl_backref,
want_vtbl_checkcall,
want_vtbl_collxfrm,
want_vtbl_dbline,
want_vtbl_debugvar,
want_vtbl_defelem,
want_vtbl_env,
want_vtbl_envelem,
want_vtbl_hints,
want_vtbl_hintselem,
want_vtbl_isa,
want_vtbl_isaelem,
want_vtbl_lvref,
want_vtbl_mglob,
want_vtbl_nkeys,
want_vtbl_nonelem,
want_vtbl_ovrld,
want_vtbl_pack,
want_vtbl_packelem,
want_vtbl_pos,
want_vtbl_regdata,
want_vtbl_regdatum,
want_vtbl_regexp,
want_vtbl_sigelem,
want_vtbl_substr,
want_vtbl_sv,
want_vtbl_taint,
want_vtbl_utf8,
want_vtbl_uvar,
want_vtbl_vec,
magic_vtable_max
};
#ifdef DOINIT
EXTCONST char * const PL_magic_vtable_names[magic_vtable_max] = {
"arylen",
"arylen_p",
"backref",
"checkcall",
"collxfrm",
"dbline",
"debugvar",
"defelem",
"env",
"envelem",
"hints",
"hintselem",
"isa",
"isaelem",
"lvref",
"mglob",
"nkeys",
"nonelem",
"ovrld",
"pack",
"packelem",
"pos",
"regdata",
"regdatum",
"regexp",
"sigelem",
"substr",
"sv",
"taint",
"utf8",
"uvar",
"vec"
};
#else
EXTCONST char * const PL_magic_vtable_names[magic_vtable_max];
#endif
/* These all need to be 0, not NULL, as NULL can be (void*)0, which is a
* pointer to data, whereas we're assigning pointers to functions, which are
* not the same beast. ANSI doesn't allow the assignment from one to the other.
* (although most, but not all, compilers are prepared to do it)
*/
/* order is:
get
set
len
clear
free
copy
dup
local
*/
#ifdef DOINIT
EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = {
{ (int (*)(pTHX_ SV *, MAGIC *))Perl_magic_getarylen, Perl_magic_setarylen, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, Perl_magic_cleararylen_p, Perl_magic_freearylen_p, 0, 0, 0 },
{ 0, 0, 0, 0, Perl_magic_killbackrefs, 0, 0, 0 },
{ 0, 0, 0, 0, 0, Perl_magic_copycallchecker, 0, 0 },
#ifdef USE_LOCALE_COLLATE
{ 0, Perl_magic_setcollxfrm, 0, 0, 0, 0, 0, 0 },
#else
{ 0, 0, 0, 0, 0, 0, 0, 0 },
#endif
{ 0, Perl_magic_setdbline, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_getdebugvar, Perl_magic_setdebugvar, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_getdefelem, Perl_magic_setdefelem, 0, 0, 0, 0, 0, 0 },
{ 0, Perl_magic_set_all_env, 0, Perl_magic_clear_all_env, 0, 0, 0, 0 },
{ 0, Perl_magic_setenv, 0, Perl_magic_clearenv, 0, 0, 0, 0 },
{ 0, 0, 0, Perl_magic_clearhints, 0, 0, 0, 0 },
{ 0, Perl_magic_sethint, 0, Perl_magic_clearhint, 0, 0, 0, 0 },
{ 0, Perl_magic_setisa, 0, Perl_magic_clearisa, 0, 0, 0, 0 },
{ 0, Perl_magic_setisa, 0, 0, 0, 0, 0, 0 },
{ 0, Perl_magic_setlvref, 0, 0, 0, 0, 0, 0 },
{ 0, Perl_magic_setmglob, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_getnkeys, Perl_magic_setnkeys, 0, 0, 0, 0, 0, 0 },
{ 0, Perl_magic_setnonelem, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, Perl_magic_freeovrld, 0, 0, 0 },
{ 0, 0, Perl_magic_sizepack, Perl_magic_wipepack, 0, 0, 0, 0 },
{ Perl_magic_getpack, Perl_magic_setpack, 0, Perl_magic_clearpack, 0, 0, 0, 0 },
{ Perl_magic_getpos, Perl_magic_setpos, 0, 0, 0, 0, 0, 0 },
{ 0, 0, Perl_magic_regdata_cnt, 0, 0, 0, 0, 0 },
{ Perl_magic_regdatum_get, Perl_magic_regdatum_set, 0, 0, 0, 0, 0, 0 },
{ 0, Perl_magic_setregexp, 0, 0, 0, 0, 0, 0 },
#ifndef PERL_MICRO
{ Perl_magic_getsig, Perl_magic_setsig, 0, Perl_magic_clearsig, 0, 0, 0, 0 },
#else
{ 0, 0, 0, 0, 0, 0, 0, 0 },
#endif
{ Perl_magic_getsubstr, Perl_magic_setsubstr, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_get, Perl_magic_set, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_gettaint, Perl_magic_settaint, 0, 0, 0, 0, 0, 0 },
{ 0, Perl_magic_setutf8, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_getuvar, Perl_magic_setuvar, 0, 0, 0, 0, 0, 0 },
{ Perl_magic_getvec, Perl_magic_setvec, 0, 0, 0, 0, 0, 0 }
};
#else
EXT_MGVTBL PL_magic_vtables[magic_vtable_max];
#endif
#define want_vtbl_bm want_vtbl_regexp
#define want_vtbl_fm want_vtbl_regexp
#define PL_vtbl_arylen PL_magic_vtables[want_vtbl_arylen]
#define PL_vtbl_arylen_p PL_magic_vtables[want_vtbl_arylen_p]
#define PL_vtbl_backref PL_magic_vtables[want_vtbl_backref]
#define PL_vtbl_bm PL_magic_vtables[want_vtbl_bm]
#define PL_vtbl_checkcall PL_magic_vtables[want_vtbl_checkcall]
#define PL_vtbl_collxfrm PL_magic_vtables[want_vtbl_collxfrm]
#define PL_vtbl_dbline PL_magic_vtables[want_vtbl_dbline]
#define PL_vtbl_debugvar PL_magic_vtables[want_vtbl_debugvar]
#define PL_vtbl_defelem PL_magic_vtables[want_vtbl_defelem]
#define PL_vtbl_env PL_magic_vtables[want_vtbl_env]
#define PL_vtbl_envelem PL_magic_vtables[want_vtbl_envelem]
#define PL_vtbl_fm PL_magic_vtables[want_vtbl_fm]
#define PL_vtbl_hints PL_magic_vtables[want_vtbl_hints]
#define PL_vtbl_hintselem PL_magic_vtables[want_vtbl_hintselem]
#define PL_vtbl_isa PL_magic_vtables[want_vtbl_isa]
#define PL_vtbl_isaelem PL_magic_vtables[want_vtbl_isaelem]
#define PL_vtbl_lvref PL_magic_vtables[want_vtbl_lvref]
#define PL_vtbl_mglob PL_magic_vtables[want_vtbl_mglob]
#define PL_vtbl_nkeys PL_magic_vtables[want_vtbl_nkeys]
#define PL_vtbl_nonelem PL_magic_vtables[want_vtbl_nonelem]
#define PL_vtbl_ovrld PL_magic_vtables[want_vtbl_ovrld]
#define PL_vtbl_pack PL_magic_vtables[want_vtbl_pack]
#define PL_vtbl_packelem PL_magic_vtables[want_vtbl_packelem]
#define PL_vtbl_pos PL_magic_vtables[want_vtbl_pos]
#define PL_vtbl_regdata PL_magic_vtables[want_vtbl_regdata]
#define PL_vtbl_regdatum PL_magic_vtables[want_vtbl_regdatum]
#define PL_vtbl_regexp PL_magic_vtables[want_vtbl_regexp]
#define PL_vtbl_sigelem PL_magic_vtables[want_vtbl_sigelem]
#define PL_vtbl_substr PL_magic_vtables[want_vtbl_substr]
#define PL_vtbl_sv PL_magic_vtables[want_vtbl_sv]
#define PL_vtbl_taint PL_magic_vtables[want_vtbl_taint]
#define PL_vtbl_utf8 PL_magic_vtables[want_vtbl_utf8]
#define PL_vtbl_uvar PL_magic_vtables[want_vtbl_uvar]
#define PL_vtbl_vec PL_magic_vtables[want_vtbl_vec]
/* ex: set ro: */

Binary file not shown.

View file

@ -0,0 +1,54 @@
/* mydtrace.h
*
* Copyright (C) 2008, 2010, 2011 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
* Provides macros that wrap the various DTrace probes we use. We add
* an extra level of wrapping to encapsulate the _ENABLED tests.
*/
#if defined(USE_DTRACE) && defined(PERL_CORE)
# include "perldtrace.h"
# define PERL_DTRACE_PROBE_ENTRY(cv) \
if (PERL_SUB_ENTRY_ENABLED()) \
Perl_dtrace_probe_call(aTHX_ cv, TRUE);
# define PERL_DTRACE_PROBE_RETURN(cv) \
if (PERL_SUB_ENTRY_ENABLED()) \
Perl_dtrace_probe_call(aTHX_ cv, FALSE);
# define PERL_DTRACE_PROBE_FILE_LOADING(name) \
if (PERL_SUB_ENTRY_ENABLED()) \
Perl_dtrace_probe_load(aTHX_ name, TRUE);
# define PERL_DTRACE_PROBE_FILE_LOADED(name) \
if (PERL_SUB_ENTRY_ENABLED()) \
Perl_dtrace_probe_load(aTHX_ name, FALSE);
# define PERL_DTRACE_PROBE_OP(op) \
if (PERL_OP_ENTRY_ENABLED()) \
Perl_dtrace_probe_op(aTHX_ op);
# define PERL_DTRACE_PROBE_PHASE(phase) \
if (PERL_OP_ENTRY_ENABLED()) \
Perl_dtrace_probe_phase(aTHX_ phase);
#else
/* NOPs */
# define PERL_DTRACE_PROBE_ENTRY(cv)
# define PERL_DTRACE_PROBE_RETURN(cv)
# define PERL_DTRACE_PROBE_FILE_LOADING(cv)
# define PERL_DTRACE_PROBE_FILE_LOADED(cv)
# define PERL_DTRACE_PROBE_OP(op)
# define PERL_DTRACE_PROBE_PHASE(phase)
#endif
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

View file

@ -0,0 +1,134 @@
/* nostdio.h
*
* Copyright (C) 1996, 2000, 2001, 2005, by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
/*
* Strong denial of stdio - make all stdio calls (we can think of) errors
*/
/* This is a 1st attempt to stop other include files pulling
in real <stdio.h>.
A more ambitious set of possible symbols can be found in
sfio.h (inside an _cplusplus gard).
It is completely pointless as we have already included it ourselves.
*/
#if !defined(_STDIO_H) && !defined(FILE) && !defined(_STDIO_INCLUDED) && !defined(__STDIO_LOADED)
#define _STDIO_H
#define _STDIO_INCLUDED
#define __STDIO_LOADED
struct _FILE;
#define FILE struct _FILE
#endif
#ifndef EBCDIC
#define _CANNOT "CANNOT"
#undef clearerr
#undef fclose
#undef fdopen
#undef feof
#undef ferror
#undef fflush
#undef fgetc
#undef fgetpos
#undef fgets
#undef fileno
#undef flockfile
#undef fopen
#undef fprintf
#undef fputc
#undef fputs
#undef fread
#undef freopen
#undef fscanf
#undef fseek
#undef fsetpos
#undef ftell
#undef ftrylockfile
#undef funlockfile
#undef fwrite
#undef getc
#undef getc_unlocked
#undef getw
#undef pclose
#undef popen
#undef putc
#undef putc_unlocked
#undef putw
#undef rewind
#undef setbuf
#undef setvbuf
#undef stderr
#undef stdin
#undef stdout
#undef tmpfile
#undef ungetc
#undef vfprintf
#undef printf
#define fprintf _CANNOT _fprintf_
#define printf _CANNOT _printf_
#define stdin _CANNOT _stdin_
#define stdout _CANNOT _stdout_
#define stderr _CANNOT _stderr_
#ifndef OS2
#define tmpfile() _CANNOT _tmpfile_
#endif
#define fclose(f) _CANNOT _fclose_
#define fflush(f) _CANNOT _fflush_
#define fopen(p,m) _CANNOT _fopen_
#define freopen(p,m,f) _CANNOT _freopen_
#define setbuf(f,b) _CANNOT _setbuf_
#define setvbuf(f,b,x,s) _CANNOT _setvbuf_
#define fscanf _CANNOT _fscanf_
#define vfprintf(f,fmt,a) _CANNOT _vfprintf_
#define fgetc(f) _CANNOT _fgetc_
#define fgets(s,n,f) _CANNOT _fgets_
#define fputc(c,f) _CANNOT _fputc_
#define fputs(s,f) _CANNOT _fputs_
#define getc(f) _CANNOT _getc_
#define putc(c,f) _CANNOT _putc_
#ifndef OS2
#define ungetc(c,f) _CANNOT _ungetc_
#endif
#define fread(b,s,c,f) _CANNOT _fread_
#define fwrite(b,s,c,f) _CANNOT _fwrite_
#define fgetpos(f,p) _CANNOT _fgetpos_
#define fseek(f,o,w) _CANNOT _fseek_
#define fsetpos(f,p) _CANNOT _fsetpos_
#define ftell(f) _CANNOT _ftell_
#define rewind(f) _CANNOT _rewind_
#define clearerr(f) _CANNOT _clearerr_
#define feof(f) _CANNOT _feof_
#define ferror(f) _CANNOT _ferror_
#define __filbuf(f) _CANNOT __filbuf_
#define __flsbuf(c,f) _CANNOT __flsbuf_
#define _filbuf(f) _CANNOT _filbuf_
#define _flsbuf(c,f) _CANNOT _flsbuf_
#define fdopen(fd,p) _CANNOT _fdopen_
#define fileno(f) _CANNOT _fileno_
#if defined(SFIO_VERSION) && SFIO_VERSION < 20000101L
#define flockfile(f) _CANNOT _flockfile_
#define ftrylockfile(f) _CANNOT _ftrylockfile_
#define funlockfile(f) _CANNOT _funlockfile_
#endif
#define getc_unlocked(f) _CANNOT _getc_unlocked_
#define putc_unlocked(c,f) _CANNOT _putc_unlocked_
#define popen(c,m) _CANNOT _popen_
#define getw(f) _CANNOT _getw_
#define putw(v,f) _CANNOT _putw_
#ifndef OS2
#define pclose(f) _CANNOT _pclose_
#endif
#endif /*not define EBCDIC */
/*
* ex: set ts=8 sts=4 sw=4 et:
*/

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,145 @@
/* op_reg_common.h
*
* Definitions common to by op.h and regexp.h
*
* Copyright (C) 2010, 2011 by Larry Wall and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
*/
/* These defines are used in both op.h and regexp.h The definitions use the
* shift form so that ext/B/Makefile.PL will pick them up.
*
* Data structures used in the two headers have common fields, and in fact one
* is copied onto the other. This makes it easy to keep them in sync */
/* This tells where the first of these bits is. Setting it to 0 saved cycles
* and memory. I (khw) think the code will work if changed back, but haven't
* tested it */
/* Make sure to update ext/re/re.pm when changing this! */
#ifndef RXf_PMf_STD_PMMOD_SHIFT /* Only expand #include of this file once */
#define RXf_PMf_STD_PMMOD_SHIFT 0
/* The bits need to be ordered so that the msixn are contiguous starting at bit
* RXf_PMf_STD_PMMOD_SHIFT, followed by the p. See STD_PAT_MODS and
* INT_PAT_MODS in regexp.h for the reason contiguity is needed */
/* Make sure to update lib/re.pm when changing these! */
/* Make sure you keep the pure PMf_ versions below in sync */
#define RXf_PMf_MULTILINE (1U << (RXf_PMf_STD_PMMOD_SHIFT+0)) /* /m */
#define RXf_PMf_SINGLELINE (1U << (RXf_PMf_STD_PMMOD_SHIFT+1)) /* /s */
#define RXf_PMf_FOLD (1U << (RXf_PMf_STD_PMMOD_SHIFT+2)) /* /i */
#define RXf_PMf_EXTENDED (1U << (RXf_PMf_STD_PMMOD_SHIFT+3)) /* /x */
#define RXf_PMf_EXTENDED_MORE (1U << (RXf_PMf_STD_PMMOD_SHIFT+4)) /* /xx */
#define RXf_PMf_NOCAPTURE (1U << (RXf_PMf_STD_PMMOD_SHIFT+5)) /* /n */
#define RXf_PMf_KEEPCOPY (1U << (RXf_PMf_STD_PMMOD_SHIFT+6)) /* /p */
/* The character set for the regex is stored in a field of more than one bit
* using an enum, for reasons of compactness and to ensure that the options are
* mutually exclusive */
/* Make sure to update ext/re/re.pm and regcomp.sym (as these are used as
* offsets for various node types, like POSIXD vs POSIXL, etc) when changing
* this! */
typedef enum {
REGEX_DEPENDS_CHARSET = 0,
REGEX_LOCALE_CHARSET,
REGEX_UNICODE_CHARSET,
REGEX_ASCII_RESTRICTED_CHARSET,
REGEX_ASCII_MORE_RESTRICTED_CHARSET
} regex_charset;
#define _RXf_PMf_CHARSET_SHIFT ((RXf_PMf_STD_PMMOD_SHIFT)+7)
#define RXf_PMf_CHARSET (7U << (_RXf_PMf_CHARSET_SHIFT)) /* 3 bits */
/* Manually decorate these functions here with gcc-style attributes just to
* avoid making the regex_charset typedef global, which it would need to be for
* proto.h to understand it */
PERL_STATIC_INLINE void
set_regex_charset(U32 * const flags, const regex_charset cs)
__attribute__nonnull__(1);
PERL_STATIC_INLINE void
set_regex_charset(U32 * const flags, const regex_charset cs)
{
/* Sets the character set portion of 'flags' to 'cs', which is a member of
* the above enum */
*flags &= ~RXf_PMf_CHARSET;
*flags |= (cs << _RXf_PMf_CHARSET_SHIFT);
}
PERL_STATIC_INLINE regex_charset
get_regex_charset(const U32 flags)
__attribute__warn_unused_result__;
PERL_STATIC_INLINE regex_charset
get_regex_charset(const U32 flags)
{
/* Returns the enum corresponding to the character set in 'flags' */
return (regex_charset) ((flags & RXf_PMf_CHARSET) >> _RXf_PMf_CHARSET_SHIFT);
}
#define RXf_PMf_STRICT (1U<<(RXf_PMf_STD_PMMOD_SHIFT+10))
#define _RXf_PMf_SHIFT_COMPILETIME (RXf_PMf_STD_PMMOD_SHIFT+11)
/*
Set in Perl_pmruntime if op_flags & OPf_SPECIAL, i.e. split. Will
be used by regex engines to check whether they should set
RXf_SKIPWHITE
*/
#define RXf_PMf_SPLIT (1U<<(RXf_PMf_STD_PMMOD_SHIFT+11))
/* Next available bit after the above. Name begins with '_' so won't be
* exported by B */
#define _RXf_PMf_SHIFT_NEXT (RXf_PMf_STD_PMMOD_SHIFT+12)
/* Mask of the above bits. These need to be transferred from op_pmflags to
* re->extflags during compilation */
#define RXf_PMf_COMPILETIME (RXf_PMf_MULTILINE|RXf_PMf_SINGLELINE|RXf_PMf_FOLD|RXf_PMf_EXTENDED|RXf_PMf_EXTENDED_MORE|RXf_PMf_KEEPCOPY|RXf_PMf_NOCAPTURE|RXf_PMf_CHARSET|RXf_PMf_STRICT)
#define RXf_PMf_FLAGCOPYMASK (RXf_PMf_COMPILETIME|RXf_PMf_SPLIT)
/* Temporary to get Jenkins happy again
* See thread starting at http://nntp.perl.org/group/perl.perl5.porters/220710
*/
#if 0
/* Exclude win32 because it can't cope with I32_MAX definition */
#ifndef WIN32
# if RXf_PMf_COMPILETIME > I32_MAX
# error RXf_PMf_COMPILETIME wont fit in arg2 field of eval node
# endif
#endif
#endif
/* These copies need to be numerical or ext/B/Makefile.PL won't think they are
* constants */
#define PMf_MULTILINE (1U<<0)
#define PMf_SINGLELINE (1U<<1)
#define PMf_FOLD (1U<<2)
#define PMf_EXTENDED (1U<<3)
#define PMf_EXTENDED_MORE (1U<<4)
#define PMf_NOCAPTURE (1U<<5)
#define PMf_KEEPCOPY (1U<<6)
#define PMf_CHARSET (7U<<7)
#define PMf_STRICT (1U<<10)
#define PMf_SPLIT (1U<<11)
#if PMf_MULTILINE != RXf_PMf_MULTILINE || PMf_SINGLELINE != RXf_PMf_SINGLELINE || PMf_FOLD != RXf_PMf_FOLD || PMf_EXTENDED != RXf_PMf_EXTENDED || PMf_EXTENDED_MORE != RXf_PMf_EXTENDED_MORE || PMf_KEEPCOPY != RXf_PMf_KEEPCOPY || PMf_SPLIT != RXf_PMf_SPLIT || PMf_CHARSET != RXf_PMf_CHARSET || PMf_NOCAPTURE != RXf_PMf_NOCAPTURE || PMf_STRICT != RXf_PMf_STRICT
# error RXf_PMf defines are wrong
#endif
/* Error check that haven't left something out of this. This isn't done
* directly in the #define because doing so confuses regcomp.pl.
* (2**n - 1) is n 1 bits, so the below gets the contiguous bits between the
* beginning and ending shifts */
#if RXf_PMf_COMPILETIME != (((1 << (_RXf_PMf_SHIFT_COMPILETIME))-1) \
& (~((1 << RXf_PMf_STD_PMMOD_SHIFT)-1)))
# error RXf_PMf_COMPILETIME is invalid
#endif
#endif /* Include only once */

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more