diff --git a/.gitignore b/.gitignore
index 93210c161..8c62f3f05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -68,3 +68,5 @@ dist/
# Macos artifacts
*.dmg
*.dmg.md5
+.DS_Store
+
diff --git a/scripts/make_drc_lvs_doc.sh b/scripts/make_drc_lvs_doc.sh
index 5394d476e..6d4f502c9 100755
--- a/scripts/make_drc_lvs_doc.sh
+++ b/scripts/make_drc_lvs_doc.sh
@@ -1,5 +1,11 @@
#!/bin/bash -e
+# Generates LVS and DRC documentation
+#
+# Run this script from a valid build below the repository root, e.g.
+# /build-debug. It needs to have a "klayout" binary in
+# current directory.
+
inst=$(realpath $(dirname $0))
scripts=${inst}/drc_lvs_doc
ld=$(realpath .)
diff --git a/scripts/make_stubs.sh b/scripts/make_stubs.sh
new file mode 100755
index 000000000..1df806a28
--- /dev/null
+++ b/scripts/make_stubs.sh
@@ -0,0 +1,57 @@
+#!/bin/bash -e
+
+# Generates LVS and DRC documentation
+#
+# Run this script from a valid build below the repository root, e.g.
+# /build-debug. It needs to have a "pymod" installation in
+# current directory.
+
+inst=$(realpath $(dirname $0))
+scripts=${inst}/drc_lvs_doc
+ld=$(realpath .)
+
+pymod="$ld/pymod"
+
+export LD_LIBRARY_PATH=$ld
+export PYTHONPATH=$pymod
+
+pymod_src=$ld/../src/pymod
+if ! [ -e $pymod_src ]; then
+ echo "*** ERROR: missing pymod sources ($pymod_src) - did you run the script from the build folder below the source tree?"
+ exit 1
+fi
+
+if ! [ -e $pymod ]; then
+ echo "*** ERROR: missing pymod folder ($pymod) - did you run the script from the build folder?"
+ exit 1
+fi
+
+python=
+for try_python in python python3; do
+ if $try_python -c "import klayout.tl" >/dev/null 2>&1; then
+ python=$try_python
+ fi
+done
+
+if [ "$python" = "" ]; then
+ echo "*** ERROR: no functional python or pymod installation found."
+ exit 1
+fi
+
+echo "Generating stubs for tl .."
+$python $inst/stubgen.py tl >$pymod_src/distutils_src/klayout/tlcore.pyi
+
+echo "Generating stubs for db .."
+$python $inst/stubgen.py db tl >$pymod_src/distutils_src/klayout/dbcore.pyi
+
+echo "Generating stubs for rdb .."
+$python $inst/stubgen.py rdb tl,db >$pymod_src/distutils_src/klayout/rdbcore.pyi
+
+echo "Generating stubs for lay .."
+$python $inst/stubgen.py lay tl,db,rdb >$pymod_src/distutils_src/klayout/laycore.pyi
+
+echo "Generating stubs for lib .."
+$python $inst/stubgen.py lib tl,db >$pymod_src/distutils_src/klayout/libcore.pyi
+
+echo "Done."
+
diff --git a/scripts/stubgen.py b/scripts/stubgen.py
new file mode 100644
index 000000000..98943562d
--- /dev/null
+++ b/scripts/stubgen.py
@@ -0,0 +1,465 @@
+""" Stub file generation routines.
+
+This module contains routines to generate stub files from klayout's python API.
+This uses the `tl` module of the API, which offers an introspection layer to
+the C-extension modules.
+"""
+
+from collections import Counter
+from copy import copy
+from dataclasses import dataclass, field
+from functools import wraps
+import functools
+from sys import argv
+from textwrap import indent
+from typing import Any, List, Optional, Tuple, Union
+import pya # initialize all modules
+import klayout.tl as ktl
+
+
+def qualified_name(_class: ktl.Class) -> str:
+ name = _class.name()
+ if _class.parent():
+ return f"{qualified_name(_class.parent())}.{name}"
+ else:
+ return name
+
+
+def superclass(_class: ktl.Class) -> str:
+ if _class.base():
+ return superclass(_class.base())
+ else:
+ return _class.name()
+
+
+def is_reserved_word(name: str) -> bool:
+ wordlist = [
+ "and",
+ "del",
+ "from",
+ "not",
+ "while",
+ "as",
+ "elif",
+ "global",
+ "or",
+ "with",
+ "assert",
+ "else",
+ "if",
+ "pass",
+ "yield",
+ "break",
+ "except",
+ "import",
+ "print",
+ "class",
+ "exec",
+ "in",
+ "raise",
+ "continue",
+ "finally",
+ "is",
+ "return",
+ "def",
+ "for",
+ "lambda",
+ "try",
+ "None",
+ ]
+ return name in wordlist
+
+
+_type_dict = dict()
+
+_type_dict[ktl.ArgType.TypeBool] = "bool"
+_type_dict[ktl.ArgType.TypeChar] = "str"
+_type_dict[ktl.ArgType.TypeDouble] = "float"
+_type_dict[ktl.ArgType.TypeFloat] = "float"
+_type_dict[ktl.ArgType.TypeInt] = "int"
+_type_dict[ktl.ArgType.TypeLong] = "int"
+_type_dict[ktl.ArgType.TypeLongLong] = "int"
+# _type_dict[ktl.ArgType.TypeMap] = None
+# _type_dict[ktl.ArgType.TypeObject] = None
+_type_dict[ktl.ArgType.TypeSChar] = "str"
+_type_dict[ktl.ArgType.TypeShort] = "int"
+_type_dict[ktl.ArgType.TypeString] = "str"
+_type_dict[ktl.ArgType.TypeByteArray] = "bytes"
+_type_dict[ktl.ArgType.TypeUChar] = "str"
+_type_dict[ktl.ArgType.TypeUInt] = "int"
+_type_dict[ktl.ArgType.TypeULong] = "int"
+_type_dict[ktl.ArgType.TypeULongLong] = "int"
+_type_dict[ktl.ArgType.TypeUShort] = "int"
+_type_dict[ktl.ArgType.TypeVar] = "Any"
+# _type_dict[ktl.ArgType.TypeVector] = None
+_type_dict[ktl.ArgType.TypeVoid] = "None"
+_type_dict[ktl.ArgType.TypeVoidPtr] = "None"
+
+
+def _translate_type(
+ arg_type: ktl.ArgType, within_class: ktl.Class, is_return=False
+) -> str:
+ """Translates klayout's C-type to a type in Python.
+
+ This function is equivalent to the `type_to_s` in `pyaModule.cc`.
+ See also `type_to_s` in `layGSIHelpProvider.cc`"""
+
+ py_str: str = ""
+ if arg_type.type() == ktl.ArgType.TypeObject:
+ if within_class.module() and arg_type.cls().module() != within_class.module():
+ py_str = arg_type.cls().module() + "." + qualified_name(arg_type.cls())
+ else:
+ py_str = qualified_name(arg_type.cls())
+ elif arg_type.type() == ktl.ArgType.TypeMap:
+ inner_key = _translate_type(arg_type.inner_k(), within_class, is_return)
+ inner_val = _translate_type(arg_type.inner(), within_class, is_return)
+ py_str = f"Dict[{inner_key}, {inner_val}]"
+ elif arg_type.type() == ktl.ArgType.TypeVector:
+ if is_return:
+ py_str = f"List[{_translate_type(arg_type.inner(), within_class, is_return)}]"
+ else:
+ py_str = f"Sequence[{_translate_type(arg_type.inner(), within_class, is_return)}]"
+ else:
+ py_str = _type_dict[arg_type.type()]
+
+ if arg_type.is_iter():
+ py_str = f"Iterator[{py_str}]"
+ if arg_type.has_default():
+ py_str = f"Optional[{py_str}] = ..."
+ return py_str
+
+
+@dataclass
+class Stub:
+ signature: str
+ name: Any
+ docstring: str
+ indent_docstring: bool = True
+ child_stubs: List["Stub"] = field(default_factory=list)
+ decorator: str = ""
+
+ def __eq__(self, __o: object) -> bool:
+ if not isinstance(__o, Stub):
+ return False
+ return (
+ self.signature == __o.signature
+ and self.child_stubs == __o.child_stubs
+ and self.decorator == __o.decorator
+ )
+
+ def __lt__(self, other: "Stub") -> bool:
+ # mypy complains if an overload with float happens before int
+ self_signature = self.signature.replace(": int", "0").replace(": float", "1")
+ other_signature = other.signature.replace(": int", "0").replace(": float", "1")
+
+ self_sortkey = self.name, len(self.signature.split(",")), self_signature
+ other_sortkey = other.name, len(other.signature.split(",")), other_signature
+ return self_sortkey < other_sortkey
+
+ def __hash__(self):
+ return hash(self.format_stub(include_docstring=False))
+
+ def format_stub(self, include_docstring=True):
+ lines = []
+ lines.extend(self.decorator.splitlines())
+ if self.indent_docstring: # all but properties
+ if include_docstring or len(self.child_stubs) > 0:
+ lines.append(self.signature + ":")
+ else:
+ lines.append(self.signature + ": ...")
+ else:
+ lines.append(self.signature)
+
+ stub_str = "\n".join(lines)
+
+ lines = []
+ lines.append('r"""')
+ lines.extend(self.docstring.splitlines())
+ lines.append('"""')
+ doc_str = "\n".join(lines)
+
+ # indent only if it is required (methods, not properties)
+ if self.indent_docstring:
+ doc_str = indent(doc_str, " " * 4)
+
+ if include_docstring:
+ stub_str += "\n"
+ stub_str += doc_str
+
+ for stub in self.child_stubs:
+ stub_str += "\n"
+ stub_str += indent(
+ stub.format_stub(include_docstring=include_docstring), " " * 4
+ )
+
+ return stub_str
+
+
+@dataclass(eq=False)
+class MethodStub(Stub):
+ indent_docstring: bool = True
+
+
+@dataclass(eq=False)
+class PropertyStub(Stub):
+ indent_docstring: bool = False
+
+
+@dataclass(eq=False)
+class ClassStub(Stub):
+ indent_docstring: bool = True
+
+
+def get_py_child_classes(c: ktl.Class):
+ for c_child in c.each_child_class():
+ yield c_child
+
+
+def get_py_methods(
+ c: ktl.Class,
+) -> List[Stub]:
+
+ translate_arg_type = functools.partial(_translate_type, within_class=c, is_return=False)
+ translate_ret_type = functools.partial(_translate_type, within_class=c, is_return=True)
+
+ def _get_arglist(
+ m: ktl.Method, self_str: str
+ ) -> List[Tuple[str, Optional[ktl.ArgType]]]:
+ args: List[Tuple[str, Optional[ktl.ArgType]]] = [(self_str, None)]
+ for i, a in enumerate(m.each_argument()):
+ argname = a.name()
+ if is_reserved_word(argname):
+ argname += "_"
+ elif not argname:
+ argname = f"arg{i}"
+ args.append((argname, a))
+ return args
+
+ def _format_args(arglist: List[Tuple[str, Optional[str]]]):
+ args = []
+ for argname, argtype in arglist:
+ if argtype:
+ args.append(f"{argname}: {argtype}")
+ else:
+ args.append(argname)
+ return ", ".join(args)
+
+ def format_args(m: ktl.Method, self_str: str = "self") -> str:
+ arg_list = _get_arglist(m, self_str=self_str)
+ new_arglist: List[Tuple[str, Optional[str]]] = []
+ for argname, a in arg_list:
+ if a:
+ new_arglist.append((argname, translate_arg_type(a)))
+ else:
+ new_arglist.append((argname, None))
+ return _format_args(new_arglist)
+
+ # Collect all properties here
+ properties: List[Stub] = list()
+
+ # Extract all instance properties
+ for f in c.python_properties(False):
+ name = f.getter().name()
+ getter = None
+ if len(f.getter().methods()) > 0:
+ getter = f.getter().methods()[0]
+ setter = None
+ if len(f.setter().methods()) > 0:
+ setter = f.setter().methods()[0]
+ if getter and setter:
+ # Full property
+ ret_type = translate_ret_type(getter.ret_type())
+ doc = "Getter:\n" + getter.doc() + "\nSetter:\n" + setter.doc()
+ properties.append(
+ PropertyStub(
+ decorator="",
+ signature=f"{name}: {ret_type}",
+ name=name,
+ docstring=doc,
+ )
+ )
+ elif getter:
+ # Only getter
+ ret_type = translate_ret_type(getter.ret_type())
+ doc = getter.doc()
+ properties.append(
+ MethodStub(
+ decorator="@property",
+ signature=f"def {name}(self) -> {ret_type}",
+ name=name,
+ docstring=doc,
+ )
+ )
+ elif setter:
+ # Only setter
+ doc = "WARNING: This variable can only be set, not retrieved.\n" + setter.doc()
+ properties.append(
+ MethodStub(
+ decorator="@property",
+ signature=f"def {name}(self) -> None",
+ name=name,
+ docstring=doc,
+ )
+ )
+
+ # Extract all class properties (TODO: setters not supported currently)
+ for f in c.python_properties(True):
+ name = f.getter().name()
+ if len(f.getter().methods()) > 0:
+ getter = f.getter().methods()[0]
+ ret_type = translate_ret_type(getter.ret_type())
+ doc = getter.doc()
+ properties.append(
+ PropertyStub(
+ decorator="",
+ signature=f"{name}: ClassVar[{ret_type}]",
+ name=name,
+ docstring=doc,
+ )
+ )
+
+ # Extract all classmethods
+ classmethods: List[Stub] = list()
+
+ for f in c.python_methods(True):
+
+ name = f.name()
+
+ decorator = ""
+ if len(f.methods()) > 1:
+ decorator = "@overload\n"
+ decorator += "@classmethod"
+
+ for m in f.methods():
+ ret_type = translate_ret_type(m.ret_type())
+ classmethods.append(
+ MethodStub(
+ decorator=decorator,
+ signature=f"def {name}({format_args(m, 'cls')}) -> {ret_type}",
+ name=name,
+ docstring=m.doc(),
+ )
+ )
+
+ # Extract bound methods
+ boundmethods: List[Stub] = list()
+
+ for f in c.python_methods(False):
+
+ name = f.name()
+
+ decorator = ""
+ if len(f.methods()) > 1:
+ decorator = "@overload\n"
+
+ for m in f.methods():
+
+ if name == "__init__":
+ ret_type = "None"
+ else:
+ ret_type = translate_ret_type(m.ret_type())
+
+ arg_list = _get_arglist(m, "self")
+ # TODO: fix type errors
+ # Exceptions:
+ # For X.__eq__(self, a:X), treat second argument as type object instead of X
+ if name in ("__eq__", "__ne__"):
+ arg_list[1] = arg_list[1][0], "object"
+ # X._assign(self, other:X), mypy complains if _assign is defined at base class.
+ # We can't specialize other in this case.
+ elif name in ("_assign", "assign"):
+ assert arg_list[1][1] is not None
+ assert arg_list[1][1].type() == ktl.ArgType.TypeObject
+ arg_list[1] = arg_list[1][0], superclass(arg_list[1][1].cls())
+ else:
+ new_arg_list = []
+ for argname, a in arg_list:
+ if a:
+ new_arg_list.append((argname, translate_arg_type(a)))
+ else:
+ new_arg_list.append((argname, a))
+ arg_list = new_arg_list
+ formatted_args = _format_args(arg_list)
+
+ boundmethods.append(
+ MethodStub(
+ decorator=decorator,
+ signature=f"def {name}({formatted_args}) -> {ret_type}",
+ name=name,
+ docstring=m.doc(),
+ )
+ )
+
+ boundmethods = sorted(boundmethods)
+ properties = sorted(properties)
+ classmethods = sorted(classmethods)
+
+ return_list: List[Stub] = properties + classmethods + boundmethods
+
+ return return_list
+
+
+def get_class_stub(
+ c: ktl.Class,
+ ignore: List[ktl.Class] = None,
+ module: str = "",
+) -> ClassStub:
+ base = ""
+ if c.base():
+ base = f"({c.base().name()})"
+ if c.module() != module:
+ full_name = c.module() + "." + c.name()
+ else:
+ full_name = c.name()
+ _cstub = ClassStub(
+ signature="class " + full_name + base, docstring=c.doc(), name=full_name
+ )
+ child_attributes = get_py_methods(c)
+ for child_c in c.each_child_class():
+ _cstub.child_stubs.append(
+ get_class_stub(
+ child_c,
+ ignore=ignore,
+ module=c.module(),
+ )
+ )
+ for stub in child_attributes:
+ _cstub.child_stubs.append(stub)
+ return _cstub
+
+
+def get_classes(module: str) -> List[ktl.Class]:
+ _classes = []
+ for c in ktl.Class.each_class():
+ if c.module() != module:
+ continue
+ _classes.append(c)
+ return _classes
+
+
+def get_module_stubs(module: str) -> List[ClassStub]:
+ _stubs = []
+ _classes = get_classes(module)
+ for c in _classes:
+ _cstub = get_class_stub(c, ignore=_classes, module=module)
+ _stubs.append(_cstub)
+ return _stubs
+
+
+def print_mod(module, dependencies):
+ print("from typing import Any, ClassVar, Dict, Sequence, List, Iterator, Optional")
+ print("from typing import overload")
+ for dep in dependencies:
+ print(f"import klayout.{dep} as {dep}")
+ for stub in get_module_stubs(module):
+ print(stub.format_stub(include_docstring=True) + "\n")
+
+
+if __name__ == "__main__":
+ if len(argv) < 2:
+ print("Specity module in argument")
+ exit(1)
+ if len(argv) == 2:
+ print_mod(argv[1], [])
+ else:
+ print_mod(argv[1], argv[2].split(","))
diff --git a/setup.py b/setup.py
index 1c4871bf6..8e20b62c4 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,3 @@
-
"""
KLayout standalone Python module setup script
@@ -55,6 +54,7 @@ and won't find them. So we need to take away the path with
"-Wl,-soname" on Linux (see Config.link_args).
"""
+from typing import List
from setuptools import setup, Distribution, find_packages
from setuptools.extension import Extension, Library
import glob
@@ -70,17 +70,28 @@ import multiprocessing
# for Jenkins we do not want to be greedy
multicore = os.getenv("KLAYOUT_SETUP_MULTICORE")
if multicore:
- N_cores = int(multicore)
+ N_cores = int(multicore)
else:
- N_cores = multiprocessing.cpu_count()
+ N_cores = multiprocessing.cpu_count()
# monkey-patch for parallel compilation
# from https://stackoverflow.com/questions/11013851/speeding-up-build-process-with-distutils
-def parallelCCompile(self, sources, output_dir=None, macros=None, include_dirs=None, debug=0, extra_preargs=None, extra_postargs=None, depends=None):
+def parallelCCompile(
+ self,
+ sources,
+ output_dir=None,
+ macros=None,
+ include_dirs=None,
+ debug=0,
+ extra_preargs=None,
+ extra_postargs=None,
+ depends=None,
+):
# those lines are copied from distutils.ccompiler.CCompiler directly
macros, objects, extra_postargs, pp_opts, build = self._setup_compile(
- output_dir, macros, include_dirs, sources, depends, extra_postargs)
+ output_dir, macros, include_dirs, sources, depends, extra_postargs
+ )
cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
# parallel code
@@ -104,6 +115,7 @@ def parallelCCompile(self, sources, output_dir=None, macros=None, include_dirs=N
print("Building", obj, "has failed. Trying again.")
else:
break
+
# convert to list, imap is evaluated on-demand
list(multiprocessing.pool.ThreadPool(N).map(_single_compile, objects))
return objects
@@ -112,6 +124,7 @@ def parallelCCompile(self, sources, output_dir=None, macros=None, include_dirs=N
# only if python version > 2.6, somehow the travis compiler hangs in 2.6
if sys.version_info[0] * 100 + sys.version_info[1] > 206:
import distutils.ccompiler
+
distutils.ccompiler.CCompiler.compile = parallelCCompile
@@ -119,7 +132,7 @@ if sys.version_info[0] * 100 + sys.version_info[1] > 206:
def quote_path(path):
# looks like disutils don't need path quoting in version >= 3.9:
if " " in path and sys.version_info[0] * 100 + sys.version_info[1] < 309:
- return "\"" + path + "\""
+ return '"' + path + '"'
else:
return path
@@ -127,6 +140,7 @@ def quote_path(path):
# TODO: delete (Obsolete)
# patch get_ext_filename
from distutils.command.build_ext import build_ext
+
_old_get_ext_filename = build_ext.get_ext_filename
@@ -137,8 +151,8 @@ def patched_get_ext_filename(self, ext_name):
"""
filename = _old_get_ext_filename(self, ext_name)
# Making sure this matches qmake's default extension .dylib, instead of .so
- if platform.system() == "Darwin" and '_dbpi' in ext_name:
- filename = filename.replace('.so', '.dylib')
+ if platform.system() == "Darwin" and "_dbpi" in ext_name:
+ filename = filename.replace(".so", ".dylib")
return filename
@@ -152,15 +166,18 @@ distutils.command.build_ext.build_ext.get_ext_filename = patched_get_ext_filenam
# hence the patch
from distutils.ccompiler import CCompiler
+
old_library_filename = CCompiler.library_filename
-def patched_library_filename(self, libname, lib_type='static', # or 'shared'
- strip_dir=0, output_dir=''):
- if platform.system() == "Darwin" and '_dbpi' in libname:
- lib_type = 'dylib'
- return old_library_filename(self, libname, lib_type=lib_type,
- strip_dir=strip_dir, output_dir=output_dir)
+def patched_library_filename(
+ self, libname, lib_type="static", strip_dir=0, output_dir="" # or 'shared'
+):
+ if platform.system() == "Darwin" and "_dbpi" in libname:
+ lib_type = "dylib"
+ return old_library_filename(
+ self, libname, lib_type=lib_type, strip_dir=strip_dir, output_dir=output_dir
+ )
distutils.ccompiler.CCompiler.library_filename = patched_library_filename
@@ -172,16 +189,36 @@ distutils.ccompiler.CCompiler.library_filename = patched_library_filename
# link a shared object on Linux, but a static library and patches distutils
# for this ... We're patching this back now.
+
def always_link_shared_object(
- self, objects, output_libname, output_dir=None, libraries=None,
- library_dirs=None, runtime_library_dirs=None, export_symbols=None,
- debug=0, extra_preargs=None, extra_postargs=None, build_temp=None,
- target_lang=None):
+ self,
+ objects,
+ output_libname,
+ output_dir=None,
+ libraries=None,
+ library_dirs=None,
+ runtime_library_dirs=None,
+ export_symbols=None,
+ debug=0,
+ extra_preargs=None,
+ extra_postargs=None,
+ build_temp=None,
+ target_lang=None,
+):
self.link(
- self.SHARED_LIBRARY, objects, output_libname,
- output_dir, libraries, library_dirs, runtime_library_dirs,
- export_symbols, debug, extra_preargs, extra_postargs,
- build_temp, target_lang
+ self.SHARED_LIBRARY,
+ objects,
+ output_libname,
+ output_dir,
+ libraries,
+ library_dirs,
+ runtime_library_dirs,
+ export_symbols,
+ debug,
+ extra_preargs,
+ extra_postargs,
+ build_temp,
+ target_lang,
)
@@ -201,7 +238,7 @@ class Config(object):
# TODO: is this really how we get the build paths?
- build_cmd = Distribution().get_command_obj('build')
+ build_cmd = Distribution().get_command_obj("build")
build_cmd.finalize_options()
self.build_platlib = build_cmd.build_platlib
self.build_temp = build_cmd.build_temp
@@ -212,7 +249,7 @@ class Config(object):
else:
self.build_temp = os.path.join(self.build_temp, "Release")
- build_ext_cmd = Distribution().get_command_obj('build_ext')
+ build_ext_cmd = Distribution().get_command_obj("build_ext")
build_ext_cmd.initialize_options()
build_ext_cmd.setup_shlib_compiler()
@@ -230,7 +267,7 @@ class Config(object):
This code was extracted from the source in setuptools.command.build_ext.build_ext
"""
libtype = setuptools.command.build_ext.libtype
- full_mod = self.root + '.' + mod
+ full_mod = self.root + "." + mod
if is_lib is True:
# Here we are guessing it is a library and that the filename
# is to be computed by shlib_compiler.
@@ -246,8 +283,8 @@ class Config(object):
ext_filename = os.path.basename(ext_path)
# Exception for database plugins, which will always be dylib.
- if platform.system() == "Darwin" and '_dbpi' in mod:
- ext_filename = ext_filename.replace('.so', '.dylib')
+ if platform.system() == "Darwin" and "_dbpi" in mod:
+ ext_filename = ext_filename.replace(".so", ".dylib")
return ext_filename
def path_of(self, mod, mod_src_path):
@@ -265,20 +302,25 @@ class Config(object):
"""
Gets additional compiler arguments
"""
+ args: List[str]
if platform.system() == "Windows":
bits = os.getenv("KLAYOUT_BITS")
if bits:
- return [quote_path("-I" + os.path.join(bits, "zlib", "include")),
- quote_path("-I" + os.path.join(bits, "ptw", "include")),
- quote_path("-I" + os.path.join(bits, "png", "include")),
- quote_path("-I" + os.path.join(bits, "expat", "include")),
- quote_path("-I" + os.path.join(bits, "curl", "include"))]
+ args = [
+ quote_path("-I" + os.path.join(bits, "zlib", "include")),
+ quote_path("-I" + os.path.join(bits, "ptw", "include")),
+ quote_path("-I" + os.path.join(bits, "png", "include")),
+ quote_path("-I" + os.path.join(bits, "expat", "include")),
+ quote_path("-I" + os.path.join(bits, "curl", "include")),
+ ]
else:
- return []
+ args = []
else:
- return ["-Wno-strict-aliasing", # Avoids many "type-punned pointer" warnings
- "-std=c++11", # because we use unordered_map/unordered_set
- ]
+ args = [
+ "-Wno-strict-aliasing", # Avoids many "type-punned pointer" warnings
+ "-std=c++11", # because we use unordered_map/unordered_set
+ ]
+ return args
def libraries(self, mod):
"""
@@ -286,10 +328,10 @@ class Config(object):
"""
if platform.system() == "Windows":
if mod == "_tl":
- return [ "libcurl", "expat", "pthreadVCE2", "zlib", "wsock32", "libpng16" ]
+ return ["libcurl", "expat", "pthreadVCE2", "zlib", "wsock32", "libpng16"]
else:
if mod == "_tl":
- return [ "curl", "expat", "png" ]
+ return ["curl", "expat", "png"]
return []
def link_args(self, mod):
@@ -300,19 +342,24 @@ class Config(object):
args = ["/DLL"]
bits = os.getenv("KLAYOUT_BITS")
if bits:
- args += [quote_path("/LIBPATH:" + os.path.join(bits, "zlib", "lib")),
- quote_path("/LIBPATH:" + os.path.join(bits, "ptw", "libraries")),
- quote_path("/LIBPATH:" + os.path.join(bits, "png", "libraries")),
- quote_path("/LIBPATH:" + os.path.join(bits, "expat", "libraries")),
- quote_path("/LIBPATH:" + os.path.join(bits, "curl", "libraries"))]
+ args += [
+ quote_path("/LIBPATH:" + os.path.join(bits, "zlib", "libraries")),
+ quote_path("/LIBPATH:" + os.path.join(bits, "ptw", "libraries")),
+ quote_path("/LIBPATH:" + os.path.join(bits, "png", "libraries")),
+ quote_path("/LIBPATH:" + os.path.join(bits, "expat", "libraries")),
+ quote_path("/LIBPATH:" + os.path.join(bits, "curl", "libraries")),
+ ]
return args
elif platform.system() == "Darwin":
# For the dependency modules, make sure we produce a dylib.
# We can only link against such, but the bundles produced otherwise.
args = []
if mod[0] == "_":
- args += ["-Wl,-dylib", '-Wl,-install_name,@rpath/%s' % self.libname_of(mod, is_lib=True)]
- args += ['-Wl,-rpath,@loader_path/']
+ args += [
+ "-Wl,-dylib",
+ "-Wl,-install_name,@rpath/%s" % self.libname_of(mod, is_lib=True),
+ ]
+ args += ["-Wl,-rpath,@loader_path/"]
return args
else:
# this makes the libraries suitable for linking with a path -
@@ -321,23 +368,30 @@ class Config(object):
# will look for the path-qualified library. But that's the
# build path and the loader will fail.
args = []
- args += ['-Wl,-soname,' + self.libname_of(mod, is_lib=True)]
- if '_dbpi' not in mod:
- loader_path = '$ORIGIN'
+ args += ["-Wl,-soname," + self.libname_of(mod, is_lib=True)]
+ if "_dbpi" not in mod:
+ loader_path = "$ORIGIN"
else:
- loader_path = '$ORIGIN/..'
- args += ['-Wl,-rpath,' + loader_path]
+ loader_path = "$ORIGIN/.."
+ args += ["-Wl,-rpath," + loader_path]
# default linux shared object compilation uses the '-g' flag,
# which generates unnecessary debug information
# removing with strip-all during the linking stage
- args += ['-Wl,--strip-all']
+ args += ["-Wl,--strip-all"]
return args
def macros(self):
"""
Returns the macros to use for building
"""
- return [('HAVE_PNG', 1), ('HAVE_CURL', 1), ('HAVE_EXPAT', 1), ('KLAYOUT_MAJOR_VERSION', self.major_version()), ('KLAYOUT_MINOR_VERSION', self.minor_version())]
+ return [
+ ("HAVE_PNG", 1),
+ ("HAVE_CURL", 1),
+ ("HAVE_EXPAT", 1),
+ ("KLAYOUT_MAJOR_VERSION", self.major_version()),
+ ("KLAYOUT_MINOR_VERSION", self.minor_version()),
+ ("GSI_ALIAS_INSPECT", 1),
+ ]
def minor_version(self):
"""
@@ -349,7 +403,9 @@ class Config(object):
version_file = os.path.join(os.path.dirname(__file__), "version.sh")
with open(version_file, "r") as file:
version_txt = file.read()
- rm = re.search(r"KLAYOUT_VERSION\s*=\s*\"(.*?)\.(.*?)(\..*)?\".*", version_txt)
+ rm = re.search(
+ r"KLAYOUT_VERSION\s*=\s*\"(.*?)\.(.*?)(\..*)?\".*", version_txt
+ )
if rm:
version_string = rm.group(2)
return version_string
@@ -366,7 +422,9 @@ class Config(object):
version_file = os.path.join(os.path.dirname(__file__), "version.sh")
with open(version_file, "r") as file:
version_txt = file.read()
- rm = re.search(r"KLAYOUT_VERSION\s*=\s*\"(.*?)\.(.*?)(\..*)?\".*", version_txt)
+ rm = re.search(
+ r"KLAYOUT_VERSION\s*=\s*\"(.*?)\.(.*?)(\..*)?\".*", version_txt
+ )
if rm:
version_string = rm.group(1)
return version_string
@@ -407,13 +465,15 @@ _tl_sources.discard(os.path.join(_tl_path, "tlHttpStreamNoQt.cc"))
_tl_sources.discard(os.path.join(_tl_path, "tlFileSystemWatcher.cc"))
_tl_sources.discard(os.path.join(_tl_path, "tlDeferredExecutionQt.cc"))
-_tl = Library(config.root + '._tl',
- define_macros=config.macros() + [('MAKE_TL_LIBRARY', 1)],
- language='c++',
- libraries=config.libraries('_tl'),
- extra_link_args=config.link_args('_tl'),
- extra_compile_args=config.compile_args('_tl'),
- sources=list(_tl_sources))
+_tl = Library(
+ config.root + "._tl",
+ define_macros=config.macros() + [("MAKE_TL_LIBRARY", 1)],
+ language="c++",
+ libraries=config.libraries("_tl"),
+ extra_link_args=config.link_args("_tl"),
+ extra_compile_args=config.compile_args("_tl"),
+ sources=list(_tl_sources),
+)
config.add_extension(_tl)
@@ -423,15 +483,17 @@ config.add_extension(_tl)
_gsi_path = os.path.join("src", "gsi", "gsi")
_gsi_sources = set(glob.glob(os.path.join(_gsi_path, "*.cc")))
-_gsi = Library(config.root + '._gsi',
- define_macros=config.macros() + [('MAKE_GSI_LIBRARY', 1)],
- include_dirs=[_tl_path],
- extra_objects=[config.path_of('_tl', _tl_path)],
- language='c++',
- libraries=config.libraries('_gsi'),
- extra_link_args=config.link_args('_gsi'),
- extra_compile_args=config.compile_args('_gsi'),
- sources=list(_gsi_sources))
+_gsi = Library(
+ config.root + "._gsi",
+ define_macros=config.macros() + [("MAKE_GSI_LIBRARY", 1)],
+ include_dirs=[_tl_path],
+ extra_objects=[config.path_of("_tl", _tl_path)],
+ language="c++",
+ libraries=config.libraries('_gsi'),
+ extra_link_args=config.link_args("_gsi"),
+ extra_compile_args=config.compile_args("_gsi"),
+ sources=list(_gsi_sources),
+)
config.add_extension(_gsi)
# ------------------------------------------------------------------
@@ -440,15 +502,17 @@ config.add_extension(_gsi)
_pya_path = os.path.join("src", "pya", "pya")
_pya_sources = set(glob.glob(os.path.join(_pya_path, "*.cc")))
-_pya = Library(config.root + '._pya',
- define_macros=config.macros() + [('MAKE_PYA_LIBRARY', 1)],
- include_dirs=[_tl_path, _gsi_path],
- extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
- language='c++',
- libraries=config.libraries('_pya'),
- extra_link_args=config.link_args('_pya'),
- extra_compile_args=config.compile_args('_pya'),
- sources=list(_pya_sources))
+_pya = Library(
+ config.root + "._pya",
+ define_macros=config.macros() + [("MAKE_PYA_LIBRARY", 1)],
+ include_dirs=[_tl_path, _gsi_path],
+ extra_objects=[config.path_of("_tl", _tl_path), config.path_of("_gsi", _gsi_path)],
+ language="c++",
+ libraries=config.libraries('_pya'),
+ extra_link_args=config.link_args("_pya"),
+ extra_compile_args=config.compile_args("_pya"),
+ sources=list(_pya_sources),
+)
config.add_extension(_pya)
# ------------------------------------------------------------------
@@ -457,15 +521,17 @@ config.add_extension(_pya)
_rba_path = os.path.join("src", "rbastub")
_rba_sources = set(glob.glob(os.path.join(_rba_path, "*.cc")))
-_rba = Library(config.root + '._rba',
- define_macros=config.macros() + [('MAKE_RBA_LIBRARY', 1)],
- include_dirs=[_tl_path, _gsi_path],
- extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
- language='c++',
- libraries=config.libraries('_rba'),
- extra_link_args=config.link_args('_rba'),
- extra_compile_args=config.compile_args('_rba'),
- sources=list(_rba_sources))
+_rba = Library(
+ config.root + '._rba',
+ define_macros=config.macros() + [('MAKE_RBA_LIBRARY', 1)],
+ include_dirs=[_tl_path, _gsi_path],
+ extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
+ language='c++',
+ libraries=config.libraries('_rba'),
+ extra_link_args=config.link_args('_rba'),
+ extra_compile_args=config.compile_args('_rba'),
+ sources=list(_rba_sources)
+)
config.add_extension(_rba)
# ------------------------------------------------------------------
@@ -474,15 +540,17 @@ config.add_extension(_rba)
_db_path = os.path.join("src", "db", "db")
_db_sources = set(glob.glob(os.path.join(_db_path, "*.cc")))
-_db = Library(config.root + '._db',
- define_macros=config.macros() + [('MAKE_DB_LIBRARY', 1)],
- include_dirs=[_tl_path, _gsi_path, _db_path],
- extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
- language='c++',
- libraries=config.libraries('_db'),
- extra_link_args=config.link_args('_db'),
- extra_compile_args=config.compile_args('_db'),
- sources=list(_db_sources))
+_db = Library(
+ config.root + "._db",
+ define_macros=config.macros() + [("MAKE_DB_LIBRARY", 1)],
+ include_dirs=[_tl_path, _gsi_path, _db_path],
+ extra_objects=[config.path_of("_tl", _tl_path), config.path_of("_gsi", _gsi_path)],
+ language="c++",
+ libraries=config.libraries('_db'),
+ extra_link_args=config.link_args("_db"),
+ extra_compile_args=config.compile_args("_db"),
+ sources=list(_db_sources),
+)
config.add_extension(_db)
# ------------------------------------------------------------------
@@ -491,15 +559,21 @@ config.add_extension(_db)
_lib_path = os.path.join("src", "lib", "lib")
_lib_sources = set(glob.glob(os.path.join(_lib_path, "*.cc")))
-_lib = Library(config.root + '._lib',
- define_macros=config.macros() + [('MAKE_LIB_LIBRARY', 1)],
- include_dirs=[_tl_path, _gsi_path, _db_path, _lib_path],
- extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
- language='c++',
- libraries=config.libraries('_lib'),
- extra_link_args=config.link_args('_lib'),
- extra_compile_args=config.compile_args('_lib'),
- sources=list(_lib_sources))
+_lib = Library(
+ config.root + "._lib",
+ define_macros=config.macros() + [("MAKE_LIB_LIBRARY", 1)],
+ include_dirs=[_tl_path, _gsi_path, _db_path, _lib_path],
+ extra_objects=[
+ config.path_of("_tl", _tl_path),
+ config.path_of("_gsi", _gsi_path),
+ config.path_of("_db", _db_path),
+ ],
+ language="c++",
+ libraries=config.libraries('_lib'),
+ extra_link_args=config.link_args("_lib"),
+ extra_compile_args=config.compile_args("_lib"),
+ sources=list(_lib_sources),
+)
config.add_extension(_lib)
# ------------------------------------------------------------------
@@ -508,15 +582,21 @@ config.add_extension(_lib)
_rdb_path = os.path.join("src", "rdb", "rdb")
_rdb_sources = set(glob.glob(os.path.join(_rdb_path, "*.cc")))
-_rdb = Library(config.root + '._rdb',
- define_macros=config.macros() + [('MAKE_RDB_LIBRARY', 1)],
- include_dirs=[_db_path, _tl_path, _gsi_path],
- extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
- language='c++',
- libraries=config.libraries('_rdb'),
- extra_link_args=config.link_args('_rdb'),
- extra_compile_args=config.compile_args('_rdb'),
- sources=list(_rdb_sources))
+_rdb = Library(
+ config.root + "._rdb",
+ define_macros=config.macros() + [("MAKE_RDB_LIBRARY", 1)],
+ include_dirs=[_db_path, _tl_path, _gsi_path],
+ extra_objects=[
+ config.path_of("_tl", _tl_path),
+ config.path_of("_gsi", _gsi_path),
+ config.path_of("_db", _db_path),
+ ],
+ language="c++",
+ libraries=config.libraries('_rdb'),
+ extra_link_args=config.link_args("_rdb"),
+ extra_compile_args=config.compile_args("_rdb"),
+ sources=list(_rdb_sources),
+)
config.add_extension(_rdb)
# ------------------------------------------------------------------
@@ -525,15 +605,22 @@ config.add_extension(_rdb)
_laybasic_path = os.path.join("src", "laybasic", "laybasic")
_laybasic_sources = set(glob.glob(os.path.join(_laybasic_path, "*.cc")))
-_laybasic = Library(config.root + '._laybasic',
- define_macros=config.macros() + [('MAKE_LAYBASIC_LIBRARY', 1)],
- include_dirs=[_rdb_path, _db_path, _tl_path, _gsi_path],
- extra_objects=[config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
- language='c++',
- libraries=config.libraries('_laybasic'),
- extra_link_args=config.link_args('_laybasic'),
- extra_compile_args=config.compile_args('_laybasic'),
- sources=list(_laybasic_sources))
+_laybasic = Library(
+ config.root + '._laybasic',
+ define_macros=config.macros() + [('MAKE_LAYBASIC_LIBRARY', 1)],
+ include_dirs=[_rdb_path, _db_path, _tl_path, _gsi_path],
+ extra_objects=[
+ config.path_of('_rdb', _rdb_path),
+ config.path_of('_tl', _tl_path),
+ config.path_of('_gsi', _gsi_path),
+ config.path_of('_db', _db_path)
+ ],
+ language='c++',
+ libraries=config.libraries('_laybasic'),
+ extra_link_args=config.link_args('_laybasic'),
+ extra_compile_args=config.compile_args('_laybasic'),
+ sources=list(_laybasic_sources)
+)
config.add_extension(_laybasic)
# ------------------------------------------------------------------
@@ -542,15 +629,23 @@ config.add_extension(_laybasic)
_layview_path = os.path.join("src", "layview", "layview")
_layview_sources = set(glob.glob(os.path.join(_layview_path, "*.cc")))
-_layview = Library(config.root + '._layview',
- define_macros=config.macros() + [('MAKE_LAYVIEW_LIBRARY', 1)],
- include_dirs=[_laybasic_path, _rdb_path, _db_path, _tl_path, _gsi_path],
- extra_objects=[config.path_of('_laybasic', _laybasic_path), config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
- language='c++',
- libraries=config.libraries('_layview'),
- extra_link_args=config.link_args('_layview'),
- extra_compile_args=config.compile_args('_layview'),
- sources=list(_layview_sources))
+_layview = Library(
+ config.root + '._layview',
+ define_macros=config.macros() + [('MAKE_LAYVIEW_LIBRARY', 1)],
+ include_dirs=[_laybasic_path, _rdb_path, _db_path, _tl_path, _gsi_path],
+ extra_objects=[
+ config.path_of('_laybasic', _laybasic_path),
+ config.path_of('_rdb', _rdb_path),
+ config.path_of('_tl', _tl_path),
+ config.path_of('_gsi', _gsi_path),
+ config.path_of('_db', _db_path)
+ ],
+ language='c++',
+ libraries=config.libraries('_layview'),
+ extra_link_args=config.link_args('_layview'),
+ extra_compile_args=config.compile_args('_layview'),
+ sources=list(_layview_sources)
+)
config.add_extension(_layview)
# ------------------------------------------------------------------
@@ -559,15 +654,22 @@ config.add_extension(_layview)
_lym_path = os.path.join("src", "lym", "lym")
_lym_sources = set(glob.glob(os.path.join(_lym_path, "*.cc")))
-_lym = Library(config.root + '._lym',
- define_macros=config.macros() + [('MAKE_LYM_LIBRARY', 1)],
- include_dirs=[_pya_path, _rba_path, _tl_path, _gsi_path],
- extra_objects=[config.path_of('_rba', _rba_path), config.path_of('_pya', _pya_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path)],
- language='c++',
- libraries=config.libraries('_lym'),
- extra_link_args=config.link_args('_lym'),
- extra_compile_args=config.compile_args('_lym'),
- sources=list(_lym_sources))
+_lym = Library(
+ config.root + '._lym',
+ define_macros=config.macros() + [('MAKE_LYM_LIBRARY', 1)],
+ include_dirs=[_pya_path, _rba_path, _tl_path, _gsi_path],
+ extra_objects=[
+ config.path_of('_rba', _rba_path),
+ config.path_of('_pya', _pya_path),
+ config.path_of('_tl', _tl_path),
+ config.path_of('_gsi', _gsi_path)
+ ],
+ language='c++',
+ libraries=config.libraries('_lym'),
+ extra_link_args=config.link_args('_lym'),
+ extra_compile_args=config.compile_args('_lym'),
+ sources=list(_lym_sources)
+)
config.add_extension(_lym)
# ------------------------------------------------------------------
@@ -576,15 +678,24 @@ config.add_extension(_lym)
_ant_path = os.path.join("src", "ant", "ant")
_ant_sources = set(glob.glob(os.path.join(_ant_path, "*.cc")))
-_ant = Library(config.root + '._ant',
- define_macros=config.macros() + [('MAKE_ANT_LIBRARY', 1)],
- include_dirs=[_laybasic_path, _layview_path, _rdb_path, _db_path, _tl_path, _gsi_path],
- extra_objects=[config.path_of('_laybasic', _laybasic_path), config.path_of('_layview', _layview_path), config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
- language='c++',
- libraries=config.libraries('_ant'),
- extra_link_args=config.link_args('_ant'),
- extra_compile_args=config.compile_args('_ant'),
- sources=list(_ant_sources))
+_ant = Library(
+ config.root + '._ant',
+ define_macros=config.macros() + [('MAKE_ANT_LIBRARY', 1)],
+ include_dirs=[_laybasic_path, _layview_path, _rdb_path, _db_path, _tl_path, _gsi_path],
+ extra_objects=[
+ config.path_of('_laybasic', _laybasic_path),
+ config.path_of('_layview', _layview_path),
+ config.path_of('_rdb', _rdb_path),
+ config.path_of('_tl', _tl_path),
+ config.path_of('_gsi', _gsi_path),
+ config.path_of('_db', _db_path)
+ ],
+ language='c++',
+ libraries=config.libraries('_ant'),
+ extra_link_args=config.link_args('_ant'),
+ extra_compile_args=config.compile_args('_ant'),
+ sources=list(_ant_sources)
+)
config.add_extension(_ant)
# ------------------------------------------------------------------
@@ -593,15 +704,24 @@ config.add_extension(_ant)
_img_path = os.path.join("src", "img", "img")
_img_sources = set(glob.glob(os.path.join(_img_path, "*.cc")))
-_img = Library(config.root + '._img',
- define_macros=config.macros() + [('MAKE_IMG_LIBRARY', 1)],
- include_dirs=[_laybasic_path, _layview_path, _rdb_path, _db_path, _tl_path, _gsi_path],
- extra_objects=[config.path_of('_laybasic', _laybasic_path), config.path_of('_layview', _layview_path), config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
- language='c++',
- libraries=config.libraries('_img'),
- extra_link_args=config.link_args('_img'),
- extra_compile_args=config.compile_args('_img'),
- sources=list(_img_sources))
+_img = Library(
+ config.root + '._img',
+ define_macros=config.macros() + [('MAKE_IMG_LIBRARY', 1)],
+ include_dirs=[_laybasic_path, _layview_path, _rdb_path, _db_path, _tl_path, _gsi_path],
+ extra_objects=[
+ config.path_of('_laybasic', _laybasic_path),
+ config.path_of('_layview', _layview_path),
+ config.path_of('_rdb', _rdb_path),
+ config.path_of('_tl', _tl_path),
+ config.path_of('_gsi', _gsi_path),
+ config.path_of('_db', _db_path)
+ ],
+ language='c++',
+ libraries=config.libraries('_img'),
+ extra_link_args=config.link_args('_img'),
+ extra_compile_args=config.compile_args('_img'),
+ sources=list(_img_sources)
+)
config.add_extension(_img)
# ------------------------------------------------------------------
@@ -610,15 +730,24 @@ config.add_extension(_img)
_edt_path = os.path.join("src", "edt", "edt")
_edt_sources = set(glob.glob(os.path.join(_edt_path, "*.cc")))
-_edt = Library(config.root + '._edt',
- define_macros=config.macros() + [('MAKE_EDT_LIBRARY', 1)],
- include_dirs=[_laybasic_path, _layview_path, _rdb_path, _db_path, _tl_path, _gsi_path],
- extra_objects=[config.path_of('_laybasic', _laybasic_path), config.path_of('_layview', _layview_path), config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
- language='c++',
- libraries=config.libraries('_edt'),
- extra_link_args=config.link_args('_edt'),
- extra_compile_args=config.compile_args('_edt'),
- sources=list(_edt_sources))
+_edt = Library(
+ config.root + '._edt',
+ define_macros=config.macros() + [('MAKE_EDT_LIBRARY', 1)],
+ include_dirs=[_laybasic_path, _layview_path, _rdb_path, _db_path, _tl_path, _gsi_path],
+ extra_objects=[
+ config.path_of('_laybasic', _laybasic_path),
+ config.path_of('_layview', _layview_path),
+ config.path_of('_rdb', _rdb_path),
+ config.path_of('_tl', _tl_path),
+ config.path_of('_gsi', _gsi_path),
+ config.path_of('_db', _db_path)
+ ],
+ language='c++',
+ libraries=config.libraries('_edt'),
+ extra_link_args=config.link_args('_edt'),
+ extra_compile_args=config.compile_args('_edt'),
+ sources=list(_edt_sources)
+)
config.add_extension(_edt)
# ------------------------------------------------------------------
@@ -635,15 +764,25 @@ for pi in dbpi_dirs:
pi_sources = glob.glob(os.path.join(pi, "*.cc"))
- pi_ext = Library(config.root + '.db_plugins.' + mod_name,
- define_macros=config.macros() + [('MAKE_DB_PLUGIN_LIBRARY', 1)],
- include_dirs=[os.path.join("src", "plugins", "common"),
- _db_path, _tl_path, _gsi_path],
- extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
- language='c++',
- extra_link_args=config.link_args(mod_name),
- extra_compile_args=config.compile_args(mod_name),
- sources=pi_sources)
+ pi_ext = Library(
+ config.root + ".db_plugins." + mod_name,
+ define_macros=config.macros() + [("MAKE_DB_PLUGIN_LIBRARY", 1)],
+ include_dirs=[
+ os.path.join("src", "plugins", "common"),
+ _db_path,
+ _tl_path,
+ _gsi_path,
+ ],
+ extra_objects=[
+ config.path_of("_tl", _tl_path),
+ config.path_of("_gsi", _gsi_path),
+ config.path_of("_db", _db_path),
+ ],
+ language="c++",
+ extra_link_args=config.link_args(mod_name),
+ extra_compile_args=config.compile_args(mod_name),
+ sources=pi_sources,
+ )
db_plugins.append(pi_ext)
config.add_extension(pi_ext)
@@ -654,13 +793,19 @@ for pi in dbpi_dirs:
tl_path = os.path.join("src", "pymod", "tl")
tl_sources = set(glob.glob(os.path.join(tl_path, "*.cc")))
-tl = Extension(config.root + '.tlcore',
- define_macros=config.macros(),
- include_dirs=[_tl_path, _gsi_path, _pya_path],
- extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_pya', _pya_path)],
- extra_link_args=config.link_args('tlcore'),
- extra_compile_args=config.compile_args('tlcore'),
- sources=list(tl_sources))
+tl = Extension(
+ config.root + ".tlcore",
+ define_macros=config.macros(),
+ include_dirs=[_tl_path, _gsi_path, _pya_path],
+ extra_objects=[
+ config.path_of("_tl", _tl_path),
+ config.path_of("_gsi", _gsi_path),
+ config.path_of("_pya", _pya_path),
+ ],
+ extra_link_args=config.link_args("tlcore"),
+ extra_compile_args=config.compile_args("tlcore"),
+ sources=list(tl_sources),
+)
# ------------------------------------------------------------------
# db extension library
@@ -668,13 +813,20 @@ tl = Extension(config.root + '.tlcore',
db_path = os.path.join("src", "pymod", "db")
db_sources = set(glob.glob(os.path.join(db_path, "*.cc")))
-db = Extension(config.root + '.dbcore',
- define_macros=config.macros(),
- include_dirs=[_db_path, _tl_path, _gsi_path, _pya_path],
- extra_objects=[config.path_of('_db', _db_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_pya', _pya_path)],
- extra_link_args=config.link_args('dbcore'),
- extra_compile_args=config.compile_args('dbcore'),
- sources=list(db_sources))
+db = Extension(
+ config.root + ".dbcore",
+ define_macros=config.macros(),
+ include_dirs=[_db_path, _tl_path, _gsi_path, _pya_path],
+ extra_objects=[
+ config.path_of("_db", _db_path),
+ config.path_of("_tl", _tl_path),
+ config.path_of("_gsi", _gsi_path),
+ config.path_of("_pya", _pya_path),
+ ],
+ extra_link_args=config.link_args("dbcore"),
+ extra_compile_args=config.compile_args("dbcore"),
+ sources=list(db_sources),
+)
# ------------------------------------------------------------------
# lib extension library
@@ -682,13 +834,20 @@ db = Extension(config.root + '.dbcore',
lib_path = os.path.join("src", "pymod", "lib")
lib_sources = set(glob.glob(os.path.join(lib_path, "*.cc")))
-lib = Extension(config.root + '.libcore',
- define_macros=config.macros(),
- include_dirs=[_lib_path, _tl_path, _gsi_path, _pya_path],
- extra_objects=[config.path_of('_lib', _lib_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_pya', _pya_path)],
- extra_link_args=config.link_args('libcore'),
- extra_compile_args=config.compile_args('libcore'),
- sources=list(lib_sources))
+lib = Extension(
+ config.root + ".libcore",
+ define_macros=config.macros(),
+ include_dirs=[_lib_path, _tl_path, _gsi_path, _pya_path],
+ extra_objects=[
+ config.path_of("_lib", _lib_path),
+ config.path_of("_tl", _tl_path),
+ config.path_of("_gsi", _gsi_path),
+ config.path_of("_pya", _pya_path),
+ ],
+ extra_link_args=config.link_args("libcore"),
+ extra_compile_args=config.compile_args("libcore"),
+ sources=list(lib_sources),
+)
# ------------------------------------------------------------------
# rdb extension library
@@ -696,13 +855,20 @@ lib = Extension(config.root + '.libcore',
rdb_path = os.path.join("src", "pymod", "rdb")
rdb_sources = set(glob.glob(os.path.join(rdb_path, "*.cc")))
-rdb = Extension(config.root + '.rdbcore',
- define_macros=config.macros(),
- include_dirs=[_rdb_path, _tl_path, _gsi_path, _pya_path],
- extra_objects=[config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_pya', _pya_path)],
- extra_link_args=config.link_args('rdbcore'),
- extra_compile_args=config.compile_args('rdbcore'),
- sources=list(rdb_sources))
+rdb = Extension(
+ config.root + ".rdbcore",
+ define_macros=config.macros(),
+ include_dirs=[_rdb_path, _tl_path, _gsi_path, _pya_path],
+ extra_objects=[
+ config.path_of("_rdb", _rdb_path),
+ config.path_of("_tl", _tl_path),
+ config.path_of("_gsi", _gsi_path),
+ config.path_of("_pya", _pya_path),
+ ],
+ extra_link_args=config.link_args("rdbcore"),
+ extra_compile_args=config.compile_args("rdbcore"),
+ sources=list(rdb_sources),
+)
# ------------------------------------------------------------------
# lay extension library
@@ -737,28 +903,34 @@ lay = Extension(config.root + '.laycore',
# ------------------------------------------------------------------
# Core setup function
-if __name__ == '__main__':
- setup(name=config.root,
- version=config.version(),
- license='GNU GPLv3',
- description='KLayout standalone Python package',
- long_description='This package is a standalone distribution of KLayout\'s Python API.\n\nFor more details see here: https://www.klayout.org/klayout-pypi',
- author='Matthias Koefferlein',
- author_email='matthias@klayout.de',
- classifiers=[
- # Recommended classifiers
- "Programming Language :: Python :: 2",
- "Programming Language :: Python :: 3",
- "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
- "Operating System :: MacOS :: MacOS X",
- "Operating System :: Microsoft :: Windows",
- "Operating System :: POSIX :: Linux",
- # Optional classifiers
- "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)",
- ],
- url='https://github.com/klayout/klayout',
- packages=find_packages('src/pymod/distutils_src'),
- package_dir={'': 'src/pymod/distutils_src'}, # https://github.com/pypa/setuptools/issues/230
- package_data={config.root: ["src/pymod/distutils_src/klayout/*.pyi"]},
- include_package_data=True,
- ext_modules=[_tl, _gsi, _pya, _rba, _db, _lib, _rdb, _lym, _laybasic, _layview, _ant, _edt, _img] + db_plugins + [tl, db, lib, rdb, lay])
+if __name__ == "__main__":
+ setup(
+ name=config.root,
+ version=config.version(),
+ license="GNU GPLv3",
+ description="KLayout standalone Python package",
+ long_description="This package is a standalone distribution of KLayout's Python API.\n\nFor more details see here: https://www.klayout.org/klayout-pypi",
+ author="Matthias Koefferlein",
+ author_email="matthias@klayout.de",
+ classifiers=[
+ # Recommended classifiers
+ "Programming Language :: Python :: 2",
+ "Programming Language :: Python :: 3",
+ "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
+ "Operating System :: MacOS :: MacOS X",
+ "Operating System :: Microsoft :: Windows",
+ "Operating System :: POSIX :: Linux",
+ # Optional classifiers
+ "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)",
+ ],
+ url="https://github.com/klayout/klayout",
+ packages=find_packages("src/pymod/distutils_src"),
+ package_dir={
+ "": "src/pymod/distutils_src"
+ }, # https://github.com/pypa/setuptools/issues/230
+ package_data={config.root: ["src/pymod/distutils_src/klayout/*.pyi"]},
+ include_package_data=True,
+ ext_modules=[_tl, _gsi, _pya, _rba, _db, _lib, _rdb, _lym, _laybasic, _layview, _ant, _edt, _img]
+ + db_plugins
+ + [tl, db, lib, rdb, lay]
+ )
diff --git a/src/db/db/gsiDeclDbLibrary.cc b/src/db/db/gsiDeclDbLibrary.cc
index e2f89007b..eca6d7148 100644
--- a/src/db/db/gsiDeclDbLibrary.cc
+++ b/src/db/db/gsiDeclDbLibrary.cc
@@ -37,7 +37,7 @@ namespace gsi
// db::Library binding
/**
- * @brief A basic implementation of the library
+ * @brief A basic implementation of the library
*/
static db::Library *new_lib ()
{
@@ -173,15 +173,15 @@ LibraryClass decl_Library ("db", "Library",
"\n"
"This method has been introduced in version 0.25.\n"
) +
- gsi::method ("name", &db::Library::get_name,
+ gsi::method ("name", &db::Library::get_name,
"@brief Returns the libraries' name\n"
"The name is set when the library is registered and cannot be changed\n"
) +
- gsi::method ("id", &db::Library::get_id,
+ gsi::method ("id", &db::Library::get_id,
"@brief Returns the library's ID\n"
"The ID is set when the library is registered and cannot be changed \n"
) +
- gsi::method ("description", &db::Library::get_description,
+ gsi::method ("description", &db::Library::get_description,
"@brief Returns the libraries' description text\n"
) +
gsi::method ("description=", &db::Library::set_description, gsi::arg ("description"),
@@ -232,7 +232,7 @@ LibraryClass decl_Library ("db", "Library",
gsi::method ("layout_const", (const db::Layout &(db::Library::*)() const) &db::Library::layout,
"@brief The layout object where the cells reside that this library defines (const version)\n"
) +
- gsi::method ("layout", (db::Layout &(db::Library::*)()) &db::Library::layout,
+ gsi::method ("layout", (db::Layout &(db::Library::*)()) &db::Library::layout,
"@brief The layout object where the cells reside that this library defines\n"
) +
gsi::method ("refresh", &db::Library::refresh,
@@ -396,7 +396,7 @@ class PCellDeclarationImpl
: public db::PCellDeclaration
{
public:
- // dummy implementation to provide the signature
+ // dummy implementation to provide the signature
virtual std::vector get_layer_declarations_impl (const db::pcell_parameters_type &) const
{
return std::vector ();
@@ -433,7 +433,7 @@ public:
}
}
- // dummy implementation to provide the signature
+ // dummy implementation to provide the signature
virtual db::pcell_parameters_type coerce_parameters_impl (const db::Layout & /*layout*/, const db::pcell_parameters_type &input) const
{
return input;
@@ -581,7 +581,7 @@ Class decl_PCellDeclaration (decl_PCellDeclaration_Native,
"This method receives the PCell parameters which allows it to deduce layers\n"
"from the parameters."
) +
- gsi::callback ("get_parameters", &PCellDeclarationImpl::get_parameter_declarations, &PCellDeclarationImpl::cb_get_parameter_declarations,
+ gsi::callback ("get_parameters", &PCellDeclarationImpl::get_parameter_declarations, &PCellDeclarationImpl::cb_get_parameter_declarations,
"@brief Returns a list of parameter declarations\n"
"Reimplement this method to return a list of parameters used in that PCell \n"
"implementation. A parameter declaration is a PCellParameterDeclaration object\n"
@@ -824,33 +824,33 @@ Class decl_PCellParameterDeclaration ("db", "PCel
"@param default The default (initial) value\n"
"@param unit The unit string\n"
) +
- gsi::method ("name", &db::PCellParameterDeclaration::get_name,
+ gsi::method ("name", &db::PCellParameterDeclaration::get_name,
"@brief Gets the name\n"
) +
gsi::method ("name=", &db::PCellParameterDeclaration::set_name, gsi::arg ("value"),
"@brief Sets the name\n"
) +
- gsi::method ("unit", &db::PCellParameterDeclaration::get_unit,
+ gsi::method ("unit", &db::PCellParameterDeclaration::get_unit,
"@brief Gets the unit string\n"
) +
gsi::method ("unit=", &db::PCellParameterDeclaration::set_unit, gsi::arg ("unit"),
"@brief Sets the unit string\n"
"The unit string is shown right to the edit fields for numeric parameters.\n"
) +
- gsi::method_ext ("type", &get_type,
+ gsi::method_ext ("type", &get_type,
"@brief Gets the type\n"
"The type is one of the T... constants."
) +
gsi::method_ext ("type=", &set_type, gsi::arg ("type"),
"@brief Sets the type\n"
) +
- gsi::method ("description", &db::PCellParameterDeclaration::get_description,
+ gsi::method ("description", &db::PCellParameterDeclaration::get_description,
"@brief Gets the description text\n"
) +
gsi::method ("description=", &db::PCellParameterDeclaration::set_description, gsi::arg ("description"),
"@brief Sets the description\n"
) +
- gsi::method ("hidden?", &db::PCellParameterDeclaration::is_hidden,
+ gsi::method ("hidden?", &db::PCellParameterDeclaration::is_hidden,
"@brief Returns true, if the parameter is a hidden parameter that should not be shown in the user interface\n"
"By making a parameter hidden, it is possible to create internal parameters which cannot be\n"
"edited.\n"
@@ -858,7 +858,7 @@ Class decl_PCellParameterDeclaration ("db", "PCel
gsi::method ("hidden=", &db::PCellParameterDeclaration::set_hidden, gsi::arg ("flag"),
"@brief Makes the parameter hidden if this attribute is set to true\n"
) +
- gsi::method ("readonly?", &db::PCellParameterDeclaration::is_readonly,
+ gsi::method ("readonly?", &db::PCellParameterDeclaration::is_readonly,
"@brief Returns true, if the parameter is a read-only parameter\n"
"By making a parameter read-only, it is shown but cannot be\n"
"edited.\n"
@@ -866,7 +866,7 @@ Class decl_PCellParameterDeclaration ("db", "PCel
gsi::method ("readonly=", &db::PCellParameterDeclaration::set_readonly, gsi::arg ("flag"),
"@brief Makes the parameter read-only if this attribute is set to true\n"
) +
- gsi::method_ext ("clear_choices", &clear_choices,
+ gsi::method_ext ("clear_choices", &clear_choices,
"@brief Clears the list of choices\n"
) +
gsi::method_ext ("add_choice", &add_choice, gsi::arg ("description"), gsi::arg ("value"),
@@ -875,13 +875,13 @@ Class decl_PCellParameterDeclaration ("db", "PCel
"choices. If choices are defined, KLayout will show a drop-down box instead of an\n"
"entry field in the parameter user interface.\n"
) +
- gsi::method ("choice_values", &db::PCellParameterDeclaration::get_choices,
+ gsi::method ("choice_values", &db::PCellParameterDeclaration::get_choices,
"@brief Returns a list of choice values\n"
) +
- gsi::method ("choice_descriptions", &db::PCellParameterDeclaration::get_choice_descriptions,
+ gsi::method ("choice_descriptions", &db::PCellParameterDeclaration::get_choice_descriptions,
"@brief Returns a list of choice descriptions\n"
) +
- gsi::method ("default", &db::PCellParameterDeclaration::get_default,
+ gsi::method ("default", &db::PCellParameterDeclaration::get_default,
"@brief Gets the default value\n"
) +
gsi::method ("default=", &db::PCellParameterDeclaration::set_default, gsi::arg ("value"),
@@ -910,4 +910,3 @@ Class decl_PCellParameterDeclaration ("db", "PCel
);
}
-
diff --git a/src/db/db/gsiDeclDbPoint.cc b/src/db/db/gsiDeclDbPoint.cc
index 9f3d45e7a..8302beca8 100644
--- a/src/db/db/gsiDeclDbPoint.cc
+++ b/src/db/db/gsiDeclDbPoint.cc
@@ -33,7 +33,7 @@ namespace gsi
// point binding
template
-struct point_defs
+struct point_defs
{
typedef typename C::coord_type coord_type;
@@ -141,6 +141,14 @@ struct point_defs
"\n"
"Starting with version 0.25, this method renders a vector."
) +
+ method ("-", (C (C::*) (const db::vector &) const) &C::subtract, gsi::arg ("v"),
+ "@brief Subtract one vector from a point\n"
+ "\n"
+ "\n"
+ "Subtract vector v from from self by subtracting the coordinates. This renders a point.\n"
+ "\n"
+ "This method has been added in version 0.27."
+ ) +
method ("<", &C::less, gsi::arg ("p"),
"@brief \"less\" comparison operator\n"
"\n"
diff --git a/src/db/db/gsiDeclDbRecursiveShapeIterator.cc b/src/db/db/gsiDeclDbRecursiveShapeIterator.cc
index c70423544..791e112c2 100644
--- a/src/db/db/gsiDeclDbRecursiveShapeIterator.cc
+++ b/src/db/db/gsiDeclDbRecursiveShapeIterator.cc
@@ -523,6 +523,13 @@ Class decl_RecursiveShapeIterator ("db", "RecursiveS
"The flags must be specified before the shapes are being retrieved.\n"
"Settings the shapes flags will reset the iterator.\n"
) +
+ gsi::method ("shape_flags", (unsigned int (db::RecursiveShapeIterator::*)() const) &db::RecursiveShapeIterator::shape_flags,
+ "@brief Gets the shape selection flags\n"
+ "\n"
+ "See \\shape_flags= for a description of that property.\n"
+ "\n"
+ "This getter has been introduced in version 0.28.\n"
+ ) +
gsi::method ("trans|#itrans", &db::RecursiveShapeIterator::trans,
"@brief Gets the current transformation by which the shapes must be transformed into the initial cell\n"
"\n"
diff --git a/src/db/db/gsiDeclDbRegion.cc b/src/db/db/gsiDeclDbRegion.cc
index 926fa368a..f7874686b 100644
--- a/src/db/db/gsiDeclDbRegion.cc
+++ b/src/db/db/gsiDeclDbRegion.cc
@@ -752,7 +752,7 @@ extern Class decl_dbShapeCollection;
Class decl_Region (decl_dbShapeCollection, "db", "Region",
- constructor ("new", &new_v,
+ constructor ("new", &new_v,
"@brief Default constructor\n"
"\n"
"This constructor creates an empty region.\n"
@@ -798,8 +798,8 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"@code\n"
"layout = ... # a layout\n"
- "cell = ... # the index of the initial cell\n"
- "layer = ... # the index of the layer from where to take the shapes from\n"
+ "cell = ... # the index of the initial cell\n"
+ "layer = ... # the index of the layer from where to take the shapes from\n"
"r = RBA::Region::new(layout.begin_shapes(cell, layer))\n"
"@/code\n"
) +
@@ -814,8 +814,8 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"@code\n"
"layout = ... # a layout\n"
- "cell = ... # the index of the initial cell\n"
- "layer = ... # the index of the layer from where to take the shapes from\n"
+ "cell = ... # the index of the initial cell\n"
+ "layer = ... # the index of the layer from where to take the shapes from\n"
"dbu = 0.1 # the target database unit\n"
"r = RBA::Region::new(layout.begin_shapes(cell, layer), RBA::ICplxTrans::new(layout.dbu / dbu))\n"
"@/code\n"
@@ -925,11 +925,11 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"as single regions and artificial edges such as cut-lines will not be considered.\n"
"Merged semantics thus is equivalent to considering coherent areas rather than\n"
"single polygons\n"
- ) +
+ ) +
method ("merged_semantics?", &db::Region::merged_semantics,
"@brief Gets a flag indicating whether merged semantics is enabled\n"
"See \\merged_semantics= for a description of this attribute.\n"
- ) +
+ ) +
method ("strict_handling=", &db::Region::set_strict_handling, gsi::arg ("f"),
"@brief Enables or disables strict handling\n"
"\n"
@@ -941,7 +941,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"Strict handling is disabled by default and optimization is in place.\n"
"\n"
"This method has been introduced in version 0.23.2."
- ) +
+ ) +
method ("strict_handling?", &db::Region::strict_handling,
"@brief Gets a flag indicating whether merged semantics is enabled\n"
"See \\strict_handling= for a description of this attribute.\n"
@@ -957,11 +957,11 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"created which touch at a corner).\n"
"\n"
"The default setting is maximum coherence (min_coherence = false).\n"
- ) +
+ ) +
method ("min_coherence?", &db::Region::min_coherence,
"@brief Gets a flag indicating whether minimum coherence is selected\n"
"See \\min_coherence= for a description of this attribute.\n"
- ) +
+ ) +
method_ext ("complex_op", &complex_op, gsi::arg ("node"),
"@brief Executes a complex operation (see \\CompoundRegionOperationNode for details)\n"
"\n"
@@ -1337,7 +1337,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"of these boxes for example.\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method_ext ("extents", &extents1, gsi::arg ("d"),
"@brief Returns a region with the enlarged bounding boxes of the polygons\n"
"This method will return a region consisting of the bounding boxes of the polygons enlarged by the given distance d.\n"
@@ -1346,7 +1346,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"of these boxes for example.\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method_ext ("extents", &extents2, gsi::arg ("dx"), gsi::arg ("dy"),
"@brief Returns a region with the enlarged bounding boxes of the polygons\n"
"This method will return a region consisting of the bounding boxes of the polygons enlarged by the given distance dx in x direction and dy in y direction.\n"
@@ -1355,7 +1355,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"of these boxes for example.\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method_ext ("extent_refs", &extent_refs,
"@hide\n"
"This method is provided for DRC implementation.\n"
@@ -1589,7 +1589,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"This method returns the sized region (see \\size), but does not modify self.\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method_ext ("andnot", &andnot, gsi::arg ("other"),
"@brief Returns the boolean AND and NOT between self and the other region\n"
"\n"
@@ -1607,7 +1607,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"This method will compute the boolean AND (intersection) between two regions. "
"The result is often but not necessarily always merged.\n"
- ) +
+ ) +
method ("&=", &db::Region::operator&=, gsi::arg ("other"),
"@brief Performs the boolean AND between self and the other region\n"
"\n"
@@ -1615,7 +1615,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"This method will compute the boolean AND (intersection) between two regions. "
"The result is often but not necessarily always merged.\n"
- ) +
+ ) +
method ("-", &db::Region::operator-, gsi::arg ("other"),
"@brief Returns the boolean NOT between self and the other region\n"
"\n"
@@ -1623,7 +1623,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"This method will compute the boolean NOT (intersection) between two regions. "
"The result is often but not necessarily always merged.\n"
- ) +
+ ) +
method ("-=", &db::Region::operator-=, gsi::arg ("other"),
"@brief Performs the boolean NOT between self and the other region\n"
"\n"
@@ -1631,15 +1631,15 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"This method will compute the boolean NOT (intersection) between two regions. "
"The result is often but not necessarily always merged.\n"
- ) +
+ ) +
method ("^", &db::Region::operator^, gsi::arg ("other"),
- "@brief Returns the boolean NOT between self and the other region\n"
+ "@brief Returns the boolean XOR between self and the other region\n"
"\n"
"@return The result of the boolean XOR operation\n"
"\n"
"This method will compute the boolean XOR (intersection) between two regions. "
"The result is often but not necessarily always merged.\n"
- ) +
+ ) +
method ("^=", &db::Region::operator^=, gsi::arg ("other"),
"@brief Performs the boolean XOR between self and the other region\n"
"\n"
@@ -1647,7 +1647,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"This method will compute the boolean XOR (intersection) between two regions. "
"The result is often but not necessarily always merged.\n"
- ) +
+ ) +
method ("\\|", &db::Region::operator|, gsi::arg ("other"),
"@brief Returns the boolean OR between self and the other region\n"
"\n"
@@ -1655,7 +1655,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"The boolean OR is implemented by merging the polygons of both regions. To simply join the regions "
"without merging, the + operator is more efficient."
- ) +
+ ) +
method ("\\|=", &db::Region::operator|=, gsi::arg ("other"),
"@brief Performs the boolean OR between self and the other region\n"
"\n"
@@ -1663,7 +1663,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"The boolean OR is implemented by merging the polygons of both regions. To simply join the regions "
"without merging, the + operator is more efficient."
- ) +
+ ) +
method ("+", &db::Region::operator+, gsi::arg ("other"),
"@brief Returns the combined region of self and the other region\n"
"\n"
@@ -1671,7 +1671,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"This operator adds the polygons of the other region to self and returns a new combined region. "
"This usually creates unmerged regions and polygons may overlap. Use \\merge if you want to ensure the result region is merged.\n"
- ) +
+ ) +
method ("+=", &db::Region::operator+=, gsi::arg ("other"),
"@brief Adds the polygons of the other region to self\n"
"\n"
@@ -1679,7 +1679,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"\n"
"This operator adds the polygons of the other region to self. "
"This usually creates unmerged regions and polygons may overlap. Use \\merge if you want to ensure the result region is merged.\n"
- ) +
+ ) +
method ("covering", &db::Region::selected_enclosing, gsi::arg ("other"), gsi::arg ("min_count", size_t (1)), gsi::arg ("max_count", size_t (std::numeric_limits::max ()), "unlimited"),
"@brief Returns the polygons of this region which are completely covering polygons from the other region\n"
"\n"
@@ -1740,14 +1740,14 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"@return A new region containing the polygons which are inside polygons from the other region\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method ("not_inside", &db::Region::selected_not_inside, gsi::arg ("other"),
"@brief Returns the polygons of this region which are not completely inside polygons from the other region\n"
"\n"
"@return A new region containing the polygons which are not inside polygons from the other region\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method_ext ("split_inside", &split_inside, gsi::arg ("other"),
"@brief Returns the polygons of this region which are completely inside polygons from the other region and the ones which are not at the same time\n"
"\n"
@@ -1764,28 +1764,28 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"@return The region after the polygons have been selected (self)\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method ("select_not_inside", &db::Region::select_not_inside, gsi::arg ("other"),
"@brief Selects the polygons of this region which are not completely inside polygons from the other region\n"
"\n"
"@return The region after the polygons have been selected (self)\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method ("outside", &db::Region::selected_outside, gsi::arg ("other"),
"@brief Returns the polygons of this region which are completely outside polygons from the other region\n"
"\n"
"@return A new region containing the polygons which are outside polygons from the other region\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method ("not_outside", &db::Region::selected_not_outside, gsi::arg ("other"),
"@brief Returns the polygons of this region which are not completely outside polygons from the other region\n"
"\n"
"@return A new region containing the polygons which are not outside polygons from the other region\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method_ext ("split_outside", &split_outside, gsi::arg ("other"),
"@brief Returns the polygons of this region which are completely outside polygons from the other region and the ones which are not at the same time\n"
"\n"
@@ -1802,14 +1802,14 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"@return The region after the polygons have been selected (self)\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method ("select_not_outside", &db::Region::select_not_outside, gsi::arg ("other"),
"@brief Selects the polygons of this region which are not completely outside polygons from the other region\n"
"\n"
"@return The region after the polygons have been selected (self)\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
method ("interacting", (db::Region (db::Region::*) (const db::Region &, size_t, size_t) const) &db::Region::selected_interacting, gsi::arg ("other"), gsi::arg ("min_count", size_t (1)), gsi::arg ("max_count", size_t (std::numeric_limits::max ()), "unlimited"),
"@brief Returns the polygons of this region which overlap or touch polygons from the other region\n"
"\n"
@@ -2020,7 +2020,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
"\n"
"The count options have been introduced in version 0.27."
- ) +
+ ) +
method ("not_overlapping", &db::Region::selected_not_overlapping, gsi::arg ("other"), gsi::arg ("min_count", size_t (1)), gsi::arg ("max_count", size_t (std::numeric_limits::max ()), "unlimited"),
"@brief Returns the polygons of this region which do not overlap polygons from the other region\n"
"\n"
@@ -2129,7 +2129,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
"possibilities of the edge collection.\n"
"\n"
"Merged semantics applies for this method (see \\merged_semantics= for a description of this concept)\n"
- ) +
+ ) +
factory_ext ("decompose_convex", &decompose_convex, gsi::arg ("preferred_orientation", po_any (), "\\Polygon#PO_any"),
"@brief Decomposes the region into convex pieces.\n"
"\n"
@@ -2166,7 +2166,7 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
method ("swap", &db::Region::swap, gsi::arg ("other"),
"@brief Swap the contents of this region with the contents of another region\n"
"This method is useful to avoid excessive memory allocation in some cases. "
- "For managed memory languages such as Ruby, those cases will be rare. "
+ "For managed memory languages such as Ruby, those cases will be rare. "
) +
method ("holes", &db::Region::holes,
"@brief Returns the holes of the region\n"
@@ -3091,4 +3091,3 @@ gsi::EnumIn decl_Region_OppositeFilter ("db", "O
gsi::ClassExt inject_OppositeFilter_in_parent (decl_Region_OppositeFilter.defs ());
}
-
diff --git a/src/db/db/gsiDeclDbTrans.cc b/src/db/db/gsiDeclDbTrans.cc
index a6bfe92c7..e5101eaf8 100644
--- a/src/db/db/gsiDeclDbTrans.cc
+++ b/src/db/db/gsiDeclDbTrans.cc
@@ -304,7 +304,7 @@ struct trans_defs
"\n"
"This convenience method has been introduced in version 0.25."
) +
- method ("*", &C::concat, arg ("t"),
+ method ("*!", &C::concat, arg ("t"),
"@brief Returns the concatenated transformation\n"
"\n"
"The * operator returns self*t (\"t is applied before this transformation\").\n"
@@ -829,7 +829,7 @@ struct cplx_trans_defs
"\n"
"This convenience method has been introduced in version 0.25."
) +
- method ("*", (C (C::*) (const C &c) const) &C::concat_same, arg ("t"),
+ method ("*!", (C (C::*) (const C &c) const) &C::concat_same, arg ("t"),
"@brief Returns the concatenated transformation\n"
"\n"
"The * operator returns self*t (\"t is applied before this transformation\").\n"
@@ -1047,7 +1047,7 @@ Class decl_DCplxTrans ("db", "DCplxTrans",
"\n"
"This method has been introduced in version 0.25."
) +
- method ("*", (db::CplxTrans (db::DCplxTrans::*) (const db::CplxTrans &) const) &db::DCplxTrans::concat, gsi::arg ("t"),
+ method ("*!", (db::CplxTrans (db::DCplxTrans::*) (const db::CplxTrans &) const) &db::DCplxTrans::concat, gsi::arg ("t"),
"@brief Multiplication (concatenation) of transformations\n"
"\n"
"The * operator returns self*t (\"t is applied before this transformation\").\n"
@@ -1126,7 +1126,7 @@ Class decl_CplxTrans ("db", "CplxTrans",
"\n"
"This method has been introduced in version 0.25."
) +
- method ("*", (db::DCplxTrans (db::CplxTrans::*) (const db::VCplxTrans &) const) &db::CplxTrans::concat, gsi::arg ("t"),
+ method ("*!", (db::DCplxTrans (db::CplxTrans::*) (const db::VCplxTrans &) const) &db::CplxTrans::concat, gsi::arg ("t"),
"@brief Multiplication (concatenation) of transformations\n"
"\n"
"The * operator returns self*t (\"t is applied before this transformation\").\n"
@@ -1134,7 +1134,7 @@ Class decl_CplxTrans ("db", "CplxTrans",
"@param t The transformation to apply before\n"
"@return The modified transformation\n"
) +
- method ("*", (db::CplxTrans (db::CplxTrans::*) (const db::ICplxTrans &) const) &db::CplxTrans::concat, gsi::arg ("t"),
+ method ("*!", (db::CplxTrans (db::CplxTrans::*) (const db::ICplxTrans &) const) &db::CplxTrans::concat, gsi::arg ("t"),
"@brief Multiplication (concatenation) of transformations\n"
"\n"
"The * operator returns self*t (\"t is applied before this transformation\").\n"
@@ -1216,7 +1216,7 @@ Class decl_ICplxTrans ("db", "ICplxTrans",
"\n"
"This method has been introduced in version 0.25."
) +
- method ("*", (db::VCplxTrans (db::ICplxTrans::*) (const db::VCplxTrans &) const) &db::ICplxTrans::concat, gsi::arg ("t"),
+ method ("*!", (db::VCplxTrans (db::ICplxTrans::*) (const db::VCplxTrans &) const) &db::ICplxTrans::concat, gsi::arg ("t"),
"@brief Multiplication (concatenation) of transformations\n"
"\n"
"The * operator returns self*t (\"t is applied before this transformation\").\n"
@@ -1288,7 +1288,7 @@ Class decl_VCplxTrans ("db", "VCplxTrans",
"\n"
"This method has been introduced in version 0.25."
) +
- method ("*", (db::VCplxTrans (db::VCplxTrans::*) (const db::DCplxTrans &) const) &db::VCplxTrans::concat, gsi::arg ("t"),
+ method ("*!", (db::VCplxTrans (db::VCplxTrans::*) (const db::DCplxTrans &) const) &db::VCplxTrans::concat, gsi::arg ("t"),
"@brief Multiplication (concatenation) of transformations\n"
"\n"
"The * operator returns self*t (\"t is applied before this transformation\").\n"
@@ -1296,7 +1296,7 @@ Class decl_VCplxTrans ("db", "VCplxTrans",
"@param t The transformation to apply before\n"
"@return The modified transformation\n"
) +
- method ("*", (db::ICplxTrans (db::VCplxTrans::*) (const db::CplxTrans &) const) &db::VCplxTrans::concat, gsi::arg ("t"),
+ method ("*!", (db::ICplxTrans (db::VCplxTrans::*) (const db::CplxTrans &) const) &db::VCplxTrans::concat, gsi::arg ("t"),
"@brief Multiplication (concatenation) of transformations\n"
"\n"
"The * operator returns self*t (\"t is applied before this transformation\").\n"
diff --git a/src/db/db/gsiDeclDbVector.cc b/src/db/db/gsiDeclDbVector.cc
index 0e895435c..4de490437 100644
--- a/src/db/db/gsiDeclDbVector.cc
+++ b/src/db/db/gsiDeclDbVector.cc
@@ -246,6 +246,12 @@ struct vector_defs
"\n"
"The scalar product of a and b is defined as: vp = ax*bx+ay*by.\n"
) +
+ method_ext ("*", &sprod, gsi::arg ("v"),
+ "@brief Computes the scalar product between self and the given vector\n"
+ "\n"
+ "\n"
+ "The scalar product of a and b is defined as: vp = ax*bx+ay*by.\n"
+ ) +
method_ext ("sprod_sign", &sprod_sign, gsi::arg ("v"),
"@brief Computes the scalar product between self and the given vector and returns a value indicating the sign of the product\n"
"\n"
diff --git a/src/gsi/gsi/gsiDeclInternal.cc b/src/gsi/gsi/gsiDeclInternal.cc
index 0100507ff..1c0f1a773 100644
--- a/src/gsi/gsi/gsiDeclInternal.cc
+++ b/src/gsi/gsi/gsiDeclInternal.cc
@@ -49,6 +49,7 @@ static int t_double () { return T_double; }
static int t_float () { return T_float; }
static int t_var () { return T_var; }
static int t_string () { return T_string; }
+static int t_byte_array () { return T_byte_array; }
static int t_void_ptr () { return T_void_ptr; }
static int t_object () { return T_object; }
static int t_vector () { return T_vector; }
@@ -77,30 +78,31 @@ static tl::Variant default_value (const ArgType *t)
}
Class decl_ArgType ("tl", "ArgType",
- gsi::method ("TypeVoid|#t_void", &t_void) +
- gsi::method ("TypeBool|#t_bool", &t_bool) +
- gsi::method ("TypeChar|#t_char", &t_char) +
- gsi::method ("TypeSChar|#t_schar", &t_schar) +
- gsi::method ("TypeUChar|#t_uchar", &t_uchar) +
- gsi::method ("TypeShort|#t_short", &t_short) +
- gsi::method ("TypeUShort|#t_ushort", &t_ushort) +
- gsi::method ("TypeInt|#t_int", &t_int) +
- gsi::method ("TypeUInt|#t_uint", &t_uint) +
- gsi::method ("TypeLong|#t_long", &t_long) +
- gsi::method ("TypeULong|#t_ulong", &t_ulong) +
- gsi::method ("TypeLongLong|#t_longlong", &t_longlong) +
- gsi::method ("TypeULongLong|#t_ulonglong", &t_ulonglong) +
+ gsi::method ("TypeVoid", &t_void) +
+ gsi::method ("TypeBool", &t_bool) +
+ gsi::method ("TypeChar", &t_char) +
+ gsi::method ("TypeSChar", &t_schar) +
+ gsi::method ("TypeUChar", &t_uchar) +
+ gsi::method ("TypeShort", &t_short) +
+ gsi::method ("TypeUShort", &t_ushort) +
+ gsi::method ("TypeInt", &t_int) +
+ gsi::method ("TypeUInt", &t_uint) +
+ gsi::method ("TypeLong", &t_long) +
+ gsi::method ("TypeULong", &t_ulong) +
+ gsi::method ("TypeLongLong", &t_longlong) +
+ gsi::method ("TypeULongLong", &t_ulonglong) +
#if defined(HAVE_64BIT_COORD)
gsi::method ("TypeInt128|#t_int128", &t_int128) +
#endif
- gsi::method ("TypeDouble|#t_double", &t_double) +
- gsi::method ("TypeFloat|#t_float", &t_float) +
- gsi::method ("TypeVar|#t_var", &t_var) +
- gsi::method ("TypeString|#t_string", &t_string) +
- gsi::method ("TypeVoidPtr|#t_void_ptr", &t_void_ptr) +
- gsi::method ("TypeObject|#t_object", &t_object) +
- gsi::method ("TypeVector|#t_vector", &t_vector) +
- gsi::method ("TypeMap|#t_map", &t_map) +
+ gsi::method ("TypeDouble", &t_double) +
+ gsi::method ("TypeFloat", &t_float) +
+ gsi::method ("TypeVar", &t_var) +
+ gsi::method ("TypeByteArray", &t_byte_array) +
+ gsi::method ("TypeString", &t_string) +
+ gsi::method ("TypeVoidPtr", &t_void_ptr) +
+ gsi::method ("TypeObject", &t_object) +
+ gsi::method ("TypeVector", &t_vector) +
+ gsi::method ("TypeMap", &t_map) +
gsi::method_ext ("type", &type,
"@brief Return the basic type (see t_.. constants)\n"
) +
diff --git a/src/gsi/gsi/gsiExpression.cc b/src/gsi/gsi/gsiExpression.cc
index abda57030..1254e519e 100644
--- a/src/gsi/gsi/gsiExpression.cc
+++ b/src/gsi/gsi/gsiExpression.cc
@@ -199,6 +199,9 @@ private:
for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms (); ++syn) {
if (syn->is_setter) {
add_method (syn->name + "=", *m);
+ } else if (syn->name == "*!") {
+ // non-commutative multiplication
+ add_method ("*", *m);
} else {
add_method (syn->name, *m);
}
diff --git a/src/gsi/gsi/gsiMethods.cc b/src/gsi/gsi/gsiMethods.cc
index f49813aeb..4350565dc 100644
--- a/src/gsi/gsi/gsiMethods.cc
+++ b/src/gsi/gsi/gsiMethods.cc
@@ -85,7 +85,7 @@ void MethodBase::parse_name (const std::string &name)
{
const char *n = name.c_str ();
- if (*n == '*' && n[1] && n[1] != '*' && n[1] != '=') {
+ if (*n == '*' && n[1] && n[1] != '*' && n[1] != '!' && n[1] != '=') {
m_protected = true;
++n;
}
diff --git a/src/gsi/unit_tests/gsiExpressionTests.cc b/src/gsi/unit_tests/gsiExpressionTests.cc
index ac47b9a3e..1fdd8fb2e 100644
--- a/src/gsi/unit_tests/gsiExpressionTests.cc
+++ b/src/gsi/unit_tests/gsiExpressionTests.cc
@@ -589,3 +589,12 @@ TEST(10)
EXPECT_EQ (v.to_string (), std::string ("2"));
}
+TEST(11)
+{
+ tl::Eval e;
+ tl::Variant v;
+
+ // mapping of *! to *:
+ v = e.parse ("var b = Trans.new(1)*Trans.new(Vector.new(10, 20))").execute ();
+ EXPECT_EQ (v.to_string (), std::string ("r90 -20,10"));
+}
diff --git a/src/lay/lay/layGSIHelpProvider.cc b/src/lay/lay/layGSIHelpProvider.cc
index 280220dc8..d7f13c65a 100644
--- a/src/lay/lay/layGSIHelpProvider.cc
+++ b/src/lay/lay/layGSIHelpProvider.cc
@@ -149,6 +149,8 @@ full_name (const gsi::MethodBase::MethodSynonym &syn)
return syn.name + "?";
} else if (syn.is_setter) {
return syn.name + "=";
+ } else if (syn.name == "*!") {
+ return "*";
} else {
return syn.name;
}
@@ -1411,7 +1413,7 @@ GSIHelpProvider::produce_class_doc (const std::string &cls) const
if (! pydoc.empty ()) {
os << "";
os << tl::to_string (QObject::tr ("Python specific notes: "));
- os << "
" << escape_xml (pydoc) << "
" << std::endl;
+ os << "
" << tl::replaced (escape_xml (pydoc), "\n\n", "
") << "
" << std::endl;
}
os << "";
diff --git a/src/pya/pya/gsiDeclPya.cc b/src/pya/pya/gsiDeclPya.cc
new file mode 100644
index 000000000..798ee8269
--- /dev/null
+++ b/src/pya/pya/gsiDeclPya.cc
@@ -0,0 +1,103 @@
+
+/*
+
+ KLayout Layout Viewer
+ Copyright (C) 2006-2022 Matthias Koefferlein
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+#include
+
+#include "gsiDecl.h"
+#include "pyaInternal.h"
+#include "pya.h"
+
+namespace gsi
+{
+
+static const pya::MethodTableEntry *getter (std::pair *p)
+{
+ return p->second;
+}
+
+static const pya::MethodTableEntry *setter (std::pair *p)
+{
+ return p->first;
+}
+
+gsi::Class > decl_PythonGetterSetterPair ("tl", "PythonGetterSetterPair",
+ gsi::method_ext ("getter", &getter, "@brief Gets the getter function") +
+ gsi::method_ext ("setter", &setter, "@brief Gets the setter function"),
+ "@hide"
+);
+
+gsi::Class decl_PythonFunction ("tl", "PythonFunction",
+ gsi::method ("methods", &pya::MethodTableEntry::methods, "@brief Gets the list of methods bound to this Python function") +
+ gsi::method ("name", &pya::MethodTableEntry::name, "@brief Gets the name of this Python function") +
+ gsi::method ("is_static", &pya::MethodTableEntry::is_static, "@brief Gets the value indicating whether this Python function is 'static' (class function)") +
+ gsi::method ("is_protected", &pya::MethodTableEntry::is_protected, "@brief Gets a value indicating whether this function is protected"),
+ "@hide"
+);
+
+static std::vector get_python_methods (const gsi::ClassBase *cls, bool st)
+{
+ const pya::MethodTable *mt = pya::MethodTable::method_table_by_class (cls);
+
+ std::vector methods;
+
+ if (mt != 0) {
+ for (auto m = mt->method_table ().begin (); m != mt->method_table ().end (); ++m) {
+ if (m->is_enabled () && m->is_static () == st) {
+ methods.push_back (m.operator-> ());
+ }
+ }
+ }
+
+ return methods;
+}
+
+static std::vector > get_python_properties (const gsi::ClassBase *cls, bool st)
+{
+ const pya::MethodTable *mt = pya::MethodTable::method_table_by_class (cls);
+
+ std::vector > methods;
+
+ if (mt != 0) {
+ for (auto m = mt->property_table ().begin (); m != mt->property_table ().end (); ++m) {
+ if (m->first.is_enabled () && m->first.is_static () == st) {
+ methods.push_back (std::make_pair (&m->first, &m->second));
+ }
+ }
+ }
+
+ return methods;
+}
+
+static
+gsi::ClassExt class_base_ext (
+ gsi::method_ext ("python_methods", &get_python_methods, gsi::arg ("static"), "@brief Gets the Python methods (static or non-static)") +
+ gsi::method_ext ("python_properties", &get_python_properties, gsi::arg ("static"), "@brief Gets the Python properties (static or non-static) as a list of getter/setter pairs\nNote that if a getter or setter is not available the list of Python functions for this part is empty."),
+ "@hide"
+);
+
+static
+gsi::ClassExt method_base_ext (
+ gsi::method_ext ("python_methods", &pya::PythonInterpreter::python_doc, "@brief Gets the Python specific documentation"),
+ "@hide"
+);
+
+}
diff --git a/src/pya/pya/pya.h b/src/pya/pya/pya.h
index fe1337b40..b2b26fed0 100644
--- a/src/pya/pya/pya.h
+++ b/src/pya/pya/pya.h
@@ -68,7 +68,7 @@ namespace pya
} catch (...) { \
if (PythonInterpreter::instance ()) { PythonInterpreter::instance ()->end_execution (); } \
throw; \
- }
+ }
/**
* @brief A class encapsulating a python exception
@@ -92,7 +92,7 @@ class PYA_PUBLIC PythonInterpreter
{
public:
/**
- * @brief The constructor
+ * @brief The constructor
*
* If embedded is true, the interpreter is an embedded one. Only in this case, the
* Python interpreter is initialized. Otherwise, it is assumed the interpreter
@@ -101,7 +101,7 @@ public:
PythonInterpreter (bool embedded = true);
/**
- * @brief The destructor
+ * @brief The destructor
*/
~PythonInterpreter ();
@@ -160,10 +160,10 @@ public:
* @brief Implementation of gsi::Interpreter::eval_expr
*/
tl::Variant eval_expr (const char *string, const char *filename = 0, int line = 1, int context = -1);
-
+
/**
* @brief Implementation of gsi::Interpreter::eval_string_and_print
- */
+ */
void eval_string_and_print (const char *string, const char *filename = 0, int line = 1, int context = -1);
/**
@@ -172,7 +172,7 @@ public:
virtual gsi::Inspector *inspector (int context = -1);
/**
- * @brief Defines a global variable with the given name and value
+ * @brief Defines a global variable with the given name and value
*/
void define_variable (const std::string &name, const tl::Variant &value);
@@ -284,4 +284,3 @@ private:
}
#endif
-
diff --git a/src/pya/pya/pya.pro b/src/pya/pya/pya.pro
index 9e514c318..84176f306 100644
--- a/src/pya/pya/pya.pro
+++ b/src/pya/pya/pya.pro
@@ -11,13 +11,16 @@ SOURCES = \
pyaConvert.cc \
pyaHelpers.cc \
pyaInspector.cc \
+ pyaInternal.cc \
+ pyaCallables.cc \
pyaMarshal.cc \
pyaObject.cc \
pyaRefs.cc \
pyaUtils.cc \
pyaModule.cc \
pyaSignalHandler.cc \
- pyaStatusChangedListener.cc
+ pyaStatusChangedListener.cc \
+ gsiDeclPya.cc
HEADERS += \
pya.h \
@@ -25,6 +28,8 @@ HEADERS += \
pyaConvert.h \
pyaHelpers.h \
pyaInspector.h \
+ pyaInternal.h \
+ pyaCallables.h \
pyaMarshal.h \
pyaObject.h \
pyaRefs.h \
diff --git a/src/pya/pya/pyaCallables.cc b/src/pya/pya/pyaCallables.cc
new file mode 100644
index 000000000..c0a782904
--- /dev/null
+++ b/src/pya/pya/pyaCallables.cc
@@ -0,0 +1,1739 @@
+/*
+
+ KLayout Layout Viewer
+ Copyright (C) 2006-2022 Matthias Koefferlein
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+#include "pyaCallables.h"
+#include "pyaObject.h"
+#include "pyaModule.h"
+#include "pyaInternal.h"
+#include "pyaHelpers.h"
+#include "pyaMarshal.h"
+#include "pyaConvert.h"
+#include "pyaUtils.h"
+#include "gsiMethods.h"
+
+namespace pya
+{
+
+// --------------------------------------------------------------------------
+// Methods for PYAObjectBase Python binding
+
+/**
+ * @brief Destructor for the base class (the implementation object)
+ */
+void
+pya_object_deallocate (PyObject *self)
+{
+ // This avoids an assertion in debug builds (Python, gcmodule.c - update_refs).
+ // In short, the GC expects not to see objects with refcount 0 and asserts.
+ // However, due to triggering of signals or similar, the destructor call below
+ // may trigger a GC (https://github.com/KLayout/klayout/issues/1054).
+ // According to the comments this may be turned into a release mode assertion, so
+ // we better work around it.
+ ++self->ob_refcnt;
+
+ PYAObjectBase *p = PYAObjectBase::from_pyobject (self);
+ p->~PYAObjectBase ();
+ Py_TYPE (self)->tp_free (self);
+}
+
+/**
+ * @brief Constructor for the base class (the implementation object)
+ */
+int
+pya_object_init (PyObject * /*self*/, PyObject *args, PyObject *kwds)
+{
+ // no particular initialization
+ static char *kwlist[] = {NULL};
+ if (! PyArg_ParseTupleAndKeywords (args, kwds, "", kwlist)) {
+ return -1;
+ } else {
+ return 0;
+ }
+}
+
+/**
+ * @brief Factory for a base class object
+ */
+PyObject *
+pya_object_new (PyTypeObject *type, PyObject * /*args*/, PyObject * /*kwds*/)
+{
+ // create the object
+ PyObject *self_pyobject = type->tp_alloc (type, 0);
+ PYAObjectBase *self = PYAObjectBase::from_pyobject_unsafe (self_pyobject);
+ new (self) PYAObjectBase (PythonModule::cls_for_type (type), self_pyobject);
+ return self_pyobject;
+}
+
+// --------------------------------------------------------------------------
+// Method binding guts
+
+/**
+ * @brief Gets the method name from a method id
+ */
+std::string
+method_name_from_id (int mid, PyObject *self)
+{
+ const gsi::ClassBase *cls_decl = 0;
+
+ if (! PyType_Check (self)) {
+ PYAObjectBase *p = PYAObjectBase::from_pyobject (self);
+ cls_decl = p->cls_decl ();
+ } else {
+ cls_decl = PythonModule::cls_for_type ((PyTypeObject *) self);
+ }
+
+ tl_assert (cls_decl != 0);
+
+ const MethodTable *mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ // locate the method in the base classes method table if necessary
+ while (mid < int (mt->bottom_mid ())) {
+
+ tl_assert (cls_decl->base ());
+ cls_decl = cls_decl->base ();
+ mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ }
+
+ return cls_decl->name () + "." + mt->name (mid);
+}
+
+/**
+ * @brief Gets the method name from a method id
+ */
+std::string
+property_name_from_id (int mid, PyObject *self)
+{
+ const gsi::ClassBase *cls_decl = 0;
+
+ if (! PyType_Check (self)) {
+ PYAObjectBase *p = PYAObjectBase::from_pyobject (self);
+ cls_decl = p->cls_decl ();
+ } else {
+ cls_decl = PythonModule::cls_for_type ((PyTypeObject *) self);
+ }
+
+ tl_assert (cls_decl != 0);
+
+ const MethodTable *mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ // locate the method in the base classes method table if necessary
+ while (mid < int (mt->bottom_property_mid ())) {
+
+ tl_assert (cls_decl->base ());
+ cls_decl = cls_decl->base ();
+ mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ }
+
+ return cls_decl->name () + "." + mt->property_name (mid);
+}
+
+static gsi::ArgType create_void_type ()
+{
+ gsi::ArgType at;
+ at.init ();
+ return at;
+}
+
+static gsi::ArgType s_void_type = create_void_type ();
+
+static PyObject *
+get_return_value (PYAObjectBase *self, gsi::SerialArgs &retlist, const gsi::MethodBase *meth, tl::Heap &heap)
+{
+ PyObject *ret = NULL;
+
+ if (meth->ret_type ().is_iter ()) {
+
+ gsi::IterAdaptorAbstractBase *iter = (gsi::IterAdaptorAbstractBase *) retlist.read (heap);
+ ret = (PyObject *) PYAIteratorObject::create (self ? self->py_object () : 0, iter, &meth->ret_type ());
+
+ } else if (meth->ret_type () == s_void_type && self != 0) {
+
+ // simple, yet magical :)
+ ret = self->py_object ();
+ Py_INCREF (ret);
+
+ } else {
+
+ ret = pop_arg (meth->ret_type (), retlist, self, heap).release ();
+
+ }
+
+ return ret;
+}
+
+static const gsi::MethodBase *
+match_method (int mid, PyObject *self, PyObject *args, bool strict)
+{
+ const gsi::ClassBase *cls_decl = 0;
+
+ PYAObjectBase *p = 0;
+ if (! PyType_Check (self)) {
+ p = PYAObjectBase::from_pyobject (self);
+ cls_decl = p->cls_decl ();
+ } else {
+ cls_decl = PythonModule::cls_for_type ((PyTypeObject *) self);
+ }
+
+ tl_assert (cls_decl != 0);
+
+ int argc = args == NULL ? 0 : int (PyTuple_Size (args));
+
+ // get number of candidates by argument count
+ const gsi::MethodBase *meth = 0;
+ unsigned int candidates = 0;
+
+ const MethodTable *mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ // locate the method in the base classes method table if necessary
+ while (mid < int (mt->bottom_mid ())) {
+
+ tl_assert (cls_decl->base ());
+ cls_decl = cls_decl->base ();
+ mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ }
+
+ for (MethodTableEntry::method_iterator m = mt->begin (mid); m != mt->end (mid); ++m) {
+
+ if ((*m)->is_callback()) {
+
+ // ignore callbacks
+
+ } else if ((*m)->compatible_with_num_args (argc)) {
+
+ ++candidates;
+ meth = *m;
+
+ }
+
+ }
+
+ // no candidate -> error
+ if (! meth) {
+
+ if (! strict) {
+ return 0;
+ }
+
+ std::set nargs;
+ for (MethodTableEntry::method_iterator m = mt->begin (mid); m != mt->end (mid); ++m) {
+ if (! (*m)->is_callback ()) {
+ nargs.insert (std::distance ((*m)->begin_arguments (), (*m)->end_arguments ()));
+ }
+ }
+
+ std::string nargs_s;
+ for (std::set::const_iterator na = nargs.begin (); na != nargs.end (); ++na) {
+ if (na != nargs.begin ()) {
+ nargs_s += "/";
+ }
+ nargs_s += tl::to_string (*na);
+ }
+
+ throw tl::Exception (tl::sprintf (tl::to_string (tr ("Invalid number of arguments (got %d, expected %s)")), argc, nargs_s));
+
+ }
+
+ // more than one candidate -> refine by checking the arguments
+ if (candidates > 1) {
+
+ meth = 0;
+ candidates = 0;
+ int score = 0;
+ bool const_matching = true;
+
+ for (MethodTableEntry::method_iterator m = mt->begin (mid); m != mt->end (mid); ++m) {
+
+ if (! (*m)->is_callback ()) {
+
+ // check arguments (count and type)
+ bool is_valid = (*m)->compatible_with_num_args (argc);
+ int sc = 0;
+ int i = 0;
+ for (gsi::MethodBase::argument_iterator a = (*m)->begin_arguments (); is_valid && i < argc && a != (*m)->end_arguments (); ++a, ++i) {
+ if (test_arg (*a, PyTuple_GetItem (args, i), false /*strict*/)) {
+ ++sc;
+ } else if (test_arg (*a, PyTuple_GetItem (args, i), true /*loose*/)) {
+ // non-scoring match
+ } else {
+ is_valid = false;
+ }
+ }
+
+ if (is_valid && p) {
+
+ // constness matching candidates have precedence
+ if ((*m)->is_const () != p->const_ref ()) {
+ if (const_matching && candidates > 0) {
+ is_valid = false;
+ } else {
+ const_matching = false;
+ }
+ } else if (! const_matching) {
+ const_matching = true;
+ candidates = 0;
+ }
+
+ }
+
+ if (is_valid) {
+
+ // otherwise take the candidate with the better score
+ if (candidates > 0 && sc > score) {
+ candidates = 1;
+ meth = *m;
+ score = sc;
+ } else if (candidates == 0 || sc == score) {
+ ++candidates;
+ meth = *m;
+ score = sc;
+ }
+
+ }
+
+ }
+
+ }
+
+ } else if (meth && mt->fallback_not_implemented (mid)) {
+
+ // one candidate, but needs checking whether compatibility is given - this avoid having to route NotImplemented over TypeError exceptions later
+ int i = 0;
+ for (gsi::MethodBase::argument_iterator a = meth->begin_arguments (); i < argc && a != meth->end_arguments (); ++a, ++i) {
+ if (! test_arg (*a, PyTuple_GetItem (args, i), true /*loose*/)) {
+ return 0;
+ }
+ }
+
+ }
+
+ if (! meth) {
+ if (! strict || mt->fallback_not_implemented (mid)) {
+ return 0;
+ } else {
+ throw tl::TypeError (tl::to_string (tr ("No overload with matching arguments")));
+ }
+ }
+
+ if (candidates > 1) {
+ if (! strict || mt->fallback_not_implemented (mid)) {
+ return 0;
+ } else {
+ throw tl::TypeError (tl::to_string (tr ("Ambiguous overload variants - multiple method declarations match arguments")));
+ }
+ }
+
+ return meth;
+}
+
+/**
+ * @brief Implements dup
+ */
+static PyObject *
+object_dup (PyObject *self, PyObject *args)
+{
+ const gsi::ClassBase *cls_decl_self = PythonModule::cls_for_type (Py_TYPE (self));
+ tl_assert (cls_decl_self != 0);
+
+ if (! PyArg_ParseTuple (args, "")) {
+ return NULL;
+ }
+
+ if (! cls_decl_self->can_copy ()) {
+ throw tl::Exception (tl::to_string (tr ("No copy constructor provided for class '%s'")), cls_decl_self->name ());
+ }
+
+ PyObject *new_object = Py_TYPE (self)->tp_alloc (Py_TYPE (self), 0);
+ PythonRef obj (new_object);
+ PYAObjectBase *new_pya_base = PYAObjectBase::from_pyobject_unsafe (new_object);
+ new (new_pya_base) PYAObjectBase (cls_decl_self, new_object);
+ new_pya_base->set (cls_decl_self->clone (PYAObjectBase::from_pyobject (self)->obj ()), true, false, false);
+
+ return obj.release ();
+}
+
+/**
+ * @brief Implements assign
+ */
+static PyObject *
+object_assign (PyObject *self, PyObject *args)
+{
+ const gsi::ClassBase *cls_decl_self = PythonModule::cls_for_type (Py_TYPE (self));
+ tl_assert (cls_decl_self != 0);
+
+ PyObject *src = NULL;
+ if (! PyArg_ParseTuple (args, "O", &src)) {
+ return NULL;
+ }
+
+ const gsi::ClassBase *cls_decl_src = PythonModule::cls_for_type (Py_TYPE (src));
+ tl_assert (cls_decl_src != 0);
+
+ if (cls_decl_src != cls_decl_self) {
+ throw tl::Exception (tl::to_string (tr ("Type is not identical on assign")));
+ }
+ if (! cls_decl_self->can_copy ()) {
+ throw tl::Exception (tl::to_string (tr ("No assignment provided for class '%s'")), cls_decl_self->name ());
+ }
+
+ cls_decl_self->assign ((PYAObjectBase::from_pyobject (self))->obj (), (PYAObjectBase::from_pyobject (src))->obj ());
+
+ Py_INCREF (self);
+ return self;
+}
+
+/**
+ * @brief Default implementation of "__deepcopy__"
+ */
+PyObject *
+object_default_deepcopy_impl (PyObject *self, PyObject * /*args*/)
+{
+ PyObject *copy_method = PyObject_GetAttrString (self, "__copy__");
+ tl_assert (copy_method != NULL);
+
+ PythonRef empty_args (PyTuple_New (0));
+ return PyObject_Call (copy_method, empty_args.get (), NULL);
+}
+
+/**
+ * @brief Default implementation of "__ne__"
+ */
+PyObject *
+object_default_ne_impl (PyObject *self, PyObject *args)
+{
+ PyObject *eq_method = PyObject_GetAttrString (self, "__eq__");
+ tl_assert (eq_method != NULL);
+
+ PythonRef res (PyObject_Call (eq_method, args, NULL));
+ if (! res) {
+ return NULL;
+ } else {
+ return c2python (! python2c (res.get ()));
+ }
+}
+
+/**
+ * @brief Default implementation of "__ge__"
+ */
+PyObject *
+object_default_ge_impl (PyObject *self, PyObject *args)
+{
+ PyObject *eq_method = PyObject_GetAttrString (self, "__lt__");
+ tl_assert (eq_method != NULL);
+
+ PythonRef res (PyObject_Call (eq_method, args, NULL));
+ if (! res) {
+ return NULL;
+ } else {
+ return c2python (! python2c (res.get ()));
+ }
+}
+
+/**
+ * @brief Default implementation of "__le__"
+ */
+PyObject *
+object_default_le_impl (PyObject *self, PyObject *args)
+{
+ PyObject *eq_method = PyObject_GetAttrString (self, "__eq__");
+ tl_assert (eq_method != NULL);
+
+ PyObject *lt_method = PyObject_GetAttrString (self, "__lt__");
+ tl_assert (lt_method != NULL);
+
+ PythonRef eq_res (PyObject_Call (eq_method, args, NULL));
+ if (! eq_res) {
+ return NULL;
+ }
+ PythonRef lt_res (PyObject_Call (lt_method, args, NULL));
+ if (! lt_res) {
+ return NULL;
+ }
+ return c2python (python2c (eq_res.get ()) || python2c (lt_res.get ()));
+}
+
+/**
+ * @brief Default implementation of "__gt__"
+ */
+PyObject *
+object_default_gt_impl (PyObject *self, PyObject *args)
+{
+ PyObject *eq_method = PyObject_GetAttrString (self, "__eq__");
+ tl_assert (eq_method != NULL);
+
+ PyObject *lt_method = PyObject_GetAttrString (self, "__lt__");
+ tl_assert (lt_method != NULL);
+
+ PythonRef eq_res (PyObject_Call (eq_method, args, NULL));
+ if (! eq_res) {
+ return NULL;
+ }
+ PythonRef lt_res (PyObject_Call (lt_method, args, NULL));
+ if (! lt_res) {
+ return NULL;
+ }
+ return c2python (! (python2c (eq_res.get ()) || python2c (lt_res.get ())));
+}
+
+/**
+ * @brief Implements create
+ */
+static PyObject *
+object_create (PyObject *self, PyObject *args)
+{
+ if (! PyArg_ParseTuple (args, "")) {
+ return NULL;
+ }
+
+ (PYAObjectBase::from_pyobject (self))->obj ();
+ Py_RETURN_NONE;
+}
+
+/**
+ * @brief Implements release
+ */
+static PyObject *
+object_release (PyObject *self, PyObject *args)
+{
+ if (! PyArg_ParseTuple (args, "")) {
+ return NULL;
+ }
+
+ (PYAObjectBase::from_pyobject (self))->release ();
+ Py_RETURN_NONE;
+}
+
+/**
+ * @brief Implements keep
+ */
+static PyObject *
+object_keep (PyObject *self, PyObject *args)
+{
+ if (! PyArg_ParseTuple (args, "")) {
+ return NULL;
+ }
+
+ (PYAObjectBase::from_pyobject (self))->keep ();
+ Py_RETURN_NONE;
+}
+
+/**
+ * @brief Implements destroy
+ */
+static PyObject *
+object_destroy (PyObject *self, PyObject *args)
+{
+ if (! PyArg_ParseTuple (args, "")) {
+ return NULL;
+ }
+
+ (PYAObjectBase::from_pyobject (self))->destroy ();
+ Py_RETURN_NONE;
+}
+
+/**
+ * @brief Implements destroyed
+ */
+static PyObject *
+object_destroyed (PyObject *self, PyObject *args)
+{
+ if (! PyArg_ParseTuple (args, "")) {
+ return NULL;
+ }
+
+ return c2python (PYAObjectBase::from_pyobject (self)->destroyed ());
+}
+
+/**
+ * @brief Implements is_const
+ */
+static PyObject *
+object_is_const (PyObject *self, PyObject *args)
+{
+ if (! PyArg_ParseTuple (args, "")) {
+ return NULL;
+ }
+
+ return c2python (PYAObjectBase::from_pyobject (self)->const_ref ());
+}
+
+static PyObject *
+special_method_impl (gsi::MethodBase::special_method_type smt, PyObject *self, PyObject *args)
+{
+ if (smt == gsi::MethodBase::Destroy) {
+ return object_destroy (self, args);
+ } else if (smt == gsi::MethodBase::Keep) {
+ return object_keep (self, args);
+ } else if (smt == gsi::MethodBase::Release) {
+ return object_release (self, args);
+ } else if (smt == gsi::MethodBase::Create) {
+ return object_create (self, args);
+ } else if (smt == gsi::MethodBase::IsConst) {
+ return object_is_const (self, args);
+ } else if (smt == gsi::MethodBase::Destroyed) {
+ return object_destroyed (self, args);
+ } else if (smt == gsi::MethodBase::Assign) {
+ return object_assign (self, args);
+ } else if (smt == gsi::MethodBase::Dup) {
+ return object_dup (self, args);
+ } else {
+ Py_RETURN_NONE;
+ }
+}
+
+static void
+push_args (gsi::SerialArgs &arglist, const gsi::MethodBase *meth, PyObject *args, tl::Heap &heap)
+{
+ int i = 0;
+ int argc = args == NULL ? 0 : int (PyTuple_Size (args));
+
+ try {
+
+ for (gsi::MethodBase::argument_iterator a = meth->begin_arguments (); i < argc && a != meth->end_arguments (); ++a, ++i) {
+ push_arg (*a, arglist, PyTuple_GetItem (args, i), heap);
+ }
+
+ } catch (tl::Exception &ex) {
+
+ // In case of an error upon write, pop the arguments to clean them up.
+ // Without this, there is a risk to keep dead objects on the stack.
+ for (gsi::MethodBase::argument_iterator a = meth->begin_arguments (); a != meth->end_arguments () && arglist; ++a) {
+ pop_arg (*a, arglist, 0, heap);
+ }
+
+ std::string msg;
+ const gsi::ArgSpecBase *arg_spec = meth->begin_arguments () [i].spec ();
+
+ if (arg_spec && ! arg_spec->name ().empty ()) {
+ msg = tl::sprintf (tl::to_string (tr ("%s for argument #%d ('%s')")), ex.basic_msg (), i + 1, arg_spec->name ());
+ } else {
+ msg = tl::sprintf (tl::to_string (tr ("%s for argument #%d")), ex.basic_msg (), i + 1);
+ }
+
+ ex.set_basic_msg (msg);
+ throw;
+
+ } catch (...) {
+
+ // In case of an error upon write, pop the arguments to clean them up.
+ // Without this, there is a risk to keep dead objects on the stack.
+ for (gsi::MethodBase::argument_iterator a = meth->begin_arguments (); a != meth->end_arguments () && arglist; ++a) {
+ pop_arg (*a, arglist, 0, heap);
+ }
+
+ throw;
+
+ }
+}
+
+static PyObject *
+method_adaptor (int mid, PyObject *self, PyObject *args)
+{
+ PyObject *ret = NULL;
+
+ PYA_TRY
+
+ const gsi::MethodBase *meth = match_method (mid, self, args, true);
+
+ // method is not implemented
+ if (! meth) {
+ Py_RETURN_NOTIMPLEMENTED;
+ }
+
+ // handle special methods
+ if (meth->smt () != gsi::MethodBase::None) {
+
+ ret = special_method_impl (meth->smt (), self, args);
+
+ } else {
+
+ PYAObjectBase *p = 0;
+ if (! PyType_Check (self)) {
+ // non-static method
+ p = PYAObjectBase::from_pyobject (self);
+ }
+
+ tl::Heap heap;
+
+ if (p && p->const_ref () && ! meth->is_const ()) {
+ throw tl::Exception (tl::to_string (tr ("Cannot call non-const method on a const reference")));
+ }
+
+ void *obj = 0;
+ if (p) {
+ // Hint: this potentially instantiates the object
+ obj = p->obj ();
+ }
+
+ gsi::SerialArgs retlist (meth->retsize ());
+ gsi::SerialArgs arglist (meth->argsize ());
+
+ push_args (arglist, meth, args, heap);
+
+ meth->call (obj, arglist, retlist);
+
+ ret = get_return_value (p, retlist, meth, heap);
+
+ if (ret == NULL) {
+ Py_INCREF (Py_None);
+ ret = Py_None;
+ }
+
+ }
+
+ PYA_CATCH(method_name_from_id (mid, self))
+
+ return ret;
+}
+
+static PyObject *property_getter_impl (int mid, PyObject *self);
+
+static PyObject *
+property_getter_adaptor (int mid, PyObject *self, PyObject *args)
+{
+ PyObject *ret = NULL;
+
+ PYA_TRY
+
+ int argc = args == NULL ? 0 : int (PyTuple_Size (args));
+ if (argc != 0) {
+ throw tl::Exception (tl::to_string (tr ("Property getters must not have an argument")));
+ }
+
+ ret = property_getter_impl (mid, self);
+
+ PYA_CATCH(property_name_from_id (mid, self))
+
+ return ret;
+}
+
+static PyObject *property_setter_impl (int mid, PyObject *self, PyObject *value);
+
+static PyObject *
+property_setter_adaptor (int mid, PyObject *self, PyObject *args)
+{
+ PyObject *ret = NULL;
+
+ PYA_TRY
+
+ int argc = args == NULL ? 0 : int (PyTuple_Size (args));
+ if (argc != 1) {
+ throw tl::Exception (tl::to_string (tr ("Property setter needs exactly one argument")));
+ }
+
+ PyObject *value = PyTuple_GetItem (args, 0);
+ if (value) {
+ ret = property_setter_impl (mid, self, value);
+ }
+
+ PYA_CATCH(property_name_from_id (mid, self))
+
+ return ret;
+}
+
+/**
+ * @brief __init__ implementation (bound to method ith id 'mid')
+ */
+static PyObject *
+method_init_adaptor (int mid, PyObject *self, PyObject *args)
+{
+ PYA_TRY
+
+ PYAObjectBase *p = PYAObjectBase::from_pyobject (self);
+
+ // delete any object which we may have already
+ if (p->is_attached ()) {
+ p->destroy ();
+ }
+
+ const gsi::MethodBase *meth = match_method (mid, self, args, PyTuple_Size (args) > 0 || ! p->cls_decl ()->can_default_create ());
+
+ if (meth && meth->smt () == gsi::MethodBase::None) {
+
+ tl::Heap heap;
+
+ gsi::SerialArgs retlist (meth->retsize ());
+ gsi::SerialArgs arglist (meth->argsize ());
+
+ push_args (arglist, meth, args, heap);
+
+ meth->call (0, arglist, retlist);
+
+ void *obj = retlist.read (heap);
+ if (obj) {
+ p->set (obj, true, false, true);
+ }
+
+ } else {
+
+ // No action required - the object is default-created later once it is really required.
+ if (! PyArg_ParseTuple (args, "")) {
+ return NULL;
+ }
+
+ }
+
+ Py_RETURN_NONE;
+
+ PYA_CATCH(method_name_from_id (mid, self))
+
+ return NULL;
+}
+
+
+static PyObject *
+property_getter_impl (int mid, PyObject *self)
+{
+ const gsi::ClassBase *cls_decl;
+
+ PYAObjectBase *p = 0;
+ if (! PyType_Check (self)) {
+ p = PYAObjectBase::from_pyobject (self);
+ cls_decl = p->cls_decl ();
+ } else {
+ cls_decl = PythonModule::cls_for_type ((PyTypeObject *) self);
+ }
+
+ const MethodTable *mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ // locate the method in the base classes method table if necessary
+ while (mid < int (mt->bottom_property_mid ())) {
+
+ tl_assert (cls_decl->base ());
+ cls_decl = cls_decl->base ();
+ mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ }
+
+ // fetch the (only) getter method
+ const gsi::MethodBase *meth = 0;
+ if (mt->begin_getters (mid) != mt->end_getters (mid)) {
+ meth = *mt->begin_getters (mid);
+ } else {
+ throw tl::Exception (tl::to_string (tr ("Internal error: cannot locate getter method")));
+ }
+
+ if (meth->is_signal ()) {
+
+ // a signal getter is implemented as returning a proxy object for the signal which allows manipulation
+ // of the signal
+ tl_assert (p != 0); // no static signals
+ return PYASignal::create (self, p->signal_handler (meth));
+
+ } else {
+
+ // getter must not have arguments
+ if (meth->argsize () > 0) {
+ throw tl::Exception (tl::to_string (tr ("Internal error: getters must not have arguments")));
+ }
+
+ void *obj = 0;
+ if (p) {
+ // Hint: this potentially instantiates the object
+ obj = p->obj ();
+ }
+
+ tl::Heap heap;
+
+ gsi::SerialArgs retlist (meth->retsize ());
+ gsi::SerialArgs arglist (0);
+ meth->call (obj, arglist, retlist);
+
+ PyObject *ret = get_return_value (p, retlist, meth, heap);
+
+ if (ret == NULL) {
+ Py_INCREF (Py_None);
+ ret = Py_None;
+ }
+
+ return ret;
+
+ }
+}
+
+PyObject *
+property_getter_func (PyObject *self, void *closure)
+{
+ PyObject *ret = NULL;
+ PYA_TRY
+ ret = property_getter_impl (getter_from_closure (closure), self);
+ PYA_CATCH(property_name_from_id (getter_from_closure (closure), self))
+ return ret;
+}
+
+static PyObject *
+property_setter_impl (int mid, PyObject *self, PyObject *value)
+{
+ const gsi::ClassBase *cls_decl;
+
+ PYAObjectBase *p = 0;
+ if (! PyType_Check (self)) {
+ p = PYAObjectBase::from_pyobject (self);
+ cls_decl = p->cls_decl ();
+ } else {
+ cls_decl = PythonModule::cls_for_type ((PyTypeObject *) self);
+ }
+
+ if (p && p->const_ref ()) {
+ throw tl::Exception (tl::to_string (tr ("Cannot call a setter on a const reference")));
+ }
+
+ const MethodTable *mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ // locate the method in the base classes method table if necessary
+ while (mid < int (mt->bottom_property_mid ())) {
+
+ tl_assert (cls_decl->base ());
+ cls_decl = cls_decl->base ();
+ mt = MethodTable::method_table_by_class (cls_decl);
+ tl_assert (mt);
+
+ }
+
+ if (mt->begin_setters (mid) == mt->end_setters (mid)) {
+ throw tl::Exception (tl::to_string (tr ("Internal error: cannot locate setter method")));
+ }
+
+ const gsi::MethodBase *meth = 0;
+ int candidates = 0;
+
+ // Find the setter among the methods
+ for (MethodTableEntry::method_iterator m = mt->begin_setters (mid); m != mt->end_setters (mid); ++m) {
+
+ if ((*m)->is_signal ()) {
+
+ candidates = 1;
+ meth = *m;
+ break;
+
+ } else if ((*m)->compatible_with_num_args (1)) {
+
+ ++candidates;
+ meth = *m;
+
+ }
+
+ }
+
+ // no candidate -> error
+ if (! meth) {
+ throw tl::Exception (tl::to_string (tr ("Internal error: no setter compatible with one argument")));
+ }
+
+ // more than one candidate -> refine by checking the arguments
+ if (candidates > 1) {
+
+ // two passes where the second is with loose checking
+ int pass = 0;
+
+ do {
+
+ meth = 0;
+ candidates = 0;
+
+ for (MethodTableEntry::method_iterator m = mt->begin_setters (mid); m != mt->end_setters (mid); ++m) {
+
+ // check arguments (count and type)
+ bool is_valid = (*m)->compatible_with_num_args (1);
+ if (is_valid && ! test_arg (*(*m)->begin_arguments (), value, pass != 0 /*loose in the second pass*/)) {
+ is_valid = false;
+ }
+
+ if (is_valid) {
+ ++candidates;
+ meth = *m;
+ }
+
+ }
+
+ ++pass;
+
+ } while (! meth && pass < 2);
+
+ }
+
+ if (! meth) {
+ throw tl::Exception (tl::to_string (tr ("No setter overload with matching arguments")));
+ } else if (candidates > 1) {
+ throw tl::Exception (tl::to_string (tr ("Ambiguous overload variants - multiple setter declarations match arguments")));
+ }
+
+ void *obj = 0;
+ if (p) {
+ // Hint: this potentially instantiates the object
+ obj = p->obj ();
+ }
+
+ if (meth->is_signal ()) {
+
+ if (!p) {
+
+ // TODO: Static signals?
+
+ } else if (PyObject_IsInstance (value, (PyObject *) PYASignal::cls)) {
+
+ // assigning a signal to a signal works if it applies to the same handler -
+ // this simplifies the implementation of += and -=.
+ if (p->signal_handler (meth) != ((PYASignal *) value)->handler.get ()) {
+ throw tl::Exception (tl::to_string (tr ("Invalid assignment of signal to signal")));
+ }
+
+ } else if (value == Py_None) {
+
+ // assigning None means "clear"
+ p->signal_handler (meth)->clear ();
+
+ } else if (! PyCallable_Check (value)) {
+ throw tl::Exception (tl::to_string (tr ("A signal needs to be assigned a callable object")));
+ } else {
+
+ // assigning a callable
+ pya::SignalHandler *handler = p->signal_handler (meth);
+ handler->clear ();
+ handler->add (value);
+
+ }
+
+ Py_RETURN_NONE;
+
+ } else {
+
+ gsi::SerialArgs retlist (meth->retsize ());
+ gsi::SerialArgs arglist (meth->argsize ());
+
+ tl::Heap heap;
+ gsi::MethodBase::argument_iterator a = meth->begin_arguments ();
+ push_arg (*a, arglist, value, heap);
+
+ meth->call (obj, arglist, retlist);
+
+ return get_return_value (p, retlist, meth, heap);
+
+ }
+}
+
+int
+property_setter_func (PyObject *self, PyObject *value, void *closure)
+{
+ int res = -1;
+
+ PYA_TRY
+
+ PyObject *ret = property_setter_impl (setter_from_closure (closure), self, value);
+
+ // ignore the result
+ if (ret != NULL) {
+ Py_DECREF (ret);
+ }
+
+ res = 0;
+
+ PYA_CATCH(property_name_from_id (setter_from_closure (closure), self))
+
+ return res;
+}
+
+// Adaptor arrays
+
+template
+PyObject *method_adaptor (PyObject *self, PyObject *args)
+{
+ return method_adaptor (N, self, args);
+}
+
+static py_func_ptr_t method_adaptors [] =
+{
+ &method_adaptor<0x000>, &method_adaptor<0x001>, &method_adaptor<0x002>, &method_adaptor<0x003>, &method_adaptor<0x004>, &method_adaptor<0x005>, &method_adaptor<0x006>, &method_adaptor<0x007>,
+ &method_adaptor<0x008>, &method_adaptor<0x009>, &method_adaptor<0x00a>, &method_adaptor<0x00b>, &method_adaptor<0x00c>, &method_adaptor<0x00d>, &method_adaptor<0x00e>, &method_adaptor<0x00f>,
+ &method_adaptor<0x010>, &method_adaptor<0x011>, &method_adaptor<0x012>, &method_adaptor<0x013>, &method_adaptor<0x014>, &method_adaptor<0x015>, &method_adaptor<0x016>, &method_adaptor<0x017>,
+ &method_adaptor<0x018>, &method_adaptor<0x019>, &method_adaptor<0x01a>, &method_adaptor<0x01b>, &method_adaptor<0x01c>, &method_adaptor<0x01d>, &method_adaptor<0x01e>, &method_adaptor<0x01f>,
+ &method_adaptor<0x020>, &method_adaptor<0x021>, &method_adaptor<0x022>, &method_adaptor<0x023>, &method_adaptor<0x024>, &method_adaptor<0x025>, &method_adaptor<0x026>, &method_adaptor<0x027>,
+ &method_adaptor<0x028>, &method_adaptor<0x029>, &method_adaptor<0x02a>, &method_adaptor<0x02b>, &method_adaptor<0x02c>, &method_adaptor<0x02d>, &method_adaptor<0x02e>, &method_adaptor<0x02f>,
+ &method_adaptor<0x030>, &method_adaptor<0x031>, &method_adaptor<0x032>, &method_adaptor<0x033>, &method_adaptor<0x034>, &method_adaptor<0x035>, &method_adaptor<0x036>, &method_adaptor<0x037>,
+ &method_adaptor<0x038>, &method_adaptor<0x039>, &method_adaptor<0x03a>, &method_adaptor<0x03b>, &method_adaptor<0x03c>, &method_adaptor<0x03d>, &method_adaptor<0x03e>, &method_adaptor<0x03f>,
+ &method_adaptor<0x040>, &method_adaptor<0x041>, &method_adaptor<0x042>, &method_adaptor<0x043>, &method_adaptor<0x044>, &method_adaptor<0x045>, &method_adaptor<0x046>, &method_adaptor<0x047>,
+ &method_adaptor<0x048>, &method_adaptor<0x049>, &method_adaptor<0x04a>, &method_adaptor<0x04b>, &method_adaptor<0x04c>, &method_adaptor<0x04d>, &method_adaptor<0x04e>, &method_adaptor<0x04f>,
+ &method_adaptor<0x050>, &method_adaptor<0x051>, &method_adaptor<0x052>, &method_adaptor<0x053>, &method_adaptor<0x054>, &method_adaptor<0x055>, &method_adaptor<0x056>, &method_adaptor<0x057>,
+ &method_adaptor<0x058>, &method_adaptor<0x059>, &method_adaptor<0x05a>, &method_adaptor<0x05b>, &method_adaptor<0x05c>, &method_adaptor<0x05d>, &method_adaptor<0x05e>, &method_adaptor<0x05f>,
+ &method_adaptor<0x060>, &method_adaptor<0x061>, &method_adaptor<0x062>, &method_adaptor<0x063>, &method_adaptor<0x064>, &method_adaptor<0x065>, &method_adaptor<0x066>, &method_adaptor<0x067>,
+ &method_adaptor<0x068>, &method_adaptor<0x069>, &method_adaptor<0x06a>, &method_adaptor<0x06b>, &method_adaptor<0x06c>, &method_adaptor<0x06d>, &method_adaptor<0x06e>, &method_adaptor<0x06f>,
+ &method_adaptor<0x070>, &method_adaptor<0x071>, &method_adaptor<0x072>, &method_adaptor<0x073>, &method_adaptor<0x074>, &method_adaptor<0x075>, &method_adaptor<0x076>, &method_adaptor<0x077>,
+ &method_adaptor<0x078>, &method_adaptor<0x079>, &method_adaptor<0x07a>, &method_adaptor<0x07b>, &method_adaptor<0x07c>, &method_adaptor<0x07d>, &method_adaptor<0x07e>, &method_adaptor<0x07f>,
+ &method_adaptor<0x080>, &method_adaptor<0x081>, &method_adaptor<0x082>, &method_adaptor<0x083>, &method_adaptor<0x084>, &method_adaptor<0x085>, &method_adaptor<0x086>, &method_adaptor<0x087>,
+ &method_adaptor<0x088>, &method_adaptor<0x089>, &method_adaptor<0x08a>, &method_adaptor<0x08b>, &method_adaptor<0x08c>, &method_adaptor<0x08d>, &method_adaptor<0x08e>, &method_adaptor<0x08f>,
+ &method_adaptor<0x090>, &method_adaptor<0x091>, &method_adaptor<0x092>, &method_adaptor<0x093>, &method_adaptor<0x094>, &method_adaptor<0x095>, &method_adaptor<0x096>, &method_adaptor<0x097>,
+ &method_adaptor<0x098>, &method_adaptor<0x099>, &method_adaptor<0x09a>, &method_adaptor<0x09b>, &method_adaptor<0x09c>, &method_adaptor<0x09d>, &method_adaptor<0x09e>, &method_adaptor<0x09f>,
+ &method_adaptor<0x0a0>, &method_adaptor<0x0a1>, &method_adaptor<0x0a2>, &method_adaptor<0x0a3>, &method_adaptor<0x0a4>, &method_adaptor<0x0a5>, &method_adaptor<0x0a6>, &method_adaptor<0x0a7>,
+ &method_adaptor<0x0a8>, &method_adaptor<0x0a9>, &method_adaptor<0x0aa>, &method_adaptor<0x0ab>, &method_adaptor<0x0ac>, &method_adaptor<0x0ad>, &method_adaptor<0x0ae>, &method_adaptor<0x0af>,
+ &method_adaptor<0x0b0>, &method_adaptor<0x0b1>, &method_adaptor<0x0b2>, &method_adaptor<0x0b3>, &method_adaptor<0x0b4>, &method_adaptor<0x0b5>, &method_adaptor<0x0b6>, &method_adaptor<0x0b7>,
+ &method_adaptor<0x0b8>, &method_adaptor<0x0b9>, &method_adaptor<0x0ba>, &method_adaptor<0x0bb>, &method_adaptor<0x0bc>, &method_adaptor<0x0bd>, &method_adaptor<0x0be>, &method_adaptor<0x0bf>,
+ &method_adaptor<0x0c0>, &method_adaptor<0x0c1>, &method_adaptor<0x0c2>, &method_adaptor<0x0c3>, &method_adaptor<0x0c4>, &method_adaptor<0x0c5>, &method_adaptor<0x0c6>, &method_adaptor<0x0c7>,
+ &method_adaptor<0x0c8>, &method_adaptor<0x0c9>, &method_adaptor<0x0ca>, &method_adaptor<0x0cb>, &method_adaptor<0x0cc>, &method_adaptor<0x0cd>, &method_adaptor<0x0ce>, &method_adaptor<0x0cf>,
+ &method_adaptor<0x0d0>, &method_adaptor<0x0d1>, &method_adaptor<0x0d2>, &method_adaptor<0x0d3>, &method_adaptor<0x0d4>, &method_adaptor<0x0d5>, &method_adaptor<0x0d6>, &method_adaptor<0x0d7>,
+ &method_adaptor<0x0d8>, &method_adaptor<0x0d9>, &method_adaptor<0x0da>, &method_adaptor<0x0db>, &method_adaptor<0x0dc>, &method_adaptor<0x0dd>, &method_adaptor<0x0de>, &method_adaptor<0x0df>,
+ &method_adaptor<0x0e0>, &method_adaptor<0x0e1>, &method_adaptor<0x0e2>, &method_adaptor<0x0e3>, &method_adaptor<0x0e4>, &method_adaptor<0x0e5>, &method_adaptor<0x0e6>, &method_adaptor<0x0e7>,
+ &method_adaptor<0x0e8>, &method_adaptor<0x0e9>, &method_adaptor<0x0ea>, &method_adaptor<0x0eb>, &method_adaptor<0x0ec>, &method_adaptor<0x0ed>, &method_adaptor<0x0ee>, &method_adaptor<0x0ef>,
+ &method_adaptor<0x0f0>, &method_adaptor<0x0f1>, &method_adaptor<0x0f2>, &method_adaptor<0x0f3>, &method_adaptor<0x0f4>, &method_adaptor<0x0f5>, &method_adaptor<0x0f6>, &method_adaptor<0x0f7>,
+ &method_adaptor<0x0f8>, &method_adaptor<0x0f9>, &method_adaptor<0x0fa>, &method_adaptor<0x0fb>, &method_adaptor<0x0fc>, &method_adaptor<0x0fd>, &method_adaptor<0x0fe>, &method_adaptor<0x0ff>,
+ &method_adaptor<0x100>, &method_adaptor<0x101>, &method_adaptor<0x102>, &method_adaptor<0x103>, &method_adaptor<0x104>, &method_adaptor<0x105>, &method_adaptor<0x106>, &method_adaptor<0x107>,
+ &method_adaptor<0x108>, &method_adaptor<0x109>, &method_adaptor<0x10a>, &method_adaptor<0x10b>, &method_adaptor<0x10c>, &method_adaptor<0x10d>, &method_adaptor<0x10e>, &method_adaptor<0x10f>,
+ &method_adaptor<0x110>, &method_adaptor<0x111>, &method_adaptor<0x112>, &method_adaptor<0x113>, &method_adaptor<0x114>, &method_adaptor<0x115>, &method_adaptor<0x116>, &method_adaptor<0x117>,
+ &method_adaptor<0x118>, &method_adaptor<0x119>, &method_adaptor<0x11a>, &method_adaptor<0x11b>, &method_adaptor<0x11c>, &method_adaptor<0x11d>, &method_adaptor<0x11e>, &method_adaptor<0x11f>,
+ &method_adaptor<0x120>, &method_adaptor<0x121>, &method_adaptor<0x122>, &method_adaptor<0x123>, &method_adaptor<0x124>, &method_adaptor<0x125>, &method_adaptor<0x126>, &method_adaptor<0x127>,
+ &method_adaptor<0x128>, &method_adaptor<0x129>, &method_adaptor<0x12a>, &method_adaptor<0x12b>, &method_adaptor<0x12c>, &method_adaptor<0x12d>, &method_adaptor<0x12e>, &method_adaptor<0x12f>,
+ &method_adaptor<0x130>, &method_adaptor<0x131>, &method_adaptor<0x132>, &method_adaptor<0x133>, &method_adaptor<0x134>, &method_adaptor<0x135>, &method_adaptor<0x136>, &method_adaptor<0x137>,
+ &method_adaptor<0x138>, &method_adaptor<0x139>, &method_adaptor<0x13a>, &method_adaptor<0x13b>, &method_adaptor<0x13c>, &method_adaptor<0x13d>, &method_adaptor<0x13e>, &method_adaptor<0x13f>,
+ &method_adaptor<0x140>, &method_adaptor<0x141>, &method_adaptor<0x142>, &method_adaptor<0x143>, &method_adaptor<0x144>, &method_adaptor<0x145>, &method_adaptor<0x146>, &method_adaptor<0x147>,
+ &method_adaptor<0x148>, &method_adaptor<0x149>, &method_adaptor<0x14a>, &method_adaptor<0x14b>, &method_adaptor<0x14c>, &method_adaptor<0x14d>, &method_adaptor<0x14e>, &method_adaptor<0x14f>,
+ &method_adaptor<0x150>, &method_adaptor<0x151>, &method_adaptor<0x152>, &method_adaptor<0x153>, &method_adaptor<0x154>, &method_adaptor<0x155>, &method_adaptor<0x156>, &method_adaptor<0x157>,
+ &method_adaptor<0x158>, &method_adaptor<0x159>, &method_adaptor<0x15a>, &method_adaptor<0x15b>, &method_adaptor<0x15c>, &method_adaptor<0x15d>, &method_adaptor<0x15e>, &method_adaptor<0x15f>,
+ &method_adaptor<0x160>, &method_adaptor<0x161>, &method_adaptor<0x162>, &method_adaptor<0x163>, &method_adaptor<0x164>, &method_adaptor<0x165>, &method_adaptor<0x166>, &method_adaptor<0x167>,
+ &method_adaptor<0x168>, &method_adaptor<0x169>, &method_adaptor<0x16a>, &method_adaptor<0x16b>, &method_adaptor<0x16c>, &method_adaptor<0x16d>, &method_adaptor<0x16e>, &method_adaptor<0x16f>,
+ &method_adaptor<0x170>, &method_adaptor<0x171>, &method_adaptor<0x172>, &method_adaptor<0x173>, &method_adaptor<0x174>, &method_adaptor<0x175>, &method_adaptor<0x176>, &method_adaptor<0x177>,
+ &method_adaptor<0x178>, &method_adaptor<0x179>, &method_adaptor<0x17a>, &method_adaptor<0x17b>, &method_adaptor<0x17c>, &method_adaptor<0x17d>, &method_adaptor<0x17e>, &method_adaptor<0x17f>,
+ &method_adaptor<0x180>, &method_adaptor<0x181>, &method_adaptor<0x182>, &method_adaptor<0x183>, &method_adaptor<0x184>, &method_adaptor<0x185>, &method_adaptor<0x186>, &method_adaptor<0x187>,
+ &method_adaptor<0x188>, &method_adaptor<0x189>, &method_adaptor<0x18a>, &method_adaptor<0x18b>, &method_adaptor<0x18c>, &method_adaptor<0x18d>, &method_adaptor<0x18e>, &method_adaptor<0x18f>,
+ &method_adaptor<0x190>, &method_adaptor<0x191>, &method_adaptor<0x192>, &method_adaptor<0x193>, &method_adaptor<0x194>, &method_adaptor<0x195>, &method_adaptor<0x196>, &method_adaptor<0x197>,
+ &method_adaptor<0x198>, &method_adaptor<0x199>, &method_adaptor<0x19a>, &method_adaptor<0x19b>, &method_adaptor<0x19c>, &method_adaptor<0x19d>, &method_adaptor<0x19e>, &method_adaptor<0x19f>,
+ &method_adaptor<0x1a0>, &method_adaptor<0x1a1>, &method_adaptor<0x1a2>, &method_adaptor<0x1a3>, &method_adaptor<0x1a4>, &method_adaptor<0x1a5>, &method_adaptor<0x1a6>, &method_adaptor<0x1a7>,
+ &method_adaptor<0x1a8>, &method_adaptor<0x1a9>, &method_adaptor<0x1aa>, &method_adaptor<0x1ab>, &method_adaptor<0x1ac>, &method_adaptor<0x1ad>, &method_adaptor<0x1ae>, &method_adaptor<0x1af>,
+ &method_adaptor<0x1b0>, &method_adaptor<0x1b1>, &method_adaptor<0x1b2>, &method_adaptor<0x1b3>, &method_adaptor<0x1b4>, &method_adaptor<0x1b5>, &method_adaptor<0x1b6>, &method_adaptor<0x1b7>,
+ &method_adaptor<0x1b8>, &method_adaptor<0x1b9>, &method_adaptor<0x1ba>, &method_adaptor<0x1bb>, &method_adaptor<0x1bc>, &method_adaptor<0x1bd>, &method_adaptor<0x1be>, &method_adaptor<0x1bf>,
+ &method_adaptor<0x1c0>, &method_adaptor<0x1c1>, &method_adaptor<0x1c2>, &method_adaptor<0x1c3>, &method_adaptor<0x1c4>, &method_adaptor<0x1c5>, &method_adaptor<0x1c6>, &method_adaptor<0x1c7>,
+ &method_adaptor<0x1c8>, &method_adaptor<0x1c9>, &method_adaptor<0x1ca>, &method_adaptor<0x1cb>, &method_adaptor<0x1cc>, &method_adaptor<0x1cd>, &method_adaptor<0x1ce>, &method_adaptor<0x1cf>,
+ &method_adaptor<0x1d0>, &method_adaptor<0x1d1>, &method_adaptor<0x1d2>, &method_adaptor<0x1d3>, &method_adaptor<0x1d4>, &method_adaptor<0x1d5>, &method_adaptor<0x1d6>, &method_adaptor<0x1d7>,
+ &method_adaptor<0x1d8>, &method_adaptor<0x1d9>, &method_adaptor<0x1da>, &method_adaptor<0x1db>, &method_adaptor<0x1dc>, &method_adaptor<0x1dd>, &method_adaptor<0x1de>, &method_adaptor<0x1df>,
+ &method_adaptor<0x1e0>, &method_adaptor<0x1e1>, &method_adaptor<0x1e2>, &method_adaptor<0x1e3>, &method_adaptor<0x1e4>, &method_adaptor<0x1e5>, &method_adaptor<0x1e6>, &method_adaptor<0x1e7>,
+ &method_adaptor<0x1e8>, &method_adaptor<0x1e9>, &method_adaptor<0x1ea>, &method_adaptor<0x1eb>, &method_adaptor<0x1ec>, &method_adaptor<0x1ed>, &method_adaptor<0x1ee>, &method_adaptor<0x1ef>,
+ &method_adaptor<0x1f0>, &method_adaptor<0x1f1>, &method_adaptor<0x1f2>, &method_adaptor<0x1f3>, &method_adaptor<0x1f4>, &method_adaptor<0x1f5>, &method_adaptor<0x1f6>, &method_adaptor<0x1f7>,
+ &method_adaptor<0x1f8>, &method_adaptor<0x1f9>, &method_adaptor<0x1fa>, &method_adaptor<0x1fb>, &method_adaptor<0x1fc>, &method_adaptor<0x1fd>, &method_adaptor<0x1fe>, &method_adaptor<0x1ff>,
+ &method_adaptor<0x200>, &method_adaptor<0x201>, &method_adaptor<0x202>, &method_adaptor<0x203>, &method_adaptor<0x204>, &method_adaptor<0x205>, &method_adaptor<0x206>, &method_adaptor<0x207>,
+ &method_adaptor<0x208>, &method_adaptor<0x209>, &method_adaptor<0x20a>, &method_adaptor<0x20b>, &method_adaptor<0x20c>, &method_adaptor<0x20d>, &method_adaptor<0x20e>, &method_adaptor<0x20f>,
+ &method_adaptor<0x210>, &method_adaptor<0x211>, &method_adaptor<0x212>, &method_adaptor<0x213>, &method_adaptor<0x214>, &method_adaptor<0x215>, &method_adaptor<0x216>, &method_adaptor<0x217>,
+ &method_adaptor<0x218>, &method_adaptor<0x219>, &method_adaptor<0x21a>, &method_adaptor<0x21b>, &method_adaptor<0x21c>, &method_adaptor<0x21d>, &method_adaptor<0x21e>, &method_adaptor<0x21f>,
+ &method_adaptor<0x220>, &method_adaptor<0x221>, &method_adaptor<0x222>, &method_adaptor<0x223>, &method_adaptor<0x224>, &method_adaptor<0x225>, &method_adaptor<0x226>, &method_adaptor<0x227>,
+ &method_adaptor<0x228>, &method_adaptor<0x229>, &method_adaptor<0x22a>, &method_adaptor<0x22b>, &method_adaptor<0x22c>, &method_adaptor<0x22d>, &method_adaptor<0x22e>, &method_adaptor<0x22f>,
+ &method_adaptor<0x230>, &method_adaptor<0x231>, &method_adaptor<0x232>, &method_adaptor<0x233>, &method_adaptor<0x234>, &method_adaptor<0x235>, &method_adaptor<0x236>, &method_adaptor<0x237>,
+ &method_adaptor<0x238>, &method_adaptor<0x239>, &method_adaptor<0x23a>, &method_adaptor<0x23b>, &method_adaptor<0x23c>, &method_adaptor<0x23d>, &method_adaptor<0x23e>, &method_adaptor<0x23f>,
+ &method_adaptor<0x240>, &method_adaptor<0x241>, &method_adaptor<0x242>, &method_adaptor<0x243>, &method_adaptor<0x244>, &method_adaptor<0x245>, &method_adaptor<0x246>, &method_adaptor<0x247>,
+ &method_adaptor<0x248>, &method_adaptor<0x249>, &method_adaptor<0x24a>, &method_adaptor<0x24b>, &method_adaptor<0x24c>, &method_adaptor<0x24d>, &method_adaptor<0x24e>, &method_adaptor<0x24f>,
+ &method_adaptor<0x250>, &method_adaptor<0x251>, &method_adaptor<0x252>, &method_adaptor<0x253>, &method_adaptor<0x254>, &method_adaptor<0x255>, &method_adaptor<0x256>, &method_adaptor<0x257>,
+ &method_adaptor<0x258>, &method_adaptor<0x259>, &method_adaptor<0x25a>, &method_adaptor<0x25b>, &method_adaptor<0x25c>, &method_adaptor<0x25d>, &method_adaptor<0x25e>, &method_adaptor<0x25f>,
+ &method_adaptor<0x260>, &method_adaptor<0x261>, &method_adaptor<0x262>, &method_adaptor<0x263>, &method_adaptor<0x264>, &method_adaptor<0x265>, &method_adaptor<0x266>, &method_adaptor<0x267>,
+ &method_adaptor<0x268>, &method_adaptor<0x269>, &method_adaptor<0x26a>, &method_adaptor<0x26b>, &method_adaptor<0x26c>, &method_adaptor<0x26d>, &method_adaptor<0x26e>, &method_adaptor<0x26f>,
+ &method_adaptor<0x270>, &method_adaptor<0x271>, &method_adaptor<0x272>, &method_adaptor<0x273>, &method_adaptor<0x274>, &method_adaptor<0x275>, &method_adaptor<0x276>, &method_adaptor<0x277>,
+ &method_adaptor<0x278>, &method_adaptor<0x279>, &method_adaptor<0x27a>, &method_adaptor<0x27b>, &method_adaptor<0x27c>, &method_adaptor<0x27d>, &method_adaptor<0x27e>, &method_adaptor<0x27f>,
+ &method_adaptor<0x280>, &method_adaptor<0x281>, &method_adaptor<0x282>, &method_adaptor<0x283>, &method_adaptor<0x284>, &method_adaptor<0x285>, &method_adaptor<0x286>, &method_adaptor<0x287>,
+ &method_adaptor<0x288>, &method_adaptor<0x289>, &method_adaptor<0x28a>, &method_adaptor<0x28b>, &method_adaptor<0x28c>, &method_adaptor<0x28d>, &method_adaptor<0x28e>, &method_adaptor<0x28f>,
+ &method_adaptor<0x290>, &method_adaptor<0x291>, &method_adaptor<0x292>, &method_adaptor<0x293>, &method_adaptor<0x294>, &method_adaptor<0x295>, &method_adaptor<0x296>, &method_adaptor<0x297>,
+ &method_adaptor<0x298>, &method_adaptor<0x299>, &method_adaptor<0x29a>, &method_adaptor<0x29b>, &method_adaptor<0x29c>, &method_adaptor<0x29d>, &method_adaptor<0x29e>, &method_adaptor<0x29f>,
+ &method_adaptor<0x2a0>, &method_adaptor<0x2a1>, &method_adaptor<0x2a2>, &method_adaptor<0x2a3>, &method_adaptor<0x2a4>, &method_adaptor<0x2a5>, &method_adaptor<0x2a6>, &method_adaptor<0x2a7>,
+ &method_adaptor<0x2a8>, &method_adaptor<0x2a9>, &method_adaptor<0x2aa>, &method_adaptor<0x2ab>, &method_adaptor<0x2ac>, &method_adaptor<0x2ad>, &method_adaptor<0x2ae>, &method_adaptor<0x2af>,
+ &method_adaptor<0x2b0>, &method_adaptor<0x2b1>, &method_adaptor<0x2b2>, &method_adaptor<0x2b3>, &method_adaptor<0x2b4>, &method_adaptor<0x2b5>, &method_adaptor<0x2b6>, &method_adaptor<0x2b7>,
+ &method_adaptor<0x2b8>, &method_adaptor<0x2b9>, &method_adaptor<0x2ba>, &method_adaptor<0x2bb>, &method_adaptor<0x2bc>, &method_adaptor<0x2bd>, &method_adaptor<0x2be>, &method_adaptor<0x2bf>,
+ &method_adaptor<0x2c0>, &method_adaptor<0x2c1>, &method_adaptor<0x2c2>, &method_adaptor<0x2c3>, &method_adaptor<0x2c4>, &method_adaptor<0x2c5>, &method_adaptor<0x2c6>, &method_adaptor<0x2c7>,
+ &method_adaptor<0x2c8>, &method_adaptor<0x2c9>, &method_adaptor<0x2ca>, &method_adaptor<0x2cb>, &method_adaptor<0x2cc>, &method_adaptor<0x2cd>, &method_adaptor<0x2ce>, &method_adaptor<0x2cf>,
+ &method_adaptor<0x2d0>, &method_adaptor<0x2d1>, &method_adaptor<0x2d2>, &method_adaptor<0x2d3>, &method_adaptor<0x2d4>, &method_adaptor<0x2d5>, &method_adaptor<0x2d6>, &method_adaptor<0x2d7>,
+ &method_adaptor<0x2d8>, &method_adaptor<0x2d9>, &method_adaptor<0x2da>, &method_adaptor<0x2db>, &method_adaptor<0x2dc>, &method_adaptor<0x2dd>, &method_adaptor<0x2de>, &method_adaptor<0x2df>,
+ &method_adaptor<0x2e0>, &method_adaptor<0x2e1>, &method_adaptor<0x2e2>, &method_adaptor<0x2e3>, &method_adaptor<0x2e4>, &method_adaptor<0x2e5>, &method_adaptor<0x2e6>, &method_adaptor<0x2e7>,
+ &method_adaptor<0x2e8>, &method_adaptor<0x2e9>, &method_adaptor<0x2ea>, &method_adaptor<0x2eb>, &method_adaptor<0x2ec>, &method_adaptor<0x2ed>, &method_adaptor<0x2ee>, &method_adaptor<0x2ef>,
+ &method_adaptor<0x2f0>, &method_adaptor<0x2f1>, &method_adaptor<0x2f2>, &method_adaptor<0x2f3>, &method_adaptor<0x2f4>, &method_adaptor<0x2f5>, &method_adaptor<0x2f6>, &method_adaptor<0x2f7>,
+ &method_adaptor<0x2f8>, &method_adaptor<0x2f9>, &method_adaptor<0x2fa>, &method_adaptor<0x2fb>, &method_adaptor<0x2fc>, &method_adaptor<0x2fd>, &method_adaptor<0x2fe>, &method_adaptor<0x2ff>,
+ &method_adaptor<0x300>, &method_adaptor<0x301>, &method_adaptor<0x302>, &method_adaptor<0x303>, &method_adaptor<0x304>, &method_adaptor<0x305>, &method_adaptor<0x306>, &method_adaptor<0x307>,
+ &method_adaptor<0x308>, &method_adaptor<0x309>, &method_adaptor<0x30a>, &method_adaptor<0x30b>, &method_adaptor<0x30c>, &method_adaptor<0x30d>, &method_adaptor<0x30e>, &method_adaptor<0x30f>,
+ &method_adaptor<0x310>, &method_adaptor<0x311>, &method_adaptor<0x312>, &method_adaptor<0x313>, &method_adaptor<0x314>, &method_adaptor<0x315>, &method_adaptor<0x316>, &method_adaptor<0x317>,
+ &method_adaptor<0x318>, &method_adaptor<0x319>, &method_adaptor<0x31a>, &method_adaptor<0x31b>, &method_adaptor<0x31c>, &method_adaptor<0x31d>, &method_adaptor<0x31e>, &method_adaptor<0x31f>,
+ &method_adaptor<0x320>, &method_adaptor<0x321>, &method_adaptor<0x322>, &method_adaptor<0x323>, &method_adaptor<0x324>, &method_adaptor<0x325>, &method_adaptor<0x326>, &method_adaptor<0x327>,
+ &method_adaptor<0x328>, &method_adaptor<0x329>, &method_adaptor<0x32a>, &method_adaptor<0x32b>, &method_adaptor<0x32c>, &method_adaptor<0x32d>, &method_adaptor<0x32e>, &method_adaptor<0x32f>,
+ &method_adaptor<0x330>, &method_adaptor<0x331>, &method_adaptor<0x332>, &method_adaptor<0x333>, &method_adaptor<0x334>, &method_adaptor<0x335>, &method_adaptor<0x336>, &method_adaptor<0x337>,
+ &method_adaptor<0x338>, &method_adaptor<0x339>, &method_adaptor<0x33a>, &method_adaptor<0x33b>, &method_adaptor<0x33c>, &method_adaptor<0x33d>, &method_adaptor<0x33e>, &method_adaptor<0x33f>,
+ &method_adaptor<0x340>, &method_adaptor<0x341>, &method_adaptor<0x342>, &method_adaptor<0x343>, &method_adaptor<0x344>, &method_adaptor<0x345>, &method_adaptor<0x346>, &method_adaptor<0x347>,
+ &method_adaptor<0x348>, &method_adaptor<0x349>, &method_adaptor<0x34a>, &method_adaptor<0x34b>, &method_adaptor<0x34c>, &method_adaptor<0x34d>, &method_adaptor<0x34e>, &method_adaptor<0x34f>,
+ &method_adaptor<0x350>, &method_adaptor<0x351>, &method_adaptor<0x352>, &method_adaptor<0x353>, &method_adaptor<0x354>, &method_adaptor<0x355>, &method_adaptor<0x356>, &method_adaptor<0x357>,
+ &method_adaptor<0x358>, &method_adaptor<0x359>, &method_adaptor<0x35a>, &method_adaptor<0x35b>, &method_adaptor<0x35c>, &method_adaptor<0x35d>, &method_adaptor<0x35e>, &method_adaptor<0x35f>,
+ &method_adaptor<0x360>, &method_adaptor<0x361>, &method_adaptor<0x362>, &method_adaptor<0x363>, &method_adaptor<0x364>, &method_adaptor<0x365>, &method_adaptor<0x366>, &method_adaptor<0x367>,
+ &method_adaptor<0x368>, &method_adaptor<0x369>, &method_adaptor<0x36a>, &method_adaptor<0x36b>, &method_adaptor<0x36c>, &method_adaptor<0x36d>, &method_adaptor<0x36e>, &method_adaptor<0x36f>,
+ &method_adaptor<0x370>, &method_adaptor<0x371>, &method_adaptor<0x372>, &method_adaptor<0x373>, &method_adaptor<0x374>, &method_adaptor<0x375>, &method_adaptor<0x376>, &method_adaptor<0x377>,
+ &method_adaptor<0x378>, &method_adaptor<0x379>, &method_adaptor<0x37a>, &method_adaptor<0x37b>, &method_adaptor<0x37c>, &method_adaptor<0x37d>, &method_adaptor<0x37e>, &method_adaptor<0x37f>,
+ &method_adaptor<0x380>, &method_adaptor<0x381>, &method_adaptor<0x382>, &method_adaptor<0x383>, &method_adaptor<0x384>, &method_adaptor<0x385>, &method_adaptor<0x386>, &method_adaptor<0x387>,
+ &method_adaptor<0x388>, &method_adaptor<0x389>, &method_adaptor<0x38a>, &method_adaptor<0x38b>, &method_adaptor<0x38c>, &method_adaptor<0x38d>, &method_adaptor<0x38e>, &method_adaptor<0x38f>,
+ &method_adaptor<0x390>, &method_adaptor<0x391>, &method_adaptor<0x392>, &method_adaptor<0x393>, &method_adaptor<0x394>, &method_adaptor<0x395>, &method_adaptor<0x396>, &method_adaptor<0x397>,
+ &method_adaptor<0x398>, &method_adaptor<0x399>, &method_adaptor<0x39a>, &method_adaptor<0x39b>, &method_adaptor<0x39c>, &method_adaptor<0x39d>, &method_adaptor<0x39e>, &method_adaptor<0x39f>,
+ &method_adaptor<0x3a0>, &method_adaptor<0x3a1>, &method_adaptor<0x3a2>, &method_adaptor<0x3a3>, &method_adaptor<0x3a4>, &method_adaptor<0x3a5>, &method_adaptor<0x3a6>, &method_adaptor<0x3a7>,
+ &method_adaptor<0x3a8>, &method_adaptor<0x3a9>, &method_adaptor<0x3aa>, &method_adaptor<0x3ab>, &method_adaptor<0x3ac>, &method_adaptor<0x3ad>, &method_adaptor<0x3ae>, &method_adaptor<0x3af>,
+ &method_adaptor<0x3b0>, &method_adaptor<0x3b1>, &method_adaptor<0x3b2>, &method_adaptor<0x3b3>, &method_adaptor<0x3b4>, &method_adaptor<0x3b5>, &method_adaptor<0x3b6>, &method_adaptor<0x3b7>,
+ &method_adaptor<0x3b8>, &method_adaptor<0x3b9>, &method_adaptor<0x3ba>, &method_adaptor<0x3bb>, &method_adaptor<0x3bc>, &method_adaptor<0x3bd>, &method_adaptor<0x3be>, &method_adaptor<0x3bf>,
+ &method_adaptor<0x3c0>, &method_adaptor<0x3c1>, &method_adaptor<0x3c2>, &method_adaptor<0x3c3>, &method_adaptor<0x3c4>, &method_adaptor<0x3c5>, &method_adaptor<0x3c6>, &method_adaptor<0x3c7>,
+ &method_adaptor<0x3c8>, &method_adaptor<0x3c9>, &method_adaptor<0x3ca>, &method_adaptor<0x3cb>, &method_adaptor<0x3cc>, &method_adaptor<0x3cd>, &method_adaptor<0x3ce>, &method_adaptor<0x3cf>,
+ &method_adaptor<0x3d0>, &method_adaptor<0x3d1>, &method_adaptor<0x3d2>, &method_adaptor<0x3d3>, &method_adaptor<0x3d4>, &method_adaptor<0x3d5>, &method_adaptor<0x3d6>, &method_adaptor<0x3d7>,
+ &method_adaptor<0x3d8>, &method_adaptor<0x3d9>, &method_adaptor<0x3da>, &method_adaptor<0x3db>, &method_adaptor<0x3dc>, &method_adaptor<0x3dd>, &method_adaptor<0x3de>, &method_adaptor<0x3df>,
+ &method_adaptor<0x3e0>, &method_adaptor<0x3e1>, &method_adaptor<0x3e2>, &method_adaptor<0x3e3>, &method_adaptor<0x3e4>, &method_adaptor<0x3e5>, &method_adaptor<0x3e6>, &method_adaptor<0x3e7>,
+ &method_adaptor<0x3e8>, &method_adaptor<0x3e9>, &method_adaptor<0x3ea>, &method_adaptor<0x3eb>, &method_adaptor<0x3ec>, &method_adaptor<0x3ed>, &method_adaptor<0x3ee>, &method_adaptor<0x3ef>,
+ &method_adaptor<0x3f0>, &method_adaptor<0x3f1>, &method_adaptor<0x3f2>, &method_adaptor<0x3f3>, &method_adaptor<0x3f4>, &method_adaptor<0x3f5>, &method_adaptor<0x3f6>, &method_adaptor<0x3f7>,
+ &method_adaptor<0x3f8>, &method_adaptor<0x3f9>, &method_adaptor<0x3fa>, &method_adaptor<0x3fb>, &method_adaptor<0x3fc>, &method_adaptor<0x3fd>, &method_adaptor<0x3fe>, &method_adaptor<0x3ff>,
+ &method_adaptor<0x400>, &method_adaptor<0x401>, &method_adaptor<0x402>, &method_adaptor<0x403>, &method_adaptor<0x404>, &method_adaptor<0x405>, &method_adaptor<0x406>, &method_adaptor<0x407>,
+ &method_adaptor<0x408>, &method_adaptor<0x409>, &method_adaptor<0x40a>, &method_adaptor<0x40b>, &method_adaptor<0x40c>, &method_adaptor<0x40d>, &method_adaptor<0x40e>, &method_adaptor<0x40f>,
+ &method_adaptor<0x410>, &method_adaptor<0x411>, &method_adaptor<0x412>, &method_adaptor<0x413>, &method_adaptor<0x414>, &method_adaptor<0x415>, &method_adaptor<0x416>, &method_adaptor<0x417>,
+ &method_adaptor<0x418>, &method_adaptor<0x419>, &method_adaptor<0x41a>, &method_adaptor<0x41b>, &method_adaptor<0x41c>, &method_adaptor<0x41d>, &method_adaptor<0x41e>, &method_adaptor<0x41f>,
+ &method_adaptor<0x420>, &method_adaptor<0x421>, &method_adaptor<0x422>, &method_adaptor<0x423>, &method_adaptor<0x424>, &method_adaptor<0x425>, &method_adaptor<0x426>, &method_adaptor<0x427>,
+ &method_adaptor<0x428>, &method_adaptor<0x429>, &method_adaptor<0x42a>, &method_adaptor<0x42b>, &method_adaptor<0x42c>, &method_adaptor<0x42d>, &method_adaptor<0x42e>, &method_adaptor<0x42f>,
+ &method_adaptor<0x430>, &method_adaptor<0x431>, &method_adaptor<0x432>, &method_adaptor<0x433>, &method_adaptor<0x434>, &method_adaptor<0x435>, &method_adaptor<0x436>, &method_adaptor<0x437>,
+ &method_adaptor<0x438>, &method_adaptor<0x439>, &method_adaptor<0x43a>, &method_adaptor<0x43b>, &method_adaptor<0x43c>, &method_adaptor<0x43d>, &method_adaptor<0x43e>, &method_adaptor<0x43f>,
+ &method_adaptor<0x440>, &method_adaptor<0x441>, &method_adaptor<0x442>, &method_adaptor<0x443>, &method_adaptor<0x444>, &method_adaptor<0x445>, &method_adaptor<0x446>, &method_adaptor<0x447>,
+ &method_adaptor<0x448>, &method_adaptor<0x449>, &method_adaptor<0x44a>, &method_adaptor<0x44b>, &method_adaptor<0x44c>, &method_adaptor<0x44d>, &method_adaptor<0x44e>, &method_adaptor<0x44f>,
+ &method_adaptor<0x450>, &method_adaptor<0x451>, &method_adaptor<0x452>, &method_adaptor<0x453>, &method_adaptor<0x454>, &method_adaptor<0x455>, &method_adaptor<0x456>, &method_adaptor<0x457>,
+ &method_adaptor<0x458>, &method_adaptor<0x459>, &method_adaptor<0x45a>, &method_adaptor<0x45b>, &method_adaptor<0x45c>, &method_adaptor<0x45d>, &method_adaptor<0x45e>, &method_adaptor<0x45f>,
+ &method_adaptor<0x460>, &method_adaptor<0x461>, &method_adaptor<0x462>, &method_adaptor<0x463>, &method_adaptor<0x464>, &method_adaptor<0x465>, &method_adaptor<0x466>, &method_adaptor<0x467>,
+ &method_adaptor<0x468>, &method_adaptor<0x469>, &method_adaptor<0x46a>, &method_adaptor<0x46b>, &method_adaptor<0x46c>, &method_adaptor<0x46d>, &method_adaptor<0x46e>, &method_adaptor<0x46f>,
+ &method_adaptor<0x470>, &method_adaptor<0x471>, &method_adaptor<0x472>, &method_adaptor<0x473>, &method_adaptor<0x474>, &method_adaptor<0x475>, &method_adaptor<0x476>, &method_adaptor<0x477>,
+ &method_adaptor<0x478>, &method_adaptor<0x479>, &method_adaptor<0x47a>, &method_adaptor<0x47b>, &method_adaptor<0x47c>, &method_adaptor<0x47d>, &method_adaptor<0x47e>, &method_adaptor<0x47f>,
+ &method_adaptor<0x480>, &method_adaptor<0x481>, &method_adaptor<0x482>, &method_adaptor<0x483>, &method_adaptor<0x484>, &method_adaptor<0x485>, &method_adaptor<0x486>, &method_adaptor<0x487>,
+ &method_adaptor<0x488>, &method_adaptor<0x489>, &method_adaptor<0x48a>, &method_adaptor<0x48b>, &method_adaptor<0x48c>, &method_adaptor<0x48d>, &method_adaptor<0x48e>, &method_adaptor<0x48f>,
+ &method_adaptor<0x490>, &method_adaptor<0x491>, &method_adaptor<0x492>, &method_adaptor<0x493>, &method_adaptor<0x494>, &method_adaptor<0x495>, &method_adaptor<0x496>, &method_adaptor<0x497>,
+ &method_adaptor<0x498>, &method_adaptor<0x499>, &method_adaptor<0x49a>, &method_adaptor<0x49b>, &method_adaptor<0x49c>, &method_adaptor<0x49d>, &method_adaptor<0x49e>, &method_adaptor<0x49f>,
+ &method_adaptor<0x4a0>, &method_adaptor<0x4a1>, &method_adaptor<0x4a2>, &method_adaptor<0x4a3>, &method_adaptor<0x4a4>, &method_adaptor<0x4a5>, &method_adaptor<0x4a6>, &method_adaptor<0x4a7>,
+ &method_adaptor<0x4a8>, &method_adaptor<0x4a9>, &method_adaptor<0x4aa>, &method_adaptor<0x4ab>, &method_adaptor<0x4ac>, &method_adaptor<0x4ad>, &method_adaptor<0x4ae>, &method_adaptor<0x4af>,
+ &method_adaptor<0x4b0>, &method_adaptor<0x4b1>, &method_adaptor<0x4b2>, &method_adaptor<0x4b3>, &method_adaptor<0x4b4>, &method_adaptor<0x4b5>, &method_adaptor<0x4b6>, &method_adaptor<0x4b7>,
+ &method_adaptor<0x4b8>, &method_adaptor<0x4b9>, &method_adaptor<0x4ba>, &method_adaptor<0x4bb>, &method_adaptor<0x4bc>, &method_adaptor<0x4bd>, &method_adaptor<0x4be>, &method_adaptor<0x4bf>,
+ &method_adaptor<0x4c0>, &method_adaptor<0x4c1>, &method_adaptor<0x4c2>, &method_adaptor<0x4c3>, &method_adaptor<0x4c4>, &method_adaptor<0x4c5>, &method_adaptor<0x4c6>, &method_adaptor<0x4c7>,
+ &method_adaptor<0x4c8>, &method_adaptor<0x4c9>, &method_adaptor<0x4ca>, &method_adaptor<0x4cb>, &method_adaptor<0x4cc>, &method_adaptor<0x4cd>, &method_adaptor<0x4ce>, &method_adaptor<0x4cf>,
+ &method_adaptor<0x4d0>, &method_adaptor<0x4d1>, &method_adaptor<0x4d2>, &method_adaptor<0x4d3>, &method_adaptor<0x4d4>, &method_adaptor<0x4d5>, &method_adaptor<0x4d6>, &method_adaptor<0x4d7>,
+ &method_adaptor<0x4d8>, &method_adaptor<0x4d9>, &method_adaptor<0x4da>, &method_adaptor<0x4db>, &method_adaptor<0x4dc>, &method_adaptor<0x4dd>, &method_adaptor<0x4de>, &method_adaptor<0x4df>,
+ &method_adaptor<0x4e0>, &method_adaptor<0x4e1>, &method_adaptor<0x4e2>, &method_adaptor<0x4e3>, &method_adaptor<0x4e4>, &method_adaptor<0x4e5>, &method_adaptor<0x4e6>, &method_adaptor<0x4e7>,
+ &method_adaptor<0x4e8>, &method_adaptor<0x4e9>, &method_adaptor<0x4ea>, &method_adaptor<0x4eb>, &method_adaptor<0x4ec>, &method_adaptor<0x4ed>, &method_adaptor<0x4ee>, &method_adaptor<0x4ef>,
+ &method_adaptor<0x4f0>, &method_adaptor<0x4f1>, &method_adaptor<0x4f2>, &method_adaptor<0x4f3>, &method_adaptor<0x4f4>, &method_adaptor<0x4f5>, &method_adaptor<0x4f6>, &method_adaptor<0x4f7>,
+ &method_adaptor<0x4f8>, &method_adaptor<0x4f9>, &method_adaptor<0x4fa>, &method_adaptor<0x4fb>, &method_adaptor<0x4fc>, &method_adaptor<0x4fd>, &method_adaptor<0x4fe>, &method_adaptor<0x4ff>,
+};
+
+py_func_ptr_t get_method_adaptor (int n)
+{
+ tl_assert (n >= 0 && n < int (sizeof (method_adaptors) / sizeof (method_adaptors [0])));
+ return method_adaptors [n];
+}
+
+template
+PyObject *property_getter_adaptor (PyObject *self, PyObject *args)
+{
+ return property_getter_adaptor (N, self, args);
+}
+
+static py_func_ptr_t property_getter_adaptors [] =
+{
+ &property_getter_adaptor<0x000>, &property_getter_adaptor<0x001>, &property_getter_adaptor<0x002>, &property_getter_adaptor<0x003>, &property_getter_adaptor<0x004>, &property_getter_adaptor<0x005>, &property_getter_adaptor<0x006>, &property_getter_adaptor<0x007>,
+ &property_getter_adaptor<0x008>, &property_getter_adaptor<0x009>, &property_getter_adaptor<0x00a>, &property_getter_adaptor<0x00b>, &property_getter_adaptor<0x00c>, &property_getter_adaptor<0x00d>, &property_getter_adaptor<0x00e>, &property_getter_adaptor<0x00f>,
+ &property_getter_adaptor<0x010>, &property_getter_adaptor<0x011>, &property_getter_adaptor<0x012>, &property_getter_adaptor<0x013>, &property_getter_adaptor<0x014>, &property_getter_adaptor<0x015>, &property_getter_adaptor<0x016>, &property_getter_adaptor<0x017>,
+ &property_getter_adaptor<0x018>, &property_getter_adaptor<0x019>, &property_getter_adaptor<0x01a>, &property_getter_adaptor<0x01b>, &property_getter_adaptor<0x01c>, &property_getter_adaptor<0x01d>, &property_getter_adaptor<0x01e>, &property_getter_adaptor<0x01f>,
+ &property_getter_adaptor<0x020>, &property_getter_adaptor<0x021>, &property_getter_adaptor<0x022>, &property_getter_adaptor<0x023>, &property_getter_adaptor<0x024>, &property_getter_adaptor<0x025>, &property_getter_adaptor<0x026>, &property_getter_adaptor<0x027>,
+ &property_getter_adaptor<0x028>, &property_getter_adaptor<0x029>, &property_getter_adaptor<0x02a>, &property_getter_adaptor<0x02b>, &property_getter_adaptor<0x02c>, &property_getter_adaptor<0x02d>, &property_getter_adaptor<0x02e>, &property_getter_adaptor<0x02f>,
+ &property_getter_adaptor<0x030>, &property_getter_adaptor<0x031>, &property_getter_adaptor<0x032>, &property_getter_adaptor<0x033>, &property_getter_adaptor<0x034>, &property_getter_adaptor<0x035>, &property_getter_adaptor<0x036>, &property_getter_adaptor<0x037>,
+ &property_getter_adaptor<0x038>, &property_getter_adaptor<0x039>, &property_getter_adaptor<0x03a>, &property_getter_adaptor<0x03b>, &property_getter_adaptor<0x03c>, &property_getter_adaptor<0x03d>, &property_getter_adaptor<0x03e>, &property_getter_adaptor<0x03f>,
+ &property_getter_adaptor<0x040>, &property_getter_adaptor<0x041>, &property_getter_adaptor<0x042>, &property_getter_adaptor<0x043>, &property_getter_adaptor<0x044>, &property_getter_adaptor<0x045>, &property_getter_adaptor<0x046>, &property_getter_adaptor<0x047>,
+ &property_getter_adaptor<0x048>, &property_getter_adaptor<0x049>, &property_getter_adaptor<0x04a>, &property_getter_adaptor<0x04b>, &property_getter_adaptor<0x04c>, &property_getter_adaptor<0x04d>, &property_getter_adaptor<0x04e>, &property_getter_adaptor<0x04f>,
+ &property_getter_adaptor<0x050>, &property_getter_adaptor<0x051>, &property_getter_adaptor<0x052>, &property_getter_adaptor<0x053>, &property_getter_adaptor<0x054>, &property_getter_adaptor<0x055>, &property_getter_adaptor<0x056>, &property_getter_adaptor<0x057>,
+ &property_getter_adaptor<0x058>, &property_getter_adaptor<0x059>, &property_getter_adaptor<0x05a>, &property_getter_adaptor<0x05b>, &property_getter_adaptor<0x05c>, &property_getter_adaptor<0x05d>, &property_getter_adaptor<0x05e>, &property_getter_adaptor<0x05f>,
+ &property_getter_adaptor<0x060>, &property_getter_adaptor<0x061>, &property_getter_adaptor<0x062>, &property_getter_adaptor<0x063>, &property_getter_adaptor<0x064>, &property_getter_adaptor<0x065>, &property_getter_adaptor<0x066>, &property_getter_adaptor<0x067>,
+ &property_getter_adaptor<0x068>, &property_getter_adaptor<0x069>, &property_getter_adaptor<0x06a>, &property_getter_adaptor<0x06b>, &property_getter_adaptor<0x06c>, &property_getter_adaptor<0x06d>, &property_getter_adaptor<0x06e>, &property_getter_adaptor<0x06f>,
+ &property_getter_adaptor<0x070>, &property_getter_adaptor<0x071>, &property_getter_adaptor<0x072>, &property_getter_adaptor<0x073>, &property_getter_adaptor<0x074>, &property_getter_adaptor<0x075>, &property_getter_adaptor<0x076>, &property_getter_adaptor<0x077>,
+ &property_getter_adaptor<0x078>, &property_getter_adaptor<0x079>, &property_getter_adaptor<0x07a>, &property_getter_adaptor<0x07b>, &property_getter_adaptor<0x07c>, &property_getter_adaptor<0x07d>, &property_getter_adaptor<0x07e>, &property_getter_adaptor<0x07f>,
+ &property_getter_adaptor<0x080>, &property_getter_adaptor<0x081>, &property_getter_adaptor<0x082>, &property_getter_adaptor<0x083>, &property_getter_adaptor<0x084>, &property_getter_adaptor<0x085>, &property_getter_adaptor<0x086>, &property_getter_adaptor<0x087>,
+ &property_getter_adaptor<0x088>, &property_getter_adaptor<0x089>, &property_getter_adaptor<0x08a>, &property_getter_adaptor<0x08b>, &property_getter_adaptor<0x08c>, &property_getter_adaptor<0x08d>, &property_getter_adaptor<0x08e>, &property_getter_adaptor<0x08f>,
+ &property_getter_adaptor<0x090>, &property_getter_adaptor<0x091>, &property_getter_adaptor<0x092>, &property_getter_adaptor<0x093>, &property_getter_adaptor<0x094>, &property_getter_adaptor<0x095>, &property_getter_adaptor<0x096>, &property_getter_adaptor<0x097>,
+ &property_getter_adaptor<0x098>, &property_getter_adaptor<0x099>, &property_getter_adaptor<0x09a>, &property_getter_adaptor<0x09b>, &property_getter_adaptor<0x09c>, &property_getter_adaptor<0x09d>, &property_getter_adaptor<0x09e>, &property_getter_adaptor<0x09f>,
+ &property_getter_adaptor<0x0a0>, &property_getter_adaptor<0x0a1>, &property_getter_adaptor<0x0a2>, &property_getter_adaptor<0x0a3>, &property_getter_adaptor<0x0a4>, &property_getter_adaptor<0x0a5>, &property_getter_adaptor<0x0a6>, &property_getter_adaptor<0x0a7>,
+ &property_getter_adaptor<0x0a8>, &property_getter_adaptor<0x0a9>, &property_getter_adaptor<0x0aa>, &property_getter_adaptor<0x0ab>, &property_getter_adaptor<0x0ac>, &property_getter_adaptor<0x0ad>, &property_getter_adaptor<0x0ae>, &property_getter_adaptor<0x0af>,
+ &property_getter_adaptor<0x0b0>, &property_getter_adaptor<0x0b1>, &property_getter_adaptor<0x0b2>, &property_getter_adaptor<0x0b3>, &property_getter_adaptor<0x0b4>, &property_getter_adaptor<0x0b5>, &property_getter_adaptor<0x0b6>, &property_getter_adaptor<0x0b7>,
+ &property_getter_adaptor<0x0b8>, &property_getter_adaptor<0x0b9>, &property_getter_adaptor<0x0ba>, &property_getter_adaptor<0x0bb>, &property_getter_adaptor<0x0bc>, &property_getter_adaptor<0x0bd>, &property_getter_adaptor<0x0be>, &property_getter_adaptor<0x0bf>,
+ &property_getter_adaptor<0x0c0>, &property_getter_adaptor<0x0c1>, &property_getter_adaptor<0x0c2>, &property_getter_adaptor<0x0c3>, &property_getter_adaptor<0x0c4>, &property_getter_adaptor<0x0c5>, &property_getter_adaptor<0x0c6>, &property_getter_adaptor<0x0c7>,
+ &property_getter_adaptor<0x0c8>, &property_getter_adaptor<0x0c9>, &property_getter_adaptor<0x0ca>, &property_getter_adaptor<0x0cb>, &property_getter_adaptor<0x0cc>, &property_getter_adaptor<0x0cd>, &property_getter_adaptor<0x0ce>, &property_getter_adaptor<0x0cf>,
+ &property_getter_adaptor<0x0d0>, &property_getter_adaptor<0x0d1>, &property_getter_adaptor<0x0d2>, &property_getter_adaptor<0x0d3>, &property_getter_adaptor<0x0d4>, &property_getter_adaptor<0x0d5>, &property_getter_adaptor<0x0d6>, &property_getter_adaptor<0x0d7>,
+ &property_getter_adaptor<0x0d8>, &property_getter_adaptor<0x0d9>, &property_getter_adaptor<0x0da>, &property_getter_adaptor<0x0db>, &property_getter_adaptor<0x0dc>, &property_getter_adaptor<0x0dd>, &property_getter_adaptor<0x0de>, &property_getter_adaptor<0x0df>,
+ &property_getter_adaptor<0x0e0>, &property_getter_adaptor<0x0e1>, &property_getter_adaptor<0x0e2>, &property_getter_adaptor<0x0e3>, &property_getter_adaptor<0x0e4>, &property_getter_adaptor<0x0e5>, &property_getter_adaptor<0x0e6>, &property_getter_adaptor<0x0e7>,
+ &property_getter_adaptor<0x0e8>, &property_getter_adaptor<0x0e9>, &property_getter_adaptor<0x0ea>, &property_getter_adaptor<0x0eb>, &property_getter_adaptor<0x0ec>, &property_getter_adaptor<0x0ed>, &property_getter_adaptor<0x0ee>, &property_getter_adaptor<0x0ef>,
+ &property_getter_adaptor<0x0f0>, &property_getter_adaptor<0x0f1>, &property_getter_adaptor<0x0f2>, &property_getter_adaptor<0x0f3>, &property_getter_adaptor<0x0f4>, &property_getter_adaptor<0x0f5>, &property_getter_adaptor<0x0f6>, &property_getter_adaptor<0x0f7>,
+ &property_getter_adaptor<0x0f8>, &property_getter_adaptor<0x0f9>, &property_getter_adaptor<0x0fa>, &property_getter_adaptor<0x0fb>, &property_getter_adaptor<0x0fc>, &property_getter_adaptor<0x0fd>, &property_getter_adaptor<0x0fe>, &property_getter_adaptor<0x0ff>,
+ &property_getter_adaptor<0x100>, &property_getter_adaptor<0x101>, &property_getter_adaptor<0x102>, &property_getter_adaptor<0x103>, &property_getter_adaptor<0x104>, &property_getter_adaptor<0x105>, &property_getter_adaptor<0x106>, &property_getter_adaptor<0x107>,
+ &property_getter_adaptor<0x108>, &property_getter_adaptor<0x109>, &property_getter_adaptor<0x10a>, &property_getter_adaptor<0x10b>, &property_getter_adaptor<0x10c>, &property_getter_adaptor<0x10d>, &property_getter_adaptor<0x10e>, &property_getter_adaptor<0x10f>,
+ &property_getter_adaptor<0x110>, &property_getter_adaptor<0x111>, &property_getter_adaptor<0x112>, &property_getter_adaptor<0x113>, &property_getter_adaptor<0x114>, &property_getter_adaptor<0x115>, &property_getter_adaptor<0x116>, &property_getter_adaptor<0x117>,
+ &property_getter_adaptor<0x118>, &property_getter_adaptor<0x119>, &property_getter_adaptor<0x11a>, &property_getter_adaptor<0x11b>, &property_getter_adaptor<0x11c>, &property_getter_adaptor<0x11d>, &property_getter_adaptor<0x11e>, &property_getter_adaptor<0x11f>,
+ &property_getter_adaptor<0x120>, &property_getter_adaptor<0x121>, &property_getter_adaptor<0x122>, &property_getter_adaptor<0x123>, &property_getter_adaptor<0x124>, &property_getter_adaptor<0x125>, &property_getter_adaptor<0x126>, &property_getter_adaptor<0x127>,
+ &property_getter_adaptor<0x128>, &property_getter_adaptor<0x129>, &property_getter_adaptor<0x12a>, &property_getter_adaptor<0x12b>, &property_getter_adaptor<0x12c>, &property_getter_adaptor<0x12d>, &property_getter_adaptor<0x12e>, &property_getter_adaptor<0x12f>,
+ &property_getter_adaptor<0x130>, &property_getter_adaptor<0x131>, &property_getter_adaptor<0x132>, &property_getter_adaptor<0x133>, &property_getter_adaptor<0x134>, &property_getter_adaptor<0x135>, &property_getter_adaptor<0x136>, &property_getter_adaptor<0x137>,
+ &property_getter_adaptor<0x138>, &property_getter_adaptor<0x139>, &property_getter_adaptor<0x13a>, &property_getter_adaptor<0x13b>, &property_getter_adaptor<0x13c>, &property_getter_adaptor<0x13d>, &property_getter_adaptor<0x13e>, &property_getter_adaptor<0x13f>,
+ &property_getter_adaptor<0x140>, &property_getter_adaptor<0x141>, &property_getter_adaptor<0x142>, &property_getter_adaptor<0x143>, &property_getter_adaptor<0x144>, &property_getter_adaptor<0x145>, &property_getter_adaptor<0x146>, &property_getter_adaptor<0x147>,
+ &property_getter_adaptor<0x148>, &property_getter_adaptor<0x149>, &property_getter_adaptor<0x14a>, &property_getter_adaptor<0x14b>, &property_getter_adaptor<0x14c>, &property_getter_adaptor<0x14d>, &property_getter_adaptor<0x14e>, &property_getter_adaptor<0x14f>,
+ &property_getter_adaptor<0x150>, &property_getter_adaptor<0x151>, &property_getter_adaptor<0x152>, &property_getter_adaptor<0x153>, &property_getter_adaptor<0x154>, &property_getter_adaptor<0x155>, &property_getter_adaptor<0x156>, &property_getter_adaptor<0x157>,
+ &property_getter_adaptor<0x158>, &property_getter_adaptor<0x159>, &property_getter_adaptor<0x15a>, &property_getter_adaptor<0x15b>, &property_getter_adaptor<0x15c>, &property_getter_adaptor<0x15d>, &property_getter_adaptor<0x15e>, &property_getter_adaptor<0x15f>,
+ &property_getter_adaptor<0x160>, &property_getter_adaptor<0x161>, &property_getter_adaptor<0x162>, &property_getter_adaptor<0x163>, &property_getter_adaptor<0x164>, &property_getter_adaptor<0x165>, &property_getter_adaptor<0x166>, &property_getter_adaptor<0x167>,
+ &property_getter_adaptor<0x168>, &property_getter_adaptor<0x169>, &property_getter_adaptor<0x16a>, &property_getter_adaptor<0x16b>, &property_getter_adaptor<0x16c>, &property_getter_adaptor<0x16d>, &property_getter_adaptor<0x16e>, &property_getter_adaptor<0x16f>,
+ &property_getter_adaptor<0x170>, &property_getter_adaptor<0x171>, &property_getter_adaptor<0x172>, &property_getter_adaptor<0x173>, &property_getter_adaptor<0x174>, &property_getter_adaptor<0x175>, &property_getter_adaptor<0x176>, &property_getter_adaptor<0x177>,
+ &property_getter_adaptor<0x178>, &property_getter_adaptor<0x179>, &property_getter_adaptor<0x17a>, &property_getter_adaptor<0x17b>, &property_getter_adaptor<0x17c>, &property_getter_adaptor<0x17d>, &property_getter_adaptor<0x17e>, &property_getter_adaptor<0x17f>,
+ &property_getter_adaptor<0x180>, &property_getter_adaptor<0x181>, &property_getter_adaptor<0x182>, &property_getter_adaptor<0x183>, &property_getter_adaptor<0x184>, &property_getter_adaptor<0x185>, &property_getter_adaptor<0x186>, &property_getter_adaptor<0x187>,
+ &property_getter_adaptor<0x188>, &property_getter_adaptor<0x189>, &property_getter_adaptor<0x18a>, &property_getter_adaptor<0x18b>, &property_getter_adaptor<0x18c>, &property_getter_adaptor<0x18d>, &property_getter_adaptor<0x18e>, &property_getter_adaptor<0x18f>,
+ &property_getter_adaptor<0x190>, &property_getter_adaptor<0x191>, &property_getter_adaptor<0x192>, &property_getter_adaptor<0x193>, &property_getter_adaptor<0x194>, &property_getter_adaptor<0x195>, &property_getter_adaptor<0x196>, &property_getter_adaptor<0x197>,
+ &property_getter_adaptor<0x198>, &property_getter_adaptor<0x199>, &property_getter_adaptor<0x19a>, &property_getter_adaptor<0x19b>, &property_getter_adaptor<0x19c>, &property_getter_adaptor<0x19d>, &property_getter_adaptor<0x19e>, &property_getter_adaptor<0x19f>,
+ &property_getter_adaptor<0x1a0>, &property_getter_adaptor<0x1a1>, &property_getter_adaptor<0x1a2>, &property_getter_adaptor<0x1a3>, &property_getter_adaptor<0x1a4>, &property_getter_adaptor<0x1a5>, &property_getter_adaptor<0x1a6>, &property_getter_adaptor<0x1a7>,
+ &property_getter_adaptor<0x1a8>, &property_getter_adaptor<0x1a9>, &property_getter_adaptor<0x1aa>, &property_getter_adaptor<0x1ab>, &property_getter_adaptor<0x1ac>, &property_getter_adaptor<0x1ad>, &property_getter_adaptor<0x1ae>, &property_getter_adaptor<0x1af>,
+ &property_getter_adaptor<0x1b0>, &property_getter_adaptor<0x1b1>, &property_getter_adaptor<0x1b2>, &property_getter_adaptor<0x1b3>, &property_getter_adaptor<0x1b4>, &property_getter_adaptor<0x1b5>, &property_getter_adaptor<0x1b6>, &property_getter_adaptor<0x1b7>,
+ &property_getter_adaptor<0x1b8>, &property_getter_adaptor<0x1b9>, &property_getter_adaptor<0x1ba>, &property_getter_adaptor<0x1bb>, &property_getter_adaptor<0x1bc>, &property_getter_adaptor<0x1bd>, &property_getter_adaptor<0x1be>, &property_getter_adaptor<0x1bf>,
+ &property_getter_adaptor<0x1c0>, &property_getter_adaptor<0x1c1>, &property_getter_adaptor<0x1c2>, &property_getter_adaptor<0x1c3>, &property_getter_adaptor<0x1c4>, &property_getter_adaptor<0x1c5>, &property_getter_adaptor<0x1c6>, &property_getter_adaptor<0x1c7>,
+ &property_getter_adaptor<0x1c8>, &property_getter_adaptor<0x1c9>, &property_getter_adaptor<0x1ca>, &property_getter_adaptor<0x1cb>, &property_getter_adaptor<0x1cc>, &property_getter_adaptor<0x1cd>, &property_getter_adaptor<0x1ce>, &property_getter_adaptor<0x1cf>,
+ &property_getter_adaptor<0x1d0>, &property_getter_adaptor<0x1d1>, &property_getter_adaptor<0x1d2>, &property_getter_adaptor<0x1d3>, &property_getter_adaptor<0x1d4>, &property_getter_adaptor<0x1d5>, &property_getter_adaptor<0x1d6>, &property_getter_adaptor<0x1d7>,
+ &property_getter_adaptor<0x1d8>, &property_getter_adaptor<0x1d9>, &property_getter_adaptor<0x1da>, &property_getter_adaptor<0x1db>, &property_getter_adaptor<0x1dc>, &property_getter_adaptor<0x1dd>, &property_getter_adaptor<0x1de>, &property_getter_adaptor<0x1df>,
+ &property_getter_adaptor<0x1e0>, &property_getter_adaptor<0x1e1>, &property_getter_adaptor<0x1e2>, &property_getter_adaptor<0x1e3>, &property_getter_adaptor<0x1e4>, &property_getter_adaptor<0x1e5>, &property_getter_adaptor<0x1e6>, &property_getter_adaptor<0x1e7>,
+ &property_getter_adaptor<0x1e8>, &property_getter_adaptor<0x1e9>, &property_getter_adaptor<0x1ea>, &property_getter_adaptor<0x1eb>, &property_getter_adaptor<0x1ec>, &property_getter_adaptor<0x1ed>, &property_getter_adaptor<0x1ee>, &property_getter_adaptor<0x1ef>,
+ &property_getter_adaptor<0x1f0>, &property_getter_adaptor<0x1f1>, &property_getter_adaptor<0x1f2>, &property_getter_adaptor<0x1f3>, &property_getter_adaptor<0x1f4>, &property_getter_adaptor<0x1f5>, &property_getter_adaptor<0x1f6>, &property_getter_adaptor<0x1f7>,
+ &property_getter_adaptor<0x1f8>, &property_getter_adaptor<0x1f9>, &property_getter_adaptor<0x1fa>, &property_getter_adaptor<0x1fb>, &property_getter_adaptor<0x1fc>, &property_getter_adaptor<0x1fd>, &property_getter_adaptor<0x1fe>, &property_getter_adaptor<0x1ff>,
+ &property_getter_adaptor<0x200>, &property_getter_adaptor<0x201>, &property_getter_adaptor<0x202>, &property_getter_adaptor<0x203>, &property_getter_adaptor<0x204>, &property_getter_adaptor<0x205>, &property_getter_adaptor<0x206>, &property_getter_adaptor<0x207>,
+ &property_getter_adaptor<0x208>, &property_getter_adaptor<0x209>, &property_getter_adaptor<0x20a>, &property_getter_adaptor<0x20b>, &property_getter_adaptor<0x20c>, &property_getter_adaptor<0x20d>, &property_getter_adaptor<0x20e>, &property_getter_adaptor<0x20f>,
+ &property_getter_adaptor<0x210>, &property_getter_adaptor<0x211>, &property_getter_adaptor<0x212>, &property_getter_adaptor<0x213>, &property_getter_adaptor<0x214>, &property_getter_adaptor<0x215>, &property_getter_adaptor<0x216>, &property_getter_adaptor<0x217>,
+ &property_getter_adaptor<0x218>, &property_getter_adaptor<0x219>, &property_getter_adaptor<0x21a>, &property_getter_adaptor<0x21b>, &property_getter_adaptor<0x21c>, &property_getter_adaptor<0x21d>, &property_getter_adaptor<0x21e>, &property_getter_adaptor<0x21f>,
+ &property_getter_adaptor<0x220>, &property_getter_adaptor<0x221>, &property_getter_adaptor<0x222>, &property_getter_adaptor<0x223>, &property_getter_adaptor<0x224>, &property_getter_adaptor<0x225>, &property_getter_adaptor<0x226>, &property_getter_adaptor<0x227>,
+ &property_getter_adaptor<0x228>, &property_getter_adaptor<0x229>, &property_getter_adaptor<0x22a>, &property_getter_adaptor<0x22b>, &property_getter_adaptor<0x22c>, &property_getter_adaptor<0x22d>, &property_getter_adaptor<0x22e>, &property_getter_adaptor<0x22f>,
+ &property_getter_adaptor<0x230>, &property_getter_adaptor<0x231>, &property_getter_adaptor<0x232>, &property_getter_adaptor<0x233>, &property_getter_adaptor<0x234>, &property_getter_adaptor<0x235>, &property_getter_adaptor<0x236>, &property_getter_adaptor<0x237>,
+ &property_getter_adaptor<0x238>, &property_getter_adaptor<0x239>, &property_getter_adaptor<0x23a>, &property_getter_adaptor<0x23b>, &property_getter_adaptor<0x23c>, &property_getter_adaptor<0x23d>, &property_getter_adaptor<0x23e>, &property_getter_adaptor<0x23f>,
+ &property_getter_adaptor<0x240>, &property_getter_adaptor<0x241>, &property_getter_adaptor<0x242>, &property_getter_adaptor<0x243>, &property_getter_adaptor<0x244>, &property_getter_adaptor<0x245>, &property_getter_adaptor<0x246>, &property_getter_adaptor<0x247>,
+ &property_getter_adaptor<0x248>, &property_getter_adaptor<0x249>, &property_getter_adaptor<0x24a>, &property_getter_adaptor<0x24b>, &property_getter_adaptor<0x24c>, &property_getter_adaptor<0x24d>, &property_getter_adaptor<0x24e>, &property_getter_adaptor<0x24f>,
+ &property_getter_adaptor<0x250>, &property_getter_adaptor<0x251>, &property_getter_adaptor<0x252>, &property_getter_adaptor<0x253>, &property_getter_adaptor<0x254>, &property_getter_adaptor<0x255>, &property_getter_adaptor<0x256>, &property_getter_adaptor<0x257>,
+ &property_getter_adaptor<0x258>, &property_getter_adaptor<0x259>, &property_getter_adaptor<0x25a>, &property_getter_adaptor<0x25b>, &property_getter_adaptor<0x25c>, &property_getter_adaptor<0x25d>, &property_getter_adaptor<0x25e>, &property_getter_adaptor<0x25f>,
+ &property_getter_adaptor<0x260>, &property_getter_adaptor<0x261>, &property_getter_adaptor<0x262>, &property_getter_adaptor<0x263>, &property_getter_adaptor<0x264>, &property_getter_adaptor<0x265>, &property_getter_adaptor<0x266>, &property_getter_adaptor<0x267>,
+ &property_getter_adaptor<0x268>, &property_getter_adaptor<0x269>, &property_getter_adaptor<0x26a>, &property_getter_adaptor<0x26b>, &property_getter_adaptor<0x26c>, &property_getter_adaptor<0x26d>, &property_getter_adaptor<0x26e>, &property_getter_adaptor<0x26f>,
+ &property_getter_adaptor<0x270>, &property_getter_adaptor<0x271>, &property_getter_adaptor<0x272>, &property_getter_adaptor<0x273>, &property_getter_adaptor<0x274>, &property_getter_adaptor<0x275>, &property_getter_adaptor<0x276>, &property_getter_adaptor<0x277>,
+ &property_getter_adaptor<0x278>, &property_getter_adaptor<0x279>, &property_getter_adaptor<0x27a>, &property_getter_adaptor<0x27b>, &property_getter_adaptor<0x27c>, &property_getter_adaptor<0x27d>, &property_getter_adaptor<0x27e>, &property_getter_adaptor<0x27f>,
+ &property_getter_adaptor<0x280>, &property_getter_adaptor<0x281>, &property_getter_adaptor<0x282>, &property_getter_adaptor<0x283>, &property_getter_adaptor<0x284>, &property_getter_adaptor<0x285>, &property_getter_adaptor<0x286>, &property_getter_adaptor<0x287>,
+ &property_getter_adaptor<0x288>, &property_getter_adaptor<0x289>, &property_getter_adaptor<0x28a>, &property_getter_adaptor<0x28b>, &property_getter_adaptor<0x28c>, &property_getter_adaptor<0x28d>, &property_getter_adaptor<0x28e>, &property_getter_adaptor<0x28f>,
+ &property_getter_adaptor<0x290>, &property_getter_adaptor<0x291>, &property_getter_adaptor<0x292>, &property_getter_adaptor<0x293>, &property_getter_adaptor<0x294>, &property_getter_adaptor<0x295>, &property_getter_adaptor<0x296>, &property_getter_adaptor<0x297>,
+ &property_getter_adaptor<0x298>, &property_getter_adaptor<0x299>, &property_getter_adaptor<0x29a>, &property_getter_adaptor<0x29b>, &property_getter_adaptor<0x29c>, &property_getter_adaptor<0x29d>, &property_getter_adaptor<0x29e>, &property_getter_adaptor<0x29f>,
+ &property_getter_adaptor<0x2a0>, &property_getter_adaptor<0x2a1>, &property_getter_adaptor<0x2a2>, &property_getter_adaptor<0x2a3>, &property_getter_adaptor<0x2a4>, &property_getter_adaptor<0x2a5>, &property_getter_adaptor<0x2a6>, &property_getter_adaptor<0x2a7>,
+ &property_getter_adaptor<0x2a8>, &property_getter_adaptor<0x2a9>, &property_getter_adaptor<0x2aa>, &property_getter_adaptor<0x2ab>, &property_getter_adaptor<0x2ac>, &property_getter_adaptor<0x2ad>, &property_getter_adaptor<0x2ae>, &property_getter_adaptor<0x2af>,
+ &property_getter_adaptor<0x2b0>, &property_getter_adaptor<0x2b1>, &property_getter_adaptor<0x2b2>, &property_getter_adaptor<0x2b3>, &property_getter_adaptor<0x2b4>, &property_getter_adaptor<0x2b5>, &property_getter_adaptor<0x2b6>, &property_getter_adaptor<0x2b7>,
+ &property_getter_adaptor<0x2b8>, &property_getter_adaptor<0x2b9>, &property_getter_adaptor<0x2ba>, &property_getter_adaptor<0x2bb>, &property_getter_adaptor<0x2bc>, &property_getter_adaptor<0x2bd>, &property_getter_adaptor<0x2be>, &property_getter_adaptor<0x2bf>,
+ &property_getter_adaptor<0x2c0>, &property_getter_adaptor<0x2c1>, &property_getter_adaptor<0x2c2>, &property_getter_adaptor<0x2c3>, &property_getter_adaptor<0x2c4>, &property_getter_adaptor<0x2c5>, &property_getter_adaptor<0x2c6>, &property_getter_adaptor<0x2c7>,
+ &property_getter_adaptor<0x2c8>, &property_getter_adaptor<0x2c9>, &property_getter_adaptor<0x2ca>, &property_getter_adaptor<0x2cb>, &property_getter_adaptor<0x2cc>, &property_getter_adaptor<0x2cd>, &property_getter_adaptor<0x2ce>, &property_getter_adaptor<0x2cf>,
+ &property_getter_adaptor<0x2d0>, &property_getter_adaptor<0x2d1>, &property_getter_adaptor<0x2d2>, &property_getter_adaptor<0x2d3>, &property_getter_adaptor<0x2d4>, &property_getter_adaptor<0x2d5>, &property_getter_adaptor<0x2d6>, &property_getter_adaptor<0x2d7>,
+ &property_getter_adaptor<0x2d8>, &property_getter_adaptor<0x2d9>, &property_getter_adaptor<0x2da>, &property_getter_adaptor<0x2db>, &property_getter_adaptor<0x2dc>, &property_getter_adaptor<0x2dd>, &property_getter_adaptor<0x2de>, &property_getter_adaptor<0x2df>,
+ &property_getter_adaptor<0x2e0>, &property_getter_adaptor<0x2e1>, &property_getter_adaptor<0x2e2>, &property_getter_adaptor<0x2e3>, &property_getter_adaptor<0x2e4>, &property_getter_adaptor<0x2e5>, &property_getter_adaptor<0x2e6>, &property_getter_adaptor<0x2e7>,
+ &property_getter_adaptor<0x2e8>, &property_getter_adaptor<0x2e9>, &property_getter_adaptor<0x2ea>, &property_getter_adaptor<0x2eb>, &property_getter_adaptor<0x2ec>, &property_getter_adaptor<0x2ed>, &property_getter_adaptor<0x2ee>, &property_getter_adaptor<0x2ef>,
+ &property_getter_adaptor<0x2f0>, &property_getter_adaptor<0x2f1>, &property_getter_adaptor<0x2f2>, &property_getter_adaptor<0x2f3>, &property_getter_adaptor<0x2f4>, &property_getter_adaptor<0x2f5>, &property_getter_adaptor<0x2f6>, &property_getter_adaptor<0x2f7>,
+ &property_getter_adaptor<0x2f8>, &property_getter_adaptor<0x2f9>, &property_getter_adaptor<0x2fa>, &property_getter_adaptor<0x2fb>, &property_getter_adaptor<0x2fc>, &property_getter_adaptor<0x2fd>, &property_getter_adaptor<0x2fe>, &property_getter_adaptor<0x2ff>,
+ &property_getter_adaptor<0x300>, &property_getter_adaptor<0x301>, &property_getter_adaptor<0x302>, &property_getter_adaptor<0x303>, &property_getter_adaptor<0x304>, &property_getter_adaptor<0x305>, &property_getter_adaptor<0x306>, &property_getter_adaptor<0x307>,
+ &property_getter_adaptor<0x308>, &property_getter_adaptor<0x309>, &property_getter_adaptor<0x30a>, &property_getter_adaptor<0x30b>, &property_getter_adaptor<0x30c>, &property_getter_adaptor<0x30d>, &property_getter_adaptor<0x30e>, &property_getter_adaptor<0x30f>,
+ &property_getter_adaptor<0x310>, &property_getter_adaptor<0x311>, &property_getter_adaptor<0x312>, &property_getter_adaptor<0x313>, &property_getter_adaptor<0x314>, &property_getter_adaptor<0x315>, &property_getter_adaptor<0x316>, &property_getter_adaptor<0x317>,
+ &property_getter_adaptor<0x318>, &property_getter_adaptor<0x319>, &property_getter_adaptor<0x31a>, &property_getter_adaptor<0x31b>, &property_getter_adaptor<0x31c>, &property_getter_adaptor<0x31d>, &property_getter_adaptor<0x31e>, &property_getter_adaptor<0x31f>,
+ &property_getter_adaptor<0x320>, &property_getter_adaptor<0x321>, &property_getter_adaptor<0x322>, &property_getter_adaptor<0x323>, &property_getter_adaptor<0x324>, &property_getter_adaptor<0x325>, &property_getter_adaptor<0x326>, &property_getter_adaptor<0x327>,
+ &property_getter_adaptor<0x328>, &property_getter_adaptor<0x329>, &property_getter_adaptor<0x32a>, &property_getter_adaptor<0x32b>, &property_getter_adaptor<0x32c>, &property_getter_adaptor<0x32d>, &property_getter_adaptor<0x32e>, &property_getter_adaptor<0x32f>,
+ &property_getter_adaptor<0x330>, &property_getter_adaptor<0x331>, &property_getter_adaptor<0x332>, &property_getter_adaptor<0x333>, &property_getter_adaptor<0x334>, &property_getter_adaptor<0x335>, &property_getter_adaptor<0x336>, &property_getter_adaptor<0x337>,
+ &property_getter_adaptor<0x338>, &property_getter_adaptor<0x339>, &property_getter_adaptor<0x33a>, &property_getter_adaptor<0x33b>, &property_getter_adaptor<0x33c>, &property_getter_adaptor<0x33d>, &property_getter_adaptor<0x33e>, &property_getter_adaptor<0x33f>,
+ &property_getter_adaptor<0x340>, &property_getter_adaptor<0x341>, &property_getter_adaptor<0x342>, &property_getter_adaptor<0x343>, &property_getter_adaptor<0x344>, &property_getter_adaptor<0x345>, &property_getter_adaptor<0x346>, &property_getter_adaptor<0x347>,
+ &property_getter_adaptor<0x348>, &property_getter_adaptor<0x349>, &property_getter_adaptor<0x34a>, &property_getter_adaptor<0x34b>, &property_getter_adaptor<0x34c>, &property_getter_adaptor<0x34d>, &property_getter_adaptor<0x34e>, &property_getter_adaptor<0x34f>,
+ &property_getter_adaptor<0x350>, &property_getter_adaptor<0x351>, &property_getter_adaptor<0x352>, &property_getter_adaptor<0x353>, &property_getter_adaptor<0x354>, &property_getter_adaptor<0x355>, &property_getter_adaptor<0x356>, &property_getter_adaptor<0x357>,
+ &property_getter_adaptor<0x358>, &property_getter_adaptor<0x359>, &property_getter_adaptor<0x35a>, &property_getter_adaptor<0x35b>, &property_getter_adaptor<0x35c>, &property_getter_adaptor<0x35d>, &property_getter_adaptor<0x35e>, &property_getter_adaptor<0x35f>,
+ &property_getter_adaptor<0x360>, &property_getter_adaptor<0x361>, &property_getter_adaptor<0x362>, &property_getter_adaptor<0x363>, &property_getter_adaptor<0x364>, &property_getter_adaptor<0x365>, &property_getter_adaptor<0x366>, &property_getter_adaptor<0x367>,
+ &property_getter_adaptor<0x368>, &property_getter_adaptor<0x369>, &property_getter_adaptor<0x36a>, &property_getter_adaptor<0x36b>, &property_getter_adaptor<0x36c>, &property_getter_adaptor<0x36d>, &property_getter_adaptor<0x36e>, &property_getter_adaptor<0x36f>,
+ &property_getter_adaptor<0x370>, &property_getter_adaptor<0x371>, &property_getter_adaptor<0x372>, &property_getter_adaptor<0x373>, &property_getter_adaptor<0x374>, &property_getter_adaptor<0x375>, &property_getter_adaptor<0x376>, &property_getter_adaptor<0x377>,
+ &property_getter_adaptor<0x378>, &property_getter_adaptor<0x379>, &property_getter_adaptor<0x37a>, &property_getter_adaptor<0x37b>, &property_getter_adaptor<0x37c>, &property_getter_adaptor<0x37d>, &property_getter_adaptor<0x37e>, &property_getter_adaptor<0x37f>,
+ &property_getter_adaptor<0x380>, &property_getter_adaptor<0x381>, &property_getter_adaptor<0x382>, &property_getter_adaptor<0x383>, &property_getter_adaptor<0x384>, &property_getter_adaptor<0x385>, &property_getter_adaptor<0x386>, &property_getter_adaptor<0x387>,
+ &property_getter_adaptor<0x388>, &property_getter_adaptor<0x389>, &property_getter_adaptor<0x38a>, &property_getter_adaptor<0x38b>, &property_getter_adaptor<0x38c>, &property_getter_adaptor<0x38d>, &property_getter_adaptor<0x38e>, &property_getter_adaptor<0x38f>,
+ &property_getter_adaptor<0x390>, &property_getter_adaptor<0x391>, &property_getter_adaptor<0x392>, &property_getter_adaptor<0x393>, &property_getter_adaptor<0x394>, &property_getter_adaptor<0x395>, &property_getter_adaptor<0x396>, &property_getter_adaptor<0x397>,
+ &property_getter_adaptor<0x398>, &property_getter_adaptor<0x399>, &property_getter_adaptor<0x39a>, &property_getter_adaptor<0x39b>, &property_getter_adaptor<0x39c>, &property_getter_adaptor<0x39d>, &property_getter_adaptor<0x39e>, &property_getter_adaptor<0x39f>,
+ &property_getter_adaptor<0x3a0>, &property_getter_adaptor<0x3a1>, &property_getter_adaptor<0x3a2>, &property_getter_adaptor<0x3a3>, &property_getter_adaptor<0x3a4>, &property_getter_adaptor<0x3a5>, &property_getter_adaptor<0x3a6>, &property_getter_adaptor<0x3a7>,
+ &property_getter_adaptor<0x3a8>, &property_getter_adaptor<0x3a9>, &property_getter_adaptor<0x3aa>, &property_getter_adaptor<0x3ab>, &property_getter_adaptor<0x3ac>, &property_getter_adaptor<0x3ad>, &property_getter_adaptor<0x3ae>, &property_getter_adaptor<0x3af>,
+ &property_getter_adaptor<0x3b0>, &property_getter_adaptor<0x3b1>, &property_getter_adaptor<0x3b2>, &property_getter_adaptor<0x3b3>, &property_getter_adaptor<0x3b4>, &property_getter_adaptor<0x3b5>, &property_getter_adaptor<0x3b6>, &property_getter_adaptor<0x3b7>,
+ &property_getter_adaptor<0x3b8>, &property_getter_adaptor<0x3b9>, &property_getter_adaptor<0x3ba>, &property_getter_adaptor<0x3bb>, &property_getter_adaptor<0x3bc>, &property_getter_adaptor<0x3bd>, &property_getter_adaptor<0x3be>, &property_getter_adaptor<0x3bf>,
+ &property_getter_adaptor<0x3c0>, &property_getter_adaptor<0x3c1>, &property_getter_adaptor<0x3c2>, &property_getter_adaptor<0x3c3>, &property_getter_adaptor<0x3c4>, &property_getter_adaptor<0x3c5>, &property_getter_adaptor<0x3c6>, &property_getter_adaptor<0x3c7>,
+ &property_getter_adaptor<0x3c8>, &property_getter_adaptor<0x3c9>, &property_getter_adaptor<0x3ca>, &property_getter_adaptor<0x3cb>, &property_getter_adaptor<0x3cc>, &property_getter_adaptor<0x3cd>, &property_getter_adaptor<0x3ce>, &property_getter_adaptor<0x3cf>,
+ &property_getter_adaptor<0x3d0>, &property_getter_adaptor<0x3d1>, &property_getter_adaptor<0x3d2>, &property_getter_adaptor<0x3d3>, &property_getter_adaptor<0x3d4>, &property_getter_adaptor<0x3d5>, &property_getter_adaptor<0x3d6>, &property_getter_adaptor<0x3d7>,
+ &property_getter_adaptor<0x3d8>, &property_getter_adaptor<0x3d9>, &property_getter_adaptor<0x3da>, &property_getter_adaptor<0x3db>, &property_getter_adaptor<0x3dc>, &property_getter_adaptor<0x3dd>, &property_getter_adaptor<0x3de>, &property_getter_adaptor<0x3df>,
+ &property_getter_adaptor<0x3e0>, &property_getter_adaptor<0x3e1>, &property_getter_adaptor<0x3e2>, &property_getter_adaptor<0x3e3>, &property_getter_adaptor<0x3e4>, &property_getter_adaptor<0x3e5>, &property_getter_adaptor<0x3e6>, &property_getter_adaptor<0x3e7>,
+ &property_getter_adaptor<0x3e8>, &property_getter_adaptor<0x3e9>, &property_getter_adaptor<0x3ea>, &property_getter_adaptor<0x3eb>, &property_getter_adaptor<0x3ec>, &property_getter_adaptor<0x3ed>, &property_getter_adaptor<0x3ee>, &property_getter_adaptor<0x3ef>,
+ &property_getter_adaptor<0x3f0>, &property_getter_adaptor<0x3f1>, &property_getter_adaptor<0x3f2>, &property_getter_adaptor<0x3f3>, &property_getter_adaptor<0x3f4>, &property_getter_adaptor<0x3f5>, &property_getter_adaptor<0x3f6>, &property_getter_adaptor<0x3f7>,
+ &property_getter_adaptor<0x3f8>, &property_getter_adaptor<0x3f9>, &property_getter_adaptor<0x3fa>, &property_getter_adaptor<0x3fb>, &property_getter_adaptor<0x3fc>, &property_getter_adaptor<0x3fd>, &property_getter_adaptor<0x3fe>, &property_getter_adaptor<0x3ff>,
+ &property_getter_adaptor<0x400>, &property_getter_adaptor<0x401>, &property_getter_adaptor<0x402>, &property_getter_adaptor<0x403>, &property_getter_adaptor<0x404>, &property_getter_adaptor<0x405>, &property_getter_adaptor<0x406>, &property_getter_adaptor<0x407>,
+ &property_getter_adaptor<0x408>, &property_getter_adaptor<0x409>, &property_getter_adaptor<0x40a>, &property_getter_adaptor<0x40b>, &property_getter_adaptor<0x40c>, &property_getter_adaptor<0x40d>, &property_getter_adaptor<0x40e>, &property_getter_adaptor<0x40f>,
+ &property_getter_adaptor<0x410>, &property_getter_adaptor<0x411>, &property_getter_adaptor<0x412>, &property_getter_adaptor<0x413>, &property_getter_adaptor<0x414>, &property_getter_adaptor<0x415>, &property_getter_adaptor<0x416>, &property_getter_adaptor<0x417>,
+ &property_getter_adaptor<0x418>, &property_getter_adaptor<0x419>, &property_getter_adaptor<0x41a>, &property_getter_adaptor<0x41b>, &property_getter_adaptor<0x41c>, &property_getter_adaptor<0x41d>, &property_getter_adaptor<0x41e>, &property_getter_adaptor<0x41f>,
+ &property_getter_adaptor<0x420>, &property_getter_adaptor<0x421>, &property_getter_adaptor<0x422>, &property_getter_adaptor<0x423>, &property_getter_adaptor<0x424>, &property_getter_adaptor<0x425>, &property_getter_adaptor<0x426>, &property_getter_adaptor<0x427>,
+ &property_getter_adaptor<0x428>, &property_getter_adaptor<0x429>, &property_getter_adaptor<0x42a>, &property_getter_adaptor<0x42b>, &property_getter_adaptor<0x42c>, &property_getter_adaptor<0x42d>, &property_getter_adaptor<0x42e>, &property_getter_adaptor<0x42f>,
+ &property_getter_adaptor<0x430>, &property_getter_adaptor<0x431>, &property_getter_adaptor<0x432>, &property_getter_adaptor<0x433>, &property_getter_adaptor<0x434>, &property_getter_adaptor<0x435>, &property_getter_adaptor<0x436>, &property_getter_adaptor<0x437>,
+ &property_getter_adaptor<0x438>, &property_getter_adaptor<0x439>, &property_getter_adaptor<0x43a>, &property_getter_adaptor<0x43b>, &property_getter_adaptor<0x43c>, &property_getter_adaptor<0x43d>, &property_getter_adaptor<0x43e>, &property_getter_adaptor<0x43f>,
+ &property_getter_adaptor<0x440>, &property_getter_adaptor<0x441>, &property_getter_adaptor<0x442>, &property_getter_adaptor<0x443>, &property_getter_adaptor<0x444>, &property_getter_adaptor<0x445>, &property_getter_adaptor<0x446>, &property_getter_adaptor<0x447>,
+ &property_getter_adaptor<0x448>, &property_getter_adaptor<0x449>, &property_getter_adaptor<0x44a>, &property_getter_adaptor<0x44b>, &property_getter_adaptor<0x44c>, &property_getter_adaptor<0x44d>, &property_getter_adaptor<0x44e>, &property_getter_adaptor<0x44f>,
+ &property_getter_adaptor<0x450>, &property_getter_adaptor<0x451>, &property_getter_adaptor<0x452>, &property_getter_adaptor<0x453>, &property_getter_adaptor<0x454>, &property_getter_adaptor<0x455>, &property_getter_adaptor<0x456>, &property_getter_adaptor<0x457>,
+ &property_getter_adaptor<0x458>, &property_getter_adaptor<0x459>, &property_getter_adaptor<0x45a>, &property_getter_adaptor<0x45b>, &property_getter_adaptor<0x45c>, &property_getter_adaptor<0x45d>, &property_getter_adaptor<0x45e>, &property_getter_adaptor<0x45f>,
+ &property_getter_adaptor<0x460>, &property_getter_adaptor<0x461>, &property_getter_adaptor<0x462>, &property_getter_adaptor<0x463>, &property_getter_adaptor<0x464>, &property_getter_adaptor<0x465>, &property_getter_adaptor<0x466>, &property_getter_adaptor<0x467>,
+ &property_getter_adaptor<0x468>, &property_getter_adaptor<0x469>, &property_getter_adaptor<0x46a>, &property_getter_adaptor<0x46b>, &property_getter_adaptor<0x46c>, &property_getter_adaptor<0x46d>, &property_getter_adaptor<0x46e>, &property_getter_adaptor<0x46f>,
+ &property_getter_adaptor<0x470>, &property_getter_adaptor<0x471>, &property_getter_adaptor<0x472>, &property_getter_adaptor<0x473>, &property_getter_adaptor<0x474>, &property_getter_adaptor<0x475>, &property_getter_adaptor<0x476>, &property_getter_adaptor<0x477>,
+ &property_getter_adaptor<0x478>, &property_getter_adaptor<0x479>, &property_getter_adaptor<0x47a>, &property_getter_adaptor<0x47b>, &property_getter_adaptor<0x47c>, &property_getter_adaptor<0x47d>, &property_getter_adaptor<0x47e>, &property_getter_adaptor<0x47f>,
+ &property_getter_adaptor<0x480>, &property_getter_adaptor<0x481>, &property_getter_adaptor<0x482>, &property_getter_adaptor<0x483>, &property_getter_adaptor<0x484>, &property_getter_adaptor<0x485>, &property_getter_adaptor<0x486>, &property_getter_adaptor<0x487>,
+ &property_getter_adaptor<0x488>, &property_getter_adaptor<0x489>, &property_getter_adaptor<0x48a>, &property_getter_adaptor<0x48b>, &property_getter_adaptor<0x48c>, &property_getter_adaptor<0x48d>, &property_getter_adaptor<0x48e>, &property_getter_adaptor<0x48f>,
+ &property_getter_adaptor<0x490>, &property_getter_adaptor<0x491>, &property_getter_adaptor<0x492>, &property_getter_adaptor<0x493>, &property_getter_adaptor<0x494>, &property_getter_adaptor<0x495>, &property_getter_adaptor<0x496>, &property_getter_adaptor<0x497>,
+ &property_getter_adaptor<0x498>, &property_getter_adaptor<0x499>, &property_getter_adaptor<0x49a>, &property_getter_adaptor<0x49b>, &property_getter_adaptor<0x49c>, &property_getter_adaptor<0x49d>, &property_getter_adaptor<0x49e>, &property_getter_adaptor<0x49f>,
+ &property_getter_adaptor<0x4a0>, &property_getter_adaptor<0x4a1>, &property_getter_adaptor<0x4a2>, &property_getter_adaptor<0x4a3>, &property_getter_adaptor<0x4a4>, &property_getter_adaptor<0x4a5>, &property_getter_adaptor<0x4a6>, &property_getter_adaptor<0x4a7>,
+ &property_getter_adaptor<0x4a8>, &property_getter_adaptor<0x4a9>, &property_getter_adaptor<0x4aa>, &property_getter_adaptor<0x4ab>, &property_getter_adaptor<0x4ac>, &property_getter_adaptor<0x4ad>, &property_getter_adaptor<0x4ae>, &property_getter_adaptor<0x4af>,
+ &property_getter_adaptor<0x4b0>, &property_getter_adaptor<0x4b1>, &property_getter_adaptor<0x4b2>, &property_getter_adaptor<0x4b3>, &property_getter_adaptor<0x4b4>, &property_getter_adaptor<0x4b5>, &property_getter_adaptor<0x4b6>, &property_getter_adaptor<0x4b7>,
+ &property_getter_adaptor<0x4b8>, &property_getter_adaptor<0x4b9>, &property_getter_adaptor<0x4ba>, &property_getter_adaptor<0x4bb>, &property_getter_adaptor<0x4bc>, &property_getter_adaptor<0x4bd>, &property_getter_adaptor<0x4be>, &property_getter_adaptor<0x4bf>,
+ &property_getter_adaptor<0x4c0>, &property_getter_adaptor<0x4c1>, &property_getter_adaptor<0x4c2>, &property_getter_adaptor<0x4c3>, &property_getter_adaptor<0x4c4>, &property_getter_adaptor<0x4c5>, &property_getter_adaptor<0x4c6>, &property_getter_adaptor<0x4c7>,
+ &property_getter_adaptor<0x4c8>, &property_getter_adaptor<0x4c9>, &property_getter_adaptor<0x4ca>, &property_getter_adaptor<0x4cb>, &property_getter_adaptor<0x4cc>, &property_getter_adaptor<0x4cd>, &property_getter_adaptor<0x4ce>, &property_getter_adaptor<0x4cf>,
+ &property_getter_adaptor<0x4d0>, &property_getter_adaptor<0x4d1>, &property_getter_adaptor<0x4d2>, &property_getter_adaptor<0x4d3>, &property_getter_adaptor<0x4d4>, &property_getter_adaptor<0x4d5>, &property_getter_adaptor<0x4d6>, &property_getter_adaptor<0x4d7>,
+ &property_getter_adaptor<0x4d8>, &property_getter_adaptor<0x4d9>, &property_getter_adaptor<0x4da>, &property_getter_adaptor<0x4db>, &property_getter_adaptor<0x4dc>, &property_getter_adaptor<0x4dd>, &property_getter_adaptor<0x4de>, &property_getter_adaptor<0x4df>,
+ &property_getter_adaptor<0x4e0>, &property_getter_adaptor<0x4e1>, &property_getter_adaptor<0x4e2>, &property_getter_adaptor<0x4e3>, &property_getter_adaptor<0x4e4>, &property_getter_adaptor<0x4e5>, &property_getter_adaptor<0x4e6>, &property_getter_adaptor<0x4e7>,
+ &property_getter_adaptor<0x4e8>, &property_getter_adaptor<0x4e9>, &property_getter_adaptor<0x4ea>, &property_getter_adaptor<0x4eb>, &property_getter_adaptor<0x4ec>, &property_getter_adaptor<0x4ed>, &property_getter_adaptor<0x4ee>, &property_getter_adaptor<0x4ef>,
+ &property_getter_adaptor<0x4f0>, &property_getter_adaptor<0x4f1>, &property_getter_adaptor<0x4f2>, &property_getter_adaptor<0x4f3>, &property_getter_adaptor<0x4f4>, &property_getter_adaptor<0x4f5>, &property_getter_adaptor<0x4f6>, &property_getter_adaptor<0x4f7>,
+ &property_getter_adaptor<0x4f8>, &property_getter_adaptor<0x4f9>, &property_getter_adaptor<0x4fa>, &property_getter_adaptor<0x4fb>, &property_getter_adaptor<0x4fc>, &property_getter_adaptor<0x4fd>, &property_getter_adaptor<0x4fe>, &property_getter_adaptor<0x4ff>,
+};
+
+py_func_ptr_t get_property_getter_adaptor (int n)
+{
+ tl_assert (n >= 0 && n < int (sizeof (property_getter_adaptors) / sizeof (property_getter_adaptors [0])));
+ return property_getter_adaptors [n];
+}
+
+template
+PyObject *property_setter_adaptor (PyObject *self, PyObject *args)
+{
+ return property_setter_adaptor (N, self, args);
+}
+
+static py_func_ptr_t property_setter_adaptors [] =
+{
+ &property_setter_adaptor<0x000>, &property_setter_adaptor<0x001>, &property_setter_adaptor<0x002>, &property_setter_adaptor<0x003>, &property_setter_adaptor<0x004>, &property_setter_adaptor<0x005>, &property_setter_adaptor<0x006>, &property_setter_adaptor<0x007>,
+ &property_setter_adaptor<0x008>, &property_setter_adaptor<0x009>, &property_setter_adaptor<0x00a>, &property_setter_adaptor<0x00b>, &property_setter_adaptor<0x00c>, &property_setter_adaptor<0x00d>, &property_setter_adaptor<0x00e>, &property_setter_adaptor<0x00f>,
+ &property_setter_adaptor<0x010>, &property_setter_adaptor<0x011>, &property_setter_adaptor<0x012>, &property_setter_adaptor<0x013>, &property_setter_adaptor<0x014>, &property_setter_adaptor<0x015>, &property_setter_adaptor<0x016>, &property_setter_adaptor<0x017>,
+ &property_setter_adaptor<0x018>, &property_setter_adaptor<0x019>, &property_setter_adaptor<0x01a>, &property_setter_adaptor<0x01b>, &property_setter_adaptor<0x01c>, &property_setter_adaptor<0x01d>, &property_setter_adaptor<0x01e>, &property_setter_adaptor<0x01f>,
+ &property_setter_adaptor<0x020>, &property_setter_adaptor<0x021>, &property_setter_adaptor<0x022>, &property_setter_adaptor<0x023>, &property_setter_adaptor<0x024>, &property_setter_adaptor<0x025>, &property_setter_adaptor<0x026>, &property_setter_adaptor<0x027>,
+ &property_setter_adaptor<0x028>, &property_setter_adaptor<0x029>, &property_setter_adaptor<0x02a>, &property_setter_adaptor<0x02b>, &property_setter_adaptor<0x02c>, &property_setter_adaptor<0x02d>, &property_setter_adaptor<0x02e>, &property_setter_adaptor<0x02f>,
+ &property_setter_adaptor<0x030>, &property_setter_adaptor<0x031>, &property_setter_adaptor<0x032>, &property_setter_adaptor<0x033>, &property_setter_adaptor<0x034>, &property_setter_adaptor<0x035>, &property_setter_adaptor<0x036>, &property_setter_adaptor<0x037>,
+ &property_setter_adaptor<0x038>, &property_setter_adaptor<0x039>, &property_setter_adaptor<0x03a>, &property_setter_adaptor<0x03b>, &property_setter_adaptor<0x03c>, &property_setter_adaptor<0x03d>, &property_setter_adaptor<0x03e>, &property_setter_adaptor<0x03f>,
+ &property_setter_adaptor<0x040>, &property_setter_adaptor<0x041>, &property_setter_adaptor<0x042>, &property_setter_adaptor<0x043>, &property_setter_adaptor<0x044>, &property_setter_adaptor<0x045>, &property_setter_adaptor<0x046>, &property_setter_adaptor<0x047>,
+ &property_setter_adaptor<0x048>, &property_setter_adaptor<0x049>, &property_setter_adaptor<0x04a>, &property_setter_adaptor<0x04b>, &property_setter_adaptor<0x04c>, &property_setter_adaptor<0x04d>, &property_setter_adaptor<0x04e>, &property_setter_adaptor<0x04f>,
+ &property_setter_adaptor<0x050>, &property_setter_adaptor<0x051>, &property_setter_adaptor<0x052>, &property_setter_adaptor<0x053>, &property_setter_adaptor<0x054>, &property_setter_adaptor<0x055>, &property_setter_adaptor<0x056>, &property_setter_adaptor<0x057>,
+ &property_setter_adaptor<0x058>, &property_setter_adaptor<0x059>, &property_setter_adaptor<0x05a>, &property_setter_adaptor<0x05b>, &property_setter_adaptor<0x05c>, &property_setter_adaptor<0x05d>, &property_setter_adaptor<0x05e>, &property_setter_adaptor<0x05f>,
+ &property_setter_adaptor<0x060>, &property_setter_adaptor<0x061>, &property_setter_adaptor<0x062>, &property_setter_adaptor<0x063>, &property_setter_adaptor<0x064>, &property_setter_adaptor<0x065>, &property_setter_adaptor<0x066>, &property_setter_adaptor<0x067>,
+ &property_setter_adaptor<0x068>, &property_setter_adaptor<0x069>, &property_setter_adaptor<0x06a>, &property_setter_adaptor<0x06b>, &property_setter_adaptor<0x06c>, &property_setter_adaptor<0x06d>, &property_setter_adaptor<0x06e>, &property_setter_adaptor<0x06f>,
+ &property_setter_adaptor<0x070>, &property_setter_adaptor<0x071>, &property_setter_adaptor<0x072>, &property_setter_adaptor<0x073>, &property_setter_adaptor<0x074>, &property_setter_adaptor<0x075>, &property_setter_adaptor<0x076>, &property_setter_adaptor<0x077>,
+ &property_setter_adaptor<0x078>, &property_setter_adaptor<0x079>, &property_setter_adaptor<0x07a>, &property_setter_adaptor<0x07b>, &property_setter_adaptor<0x07c>, &property_setter_adaptor<0x07d>, &property_setter_adaptor<0x07e>, &property_setter_adaptor<0x07f>,
+ &property_setter_adaptor<0x080>, &property_setter_adaptor<0x081>, &property_setter_adaptor<0x082>, &property_setter_adaptor<0x083>, &property_setter_adaptor<0x084>, &property_setter_adaptor<0x085>, &property_setter_adaptor<0x086>, &property_setter_adaptor<0x087>,
+ &property_setter_adaptor<0x088>, &property_setter_adaptor<0x089>, &property_setter_adaptor<0x08a>, &property_setter_adaptor<0x08b>, &property_setter_adaptor<0x08c>, &property_setter_adaptor<0x08d>, &property_setter_adaptor<0x08e>, &property_setter_adaptor<0x08f>,
+ &property_setter_adaptor<0x090>, &property_setter_adaptor<0x091>, &property_setter_adaptor<0x092>, &property_setter_adaptor<0x093>, &property_setter_adaptor<0x094>, &property_setter_adaptor<0x095>, &property_setter_adaptor<0x096>, &property_setter_adaptor<0x097>,
+ &property_setter_adaptor<0x098>, &property_setter_adaptor<0x099>, &property_setter_adaptor<0x09a>, &property_setter_adaptor<0x09b>, &property_setter_adaptor<0x09c>, &property_setter_adaptor<0x09d>, &property_setter_adaptor<0x09e>, &property_setter_adaptor<0x09f>,
+ &property_setter_adaptor<0x0a0>, &property_setter_adaptor<0x0a1>, &property_setter_adaptor<0x0a2>, &property_setter_adaptor<0x0a3>, &property_setter_adaptor<0x0a4>, &property_setter_adaptor<0x0a5>, &property_setter_adaptor<0x0a6>, &property_setter_adaptor<0x0a7>,
+ &property_setter_adaptor<0x0a8>, &property_setter_adaptor<0x0a9>, &property_setter_adaptor<0x0aa>, &property_setter_adaptor<0x0ab>, &property_setter_adaptor<0x0ac>, &property_setter_adaptor<0x0ad>, &property_setter_adaptor<0x0ae>, &property_setter_adaptor<0x0af>,
+ &property_setter_adaptor<0x0b0>, &property_setter_adaptor<0x0b1>, &property_setter_adaptor<0x0b2>, &property_setter_adaptor<0x0b3>, &property_setter_adaptor<0x0b4>, &property_setter_adaptor<0x0b5>, &property_setter_adaptor<0x0b6>, &property_setter_adaptor<0x0b7>,
+ &property_setter_adaptor<0x0b8>, &property_setter_adaptor<0x0b9>, &property_setter_adaptor<0x0ba>, &property_setter_adaptor<0x0bb>, &property_setter_adaptor<0x0bc>, &property_setter_adaptor<0x0bd>, &property_setter_adaptor<0x0be>, &property_setter_adaptor<0x0bf>,
+ &property_setter_adaptor<0x0c0>, &property_setter_adaptor<0x0c1>, &property_setter_adaptor<0x0c2>, &property_setter_adaptor<0x0c3>, &property_setter_adaptor<0x0c4>, &property_setter_adaptor<0x0c5>, &property_setter_adaptor<0x0c6>, &property_setter_adaptor<0x0c7>,
+ &property_setter_adaptor<0x0c8>, &property_setter_adaptor<0x0c9>, &property_setter_adaptor<0x0ca>, &property_setter_adaptor<0x0cb>, &property_setter_adaptor<0x0cc>, &property_setter_adaptor<0x0cd>, &property_setter_adaptor<0x0ce>, &property_setter_adaptor<0x0cf>,
+ &property_setter_adaptor<0x0d0>, &property_setter_adaptor<0x0d1>, &property_setter_adaptor<0x0d2>, &property_setter_adaptor<0x0d3>, &property_setter_adaptor<0x0d4>, &property_setter_adaptor<0x0d5>, &property_setter_adaptor<0x0d6>, &property_setter_adaptor<0x0d7>,
+ &property_setter_adaptor<0x0d8>, &property_setter_adaptor<0x0d9>, &property_setter_adaptor<0x0da>, &property_setter_adaptor<0x0db>, &property_setter_adaptor<0x0dc>, &property_setter_adaptor<0x0dd>, &property_setter_adaptor<0x0de>, &property_setter_adaptor<0x0df>,
+ &property_setter_adaptor<0x0e0>, &property_setter_adaptor<0x0e1>, &property_setter_adaptor<0x0e2>, &property_setter_adaptor<0x0e3>, &property_setter_adaptor<0x0e4>, &property_setter_adaptor<0x0e5>, &property_setter_adaptor<0x0e6>, &property_setter_adaptor<0x0e7>,
+ &property_setter_adaptor<0x0e8>, &property_setter_adaptor<0x0e9>, &property_setter_adaptor<0x0ea>, &property_setter_adaptor<0x0eb>, &property_setter_adaptor<0x0ec>, &property_setter_adaptor<0x0ed>, &property_setter_adaptor<0x0ee>, &property_setter_adaptor<0x0ef>,
+ &property_setter_adaptor<0x0f0>, &property_setter_adaptor<0x0f1>, &property_setter_adaptor<0x0f2>, &property_setter_adaptor<0x0f3>, &property_setter_adaptor<0x0f4>, &property_setter_adaptor<0x0f5>, &property_setter_adaptor<0x0f6>, &property_setter_adaptor<0x0f7>,
+ &property_setter_adaptor<0x0f8>, &property_setter_adaptor<0x0f9>, &property_setter_adaptor<0x0fa>, &property_setter_adaptor<0x0fb>, &property_setter_adaptor<0x0fc>, &property_setter_adaptor<0x0fd>, &property_setter_adaptor<0x0fe>, &property_setter_adaptor<0x0ff>,
+ &property_setter_adaptor<0x100>, &property_setter_adaptor<0x101>, &property_setter_adaptor<0x102>, &property_setter_adaptor<0x103>, &property_setter_adaptor<0x104>, &property_setter_adaptor<0x105>, &property_setter_adaptor<0x106>, &property_setter_adaptor<0x107>,
+ &property_setter_adaptor<0x108>, &property_setter_adaptor<0x109>, &property_setter_adaptor<0x10a>, &property_setter_adaptor<0x10b>, &property_setter_adaptor<0x10c>, &property_setter_adaptor<0x10d>, &property_setter_adaptor<0x10e>, &property_setter_adaptor<0x10f>,
+ &property_setter_adaptor<0x110>, &property_setter_adaptor<0x111>, &property_setter_adaptor<0x112>, &property_setter_adaptor<0x113>, &property_setter_adaptor<0x114>, &property_setter_adaptor<0x115>, &property_setter_adaptor<0x116>, &property_setter_adaptor<0x117>,
+ &property_setter_adaptor<0x118>, &property_setter_adaptor<0x119>, &property_setter_adaptor<0x11a>, &property_setter_adaptor<0x11b>, &property_setter_adaptor<0x11c>, &property_setter_adaptor<0x11d>, &property_setter_adaptor<0x11e>, &property_setter_adaptor<0x11f>,
+ &property_setter_adaptor<0x120>, &property_setter_adaptor<0x121>, &property_setter_adaptor<0x122>, &property_setter_adaptor<0x123>, &property_setter_adaptor<0x124>, &property_setter_adaptor<0x125>, &property_setter_adaptor<0x126>, &property_setter_adaptor<0x127>,
+ &property_setter_adaptor<0x128>, &property_setter_adaptor<0x129>, &property_setter_adaptor<0x12a>, &property_setter_adaptor<0x12b>, &property_setter_adaptor<0x12c>, &property_setter_adaptor<0x12d>, &property_setter_adaptor<0x12e>, &property_setter_adaptor<0x12f>,
+ &property_setter_adaptor<0x130>, &property_setter_adaptor<0x131>, &property_setter_adaptor<0x132>, &property_setter_adaptor<0x133>, &property_setter_adaptor<0x134>, &property_setter_adaptor<0x135>, &property_setter_adaptor<0x136>, &property_setter_adaptor<0x137>,
+ &property_setter_adaptor<0x138>, &property_setter_adaptor<0x139>, &property_setter_adaptor<0x13a>, &property_setter_adaptor<0x13b>, &property_setter_adaptor<0x13c>, &property_setter_adaptor<0x13d>, &property_setter_adaptor<0x13e>, &property_setter_adaptor<0x13f>,
+ &property_setter_adaptor<0x140>, &property_setter_adaptor<0x141>, &property_setter_adaptor<0x142>, &property_setter_adaptor<0x143>, &property_setter_adaptor<0x144>, &property_setter_adaptor<0x145>, &property_setter_adaptor<0x146>, &property_setter_adaptor<0x147>,
+ &property_setter_adaptor<0x148>, &property_setter_adaptor<0x149>, &property_setter_adaptor<0x14a>, &property_setter_adaptor<0x14b>, &property_setter_adaptor<0x14c>, &property_setter_adaptor<0x14d>, &property_setter_adaptor<0x14e>, &property_setter_adaptor<0x14f>,
+ &property_setter_adaptor<0x150>, &property_setter_adaptor<0x151>, &property_setter_adaptor<0x152>, &property_setter_adaptor<0x153>, &property_setter_adaptor<0x154>, &property_setter_adaptor<0x155>, &property_setter_adaptor<0x156>, &property_setter_adaptor<0x157>,
+ &property_setter_adaptor<0x158>, &property_setter_adaptor<0x159>, &property_setter_adaptor<0x15a>, &property_setter_adaptor<0x15b>, &property_setter_adaptor<0x15c>, &property_setter_adaptor<0x15d>, &property_setter_adaptor<0x15e>, &property_setter_adaptor<0x15f>,
+ &property_setter_adaptor<0x160>, &property_setter_adaptor<0x161>, &property_setter_adaptor<0x162>, &property_setter_adaptor<0x163>, &property_setter_adaptor<0x164>, &property_setter_adaptor<0x165>, &property_setter_adaptor<0x166>, &property_setter_adaptor<0x167>,
+ &property_setter_adaptor<0x168>, &property_setter_adaptor<0x169>, &property_setter_adaptor<0x16a>, &property_setter_adaptor<0x16b>, &property_setter_adaptor<0x16c>, &property_setter_adaptor<0x16d>, &property_setter_adaptor<0x16e>, &property_setter_adaptor<0x16f>,
+ &property_setter_adaptor<0x170>, &property_setter_adaptor<0x171>, &property_setter_adaptor<0x172>, &property_setter_adaptor<0x173>, &property_setter_adaptor<0x174>, &property_setter_adaptor<0x175>, &property_setter_adaptor<0x176>, &property_setter_adaptor<0x177>,
+ &property_setter_adaptor<0x178>, &property_setter_adaptor<0x179>, &property_setter_adaptor<0x17a>, &property_setter_adaptor<0x17b>, &property_setter_adaptor<0x17c>, &property_setter_adaptor<0x17d>, &property_setter_adaptor<0x17e>, &property_setter_adaptor<0x17f>,
+ &property_setter_adaptor<0x180>, &property_setter_adaptor<0x181>, &property_setter_adaptor<0x182>, &property_setter_adaptor<0x183>, &property_setter_adaptor<0x184>, &property_setter_adaptor<0x185>, &property_setter_adaptor<0x186>, &property_setter_adaptor<0x187>,
+ &property_setter_adaptor<0x188>, &property_setter_adaptor<0x189>, &property_setter_adaptor<0x18a>, &property_setter_adaptor<0x18b>, &property_setter_adaptor<0x18c>, &property_setter_adaptor<0x18d>, &property_setter_adaptor<0x18e>, &property_setter_adaptor<0x18f>,
+ &property_setter_adaptor<0x190>, &property_setter_adaptor<0x191>, &property_setter_adaptor<0x192>, &property_setter_adaptor<0x193>, &property_setter_adaptor<0x194>, &property_setter_adaptor<0x195>, &property_setter_adaptor<0x196>, &property_setter_adaptor<0x197>,
+ &property_setter_adaptor<0x198>, &property_setter_adaptor<0x199>, &property_setter_adaptor<0x19a>, &property_setter_adaptor<0x19b>, &property_setter_adaptor<0x19c>, &property_setter_adaptor<0x19d>, &property_setter_adaptor<0x19e>, &property_setter_adaptor<0x19f>,
+ &property_setter_adaptor<0x1a0>, &property_setter_adaptor<0x1a1>, &property_setter_adaptor<0x1a2>, &property_setter_adaptor<0x1a3>, &property_setter_adaptor<0x1a4>, &property_setter_adaptor<0x1a5>, &property_setter_adaptor<0x1a6>, &property_setter_adaptor<0x1a7>,
+ &property_setter_adaptor<0x1a8>, &property_setter_adaptor<0x1a9>, &property_setter_adaptor<0x1aa>, &property_setter_adaptor<0x1ab>, &property_setter_adaptor<0x1ac>, &property_setter_adaptor<0x1ad>, &property_setter_adaptor<0x1ae>, &property_setter_adaptor<0x1af>,
+ &property_setter_adaptor<0x1b0>, &property_setter_adaptor<0x1b1>, &property_setter_adaptor<0x1b2>, &property_setter_adaptor<0x1b3>, &property_setter_adaptor<0x1b4>, &property_setter_adaptor<0x1b5>, &property_setter_adaptor<0x1b6>, &property_setter_adaptor<0x1b7>,
+ &property_setter_adaptor<0x1b8>, &property_setter_adaptor<0x1b9>, &property_setter_adaptor<0x1ba>, &property_setter_adaptor<0x1bb>, &property_setter_adaptor<0x1bc>, &property_setter_adaptor<0x1bd>, &property_setter_adaptor<0x1be>, &property_setter_adaptor<0x1bf>,
+ &property_setter_adaptor<0x1c0>, &property_setter_adaptor<0x1c1>, &property_setter_adaptor<0x1c2>, &property_setter_adaptor<0x1c3>, &property_setter_adaptor<0x1c4>, &property_setter_adaptor<0x1c5>, &property_setter_adaptor<0x1c6>, &property_setter_adaptor<0x1c7>,
+ &property_setter_adaptor<0x1c8>, &property_setter_adaptor<0x1c9>, &property_setter_adaptor<0x1ca>, &property_setter_adaptor<0x1cb>, &property_setter_adaptor<0x1cc>, &property_setter_adaptor<0x1cd>, &property_setter_adaptor<0x1ce>, &property_setter_adaptor<0x1cf>,
+ &property_setter_adaptor<0x1d0>, &property_setter_adaptor<0x1d1>, &property_setter_adaptor<0x1d2>, &property_setter_adaptor<0x1d3>, &property_setter_adaptor<0x1d4>, &property_setter_adaptor<0x1d5>, &property_setter_adaptor<0x1d6>, &property_setter_adaptor<0x1d7>,
+ &property_setter_adaptor<0x1d8>, &property_setter_adaptor<0x1d9>, &property_setter_adaptor<0x1da>, &property_setter_adaptor<0x1db>, &property_setter_adaptor<0x1dc>, &property_setter_adaptor<0x1dd>, &property_setter_adaptor<0x1de>, &property_setter_adaptor<0x1df>,
+ &property_setter_adaptor<0x1e0>, &property_setter_adaptor<0x1e1>, &property_setter_adaptor<0x1e2>, &property_setter_adaptor<0x1e3>, &property_setter_adaptor<0x1e4>, &property_setter_adaptor<0x1e5>, &property_setter_adaptor<0x1e6>, &property_setter_adaptor<0x1e7>,
+ &property_setter_adaptor<0x1e8>, &property_setter_adaptor<0x1e9>, &property_setter_adaptor<0x1ea>, &property_setter_adaptor<0x1eb>, &property_setter_adaptor<0x1ec>, &property_setter_adaptor<0x1ed>, &property_setter_adaptor<0x1ee>, &property_setter_adaptor<0x1ef>,
+ &property_setter_adaptor<0x1f0>, &property_setter_adaptor<0x1f1>, &property_setter_adaptor<0x1f2>, &property_setter_adaptor<0x1f3>, &property_setter_adaptor<0x1f4>, &property_setter_adaptor<0x1f5>, &property_setter_adaptor<0x1f6>, &property_setter_adaptor<0x1f7>,
+ &property_setter_adaptor<0x1f8>, &property_setter_adaptor<0x1f9>, &property_setter_adaptor<0x1fa>, &property_setter_adaptor<0x1fb>, &property_setter_adaptor<0x1fc>, &property_setter_adaptor<0x1fd>, &property_setter_adaptor<0x1fe>, &property_setter_adaptor<0x1ff>,
+ &property_setter_adaptor<0x200>, &property_setter_adaptor<0x201>, &property_setter_adaptor<0x202>, &property_setter_adaptor<0x203>, &property_setter_adaptor<0x204>, &property_setter_adaptor<0x205>, &property_setter_adaptor<0x206>, &property_setter_adaptor<0x207>,
+ &property_setter_adaptor<0x208>, &property_setter_adaptor<0x209>, &property_setter_adaptor<0x20a>, &property_setter_adaptor<0x20b>, &property_setter_adaptor<0x20c>, &property_setter_adaptor<0x20d>, &property_setter_adaptor<0x20e>, &property_setter_adaptor<0x20f>,
+ &property_setter_adaptor<0x210>, &property_setter_adaptor<0x211>, &property_setter_adaptor<0x212>, &property_setter_adaptor<0x213>, &property_setter_adaptor<0x214>, &property_setter_adaptor<0x215>, &property_setter_adaptor<0x216>, &property_setter_adaptor<0x217>,
+ &property_setter_adaptor<0x218>, &property_setter_adaptor<0x219>, &property_setter_adaptor<0x21a>, &property_setter_adaptor<0x21b>, &property_setter_adaptor<0x21c>, &property_setter_adaptor<0x21d>, &property_setter_adaptor<0x21e>, &property_setter_adaptor<0x21f>,
+ &property_setter_adaptor<0x220>, &property_setter_adaptor<0x221>, &property_setter_adaptor<0x222>, &property_setter_adaptor<0x223>, &property_setter_adaptor<0x224>, &property_setter_adaptor<0x225>, &property_setter_adaptor<0x226>, &property_setter_adaptor<0x227>,
+ &property_setter_adaptor<0x228>, &property_setter_adaptor<0x229>, &property_setter_adaptor<0x22a>, &property_setter_adaptor<0x22b>, &property_setter_adaptor<0x22c>, &property_setter_adaptor<0x22d>, &property_setter_adaptor<0x22e>, &property_setter_adaptor<0x22f>,
+ &property_setter_adaptor<0x230>, &property_setter_adaptor<0x231>, &property_setter_adaptor<0x232>, &property_setter_adaptor<0x233>, &property_setter_adaptor<0x234>, &property_setter_adaptor<0x235>, &property_setter_adaptor<0x236>, &property_setter_adaptor<0x237>,
+ &property_setter_adaptor<0x238>, &property_setter_adaptor<0x239>, &property_setter_adaptor<0x23a>, &property_setter_adaptor<0x23b>, &property_setter_adaptor<0x23c>, &property_setter_adaptor<0x23d>, &property_setter_adaptor<0x23e>, &property_setter_adaptor<0x23f>,
+ &property_setter_adaptor<0x240>, &property_setter_adaptor<0x241>, &property_setter_adaptor<0x242>, &property_setter_adaptor<0x243>, &property_setter_adaptor<0x244>, &property_setter_adaptor<0x245>, &property_setter_adaptor<0x246>, &property_setter_adaptor<0x247>,
+ &property_setter_adaptor<0x248>, &property_setter_adaptor<0x249>, &property_setter_adaptor<0x24a>, &property_setter_adaptor<0x24b>, &property_setter_adaptor<0x24c>, &property_setter_adaptor<0x24d>, &property_setter_adaptor<0x24e>, &property_setter_adaptor<0x24f>,
+ &property_setter_adaptor<0x250>, &property_setter_adaptor<0x251>, &property_setter_adaptor<0x252>, &property_setter_adaptor<0x253>, &property_setter_adaptor<0x254>, &property_setter_adaptor<0x255>, &property_setter_adaptor<0x256>, &property_setter_adaptor<0x257>,
+ &property_setter_adaptor<0x258>, &property_setter_adaptor<0x259>, &property_setter_adaptor<0x25a>, &property_setter_adaptor<0x25b>, &property_setter_adaptor<0x25c>, &property_setter_adaptor<0x25d>, &property_setter_adaptor<0x25e>, &property_setter_adaptor<0x25f>,
+ &property_setter_adaptor<0x260>, &property_setter_adaptor<0x261>, &property_setter_adaptor<0x262>, &property_setter_adaptor<0x263>, &property_setter_adaptor<0x264>, &property_setter_adaptor<0x265>, &property_setter_adaptor<0x266>, &property_setter_adaptor<0x267>,
+ &property_setter_adaptor<0x268>, &property_setter_adaptor<0x269>, &property_setter_adaptor<0x26a>, &property_setter_adaptor<0x26b>, &property_setter_adaptor<0x26c>, &property_setter_adaptor<0x26d>, &property_setter_adaptor<0x26e>, &property_setter_adaptor<0x26f>,
+ &property_setter_adaptor<0x270>, &property_setter_adaptor<0x271>, &property_setter_adaptor<0x272>, &property_setter_adaptor<0x273>, &property_setter_adaptor<0x274>, &property_setter_adaptor<0x275>, &property_setter_adaptor<0x276>, &property_setter_adaptor<0x277>,
+ &property_setter_adaptor<0x278>, &property_setter_adaptor<0x279>, &property_setter_adaptor<0x27a>, &property_setter_adaptor<0x27b>, &property_setter_adaptor<0x27c>, &property_setter_adaptor<0x27d>, &property_setter_adaptor<0x27e>, &property_setter_adaptor<0x27f>,
+ &property_setter_adaptor<0x280>, &property_setter_adaptor<0x281>, &property_setter_adaptor<0x282>, &property_setter_adaptor<0x283>, &property_setter_adaptor<0x284>, &property_setter_adaptor<0x285>, &property_setter_adaptor<0x286>, &property_setter_adaptor<0x287>,
+ &property_setter_adaptor<0x288>, &property_setter_adaptor<0x289>, &property_setter_adaptor<0x28a>, &property_setter_adaptor<0x28b>, &property_setter_adaptor<0x28c>, &property_setter_adaptor<0x28d>, &property_setter_adaptor<0x28e>, &property_setter_adaptor<0x28f>,
+ &property_setter_adaptor<0x290>, &property_setter_adaptor<0x291>, &property_setter_adaptor<0x292>, &property_setter_adaptor<0x293>, &property_setter_adaptor<0x294>, &property_setter_adaptor<0x295>, &property_setter_adaptor<0x296>, &property_setter_adaptor<0x297>,
+ &property_setter_adaptor<0x298>, &property_setter_adaptor<0x299>, &property_setter_adaptor<0x29a>, &property_setter_adaptor<0x29b>, &property_setter_adaptor<0x29c>, &property_setter_adaptor<0x29d>, &property_setter_adaptor<0x29e>, &property_setter_adaptor<0x29f>,
+ &property_setter_adaptor<0x2a0>, &property_setter_adaptor<0x2a1>, &property_setter_adaptor<0x2a2>, &property_setter_adaptor<0x2a3>, &property_setter_adaptor<0x2a4>, &property_setter_adaptor<0x2a5>, &property_setter_adaptor<0x2a6>, &property_setter_adaptor<0x2a7>,
+ &property_setter_adaptor<0x2a8>, &property_setter_adaptor<0x2a9>, &property_setter_adaptor<0x2aa>, &property_setter_adaptor<0x2ab>, &property_setter_adaptor<0x2ac>, &property_setter_adaptor<0x2ad>, &property_setter_adaptor<0x2ae>, &property_setter_adaptor<0x2af>,
+ &property_setter_adaptor<0x2b0>, &property_setter_adaptor<0x2b1>, &property_setter_adaptor<0x2b2>, &property_setter_adaptor<0x2b3>, &property_setter_adaptor<0x2b4>, &property_setter_adaptor<0x2b5>, &property_setter_adaptor<0x2b6>, &property_setter_adaptor<0x2b7>,
+ &property_setter_adaptor<0x2b8>, &property_setter_adaptor<0x2b9>, &property_setter_adaptor<0x2ba>, &property_setter_adaptor<0x2bb>, &property_setter_adaptor<0x2bc>, &property_setter_adaptor<0x2bd>, &property_setter_adaptor<0x2be>, &property_setter_adaptor<0x2bf>,
+ &property_setter_adaptor<0x2c0>, &property_setter_adaptor<0x2c1>, &property_setter_adaptor<0x2c2>, &property_setter_adaptor<0x2c3>, &property_setter_adaptor<0x2c4>, &property_setter_adaptor<0x2c5>, &property_setter_adaptor<0x2c6>, &property_setter_adaptor<0x2c7>,
+ &property_setter_adaptor<0x2c8>, &property_setter_adaptor<0x2c9>, &property_setter_adaptor<0x2ca>, &property_setter_adaptor<0x2cb>, &property_setter_adaptor<0x2cc>, &property_setter_adaptor<0x2cd>, &property_setter_adaptor<0x2ce>, &property_setter_adaptor<0x2cf>,
+ &property_setter_adaptor<0x2d0>, &property_setter_adaptor<0x2d1>, &property_setter_adaptor<0x2d2>, &property_setter_adaptor<0x2d3>, &property_setter_adaptor<0x2d4>, &property_setter_adaptor<0x2d5>, &property_setter_adaptor<0x2d6>, &property_setter_adaptor<0x2d7>,
+ &property_setter_adaptor<0x2d8>, &property_setter_adaptor<0x2d9>, &property_setter_adaptor<0x2da>, &property_setter_adaptor<0x2db>, &property_setter_adaptor<0x2dc>, &property_setter_adaptor<0x2dd>, &property_setter_adaptor<0x2de>, &property_setter_adaptor<0x2df>,
+ &property_setter_adaptor<0x2e0>, &property_setter_adaptor<0x2e1>, &property_setter_adaptor<0x2e2>, &property_setter_adaptor<0x2e3>, &property_setter_adaptor<0x2e4>, &property_setter_adaptor<0x2e5>, &property_setter_adaptor<0x2e6>, &property_setter_adaptor<0x2e7>,
+ &property_setter_adaptor<0x2e8>, &property_setter_adaptor<0x2e9>, &property_setter_adaptor<0x2ea>, &property_setter_adaptor<0x2eb>, &property_setter_adaptor<0x2ec>, &property_setter_adaptor<0x2ed>, &property_setter_adaptor<0x2ee>, &property_setter_adaptor<0x2ef>,
+ &property_setter_adaptor<0x2f0>, &property_setter_adaptor<0x2f1>, &property_setter_adaptor<0x2f2>, &property_setter_adaptor<0x2f3>, &property_setter_adaptor<0x2f4>, &property_setter_adaptor<0x2f5>, &property_setter_adaptor<0x2f6>, &property_setter_adaptor<0x2f7>,
+ &property_setter_adaptor<0x2f8>, &property_setter_adaptor<0x2f9>, &property_setter_adaptor<0x2fa>, &property_setter_adaptor<0x2fb>, &property_setter_adaptor<0x2fc>, &property_setter_adaptor<0x2fd>, &property_setter_adaptor<0x2fe>, &property_setter_adaptor<0x2ff>,
+ &property_setter_adaptor<0x300>, &property_setter_adaptor<0x301>, &property_setter_adaptor<0x302>, &property_setter_adaptor<0x303>, &property_setter_adaptor<0x304>, &property_setter_adaptor<0x305>, &property_setter_adaptor<0x306>, &property_setter_adaptor<0x307>,
+ &property_setter_adaptor<0x308>, &property_setter_adaptor<0x309>, &property_setter_adaptor<0x30a>, &property_setter_adaptor<0x30b>, &property_setter_adaptor<0x30c>, &property_setter_adaptor<0x30d>, &property_setter_adaptor<0x30e>, &property_setter_adaptor<0x30f>,
+ &property_setter_adaptor<0x310>, &property_setter_adaptor<0x311>, &property_setter_adaptor<0x312>, &property_setter_adaptor<0x313>, &property_setter_adaptor<0x314>, &property_setter_adaptor<0x315>, &property_setter_adaptor<0x316>, &property_setter_adaptor<0x317>,
+ &property_setter_adaptor<0x318>, &property_setter_adaptor<0x319>, &property_setter_adaptor<0x31a>, &property_setter_adaptor<0x31b>, &property_setter_adaptor<0x31c>, &property_setter_adaptor<0x31d>, &property_setter_adaptor<0x31e>, &property_setter_adaptor<0x31f>,
+ &property_setter_adaptor<0x320>, &property_setter_adaptor<0x321>, &property_setter_adaptor<0x322>, &property_setter_adaptor<0x323>, &property_setter_adaptor<0x324>, &property_setter_adaptor<0x325>, &property_setter_adaptor<0x326>, &property_setter_adaptor<0x327>,
+ &property_setter_adaptor<0x328>, &property_setter_adaptor<0x329>, &property_setter_adaptor<0x32a>, &property_setter_adaptor<0x32b>, &property_setter_adaptor<0x32c>, &property_setter_adaptor<0x32d>, &property_setter_adaptor<0x32e>, &property_setter_adaptor<0x32f>,
+ &property_setter_adaptor<0x330>, &property_setter_adaptor<0x331>, &property_setter_adaptor<0x332>, &property_setter_adaptor<0x333>, &property_setter_adaptor<0x334>, &property_setter_adaptor<0x335>, &property_setter_adaptor<0x336>, &property_setter_adaptor<0x337>,
+ &property_setter_adaptor<0x338>, &property_setter_adaptor<0x339>, &property_setter_adaptor<0x33a>, &property_setter_adaptor<0x33b>, &property_setter_adaptor<0x33c>, &property_setter_adaptor<0x33d>, &property_setter_adaptor<0x33e>, &property_setter_adaptor<0x33f>,
+ &property_setter_adaptor<0x340>, &property_setter_adaptor<0x341>, &property_setter_adaptor<0x342>, &property_setter_adaptor<0x343>, &property_setter_adaptor<0x344>, &property_setter_adaptor<0x345>, &property_setter_adaptor<0x346>, &property_setter_adaptor<0x347>,
+ &property_setter_adaptor<0x348>, &property_setter_adaptor<0x349>, &property_setter_adaptor<0x34a>, &property_setter_adaptor<0x34b>, &property_setter_adaptor<0x34c>, &property_setter_adaptor<0x34d>, &property_setter_adaptor<0x34e>, &property_setter_adaptor<0x34f>,
+ &property_setter_adaptor<0x350>, &property_setter_adaptor<0x351>, &property_setter_adaptor<0x352>, &property_setter_adaptor<0x353>, &property_setter_adaptor<0x354>, &property_setter_adaptor<0x355>, &property_setter_adaptor<0x356>, &property_setter_adaptor<0x357>,
+ &property_setter_adaptor<0x358>, &property_setter_adaptor<0x359>, &property_setter_adaptor<0x35a>, &property_setter_adaptor<0x35b>, &property_setter_adaptor<0x35c>, &property_setter_adaptor<0x35d>, &property_setter_adaptor<0x35e>, &property_setter_adaptor<0x35f>,
+ &property_setter_adaptor<0x360>, &property_setter_adaptor<0x361>, &property_setter_adaptor<0x362>, &property_setter_adaptor<0x363>, &property_setter_adaptor<0x364>, &property_setter_adaptor<0x365>, &property_setter_adaptor<0x366>, &property_setter_adaptor<0x367>,
+ &property_setter_adaptor<0x368>, &property_setter_adaptor<0x369>, &property_setter_adaptor<0x36a>, &property_setter_adaptor<0x36b>, &property_setter_adaptor<0x36c>, &property_setter_adaptor<0x36d>, &property_setter_adaptor<0x36e>, &property_setter_adaptor<0x36f>,
+ &property_setter_adaptor<0x370>, &property_setter_adaptor<0x371>, &property_setter_adaptor<0x372>, &property_setter_adaptor<0x373>, &property_setter_adaptor<0x374>, &property_setter_adaptor<0x375>, &property_setter_adaptor<0x376>, &property_setter_adaptor<0x377>,
+ &property_setter_adaptor<0x378>, &property_setter_adaptor<0x379>, &property_setter_adaptor<0x37a>, &property_setter_adaptor<0x37b>, &property_setter_adaptor<0x37c>, &property_setter_adaptor<0x37d>, &property_setter_adaptor<0x37e>, &property_setter_adaptor<0x37f>,
+ &property_setter_adaptor<0x380>, &property_setter_adaptor<0x381>, &property_setter_adaptor<0x382>, &property_setter_adaptor<0x383>, &property_setter_adaptor<0x384>, &property_setter_adaptor<0x385>, &property_setter_adaptor<0x386>, &property_setter_adaptor<0x387>,
+ &property_setter_adaptor<0x388>, &property_setter_adaptor<0x389>, &property_setter_adaptor<0x38a>, &property_setter_adaptor<0x38b>, &property_setter_adaptor<0x38c>, &property_setter_adaptor<0x38d>, &property_setter_adaptor<0x38e>, &property_setter_adaptor<0x38f>,
+ &property_setter_adaptor<0x390>, &property_setter_adaptor<0x391>, &property_setter_adaptor<0x392>, &property_setter_adaptor<0x393>, &property_setter_adaptor<0x394>, &property_setter_adaptor<0x395>, &property_setter_adaptor<0x396>, &property_setter_adaptor<0x397>,
+ &property_setter_adaptor<0x398>, &property_setter_adaptor<0x399>, &property_setter_adaptor<0x39a>, &property_setter_adaptor<0x39b>, &property_setter_adaptor<0x39c>, &property_setter_adaptor<0x39d>, &property_setter_adaptor<0x39e>, &property_setter_adaptor<0x39f>,
+ &property_setter_adaptor<0x3a0>, &property_setter_adaptor<0x3a1>, &property_setter_adaptor<0x3a2>, &property_setter_adaptor<0x3a3>, &property_setter_adaptor<0x3a4>, &property_setter_adaptor<0x3a5>, &property_setter_adaptor<0x3a6>, &property_setter_adaptor<0x3a7>,
+ &property_setter_adaptor<0x3a8>, &property_setter_adaptor<0x3a9>, &property_setter_adaptor<0x3aa>, &property_setter_adaptor<0x3ab>, &property_setter_adaptor<0x3ac>, &property_setter_adaptor<0x3ad>, &property_setter_adaptor<0x3ae>, &property_setter_adaptor<0x3af>,
+ &property_setter_adaptor<0x3b0>, &property_setter_adaptor<0x3b1>, &property_setter_adaptor<0x3b2>, &property_setter_adaptor<0x3b3>, &property_setter_adaptor<0x3b4>, &property_setter_adaptor<0x3b5>, &property_setter_adaptor<0x3b6>, &property_setter_adaptor<0x3b7>,
+ &property_setter_adaptor<0x3b8>, &property_setter_adaptor<0x3b9>, &property_setter_adaptor<0x3ba>, &property_setter_adaptor<0x3bb>, &property_setter_adaptor<0x3bc>, &property_setter_adaptor<0x3bd>, &property_setter_adaptor<0x3be>, &property_setter_adaptor<0x3bf>,
+ &property_setter_adaptor<0x3c0>, &property_setter_adaptor<0x3c1>, &property_setter_adaptor<0x3c2>, &property_setter_adaptor<0x3c3>, &property_setter_adaptor<0x3c4>, &property_setter_adaptor<0x3c5>, &property_setter_adaptor<0x3c6>, &property_setter_adaptor<0x3c7>,
+ &property_setter_adaptor<0x3c8>, &property_setter_adaptor<0x3c9>, &property_setter_adaptor<0x3ca>, &property_setter_adaptor<0x3cb>, &property_setter_adaptor<0x3cc>, &property_setter_adaptor<0x3cd>, &property_setter_adaptor<0x3ce>, &property_setter_adaptor<0x3cf>,
+ &property_setter_adaptor<0x3d0>, &property_setter_adaptor<0x3d1>, &property_setter_adaptor<0x3d2>, &property_setter_adaptor<0x3d3>, &property_setter_adaptor<0x3d4>, &property_setter_adaptor<0x3d5>, &property_setter_adaptor<0x3d6>, &property_setter_adaptor<0x3d7>,
+ &property_setter_adaptor<0x3d8>, &property_setter_adaptor<0x3d9>, &property_setter_adaptor<0x3da>, &property_setter_adaptor<0x3db>, &property_setter_adaptor<0x3dc>, &property_setter_adaptor<0x3dd>, &property_setter_adaptor<0x3de>, &property_setter_adaptor<0x3df>,
+ &property_setter_adaptor<0x3e0>, &property_setter_adaptor<0x3e1>, &property_setter_adaptor<0x3e2>, &property_setter_adaptor<0x3e3>, &property_setter_adaptor<0x3e4>, &property_setter_adaptor<0x3e5>, &property_setter_adaptor<0x3e6>, &property_setter_adaptor<0x3e7>,
+ &property_setter_adaptor<0x3e8>, &property_setter_adaptor<0x3e9>, &property_setter_adaptor<0x3ea>, &property_setter_adaptor<0x3eb>, &property_setter_adaptor<0x3ec>, &property_setter_adaptor<0x3ed>, &property_setter_adaptor<0x3ee>, &property_setter_adaptor<0x3ef>,
+ &property_setter_adaptor<0x3f0>, &property_setter_adaptor<0x3f1>, &property_setter_adaptor<0x3f2>, &property_setter_adaptor<0x3f3>, &property_setter_adaptor<0x3f4>, &property_setter_adaptor<0x3f5>, &property_setter_adaptor<0x3f6>, &property_setter_adaptor<0x3f7>,
+ &property_setter_adaptor<0x3f8>, &property_setter_adaptor<0x3f9>, &property_setter_adaptor<0x3fa>, &property_setter_adaptor<0x3fb>, &property_setter_adaptor<0x3fc>, &property_setter_adaptor<0x3fd>, &property_setter_adaptor<0x3fe>, &property_setter_adaptor<0x3ff>,
+ &property_setter_adaptor<0x400>, &property_setter_adaptor<0x401>, &property_setter_adaptor<0x402>, &property_setter_adaptor<0x403>, &property_setter_adaptor<0x404>, &property_setter_adaptor<0x405>, &property_setter_adaptor<0x406>, &property_setter_adaptor<0x407>,
+ &property_setter_adaptor<0x408>, &property_setter_adaptor<0x409>, &property_setter_adaptor<0x40a>, &property_setter_adaptor<0x40b>, &property_setter_adaptor<0x40c>, &property_setter_adaptor<0x40d>, &property_setter_adaptor<0x40e>, &property_setter_adaptor<0x40f>,
+ &property_setter_adaptor<0x410>, &property_setter_adaptor<0x411>, &property_setter_adaptor<0x412>, &property_setter_adaptor<0x413>, &property_setter_adaptor<0x414>, &property_setter_adaptor<0x415>, &property_setter_adaptor<0x416>, &property_setter_adaptor<0x417>,
+ &property_setter_adaptor<0x418>, &property_setter_adaptor<0x419>, &property_setter_adaptor<0x41a>, &property_setter_adaptor<0x41b>, &property_setter_adaptor<0x41c>, &property_setter_adaptor<0x41d>, &property_setter_adaptor<0x41e>, &property_setter_adaptor<0x41f>,
+ &property_setter_adaptor<0x420>, &property_setter_adaptor<0x421>, &property_setter_adaptor<0x422>, &property_setter_adaptor<0x423>, &property_setter_adaptor<0x424>, &property_setter_adaptor<0x425>, &property_setter_adaptor<0x426>, &property_setter_adaptor<0x427>,
+ &property_setter_adaptor<0x428>, &property_setter_adaptor<0x429>, &property_setter_adaptor<0x42a>, &property_setter_adaptor<0x42b>, &property_setter_adaptor<0x42c>, &property_setter_adaptor<0x42d>, &property_setter_adaptor<0x42e>, &property_setter_adaptor<0x42f>,
+ &property_setter_adaptor<0x430>, &property_setter_adaptor<0x431>, &property_setter_adaptor<0x432>, &property_setter_adaptor<0x433>, &property_setter_adaptor<0x434>, &property_setter_adaptor<0x435>, &property_setter_adaptor<0x436>, &property_setter_adaptor<0x437>,
+ &property_setter_adaptor<0x438>, &property_setter_adaptor<0x439>, &property_setter_adaptor<0x43a>, &property_setter_adaptor<0x43b>, &property_setter_adaptor<0x43c>, &property_setter_adaptor<0x43d>, &property_setter_adaptor<0x43e>, &property_setter_adaptor<0x43f>,
+ &property_setter_adaptor<0x440>, &property_setter_adaptor<0x441>, &property_setter_adaptor<0x442>, &property_setter_adaptor<0x443>, &property_setter_adaptor<0x444>, &property_setter_adaptor<0x445>, &property_setter_adaptor<0x446>, &property_setter_adaptor<0x447>,
+ &property_setter_adaptor<0x448>, &property_setter_adaptor<0x449>, &property_setter_adaptor<0x44a>, &property_setter_adaptor<0x44b>, &property_setter_adaptor<0x44c>, &property_setter_adaptor<0x44d>, &property_setter_adaptor<0x44e>, &property_setter_adaptor<0x44f>,
+ &property_setter_adaptor<0x450>, &property_setter_adaptor<0x451>, &property_setter_adaptor<0x452>, &property_setter_adaptor<0x453>, &property_setter_adaptor<0x454>, &property_setter_adaptor<0x455>, &property_setter_adaptor<0x456>, &property_setter_adaptor<0x457>,
+ &property_setter_adaptor<0x458>, &property_setter_adaptor<0x459>, &property_setter_adaptor<0x45a>, &property_setter_adaptor<0x45b>, &property_setter_adaptor<0x45c>, &property_setter_adaptor<0x45d>, &property_setter_adaptor<0x45e>, &property_setter_adaptor<0x45f>,
+ &property_setter_adaptor<0x460>, &property_setter_adaptor<0x461>, &property_setter_adaptor<0x462>, &property_setter_adaptor<0x463>, &property_setter_adaptor<0x464>, &property_setter_adaptor<0x465>, &property_setter_adaptor<0x466>, &property_setter_adaptor<0x467>,
+ &property_setter_adaptor<0x468>, &property_setter_adaptor<0x469>, &property_setter_adaptor<0x46a>, &property_setter_adaptor<0x46b>, &property_setter_adaptor<0x46c>, &property_setter_adaptor<0x46d>, &property_setter_adaptor<0x46e>, &property_setter_adaptor<0x46f>,
+ &property_setter_adaptor<0x470>, &property_setter_adaptor<0x471>, &property_setter_adaptor<0x472>, &property_setter_adaptor<0x473>, &property_setter_adaptor<0x474>, &property_setter_adaptor<0x475>, &property_setter_adaptor<0x476>, &property_setter_adaptor<0x477>,
+ &property_setter_adaptor<0x478>, &property_setter_adaptor<0x479>, &property_setter_adaptor<0x47a>, &property_setter_adaptor<0x47b>, &property_setter_adaptor<0x47c>, &property_setter_adaptor<0x47d>, &property_setter_adaptor<0x47e>, &property_setter_adaptor<0x47f>,
+ &property_setter_adaptor<0x480>, &property_setter_adaptor<0x481>, &property_setter_adaptor<0x482>, &property_setter_adaptor<0x483>, &property_setter_adaptor<0x484>, &property_setter_adaptor<0x485>, &property_setter_adaptor<0x486>, &property_setter_adaptor<0x487>,
+ &property_setter_adaptor<0x488>, &property_setter_adaptor<0x489>, &property_setter_adaptor<0x48a>, &property_setter_adaptor<0x48b>, &property_setter_adaptor<0x48c>, &property_setter_adaptor<0x48d>, &property_setter_adaptor<0x48e>, &property_setter_adaptor<0x48f>,
+ &property_setter_adaptor<0x490>, &property_setter_adaptor<0x491>, &property_setter_adaptor<0x492>, &property_setter_adaptor<0x493>, &property_setter_adaptor<0x494>, &property_setter_adaptor<0x495>, &property_setter_adaptor<0x496>, &property_setter_adaptor<0x497>,
+ &property_setter_adaptor<0x498>, &property_setter_adaptor<0x499>, &property_setter_adaptor<0x49a>, &property_setter_adaptor<0x49b>, &property_setter_adaptor<0x49c>, &property_setter_adaptor<0x49d>, &property_setter_adaptor<0x49e>, &property_setter_adaptor<0x49f>,
+ &property_setter_adaptor<0x4a0>, &property_setter_adaptor<0x4a1>, &property_setter_adaptor<0x4a2>, &property_setter_adaptor<0x4a3>, &property_setter_adaptor<0x4a4>, &property_setter_adaptor<0x4a5>, &property_setter_adaptor<0x4a6>, &property_setter_adaptor<0x4a7>,
+ &property_setter_adaptor<0x4a8>, &property_setter_adaptor<0x4a9>, &property_setter_adaptor<0x4aa>, &property_setter_adaptor<0x4ab>, &property_setter_adaptor<0x4ac>, &property_setter_adaptor<0x4ad>, &property_setter_adaptor<0x4ae>, &property_setter_adaptor<0x4af>,
+ &property_setter_adaptor<0x4b0>, &property_setter_adaptor<0x4b1>, &property_setter_adaptor<0x4b2>, &property_setter_adaptor<0x4b3>, &property_setter_adaptor<0x4b4>, &property_setter_adaptor<0x4b5>, &property_setter_adaptor<0x4b6>, &property_setter_adaptor<0x4b7>,
+ &property_setter_adaptor<0x4b8>, &property_setter_adaptor<0x4b9>, &property_setter_adaptor<0x4ba>, &property_setter_adaptor<0x4bb>, &property_setter_adaptor<0x4bc>, &property_setter_adaptor<0x4bd>, &property_setter_adaptor<0x4be>, &property_setter_adaptor<0x4bf>,
+ &property_setter_adaptor<0x4c0>, &property_setter_adaptor<0x4c1>, &property_setter_adaptor<0x4c2>, &property_setter_adaptor<0x4c3>, &property_setter_adaptor<0x4c4>, &property_setter_adaptor<0x4c5>, &property_setter_adaptor<0x4c6>, &property_setter_adaptor<0x4c7>,
+ &property_setter_adaptor<0x4c8>, &property_setter_adaptor<0x4c9>, &property_setter_adaptor<0x4ca>, &property_setter_adaptor<0x4cb>, &property_setter_adaptor<0x4cc>, &property_setter_adaptor<0x4cd>, &property_setter_adaptor<0x4ce>, &property_setter_adaptor<0x4cf>,
+ &property_setter_adaptor<0x4d0>, &property_setter_adaptor<0x4d1>, &property_setter_adaptor<0x4d2>, &property_setter_adaptor<0x4d3>, &property_setter_adaptor<0x4d4>, &property_setter_adaptor<0x4d5>, &property_setter_adaptor<0x4d6>, &property_setter_adaptor<0x4d7>,
+ &property_setter_adaptor<0x4d8>, &property_setter_adaptor<0x4d9>, &property_setter_adaptor<0x4da>, &property_setter_adaptor<0x4db>, &property_setter_adaptor<0x4dc>, &property_setter_adaptor<0x4dd>, &property_setter_adaptor<0x4de>, &property_setter_adaptor<0x4df>,
+ &property_setter_adaptor<0x4e0>, &property_setter_adaptor<0x4e1>, &property_setter_adaptor<0x4e2>, &property_setter_adaptor<0x4e3>, &property_setter_adaptor<0x4e4>, &property_setter_adaptor<0x4e5>, &property_setter_adaptor<0x4e6>, &property_setter_adaptor<0x4e7>,
+ &property_setter_adaptor<0x4e8>, &property_setter_adaptor<0x4e9>, &property_setter_adaptor<0x4ea>, &property_setter_adaptor<0x4eb>, &property_setter_adaptor<0x4ec>, &property_setter_adaptor<0x4ed>, &property_setter_adaptor<0x4ee>, &property_setter_adaptor<0x4ef>,
+ &property_setter_adaptor<0x4f0>, &property_setter_adaptor<0x4f1>, &property_setter_adaptor<0x4f2>, &property_setter_adaptor<0x4f3>, &property_setter_adaptor<0x4f4>, &property_setter_adaptor<0x4f5>, &property_setter_adaptor<0x4f6>, &property_setter_adaptor<0x4f7>,
+ &property_setter_adaptor<0x4f8>, &property_setter_adaptor<0x4f9>, &property_setter_adaptor<0x4fa>, &property_setter_adaptor<0x4fb>, &property_setter_adaptor<0x4fc>, &property_setter_adaptor<0x4fd>, &property_setter_adaptor<0x4fe>, &property_setter_adaptor<0x4ff>,
+};
+
+py_func_ptr_t get_property_setter_adaptor (int n)
+{
+ tl_assert (n >= 0 && n < int (sizeof (property_setter_adaptors) / sizeof (property_setter_adaptors [0])));
+ return property_setter_adaptors [n];
+}
+
+template
+PyObject *method_init_adaptor (PyObject *self, PyObject *args)
+{
+ return method_init_adaptor (N, self, args);
+}
+
+static py_func_ptr_t method_init_adaptors [] =
+{
+ &method_init_adaptor<0x000>, &method_init_adaptor<0x001>, &method_init_adaptor<0x002>, &method_init_adaptor<0x003>, &method_init_adaptor<0x004>, &method_init_adaptor<0x005>, &method_init_adaptor<0x006>, &method_init_adaptor<0x007>,
+ &method_init_adaptor<0x008>, &method_init_adaptor<0x009>, &method_init_adaptor<0x00a>, &method_init_adaptor<0x00b>, &method_init_adaptor<0x00c>, &method_init_adaptor<0x00d>, &method_init_adaptor<0x00e>, &method_init_adaptor<0x00f>,
+ &method_init_adaptor<0x010>, &method_init_adaptor<0x011>, &method_init_adaptor<0x012>, &method_init_adaptor<0x013>, &method_init_adaptor<0x014>, &method_init_adaptor<0x015>, &method_init_adaptor<0x016>, &method_init_adaptor<0x017>,
+ &method_init_adaptor<0x018>, &method_init_adaptor<0x019>, &method_init_adaptor<0x01a>, &method_init_adaptor<0x01b>, &method_init_adaptor<0x01c>, &method_init_adaptor<0x01d>, &method_init_adaptor<0x01e>, &method_init_adaptor<0x01f>,
+ &method_init_adaptor<0x020>, &method_init_adaptor<0x021>, &method_init_adaptor<0x022>, &method_init_adaptor<0x023>, &method_init_adaptor<0x024>, &method_init_adaptor<0x025>, &method_init_adaptor<0x026>, &method_init_adaptor<0x027>,
+ &method_init_adaptor<0x028>, &method_init_adaptor<0x029>, &method_init_adaptor<0x02a>, &method_init_adaptor<0x02b>, &method_init_adaptor<0x02c>, &method_init_adaptor<0x02d>, &method_init_adaptor<0x02e>, &method_init_adaptor<0x02f>,
+ &method_init_adaptor<0x030>, &method_init_adaptor<0x031>, &method_init_adaptor<0x032>, &method_init_adaptor<0x033>, &method_init_adaptor<0x034>, &method_init_adaptor<0x035>, &method_init_adaptor<0x036>, &method_init_adaptor<0x037>,
+ &method_init_adaptor<0x038>, &method_init_adaptor<0x039>, &method_init_adaptor<0x03a>, &method_init_adaptor<0x03b>, &method_init_adaptor<0x03c>, &method_init_adaptor<0x03d>, &method_init_adaptor<0x03e>, &method_init_adaptor<0x03f>,
+ &method_init_adaptor<0x040>, &method_init_adaptor<0x041>, &method_init_adaptor<0x042>, &method_init_adaptor<0x043>, &method_init_adaptor<0x044>, &method_init_adaptor<0x045>, &method_init_adaptor<0x046>, &method_init_adaptor<0x047>,
+ &method_init_adaptor<0x048>, &method_init_adaptor<0x049>, &method_init_adaptor<0x04a>, &method_init_adaptor<0x04b>, &method_init_adaptor<0x04c>, &method_init_adaptor<0x04d>, &method_init_adaptor<0x04e>, &method_init_adaptor<0x04f>,
+ &method_init_adaptor<0x050>, &method_init_adaptor<0x051>, &method_init_adaptor<0x052>, &method_init_adaptor<0x053>, &method_init_adaptor<0x054>, &method_init_adaptor<0x055>, &method_init_adaptor<0x056>, &method_init_adaptor<0x057>,
+ &method_init_adaptor<0x058>, &method_init_adaptor<0x059>, &method_init_adaptor<0x05a>, &method_init_adaptor<0x05b>, &method_init_adaptor<0x05c>, &method_init_adaptor<0x05d>, &method_init_adaptor<0x05e>, &method_init_adaptor<0x05f>,
+ &method_init_adaptor<0x060>, &method_init_adaptor<0x061>, &method_init_adaptor<0x062>, &method_init_adaptor<0x063>, &method_init_adaptor<0x064>, &method_init_adaptor<0x065>, &method_init_adaptor<0x066>, &method_init_adaptor<0x067>,
+ &method_init_adaptor<0x068>, &method_init_adaptor<0x069>, &method_init_adaptor<0x06a>, &method_init_adaptor<0x06b>, &method_init_adaptor<0x06c>, &method_init_adaptor<0x06d>, &method_init_adaptor<0x06e>, &method_init_adaptor<0x06f>,
+ &method_init_adaptor<0x070>, &method_init_adaptor<0x071>, &method_init_adaptor<0x072>, &method_init_adaptor<0x073>, &method_init_adaptor<0x074>, &method_init_adaptor<0x075>, &method_init_adaptor<0x076>, &method_init_adaptor<0x077>,
+ &method_init_adaptor<0x078>, &method_init_adaptor<0x079>, &method_init_adaptor<0x07a>, &method_init_adaptor<0x07b>, &method_init_adaptor<0x07c>, &method_init_adaptor<0x07d>, &method_init_adaptor<0x07e>, &method_init_adaptor<0x07f>,
+ &method_init_adaptor<0x080>, &method_init_adaptor<0x081>, &method_init_adaptor<0x082>, &method_init_adaptor<0x083>, &method_init_adaptor<0x084>, &method_init_adaptor<0x085>, &method_init_adaptor<0x086>, &method_init_adaptor<0x087>,
+ &method_init_adaptor<0x088>, &method_init_adaptor<0x089>, &method_init_adaptor<0x08a>, &method_init_adaptor<0x08b>, &method_init_adaptor<0x08c>, &method_init_adaptor<0x08d>, &method_init_adaptor<0x08e>, &method_init_adaptor<0x08f>,
+ &method_init_adaptor<0x090>, &method_init_adaptor<0x091>, &method_init_adaptor<0x092>, &method_init_adaptor<0x093>, &method_init_adaptor<0x094>, &method_init_adaptor<0x095>, &method_init_adaptor<0x096>, &method_init_adaptor<0x097>,
+ &method_init_adaptor<0x098>, &method_init_adaptor<0x099>, &method_init_adaptor<0x09a>, &method_init_adaptor<0x09b>, &method_init_adaptor<0x09c>, &method_init_adaptor<0x09d>, &method_init_adaptor<0x09e>, &method_init_adaptor<0x09f>,
+ &method_init_adaptor<0x0a0>, &method_init_adaptor<0x0a1>, &method_init_adaptor<0x0a2>, &method_init_adaptor<0x0a3>, &method_init_adaptor<0x0a4>, &method_init_adaptor<0x0a5>, &method_init_adaptor<0x0a6>, &method_init_adaptor<0x0a7>,
+ &method_init_adaptor<0x0a8>, &method_init_adaptor<0x0a9>, &method_init_adaptor<0x0aa>, &method_init_adaptor<0x0ab>, &method_init_adaptor<0x0ac>, &method_init_adaptor<0x0ad>, &method_init_adaptor<0x0ae>, &method_init_adaptor<0x0af>,
+ &method_init_adaptor<0x0b0>, &method_init_adaptor<0x0b1>, &method_init_adaptor<0x0b2>, &method_init_adaptor<0x0b3>, &method_init_adaptor<0x0b4>, &method_init_adaptor<0x0b5>, &method_init_adaptor<0x0b6>, &method_init_adaptor<0x0b7>,
+ &method_init_adaptor<0x0b8>, &method_init_adaptor<0x0b9>, &method_init_adaptor<0x0ba>, &method_init_adaptor<0x0bb>, &method_init_adaptor<0x0bc>, &method_init_adaptor<0x0bd>, &method_init_adaptor<0x0be>, &method_init_adaptor<0x0bf>,
+ &method_init_adaptor<0x0c0>, &method_init_adaptor<0x0c1>, &method_init_adaptor<0x0c2>, &method_init_adaptor<0x0c3>, &method_init_adaptor<0x0c4>, &method_init_adaptor<0x0c5>, &method_init_adaptor<0x0c6>, &method_init_adaptor<0x0c7>,
+ &method_init_adaptor<0x0c8>, &method_init_adaptor<0x0c9>, &method_init_adaptor<0x0ca>, &method_init_adaptor<0x0cb>, &method_init_adaptor<0x0cc>, &method_init_adaptor<0x0cd>, &method_init_adaptor<0x0ce>, &method_init_adaptor<0x0cf>,
+ &method_init_adaptor<0x0d0>, &method_init_adaptor<0x0d1>, &method_init_adaptor<0x0d2>, &method_init_adaptor<0x0d3>, &method_init_adaptor<0x0d4>, &method_init_adaptor<0x0d5>, &method_init_adaptor<0x0d6>, &method_init_adaptor<0x0d7>,
+ &method_init_adaptor<0x0d8>, &method_init_adaptor<0x0d9>, &method_init_adaptor<0x0da>, &method_init_adaptor<0x0db>, &method_init_adaptor<0x0dc>, &method_init_adaptor<0x0dd>, &method_init_adaptor<0x0de>, &method_init_adaptor<0x0df>,
+ &method_init_adaptor<0x0e0>, &method_init_adaptor<0x0e1>, &method_init_adaptor<0x0e2>, &method_init_adaptor<0x0e3>, &method_init_adaptor<0x0e4>, &method_init_adaptor<0x0e5>, &method_init_adaptor<0x0e6>, &method_init_adaptor<0x0e7>,
+ &method_init_adaptor<0x0e8>, &method_init_adaptor<0x0e9>, &method_init_adaptor<0x0ea>, &method_init_adaptor<0x0eb>, &method_init_adaptor<0x0ec>, &method_init_adaptor<0x0ed>, &method_init_adaptor<0x0ee>, &method_init_adaptor<0x0ef>,
+ &method_init_adaptor<0x0f0>, &method_init_adaptor<0x0f1>, &method_init_adaptor<0x0f2>, &method_init_adaptor<0x0f3>, &method_init_adaptor<0x0f4>, &method_init_adaptor<0x0f5>, &method_init_adaptor<0x0f6>, &method_init_adaptor<0x0f7>,
+ &method_init_adaptor<0x0f8>, &method_init_adaptor<0x0f9>, &method_init_adaptor<0x0fa>, &method_init_adaptor<0x0fb>, &method_init_adaptor<0x0fc>, &method_init_adaptor<0x0fd>, &method_init_adaptor<0x0fe>, &method_init_adaptor<0x0ff>,
+ &method_init_adaptor<0x100>, &method_init_adaptor<0x101>, &method_init_adaptor<0x102>, &method_init_adaptor<0x103>, &method_init_adaptor<0x104>, &method_init_adaptor<0x105>, &method_init_adaptor<0x106>, &method_init_adaptor<0x107>,
+ &method_init_adaptor<0x108>, &method_init_adaptor<0x109>, &method_init_adaptor<0x10a>, &method_init_adaptor<0x10b>, &method_init_adaptor<0x10c>, &method_init_adaptor<0x10d>, &method_init_adaptor<0x10e>, &method_init_adaptor<0x10f>,
+ &method_init_adaptor<0x110>, &method_init_adaptor<0x111>, &method_init_adaptor<0x112>, &method_init_adaptor<0x113>, &method_init_adaptor<0x114>, &method_init_adaptor<0x115>, &method_init_adaptor<0x116>, &method_init_adaptor<0x117>,
+ &method_init_adaptor<0x118>, &method_init_adaptor<0x119>, &method_init_adaptor<0x11a>, &method_init_adaptor<0x11b>, &method_init_adaptor<0x11c>, &method_init_adaptor<0x11d>, &method_init_adaptor<0x11e>, &method_init_adaptor<0x11f>,
+ &method_init_adaptor<0x120>, &method_init_adaptor<0x121>, &method_init_adaptor<0x122>, &method_init_adaptor<0x123>, &method_init_adaptor<0x124>, &method_init_adaptor<0x125>, &method_init_adaptor<0x126>, &method_init_adaptor<0x127>,
+ &method_init_adaptor<0x128>, &method_init_adaptor<0x129>, &method_init_adaptor<0x12a>, &method_init_adaptor<0x12b>, &method_init_adaptor<0x12c>, &method_init_adaptor<0x12d>, &method_init_adaptor<0x12e>, &method_init_adaptor<0x12f>,
+ &method_init_adaptor<0x130>, &method_init_adaptor<0x131>, &method_init_adaptor<0x132>, &method_init_adaptor<0x133>, &method_init_adaptor<0x134>, &method_init_adaptor<0x135>, &method_init_adaptor<0x136>, &method_init_adaptor<0x137>,
+ &method_init_adaptor<0x138>, &method_init_adaptor<0x139>, &method_init_adaptor<0x13a>, &method_init_adaptor<0x13b>, &method_init_adaptor<0x13c>, &method_init_adaptor<0x13d>, &method_init_adaptor<0x13e>, &method_init_adaptor<0x13f>,
+ &method_init_adaptor<0x140>, &method_init_adaptor<0x141>, &method_init_adaptor<0x142>, &method_init_adaptor<0x143>, &method_init_adaptor<0x144>, &method_init_adaptor<0x145>, &method_init_adaptor<0x146>, &method_init_adaptor<0x147>,
+ &method_init_adaptor<0x148>, &method_init_adaptor<0x149>, &method_init_adaptor<0x14a>, &method_init_adaptor<0x14b>, &method_init_adaptor<0x14c>, &method_init_adaptor<0x14d>, &method_init_adaptor<0x14e>, &method_init_adaptor<0x14f>,
+ &method_init_adaptor<0x150>, &method_init_adaptor<0x151>, &method_init_adaptor<0x152>, &method_init_adaptor<0x153>, &method_init_adaptor<0x154>, &method_init_adaptor<0x155>, &method_init_adaptor<0x156>, &method_init_adaptor<0x157>,
+ &method_init_adaptor<0x158>, &method_init_adaptor<0x159>, &method_init_adaptor<0x15a>, &method_init_adaptor<0x15b>, &method_init_adaptor<0x15c>, &method_init_adaptor<0x15d>, &method_init_adaptor<0x15e>, &method_init_adaptor<0x15f>,
+ &method_init_adaptor<0x160>, &method_init_adaptor<0x161>, &method_init_adaptor<0x162>, &method_init_adaptor<0x163>, &method_init_adaptor<0x164>, &method_init_adaptor<0x165>, &method_init_adaptor<0x166>, &method_init_adaptor<0x167>,
+ &method_init_adaptor<0x168>, &method_init_adaptor<0x169>, &method_init_adaptor<0x16a>, &method_init_adaptor<0x16b>, &method_init_adaptor<0x16c>, &method_init_adaptor<0x16d>, &method_init_adaptor<0x16e>, &method_init_adaptor<0x16f>,
+ &method_init_adaptor<0x170>, &method_init_adaptor<0x171>, &method_init_adaptor<0x172>, &method_init_adaptor<0x173>, &method_init_adaptor<0x174>, &method_init_adaptor<0x175>, &method_init_adaptor<0x176>, &method_init_adaptor<0x177>,
+ &method_init_adaptor<0x178>, &method_init_adaptor<0x179>, &method_init_adaptor<0x17a>, &method_init_adaptor<0x17b>, &method_init_adaptor<0x17c>, &method_init_adaptor<0x17d>, &method_init_adaptor<0x17e>, &method_init_adaptor<0x17f>,
+ &method_init_adaptor<0x180>, &method_init_adaptor<0x181>, &method_init_adaptor<0x182>, &method_init_adaptor<0x183>, &method_init_adaptor<0x184>, &method_init_adaptor<0x185>, &method_init_adaptor<0x186>, &method_init_adaptor<0x187>,
+ &method_init_adaptor<0x188>, &method_init_adaptor<0x189>, &method_init_adaptor<0x18a>, &method_init_adaptor<0x18b>, &method_init_adaptor<0x18c>, &method_init_adaptor<0x18d>, &method_init_adaptor<0x18e>, &method_init_adaptor<0x18f>,
+ &method_init_adaptor<0x190>, &method_init_adaptor<0x191>, &method_init_adaptor<0x192>, &method_init_adaptor<0x193>, &method_init_adaptor<0x194>, &method_init_adaptor<0x195>, &method_init_adaptor<0x196>, &method_init_adaptor<0x197>,
+ &method_init_adaptor<0x198>, &method_init_adaptor<0x199>, &method_init_adaptor<0x19a>, &method_init_adaptor<0x19b>, &method_init_adaptor<0x19c>, &method_init_adaptor<0x19d>, &method_init_adaptor<0x19e>, &method_init_adaptor<0x19f>,
+ &method_init_adaptor<0x1a0>, &method_init_adaptor<0x1a1>, &method_init_adaptor<0x1a2>, &method_init_adaptor<0x1a3>, &method_init_adaptor<0x1a4>, &method_init_adaptor<0x1a5>, &method_init_adaptor<0x1a6>, &method_init_adaptor<0x1a7>,
+ &method_init_adaptor<0x1a8>, &method_init_adaptor<0x1a9>, &method_init_adaptor<0x1aa>, &method_init_adaptor<0x1ab>, &method_init_adaptor<0x1ac>, &method_init_adaptor<0x1ad>, &method_init_adaptor<0x1ae>, &method_init_adaptor<0x1af>,
+ &method_init_adaptor<0x1b0>, &method_init_adaptor<0x1b1>, &method_init_adaptor<0x1b2>, &method_init_adaptor<0x1b3>, &method_init_adaptor<0x1b4>, &method_init_adaptor<0x1b5>, &method_init_adaptor<0x1b6>, &method_init_adaptor<0x1b7>,
+ &method_init_adaptor<0x1b8>, &method_init_adaptor<0x1b9>, &method_init_adaptor<0x1ba>, &method_init_adaptor<0x1bb>, &method_init_adaptor<0x1bc>, &method_init_adaptor<0x1bd>, &method_init_adaptor<0x1be>, &method_init_adaptor<0x1bf>,
+ &method_init_adaptor<0x1c0>, &method_init_adaptor<0x1c1>, &method_init_adaptor<0x1c2>, &method_init_adaptor<0x1c3>, &method_init_adaptor<0x1c4>, &method_init_adaptor<0x1c5>, &method_init_adaptor<0x1c6>, &method_init_adaptor<0x1c7>,
+ &method_init_adaptor<0x1c8>, &method_init_adaptor<0x1c9>, &method_init_adaptor<0x1ca>, &method_init_adaptor<0x1cb>, &method_init_adaptor<0x1cc>, &method_init_adaptor<0x1cd>, &method_init_adaptor<0x1ce>, &method_init_adaptor<0x1cf>,
+ &method_init_adaptor<0x1d0>, &method_init_adaptor<0x1d1>, &method_init_adaptor<0x1d2>, &method_init_adaptor<0x1d3>, &method_init_adaptor<0x1d4>, &method_init_adaptor<0x1d5>, &method_init_adaptor<0x1d6>, &method_init_adaptor<0x1d7>,
+ &method_init_adaptor<0x1d8>, &method_init_adaptor<0x1d9>, &method_init_adaptor<0x1da>, &method_init_adaptor<0x1db>, &method_init_adaptor<0x1dc>, &method_init_adaptor<0x1dd>, &method_init_adaptor<0x1de>, &method_init_adaptor<0x1df>,
+ &method_init_adaptor<0x1e0>, &method_init_adaptor<0x1e1>, &method_init_adaptor<0x1e2>, &method_init_adaptor<0x1e3>, &method_init_adaptor<0x1e4>, &method_init_adaptor<0x1e5>, &method_init_adaptor<0x1e6>, &method_init_adaptor<0x1e7>,
+ &method_init_adaptor<0x1e8>, &method_init_adaptor<0x1e9>, &method_init_adaptor<0x1ea>, &method_init_adaptor<0x1eb>, &method_init_adaptor<0x1ec>, &method_init_adaptor<0x1ed>, &method_init_adaptor<0x1ee>, &method_init_adaptor<0x1ef>,
+ &method_init_adaptor<0x1f0>, &method_init_adaptor<0x1f1>, &method_init_adaptor<0x1f2>, &method_init_adaptor<0x1f3>, &method_init_adaptor<0x1f4>, &method_init_adaptor<0x1f5>, &method_init_adaptor<0x1f6>, &method_init_adaptor<0x1f7>,
+ &method_init_adaptor<0x1f8>, &method_init_adaptor<0x1f9>, &method_init_adaptor<0x1fa>, &method_init_adaptor<0x1fb>, &method_init_adaptor<0x1fc>, &method_init_adaptor<0x1fd>, &method_init_adaptor<0x1fe>, &method_init_adaptor<0x1ff>,
+ &method_init_adaptor<0x200>, &method_init_adaptor<0x201>, &method_init_adaptor<0x202>, &method_init_adaptor<0x203>, &method_init_adaptor<0x204>, &method_init_adaptor<0x205>, &method_init_adaptor<0x206>, &method_init_adaptor<0x207>,
+ &method_init_adaptor<0x208>, &method_init_adaptor<0x209>, &method_init_adaptor<0x20a>, &method_init_adaptor<0x20b>, &method_init_adaptor<0x20c>, &method_init_adaptor<0x20d>, &method_init_adaptor<0x20e>, &method_init_adaptor<0x20f>,
+ &method_init_adaptor<0x210>, &method_init_adaptor<0x211>, &method_init_adaptor<0x212>, &method_init_adaptor<0x213>, &method_init_adaptor<0x214>, &method_init_adaptor<0x215>, &method_init_adaptor<0x216>, &method_init_adaptor<0x217>,
+ &method_init_adaptor<0x218>, &method_init_adaptor<0x219>, &method_init_adaptor<0x21a>, &method_init_adaptor<0x21b>, &method_init_adaptor<0x21c>, &method_init_adaptor<0x21d>, &method_init_adaptor<0x21e>, &method_init_adaptor<0x21f>,
+ &method_init_adaptor<0x220>, &method_init_adaptor<0x221>, &method_init_adaptor<0x222>, &method_init_adaptor<0x223>, &method_init_adaptor<0x224>, &method_init_adaptor<0x225>, &method_init_adaptor<0x226>, &method_init_adaptor<0x227>,
+ &method_init_adaptor<0x228>, &method_init_adaptor<0x229>, &method_init_adaptor<0x22a>, &method_init_adaptor<0x22b>, &method_init_adaptor<0x22c>, &method_init_adaptor<0x22d>, &method_init_adaptor<0x22e>, &method_init_adaptor<0x22f>,
+ &method_init_adaptor<0x230>, &method_init_adaptor<0x231>, &method_init_adaptor<0x232>, &method_init_adaptor<0x233>, &method_init_adaptor<0x234>, &method_init_adaptor<0x235>, &method_init_adaptor<0x236>, &method_init_adaptor<0x237>,
+ &method_init_adaptor<0x238>, &method_init_adaptor<0x239>, &method_init_adaptor<0x23a>, &method_init_adaptor<0x23b>, &method_init_adaptor<0x23c>, &method_init_adaptor<0x23d>, &method_init_adaptor<0x23e>, &method_init_adaptor<0x23f>,
+ &method_init_adaptor<0x240>, &method_init_adaptor<0x241>, &method_init_adaptor<0x242>, &method_init_adaptor<0x243>, &method_init_adaptor<0x244>, &method_init_adaptor<0x245>, &method_init_adaptor<0x246>, &method_init_adaptor<0x247>,
+ &method_init_adaptor<0x248>, &method_init_adaptor<0x249>, &method_init_adaptor<0x24a>, &method_init_adaptor<0x24b>, &method_init_adaptor<0x24c>, &method_init_adaptor<0x24d>, &method_init_adaptor<0x24e>, &method_init_adaptor<0x24f>,
+ &method_init_adaptor<0x250>, &method_init_adaptor<0x251>, &method_init_adaptor<0x252>, &method_init_adaptor<0x253>, &method_init_adaptor<0x254>, &method_init_adaptor<0x255>, &method_init_adaptor<0x256>, &method_init_adaptor<0x257>,
+ &method_init_adaptor<0x258>, &method_init_adaptor<0x259>, &method_init_adaptor<0x25a>, &method_init_adaptor<0x25b>, &method_init_adaptor<0x25c>, &method_init_adaptor<0x25d>, &method_init_adaptor<0x25e>, &method_init_adaptor<0x25f>,
+ &method_init_adaptor<0x260>, &method_init_adaptor<0x261>, &method_init_adaptor<0x262>, &method_init_adaptor<0x263>, &method_init_adaptor<0x264>, &method_init_adaptor<0x265>, &method_init_adaptor<0x266>, &method_init_adaptor<0x267>,
+ &method_init_adaptor<0x268>, &method_init_adaptor<0x269>, &method_init_adaptor<0x26a>, &method_init_adaptor<0x26b>, &method_init_adaptor<0x26c>, &method_init_adaptor<0x26d>, &method_init_adaptor<0x26e>, &method_init_adaptor<0x26f>,
+ &method_init_adaptor<0x270>, &method_init_adaptor<0x271>, &method_init_adaptor<0x272>, &method_init_adaptor<0x273>, &method_init_adaptor<0x274>, &method_init_adaptor<0x275>, &method_init_adaptor<0x276>, &method_init_adaptor<0x277>,
+ &method_init_adaptor<0x278>, &method_init_adaptor<0x279>, &method_init_adaptor<0x27a>, &method_init_adaptor<0x27b>, &method_init_adaptor<0x27c>, &method_init_adaptor<0x27d>, &method_init_adaptor<0x27e>, &method_init_adaptor<0x27f>,
+ &method_init_adaptor<0x280>, &method_init_adaptor<0x281>, &method_init_adaptor<0x282>, &method_init_adaptor<0x283>, &method_init_adaptor<0x284>, &method_init_adaptor<0x285>, &method_init_adaptor<0x286>, &method_init_adaptor<0x287>,
+ &method_init_adaptor<0x288>, &method_init_adaptor<0x289>, &method_init_adaptor<0x28a>, &method_init_adaptor<0x28b>, &method_init_adaptor<0x28c>, &method_init_adaptor<0x28d>, &method_init_adaptor<0x28e>, &method_init_adaptor<0x28f>,
+ &method_init_adaptor<0x290>, &method_init_adaptor<0x291>, &method_init_adaptor<0x292>, &method_init_adaptor<0x293>, &method_init_adaptor<0x294>, &method_init_adaptor<0x295>, &method_init_adaptor<0x296>, &method_init_adaptor<0x297>,
+ &method_init_adaptor<0x298>, &method_init_adaptor<0x299>, &method_init_adaptor<0x29a>, &method_init_adaptor<0x29b>, &method_init_adaptor<0x29c>, &method_init_adaptor<0x29d>, &method_init_adaptor<0x29e>, &method_init_adaptor<0x29f>,
+ &method_init_adaptor<0x2a0>, &method_init_adaptor<0x2a1>, &method_init_adaptor<0x2a2>, &method_init_adaptor<0x2a3>, &method_init_adaptor<0x2a4>, &method_init_adaptor<0x2a5>, &method_init_adaptor<0x2a6>, &method_init_adaptor<0x2a7>,
+ &method_init_adaptor<0x2a8>, &method_init_adaptor<0x2a9>, &method_init_adaptor<0x2aa>, &method_init_adaptor<0x2ab>, &method_init_adaptor<0x2ac>, &method_init_adaptor<0x2ad>, &method_init_adaptor<0x2ae>, &method_init_adaptor<0x2af>,
+ &method_init_adaptor<0x2b0>, &method_init_adaptor<0x2b1>, &method_init_adaptor<0x2b2>, &method_init_adaptor<0x2b3>, &method_init_adaptor<0x2b4>, &method_init_adaptor<0x2b5>, &method_init_adaptor<0x2b6>, &method_init_adaptor<0x2b7>,
+ &method_init_adaptor<0x2b8>, &method_init_adaptor<0x2b9>, &method_init_adaptor<0x2ba>, &method_init_adaptor<0x2bb>, &method_init_adaptor<0x2bc>, &method_init_adaptor<0x2bd>, &method_init_adaptor<0x2be>, &method_init_adaptor<0x2bf>,
+ &method_init_adaptor<0x2c0>, &method_init_adaptor<0x2c1>, &method_init_adaptor<0x2c2>, &method_init_adaptor<0x2c3>, &method_init_adaptor<0x2c4>, &method_init_adaptor<0x2c5>, &method_init_adaptor<0x2c6>, &method_init_adaptor<0x2c7>,
+ &method_init_adaptor<0x2c8>, &method_init_adaptor<0x2c9>, &method_init_adaptor<0x2ca>, &method_init_adaptor<0x2cb>, &method_init_adaptor<0x2cc>, &method_init_adaptor<0x2cd>, &method_init_adaptor<0x2ce>, &method_init_adaptor<0x2cf>,
+ &method_init_adaptor<0x2d0>, &method_init_adaptor<0x2d1>, &method_init_adaptor<0x2d2>, &method_init_adaptor<0x2d3>, &method_init_adaptor<0x2d4>, &method_init_adaptor<0x2d5>, &method_init_adaptor<0x2d6>, &method_init_adaptor<0x2d7>,
+ &method_init_adaptor<0x2d8>, &method_init_adaptor<0x2d9>, &method_init_adaptor<0x2da>, &method_init_adaptor<0x2db>, &method_init_adaptor<0x2dc>, &method_init_adaptor<0x2dd>, &method_init_adaptor<0x2de>, &method_init_adaptor<0x2df>,
+ &method_init_adaptor<0x2e0>, &method_init_adaptor<0x2e1>, &method_init_adaptor<0x2e2>, &method_init_adaptor<0x2e3>, &method_init_adaptor<0x2e4>, &method_init_adaptor<0x2e5>, &method_init_adaptor<0x2e6>, &method_init_adaptor<0x2e7>,
+ &method_init_adaptor<0x2e8>, &method_init_adaptor<0x2e9>, &method_init_adaptor<0x2ea>, &method_init_adaptor<0x2eb>, &method_init_adaptor<0x2ec>, &method_init_adaptor<0x2ed>, &method_init_adaptor<0x2ee>, &method_init_adaptor<0x2ef>,
+ &method_init_adaptor<0x2f0>, &method_init_adaptor<0x2f1>, &method_init_adaptor<0x2f2>, &method_init_adaptor<0x2f3>, &method_init_adaptor<0x2f4>, &method_init_adaptor<0x2f5>, &method_init_adaptor<0x2f6>, &method_init_adaptor<0x2f7>,
+ &method_init_adaptor<0x2f8>, &method_init_adaptor<0x2f9>, &method_init_adaptor<0x2fa>, &method_init_adaptor<0x2fb>, &method_init_adaptor<0x2fc>, &method_init_adaptor<0x2fd>, &method_init_adaptor<0x2fe>, &method_init_adaptor<0x2ff>,
+ &method_init_adaptor<0x300>, &method_init_adaptor<0x301>, &method_init_adaptor<0x302>, &method_init_adaptor<0x303>, &method_init_adaptor<0x304>, &method_init_adaptor<0x305>, &method_init_adaptor<0x306>, &method_init_adaptor<0x307>,
+ &method_init_adaptor<0x308>, &method_init_adaptor<0x309>, &method_init_adaptor<0x30a>, &method_init_adaptor<0x30b>, &method_init_adaptor<0x30c>, &method_init_adaptor<0x30d>, &method_init_adaptor<0x30e>, &method_init_adaptor<0x30f>,
+ &method_init_adaptor<0x310>, &method_init_adaptor<0x311>, &method_init_adaptor<0x312>, &method_init_adaptor<0x313>, &method_init_adaptor<0x314>, &method_init_adaptor<0x315>, &method_init_adaptor<0x316>, &method_init_adaptor<0x317>,
+ &method_init_adaptor<0x318>, &method_init_adaptor<0x319>, &method_init_adaptor<0x31a>, &method_init_adaptor<0x31b>, &method_init_adaptor<0x31c>, &method_init_adaptor<0x31d>, &method_init_adaptor<0x31e>, &method_init_adaptor<0x31f>,
+ &method_init_adaptor<0x320>, &method_init_adaptor<0x321>, &method_init_adaptor<0x322>, &method_init_adaptor<0x323>, &method_init_adaptor<0x324>, &method_init_adaptor<0x325>, &method_init_adaptor<0x326>, &method_init_adaptor<0x327>,
+ &method_init_adaptor<0x328>, &method_init_adaptor<0x329>, &method_init_adaptor<0x32a>, &method_init_adaptor<0x32b>, &method_init_adaptor<0x32c>, &method_init_adaptor<0x32d>, &method_init_adaptor<0x32e>, &method_init_adaptor<0x32f>,
+ &method_init_adaptor<0x330>, &method_init_adaptor<0x331>, &method_init_adaptor<0x332>, &method_init_adaptor<0x333>, &method_init_adaptor<0x334>, &method_init_adaptor<0x335>, &method_init_adaptor<0x336>, &method_init_adaptor<0x337>,
+ &method_init_adaptor<0x338>, &method_init_adaptor<0x339>, &method_init_adaptor<0x33a>, &method_init_adaptor<0x33b>, &method_init_adaptor<0x33c>, &method_init_adaptor<0x33d>, &method_init_adaptor<0x33e>, &method_init_adaptor<0x33f>,
+ &method_init_adaptor<0x340>, &method_init_adaptor<0x341>, &method_init_adaptor<0x342>, &method_init_adaptor<0x343>, &method_init_adaptor<0x344>, &method_init_adaptor<0x345>, &method_init_adaptor<0x346>, &method_init_adaptor<0x347>,
+ &method_init_adaptor<0x348>, &method_init_adaptor<0x349>, &method_init_adaptor<0x34a>, &method_init_adaptor<0x34b>, &method_init_adaptor<0x34c>, &method_init_adaptor<0x34d>, &method_init_adaptor<0x34e>, &method_init_adaptor<0x34f>,
+ &method_init_adaptor<0x350>, &method_init_adaptor<0x351>, &method_init_adaptor<0x352>, &method_init_adaptor<0x353>, &method_init_adaptor<0x354>, &method_init_adaptor<0x355>, &method_init_adaptor<0x356>, &method_init_adaptor<0x357>,
+ &method_init_adaptor<0x358>, &method_init_adaptor<0x359>, &method_init_adaptor<0x35a>, &method_init_adaptor<0x35b>, &method_init_adaptor<0x35c>, &method_init_adaptor<0x35d>, &method_init_adaptor<0x35e>, &method_init_adaptor<0x35f>,
+ &method_init_adaptor<0x360>, &method_init_adaptor<0x361>, &method_init_adaptor<0x362>, &method_init_adaptor<0x363>, &method_init_adaptor<0x364>, &method_init_adaptor<0x365>, &method_init_adaptor<0x366>, &method_init_adaptor<0x367>,
+ &method_init_adaptor<0x368>, &method_init_adaptor<0x369>, &method_init_adaptor<0x36a>, &method_init_adaptor<0x36b>, &method_init_adaptor<0x36c>, &method_init_adaptor<0x36d>, &method_init_adaptor<0x36e>, &method_init_adaptor<0x36f>,
+ &method_init_adaptor<0x370>, &method_init_adaptor<0x371>, &method_init_adaptor<0x372>, &method_init_adaptor<0x373>, &method_init_adaptor<0x374>, &method_init_adaptor<0x375>, &method_init_adaptor<0x376>, &method_init_adaptor<0x377>,
+ &method_init_adaptor<0x378>, &method_init_adaptor<0x379>, &method_init_adaptor<0x37a>, &method_init_adaptor<0x37b>, &method_init_adaptor<0x37c>, &method_init_adaptor<0x37d>, &method_init_adaptor<0x37e>, &method_init_adaptor<0x37f>,
+ &method_init_adaptor<0x380>, &method_init_adaptor<0x381>, &method_init_adaptor<0x382>, &method_init_adaptor<0x383>, &method_init_adaptor<0x384>, &method_init_adaptor<0x385>, &method_init_adaptor<0x386>, &method_init_adaptor<0x387>,
+ &method_init_adaptor<0x388>, &method_init_adaptor<0x389>, &method_init_adaptor<0x38a>, &method_init_adaptor<0x38b>, &method_init_adaptor<0x38c>, &method_init_adaptor<0x38d>, &method_init_adaptor<0x38e>, &method_init_adaptor<0x38f>,
+ &method_init_adaptor<0x390>, &method_init_adaptor<0x391>, &method_init_adaptor<0x392>, &method_init_adaptor<0x393>, &method_init_adaptor<0x394>, &method_init_adaptor<0x395>, &method_init_adaptor<0x396>, &method_init_adaptor<0x397>,
+ &method_init_adaptor<0x398>, &method_init_adaptor<0x399>, &method_init_adaptor<0x39a>, &method_init_adaptor<0x39b>, &method_init_adaptor<0x39c>, &method_init_adaptor<0x39d>, &method_init_adaptor<0x39e>, &method_init_adaptor<0x39f>,
+ &method_init_adaptor<0x3a0>, &method_init_adaptor<0x3a1>, &method_init_adaptor<0x3a2>, &method_init_adaptor<0x3a3>, &method_init_adaptor<0x3a4>, &method_init_adaptor<0x3a5>, &method_init_adaptor<0x3a6>, &method_init_adaptor<0x3a7>,
+ &method_init_adaptor<0x3a8>, &method_init_adaptor<0x3a9>, &method_init_adaptor<0x3aa>, &method_init_adaptor<0x3ab>, &method_init_adaptor<0x3ac>, &method_init_adaptor<0x3ad>, &method_init_adaptor<0x3ae>, &method_init_adaptor<0x3af>,
+ &method_init_adaptor<0x3b0>, &method_init_adaptor<0x3b1>, &method_init_adaptor<0x3b2>, &method_init_adaptor<0x3b3>, &method_init_adaptor<0x3b4>, &method_init_adaptor<0x3b5>, &method_init_adaptor<0x3b6>, &method_init_adaptor<0x3b7>,
+ &method_init_adaptor<0x3b8>, &method_init_adaptor<0x3b9>, &method_init_adaptor<0x3ba>, &method_init_adaptor<0x3bb>, &method_init_adaptor<0x3bc>, &method_init_adaptor<0x3bd>, &method_init_adaptor<0x3be>, &method_init_adaptor<0x3bf>,
+ &method_init_adaptor<0x3c0>, &method_init_adaptor<0x3c1>, &method_init_adaptor<0x3c2>, &method_init_adaptor<0x3c3>, &method_init_adaptor<0x3c4>, &method_init_adaptor<0x3c5>, &method_init_adaptor<0x3c6>, &method_init_adaptor<0x3c7>,
+ &method_init_adaptor<0x3c8>, &method_init_adaptor<0x3c9>, &method_init_adaptor<0x3ca>, &method_init_adaptor<0x3cb>, &method_init_adaptor<0x3cc>, &method_init_adaptor<0x3cd>, &method_init_adaptor<0x3ce>, &method_init_adaptor<0x3cf>,
+ &method_init_adaptor<0x3d0>, &method_init_adaptor<0x3d1>, &method_init_adaptor<0x3d2>, &method_init_adaptor<0x3d3>, &method_init_adaptor<0x3d4>, &method_init_adaptor<0x3d5>, &method_init_adaptor<0x3d6>, &method_init_adaptor<0x3d7>,
+ &method_init_adaptor<0x3d8>, &method_init_adaptor<0x3d9>, &method_init_adaptor<0x3da>, &method_init_adaptor<0x3db>, &method_init_adaptor<0x3dc>, &method_init_adaptor<0x3dd>, &method_init_adaptor<0x3de>, &method_init_adaptor<0x3df>,
+ &method_init_adaptor<0x3e0>, &method_init_adaptor<0x3e1>, &method_init_adaptor<0x3e2>, &method_init_adaptor<0x3e3>, &method_init_adaptor<0x3e4>, &method_init_adaptor<0x3e5>, &method_init_adaptor<0x3e6>, &method_init_adaptor<0x3e7>,
+ &method_init_adaptor<0x3e8>, &method_init_adaptor<0x3e9>, &method_init_adaptor<0x3ea>, &method_init_adaptor<0x3eb>, &method_init_adaptor<0x3ec>, &method_init_adaptor<0x3ed>, &method_init_adaptor<0x3ee>, &method_init_adaptor<0x3ef>,
+ &method_init_adaptor<0x3f0>, &method_init_adaptor<0x3f1>, &method_init_adaptor<0x3f2>, &method_init_adaptor<0x3f3>, &method_init_adaptor<0x3f4>, &method_init_adaptor<0x3f5>, &method_init_adaptor<0x3f6>, &method_init_adaptor<0x3f7>,
+ &method_init_adaptor<0x3f8>, &method_init_adaptor<0x3f9>, &method_init_adaptor<0x3fa>, &method_init_adaptor<0x3fb>, &method_init_adaptor<0x3fc>, &method_init_adaptor<0x3fd>, &method_init_adaptor<0x3fe>, &method_init_adaptor<0x3ff>,
+};
+
+py_func_ptr_t get_method_init_adaptor (int n)
+{
+ tl_assert (n >= 0 && n < int (sizeof (method_init_adaptors) / sizeof (method_init_adaptors [0])));
+ return method_init_adaptors [n];
+}
+
+}
diff --git a/src/pya/pya/pyaCallables.h b/src/pya/pya/pyaCallables.h
new file mode 100644
index 000000000..f6188b4fe
--- /dev/null
+++ b/src/pya/pya/pyaCallables.h
@@ -0,0 +1,71 @@
+/*
+
+ KLayout Layout Viewer
+ Copyright (C) 2006-2022 Matthias Koefferlein
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+#ifndef _HDR_pyaCallables
+#define _HDR_pyaCallables
+
+#include
+
+#include "pyaCommon.h"
+
+namespace pya
+{
+
+void pya_object_deallocate (PyObject *self);
+int pya_object_init (PyObject * /*self*/, PyObject *args, PyObject *kwds);
+PyObject *pya_object_new (PyTypeObject *type, PyObject * /*args*/, PyObject * /*kwds*/);
+
+PyObject *object_default_ne_impl (PyObject *self, PyObject *args);
+PyObject *object_default_ge_impl (PyObject *self, PyObject *args);
+PyObject *object_default_le_impl (PyObject *self, PyObject *args);
+PyObject *object_default_gt_impl (PyObject *self, PyObject *args);
+PyObject *object_default_deepcopy_impl (PyObject *self, PyObject *args);
+
+typedef PyObject *(*py_func_ptr_t) (PyObject *, PyObject *);
+
+py_func_ptr_t get_method_adaptor (int n);
+py_func_ptr_t get_property_getter_adaptor (int n);
+py_func_ptr_t get_property_setter_adaptor (int n);
+py_func_ptr_t get_method_init_adaptor (int n);
+
+inline void *make_closure (int mid_getter, int mid_setter)
+{
+ size_t g = mid_getter < 0 ? (size_t) 0 : (size_t) mid_getter;
+ size_t s = mid_setter < 0 ? (size_t) 0 : (size_t) mid_setter;
+ return (void *) ((s << 16) | g);
+}
+
+inline unsigned int getter_from_closure (void *closure)
+{
+ return (unsigned int) (size_t (closure) & 0xffff);
+}
+
+inline unsigned int setter_from_closure (void *closure)
+{
+ return (unsigned int) (size_t (closure) >> 16);
+}
+
+PyObject *property_getter_func (PyObject *self, void *closure);
+int property_setter_func (PyObject *self, PyObject *value, void *closure);
+
+}
+
+#endif
diff --git a/src/pya/pya/pyaConvert.cc b/src/pya/pya/pyaConvert.cc
index fb24e5732..066ec3feb 100644
--- a/src/pya/pya/pyaConvert.cc
+++ b/src/pya/pya/pyaConvert.cc
@@ -45,14 +45,14 @@ long python2c_func::operator() (PyObject *rval)
#if PY_MAJOR_VERSION < 3
if (PyInt_Check (rval)) {
return PyInt_AsLong (rval);
- } else
+ } else
#endif
if (PyLong_Check (rval)) {
return PyLong_AsLong (rval);
} else if (PyFloat_Check (rval)) {
return (long) (PyFloat_AsDouble (rval));
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to an integer")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to an integer")));
}
}
@@ -68,14 +68,14 @@ char python2c_func::operator() (PyObject *rval)
#if PY_MAJOR_VERSION < 3
if (PyInt_Check (rval)) {
return char (PyInt_AsLong (rval));
- } else
+ } else
#endif
if (PyLong_Check (rval)) {
return char (PyLong_AsLong (rval));
} else if (PyFloat_Check (rval)) {
return char (PyFloat_AsDouble (rval));
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to a character")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to a character")));
}
}
@@ -85,14 +85,14 @@ unsigned long python2c_func::operator() (PyObject *rval)
#if PY_MAJOR_VERSION < 3
if (PyInt_Check (rval)) {
return PyInt_AsUnsignedLongMask (rval);
- } else
+ } else
#endif
if (PyLong_Check (rval)) {
return PyLong_AsUnsignedLongMask (rval);
} else if (PyFloat_Check (rval)) {
return (unsigned long) (PyFloat_AsDouble (rval));
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to an integer")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to an integer")));
}
}
@@ -102,14 +102,14 @@ long long python2c_func::operator() (PyObject *rval)
#if PY_MAJOR_VERSION < 3
if (PyInt_Check (rval)) {
return PyInt_AsLong (rval);
- } else
+ } else
#endif
if (PyLong_Check (rval)) {
return PyLong_AsLongLong (rval);
} else if (PyFloat_Check (rval)) {
return (long long) (PyFloat_AsDouble (rval));
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to an integer")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to an integer")));
}
}
@@ -119,14 +119,14 @@ unsigned long long python2c_func::operator() (PyObject *rval
#if PY_MAJOR_VERSION < 3
if (PyInt_Check (rval)) {
return PyInt_AsUnsignedLongMask (rval);
- } else
+ } else
#endif
if (PyLong_Check (rval)) {
return PyLong_AsUnsignedLongLongMask (rval);
} else if (PyFloat_Check (rval)) {
return (unsigned long long) (PyFloat_AsDouble (rval));
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to an integer")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to an integer")));
}
}
@@ -138,14 +138,14 @@ __int128 python2c_func<__int128>::operator() (PyObject *rval)
#if PY_MAJOR_VERSION < 3
if (PyInt_Check (rval)) {
return PyInt_AsLong (rval);
- } else
+ } else
#endif
if (PyLong_Check (rval)) {
return PyLong_AsLongLong (rval);
} else if (PyFloat_Check (rval)) {
return PyFloat_AsDouble (rval);
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to an integer")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to an integer")));
}
}
#endif
@@ -156,14 +156,14 @@ double python2c_func::operator() (PyObject *rval)
#if PY_MAJOR_VERSION < 3
if (PyInt_Check (rval)) {
return PyInt_AsLong (rval);
- } else
+ } else
#endif
if (PyLong_Check (rval)) {
return PyLong_AsLongLong (rval);
} else if (PyFloat_Check (rval)) {
return PyFloat_AsDouble (rval);
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to a floating-point value")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to a floating-point value")));
}
}
@@ -173,11 +173,11 @@ std::string python2c_func::operator() (PyObject *rval)
#if PY_MAJOR_VERSION < 3
if (PyString_Check (rval)) {
return std::string (PyString_AsString (rval), PyString_Size (rval));
- } else
+ } else
#else
if (PyBytes_Check (rval)) {
return std::string (PyBytes_AsString (rval), PyBytes_Size (rval));
- } else
+ } else
#endif
if (PyUnicode_Check (rval)) {
PythonRef ba (PyUnicode_AsUTF8String (rval));
@@ -188,7 +188,7 @@ std::string python2c_func::operator() (PyObject *rval)
} else if (PyByteArray_Check (rval)) {
return std::string (PyByteArray_AsString (rval), PyByteArray_Size (rval));
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to a string")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to a string")));
}
}
@@ -224,7 +224,7 @@ std::vector python2c_func >::operator() (PyObject *rval)
Py_ssize_t sz = PyByteArray_Size (rval);
return std::vector (cp, cp + sz);
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to a byte array")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to a byte array")));
}
}
@@ -235,11 +235,11 @@ QByteArray python2c_func::operator() (PyObject *rval)
#if PY_MAJOR_VERSION < 3
if (PyString_Check (rval)) {
return QByteArray (PyString_AsString (rval), PyString_Size (rval));
- } else
+ } else
#else
if (PyBytes_Check (rval)) {
return QByteArray (PyBytes_AsString (rval), PyBytes_Size (rval));
- } else
+ } else
#endif
if (PyUnicode_Check (rval)) {
PythonRef ba (PyUnicode_AsUTF8String (rval));
@@ -250,7 +250,7 @@ QByteArray python2c_func::operator() (PyObject *rval)
} else if (PyByteArray_Check (rval)) {
return QByteArray (PyByteArray_AsString (rval), PyByteArray_Size (rval));
} else {
- throw tl::Exception (tl::to_string (tr ("Value cannot be converted to a byte array")));
+ throw tl::TypeError (tl::to_string (tr ("Value cannot be converted to a byte array")));
}
}
@@ -325,13 +325,13 @@ tl::Variant python2c_func::operator() (PyObject *rval)
return r;
} else {
-
+
const gsi::ClassBase *cls = PythonModule::cls_for_type (Py_TYPE (rval));
if (cls) {
PYAObjectBase *p = PYAObjectBase::from_pyobject (rval);
- // employ the tl::Variant binding capabilities of the Expression binding to derive the
+ // employ the tl::Variant binding capabilities of the Expression binding to derive the
// variant value.
void *obj = p->obj ();
@@ -519,7 +519,7 @@ PyObject *c2python_func::operator() (const tl::Variant &c)
PyDict_SetItem (ret, c2python (i->first), c2python (i->second));
}
return ret;
-
+
} else if (c.is_list ()) {
PyObject *ret = PyList_New (c.get_list ().size ());
@@ -619,4 +619,3 @@ PyObject *c2python_func::operator() (const QString &qs)
#endif
}
-
diff --git a/src/pya/pya/pyaInternal.cc b/src/pya/pya/pyaInternal.cc
new file mode 100644
index 000000000..46ff2c47c
--- /dev/null
+++ b/src/pya/pya/pyaInternal.cc
@@ -0,0 +1,885 @@
+/*
+
+ KLayout Layout Viewer
+ Copyright (C) 2006-2022 Matthias Koefferlein
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+#include
+
+#include "pya.h"
+#include "pyaInternal.h"
+#include "pyaModule.h"
+#include "pyaObject.h"
+
+#include "tlLog.h"
+
+#include
+
+namespace pya
+{
+
+// -------------------------------------------------------------------
+// MethodTableEntry implementation
+
+MethodTableEntry::MethodTableEntry (const std::string &name, bool st, bool prot)
+ : m_name (name), m_is_static (st), m_is_protected (prot), m_is_enabled (true), m_is_init (false), m_fallback_not_implemented (false)
+{ }
+
+const std::string &
+MethodTableEntry::name () const
+{
+ return m_name;
+}
+
+void
+MethodTableEntry::set_name (const std::string &n)
+{
+ m_name = n;
+}
+
+void
+MethodTableEntry::set_enabled (bool en)
+{
+ m_is_enabled = en;
+}
+
+bool
+MethodTableEntry::is_enabled () const
+{
+ return m_is_enabled;
+}
+
+void
+MethodTableEntry::set_fallback_not_implemented (bool f)
+{
+ m_fallback_not_implemented = f;
+}
+
+bool
+MethodTableEntry::fallback_not_implemented () const
+{
+ return m_fallback_not_implemented;
+}
+
+void
+MethodTableEntry::set_init (bool f)
+{
+ m_is_init = f;
+}
+
+bool
+MethodTableEntry::is_init () const
+{
+ return m_is_init;
+}
+
+bool
+MethodTableEntry::is_static () const
+{
+ return m_is_static;
+}
+
+bool
+MethodTableEntry::is_protected () const
+{
+ return m_is_protected;
+}
+
+void
+MethodTableEntry::add (const gsi::MethodBase *m)
+{
+ m_methods.push_back (m);
+}
+
+void
+MethodTableEntry::finish ()
+{
+ // remove duplicate entries in the method list
+ std::vector m = m_methods;
+ std::sort(m.begin (), m.end ());
+ m_methods.assign (m.begin (), std::unique (m.begin (), m.end ()));
+}
+
+MethodTableEntry::method_iterator
+MethodTableEntry::begin () const
+{
+ return m_methods.begin ();
+}
+
+MethodTableEntry::method_iterator
+MethodTableEntry::end () const
+{
+ return m_methods.end ();
+}
+
+// -------------------------------------------------------------------
+// MethodTable implementation
+
+MethodTable::MethodTable (const gsi::ClassBase *cls_decl, PythonModule *module)
+ : m_method_offset (0), m_property_offset (0), mp_cls_decl (cls_decl), mp_module (module)
+{
+ if (cls_decl->base ()) {
+ const MethodTable *base_mt = method_table_by_class (cls_decl->base ());
+ tl_assert (base_mt);
+ m_method_offset = base_mt->top_mid ();
+ m_property_offset = base_mt->top_property_mid ();
+ }
+
+ // signals are translated into the setters and getters
+ for (gsi::ClassBase::method_iterator m = cls_decl->begin_methods (); m != cls_decl->end_methods (); ++m) {
+ if ((*m)->is_signal ()) {
+ for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms (); ++syn) {
+ add_getter (syn->name, *m);
+ add_setter (syn->name, *m);
+ }
+ }
+ }
+
+ // first add getters and setters
+ for (gsi::ClassBase::method_iterator m = cls_decl->begin_methods (); m != cls_decl->end_methods (); ++m) {
+ if (! (*m)->is_callback ()) {
+ for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms (); ++syn) {
+ if (syn->is_getter) {
+ add_getter (syn->name, *m);
+ } else if (syn->is_setter) {
+ add_setter (syn->name, *m);
+ }
+ }
+ }
+ }
+
+ // then add normal methods - on name clash with properties make them a getter
+ for (gsi::ClassBase::method_iterator m = cls_decl->begin_methods (); m != cls_decl->end_methods (); ++m) {
+
+ if (! (*m)->is_callback () && ! (*m)->is_signal ()) {
+
+ bool st = (*m)->is_static ();
+ bool no_args = ((*m)->end_arguments () == (*m)->begin_arguments ());
+
+ for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms (); ++syn) {
+ if (! syn->is_getter && ! syn->is_setter) {
+ if (no_args && is_property_setter (st, syn->name) && ! is_property_getter (st, syn->name)) {
+ add_getter (syn->name, *m);
+ } else if (st && no_args && (isupper (syn->name [0]) || (*m)->is_const ())) {
+ // static methods without arguments which start with a capital letter are treated as constants
+ add_getter (syn->name, *m);
+ } else {
+ add_method (syn->name, *m);
+ }
+ }
+ }
+
+ }
+ }
+
+ // synthesize a getter from is_...? predicates (e.g. is_empty? -> empty getter)
+ for (gsi::ClassBase::method_iterator m = cls_decl->begin_methods (); m != cls_decl->end_methods (); ++m) {
+
+ if (! (*m)->is_callback () && ! (*m)->is_signal ()) {
+
+ bool st = (*m)->is_static ();
+ bool no_args = ((*m)->end_arguments () == (*m)->begin_arguments ());
+
+ for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms (); ++syn) {
+ if (no_args && ! syn->is_getter && ! syn->is_setter && syn->is_predicate && std::string (syn->name, 0, 3) == "is_") {
+ std::string n = std::string (syn->name, 3, std::string::npos);
+ if (is_property_setter (st, n) && ! is_property_getter (st, n)) {
+ add_getter (n, *m);
+ }
+ }
+ }
+
+ }
+
+ }
+}
+
+size_t
+MethodTable::bottom_mid () const
+{
+ return m_method_offset;
+}
+
+size_t
+MethodTable::top_mid () const
+{
+ return m_method_offset + m_table.size ();
+}
+
+size_t
+MethodTable::bottom_property_mid () const
+{
+ return m_property_offset;
+}
+
+size_t
+MethodTable::top_property_mid () const
+{
+ return m_property_offset + m_property_table.size ();
+}
+
+std::pair
+MethodTable::find_method (bool st, const std::string &name) const
+{
+ std::map , size_t>::const_iterator t = m_name_map.find (std::make_pair (st, name));
+ if (t != m_name_map.end ()) {
+ return std::make_pair (true, t->second + m_method_offset);
+ } else {
+ return std::make_pair (false, 0);
+ }
+}
+
+std::pair
+MethodTable::find_property (bool st, const std::string &name) const
+{
+ std::map , size_t>::const_iterator t = m_property_name_map.find (std::make_pair (st, name));
+ if (t != m_property_name_map.end ()) {
+ return std::make_pair (true, t->second + m_property_offset);
+ } else {
+ return std::make_pair (false, 0);
+ }
+}
+
+bool
+MethodTable::is_property_setter (bool st, const std::string &name)
+{
+ std::pair p = find_property (st, name);
+ if (! p.first) {
+ return false;
+ }
+ return (begin_setters (p.second) != end_setters (p.second));
+}
+
+bool
+MethodTable::is_property_getter (bool st, const std::string &name)
+{
+ std::pair p = find_property (st, name);
+ if (! p.first) {
+ return false;
+ }
+ return (begin_getters (p.second) != end_getters (p.second));
+}
+
+/**
+ * @brief Returns true, if the name is a reserved keyword
+ */
+static bool is_reserved_word (const std::string &name)
+{
+ return (name == "and" ||
+ name == "del" ||
+ name == "from" ||
+ name == "not" ||
+ name == "while" ||
+ name == "as" ||
+ name == "elif" ||
+ name == "global" ||
+ name == "or" ||
+ name == "with" ||
+ name == "assert" ||
+ name == "else" ||
+ name == "if" ||
+ name == "pass" ||
+ name == "yield" ||
+ name == "break" ||
+ name == "except" ||
+ name == "import" ||
+ name == "print" ||
+ name == "class" ||
+ name == "exec" ||
+ name == "in" ||
+ name == "raise" ||
+ name == "continue" ||
+ name == "finally" ||
+ name == "is" ||
+ name == "return" ||
+ name == "def" ||
+ name == "for" ||
+ name == "lambda" ||
+ name == "try" ||
+ name == "None");
+}
+
+/**
+ * @brief Extracts the Python name from a generic name
+ *
+ * Returns an empty string if no Python name could be generated.
+ */
+static std::string extract_python_name (const std::string &name)
+{
+ // some operator replacements
+ if (name == "++") {
+ return "inc";
+ } else if (name == "--") {
+ return "dec";
+ } else if (name == "()") {
+ return "call";
+ } else if (name == "!") {
+ return "not";
+ } else if (name == "==") {
+ return "__eq__";
+ } else if (name == "!=") {
+ return "__ne__";
+ } else if (name == "<") {
+ return "__lt__";
+ } else if (name == "<=") {
+ return "__le__";
+ } else if (name == ">") {
+ return "__gt__";
+ } else if (name == ">=") {
+ return "__ge__";
+ } else if (name == "<=>") {
+ return "__cmp__";
+ } else if (name == "+") {
+ return "__add__";
+ } else if (name == "+@") {
+ return "__pos__";
+ } else if (name == "-") {
+ return "__sub__";
+ } else if (name == "-@") {
+ return "__neg__";
+ } else if (name == "/") {
+ #if PY_MAJOR_VERSION < 3
+ return "__div__";
+ #else
+ return "__truediv__";
+ #endif
+ } else if (name == "*" || name == "*!") {
+ return "__mul__";
+ } else if (name == "%") {
+ return "__mod__";
+ } else if (name == "<<") {
+ return "__lshift__";
+ } else if (name == ">>") {
+ return "__rshift__";
+ } else if (name == "~") {
+ return "__invert__";
+ } else if (name == "&") {
+ return "__and__";
+ } else if (name == "|") {
+ return "__or__";
+ } else if (name == "^") {
+ return "__xor__";
+ } else if (name == "+=") {
+ return "__iadd__";
+ } else if (name == "-=") {
+ return "__isub__";
+ } else if (name == "/=") {
+ #if PY_MAJOR_VERSION < 3
+ return "__idiv__";
+ #else
+ return "__itruediv__";
+ #endif
+ } else if (name == "*=") {
+ return "__imul__";
+ } else if (name == "%=") {
+ return "__imod__";
+ } else if (name == "<<=") {
+ return "__ilshift__";
+ } else if (name == ">>=") {
+ return "__irshift__";
+ } else if (name == "&=") {
+ return "__iand__";
+ } else if (name == "|=") {
+ return "__ior__";
+ } else if (name == "^=") {
+ return "__ixor__";
+ } else if (name == "[]") {
+ return "__getitem__";
+ } else if (name == "[]=") {
+ return "__setitem__";
+ } else {
+
+ const char *c = name.c_str ();
+ if (! isalnum (*c) && *c != '_') {
+ return std::string ();
+ }
+
+ // question-mark symbol and trailing = are removed.
+ size_t n = 0;
+ for ( ; *c; ++c) {
+ if (*c == '=' || *c == '?') {
+ if (! c[1]) {
+ if (*c == '=') {
+ // Normally, this method is replaced by an attribute.
+ // If that fails, we prepend a "set_" to make the name unique.
+ return "set_" + std::string (name, 0, n);
+ } else {
+ return std::string (name, 0, n);
+ }
+ } else {
+ return std::string ();
+ }
+ } else if (! isalnum (*c) && *c != '_') {
+ return std::string ();
+ } else {
+ ++n;
+ }
+ }
+
+ return name;
+
+ }
+}
+
+/**
+ * @brief Returns true, if the method with the given name shall fallback to NotImplemented
+ */
+static bool is_method_with_fallback (const std::string &name)
+{
+ if (name == "+") {
+ return true;
+ } else if (name == "-") {
+ return true;
+ } else if (name == "/") {
+ #if PY_MAJOR_VERSION < 3
+ return false;
+ #else
+ return true;
+ #endif
+ } else if (name == "*") {
+ return true;
+ } else if (name == "%") {
+ return true;
+ } else if (name == "<<") {
+ return true;
+ } else if (name == ">>") {
+ return true;
+ } else if (name == "&") {
+ return true;
+ } else if (name == "|") {
+ return true;
+ } else if (name == "^") {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void
+MethodTable::add_method (const std::string &name, const gsi::MethodBase *mb)
+{
+ if (is_reserved_word (name)) {
+
+ // drop non-standard names
+ if (tl::verbosity () >= 20) {
+ tl::warn << tl::to_string (tr ("Class ")) << mp_cls_decl->name () << ": " << tl::to_string (tr ("no Python mapping for method (reserved word) ")) << name;
+ }
+
+ std::string new_name = name + "_";
+
+ add_method_basic (new_name, mb);
+ mp_module->add_python_doc (mb, tl::sprintf (tl::to_string (tr ("This attribute is available as '%s' in Python")), new_name));
+
+ } else if (name == "new" && mb->ret_type ().type () == gsi::T_object && mb->ret_type ().pass_obj ()) {
+
+ add_method_basic (name, mb);
+
+ add_method_basic ("__init__", mb, true /*enabled*/, true /*constructor*/);
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method is the default initializer of the object")));
+
+ } else if (name == "to_s" && mb->compatible_with_num_args (0)) {
+
+ add_method_basic (name, mb);
+
+ // The str method is also routed via the tp_str implementation
+ add_method_basic ("__str__", mb);
+
+#if defined(GSI_ALIAS_INSPECT)
+ // also alias to "__repr__" unless there is an explicit "inspect" method
+ bool alias_inspect = true;
+ for (gsi::ClassBase::method_iterator m = mp_cls_decl->begin_methods (); m != mp_cls_decl->end_methods () && alias_inspect; ++m) {
+ if (! (*m)->is_callback () && ! (*m)->is_signal ()) {
+ for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms () && alias_inspect; ++syn) {
+ if (! syn->is_getter && ! syn->is_setter && syn->name == "inspect") {
+ alias_inspect = false;
+ }
+ }
+ }
+ }
+#else
+ bool alias_inspect = false;
+#endif
+ if (alias_inspect) {
+ add_method_basic ("__repr__", mb);
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method is also available as 'str(object)' and 'repr(object)'")));
+ } else {
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method is also available as 'str(object)'")));
+ }
+
+ } else if (name == "hash" && mb->compatible_with_num_args (0)) {
+
+ // The hash method is also routed via the tp_hash implementation
+ add_method_basic ("__hash__", mb);
+
+ add_method_basic (name, mb);
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method is also available as 'hash(object)'")));
+
+ } else if (name == "inspect" && mb->compatible_with_num_args (0)) {
+
+ // The str method is also routed via the tp_str implementation
+ add_method_basic ("__repr__", mb);
+
+ add_method_basic (name, mb);
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method is also available as 'repr(object)'")));
+
+ } else if (name == "size" && mb->compatible_with_num_args (0)) {
+
+ // The size method is also routed via the sequence methods protocol if there
+ // is a [] function
+ add_method_basic ("__len__", mb);
+
+ add_method_basic (name, mb);
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method is also available as 'len(object)'")));
+
+ } else if (name == "each" && mb->compatible_with_num_args (0) && mb->ret_type ().is_iter ()) {
+
+ // each makes the object iterable
+ add_method_basic ("__iter__", mb);
+
+ add_method_basic (name, mb);
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method enables iteration of the object")));
+
+ } else if (name == "dup" && mb->compatible_with_num_args (0)) {
+
+ // If the object supports the dup method, then it is a good
+ // idea to define the __copy__ and __deepcopy__ method.
+ add_method_basic ("__copy__", mb);
+ add_method_basic ("__deepcopy__", mb);
+
+ add_method_basic (name, mb);
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method also implements '__copy__' and '__deepcopy__'")));
+
+ } else {
+
+ std::string py_name = extract_python_name (name);
+ if (py_name.empty ()) {
+
+ // drop non-standard names
+ if (tl::verbosity () >= 20) {
+ tl::warn << tl::to_string (tr ("Class ")) << mp_cls_decl->name () << ": " << tl::to_string (tr ("no Python mapping for method ")) << name;
+ }
+
+ add_method_basic (name, mb, false);
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method is not available for Python")));
+
+ } else {
+
+ bool fb = is_method_with_fallback (name);
+ add_method_basic (py_name, mb, true, false, fb);
+
+ if (name == "*") {
+ // Supply a commutative multiplication version unless the operator is "*!"
+ add_method_basic ("__rmul__", mb);
+ mp_module->add_python_doc (mb, tl::to_string (tr ("This method also implements '__rmul__'")));
+ }
+
+ }
+
+ }
+}
+
+void
+MethodTable::add_setter (const std::string &name, const gsi::MethodBase *setter)
+{
+ if (is_reserved_word (name)) {
+
+ std::string new_name = name + "_";
+
+ add_setter_basic (new_name, setter);
+ mp_module->add_python_doc (setter, tl::sprintf (tl::to_string (tr ("This member is available as '%s' in Python")), new_name));
+
+ } else {
+ add_setter_basic (name, setter);
+ }
+}
+
+void
+MethodTable::add_setter_basic (const std::string &name, const gsi::MethodBase *setter)
+{
+ bool st = setter->is_static ();
+
+ std::map, size_t>::iterator n = m_property_name_map.find (std::make_pair (st, name));
+ if (n == m_property_name_map.end ()) {
+
+ m_property_name_map.insert (std::make_pair (std::make_pair(st, name), m_property_table.size ()));
+ m_property_table.push_back (std::make_pair (MethodTableEntry (name, st, false), MethodTableEntry (name, st, false)));
+ m_property_table.back ().first.add (setter);
+
+ } else {
+
+ m_property_table [n->second].first.add (setter);
+
+ }
+}
+
+void
+MethodTable::add_getter (const std::string &name, const gsi::MethodBase *getter)
+{
+ if (is_reserved_word (name)) {
+
+ std::string new_name = name + "_";
+
+ add_getter_basic (new_name, getter);
+ mp_module->add_python_doc (getter, tl::sprintf (tl::to_string (tr ("This member is available as '%s' in Python")), new_name));
+
+ } else {
+ add_getter_basic (name, getter);
+ }
+}
+
+void
+MethodTable::add_getter_basic (const std::string &name, const gsi::MethodBase *getter)
+{
+ bool st = getter->is_static ();
+
+ std::map, size_t>::iterator n = m_property_name_map.find (std::make_pair (st, name));
+ if (n == m_property_name_map.end ()) {
+
+ m_property_name_map.insert (std::make_pair (std::make_pair(st, name), m_property_table.size ()));
+ m_property_table.push_back (std::make_pair (MethodTableEntry (name, st, false), MethodTableEntry (name, st, false)));
+ m_property_table.back ().second.add (getter);
+
+ } else {
+
+ m_property_table [n->second].second.add (getter);
+
+ }
+}
+
+bool
+MethodTable::is_enabled (size_t mid) const
+{
+ return m_table [mid - m_method_offset].is_enabled ();
+}
+
+void
+MethodTable::set_enabled (size_t mid, bool en)
+{
+ m_table [mid - m_method_offset].set_enabled (en);
+}
+
+bool
+MethodTable::fallback_not_implemented (size_t mid) const
+{
+ return m_table [mid - m_method_offset].fallback_not_implemented ();
+}
+
+void
+MethodTable::set_fallback_not_implemented (size_t mid, bool f)
+{
+ m_table [mid - m_method_offset].set_fallback_not_implemented (f);
+}
+
+bool
+MethodTable::is_init(size_t mid) const
+{
+ return m_table [mid - m_method_offset].is_init ();
+}
+
+void
+MethodTable::set_init (size_t mid, bool f)
+{
+ m_table [mid - m_method_offset].set_init (f);
+}
+
+bool
+MethodTable::is_static (size_t mid) const
+{
+ return m_table [mid - m_method_offset].is_static ();
+}
+
+bool
+MethodTable::is_protected (size_t mid) const
+{
+ return m_table [mid - m_method_offset].is_protected ();
+}
+
+void
+MethodTable::alias (size_t mid, const std::string &new_name)
+{
+ bool st = is_static (mid);
+ auto nm = m_name_map.find (std::make_pair (st, new_name));
+ tl_assert (nm == m_name_map.end ());
+
+ m_table.push_back (m_table [mid - m_method_offset]);
+ m_table.back ().set_name (new_name);
+ m_name_map.insert (std::make_pair (std::make_pair (st, new_name), m_table.size () - 1 - m_method_offset));
+}
+
+void
+MethodTable::rename (size_t mid, const std::string &new_name)
+{
+ std::string old_name = name (mid);
+ bool st = is_static (mid);
+
+ m_table [mid - m_method_offset].set_name (new_name);
+
+ auto nm = m_name_map.find (std::make_pair (st, old_name));
+ if (nm != m_name_map.end ()) {
+ m_name_map.erase (nm);
+ m_name_map.insert (std::make_pair (std::make_pair (st, new_name), mid));
+ }
+}
+
+const std::string &
+MethodTable::name (size_t mid) const
+{
+ return m_table [mid - m_method_offset].name ();
+}
+
+const std::string &
+MethodTable::property_name (size_t mid) const
+{
+ return m_property_table [mid - m_property_offset].first.name ();
+}
+
+MethodTableEntry::method_iterator
+MethodTable::begin_setters (size_t mid) const
+{
+ return m_property_table[mid - m_property_offset].first.begin ();
+}
+
+MethodTableEntry::method_iterator
+MethodTable::end_setters (size_t mid) const
+{
+ return m_property_table[mid - m_property_offset].first.end ();
+}
+
+MethodTableEntry::method_iterator
+MethodTable::begin_getters (size_t mid) const
+{
+ return m_property_table[mid - m_property_offset].second.begin ();
+}
+
+MethodTableEntry::method_iterator
+MethodTable::end_getters (size_t mid) const
+{
+ return m_property_table[mid - m_property_offset].second.end ();
+}
+
+MethodTableEntry::method_iterator
+MethodTable::begin (size_t mid) const
+{
+ return m_table[mid - m_method_offset].begin ();
+}
+
+MethodTableEntry::method_iterator
+MethodTable::end (size_t mid) const
+{
+ return m_table[mid - m_method_offset].end ();
+}
+
+void
+MethodTable::finish ()
+{
+ for (std::vector::iterator m = m_table.begin (); m != m_table.end (); ++m) {
+ m->finish ();
+ if (m->is_enabled ()) {
+ // disable methods which are also present as properties
+ if (m_property_name_map.find (std::make_pair (m->is_static (), m->name ())) != m_property_name_map.end ()) {
+ m->set_enabled (false);
+ }
+ }
+ }
+ for (std::vector >::iterator m = m_property_table.begin (); m != m_property_table.end (); ++m) {
+ m->first.finish ();
+ m->second.finish ();
+ }
+}
+
+void
+MethodTable::add_method_basic (const std::string &name, const gsi::MethodBase *mb, bool enabled, bool init, bool fallback_not_implemented)
+{
+ bool st = mb->is_static () && ! init;
+
+ std::map, size_t>::iterator n = m_name_map.find (std::make_pair (st, name));
+ if (n == m_name_map.end ()) {
+
+ m_name_map.insert (std::make_pair (std::make_pair (st, name), m_table.size ()));
+ m_table.push_back (MethodTableEntry (name, st, mb->is_protected ()));
+ if (! enabled) {
+ m_table.back ().set_enabled (false);
+ }
+ if (init) {
+ m_table.back ().set_init (true);
+ }
+ if (fallback_not_implemented) {
+ m_table.back ().set_fallback_not_implemented (true);
+ }
+ m_table.back ().add (mb);
+
+ } else {
+
+ if (m_table [n->second].is_protected () != mb->is_protected ()) {
+ tl::warn << "Class " << mp_cls_decl->name () << ": method '" << name << " is both a protected and non-protected";
+ }
+
+ m_table [n->second].add (mb);
+ if (! enabled) {
+ m_table [n->second].set_enabled (false);
+ }
+ if (init) {
+ tl_assert (m_table [n->second].is_init ());
+ }
+ if (fallback_not_implemented) {
+ m_table.back ().set_fallback_not_implemented (true);
+ }
+
+ }
+}
+
+MethodTable *
+MethodTable::method_table_by_class (const gsi::ClassBase *cls_decl)
+{
+ PythonClassClientData *cd = dynamic_cast(cls_decl->data (gsi::ClientIndex::Python));
+ return cd ? &cd->method_table : 0;
+}
+
+// -------------------------------------------------------------------
+// PythonClassClientData implementation
+
+PythonClassClientData::PythonClassClientData (const gsi::ClassBase *_cls, PyTypeObject *_py_type, PyTypeObject *_py_type_static, PythonModule *module)
+ : py_type_object ((PyObject *) _py_type), py_type_object_static ((PyObject *) _py_type_static), method_table (_cls, module)
+{
+ // .. nothing yet ..
+}
+
+PyTypeObject *
+PythonClassClientData::py_type (const gsi::ClassBase &cls_decl, bool as_static)
+{
+ PythonClassClientData *cd = dynamic_cast(cls_decl.data (gsi::ClientIndex::Python));
+ return (PyTypeObject *) (cd ? (as_static ? cd->py_type_object_static.get () : cd->py_type_object.get ()) : 0);
+}
+
+void
+PythonClassClientData::initialize (const gsi::ClassBase &cls_decl, PyTypeObject *py_type, bool as_static)
+{
+ PythonClassClientData *cd = dynamic_cast(cls_decl.data (gsi::ClientIndex::Python));
+ if (cd) {
+ if (as_static) {
+ cd->py_type_object_static = (PyObject *) py_type;
+ } else {
+ cd->py_type_object = (PyObject *) py_type;
+ }
+ } else {
+ cls_decl.set_data (gsi::ClientIndex::Python, new PythonClassClientData (&cls_decl, as_static ? NULL : py_type, as_static ? py_type : NULL));
+ }
+}
+
+}
+
diff --git a/src/pya/pya/pyaInternal.h b/src/pya/pya/pyaInternal.h
new file mode 100644
index 000000000..b2a215c50
--- /dev/null
+++ b/src/pya/pya/pyaInternal.h
@@ -0,0 +1,316 @@
+/*
+
+ KLayout Layout Viewer
+ Copyright (C) 2006-2022 Matthias Koefferlein
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+*/
+
+
+#ifndef _HDR_pyaInternal
+#define _HDR_pyaInternal
+
+#include
+
+#include "pyaCommon.h"
+#include "pyaRefs.h"
+
+#include "gsiClassBase.h"
+
+#include