From 4336b2ba88a749661ef9cd2ce60ebdddd3537574 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 21 Sep 2015 17:05:36 -0500 Subject: [PATCH] Avoid complaining from strlen ` --- C/absmi_insts.h | 2 +- C/adtdefs.c | 50 +- C/agc.c | 1 + C/alloc.c | 12 +- C/amasm.c | 16 +- C/args.c | 8 +- C/arrays.c | 2 +- C/atomic.c | 199 +- C/bignum.c | 12 +- C/blobs.c | 4 +- C/c_interface.c | 8 +- C/cdmgr.c | 1830 +- C/cmppreds.c | 12 +- C/computils.c | 5 +- C/corout.c | 4 +- C/errors.c | 46 +- C/eval.c | 2 +- C/flags.c | 63 +- C/globals.c | 4 + C/grow.c | 2 +- C/inlines.c | 328 +- C/load_dl.c | 6 +- C/load_foreign.c | 10 +- C/modules.c | 19 +- C/parser.c | 17 +- C/qlyw.c | 10 +- C/realpath.c | 178 + C/scanner.c | 91 +- C/signals.c | 10 +- C/stack.c | 1651 + C/stackinfo.c | 1159 + C/stdpreds.c | 5 +- C/text.c | 247 +- C/tracer.c | 30 +- C/utf8.c | 272 - C/write.c | 43 +- CMakeFiles/3.3.1/CMakeCCompiler.cmake | 63 + CMakeFiles/3.3.1/CMakeCXXCompiler.cmake | 64 + .../3.3.1/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 4368 bytes .../3.3.1/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 4392 bytes CMakeFiles/3.3.1/CMakeSystem.cmake | 15 + .../3.3.1/CompilerIdC/CMakeCCompilerId.c | 508 + CMakeFiles/3.3.1/CompilerIdC/a.out | Bin 0 -> 8600 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 498 + CMakeFiles/3.3.1/CompilerIdCXX/a.out | Bin 0 -> 8632 bytes CMakeFiles/CheckTypeSize/CELLSIZE.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/CELLSIZE.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_DOUBLE.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_DOUBLE.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_FLOAT.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_FLOAT.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_INT.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_INT.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_INT_P.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_INT_P.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_LONG.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_LONG.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_LONG_INT.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_LONG_INT.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG.c | 40 + .../CheckTypeSize/SIZEOF_LONG_LONG_INT.bin | Bin 0 -> 8448 bytes .../CheckTypeSize/SIZEOF_LONG_LONG_INT.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_SHORT_INT.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_SHORT_INT.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_VOIDP.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_VOIDP.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_VOID_P.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_VOID_P.c | 40 + CMakeFiles/CheckTypeSize/SIZEOF_WCHAR_T.bin | Bin 0 -> 8448 bytes CMakeFiles/CheckTypeSize/SIZEOF_WCHAR_T.c | 40 + CMakeFiles/cmake.check_cache | 1 + CMakeFiles/feature_tests.bin | Bin 0 -> 8480 bytes CMakeFiles/feature_tests.c | 34 + CMakeFiles/feature_tests.cxx | 405 + CMakeFiles/git-data/HEAD | 1 + CMakeFiles/git-data/grabRef.cmake | 43 + CMakeFiles/git-data/head-ref | 1 + CMakeLists.txt | 3346 +- CMakeLists.txt.user | 401 + .../CMakeDirectoryInformation.cmake | 16 + CXX/CMakeFiles/Yap++.dir/DependInfo.cmake | 40 + CXX/CMakeFiles/Yap++.dir/link.txt | 1 + CXX/CMakeFiles/progress.marks | 1 + CXX/yapi.cpp | 10 +- CXX/yapt.hh | 2 +- ChangeLog | 1 + FindPackageLog.txt | 35 + GitSHA1.c | 2 + H/Atoms.h | 7 +- H/TermExt.h | 37 +- H/YapAppliedOpcodes.h | 418 + H/YapFlags.h | 8 +- H/YapGFlagInfo.h | 8 +- H/YapTags.h | 4 +- H/YapText.h | 187 +- H/Yapproto.h | 20 +- H/Yatom.h | 27 +- H/absmi-switch.h | 120 + H/absmi-threaded.h | 201 + H/absmi-traced.h | 138 + H/absmi.h | 7 - H/amidefs.h | 3 +- H/amiops.h | 2 +- H/clause.h | 31 +- H/dglobals.h | 6 +- H/dlocals.h | 8 +- H/hglobals.h | 6 +- H/hlocals.h | 7 +- H/iatoms.h | 17 + H/iglobals.h | 6 +- H/ilocals.h | 7 +- H/pl-utf8.h | 82 - H/ratoms.h | 17 + H/rglobals.h | 6 +- H/rlocals.h | 7 +- H/tatoms.h | 50 + ID | Bin 0 -> 2162323 bytes JIT/HPP/#PassPrinters.hpp# | 183 + JIT/HPP/traced_absmi_insts.i | 14985 +++++ JIT/a.sh | 117 + Makefile.am | 19 + NEWS | 1 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/libOPTYap.dir/C.includecache | 838 + .../CMakeFiles/libOPTYap.dir/DependInfo.cmake | 50 + .../CMakeFiles/libOPTYap.dir/depend.internal | 832 + OPTYap/CMakeFiles/progress.marks | 1 + README | 1 + cmake/FindR.cmake | 1 + cmake/FindReadline.cmake | 10 +- cmake/Sources.cmake | 2 +- commands | 15412 +++++ comments.yap | 15434 ++++++ compile_commands.json | 892 + .../main.moc | 132 + .../moc_mainwindow.cpp | 89 + .../ui_mainwindow.h | 69 + .../untitled.app/Contents/Info.plist | 22 + .../untitled.app/Contents/MacOS/untitled | Bin 0 -> 49260 bytes .../untitled.app/Contents/PkgInfo | 1 + .../Contents/Resources/empty.lproj | 0 console/Qt/qtyap.cpp | 37 + console/Qt/untitled/untitled.pro.user | 276 + .../CMakeDirectoryInformation.cmake | 16 + console/terminal/CMakeFiles/progress.marks | 1 + .../CMakeFiles/qtyap.dir/DependInfo.cmake | 57 + .../terminal/CMakeFiles/qtyap.dir/link.txt | 1 + .../qtyap_automoc.dir/AutogenInfo.cmake | 26 + .../qtyap_automoc.dir/DependInfo.cmake | 8 + console/terminal/terminal.qrc.depends | 9 + css3deps.rdf | 144 + customdoxygen.css | 1445 + debug.txt | 96 + depcomp | 1 + docs/LOG | 34 + docs/LOGE | 1 + docs/abn_tree.css | 121 + docs/abn_tree_directive.coffee | 2740 + docs/abn_tree_directive.js | 492 + docs/angular.treeview.css | 56 + docs/angular.treeview.js | 98 + docs/bootstrap-treenav.js | 1207 + docs/builtins.md | 0 docs/dist/css/bootstrap-theme.css | 457 + docs/dist/css/bootstrap-theme.css.map | 1 + docs/dist/css/bootstrap-theme.min.css | 5 + docs/dist/css/bootstrap.css | 6358 +++ docs/dist/css/bootstrap.css.map | 1 + docs/dist/css/bootstrap.min.css | 5 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes docs/dist/js/bootstrap.js | 2276 + docs/dist/js/bootstrap.min.js | 7 + docs/dist/js/npm.js | 13 + docs/download.md | 0 docs/doxtest.rc | 2328 + docs/extensions.md | 0 docs/file.png | Bin 0 -> 263 bytes docs/first/footerFile | 21 + docs/first/headerFile | 55 + docs/first/styleSheetFile | 1440 + docs/fix_md | 36 + docs/fli.md | 0 docs/folder-closed.png | Bin 0 -> 281 bytes docs/folder.png | Bin 0 -> 289 bytes docs/install.md | 0 docs/layout.xml | 1501 + docs/new_stylesheet.css | 1439 + docs/packages.md | 0 docs/run.md | 191 + docs/scan | 99 + docs/swi.md | 0 editors/Prolog.xlangspec | 261 + endBodyLine | 0 example.py | 14 + exports.yap | 3141 ++ fetchatgs | 1 + include/SWI-Prolog.h | 3 + include/YapError.h | 3 + include/pl-types.h | 48 + install_manifest.txt | 1 + jhc | 192 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/library.dir/DependInfo.cmake | 8 + library/CMakeFiles/progress.marks | 1 + library/bdd2.dot | 889 + .../CMakeDirectoryInformation.cmake | 16 + library/clp/CMakeList.txt | 13 + library/dialect/#swi.yap# | 324 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/dialects.dir/DependInfo.cmake | 8 + library/dialect/CMakeFiles/progress.marks | 1 + library/dialect/bprolog/fli/CMakeLists.txt | 9 + .../CMakeDirectoryInformation.cmake | 16 + library/dialect/swi/CMakeFiles/progress.marks | 1 + library/dialect/swi/fli/CMakeLists.txt | 25 + library/dialect/swi/fli/swi.c | 131 +- library/dialect/swi/os/CMakeLists.txt | 68 + .../CMakeDirectoryInformation.cmake | 16 + library/lammpi/CMakeFiles/progress.marks | 1 + .../CMakeFiles/yap_mpi.dir/DependInfo.cmake | 41 + .../lammpi/CMakeFiles/yap_mpi.dir/link.txt | 1 + library/lammpi/examples/atoms.yap | 46 + library/lammpi/examples/run_atoms | 14 + library/maplist.yap | 1 + .../CMakeDirectoryInformation.cmake | 16 + library/matlab/CMakeFiles/progress.marks | 1 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/matrix.dir/DependInfo.cmake | 38 + library/matrix/CMakeFiles/matrix.dir/link.txt | 1 + library/matrix/CMakeFiles/progress.marks | 1 + .../CMakeDirectoryInformation.cmake | 16 + library/mpi/CMakeFiles/progress.marks | 1 + .../CMakeDirectoryInformation.cmake | 16 + library/random/CMakeFiles/progress.marks | 1 + .../yap_random.dir/DependInfo.cmake | 38 + .../random/CMakeFiles/yap_random.dir/link.txt | 1 + .../CMakeDirectoryInformation.cmake | 16 + library/regex/CMakeFiles/progress.marks | 1 + .../CMakeFiles/regexp.dir/DependInfo.cmake | 38 + library/regex/CMakeFiles/regexp.dir/link.txt | 1 + .../CMakeDirectoryInformation.cmake | 16 + library/rltree/CMakeFiles/progress.marks | 1 + .../CMakeFiles/yap_rl.dir/DependInfo.cmake | 39 + library/rltree/CMakeFiles/yap_rl.dir/link.txt | 1 + .../CMakeDirectoryInformation.cmake | 16 + library/system/CMakeFiles/progress.marks | 1 + .../CMakeFiles/sys.dir/DependInfo.cmake | 38 + library/system/CMakeFiles/sys.dir/link.txt | 1 + library/tries/#Makefile.in# | 81 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/itries.dir/DependInfo.cmake | 40 + library/tries/CMakeFiles/itries.dir/link.txt | 1 + library/tries/CMakeFiles/progress.marks | 1 + .../CMakeFiles/tries.dir/DependInfo.cmake | 40 + library/tries/CMakeFiles/tries.dir/link.txt | 1 + misc/ATOMS | 17 + misc/LOCALS | 1 + misc/analysis/graphs.yap | 161 + misc/analysis/load.yap | 704 + misc/android | 71 + misc/prolog.el | 4159 ++ misc/tests | 3 + misc/yapu | 122 + missing | 1 + new_stylesheet.css | 1440 + os/CMakeFiles/CMakeDirectoryInformation.cmake | 16 + os/CMakeFiles/libYAPOs.dir/C.includecache | 1352 + os/CMakeFiles/libYAPOs.dir/DependInfo.cmake | 59 + os/CMakeFiles/libYAPOs.dir/depend.internal | 1426 + os/CMakeFiles/progress.marks | 1 + os/CMakeLists.txt | 3 - os/charsio.c | 8 +- os/chartypes.c | 41 +- os/chartypes.yap | 526 + os/console.c | 11 +- os/format.c | 1031 +- os/iopreds.c | 257 +- os/iopreds.h | 3 + os/readline.c | 2 +- os/readterm.c | 269 +- os/readutil.c | 24 +- os/stream_wget_to_utf8 | 264 + os/streams.c | 1457 +- os/utf8proc/CMakeLists.txt | 36 + os/writeterm.c | 52 +- os/yapio.h | 4 +- .../CMakeDirectoryInformation.cmake | 16 + packages/CLPBN/CMakeFiles/progress.marks | 1 + packages/CLPBN/CMakeLists.txt | 105 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/HorusCli.dir/DependInfo.cmake | 40 + .../horus/CMakeFiles/HorusCli.dir/link.txt | 1 + .../CMakeFiles/horus.dir/DependInfo.cmake | 64 + .../CLPBN/horus/CMakeFiles/horus.dir/link.txt | 1 + .../CLPBN/horus/CMakeFiles/progress.marks | 1 + packages/CLPBN/horus/CMakeLists.txt | 79 + packages/CLPBN/horus/HorusYap.cpp | 549 +- packages/Dialect.defs | 75 + packages/Makefile.defs | 74 + packages/ProbLog/#problog_lbdd.yap# | 52 + .../CMakeDirectoryInformation.cmake | 16 + packages/ProbLog/CMakeFiles/progress.marks | 1 + packages/ProbLog/CMakeLists.txt | 65 + .../output/,_query_1_cluster_1 | 7 + .../output/,_query_1_cluster_1.dot | 7 + .../ProbLog/problog_examples/output/out.dat | 26 + packages/ac_swi_c.m4 | 10 + .../bdd/CMakeFiles/cudd.dir/DependInfo.cmake | 40 + packages/bdd/CMakeFiles/cudd.dir/link.txt | 1 + packages/bdd/CMakeFiles/progress.marks | 1 + packages/bdd/config.h.in | 19 + packages/bdd/cudd.xx | 904 + packages/bdd/cudd_config.h | 32 + packages/bdd/cudd_config.h.in | 3 + .../CMakeDirectoryInformation.cmake | 16 + .../Problogbdd.dir/DependInfo.cmake | 44 + .../CMakeFiles/Problogbdd.dir/link.txt | 1 + .../bdd/simplecudd/CMakeFiles/progress.marks | 1 + packages/bdd/simplecudd/LICENSE | 182 + packages/bdd/simplecudd/Makefile.in | 68 + packages/bdd/simplecudd/general.h | 209 + packages/bdd/simplecudd/simplecudd.c | 7 +- .../CMakeDirectoryInformation.cmake | 16 + .../Problogbdd-Lfi.dir/DependInfo.cmake | 48 + .../CMakeFiles/Problogbdd-Lfi.dir/link.txt | 1 + .../simplecudd_lfi/CMakeFiles/progress.marks | 1 + packages/bdd/simplecudd_lfi/iqueue.h | 66 + packages/bdd/simplecudd_lfi/simplecudd.c | 1250 +- packages/cplint/slipcover/#slipcover.pl# | 1351 + .../CMakeDirectoryInformation.cmake | 16 + .../gecode_yap.dir/DependInfo.cmake | 40 + .../gecode/CMakeFiles/gecode_yap.dir/link.txt | 1 + .../CMakeFiles/gecodeyap.dir/DependInfo.cmake | 8 + packages/gecode/CMakeFiles/progress.marks | 1 + packages/myddas/#MyddasProto.h# | 79 + packages/myddas/#example# | 25 + packages/myddas/#myddas_initialization.c# | 117 + packages/myddas/#myddas_mysql.c# | 725 + packages/myddas/#myddas_util.c# | 405 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/myddas.dir/DependInfo.cmake | 50 + .../myddas/CMakeFiles/myddas.dir/link.txt | 1 + .../CMakeFiles/plmyddas.dir/DependInfo.cmake | 8 + packages/myddas/CMakeFiles/progress.marks | 1 + packages/myddas/example | 25 + .../QCubed.png | Bin 0 -> 8380 bytes .../code.css | 164 + .../ga.js | 66 + .../jquery.js | 96 + .../search.js | 62 + .../style.css | 96 + .../trac(1).css | 121 + .../trac.css | 576 + .../trac.js | 75 + .../trac_logo_mini.png | Bin 0 -> 689 bytes packages/myddas/examples/gutenberg.jpg | Bin 0 -> 110561 bytes packages/myddas/examples/postgre.sql | 187 + packages/myddas/examples/postgres.yap | 0 packages/myddas/examples/postgres_init.sql | 187 + packages/myddas/myddas_postgres.c | 2 +- packages/myddas/myddas_postgres.cc | 798 + packages/myddas/myddas_sqllight.c | 593 + packages/myddas/pl/#myddas_postgres.ypp# | 248 + packages/myddas/pl/#myddas_prolog2sql.ypp# | 1384 + packages/myddas/pl/myddas_sqlite.ypp | 216 + packages/myddas/pl/parameters.yap | 151 + packages/myddas/sqlite.c | 700 + packages/prosqlite/examples/predicated.pl | 104 + packages/prosqlite/examples/simple.pl | 59 + packages/prosqlite/examples/uniprot.pl | 152 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/libpython.dir/DependInfo.cmake | 39 + .../python/CMakeFiles/libpython.dir/link.txt | 1 + packages/python/CMakeFiles/progress.marks | 1 + packages/python/python.c | 747 +- packages/python/python.pl | 154 +- .../CMakeDirectoryInformation.cmake | 16 + packages/swig/CMakeFiles/progress.marks | 1 + packages/swig/android/#JavaYap.java# | 267 + packages/swig/android/jni/Applicatio.mk | 13 + packages/swig/android/jni/sqlite/Makefile.in | 82 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/JavaYAP.dir/DependInfo.cmake | 8 + .../JavaYAP.dir/java_class_filelist | 0 .../java/CMakeFiles/JavaYAP.dir/java_sources | 1 + .../CMakeFiles/Native.dir/DependInfo.cmake | 41 + .../swig/java/CMakeFiles/Native.dir/link.txt | 1 + .../CMakeFiles/NativeJar.dir/DependInfo.cmake | 8 + .../NativeJar.dir/java_class_filelist | 0 packages/swig/java/CMakeFiles/progress.marks | 1 + packages/swig/js/CMakeLists.txt | 94 + .../CMakeDirectoryInformation.cmake | 16 + .../swig/python/CMakeFiles/progress.marks | 1 + packages/swig/python/yap.py | 362 + packages/swig/python/yap.pyc | Bin 0 -> 29612 bytes packages/swig/python/yap_wrap.c | 8569 +++ pages | 110 + patch | 20 + pl/CMakeFiles/CMakeDirectoryInformation.cmake | 16 + pl/CMakeFiles/progress.marks | 1 + .../startup.yss.dir/DependInfo.cmake | 8 + pl/a | 108 + pl/absf.yap | 903 +- pl/arith.yap | 25 +- pl/boot.yap | 82 +- pl/consult.yap | 4 +- pl/debug.yap | 94 +- pl/error.yap | 223 + pl/errors.yap | 21 +- pl/hacks.yap | 16 +- pl/init.yap | 23 +- pl/messages.yap | 220 +- pl/modules.yap | 16 +- pl/pl | 71 + pl/protect.yap | 2 +- pl/rev | 9 + pl/undefined.yap | 21 +- pl/yio.yap | 2 +- start | 1 + .../CMakeDirectoryInformation.cmake | 16 + swi/library/CMakeFiles/progress.marks | 1 + swi/library/packages.yap | 24 + swi/library/shlib.pl | 4 + t | 4 + test-driver | 1 + test/CTestTestfile.cmake | 7 + test/elisp/CTestTestfile.cmake | 8 + text.cpp | 268 + tmp/bads | 340 + tmp/comments.yap | 15434 ++++++ tmp/foreigns.c | 1544 + tmp/foreigns.yap | 46302 ++++++++++++++++ tmp/pages | 110 + untitled.txt | 17 + utf8proc/CMakeLists.txt | 40 + utf8proc/Doxyfile | 1528 + utf8proc/LICENSE.md | 93 + utf8proc/NEWS.md | 217 + utf8proc/README.md | 67 + utf8proc/appveyor.yml | 36 + utf8proc/bench/bench.c | 56 + utf8proc/bench/icu.c | 61 + utf8proc/bench/unistring.c | 60 + utf8proc/bench/util.c | 39 + utf8proc/bench/util.h | 22 + utf8proc/data/charwidths.jl | 191 + utf8proc/data/data_generator.rb | 327 + utf8proc/lump.md | 27 + utf8proc/same | 1 + utf8proc/test/case.c | 50 + utf8proc/test/charwidth.c | 71 + utf8proc/test/graphemetest.c | 74 + utf8proc/test/iterate.c | 160 + utf8proc/test/normtest.c | 64 + utf8proc/test/printproperty.c | 51 + utf8proc/test/tests.h | 54 + utf8proc/test/valid.c | 41 + utf8proc/utf8proc.c | 642 + utf8proc/utf8proc.h | 596 + utf8proc/utf8proc_data.c | 16758 ++++++ utf8proc/utils.cmake | 20 + x | 0 x.plpushd | 0 y | 61 + z.md | 17 + 469 files changed, 207364 insertions(+), 9193 deletions(-) create mode 100644 C/realpath.c create mode 100644 C/stack.c create mode 100644 C/stackinfo.c delete mode 100644 C/utf8.c create mode 100644 CMakeFiles/3.3.1/CMakeCCompiler.cmake create mode 100644 CMakeFiles/3.3.1/CMakeCXXCompiler.cmake create mode 100755 CMakeFiles/3.3.1/CMakeDetermineCompilerABI_C.bin create mode 100755 CMakeFiles/3.3.1/CMakeDetermineCompilerABI_CXX.bin create mode 100644 CMakeFiles/3.3.1/CMakeSystem.cmake create mode 100644 CMakeFiles/3.3.1/CompilerIdC/CMakeCCompilerId.c create mode 100755 CMakeFiles/3.3.1/CompilerIdC/a.out create mode 100644 CMakeFiles/3.3.1/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 CMakeFiles/3.3.1/CompilerIdCXX/a.out create mode 100755 CMakeFiles/CheckTypeSize/CELLSIZE.bin create mode 100644 CMakeFiles/CheckTypeSize/CELLSIZE.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_DOUBLE.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_DOUBLE.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_FLOAT.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_FLOAT.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_INT.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_INT.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_INT_P.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_INT_P.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_LONG.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_LONG.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_LONG_INT.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_LONG_INT.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG_INT.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG_INT.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_SHORT_INT.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_SHORT_INT.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_VOIDP.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_VOIDP.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_VOID_P.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_VOID_P.c create mode 100755 CMakeFiles/CheckTypeSize/SIZEOF_WCHAR_T.bin create mode 100644 CMakeFiles/CheckTypeSize/SIZEOF_WCHAR_T.c create mode 100644 CMakeFiles/cmake.check_cache create mode 100755 CMakeFiles/feature_tests.bin create mode 100644 CMakeFiles/feature_tests.c create mode 100644 CMakeFiles/feature_tests.cxx create mode 100644 CMakeFiles/git-data/HEAD create mode 100644 CMakeFiles/git-data/grabRef.cmake create mode 100644 CMakeFiles/git-data/head-ref create mode 100644 CMakeLists.txt.user create mode 100644 CXX/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 CXX/CMakeFiles/Yap++.dir/DependInfo.cmake create mode 100644 CXX/CMakeFiles/Yap++.dir/link.txt create mode 100644 CXX/CMakeFiles/progress.marks create mode 100644 ChangeLog create mode 100644 FindPackageLog.txt create mode 100644 GitSHA1.c create mode 100644 H/YapAppliedOpcodes.h create mode 100644 H/absmi-switch.h create mode 100644 H/absmi-threaded.h create mode 100644 H/absmi-traced.h delete mode 100644 H/pl-utf8.h create mode 100644 ID create mode 100644 JIT/HPP/#PassPrinters.hpp# create mode 100644 JIT/HPP/traced_absmi_insts.i create mode 100644 JIT/a.sh create mode 100644 Makefile.am create mode 100644 NEWS create mode 100644 OPTYap/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 OPTYap/CMakeFiles/libOPTYap.dir/C.includecache create mode 100644 OPTYap/CMakeFiles/libOPTYap.dir/DependInfo.cmake create mode 100644 OPTYap/CMakeFiles/libOPTYap.dir/depend.internal create mode 100644 OPTYap/CMakeFiles/progress.marks create mode 100644 README create mode 100644 commands create mode 100644 comments.yap create mode 100644 compile_commands.json create mode 100644 console/Qt/build-untitled-Desktop_Qt_5_4_2_clang_64bit-Debug/main.moc create mode 100644 console/Qt/build-untitled-Desktop_Qt_5_4_2_clang_64bit-Debug/moc_mainwindow.cpp create mode 100644 console/Qt/build-untitled-Desktop_Qt_5_4_2_clang_64bit-Debug/ui_mainwindow.h create mode 100644 console/Qt/build-untitled-Desktop_Qt_5_4_2_clang_64bit-Debug/untitled.app/Contents/Info.plist create mode 100755 console/Qt/build-untitled-Desktop_Qt_5_4_2_clang_64bit-Debug/untitled.app/Contents/MacOS/untitled create mode 100644 console/Qt/build-untitled-Desktop_Qt_5_4_2_clang_64bit-Debug/untitled.app/Contents/PkgInfo create mode 100644 console/Qt/build-untitled-Desktop_Qt_5_4_2_clang_64bit-Debug/untitled.app/Contents/Resources/empty.lproj create mode 100644 console/Qt/qtyap.cpp create mode 100644 console/Qt/untitled/untitled.pro.user create mode 100644 console/terminal/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 console/terminal/CMakeFiles/progress.marks create mode 100644 console/terminal/CMakeFiles/qtyap.dir/DependInfo.cmake create mode 100644 console/terminal/CMakeFiles/qtyap.dir/link.txt create mode 100644 console/terminal/CMakeFiles/qtyap_automoc.dir/AutogenInfo.cmake create mode 100644 console/terminal/CMakeFiles/qtyap_automoc.dir/DependInfo.cmake create mode 100644 console/terminal/terminal.qrc.depends create mode 100644 css3deps.rdf create mode 100644 customdoxygen.css create mode 100644 debug.txt create mode 120000 depcomp create mode 100644 docs/LOG create mode 100644 docs/LOGE create mode 100644 docs/abn_tree.css create mode 100644 docs/abn_tree_directive.coffee create mode 100644 docs/abn_tree_directive.js create mode 100644 docs/angular.treeview.css create mode 100644 docs/angular.treeview.js create mode 100644 docs/bootstrap-treenav.js create mode 100644 docs/builtins.md create mode 100755 docs/dist/css/bootstrap-theme.css create mode 100755 docs/dist/css/bootstrap-theme.css.map create mode 100755 docs/dist/css/bootstrap-theme.min.css create mode 100755 docs/dist/css/bootstrap.css create mode 100755 docs/dist/css/bootstrap.css.map create mode 100755 docs/dist/css/bootstrap.min.css create mode 100755 docs/dist/fonts/glyphicons-halflings-regular.eot create mode 100755 docs/dist/fonts/glyphicons-halflings-regular.svg create mode 100755 docs/dist/fonts/glyphicons-halflings-regular.ttf create mode 100755 docs/dist/fonts/glyphicons-halflings-regular.woff create mode 100755 docs/dist/js/bootstrap.js create mode 100755 docs/dist/js/bootstrap.min.js create mode 100755 docs/dist/js/npm.js create mode 100644 docs/download.md create mode 100644 docs/doxtest.rc create mode 100644 docs/extensions.md create mode 100644 docs/file.png create mode 100644 docs/first/footerFile create mode 100644 docs/first/headerFile create mode 100644 docs/first/styleSheetFile create mode 100644 docs/fix_md create mode 100644 docs/fli.md create mode 100644 docs/folder-closed.png create mode 100644 docs/folder.png create mode 100644 docs/install.md create mode 100644 docs/layout.xml create mode 100644 docs/new_stylesheet.css create mode 100644 docs/packages.md create mode 100644 docs/run.md create mode 100644 docs/scan create mode 100644 docs/swi.md create mode 100644 editors/Prolog.xlangspec create mode 100644 endBodyLine create mode 100644 example.py create mode 100644 exports.yap create mode 100644 fetchatgs create mode 100644 include/pl-types.h create mode 100644 install_manifest.txt create mode 100644 jhc create mode 100644 library/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/CMakeFiles/library.dir/DependInfo.cmake create mode 100644 library/CMakeFiles/progress.marks create mode 100644 library/bdd2.dot create mode 100644 library/clp/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/clp/CMakeList.txt create mode 100644 library/dialect/#swi.yap# create mode 100644 library/dialect/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/dialect/CMakeFiles/dialects.dir/DependInfo.cmake create mode 100644 library/dialect/CMakeFiles/progress.marks create mode 100644 library/dialect/bprolog/fli/CMakeLists.txt create mode 100644 library/dialect/swi/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/dialect/swi/CMakeFiles/progress.marks create mode 100644 library/dialect/swi/fli/CMakeLists.txt create mode 100644 library/dialect/swi/os/CMakeLists.txt create mode 100644 library/lammpi/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/lammpi/CMakeFiles/progress.marks create mode 100644 library/lammpi/CMakeFiles/yap_mpi.dir/DependInfo.cmake create mode 100644 library/lammpi/CMakeFiles/yap_mpi.dir/link.txt create mode 100644 library/lammpi/examples/atoms.yap create mode 100644 library/lammpi/examples/run_atoms create mode 100644 library/matlab/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/matlab/CMakeFiles/progress.marks create mode 100644 library/matrix/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/matrix/CMakeFiles/matrix.dir/DependInfo.cmake create mode 100644 library/matrix/CMakeFiles/matrix.dir/link.txt create mode 100644 library/matrix/CMakeFiles/progress.marks create mode 100644 library/mpi/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/mpi/CMakeFiles/progress.marks create mode 100644 library/random/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/random/CMakeFiles/progress.marks create mode 100644 library/random/CMakeFiles/yap_random.dir/DependInfo.cmake create mode 100644 library/random/CMakeFiles/yap_random.dir/link.txt create mode 100644 library/regex/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/regex/CMakeFiles/progress.marks create mode 100644 library/regex/CMakeFiles/regexp.dir/DependInfo.cmake create mode 100644 library/regex/CMakeFiles/regexp.dir/link.txt create mode 100644 library/rltree/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/rltree/CMakeFiles/progress.marks create mode 100644 library/rltree/CMakeFiles/yap_rl.dir/DependInfo.cmake create mode 100644 library/rltree/CMakeFiles/yap_rl.dir/link.txt create mode 100644 library/system/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/system/CMakeFiles/progress.marks create mode 100644 library/system/CMakeFiles/sys.dir/DependInfo.cmake create mode 100644 library/system/CMakeFiles/sys.dir/link.txt create mode 100644 library/tries/#Makefile.in# create mode 100644 library/tries/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 library/tries/CMakeFiles/itries.dir/DependInfo.cmake create mode 100644 library/tries/CMakeFiles/itries.dir/link.txt create mode 100644 library/tries/CMakeFiles/progress.marks create mode 100644 library/tries/CMakeFiles/tries.dir/DependInfo.cmake create mode 100644 library/tries/CMakeFiles/tries.dir/link.txt create mode 100644 misc/analysis/graphs.yap create mode 100644 misc/analysis/load.yap create mode 100644 misc/android create mode 100644 misc/prolog.el create mode 100644 misc/tests create mode 100755 misc/yapu create mode 120000 missing create mode 100644 new_stylesheet.css create mode 100644 os/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 os/CMakeFiles/libYAPOs.dir/C.includecache create mode 100644 os/CMakeFiles/libYAPOs.dir/DependInfo.cmake create mode 100644 os/CMakeFiles/libYAPOs.dir/depend.internal create mode 100644 os/CMakeFiles/progress.marks create mode 100644 os/chartypes.yap create mode 100644 os/stream_wget_to_utf8 create mode 100644 os/utf8proc/CMakeLists.txt create mode 100644 packages/CLPBN/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/CLPBN/CMakeFiles/progress.marks create mode 100644 packages/CLPBN/CMakeLists.txt create mode 100644 packages/CLPBN/horus/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/CLPBN/horus/CMakeFiles/HorusCli.dir/DependInfo.cmake create mode 100644 packages/CLPBN/horus/CMakeFiles/HorusCli.dir/link.txt create mode 100644 packages/CLPBN/horus/CMakeFiles/horus.dir/DependInfo.cmake create mode 100644 packages/CLPBN/horus/CMakeFiles/horus.dir/link.txt create mode 100644 packages/CLPBN/horus/CMakeFiles/progress.marks create mode 100644 packages/CLPBN/horus/CMakeLists.txt create mode 100644 packages/Dialect.defs create mode 100644 packages/Makefile.defs create mode 100644 packages/ProbLog/#problog_lbdd.yap# create mode 100644 packages/ProbLog/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/ProbLog/CMakeFiles/progress.marks create mode 100644 packages/ProbLog/CMakeLists.txt create mode 100644 packages/ProbLog/problog_examples/output/,_query_1_cluster_1 create mode 100644 packages/ProbLog/problog_examples/output/,_query_1_cluster_1.dot create mode 100644 packages/ProbLog/problog_examples/output/out.dat create mode 100644 packages/ac_swi_c.m4 create mode 100644 packages/bdd/CMakeFiles/cudd.dir/DependInfo.cmake create mode 100644 packages/bdd/CMakeFiles/cudd.dir/link.txt create mode 100644 packages/bdd/CMakeFiles/progress.marks create mode 100644 packages/bdd/config.h.in create mode 100644 packages/bdd/cudd.xx create mode 100644 packages/bdd/cudd_config.h create mode 100644 packages/bdd/cudd_config.h.in create mode 100644 packages/bdd/simplecudd/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/bdd/simplecudd/CMakeFiles/Problogbdd.dir/DependInfo.cmake create mode 100644 packages/bdd/simplecudd/CMakeFiles/Problogbdd.dir/link.txt create mode 100644 packages/bdd/simplecudd/CMakeFiles/progress.marks create mode 100644 packages/bdd/simplecudd/LICENSE create mode 100755 packages/bdd/simplecudd/Makefile.in create mode 100644 packages/bdd/simplecudd/general.h create mode 100644 packages/bdd/simplecudd_lfi/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/bdd/simplecudd_lfi/CMakeFiles/Problogbdd-Lfi.dir/DependInfo.cmake create mode 100644 packages/bdd/simplecudd_lfi/CMakeFiles/Problogbdd-Lfi.dir/link.txt create mode 100644 packages/bdd/simplecudd_lfi/CMakeFiles/progress.marks create mode 100644 packages/bdd/simplecudd_lfi/iqueue.h create mode 100644 packages/cplint/slipcover/#slipcover.pl# create mode 100644 packages/gecode/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/gecode/CMakeFiles/gecode_yap.dir/DependInfo.cmake create mode 100644 packages/gecode/CMakeFiles/gecode_yap.dir/link.txt create mode 100644 packages/gecode/CMakeFiles/gecodeyap.dir/DependInfo.cmake create mode 100644 packages/gecode/CMakeFiles/progress.marks create mode 100644 packages/myddas/#MyddasProto.h# create mode 100644 packages/myddas/#example# create mode 100644 packages/myddas/#myddas_initialization.c# create mode 100644 packages/myddas/#myddas_mysql.c# create mode 100644 packages/myddas/#myddas_util.c# create mode 100644 packages/myddas/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/myddas/CMakeFiles/myddas.dir/DependInfo.cmake create mode 100644 packages/myddas/CMakeFiles/myddas.dir/link.txt create mode 100644 packages/myddas/CMakeFiles/plmyddas.dir/DependInfo.cmake create mode 100644 packages/myddas/CMakeFiles/progress.marks create mode 100644 packages/myddas/example create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/QCubed.png create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/code.css create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/ga.js create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/jquery.js create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/search.js create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/style.css create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/trac(1).css create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/trac.css create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/trac.js create mode 100644 packages/myddas/examples/Attachment – Trac QCubed PHP5 Rapid Development Framework_files/trac_logo_mini.png create mode 100644 packages/myddas/examples/gutenberg.jpg create mode 100644 packages/myddas/examples/postgre.sql create mode 100644 packages/myddas/examples/postgres.yap create mode 100644 packages/myddas/examples/postgres_init.sql create mode 100644 packages/myddas/myddas_postgres.cc create mode 100644 packages/myddas/myddas_sqllight.c create mode 100644 packages/myddas/pl/#myddas_postgres.ypp# create mode 100644 packages/myddas/pl/#myddas_prolog2sql.ypp# create mode 100644 packages/myddas/pl/myddas_sqlite.ypp create mode 100644 packages/myddas/pl/parameters.yap create mode 100644 packages/myddas/sqlite.c create mode 100644 packages/prosqlite/examples/predicated.pl create mode 100644 packages/prosqlite/examples/simple.pl create mode 100644 packages/prosqlite/examples/uniprot.pl create mode 100644 packages/python/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/python/CMakeFiles/libpython.dir/DependInfo.cmake create mode 100644 packages/python/CMakeFiles/libpython.dir/link.txt create mode 100644 packages/python/CMakeFiles/progress.marks create mode 100644 packages/swig/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/swig/CMakeFiles/progress.marks create mode 100644 packages/swig/android/#JavaYap.java# create mode 100644 packages/swig/android/jni/Applicatio.mk create mode 100644 packages/swig/android/jni/sqlite/Makefile.in create mode 100644 packages/swig/java/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/swig/java/CMakeFiles/JavaYAP.dir/DependInfo.cmake create mode 100644 packages/swig/java/CMakeFiles/JavaYAP.dir/java_class_filelist create mode 100644 packages/swig/java/CMakeFiles/JavaYAP.dir/java_sources create mode 100644 packages/swig/java/CMakeFiles/Native.dir/DependInfo.cmake create mode 100644 packages/swig/java/CMakeFiles/Native.dir/link.txt create mode 100644 packages/swig/java/CMakeFiles/NativeJar.dir/DependInfo.cmake create mode 100644 packages/swig/java/CMakeFiles/NativeJar.dir/java_class_filelist create mode 100644 packages/swig/java/CMakeFiles/progress.marks create mode 100644 packages/swig/js/CMakeLists.txt create mode 100644 packages/swig/python/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 packages/swig/python/CMakeFiles/progress.marks create mode 100644 packages/swig/python/yap.py create mode 100644 packages/swig/python/yap.pyc create mode 100644 packages/swig/python/yap_wrap.c create mode 100644 pages create mode 100644 patch create mode 100644 pl/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 pl/CMakeFiles/progress.marks create mode 100644 pl/CMakeFiles/startup.yss.dir/DependInfo.cmake create mode 100644 pl/a create mode 100644 pl/error.yap create mode 100644 pl/pl create mode 100644 pl/rev create mode 100644 start create mode 100644 swi/library/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 swi/library/CMakeFiles/progress.marks create mode 100644 swi/library/packages.yap create mode 100644 t create mode 120000 test-driver create mode 100644 test/CTestTestfile.cmake create mode 100644 test/elisp/CTestTestfile.cmake create mode 100644 text.cpp create mode 100644 tmp/bads create mode 100644 tmp/comments.yap create mode 100644 tmp/foreigns.c create mode 100644 tmp/foreigns.yap create mode 100644 tmp/pages create mode 100644 untitled.txt create mode 100644 utf8proc/CMakeLists.txt create mode 100644 utf8proc/Doxyfile create mode 100644 utf8proc/LICENSE.md create mode 100644 utf8proc/NEWS.md create mode 100644 utf8proc/README.md create mode 100644 utf8proc/appveyor.yml create mode 100644 utf8proc/bench/bench.c create mode 100644 utf8proc/bench/icu.c create mode 100644 utf8proc/bench/unistring.c create mode 100644 utf8proc/bench/util.c create mode 100644 utf8proc/bench/util.h create mode 100644 utf8proc/data/charwidths.jl create mode 100644 utf8proc/data/data_generator.rb create mode 100644 utf8proc/lump.md create mode 100644 utf8proc/same create mode 100644 utf8proc/test/case.c create mode 100644 utf8proc/test/charwidth.c create mode 100644 utf8proc/test/graphemetest.c create mode 100644 utf8proc/test/iterate.c create mode 100644 utf8proc/test/normtest.c create mode 100644 utf8proc/test/printproperty.c create mode 100644 utf8proc/test/tests.h create mode 100644 utf8proc/test/valid.c create mode 100644 utf8proc/utf8proc.c create mode 100644 utf8proc/utf8proc.h create mode 100644 utf8proc/utf8proc_data.c create mode 100644 utf8proc/utils.cmake create mode 100644 x create mode 100644 x.plpushd create mode 100644 y create mode 100644 z.md diff --git a/C/absmi_insts.h b/C/absmi_insts.h index 23b23fb0d..33900bb9e 100644 --- a/C/absmi_insts.h +++ b/C/absmi_insts.h @@ -42,7 +42,7 @@ BOp(Ystop, l); \************************************************************************/ #if YAP_JIT - static void *OpAddress[] = + static void *OpAddress_JIT[] = { #define OPCODE(OP,TYPE) && _##OP #include "YapOpcodes.h" diff --git a/C/adtdefs.c b/C/adtdefs.c index 31eb91961..6846d3f11 100755 --- a/C/adtdefs.c +++ b/C/adtdefs.c @@ -106,13 +106,13 @@ Yap_MkFunctorWithAddress(Atom ap, unsigned int arity, FunctorEntry *p) } inline static Atom -SearchInInvisible(const char *atom) +SearchInInvisible(const unsigned char *atom) { AtomEntry *chain; READ_LOCK(INVISIBLECHAIN.AERWLock); chain = RepAtom(INVISIBLECHAIN.Entry); - while (!EndOfPAEntr(chain) && strcmp(chain->StrOfAE, atom)) { + while (!EndOfPAEntr(chain) && strcmp((char *)chain->StrOfAE, (char *)atom)) { chain = RepAtom(chain->NextOfAE); } READ_UNLOCK(INVISIBLECHAIN.AERWLock); @@ -123,13 +123,13 @@ SearchInInvisible(const char *atom) } static inline Atom -SearchAtom(const char *p, Atom a) { +SearchAtom(const unsigned char *p, Atom a) { AtomEntry *ae; /* search atom in chain */ while (a != NIL) { ae = RepAtom(a); - if (strcmp(ae->StrOfAE, (const char *)p) == 0) { + if (strcmp((char *)ae->StrOfAE, (const char *)p) == 0) { return(a); } a = ae->NextOfAE; @@ -153,10 +153,10 @@ SearchWideAtom(const wchar_t *p, Atom a) { } static Atom -LookupAtom(const char *atom) +LookupAtom(const unsigned char *atom) { /* lookup atom in atom table */ UInt hash; - const char *p; + const unsigned char *p; Atom a, na; AtomEntry *ae; @@ -188,7 +188,7 @@ LookupAtom(const char *atom) } #endif /* add new atom to start of chain */ - ae = (AtomEntry *) Yap_AllocAtomSpace((sizeof *ae) + strlen(atom) + 1); + ae = (AtomEntry *) Yap_AllocAtomSpace((sizeof *ae) + strlen((const char *)atom) + 1); if (ae == NULL) { WRITE_UNLOCK(HashChain[hash].AERWLock); return NIL; @@ -196,8 +196,8 @@ LookupAtom(const char *atom) NOfAtoms++; na = AbsAtom(ae); ae->PropsOfAE = NIL; - if (ae->StrOfAE != atom) - strcpy(ae->StrOfAE, atom); + if (ae->UStrOfAE != atom) + strcpy((char *)ae->StrOfAE, (const char *)atom); ae->NextOfAE = a; HashChain[hash].Entry = na; INIT_RWLOCK(ae->ARWLock); @@ -282,7 +282,7 @@ Yap_LookupMaybeWideAtom(const wchar_t *atom) { /* lookup atom in atom table */ wchar_t *p = (wchar_t *)atom, c; size_t len = 0; - char *ptr, *ptr0; + unsigned char *ptr, *ptr0; Atom at; while ((c = *p++)) { @@ -332,9 +332,9 @@ Yap_LookupMaybeWideAtomWithLength(const wchar_t *atom, size_t len0) Yap_FreeCodeSpace((char *)ptr0); return at; } else { - char *ptr0; + unsigned char *ptr0; - ptr0 = (char *)Yap_AllocCodeSpace((len0+1)); + ptr0 = Yap_AllocCodeSpace((len0+1)); if (!ptr0) return NIL; for (i=0;iNextOfAE = a; HashChain[hash].Entry = AbsAtom(ae); ae->PropsOfAE = NIL; - strcpy(ae->StrOfAE, atom); + strcpy((char *)ae->StrOfAE, (char *)atom); INIT_RWLOCK(ae->ARWLock); WRITE_UNLOCK(HashChain[hash].AERWLock); } @@ -420,10 +426,10 @@ void Yap_ReleaseAtom(Atom atom) { /* Releases an atom from the hash chain */ register Int hash; - register const char *p; + register const unsigned char *p; AtomEntry *inChain; AtomEntry *ap = RepAtom(atom); - char *name = ap->StrOfAE; + char unsigned *name = ap->UStrOfAE; /* compute hash */ p = name; diff --git a/C/agc.c b/C/agc.c index 2ae334d97..96bc66055 100755 --- a/C/agc.c +++ b/C/agc.c @@ -437,6 +437,7 @@ clean_atom_list(AtomHashEntry *HashPtr) fprintf(stderr, "Purged %p:%s patm=%p %p\n", at, at->StrOfAE, patm, at->NextOfAE); #endif GLOBAL_agc_collected += sizeof(AtomEntry)+strlen(at->StrOfAE); + GLOBAL_agc_collected += sizeof(AtomEntry)+strlen((const char *)at->StrOfAE); } *patm = atm = at->NextOfAE; Yap_FreeCodeSpace((char *)at); diff --git a/C/alloc.c b/C/alloc.c index 38952dcff..f4da032ce 100644 --- a/C/alloc.c +++ b/C/alloc.c @@ -151,7 +151,7 @@ call_malloc(size_t size) return out; } -char * +void * Yap_AllocCodeSpace(size_t size) { size = AdjustSize(size); @@ -186,15 +186,15 @@ call_realloc(char *p, size_t size) return out; } -char * -Yap_ReallocCodeSpace(char *p, size_t size) +void * +Yap_ReallocCodeSpace(void *p, size_t size) { size = AdjustSize(size); return call_realloc(p, size); } void -Yap_FreeCodeSpace(char *p) +Yap_FreeCodeSpace(void *p) { CACHE_REGS #if USE_DL_MALLOC @@ -213,7 +213,7 @@ Yap_FreeCodeSpace(char *p) #endif } -char * +void * Yap_AllocAtomSpace(size_t size) { size = AdjustSize(size); @@ -221,7 +221,7 @@ Yap_AllocAtomSpace(size_t size) } void -Yap_FreeAtomSpace(char *p) +Yap_FreeAtomSpace(void *p) { CACHE_REGS #if USE_DL_MALLOC diff --git a/C/amasm.c b/C/amasm.c index 73cffa1a6..6eb2b6fea 100755 --- a/C/amasm.c +++ b/C/amasm.c @@ -260,7 +260,7 @@ static yamop *a_either(op_numbers, CELL, CELL, yamop *, int, struct intermediat #endif /* YAPOR */ static yamop *a_gl(op_numbers, yamop *, int, struct PSEUDO *, struct intermediates * CACHE_TYPE); static -COUNT compile_cmp_flags(char *); +COUNT compile_cmp_flags(unsigned char *); static yamop *a_igl(CELL, op_numbers, yamop *, int, struct intermediates *); static yamop *a_xigl(op_numbers, yamop *, int, struct PSEUDO *); static yamop *a_ucons(int *, compiler_vm_op, yamop *, int, struct intermediates *); @@ -1587,8 +1587,10 @@ a_pl(op_numbers opcode, PredEntry *pred, yamop *code_p, int pass_no) } static COUNT -compile_cmp_flags(char *s) + +compile_cmp_flags(unsigned char *s0) { + char *s = (char *)s0; if (strcmp(s,"=<") == 0) return EQ_OK_IN_CMP|LT_OK_IN_CMP; if (strcmp(s,"is") == 0) @@ -1621,7 +1623,7 @@ COUNT Yap_compile_cmp_flags(PredEntry *pred) { return - compile_cmp_flags(RepAtom(NameOfFunctor(pred->FunctorOfPred))->StrOfAE); + compile_cmp_flags(RepAtom(NameOfFunctor(pred->FunctorOfPred))->UStrOfAE); } static yamop * @@ -1644,7 +1646,7 @@ a_bfunc(CELL a1, CELL a2, PredEntry *pred, clause_info *clinfo, yamop *code_p, i code_p->y_u.plyys.f = emit_fail(cip); code_p->y_u.plyys.y1 = v1; code_p->y_u.plyys.y2 = emit_yreg(var_offset2); - code_p->y_u.plyys.flags = compile_cmp_flags(RepAtom(NameOfFunctor(RepPredProp(((Prop)pred))->FunctorOfPred))->StrOfAE); + code_p->y_u.plyys.flags = compile_cmp_flags(RepAtom(NameOfFunctor(RepPredProp(((Prop)pred))->FunctorOfPred))->UStrOfAE); } GONEXT(plyys); } else { @@ -1654,7 +1656,7 @@ a_bfunc(CELL a1, CELL a2, PredEntry *pred, clause_info *clinfo, yamop *code_p, i code_p->y_u.plxys.f = emit_fail(cip); code_p->y_u.plxys.x = emit_xreg(var_offset2); code_p->y_u.plxys.y = v1; - code_p->y_u.plxys.flags = compile_cmp_flags(RepAtom(NameOfFunctor(RepPredProp(((Prop)pred))->FunctorOfPred))->StrOfAE); + code_p->y_u.plxys.flags = compile_cmp_flags(RepAtom(NameOfFunctor(RepPredProp(((Prop)pred))->FunctorOfPred))->UStrOfAE); } GONEXT(plxys); } @@ -1671,7 +1673,7 @@ a_bfunc(CELL a1, CELL a2, PredEntry *pred, clause_info *clinfo, yamop *code_p, i code_p->y_u.plxys.f = emit_fail(cip); code_p->y_u.plxys.x = x1; code_p->y_u.plxys.y = emit_yreg(var_offset2); - code_p->y_u.plxys.flags = compile_cmp_flags(RepAtom(NameOfFunctor(RepPredProp(((Prop)pred))->FunctorOfPred))->StrOfAE); + code_p->y_u.plxys.flags = compile_cmp_flags(RepAtom(NameOfFunctor(RepPredProp(((Prop)pred))->FunctorOfPred))->UStrOfAE); } GONEXT(plxys); } else { @@ -1682,7 +1684,7 @@ a_bfunc(CELL a1, CELL a2, PredEntry *pred, clause_info *clinfo, yamop *code_p, i code_p->y_u.plxxs.f = emit_fail(cip); code_p->y_u.plxxs.x1 = x1; code_p->y_u.plxxs.x2 = emit_xreg(var_offset2); - code_p->y_u.plxxs.flags = compile_cmp_flags(RepAtom(NameOfFunctor(RepPredProp(((Prop)pred))->FunctorOfPred))->StrOfAE); + code_p->y_u.plxxs.flags = compile_cmp_flags(RepAtom(NameOfFunctor(RepPredProp(((Prop)pred))->FunctorOfPred))->UStrOfAE); } GONEXT(plxxs); } diff --git a/C/args.c b/C/args.c index 10f316299..14fd66601 100644 --- a/C/args.c +++ b/C/args.c @@ -18,7 +18,7 @@ matchKey(Atom key, xarg *e0, int n, const param_t *def) { int i; for (i=0; i< n; i++) { - if (!strcmp(def->name, RepAtom(key)->StrOfAE)) { + if (!strcmp((char *)def->name, (char *)RepAtom(key)->StrOfAE)) { return e0; } def++; @@ -31,7 +31,9 @@ xarg * Yap_ArgListToVector (Term listl, const param_t *def, int n) { CACHE_REGS - if (!IsPairTerm(listl) && listl != TermNil) { + if (IsApplTerm(listl) && FunctorOfTerm(listl) == FunctorModule) + listl = ArgOfTerm(2,listl); + if (!IsPairTerm(listl) && listl != TermNil) { listl = MkPairTerm( listl, TermNil ); } xarg *a = calloc( n , sizeof(xarg) ); @@ -86,7 +88,7 @@ matchKey2(Atom key, xarg *e0, int n, const param2_t *def) { int i; for (i=0; i< n; i++) { - if (!strcmp(def->name, RepAtom(key)->StrOfAE)) { + if (!strcmp((char*)def->name, (char*)RepAtom(key)->StrOfAE)) { return e0; } def++; diff --git a/C/arrays.c b/C/arrays.c index 5b8f85bbf..36bdeb845 100644 --- a/C/arrays.c +++ b/C/arrays.c @@ -1106,7 +1106,7 @@ p_create_static_array( USES_REGS1 ) Yap_Error(INSTANTIATION_ERROR,tprops,"create static array"); return (FALSE); } else if (IsAtomTerm(tprops)) { - char *atname = RepAtom(AtomOfTerm(tprops))->StrOfAE; + char *atname = (char *)RepAtom(AtomOfTerm(tprops))->StrOfAE; if (!strcmp(atname, "int")) props = array_of_ints; else if (!strcmp(atname, "dbref")) diff --git a/C/atomic.c b/C/atomic.c index 5c11a5e74..46ae11645 100644 --- a/C/atomic.c +++ b/C/atomic.c @@ -64,7 +64,7 @@ static Int number_chars( USES_REGS1 ); static Int number_codes( USES_REGS1 ); static Int current_atom( USES_REGS1 ); static Int cont_current_atom( USES_REGS1 ); -static int AlreadyHidden(char *); +static int AlreadyHidden(unsigned char *); static Int hide( USES_REGS1 ); static Int hidden( USES_REGS1 ); static Int unhide( USES_REGS1 ); @@ -72,14 +72,14 @@ static Int unhide( USES_REGS1 ); static int -AlreadyHidden(char *name) +AlreadyHidden(unsigned char *name) { AtomEntry *chain; READ_LOCK(INVISIBLECHAIN.AERWLock); chain = RepAtom(INVISIBLECHAIN.Entry); READ_UNLOCK(INVISIBLECHAIN.AERWLock); - while (!EndOfPAEntr(chain) && strcmp(chain->StrOfAE, name) != 0) + while (!EndOfPAEntr(chain) && strcmp((char *)chain->StrOfAE, (char *)name) != 0) chain = RepAtom(chain->NextOfAE); if (EndOfPAEntr(chain)) return (FALSE); @@ -108,7 +108,7 @@ hide( USES_REGS1 ) return(FALSE); } atomToInclude = AtomOfTerm(t1); - if (AlreadyHidden(RepAtom(atomToInclude)->StrOfAE)) { + if (AlreadyHidden(RepAtom(atomToInclude)->UStrOfAE)) { Yap_Error(SYSTEM_ERROR,t1,"an atom of name %s was already hidden", RepAtom(atomToInclude)->StrOfAE); return(FALSE); @@ -182,7 +182,7 @@ unhide( USES_REGS1 ) WRITE_LOCK(INVISIBLECHAIN.AERWLock); chain = RepAtom(INVISIBLECHAIN.Entry); old = NIL; - while (!EndOfPAEntr(chain) && strcmp(chain->StrOfAE, atom->StrOfAE) != 0) { + while (!EndOfPAEntr(chain) && strcmp((char *)chain->StrOfAE, (char *)atom->StrOfAE) != 0) { old = chain; chain = RepAtom(chain->NextOfAE); } @@ -257,7 +257,7 @@ char_code( USES_REGS1 ) } tf = MkIntegerTerm(c[0]); } else { - char *c = RepAtom(at)->StrOfAE; + unsigned char *c = RepAtom(at)->UStrOfAE; if (c[1] != '\0') { Yap_Error(TYPE_ERROR_CHARACTER,t0,"char_code/2"); @@ -377,11 +377,27 @@ string_to_list( USES_REGS1 ) static Int atom_string( USES_REGS1 ) { - // swap arguments - Term t1 = ARG2; - ARG2 = ARG1; - ARG1 = t1; - return string_to_atom( PASS_REGS1 ); + Term t1 = Deref(ARG1), t2 = Deref(ARG2); + LOCAL_MAX_SIZE = 1024; + + restart_aux: + if (Yap_IsGroundTerm(t2)) { + Atom at; + // verify if an atom, int, float or bignnum + at = Yap_StringSWIToAtom( t2 PASS_REGS ); + if (at) + return Yap_unify(MkAtomTerm(at), t1); + // else + } else { + Term t0 = Yap_AtomSWIToString( t1 PASS_REGS ); + if (t0) return Yap_unify(t0, t2); + } + if (LOCAL_Error_TYPE && Yap_HandleError( "atom_string/2" )) { + t1 = Deref(ARG1); + t2 = Deref(ARG2); + goto restart_aux; + } + return FALSE; } static Int @@ -839,15 +855,15 @@ cont_string_code3( USES_REGS1 ) { Term t2; Int i, j; - int chr; - char *s; - const char *s0; + utf8proc_int32_t chr; + const unsigned char *s; + const unsigned char *s0; restart_aux: t2 = Deref(ARG2); - s0 = StringOfTerm( t2 ); + s0 = UStringOfTerm( t2 ); i = IntOfTerm(EXTRA_CBACK_ARG(3,1)); // offset in coded string, increases by 1..6 j = IntOfTerm(EXTRA_CBACK_ARG(3,2)); // offset in UNICODE string, always increases by 1 - s = utf8_get_char( s0+i, &chr ); + s = (s0+i) + get_utf8( (unsigned char *)s0+i, &chr ); if (s[0]) { EXTRA_CBACK_ARG(3,1) = MkIntTerm(s-s0); EXTRA_CBACK_ARG(3,2) = MkIntTerm(j+1); @@ -874,7 +890,7 @@ string_code3( USES_REGS1 ) { Term t1; Term t2; - const char *s; + const unsigned char *s; restart_aux: t1 = Deref(ARG1); t2 = Deref(ARG2); @@ -885,7 +901,7 @@ string_code3( USES_REGS1 ) LOCAL_Error_TYPE = TYPE_ERROR_STRING; LOCAL_Error_Term = t2; } else { - s = StringOfTerm( t2 ); + s = UStringOfTerm( t2 ); t1 = Deref(ARG1); if (IsVarTerm(t1)) { EXTRA_CBACK_ARG(3,1) = MkIntTerm(0); @@ -895,8 +911,8 @@ string_code3( USES_REGS1 ) LOCAL_Error_TYPE = TYPE_ERROR_INTEGER; LOCAL_Error_Term = t1; } else { - const char *ns = s; - int chr; + const unsigned char *ns = s; + utf8proc_int32_t chr; Int indx = IntegerOfTerm( t1 ); if (indx <= 0) { if (indx < 0) { @@ -905,11 +921,11 @@ string_code3( USES_REGS1 ) } cut_fail(); } - ns = utf8_skip(s,indx); + ns = skip_utf8((unsigned char *)s, indx); if (ns == NULL) { cut_fail(); // silently fail? } - utf8_get_char( ns, &chr); + get_utf8( (unsigned char *)ns, &chr); if ( chr == '\0') cut_fail(); if (Yap_unify(ARG3, MkIntegerTerm(chr))) cut_succeed(); cut_fail(); @@ -932,7 +948,7 @@ get_string_code3( USES_REGS1 ) { Term t1; Term t2; - const char *s; + const unsigned char *s; restart_aux: t1 = Deref(ARG1); t2 = Deref(ARG2); @@ -943,7 +959,7 @@ get_string_code3( USES_REGS1 ) LOCAL_Error_TYPE = TYPE_ERROR_STRING; LOCAL_Error_Term = t2; } else { - s = StringOfTerm( t2 ); + s = UStringOfTerm( t2 ); t1 = Deref(ARG1); if (IsVarTerm(t1)) { LOCAL_Error_TYPE = INSTANTIATION_ERROR; @@ -952,8 +968,8 @@ get_string_code3( USES_REGS1 ) LOCAL_Error_TYPE = TYPE_ERROR_INTEGER; LOCAL_Error_Term = t1; } else { - const char *ns = s; - int chr; + unsigned char *ns = (unsigned char *)s; + utf8proc_int32_t chr; Int indx = IntegerOfTerm( t1 ); if (indx <= 0) { if (indx < 0) { @@ -964,11 +980,11 @@ get_string_code3( USES_REGS1 ) } } else { indx -= 1; - ns = utf8_skip(s,indx); + ns = skip_utf8((unsigned char *)s,indx); if (ns == NULL) { return FALSE; } else { - utf8_get_char( ns, &chr); + get_utf8( ns, &chr); if ( chr != '\0') return Yap_unify(ARG3, MkIntegerTerm(chr)); } } @@ -1372,13 +1388,13 @@ atom_split( USES_REGS1 ) at = AtomOfTerm(t1); if (IsWideAtom(at)) { wchar_t *ws, *ws1 = (wchar_t *)HR; - char *s1 = (char *)HR; + unsigned char *s1 = (unsigned char *)HR; size_t wlen; ws = (wchar_t *)RepAtom(at)->StrOfAE; wlen = wcslen(ws); if (len > wlen) return FALSE; - if (s1+len > (char *)LCL0-1024) + if (s1+len > (unsigned char *)LCL0-1024) Yap_Error(OUT_OF_STACK_ERROR,t1,"$atom_split/4"); for (i = 0; i< len; i++) { if (ws[i] > MAX_ISO_LATIN1) { @@ -1405,27 +1421,27 @@ atom_split( USES_REGS1 ) Yap_Error(OUT_OF_STACK_ERROR,t1,"$atom_split/4"); ws += len; while ((*s2++ = *ws++)); - to2 = MkAtomTerm(Yap_LookupAtom((char *)HR)); + to2 = MkAtomTerm(Yap_LookupAtom(( char *)HR)); } } else { s1[len] = '\0'; - to1 = MkAtomTerm(Yap_LookupAtom(s1)); + to1 = MkAtomTerm(Yap_ULookupAtom(s1)); /* second atom must be wide, if first wasn't */ to2 = MkAtomTerm(Yap_LookupWideAtom(ws+len)); } } else { - char *s, *s1 = (char *)HR; + unsigned char *s, *s1 = (unsigned char *)HR; - s = RepAtom(at)->StrOfAE; - if (len > (Int)strlen(s)) return(FALSE); - if (s1+len > (char *)ASP-1024) + s = RepAtom(at)->UStrOfAE; + if (len > (Int)strlen((char *)s)) return(FALSE); + if (s1+len > (unsigned char *)ASP-1024) Yap_Error(OUT_OF_STACK_ERROR,t1,"$atom_split/4"); for (i = 0; i< len; i++) { s1[i] = s[i]; } s1[len] = '\0'; - to1 = MkAtomTerm(Yap_LookupAtom(s1)); - to2 = MkAtomTerm(Yap_LookupAtom(s+len)); + to1 = MkAtomTerm(Yap_ULookupAtom(s1)); + to2 = MkAtomTerm(Yap_ULookupAtom(s+len)); } return(Yap_unify_constant(ARG3,to1) && Yap_unify_constant(ARG4,to2)); } @@ -1502,7 +1518,7 @@ alloc_tmp_stack(size_t sz USES_REGS) { } static Term -build_new_atomic(int mask, wchar_t *wp, char *p, size_t min, size_t len USES_REGS) +build_new_atomic(int mask, wchar_t *wp, const unsigned char *p, size_t min, size_t len USES_REGS) { Atom nat; if (mask & SUB_ATOM_HAS_WIDE) { @@ -1516,27 +1532,28 @@ build_new_atomic(int mask, wchar_t *wp, char *p, size_t min, size_t len USES_REG if (nat) return MkAtomTerm(nat); } else if (!(mask & SUB_ATOM_HAS_UTF8)) { - char *src = p+min; - char *d = alloc_tmp_stack((len+1)*sizeof(char) PASS_REGS); + const unsigned char *src = p+min; + unsigned char *d = alloc_tmp_stack((len+1)*sizeof(char) PASS_REGS); if (!d) return NIL; - strncpy(d, src, len); + strncpy((char *)d, (char *)src, len); d[len] = '\0'; - nat = Yap_LookupAtom(d); + nat = Yap_ULookupAtom(d); if (nat) return MkAtomTerm(nat); } else { - char *src = p; + const unsigned char *src = p; + unsigned char *buf; Term t = init_tstring( PASS_REGS1 ); - src = (char *)utf8_skip(src, min); - char *cp = src, *buf; + src = skip_utf8((unsigned char *)src, min); + const unsigned char *cp = src; LOCAL_TERM_ERROR( 4*(len+1) ); buf = buf_from_tstring(HR); while (len) { - int chr; - cp = utf8_get_char(cp, &chr); - buf = utf8_put_char(buf, chr); + utf8proc_int32_t chr; + cp += get_utf8((unsigned char *)cp, &chr); + buf += put_utf8((unsigned char *)buf, chr); len--; } *buf++ = '\0'; @@ -1570,17 +1587,17 @@ check_sub_atom_at(int min, Atom at, Atom nat) } else { if (IsWideAtom(at)) { wchar_t *p1; - char *p2; + unsigned char *p2; wchar_t c1; p1 = RepAtom(at)->WStrOfAE+min; - p2 = RepAtom(nat)->StrOfAE; + p2 = RepAtom(nat)->UStrOfAE; while ( (c1 = *p1++) == *p2++ && c1); return c1 == 0; } else { - char *p1, *p2; + unsigned char *p1, *p2; char c1; - p1 = RepAtom(at)->StrOfAE+min; - p2 = RepAtom(nat)->StrOfAE; + p1 = RepAtom(at)->UStrOfAE+min; + p2 = RepAtom(nat)->UStrOfAE; while ( (c1 = *p1++) == *p2++ && c1); return c1 == 0; } @@ -1588,10 +1605,10 @@ check_sub_atom_at(int min, Atom at, Atom nat) } static int -check_sub_string_at(int min, const char *p1, const char *p2, size_t len2) +check_sub_string_at(int min, const unsigned char *p1, const unsigned char *p2, size_t len) { - p1 = utf8_skip(p1, min); - return utf8_strncmp( p1, p2, len2 ) == 0; + p1 = skip_utf8((unsigned char *)p1, min); + return cmpn_utf8( p1, p2, len ) == 0; } static int @@ -1610,22 +1627,22 @@ check_sub_atom_bef(int max, Atom at, Atom nat) while ( (c1 = *p1++) == *p2++ && c1); return c1 == 0; } else { - size_t len = strlen(RepAtom(nat)->StrOfAE); + size_t len = strlen((char *)RepAtom(nat)->StrOfAE); int min = max- len; if ((Int)(min - len) < 0) return FALSE; if (IsWideAtom(at)) { wchar_t *p1; - char *p2; + unsigned char *p2; wchar_t c1; p1 = RepAtom(at)->WStrOfAE+min; - p2 = RepAtom(nat)->StrOfAE; + p2 = RepAtom(nat)->UStrOfAE; while ( (c1 = *p1++) == *p2++ && c1); return c1 == 0; } else { - char *p1, *p2; + unsigned char *p1, *p2; char c1; - p1 = RepAtom(at)->StrOfAE+min; - p2 = RepAtom(nat)->StrOfAE; + p1 = RepAtom(at)->UStrOfAE+min; + p2 = RepAtom(nat)->UStrOfAE; while ( (c1 = *p1++) == *p2++ && c1); return c1 == 0; } @@ -1635,15 +1652,15 @@ check_sub_atom_bef(int max, Atom at, Atom nat) static int check_sub_string_bef(int max, Term at, Term nat) { - size_t len = utf8_strlen1(StringOfTerm(nat)); + size_t len = strlen_utf8(UStringOfTerm(nat)); int min = max- len; - const char *p1, *p2; + const unsigned char *p1, *p2; int c1; if ((Int)(min - len) < 0) return FALSE; - p1 = utf8_skip(StringOfTerm(at),min); - p2 = StringOfTerm(nat); + p1 = skip_utf8((unsigned char *)UStringOfTerm(at),min); + p2 = UStringOfTerm(nat); while ( (c1 = *p1++) == *p2++ && c1); return c1 == 0; } @@ -1656,7 +1673,7 @@ cont_sub_atomic( USES_REGS1 ) int mask; size_t min, len, after, sz; wchar_t *wp = NULL; - char *p = NULL; + const unsigned char *p = NULL; Term nat; int sub_atom = TRUE; @@ -1668,13 +1685,13 @@ cont_sub_atomic( USES_REGS1 ) if (mask & SUB_ATOM_HAS_UTF8) { sub_atom = FALSE; - p = (char *)StringOfTerm(tat1); + p = UStringOfTerm(tat1); } else if (mask & SUB_ATOM_HAS_WIDE) { at = AtomOfTerm(tat1); wp = RepAtom(at)->WStrOfAE; } else { at = AtomOfTerm(tat1); - p = RepAtom(at)->StrOfAE; + p = RepAtom(at)->UStrOfAE; } /* we can have one of two cases: A5 bound or unbound */ if (mask & SUB_ATOM_HAS_VAL) { @@ -1704,7 +1721,7 @@ cont_sub_atomic( USES_REGS1 ) } } else { while (!found) { - if (wcsstrcmp(wp+min, AtomOfTerm(nat)->StrOfAE, len) == 0) { + if (wcsstrcmp(wp+min, (char *)AtomOfTerm(nat)->StrOfAE, len) == 0) { Yap_unify(ARG2, MkIntegerTerm(min)); Yap_unify(ARG3, MkIntegerTerm(len)); Yap_unify(ARG4, MkIntegerTerm(after)); @@ -1713,7 +1730,7 @@ cont_sub_atomic( USES_REGS1 ) while (min <= sz-len) { after--; min++; - if (wcsstrcmp(wp+min, AtomOfTerm(nat)->StrOfAE, len) == 0) + if (wcsstrcmp(wp+min, (char *)AtomOfTerm(nat)->StrOfAE, len) == 0) break; } } else { @@ -1724,9 +1741,9 @@ cont_sub_atomic( USES_REGS1 ) } } } else if (sub_atom) { - p = RepAtom(at)->StrOfAE; + p = RepAtom(at)->UStrOfAE; while (!found) { - if (strncmp(p+min, AtomOfTerm(nat)->StrOfAE, len) == 0) { + if (strncmp((char *)p+min, (char *)AtomOfTerm(nat)->StrOfAE, len) == 0) { Yap_unify(ARG2, MkIntegerTerm(min)); Yap_unify(ARG3, MkIntegerTerm(len)); Yap_unify(ARG4, MkIntegerTerm(after)); @@ -1735,7 +1752,7 @@ cont_sub_atomic( USES_REGS1 ) while (min <= sz-len) { after--; min++; - if (strncmp(p+min, AtomOfTerm(nat)->StrOfAE, len) == 0) + if (strncmp((char *)p+min, (char *)AtomOfTerm(nat)->StrOfAE, len) == 0) break; } } else { @@ -1745,12 +1762,12 @@ cont_sub_atomic( USES_REGS1 ) } } } else { - const char *p = StringOfTerm( Deref(ARG1) ), *p1 = p; - const char *p5 = StringOfTerm( Deref(ARG5) ); + const unsigned char *p = UStringOfTerm( Deref(ARG1) ), *p1 = p; + const unsigned char *p5 = UStringOfTerm( Deref(ARG5) ); while (!found) { - p = utf8_skip(p1, min); - if (utf8_strncmp(p, p5, len) == 0) { + p = skip_utf8((unsigned char *)p1, min); + if (cmpn_utf8(p, p5, len) == 0) { Yap_unify(ARG2, MkIntegerTerm(min)); Yap_unify(ARG3, MkIntegerTerm(len)); Yap_unify(ARG4, MkIntegerTerm(after)); @@ -1758,10 +1775,10 @@ cont_sub_atomic( USES_REGS1 ) /* found one, check if there is any left */ while (min <= sz-len) { int chr; - p = utf8_get_char(p, &chr); + p += get_utf8((unsigned char *)p, &chr); after--; min++; - if (utf8_strncmp(p, StringOfTerm(nat), len) == 0) + if (cmpn_utf8(p, UStringOfTerm(nat), len) == 0) break; } } else { @@ -1828,7 +1845,7 @@ sub_atomic( int sub_atom USES_REGS ) int mask = 0; size_t min, len, after, sz; wchar_t *wp = NULL; - char *p = NULL; + unsigned char *p = NULL; int bnds = 0; Term nat = 0L; Atom at = NULL; @@ -1900,7 +1917,7 @@ sub_atomic( int sub_atom USES_REGS ) if (IsWideAtom(oat)) len = wcslen(RepAtom(oat)->WStrOfAE); else - len = strlen(RepAtom(oat)->StrOfAE); + len = strlen((const char *)RepAtom(oat)->StrOfAE); } } else { if (!IsStringTerm(tout)) { @@ -1908,7 +1925,7 @@ sub_atomic( int sub_atom USES_REGS ) return FALSE; } else { mask |= SUB_ATOM_HAS_VAL|SUB_ATOM_HAS_SIZE; - len = utf8_strlen1( StringOfTerm(tout) ); + len = strlen_utf8( UStringOfTerm(tout) ); } } if (!Yap_unify(ARG3, MkIntegerTerm(len))) @@ -1922,13 +1939,13 @@ sub_atomic( int sub_atom USES_REGS ) wp = RepAtom(at)->WStrOfAE; sz = wcslen(wp); } else { - p = RepAtom(at)->StrOfAE; - sz = strlen(p); + p = RepAtom(at)->UStrOfAE; + sz = strlen((const char *)p); } } else { mask |= SUB_ATOM_HAS_UTF8; - p = (char *)StringOfTerm(tat1); - sz = utf8_strlen1(p); + p = (unsigned char *)StringOfTerm(tat1); + sz = strlen_utf8(p); } /* the problem is deterministic if we have two cases */ if (bnds > 1) { @@ -1963,7 +1980,7 @@ sub_atomic( int sub_atom USES_REGS ) if (sub_atom) out = check_sub_atom_at(min, at, AtomOfTerm(nat)); else - out = check_sub_string_at(min, p, StringOfTerm( nat ), len); + out = check_sub_string_at(min, p, UStringOfTerm( nat ), len); } else if ((mask & (SUB_ATOM_HAS_AFTER|SUB_ATOM_HAS_VAL)) == (SUB_ATOM_HAS_AFTER|SUB_ATOM_HAS_VAL)) { if (sub_atom) @@ -1973,7 +1990,7 @@ sub_atomic( int sub_atom USES_REGS ) } else if ((mask & (SUB_ATOM_HAS_SIZE|SUB_ATOM_HAS_VAL)) == (SUB_ATOM_HAS_SIZE|SUB_ATOM_HAS_VAL)) { if (!sub_atom) { - out = (utf8_strlen1(StringOfTerm(tout)) == len); + out = (strlen_utf8(UStringOfTerm(tout)) == len); if (!out) cut_fail(); } else if (IsWideAtom(AtomOfTerm(tout))) { if (!(mask & SUB_ATOM_HAS_VAL)) { @@ -1982,7 +1999,7 @@ sub_atomic( int sub_atom USES_REGS ) /* just check length, they may still be several occurrences :( */ out = (wcslen(RepAtom(AtomOfTerm(tout))->WStrOfAE) == len); } else { - out = (strlen(RepAtom(AtomOfTerm(tout))->StrOfAE) == len); + out = (strlen((const char *)RepAtom(AtomOfTerm(tout))->StrOfAE) == len); if (!out) cut_fail(); } if (len == sz) { diff --git a/C/bignum.c b/C/bignum.c index ac7f7fd04..4dc8146a7 100644 --- a/C/bignum.c +++ b/C/bignum.c @@ -26,7 +26,7 @@ static char SccsId[] = "%W% %G%"; #endif #include "YapHeap.h" -#include "pl-utf8.h" +#include "YapText.h" #ifdef USE_GMP @@ -363,13 +363,13 @@ Yap_OpaqueTermToString(Term t, char *str, size_t max) if (li[0] == (CELL)FunctorString) { str_index += sprintf(& str[str_index], "\""); do { - int chr; - char *ptr = (char *)StringOfTerm(AbsAppl(li)); - ptr = utf8_get_char(ptr, &chr); + utf8proc_int32_t chr; + unsigned char *ptr = (unsigned char *)StringOfTerm(AbsAppl(li)); + ptr += get_utf8(ptr, &chr); if (chr == '\0') break; - str_index += sprintf(& str[str_index], "%C", chr); + str_index += sprintf(str+str_index, "%C", chr); } while (TRUE); - str_index += sprintf(& str[str_index], "\""); + str_index += sprintf(str+str_index, "\""); } else { CELL big_tag = li[1]; diff --git a/C/blobs.c b/C/blobs.c index 124fd2aba..449a9e819 100644 --- a/C/blobs.c +++ b/C/blobs.c @@ -46,7 +46,7 @@ char * Yap_blob_to_string(AtomEntry *ref, const char *s0, size_t sz) fclose(f); // return the final result. return s; } else { - size_t sz0 = strlcpy( s, RepAtom( AtomSWIStream )->StrOfAE, sz); + size_t sz0 = strlcpy( s, (char *)RepAtom( AtomSWIStream )->StrOfAE, sz); s = s+sz0; sz -= sz0; #if defined(__linux__) || defined(__APPLE__) @@ -222,7 +222,7 @@ YAP_blob_data(Atom x, size_t *len, blob_type_t **type) return x->WStrOfAE; } if ( len ) - *len = strlen(x->StrOfAE); + *len = strlen((char *)x->StrOfAE); if ( type ) *type = &unregistered_blob_atom; return x->StrOfAE; diff --git a/C/c_interface.c b/C/c_interface.c index 1f1e81a96..d7413e671 100755 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -793,7 +793,7 @@ YAP_LookupAtom(const char *c) Atom a; while (TRUE) { - a = Yap_LookupAtom((char *)c); + a = Yap_LookupAtom(c); if (a == NIL || Yap_get_signal(YAP_CDOVF_SIGNAL)) { if (!Yap_locked_growheap(FALSE, 0, NULL)) { Yap_Error(OUT_OF_HEAP_ERROR, TermNil, "YAP failed to grow heap: %s", LOCAL_ErrorMessage); @@ -831,7 +831,7 @@ YAP_FullLookupAtom(const char *c) Atom at; while (TRUE) { - at = Yap_FullLookupAtom((char *)c); + at = Yap_FullLookupAtom(c); if (at == NIL || Yap_get_signal(YAP_CDOVF_SIGNAL)) { if (!Yap_locked_growheap(FALSE, 0, NULL)) { Yap_Error(OUT_OF_HEAP_ERROR, TermNil, "YAP failed to grow heap: %s", LOCAL_ErrorMessage); @@ -854,9 +854,9 @@ YAP_AtomNameLength(Atom at) return wcslen(c); } else { - char *c = RepAtom(at)->StrOfAE; + unsigned char *c = RepAtom(at)->UStrOfAE; - return strlen(c); + return strlen((char *)c); } } diff --git a/C/cdmgr.c b/C/cdmgr.c index 88b006842..116052783 100644 --- a/C/cdmgr.c +++ b/C/cdmgr.c @@ -484,12 +484,6 @@ static void assertz_dynam_clause(PredEntry *, yamop *); static void expand_consult( void ); static int not_was_reconsulted(PredEntry *, Term, int); static int RemoveIndexation(PredEntry *); -static int static_in_use(PredEntry *, int); -#if !defined(YAPOR) && !defined(THREADS) -static Int search_for_static_predicate_in_use(PredEntry *, int); -static void mark_pred(int, PredEntry *); -static void do_toggle_static_predicates_in_use(int); -#endif static Int p_number_of_clauses( USES_REGS1 ); static Int p_compile( USES_REGS1 ); static Int p_compile_dynamic( USES_REGS1 ); @@ -500,7 +494,6 @@ static Int p_startconsult( USES_REGS1 ); static Int p_showconslultlev( USES_REGS1 ); static Int p_endconsult( USES_REGS1 ); static Int p_undefined( USES_REGS1 ); -static Int p_in_use( USES_REGS1 ); static Int p_new_multifile( USES_REGS1 ); static Int p_is_multifile( USES_REGS1 ); static Int p_optimizer_on( USES_REGS1 ); @@ -515,126 +508,11 @@ static Int p_is_call_counted( USES_REGS1 ); static Int p_call_count_info( USES_REGS1 ); static Int p_call_count_set( USES_REGS1 ); static Int p_call_count_reset( USES_REGS1 ); -static Int p_toggle_static_predicates_in_use( USES_REGS1 ); -static Int PredForCode(yamop *, Atom *, arity_t *, Term *); static void kill_first_log_iblock(LogUpdIndex *, LogUpdIndex *, PredEntry *); -static LogUpdIndex *find_owner_log_index(LogUpdIndex *, yamop *); -static StaticIndex *find_owner_static_index(StaticIndex *, yamop *); #define PredArity(p) (p->ArityOfPE) #define TRYCODE(G,F,N) ( (N)<5 ? (op_numbers)((int)F+(N)*3) : G) -#define IN_BLOCK(P,B,SZ) ((CODEADDR)(P) >= (CODEADDR)(B) && \ - (CODEADDR)(P) < (CODEADDR)(B)+(SZ)) - -static PredEntry * -PredForChoicePt(yamop *p_code, op_numbers *opn) { - while (TRUE) { - op_numbers opnum; - if (!p_code) - return NULL; - opnum = Yap_op_from_opcode(p_code->opc); - if (opn) - *opn = opnum; - switch(opnum) { - case _Nstop: - return NULL; - case _jump: - p_code = p_code->y_u.l.l; - break; - case _retry_me: - case _trust_me: - return p_code->y_u.Otapl.p; - case _retry_exo: - case _retry_all_exo: - return p_code->y_u.lp.p; - case _try_logical: - case _retry_logical: - case _trust_logical: - case _count_retry_logical: - case _count_trust_logical: - case _profiled_retry_logical: - case _profiled_trust_logical: - return p_code->y_u.OtaLl.d->ClPred; -#ifdef TABLING - case _trie_trust_var: - case _trie_retry_var: - case _trie_trust_var_in_pair: - case _trie_retry_var_in_pair: - case _trie_trust_val: - case _trie_retry_val: - case _trie_trust_val_in_pair: - case _trie_retry_val_in_pair: - case _trie_trust_atom: - case _trie_retry_atom: - case _trie_trust_atom_in_pair: - case _trie_retry_atom_in_pair: - case _trie_trust_null: - case _trie_retry_null: - case _trie_trust_null_in_pair: - case _trie_retry_null_in_pair: - case _trie_trust_pair: - case _trie_retry_pair: - case _trie_trust_appl: - case _trie_retry_appl: - case _trie_trust_appl_in_pair: - case _trie_retry_appl_in_pair: - case _trie_trust_extension: - case _trie_retry_extension: - case _trie_trust_double: - case _trie_retry_double: - case _trie_trust_longint: - case _trie_retry_longint: - case _trie_trust_gterm: - case _trie_retry_gterm: - return NULL; - case _table_load_answer: - case _table_try_answer: - case _table_answer_resolution: - case _table_completion: -#ifdef THREADS_CONSUMER_SHARING - case _table_answer_resolution_completion: -#endif /* THREADS_CONSUMER_SHARING */ - return NULL; /* ricroc: is this OK? */ - /* compile error --> return ENV_ToP(gc_B->cp_cp); */ -#endif /* TABLING */ - case _or_else: - if (p_code == p_code->y_u.Osblp.l) { - /* repeat */ - Atom at = AtomRepeatSpace; - return RepPredProp(PredPropByAtom(at, PROLOG_MODULE)); - } else { - return p_code->y_u.Osblp.p0; - } - break; - case _or_last: -#ifdef YAPOR - return p_code->y_u.Osblp.p0; -#else - return p_code->y_u.p.p; -#endif /* YAPOR */ - break; - case _count_retry_me: - case _retry_profiled: - case _retry2: - case _retry3: - case _retry4: - p_code = NEXTOP(p_code,l); - break; - default: - return p_code->y_u.Otapl.p; - } - } - return NULL; -} - -PredEntry * -Yap_PredForChoicePt(choiceptr cp, op_numbers *op) { - if (cp == NULL) - return NULL; - return PredForChoicePt(cp->cp_ap, op); -} - static void InitConsultStack( void ) { @@ -662,32 +540,6 @@ Yap_ResetConsultStack( void ) } -/****************************************************************** - - EXECUTING PROLOG CLAUSES - -******************************************************************/ - - -static int -static_in_use(PredEntry *p, int check_everything) -{ -#if defined(YAPOR) || defined(THREADS) - return TRUE; -#else - pred_flags_t pflags = p->PredFlags; - if (pflags & (DynamicPredFlag|LogUpdatePredFlag)) { - return FALSE; - } - if (STATIC_PREDICATES_MARKED) { - return (p->PredFlags & InUsePredFlag); - } else { - /* This code does not work for YAPOR or THREADS!!!!!!!! */ - return(search_for_static_predicate_in_use(p, check_everything)); - } -#endif -} - /****************************************************************** ADDING AND REMOVE INFO TO A PROCEDURE @@ -1452,7 +1304,7 @@ kill_first_log_iblock(LogUpdIndex *c, LogUpdIndex *parent, PredEntry *ap) static void kill_top_static_iblock(StaticIndex *c, PredEntry *ap) { - kill_static_child_indxs(c, static_in_use(ap, TRUE)); + kill_static_child_indxs(c, Yap_static_in_use(ap, TRUE)); RemoveMainIndex(ap); } @@ -1487,7 +1339,7 @@ Yap_kill_iblock(ClauseUnion *blk, ClauseUnion *parent_blk, PredEntry *ap) cl->SiblingIndex = c->SiblingIndex; } } - kill_static_child_indxs(c, static_in_use(ap, TRUE)); + kill_static_child_indxs(c, Yap_static_in_use(ap, TRUE)); } } @@ -2031,7 +1883,7 @@ not_was_reconsulted(PredEntry *p, Term t, int mode) p->src.OwnerFile != AtomUserIn) ) { //if (p->ArityOfPE) // printf("+ %s %s %d\n",NameOfFunctor(p->FunctorOfPred)->StrOfAE,p->src.OwnerFile->StrOfAE, p->cs.p_code.NOfClauses); - retract_all(p, static_in_use(p,TRUE)); + retract_all(p, Yap_static_in_use(p,TRUE)); } // printf("- %s %s\n",NameOfFunctor(p->FunctorOfPred)->StrOfAE,p->src.OwnerFile->StrOfAE); } @@ -2043,7 +1895,7 @@ not_was_reconsulted(PredEntry *p, Term t, int mode) LOCAL_ConsultSp->p = p0; if (LOCAL_ConsultBase[1].mode && !(p->PredFlags & MultiFileFlag)) /* we are in reconsult mode */ { - retract_all(p, static_in_use(p,TRUE)); + retract_all(p, Yap_static_in_use(p,TRUE)); } p->src.OwnerFile = Yap_ConsultingFile( PASS_REGS1 ); } @@ -2146,19 +1998,23 @@ Yap_discontiguous( PredEntry *ap USES_REGS ) } bool -Yap_multiple( PredEntry *ap USES_REGS ) +Yap_multiple( PredEntry *ap, int mode USES_REGS ) { register consult_obj *fp; - if (ap->PredFlags & MultiFileFlag) - return FALSE; + if ((ap->PredFlags & (MultiFileFlag|LogUpdatePredFlag|DynamicPredFlag)) || mode == consult) + return false; + if (LOCAL_consult_level == 0) + return false; for (fp = LOCAL_ConsultSp; fp < LOCAL_ConsultBase; ++fp) if (fp->p == AbsPredProp(ap)) { return false; } return ap->cs.p_code.NOfClauses > 0 && - Yap_ConsultingFile( PASS_REGS1 ) != ap->src.OwnerFile; + ap->src.OwnerFile != AtomNil && + Yap_ConsultingFile( PASS_REGS1 ) != ap->src.OwnerFile && + LOCAL_Including != MkAtomTerm(ap->src.OwnerFile); } static int @@ -2375,18 +2231,34 @@ addclause(Term t, yamop *cp, int mode, Term mod, Term *t4ref) spy_flag = TRUE; goal_expansion_support(p, tf); if (Yap_discontiguous( p ) ) { - Term disc[2]; - disc[0] = MkIntegerTerm( Yap_source_line_no() ); - disc[1] = t; - Yap_PrintWarning( - Yap_MkApplTerm(Yap_MkFunctor(AtomDiscontiguous, 2), 2, disc)); - } else if (Yap_multiple( p PASS_REGS ) ) { - Term redef[3]; - redef[0] = MkIntegerTerm( Yap_source_line_no() ); - redef[1] = t; - redef[2] = MkAtomTerm(p->src.OwnerFile); - Yap_PrintWarning( - Yap_MkApplTerm(Yap_MkFunctor(AtomMultiple, 3), 3, redef)); + Term disc[3], sc[4]; + if (p->ArityOfPE) { + disc[0] = MkAtomTerm(NameOfFunctor(p->FunctorOfPred)); + } else { + disc[1] = MkAtomTerm((Atom)(p->FunctorOfPred)); + } + disc[1] = MkIntTerm(p->ArityOfPE); + disc[2] = Yap_Module_Name(p); + sc[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomDiscontiguous, 3), 3, disc); + sc[1] = MkIntegerTerm( Yap_source_line_no() ); + sc[2] = MkAtomTerm(LOCAL_SourceFileName ); + sc[3] = t; + Yap_PrintWarning( Yap_MkApplTerm(Yap_MkFunctor(AtomStyleCheck, 4), 4, sc) ); + } else if (Yap_multiple( p, mode PASS_REGS ) ) { + Term disc[4], sc[4], disct; + if (p->ArityOfPE) { + disc[0] = MkAtomTerm(NameOfFunctor(p->FunctorOfPred)); + } else { + disc[1] = MkAtomTerm((Atom)(p->FunctorOfPred)); + } + disc[1] = MkIntTerm(p->ArityOfPE); + disc[2] = Yap_Module_Name(p); + disc[3] = MkAtomTerm(p->src.OwnerFile); + sc[0] = Yap_MkApplTerm(Yap_MkFunctor(AtomMultiple, 4), 4, disc); + sc[1] = MkIntegerTerm( Yap_source_line_no() ); + sc[2] = MkAtomTerm(LOCAL_SourceFileName ); + sc[3] = t; + Yap_PrintWarning( Yap_MkApplTerm(Yap_MkFunctor(AtomStyleCheck, 4), 4, sc) ); } if (mode == consult) not_was_reconsulted(p, t, TRUE); @@ -2552,7 +2424,7 @@ Yap_EraseStaticClause(StaticClause *cl, PredEntry *ap, Term mod) { ap->OpcodeOfPred = ap->cs.p_code.TrueCodeOfPred->opc; } - if (cl->ClFlags & HasBlobsMask || static_in_use(ap,TRUE)) { + if (cl->ClFlags & HasBlobsMask || Yap_static_in_use(ap,TRUE)) { LOCK(DeadStaticClausesLock); cl->ClNext = DeadStaticClauses; DeadStaticClauses = cl; @@ -2696,13 +2568,13 @@ Yap_ConsultingFile ( USES_REGS1 ) if (LOCAL_consult_level == 0) { return(AtomUser); } else { - return(Yap_LookupAtom(LOCAL_ConsultBase[2].filename)); + return(Yap_ULookupAtom(LOCAL_ConsultBase[2].filename)); } } /* consult file *file*, *mode* may be one of either consult or reconsult */ static void -init_consult(int mode, const char *file) +init_consult(int mode, const unsigned char *file) { CACHE_REGS if (!LOCAL_ConsultSp) { @@ -2726,7 +2598,7 @@ init_consult(int mode, const char *file) void Yap_init_consult(int mode, const char *file) { - init_consult(mode,file); + init_consult(mode,(const unsigned char *)file); } static Int @@ -2736,8 +2608,8 @@ p_startconsult( USES_REGS1 ) char *smode = RepAtom(AtomOfTerm(Deref(ARG1)))->StrOfAE; int mode; - mode = strcmp("consult",smode); - init_consult(mode, RepAtom(AtomOfTerm(Deref(ARG2)))->StrOfAE); + mode = strcmp("consult",(char *)smode); + init_consult(mode, RepAtom(AtomOfTerm(Deref(ARG2)))->UStrOfAE); t = MkIntTerm(LOCAL_consult_level); return (Yap_unify_constant(ARG3, t)); } @@ -2779,6 +2651,7 @@ p_endconsult( USES_REGS1 ) return (TRUE); } + static void purge_clauses(PredEntry *pred) { @@ -2789,7 +2662,7 @@ purge_clauses(PredEntry *pred) if (pred->PredFlags & IndexedPredFlag) RemoveIndexation(pred); Yap_PutValue(AtomAbol, MkAtomTerm(AtomTrue)); - retract_all(pred, static_in_use(pred,TRUE)); + retract_all(pred, Yap_static_in_use(pred,TRUE)); } } @@ -3083,21 +2956,6 @@ p_number_of_clauses( USES_REGS1 ) return (Yap_unify_constant(ARG3, MkIntegerTerm(ncl))); } -static Int -p_in_use( USES_REGS1 ) -{ /* '$in_use'(+P,+Mod) */ - PredEntry *pe; - Int out; - - pe = get_pred(Deref(ARG1), Deref(ARG2), "$in_use"); - if (EndOfPAEntr(pe)) - return FALSE; - PELOCK(25,pe); - out = static_in_use(pe,TRUE); - UNLOCKPE(42,pe); - return(out); -} - static Int p_new_multifile( USES_REGS1 ) { /* '$new_multifile'(+N,+Ar,+Mod) */ @@ -3196,7 +3054,7 @@ p_is_discontiguous( USES_REGS1 ) PredEntry *pe; bool out; - pe = get_pred(Deref(ARG1), Deref(ARG2), "discontiguous"); + pe = get_pred(Deref(ARG1), Deref(ARG2), "discontigus"); if (EndOfPAEntr(pe)) return FALSE; PELOCK(27,pe); @@ -3568,834 +3426,6 @@ p_compile_mode( USES_REGS1 ) return (TRUE); } -#if !defined(YAPOR) && !defined(THREADS) -static yamop *cur_clause(PredEntry *pe, yamop *codeptr) -{ - StaticClause *cl; - - cl = ClauseCodeToStaticClause(pe->cs.p_code.FirstClause); - do { - if (IN_BLOCK(codeptr,cl,cl->ClSize)) { - return cl->ClCode; - } - if (cl->ClCode == pe->cs.p_code.LastClause) - break; - cl = cl->ClNext; - } while (TRUE); - Yap_Error(SYSTEM_ERROR,TermNil,"could not find clause for indexing code"); - return(NULL); -} - -static yamop *cur_log_upd_clause(PredEntry *pe, yamop *codeptr) -{ - LogUpdClause *cl; - cl = ClauseCodeToLogUpdClause(pe->cs.p_code.FirstClause); - do { - if (IN_BLOCK(codeptr,cl->ClCode,cl->ClSize)) { - return((yamop *)cl->ClCode); - } - cl = cl->ClNext; - } while (cl != NULL); - Yap_Error(SYSTEM_ERROR,TermNil,"could not find clause for indexing code"); - return(NULL); -} - -static Int -search_for_static_predicate_in_use(PredEntry *p, int check_everything) -{ - choiceptr b_ptr = B; - CELL *env_ptr = ENV; - - if (check_everything && P) { - PredEntry *pe = EnvPreg(P); - if (p == pe) return TRUE; - pe = EnvPreg(CP); - if (p == pe) return TRUE; - } - do { - PredEntry *pe; - - /* check first environments that are younger than our latest choicepoint */ - if (check_everything && env_ptr) { - /* - I do not need to check environments for asserts, - only for retracts - */ - while (env_ptr && b_ptr > (choiceptr)env_ptr) { - yamop *cp = (yamop *)env_ptr[E_CP]; - PredEntry *pe; - - pe = EnvPreg(cp); - if (p == pe) return(TRUE); - if (env_ptr != NULL) - env_ptr = (CELL *)(env_ptr[E_E]); - } - } - /* now mark the choicepoint */ - - if (b_ptr) - pe = PredForChoicePt(b_ptr->cp_ap, NULL); - else - return FALSE; - if (pe == p) { - if (check_everything) - return TRUE; - PELOCK(38,p); - if (p->PredFlags & IndexedPredFlag) { - yamop *code_p = b_ptr->cp_ap; - yamop *code_beg = p->cs.p_code.TrueCodeOfPred; - - /* FIX ME */ - - if (p->PredFlags & LogUpdatePredFlag) { - LogUpdIndex *cl = ClauseCodeToLogUpdIndex(code_beg); - if (find_owner_log_index(cl, code_p)) - b_ptr->cp_ap = cur_log_upd_clause(pe, b_ptr->cp_ap->y_u.Otapl.d); - } else if (p->PredFlags & MegaClausePredFlag) { - StaticIndex *cl = ClauseCodeToStaticIndex(code_beg); - if (find_owner_static_index(cl, code_p)) - b_ptr->cp_ap = cur_clause(pe, b_ptr->cp_ap->y_u.Otapl.d); - } else { - /* static clause */ - StaticIndex *cl = ClauseCodeToStaticIndex(code_beg); - if (find_owner_static_index(cl, code_p)) { - b_ptr->cp_ap = cur_clause(pe, b_ptr->cp_ap->y_u.Otapl.d); - } - } - } - UNLOCKPE(63,pe); - } - env_ptr = b_ptr->cp_env; - b_ptr = b_ptr->cp_b; - } while (b_ptr != NULL); - return(FALSE); -} - -static void -mark_pred(int mark, PredEntry *pe) -{ - /* if the predicate is static mark it */ - if (pe->ModuleOfPred) { - PELOCK(39,p); - if (mark) { - pe->PredFlags |= InUsePredFlag; - } else { - pe->PredFlags &= ~InUsePredFlag; - } - UNLOCK(pe->PELock); - } -} - -/* go up the chain of choice_points and environments, - marking all static predicates that current execution is depending - upon */ -static void -do_toggle_static_predicates_in_use(int mask) -{ - choiceptr b_ptr = B; - CELL *env_ptr = ENV; - - if (b_ptr == NULL) - return; - - do { - PredEntry *pe; - - /* check first environments that are younger than our latest choicepoint */ - while (b_ptr > (choiceptr)env_ptr) { - PredEntry *pe = EnvPreg((yamop *)env_ptr[E_CP]); - - mark_pred(mask, pe); - env_ptr = (CELL *)(env_ptr[E_E]); - } - /* now mark the choicepoint */ - if ((b_ptr)) { - if ((pe = PredForChoicePt(b_ptr->cp_ap, NULL))) { - mark_pred(mask, pe); - } - } - env_ptr = b_ptr->cp_env; - b_ptr = b_ptr->cp_b; - } while (b_ptr != NULL); - /* mark or unmark all predicates */ - STATIC_PREDICATES_MARKED = mask; -} - -#endif /* !defined(YAPOR) && !defined(THREADS) */ - -static LogUpdIndex * -find_owner_log_index(LogUpdIndex *cl, yamop *code_p) -{ - yamop *code_beg = cl->ClCode; - yamop *code_end = (yamop *)((char *)cl + cl->ClSize); - - if (code_p >= code_beg && code_p <= code_end) { - return cl; - } - cl = cl->ChildIndex; - while (cl != NULL) { - LogUpdIndex *out; - if ((out = find_owner_log_index(cl, code_p)) != NULL) { - return out; - } - cl = cl->SiblingIndex; - } - return NULL; -} - -static StaticIndex * -find_owner_static_index(StaticIndex *cl, yamop *code_p) -{ - yamop *code_beg = cl->ClCode; - yamop *code_end = (yamop *)((char *)cl + cl->ClSize); - - if (code_p >= code_beg && code_p <= code_end) { - return cl; - } - cl = cl->ChildIndex; - while (cl != NULL) { - StaticIndex *out; - if ((out = find_owner_static_index(cl, code_p)) != NULL) { - return out; - } - cl = cl->SiblingIndex; - } - return NULL; -} - -ClauseUnion * -Yap_find_owner_index(yamop *ipc, PredEntry *ap) -{ - /* we assume we have an owner index */ - if (ap->PredFlags & LogUpdatePredFlag) { - LogUpdIndex *cl = ClauseCodeToLogUpdIndex(ap->cs.p_code.TrueCodeOfPred); - return (ClauseUnion *)find_owner_log_index(cl,ipc); - } else { - StaticIndex *cl = ClauseCodeToStaticIndex(ap->cs.p_code.TrueCodeOfPred); - return (ClauseUnion *)find_owner_static_index(cl,ipc); - } -} - -static Term -all_envs(CELL *env_ptr USES_REGS) -{ - Term tf = AbsPair(HR); - CELL *start = HR; - CELL *bp = NULL; - - /* walk the environment chain */ - while (env_ptr) { - bp = HR; - HR += 2; - /* notice that MkIntegerTerm may increase the Heap */ - bp[0] = MkIntegerTerm(LCL0-env_ptr); - if (HR >= ASP-1024) { - HR = start; - LOCAL_Error_Size = (ASP-1024)-HR; - while (env_ptr) { - LOCAL_Error_Size += 2; - env_ptr = (CELL *)(env_ptr[E_E]); - } - return 0L; - } else { - bp[1] = AbsPair(HR); - } - env_ptr = (CELL *)(env_ptr[E_E]); - } - bp[1] = TermNil; - return tf; -} - -static Term -all_cps(choiceptr b_ptr USES_REGS) -{ - CELL *bp = NULL; - CELL *start = HR; - Term tf = AbsPair(HR); - - while (b_ptr) { - bp = HR; - HR += 2; - /* notice that MkIntegerTerm may increase the Heap */ - bp[0] = MkIntegerTerm((Int)(LCL0-(CELL *)b_ptr)); - if (HR >= ASP-1024) { - HR = start; - LOCAL_Error_Size = (ASP-1024)-HR; - while (b_ptr) { - LOCAL_Error_Size += 2; - b_ptr = b_ptr->cp_b; - } - return 0L; - } else { - bp[1] = AbsPair(HR); - } - b_ptr = b_ptr->cp_b; - } - bp[1] = TermNil; - return tf; -} - - -static Term -all_calls( USES_REGS1 ) -{ - Term ts[4]; - Functor f = Yap_MkFunctor(AtomLocalSp,4); - - ts[0] = MkIntegerTerm((Int)P); - ts[1] = MkIntegerTerm((Int)CP); - if (trueLocalPrologFlag(STACK_DUMP_ON_ERROR_FLAG)) { - ts[2] = all_envs(ENV PASS_REGS); - ts[3] = all_cps(B PASS_REGS); - if (ts[2] == 0L || - ts[3] == 0L) - return 0L; - } else { - ts[2] = ts[3] = TermNil; - } - return Yap_MkApplTerm(f,4,ts); -} - -Term -Yap_all_calls( void ) -{ - CACHE_REGS - return all_calls( PASS_REGS1 ); -} - -static Int -p_all_choicepoints( USES_REGS1 ) -{ - Term t; - while ((t = all_cps(B PASS_REGS)) == 0L) { - if (!Yap_gcl(LOCAL_Error_Size, 1, ENV, gc_P(P,CP))) { - Yap_Error(OUT_OF_STACK_ERROR, TermNil, "while dumping choicepoints"); - return FALSE; - } - } - return Yap_unify(ARG1,t); -} - -static Int -p_all_envs( USES_REGS1 ) -{ - Term t; - while ((t = all_envs(ENV PASS_REGS)) == 0L) { - if (!Yap_gcl(LOCAL_Error_Size, 1, ENV, gc_P(P,CP))) { - Yap_Error(OUT_OF_STACK_ERROR, TermNil, "while dumping environments"); - return FALSE; - } - } - return Yap_unify(ARG1,t); -} - -static Int -p_current_stack( USES_REGS1 ) -{ - Term t; - while ((t = all_calls( PASS_REGS1 )) == 0L) { - if (!Yap_gcl(LOCAL_Error_Size, 1, ENV, gc_P(P,CP))) { - Yap_Error(OUT_OF_STACK_ERROR, TermNil, "while dumping stack"); - return FALSE; - } - } - return Yap_unify(ARG1,t); -} - -/* This predicate is to be used by reconsult to mark all predicates - currently in use as being executed. - - The idea is to go up the chain of choice_points and environments. - - */ -static Int -p_toggle_static_predicates_in_use( USES_REGS1 ) -{ -#if !defined(YAPOR) && !defined(THREADS) - Term t = Deref(ARG1); - Int mask; - - /* find out whether we need to mark or unmark */ - if (IsVarTerm(t)) { - Yap_Error(INSTANTIATION_ERROR,t,"toggle_static_predicates_in_use/1"); - return(FALSE); - } - if (!IsIntTerm(t)) { - Yap_Error(TYPE_ERROR_INTEGER,t,"toggle_static_predicates_in_use/1"); - return(FALSE); - } else { - mask = IntOfTerm(t); - } - do_toggle_static_predicates_in_use(mask); -#endif - return TRUE; -} - -static void -clause_was_found(PredEntry *pp, Atom *pat, arity_t *parity) { - if (pp->ModuleOfPred == IDB_MODULE) { - if (pp->PredFlags & NumberDBPredFlag) { - *parity = 0; - *pat = AtomInteger; - } else if (pp->PredFlags & AtomDBPredFlag) { - *parity = 0; - *pat = (Atom)pp->FunctorOfPred; - } else { - *pat = NameOfFunctor(pp->FunctorOfPred); - *parity = ArityOfFunctor(pp->FunctorOfPred); - } - } else { - *parity = pp->ArityOfPE; - if (pp->ArityOfPE) { - *pat = NameOfFunctor(pp->FunctorOfPred); - } else { - *pat = (Atom)(pp->FunctorOfPred); - } - } -} - -static void -code_in_pred_info(PredEntry *pp, Atom *pat, arity_t *parity) { - clause_was_found(pp, pat, parity); -} - -static int -code_in_pred_lu_index(LogUpdIndex *icl, yamop *codeptr, CODEADDR *startp, CODEADDR *endp) { - LogUpdIndex *cicl; - if (IN_BLOCK(codeptr,icl,icl->ClSize)) { - if (startp) *startp = (CODEADDR)icl; - if (endp) *endp = (CODEADDR)icl+icl->ClSize; - return TRUE; - } - cicl = icl->ChildIndex; - while (cicl != NULL) { - if (code_in_pred_lu_index(cicl, codeptr, startp, endp)) - return TRUE; - cicl = cicl->SiblingIndex; - } - return FALSE; -} - -static int -code_in_pred_s_index(StaticIndex *icl, yamop *codeptr, CODEADDR *startp, CODEADDR *endp) { - StaticIndex *cicl; - if (IN_BLOCK(codeptr,icl,icl->ClSize)) { - if (startp) *startp = (CODEADDR)icl; - if (endp) *endp = (CODEADDR)icl+icl->ClSize; - return TRUE; - } - cicl = icl->ChildIndex; - while (cicl != NULL) { - if (code_in_pred_s_index(cicl, codeptr, startp, endp)) - return TRUE; - cicl = cicl->SiblingIndex; - } - return FALSE; -} - -static Int -find_code_in_clause(PredEntry *pp, yamop *codeptr, CODEADDR *startp, CODEADDR *endp) { - Int i = 1; - yamop *clcode; - - clcode = pp->cs.p_code.FirstClause; - if (clcode != NULL) { - if (pp->PredFlags & LogUpdatePredFlag) { - LogUpdClause *cl = ClauseCodeToLogUpdClause(clcode); - do { - if (IN_BLOCK(codeptr,(CODEADDR)cl,cl->ClSize)) { - if (startp) - *startp = (CODEADDR)cl; - if (endp) - *endp = (CODEADDR)cl+cl->ClSize; - return i; - } - i++; - cl = cl->ClNext; - } while (cl != NULL); - } else if (pp->PredFlags & DynamicPredFlag) { - do { - DynamicClause *cl; - - cl = ClauseCodeToDynamicClause(clcode); - if (IN_BLOCK(codeptr,cl,cl->ClSize)) { - if (startp) - *startp = (CODEADDR)cl; - if (endp) - *endp = (CODEADDR)cl+cl->ClSize; - return i; - } - if (clcode == pp->cs.p_code.LastClause) - break; - i++; - clcode = NextDynamicClause(clcode); - } while (TRUE); - } else if (pp->PredFlags & MegaClausePredFlag) { - MegaClause *cl; - - cl = ClauseCodeToMegaClause(clcode); - if (IN_BLOCK(codeptr,cl,cl->ClSize)) { - if (startp) - *startp = (CODEADDR)cl; - if (endp) - *endp = (CODEADDR)cl+cl->ClSize; - return 1+((char *)codeptr-(char *)cl->ClCode)/cl->ClItemSize; - } - } else { - StaticClause *cl; - - cl = ClauseCodeToStaticClause(clcode); - do { - if (IN_BLOCK(codeptr,cl,cl->ClSize)) { - if (startp) - *startp = (CODEADDR)cl; - if (endp) - *endp = (CODEADDR)cl+cl->ClSize; - return i; - } - if (cl->ClCode == pp->cs.p_code.LastClause) - break; - i++; - cl = cl->ClNext; - } while (TRUE); - } - } - return(0); -} - -static int -cl_code_in_pred(PredEntry *pp, yamop *codeptr, CODEADDR *startp, CODEADDR *endp) { - Int out; - - PELOCK(39,pp); - /* check if the codeptr comes from the indexing code */ - if (pp->PredFlags & IndexedPredFlag) { - if (pp->PredFlags & LogUpdatePredFlag) { - if (code_in_pred_lu_index(ClauseCodeToLogUpdIndex(pp->cs.p_code.TrueCodeOfPred), codeptr, startp, endp)) { - UNLOCK(pp->PELock); - return TRUE; - } - } else { - if (code_in_pred_s_index(ClauseCodeToStaticIndex(pp->cs.p_code.TrueCodeOfPred), codeptr, startp, endp)) { - UNLOCK(pp->PELock); - return TRUE; - } - } - } - if (pp->PredFlags & (CPredFlag|AsmPredFlag|UserCPredFlag)) { - StaticClause *cl = ClauseCodeToStaticClause(pp->CodeOfPred); - if (IN_BLOCK(codeptr,(CODEADDR)cl,cl->ClSize)) { - if (startp) - *startp = (CODEADDR)cl; - if (endp) - *endp = (CODEADDR)cl+cl->ClSize; - UNLOCK(pp->PELock); - return TRUE; - } else { - UNLOCK(pp->PELock); - return FALSE; - } - } else { - out = find_code_in_clause(pp, codeptr, startp, endp); - } - UNLOCK(pp->PELock); - if (out) return TRUE; - return FALSE; -} - -static Int -code_in_pred(PredEntry *pp, Atom *pat, arity_t *parity, yamop *codeptr) { - Int out; - PELOCK(40,pp); - /* check if the codeptr comes from the indexing code */ - if (pp->PredFlags & IndexedPredFlag) { - if (pp->PredFlags & LogUpdatePredFlag) { - if (code_in_pred_lu_index(ClauseCodeToLogUpdIndex(pp->cs.p_code.TrueCodeOfPred), codeptr, NULL, NULL)) { - code_in_pred_info(pp, pat, parity); - UNLOCK(pp->PELock); - return -1; - } - } else { - if (code_in_pred_s_index(ClauseCodeToStaticIndex(pp->cs.p_code.TrueCodeOfPred), codeptr, NULL, NULL)) { - code_in_pred_info(pp, pat, parity); - UNLOCK(pp->PELock); - return -1; - } - } - } - if ((out = find_code_in_clause(pp, codeptr, NULL, NULL))) { - clause_was_found(pp, pat, parity); - } - UNLOCK(pp->PELock); - return out; -} - -static Int -PredForCode(yamop *codeptr, Atom *pat, arity_t *parity, Term *pmodule) { - Int found = 0; - ModEntry *me = CurrentModules; - - /* should we allow the user to see hidden predicates? */ - while (me) { - - PredEntry *pp; - pp = me->PredForME; - while (pp != NULL) { - if ((found = code_in_pred(pp, pat, parity, codeptr)) != 0) { - *pmodule = MkAtomTerm(me->AtomOfME); - return found; - } - pp = pp->NextPredOfModule; - } - me = me->NextME; - } - return(0); -} - -Int -Yap_PredForCode(yamop *codeptr, find_pred_type where_from, Atom *pat, arity_t *parity, Term *pmodule) { - PredEntry *p; - - if (where_from == FIND_PRED_FROM_CP) { - p = PredForChoicePt(codeptr, NULL); - } else if (where_from == FIND_PRED_FROM_ENV) { - p = EnvPreg(codeptr); - if (p) { - Int out; - if (p->ModuleOfPred == PROLOG_MODULE) - *pmodule = TermProlog; - else - *pmodule = p->ModuleOfPred; - out = find_code_in_clause(p, codeptr, NULL, NULL); - clause_was_found(p, pat, parity); - return out; - } - } else { - return PredForCode(codeptr, pat, parity, pmodule); - } - if (p == NULL) { - return 0; - } - clause_was_found(p, pat, parity); - if (p->ModuleOfPred == PROLOG_MODULE) - *pmodule = TermProlog; - else - *pmodule = p->ModuleOfPred; - return -1; -} - -/* intruction blocks we found ourselves at */ -static PredEntry * -walk_got_lu_block(LogUpdIndex *cl, CODEADDR *startp, CODEADDR *endp) -{ - PredEntry *pp = cl->ClPred; - *startp = (CODEADDR)cl; - *endp = (CODEADDR)cl+cl->ClSize; - return pp; -} - -/* intruction blocks we found ourselves at */ -static PredEntry * -walk_got_lu_clause(LogUpdClause *cl, CODEADDR *startp, CODEADDR *endp) -{ - *startp = (CODEADDR)cl; - *endp = (CODEADDR)cl+cl->ClSize; - return cl->ClPred; -} - -/* we hit a meta-call, so we don't know what is happening */ -static PredEntry * -found_meta_call(CODEADDR *startp, CODEADDR *endp) -{ - PredEntry *pp = PredMetaCall; - *startp = (CODEADDR)&(pp->OpcodeOfPred); - *endp = (CODEADDR)NEXTOP((yamop *)&(pp->OpcodeOfPred),e); - return pp; -} - -/* intruction blocks we found ourselves at */ -static PredEntry * -walk_found_c_pred(PredEntry *pp, CODEADDR *startp, CODEADDR *endp) -{ - StaticClause *cl = ClauseCodeToStaticClause(pp->CodeOfPred); - *startp = (CODEADDR)&(cl->ClCode); - *endp = (CODEADDR)&(cl->ClCode)+cl->ClSize; - return pp; -} - -/* we hit a mega-clause, no point in going on */ -static PredEntry * -found_mega_clause(PredEntry *pp, CODEADDR *startp, CODEADDR *endp) -{ - MegaClause *mcl = ClauseCodeToMegaClause(pp->cs.p_code.FirstClause); - *startp = (CODEADDR)mcl; - *endp = (CODEADDR)mcl+mcl->ClSize; - return pp; -} - -/* we hit a mega-clause, no point in going on */ -static PredEntry * -found_idb_clause(yamop *pc, CODEADDR *startp, CODEADDR *endp) -{ - LogUpdClause *cl = ClauseCodeToLogUpdClause(pc); - - *startp = (CODEADDR)cl; - *endp = (CODEADDR)cl+cl->ClSize; - return cl->ClPred; -} - -/* we hit a expand_index, no point in going on */ -static PredEntry * -found_expand_index(yamop *pc, CODEADDR *startp, CODEADDR *endp, yamop *codeptr USES_REGS) -{ - PredEntry *pp = codeptr->y_u.sssllp.p; - if (pc == codeptr) { - *startp = (CODEADDR)codeptr; - *endp = (CODEADDR)NEXTOP(codeptr,sssllp); - } - return pp; -} - -/* we hit a expand_index, no point in going on */ -static PredEntry * -found_fail(yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS) -{ - PredEntry *pp = RepPredProp(Yap_GetPredPropByAtom(AtomFail,CurrentModule)); - *startp = *endp = (CODEADDR)FAILCODE; - return pp; -} - -/* we hit a expand_index, no point in going on */ -static PredEntry * -found_owner_op(yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS) -{ - PredEntry *pp = ((PredEntry *)(Unsigned(pc)-(CELL)(&(((PredEntry *)NULL)->OpcodeOfPred)))); - *startp = (CODEADDR)&(pp->OpcodeOfPred); - *endp = (CODEADDR)NEXTOP((yamop *)&(pp->OpcodeOfPred),e); - return pp; -} - -/* we hit a expand_index, no point in going on */ -static PredEntry * -found_expand(yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS) -{ - PredEntry *pp = ((PredEntry *)(Unsigned(pc)-(CELL)(&(((PredEntry *)NULL)->cs.p_code.ExpandCode)))); - *startp = (CODEADDR)&(pp->cs.p_code.ExpandCode); - *endp = (CODEADDR)NEXTOP((yamop *)&(pp->cs.p_code.ExpandCode),e); - return pp; -} - -static PredEntry * -found_ystop(yamop *pc, int clause_code, CODEADDR *startp, CODEADDR *endp, PredEntry *pp USES_REGS) -{ - if (pc == YESCODE) { - pp = RepPredProp(Yap_GetPredPropByAtom(AtomTrue,CurrentModule)); - *startp = (CODEADDR)YESCODE; - *endp = (CODEADDR)YESCODE+(CELL)(NEXTOP((yamop *)NULL,e)); - return pp; - } - if (!pp) { - /* must be an index */ - PredEntry **pep = (PredEntry **)pc->y_u.l.l; - pp = pep[-1]; - } - if (pp->PredFlags & LogUpdatePredFlag) { - if (clause_code) { - LogUpdClause *cl = ClauseCodeToLogUpdClause(pc->y_u.l.l); - *startp = (CODEADDR)cl; - *endp = (CODEADDR)cl+cl->ClSize; - } else { - LogUpdIndex *cl = ClauseCodeToLogUpdIndex(pc->y_u.l.l); - *startp = (CODEADDR)cl; - *endp = (CODEADDR)cl+cl->ClSize; - } - } else if (pp->PredFlags & DynamicPredFlag) { - DynamicClause *cl = ClauseCodeToDynamicClause(pc->y_u.l.l); - *startp = (CODEADDR)cl; - *endp = (CODEADDR)cl+cl->ClSize; - } else { - if (clause_code) { - StaticClause *cl = ClauseCodeToStaticClause(pc->y_u.l.l); - *startp = (CODEADDR)cl; - *endp = (CODEADDR)cl+cl->ClSize; - } else { - StaticIndex *cl = ClauseCodeToStaticIndex(pc->y_u.l.l); - *startp = (CODEADDR)cl; - *endp = (CODEADDR)cl+cl->ClSize; - } - } - return pp; -} - -static PredEntry * -ClauseInfoForCode(yamop *codeptr, CODEADDR *startp, CODEADDR *endp USES_REGS) { - yamop *pc; - PredEntry *pp = NULL; - int clause_code = FALSE; - - if (codeptr >= COMMA_CODE && - codeptr < FAILCODE) { - pp = RepPredProp(Yap_GetPredPropByFunc(FunctorComma,CurrentModule)); - *startp = (CODEADDR)COMMA_CODE; - *endp = (CODEADDR)(FAILCODE-1); - return pp; - } - pc = codeptr; -#include "walkclause.h" - return NULL; -} - -PredEntry * -Yap_PredEntryForCode(yamop *codeptr, find_pred_type where_from, CODEADDR *startp, CODEADDR *endp) { - CACHE_REGS - if (where_from == FIND_PRED_FROM_CP) { - PredEntry *pp = PredForChoicePt(codeptr, NULL); - if (cl_code_in_pred(pp, codeptr, startp, endp)) { - return pp; - } - } else if (where_from == FIND_PRED_FROM_ENV) { - PredEntry *pp = EnvPreg(codeptr); - if (cl_code_in_pred(pp, codeptr, startp, endp)) { - return pp; - } - } else { - return ClauseInfoForCode(codeptr, startp, endp PASS_REGS); - } - return NULL; -} - - -static Int -p_pred_for_code( USES_REGS1 ) { - yamop *codeptr; - Atom at; - arity_t arity; - Term tmodule = TermProlog; - Int cl; - Term t = Deref(ARG1); - - if (IsVarTerm(t)) { - return FALSE; - } else if (IsApplTerm(t) && FunctorOfTerm(t) == FunctorStaticClause) { - codeptr = Yap_ClauseFromTerm(t)->ClCode; - } else if (IsIntegerTerm(t)) { - codeptr = (yamop *)IntegerOfTerm(t); - } else if (IsDBRefTerm(t)) { - codeptr = (yamop *)DBRefOfTerm(t); - } else { - return FALSE; - } - cl = PredForCode(codeptr, &at, &arity, &tmodule); - if (!tmodule) tmodule = TermProlog; - if (cl == 0) { - return Yap_unify(ARG5,MkIntTerm(0)); - } else { - return(Yap_unify(ARG2,MkAtomTerm(at)) && - Yap_unify(ARG3,MkIntegerTerm(arity)) && - Yap_unify(ARG4,tmodule) && - Yap_unify(ARG5,MkIntegerTerm(cl))); - } -} static Int p_is_profiled( USES_REGS1 ) @@ -4411,7 +3441,7 @@ p_is_profiled( USES_REGS1 ) YapBind((CELL *)t,ta); return(TRUE); } else if (!IsAtomTerm(t)) return(FALSE); - s = RepAtom(AtomOfTerm(t))->StrOfAE; + s = (char *)RepAtom(AtomOfTerm(t))->StrOfAE; if (strcmp(s,"on") == 0) { PROFILING = TRUE; Yap_InitComma(); @@ -4509,7 +3539,7 @@ p_is_call_counted( USES_REGS1 ) YapBind((CELL *)t,ta); return(TRUE); } else if (!IsAtomTerm(t)) return(FALSE); - s = RepAtom(AtomOfTerm(t))->StrOfAE; + s = (char *)RepAtom(AtomOfTerm(t))->StrOfAE; if (strcmp(s,"on") == 0) { CALL_COUNTING = TRUE; Yap_InitComma(); @@ -4591,24 +3621,6 @@ p_clean_up_dead_clauses( USES_REGS1 ) return TRUE; } -static Int /* $parent_pred(Module, Name, Arity) */ -p_parent_pred( USES_REGS1 ) -{ - /* This predicate is called from the debugger. - We assume a sequence of the form a -> b */ - Atom at; - arity_t arity; - Term module; - if (!PredForCode(P_before_spy, &at, &arity, &module)) { - return(Yap_unify(ARG1, MkIntTerm(0)) && - Yap_unify(ARG2, MkAtomTerm(AtomMetaCall)) && - Yap_unify(ARG3, MkIntTerm(0))); - } - return(Yap_unify(ARG1, MkIntTerm(module)) && - Yap_unify(ARG2, MkAtomTerm(at)) && - Yap_unify(ARG3, MkIntTerm(arity))); -} - static Int /* $system_predicate(P) */ p_system_pred( USES_REGS1 ) { @@ -5213,6 +4225,144 @@ replace_integer(Term orig, UInt new) return orig; } +static UInt +tree_index_ssz(StaticIndex *x) +{ + UInt sz = x->ClSize; + x = x->ChildIndex; + while (x != NULL) { + sz += tree_index_ssz(x); + x = x->SiblingIndex; + } + return sz; +} + +static UInt +index_ssz(StaticIndex *x, PredEntry *pe) +{ + UInt sz = 0; + yamop *ep = ExpandClausesFirst; + if (pe->PredFlags & MegaClausePredFlag) { + MegaClause *mcl = ClauseCodeToMegaClause(pe->cs.p_code.FirstClause); + if (mcl->ClFlags & ExoMask) { + struct index_t *i = ((struct index_t **)(pe->cs.p_code.FirstClause))[0]; + sz = 0; + + while (i) { + sz = i->size+sz; + i = i->next; + } + return sz; + } + } + /* expand clause blocks */ + while (ep) { + if (ep->y_u.sssllp.p == pe) + sz += (UInt)NEXTOP((yamop *)NULL,sssllp)+ep->y_u.sssllp.s1*sizeof(yamop *); + ep = ep->y_u.sssllp.snext; + } + /* main indexing tree */ + sz += tree_index_ssz(x); + return sz; +} + +#ifdef DEBUG +static Int +p_predicate_lu_cps( USES_REGS1 ) +{ + return Yap_unify(ARG1, MkIntegerTerm(Yap_LiveCps)) && + Yap_unify(ARG2, MkIntegerTerm(Yap_FreedCps)) && + Yap_unify(ARG3, MkIntegerTerm(Yap_DirtyCps)) && + Yap_unify(ARG4, MkIntegerTerm(Yap_NewCps)); +} +#endif + +static Int +static_statistics(PredEntry *pe) +{ + CACHE_REGS + UInt sz = sizeof(PredEntry), cls = 0, isz = 0; + StaticClause *cl = ClauseCodeToStaticClause(pe->cs.p_code.FirstClause); + + if (pe->cs.p_code.NOfClauses > 1 && + pe->cs.p_code.TrueCodeOfPred != pe->cs.p_code.FirstClause) { + isz = index_ssz(ClauseCodeToStaticIndex(pe->cs.p_code.TrueCodeOfPred), pe); + } + if (pe->PredFlags & MegaClausePredFlag) { + MegaClause *mcl = ClauseCodeToMegaClause(pe->cs.p_code.FirstClause); + return Yap_unify(ARG3, MkIntegerTerm(mcl->ClSize/mcl->ClItemSize)) && + Yap_unify(ARG4, MkIntegerTerm(mcl->ClSize)) && + Yap_unify(ARG5, MkIntegerTerm(isz)); + } + if (pe->cs.p_code.NOfClauses) { + do { + cls++; + sz += cl->ClSize; + if (cl->ClCode == pe->cs.p_code.LastClause) + break; + cl = cl->ClNext; + } while (TRUE); + } + return Yap_unify(ARG3, MkIntegerTerm(cls)) && + Yap_unify(ARG4, MkIntegerTerm(sz)) && + Yap_unify(ARG5, MkIntegerTerm(isz)); +} + +static Int +p_static_pred_statistics( USES_REGS1 ) +{ + Int out; + PredEntry *pe; + + pe = get_pred( Deref(ARG1), Deref(ARG2), "predicate_statistics"); + if (pe == NIL) + return (FALSE); + PELOCK(50,pe); + if (pe->PredFlags & (DynamicPredFlag|LogUpdatePredFlag|UserCPredFlag|AsmPredFlag|CPredFlag|BinaryPredFlag)) { + /* should use '$recordedp' in this case */ + UNLOCK(pe->PELock); + return FALSE; + } + out = static_statistics(pe); + UNLOCK(pe->PELock); + return out; +} + +static Int +p_predicate_erased_statistics( USES_REGS1 ) +{ + UInt sz = 0, cls = 0; + UInt isz = 0, icls = 0; + PredEntry *pe; + LogUpdClause *cl = DBErasedList; + LogUpdIndex *icl = DBErasedIList; + Term tpred = ArgOfTerm(2,Deref(ARG1)); + Term tmod = ArgOfTerm(1,Deref(ARG1)); + + if (EndOfPAEntr(pe=get_pred(tpred, tmod, "predicate_erased_statistics"))) + return FALSE; + while (cl) { + if (cl->ClPred == pe) { + cls++; + sz += cl->ClSize; + } + cl = cl->ClNext; + } + while (icl) { + if (pe == icl->ClPred) { + icls++; + isz += icl->ClSize; + } + icl = icl->SiblingIndex; + } + return + Yap_unify(ARG2,MkIntegerTerm(cls)) && + Yap_unify(ARG3,MkIntegerTerm(sz)) && + Yap_unify(ARG4,MkIntegerTerm(icls)) && + Yap_unify(ARG5,MkIntegerTerm(isz)); +} + + void /* $hidden_predicate(P) */ Yap_UpdateTimestamps(PredEntry *ap) { @@ -5514,577 +4664,6 @@ p_continue_static_clause( USES_REGS1 ) return fetch_next_static_clause(pe, ipc, Deref(ARG3), ARG4, ARG5, B->cp_ap, FALSE); } -#if LOW_PROF - -static void -add_code_in_lu_index(LogUpdIndex *cl, PredEntry *pp) -{ - char *code_end = (char *)cl + cl->ClSize; - Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_LU_INDEX); - cl = cl->ChildIndex; - while (cl != NULL) { - add_code_in_lu_index(cl, pp); - cl = cl->SiblingIndex; - } -} - -static void -add_code_in_static_index(StaticIndex *cl, PredEntry *pp) -{ - char *code_end = (char *)cl + cl->ClSize; - Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_STATIC_INDEX); - cl = cl->ChildIndex; - while (cl != NULL) { - add_code_in_static_index(cl, pp); - cl = cl->SiblingIndex; - } -} - - -static void -add_code_in_pred(PredEntry *pp) { - yamop *clcode; - - PELOCK(49,pp); - /* check if the codeptr comes from the indexing code */ - - /* highly likely this is used for indexing */ - Yap_inform_profiler_of_clause(&(pp->OpcodeOfPred), &(pp->OpcodeOfPred)+1, pp, GPROF_INIT_OPCODE); - if (pp->PredFlags & (CPredFlag|AsmPredFlag)) { - char *code_end; - StaticClause *cl; - - clcode = pp->CodeOfPred; - cl = ClauseCodeToStaticClause(clcode); - code_end = (char *)cl + cl->ClSize; - Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_SYSTEM_CODE); - UNLOCK(pp->PELock); - return; - } - Yap_inform_profiler_of_clause(&(pp->cs.p_code.ExpandCode), &(pp->cs.p_code.ExpandCode)+1, pp, GPROF_INIT_EXPAND); - clcode = pp->cs.p_code.TrueCodeOfPred; - if (pp->PredFlags & IndexedPredFlag) { - if (pp->PredFlags & LogUpdatePredFlag) { - LogUpdIndex *cl = ClauseCodeToLogUpdIndex(clcode); - add_code_in_lu_index(cl, pp); - } else { - StaticIndex *cl = ClauseCodeToStaticIndex(clcode); - add_code_in_static_index(cl, pp); - } - } - clcode = pp->cs.p_code.FirstClause; - if (clcode != NULL) { - if (pp->PredFlags & LogUpdatePredFlag) { - LogUpdClause *cl = ClauseCodeToLogUpdClause(clcode); - do { - char *code_end; - - code_end = (char *)cl + cl->ClSize; - Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_LOG_UPD_CLAUSE); - cl = cl->ClNext; - } while (cl != NULL); - } else if (pp->PredFlags & DynamicPredFlag) { - do { - DynamicClause *cl; - CODEADDR code_end; - - cl = ClauseCodeToDynamicClause(clcode); - code_end = (CODEADDR)cl + cl->ClSize; - Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_DYNAMIC_CLAUSE); - if (clcode == pp->cs.p_code.LastClause) - break; - clcode = NextDynamicClause(clcode); - } while (TRUE); - } else { - StaticClause *cl = ClauseCodeToStaticClause(clcode); - do { - char *code_end; - - code_end = (char *)cl + cl->ClSize; - Yap_inform_profiler_of_clause(cl, code_end, pp,GPROF_INIT_STATIC_CLAUSE); - if (cl->ClCode == pp->cs.p_code.LastClause) - break; - cl = cl->ClNext; - } while (TRUE); - } - } - UNLOCK(pp->PELock); -} - - -void -Yap_dump_code_area_for_profiler(void) { - ModEntry *me = CurrentModules; - - while (me) { - PredEntry *pp = me->PredForME; - - while (pp != NULL) { - /* if (pp->ArityOfPE) { - fprintf(stderr,"%s/%d %p\n", - RepAtom(NameOfFunctor(pp->FunctorOfPred))->StrOfAE, - pp->ArityOfPE, - pp); - } else { - fprintf(stderr,"%s %p\n", - RepAtom((Atom)(pp->FunctorOfPred))->StrOfAE, - pp); - }*/ - add_code_in_pred(pp); - pp = pp->NextPredOfModule; - } - me = me->NextME; - } - Yap_inform_profiler_of_clause(COMMA_CODE, FAILCODE, RepPredProp(Yap_GetPredPropByFunc(FunctorComma,0)), GPROF_INIT_COMMA); - Yap_inform_profiler_of_clause(FAILCODE, FAILCODE+1, RepPredProp(Yap_GetPredPropByAtom(AtomFail,0)), GPROF_INIT_FAIL); -} - -#endif /* LOW_PROF */ - -static UInt -tree_index_ssz(StaticIndex *x) -{ - UInt sz = x->ClSize; - x = x->ChildIndex; - while (x != NULL) { - sz += tree_index_ssz(x); - x = x->SiblingIndex; - } - return sz; -} - -static UInt -index_ssz(StaticIndex *x, PredEntry *pe) -{ - UInt sz = 0; - yamop *ep = ExpandClausesFirst; - if (pe->PredFlags & MegaClausePredFlag) { - MegaClause *mcl = ClauseCodeToMegaClause(pe->cs.p_code.FirstClause); - if (mcl->ClFlags & ExoMask) { - struct index_t *i = ((struct index_t **)(pe->cs.p_code.FirstClause))[0]; - sz = 0; - - while (i) { - sz = i->size+sz; - i = i->next; - } - return sz; - } - } - /* expand clause blocks */ - while (ep) { - if (ep->y_u.sssllp.p == pe) - sz += (UInt)NEXTOP((yamop *)NULL,sssllp)+ep->y_u.sssllp.s1*sizeof(yamop *); - ep = ep->y_u.sssllp.snext; - } - /* main indexing tree */ - sz += tree_index_ssz(x); - return sz; -} - -static Int -static_statistics(PredEntry *pe) -{ - CACHE_REGS - UInt sz = sizeof(PredEntry), cls = 0, isz = 0; - StaticClause *cl = ClauseCodeToStaticClause(pe->cs.p_code.FirstClause); - - if (pe->cs.p_code.NOfClauses > 1 && - pe->cs.p_code.TrueCodeOfPred != pe->cs.p_code.FirstClause) { - isz = index_ssz(ClauseCodeToStaticIndex(pe->cs.p_code.TrueCodeOfPred), pe); - } - if (pe->PredFlags & MegaClausePredFlag) { - MegaClause *mcl = ClauseCodeToMegaClause(pe->cs.p_code.FirstClause); - return Yap_unify(ARG3, MkIntegerTerm(mcl->ClSize/mcl->ClItemSize)) && - Yap_unify(ARG4, MkIntegerTerm(mcl->ClSize)) && - Yap_unify(ARG5, MkIntegerTerm(isz)); - } - if (pe->cs.p_code.NOfClauses) { - do { - cls++; - sz += cl->ClSize; - if (cl->ClCode == pe->cs.p_code.LastClause) - break; - cl = cl->ClNext; - } while (TRUE); - } - return Yap_unify(ARG3, MkIntegerTerm(cls)) && - Yap_unify(ARG4, MkIntegerTerm(sz)) && - Yap_unify(ARG5, MkIntegerTerm(isz)); -} - -static Int -p_static_pred_statistics( USES_REGS1 ) -{ - Int out; - PredEntry *pe; - - pe = get_pred( Deref(ARG1), Deref(ARG2), "predicate_statistics"); - if (pe == NIL) - return (FALSE); - PELOCK(50,pe); - if (pe->PredFlags & (DynamicPredFlag|LogUpdatePredFlag|UserCPredFlag|AsmPredFlag|CPredFlag|BinaryPredFlag)) { - /* should use '$recordedp' in this case */ - UNLOCK(pe->PELock); - return FALSE; - } - out = static_statistics(pe); - UNLOCK(pe->PELock); - return out; -} - -static Int -p_predicate_erased_statistics( USES_REGS1 ) -{ - UInt sz = 0, cls = 0; - UInt isz = 0, icls = 0; - PredEntry *pe; - LogUpdClause *cl = DBErasedList; - LogUpdIndex *icl = DBErasedIList; - Term tpred = ArgOfTerm(2,Deref(ARG1)); - Term tmod = ArgOfTerm(1,Deref(ARG1)); - - if (EndOfPAEntr(pe=get_pred(tpred, tmod, "predicate_erased_statistics"))) - return FALSE; - while (cl) { - if (cl->ClPred == pe) { - cls++; - sz += cl->ClSize; - } - cl = cl->ClNext; - } - while (icl) { - if (pe == icl->ClPred) { - icls++; - isz += icl->ClSize; - } - icl = icl->SiblingIndex; - } - return - Yap_unify(ARG2,MkIntegerTerm(cls)) && - Yap_unify(ARG3,MkIntegerTerm(sz)) && - Yap_unify(ARG4,MkIntegerTerm(icls)) && - Yap_unify(ARG5,MkIntegerTerm(isz)); -} - -#ifdef DEBUG -static Int -p_predicate_lu_cps( USES_REGS1 ) -{ - return Yap_unify(ARG1, MkIntegerTerm(Yap_LiveCps)) && - Yap_unify(ARG2, MkIntegerTerm(Yap_FreedCps)) && - Yap_unify(ARG3, MkIntegerTerm(Yap_DirtyCps)) && - Yap_unify(ARG4, MkIntegerTerm(Yap_NewCps)); -} -#endif - -static Int -p_program_continuation( USES_REGS1 ) -{ - PredEntry *pe = EnvPreg((yamop *)((ENV_Parent(ENV))[E_CP])); - if (pe->ModuleOfPred) { - if (!Yap_unify(ARG1,pe->ModuleOfPred)) - return FALSE; - } else { - if (!Yap_unify(ARG1,TermProlog)) - return FALSE; - } - if (pe->ArityOfPE) { - if (!Yap_unify(ARG2,MkAtomTerm(NameOfFunctor(pe->FunctorOfPred)))) - return FALSE; - if (!Yap_unify(ARG3,MkIntegerTerm(ArityOfFunctor(pe->FunctorOfPred)))) - return FALSE; - } else { - if (!Yap_unify(ARG2,MkAtomTerm((Atom)pe->FunctorOfPred))) - return FALSE; - if (!Yap_unify(ARG3,MkIntTerm(0))) - return FALSE; - } - return TRUE; -} - -static Term -BuildActivePred(PredEntry *ap, CELL *vect) -{ - CACHE_REGS - arity_t i; - - if (!ap->ArityOfPE) { - return MkVarTerm(); - } - for (i = 0; i < ap->ArityOfPE; i++) { - Term t = Deref(vect[i]); - if (IsVarTerm(t)) { - CELL *pt = VarOfTerm(t); - /* one stack */ - if (pt > HR) { - Term nt = MkVarTerm(); - Yap_unify(t, nt); - } - } - } - return Yap_MkApplTerm(ap->FunctorOfPred, ap->ArityOfPE, vect); -} - -static int -UnifyPredInfo(PredEntry *pe, int start_arg USES_REGS) { - arity_t arity = pe->ArityOfPE; - Term tmod, tname; - - if (pe->ModuleOfPred != IDB_MODULE) { - if (pe->ModuleOfPred == PROLOG_MODULE) { - tmod = TermProlog; - } else { - tmod = pe->ModuleOfPred; - } - if (pe->ArityOfPE == 0) { - tname = MkAtomTerm((Atom)pe->FunctorOfPred); - } else { - Functor f = pe->FunctorOfPred; - tname = MkAtomTerm(NameOfFunctor(f)); - } - } else { - tmod = pe->ModuleOfPred; - if (pe->PredFlags & NumberDBPredFlag) { - tname = MkIntegerTerm(pe->src.IndxId); - } else if (pe->PredFlags & AtomDBPredFlag) { - tname = MkAtomTerm((Atom)pe->FunctorOfPred); - } else { - Functor f = pe->FunctorOfPred; - tname = MkAtomTerm(NameOfFunctor(f)); - } - } - - return Yap_unify(XREGS[start_arg], tmod) && - Yap_unify(XREGS[start_arg+1],tname) && - Yap_unify(XREGS[start_arg+2],MkIntegerTerm(arity)); -} - - -static Int -ClauseId(yamop *ipc, PredEntry *pe) -{ - if (!ipc) - return 0; - return find_code_in_clause(pe, ipc, NULL, NULL); -} - -static Int -p_env_info( USES_REGS1 ) -{ - CELL *env = LCL0-IntegerOfTerm(Deref(ARG1)); - yamop *env_cp; - Term env_b, taddr; - - if (!env) - return FALSE; - env_b = MkIntegerTerm((Int)(LCL0-(CELL *)env[E_CB])); - env_cp = (yamop *)env[E_CP]; - - /* pe = PREVOP(env_cp,Osbpp)->y_u.Osbpp.p0; */ - taddr = MkIntegerTerm((Int)env); - return Yap_unify(ARG3,MkIntegerTerm((Int)env_cp)) && - Yap_unify(ARG2, taddr) && - Yap_unify(ARG4, env_b); -} - -static Int -p_cpc_info( USES_REGS1 ) -{ - PredEntry *pe; - yamop *ipc = (yamop *)IntegerOfTerm(Deref(ARG1)); - - pe = PREVOP(ipc,Osbpp)->y_u.Osbpp.p0; - return UnifyPredInfo(pe, 2 PASS_REGS) && - Yap_unify(ARG5,MkIntegerTerm(ClauseId(ipc,pe))); -} - -static Int -p_choicepoint_info( USES_REGS1 ) -{ - choiceptr cptr = (choiceptr)(LCL0-IntegerOfTerm(Deref(ARG1))); - PredEntry *pe = NULL; - int go_on = TRUE; - yamop *ipc = cptr->cp_ap; - yamop *ncl = NULL; - Term t = TermNil, taddr; - - taddr = MkIntegerTerm((Int)cptr); - while (go_on) { - op_numbers opnum = Yap_op_from_opcode(ipc->opc); - go_on = FALSE; - switch (opnum) { -#ifdef TABLING - case _table_load_answer: -#ifdef LOW_LEVEL_TRACER - pe = LOAD_CP(cptr)->cp_pred_entry; -#else - pe = UndefCode; -#endif - t = MkVarTerm(); - break; - case _table_try_answer: - case _table_retry_me: - case _table_trust_me: - case _table_retry: - case _table_trust: - case _table_completion: -#ifdef THREADS_CONSUMER_SHARING - case _table_answer_resolution_completion: -#endif /* THREADS_CONSUMER_SHARING */ -#ifdef LOW_LEVEL_TRACER -#ifdef DETERMINISTIC_TABLING - if (IS_DET_GEN_CP(cptr)) { - pe = DET_GEN_CP(cptr)->cp_pred_entry; - t = MkVarTerm(); - } else -#endif /* DETERMINISTIC_TABLING */ - { - pe = GEN_CP(cptr)->cp_pred_entry; - t = BuildActivePred(pe, (CELL *)(GEN_CP(B) + 1)); - } -#else - pe = UndefCode; - t = MkVarTerm(); -#endif - break; - case _table_answer_resolution: -#ifdef LOW_LEVEL_TRACER - pe = CONS_CP(cptr)->cp_pred_entry; -#else - pe = UndefCode; -#endif - t = MkVarTerm(); - break; - case _trie_trust_var: - case _trie_retry_var: - case _trie_trust_var_in_pair: - case _trie_retry_var_in_pair: - case _trie_trust_val: - case _trie_retry_val: - case _trie_trust_val_in_pair: - case _trie_retry_val_in_pair: - case _trie_trust_atom: - case _trie_retry_atom: - case _trie_trust_atom_in_pair: - case _trie_retry_atom_in_pair: - case _trie_trust_null: - case _trie_retry_null: - case _trie_trust_null_in_pair: - case _trie_retry_null_in_pair: - case _trie_trust_pair: - case _trie_retry_pair: - case _trie_trust_appl: - case _trie_retry_appl: - case _trie_trust_appl_in_pair: - case _trie_retry_appl_in_pair: - case _trie_trust_extension: - case _trie_retry_extension: - case _trie_trust_double: - case _trie_retry_double: - case _trie_trust_longint: - case _trie_retry_longint: - case _trie_trust_gterm: - case _trie_retry_gterm: - pe = UndefCode; - t = MkVarTerm(); - break; -#endif /* TABLING */ - case _try_logical: - case _retry_logical: - case _trust_logical: - case _count_retry_logical: - case _count_trust_logical: - case _profiled_retry_logical: - case _profiled_trust_logical: - ncl = ipc->y_u.OtaLl.d->ClCode; - pe = ipc->y_u.OtaLl.d->ClPred; - t = BuildActivePred(pe, cptr->cp_args); - break; - case _or_else: - pe = ipc->y_u.Osblp.p0; - ncl = ipc; - t = Yap_MkNewApplTerm(FunctorOr, 2); - break; - - case _or_last: -#ifdef YAPOR - pe = ipc->y_u.Osblp.p0; -#else - pe = ipc->y_u.p.p; -#endif - ncl = ipc; - t = Yap_MkNewApplTerm(FunctorOr, 2); - break; - case _retry2: - case _retry3: - case _retry4: - pe = NULL; - t = TermNil; - ipc = NEXTOP(ipc,l); - if (!ncl) - ncl = ipc->y_u.Otapl.d; - go_on = TRUE; - break; - case _jump: - pe = NULL; - t = TermNil; - ipc = ipc->y_u.l.l; - go_on = TRUE; - break; - case _retry_c: - case _retry_userc: - ncl = NEXTOP(ipc,OtapFs); - pe = ipc->y_u.OtapFs.p; - t = BuildActivePred(pe, cptr->cp_args); - break; - case _retry_profiled: - case _count_retry: - pe = NULL; - t = TermNil; - ncl = ipc->y_u.Otapl.d; - ipc = NEXTOP(ipc,p); - go_on = TRUE; - break; - case _retry_me: - case _trust_me: - case _count_retry_me: - case _count_trust_me: - case _profiled_retry_me: - case _profiled_trust_me: - case _retry_and_mark: - case _profiled_retry_and_mark: - case _retry: - case _trust: - if (!ncl) - ncl = ipc->y_u.Otapl.d; - pe = ipc->y_u.Otapl.p; - t = BuildActivePred(pe, cptr->cp_args); - break; - case _retry_exo: - case _retry_all_exo: - ncl = NULL; - pe = ipc->y_u.lp.p; - t = BuildActivePred(pe, cptr->cp_args); - break; - case _Nstop: - { - Atom at = AtomLive; - t = MkAtomTerm(at); - pe = RepPredProp(PredPropByAtom(at, CurrentModule)); - } - break; - case _Ystop: - default: - return FALSE; - } - } - return UnifyPredInfo(pe, 3 PASS_REGS) && - Yap_unify(ARG2, taddr) && - Yap_unify(ARG6,t) && - Yap_unify(ARG7,MkIntegerTerm(ClauseId(ncl,pe))); -} - static UInt compute_dbcl_size(arity_t arity) @@ -6386,7 +4965,7 @@ p_instance_property( USES_REGS1 ) } else if (cl->ClFlags & SrcMask) { return Yap_unify(ARG3, MkIntTerm(cl->usc.ClSource->ag.line_number)); } else - return MkIntTerm(0); + return Yap_unify(ARG3,MkIntTerm(0)); } } else if (FunctorOfTerm(t1) == FunctorMegaClause) { PredEntry *ap = (PredEntry *)IntegerOfTerm(ArgOfTerm(1, t1)); @@ -6479,7 +5058,7 @@ p_instance_property( USES_REGS1 ) } else if (cl->ClFlags & SrcMask){ return Yap_unify(ARG3, MkIntTerm(cl->lusl.ClSource->ag.line_number)); } else - return MkIntTerm(0); + return Yap_unify(ARG3, MkIntTerm(0)); } } return FALSE; @@ -6691,6 +5270,15 @@ p_nth_instance( USES_REGS1 ) } +static Int including(USES_REGS1) +{ + bool rc = Yap_unify(ARG1, LOCAL_Including); + if (!rc) + return FALSE; + LOCAL_Including = Deref(ARG2); + return true; +} + static Int predicate_flags(USES_REGS1) { /* $predicate_flags(+Functor,+Mod,?OldFlags,?NewFlags) */ PredEntry *pe; pred_flags_t newFl; @@ -6771,7 +5359,6 @@ Yap_InitCdMgr(void) Yap_InitCPred("$compile", 4, p_compile, SyncPredFlag); Yap_InitCPred("$compile_dynamic", 5, p_compile_dynamic, SyncPredFlag); Yap_InitCPred("$purge_clauses", 2, p_purge_clauses, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$in_use", 2, p_in_use, TestPredFlag | SafePredFlag|SyncPredFlag); Yap_InitCPred("$is_dynamic", 2, p_is_dynamic, TestPredFlag | SafePredFlag); Yap_InitCPred("$is_metapredicate", 2, p_is_metapredicate, TestPredFlag | SafePredFlag); Yap_InitCPred("$is_expand_goal_or_meta_predicate", 2, p_is_expandgoalormetapredicate, TestPredFlag | SafePredFlag); @@ -6803,17 +5390,13 @@ Yap_InitCdMgr(void) Yap_InitCPred("$call_count_info", 3, p_call_count_info, SafePredFlag|SyncPredFlag); Yap_InitCPred("$call_count_set", 6, p_call_count_set, SafePredFlag|SyncPredFlag); Yap_InitCPred("$call_count_reset", 0, p_call_count_reset, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$toggle_static_predicates_in_use", 0, p_toggle_static_predicates_in_use, SafePredFlag|SyncPredFlag); Yap_InitCPred("$set_pred_module", 2, p_set_pred_module, SafePredFlag); Yap_InitCPred("$set_pred_owner", 2, p_set_pred_owner, SafePredFlag); - Yap_InitCPred("$parent_pred", 3, p_parent_pred, SafePredFlag); Yap_InitCPred("$system_predicate", 2, p_system_pred, SafePredFlag); Yap_InitCPred("$all_system_predicate", 3, p_all_system_pred, SafePredFlag); Yap_InitCPred("$hide_predicate", 2, p_hide_predicate, SafePredFlag); Yap_InitCPred("$stash_predicate", 2, p_stash_predicate, SafePredFlag); Yap_InitCPred("$hidden_predicate", 2, p_hidden_predicate, SafePredFlag); - Yap_InitCPred("$pred_for_code", 5, p_pred_for_code, SyncPredFlag); - Yap_InitCPred("$current_stack", 1, p_current_stack, SyncPredFlag); Yap_InitCPred("$log_update_clause", 4, p_log_update_clause, SyncPredFlag); Yap_InitCPred("$continue_log_update_clause", 5, p_continue_log_update_clause, SafePredFlag|SyncPredFlag); Yap_InitCPred("$log_update_clause_erase", 4, p_log_update_clause_erase, SyncPredFlag); @@ -6821,22 +5404,17 @@ Yap_InitCdMgr(void) Yap_InitCPred("$static_clause", 4, p_static_clause, SyncPredFlag); Yap_InitCPred("$continue_static_clause", 5, p_continue_static_clause, SafePredFlag|SyncPredFlag); Yap_InitCPred("$static_pred_statistics", 5, p_static_pred_statistics, SyncPredFlag); - Yap_InitCPred("$program_continuation", 3, p_program_continuation, SafePredFlag|SyncPredFlag); Yap_InitCPred("$instance_property", 3, p_instance_property, SafePredFlag|SyncPredFlag); Yap_InitCPred("$fetch_nth_clause", 4, p_nth_instance, SyncPredFlag); - CurrentModule = HACKS_MODULE; - Yap_InitCPred("current_choicepoints", 1, p_all_choicepoints, 0); - Yap_InitCPred("current_continuations", 1, p_all_envs, 0); - Yap_InitCPred("choicepoint", 7, p_choicepoint_info, 0); - Yap_InitCPred("continuation", 4, p_env_info,0); - Yap_InitCPred("cp_to_predicate", 5, p_cpc_info, 0); - CurrentModule = cm; CurrentModule = DBLOAD_MODULE; Yap_InitCPred("dbload_get_space", 4, p_dbload_get_space, 0L); Yap_InitCPred("dbassert", 3, p_dbassert, 0L); CurrentModule = cm; Yap_InitCPred("$predicate_erased_statistics", 5, p_predicate_erased_statistics, SyncPredFlag); + Yap_InitCPred("$including", 2, including, SyncPredFlag|HiddenPredFlag); + #ifdef DEBUG - Yap_InitCPred("$predicate_live_cps", 4, p_predicate_lu_cps, 0L); + Yap_InitCPred("$predicate_lu_cps", 4, p_predicate_lu_cps, 0L); #endif + } diff --git a/C/cmppreds.c b/C/cmppreds.c index 359437f30..b3c34de32 100644 --- a/C/cmppreds.c +++ b/C/cmppreds.c @@ -112,7 +112,7 @@ cmp_atoms(Atom a1, Atom a2) } return *s1-*s2; } else { - return strcmp(RepAtom(a1)->StrOfAE,RepAtom(a2)->StrOfAE); + return strcmp((char *)RepAtom(a1)->StrOfAE,(char *)RepAtom(a2)->StrOfAE); } } @@ -181,7 +181,7 @@ static int compare_complex(register CELL *pt0, register CELL *pt0_end, register goto done; } else if (IsStringTerm(d0)) { if (IsStringTerm(d1)){ - out = strcmp(StringOfTerm(d0) , StringOfTerm(d1)); + out = strcmp((char *)StringOfTerm(d0) , (char *)StringOfTerm(d1)); } else if (IsIntTerm(d1)) out = 1; else if (IsFloatTerm(d1)) { @@ -242,7 +242,7 @@ static int compare_complex(register CELL *pt0, register CELL *pt0_end, register if (IsExtensionFunctor(f)) out = 1; else if (!(out = 2-ArityOfFunctor(f))) - out = strcmp(".",RepAtom(NameOfFunctor(f))->StrOfAE); + out = strcmp(".",(char *)RepAtom(NameOfFunctor(f))->StrOfAE); } else out = 1; goto done; } @@ -411,7 +411,7 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */ else { int out; if (!(out = 2-ArityOfFunctor(f))) - out = strcmp(".",RepAtom(NameOfFunctor(f))->StrOfAE); + out = strcmp(".",(char *)RepAtom(NameOfFunctor(f))->StrOfAE); return(out); } } @@ -488,7 +488,7 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */ case db_ref_e: return 1; case string_e: - return strcmp(StringOfTerm(t1), StringOfTerm(t2)); + return strcmp((char *)StringOfTerm(t1), (char *)StringOfTerm(t2)); } return -1; } @@ -507,7 +507,7 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */ Functor f = FunctorOfTerm(t1); if (!(out = ArityOfFunctor(f))-2) - out = strcmp(RepAtom(NameOfFunctor(f))->StrOfAE,"."); + out = strcmp((char *)RepAtom(NameOfFunctor(f))->StrOfAE,"."); return out; } return 1; diff --git a/C/computils.c b/C/computils.c index d6ae74e30..ed401e335 100644 --- a/C/computils.c +++ b/C/computils.c @@ -605,7 +605,6 @@ ShowOp (compiler_vm_op ic, const char *f, struct PSEUDO *cpc) case 'a': case 'n': - case 'S': Yap_DebugPlWrite ((Term) arg); break; case 'b': @@ -674,6 +673,10 @@ ShowOp (compiler_vm_op ic, const char *f, struct PSEUDO *cpc) Yap_DebugErrorPutc ('A'); Yap_DebugPlWrite (MkIntTerm (rn)); break; + case 'S': + Yap_DebugErrorPutc ('S'); + Yap_DebugPlWrite (MkIntTerm (rn)); + break; case 'h': { CELL my_arg = *cptr++; diff --git a/C/corout.c b/C/corout.c index 597e1cc01..70de6ebc4 100644 --- a/C/corout.c +++ b/C/corout.c @@ -153,7 +153,7 @@ static int can_unify_complex(register CELL *pt0, if (FloatOfTerm(d0) == FloatOfTerm(d1)) continue; goto comparison_failed; case (CELL)FunctorString: - if (strcmp(StringOfTerm(d0), StringOfTerm(d1)) == 0) continue; + if (strcmp((char *)StringOfTerm(d0), (char *)StringOfTerm(d1)) == 0) continue; goto comparison_failed; #ifdef USE_GMP case (CELL)FunctorBigInt: @@ -292,7 +292,7 @@ can_unify(Term t1, Term t2, Term *Vars USES_REGS) if (RepAppl(t1)[1] == RepAppl(t2)[1]) return(TRUE); return FALSE; case (CELL)FunctorString: - if (strcmp(StringOfTerm(t1), StringOfTerm(t2)) == 0) return(TRUE); + if (strcmp((char *)StringOfTerm(t1), (char *)StringOfTerm(t2)) == 0) return(TRUE); return FALSE; case (CELL)FunctorDouble: if (FloatOfTerm(t1) == FloatOfTerm(t2)) return(TRUE); diff --git a/C/errors.c b/C/errors.c index 472375569..15a4324b5 100755 --- a/C/errors.c +++ b/C/errors.c @@ -743,7 +743,7 @@ Yap_Error(yap_error_number type, Term where, const char *format,...) Yap_signal(YAP_FAIL_SIGNAL); P = FAILCODE; } else { - if (IsVarTerm(where)) { + if (IsVarTerm(where)) { /* we must be careful someone gave us a copy to a local variable */ Term t = MkVarTerm(); Yap_unify(t, where); @@ -754,7 +754,7 @@ Yap_Error(yap_error_number type, Term where, const char *format,...) LOCAL_CurrentError = type; LOCAL_PrologMode |= InErrorMode; if (!(where = Yap_CopyTerm(where))) { - where = TermNil; + where = TermNil; } } va_start (ap, format); @@ -859,13 +859,27 @@ Yap_Error(yap_error_number type, Term where, const char *format,...) serious = TRUE; } break; - case DOMAIN_ERROR_ARRAY_TYPE: + case DOMAIN_ERROR_FILE_ERRORS: { int i; Term ti[2]; i = strlen(tmpbuf); - ti[0] = MkAtomTerm(AtomArrayType); + ti[0] = TermArrayType; + ti[1] = where; + nt[0] = Yap_MkApplTerm(FunctorDomainError, 2, ti); + psize -= i; + fun = FunctorError; + serious = TRUE; + } + break; + case DOMAIN_ERROR_FILE_TYPE: + { + int i; + Term ti[2]; + + i = strlen(tmpbuf); + ti[0] = TermFileType; ti[1] = where; nt[0] = Yap_MkApplTerm(FunctorDomainError, 2, ti); psize -= i; @@ -879,7 +893,7 @@ Yap_Error(yap_error_number type, Term where, const char *format,...) Term ti[2]; i = strlen(tmpbuf); - ti[0] = MkAtomTerm(AtomIOMode); + ti[0] = TermIOMode; ti[1] = where; nt[0] = Yap_MkApplTerm(FunctorDomainError, 2, ti); psize -= i; @@ -1041,6 +1055,20 @@ Yap_Error(yap_error_number type, Term where, const char *format,...) serious = TRUE; } break; + case DOMAIN_ERROR_SOLUTIONS: + { + int i; + Term ti[2]; + + i = strlen(tmpbuf); + ti[0] = TermSolutions; + ti[1] = where; + nt[0] = Yap_MkApplTerm(FunctorDomainError, 2, ti); + psize -= i; + fun = FunctorError; + serious = TRUE; + } + break; case DOMAIN_ERROR_SOURCE_SINK: { int i; @@ -1729,6 +1757,7 @@ Yap_Error(yap_error_number type, Term where, const char *format,...) i = strlen(tmpbuf); psize -= i; fun = FunctorSyntaxError; + serious = false; } break; case SAVED_STATE_ERROR: @@ -2142,11 +2171,11 @@ Yap_Error(yap_error_number type, Term where, const char *format,...) if (type != PURE_ABORT) { /* This is used by some complex procedures to detect there was an error */ if (IsAtomTerm(nt[0])) { - strncpy(LOCAL_ErrorSay, RepAtom(AtomOfTerm(nt[0]))->StrOfAE, MAX_ERROR_MSG_SIZ\ + strncpy(LOCAL_ErrorSay, (char *)RepAtom(AtomOfTerm(nt[0]))->StrOfAE, MAX_ERROR_MSG_SIZ\ E); LOCAL_ErrorMessage = LOCAL_ErrorSay; } else { - strncpy(LOCAL_ErrorSay, RepAtom(NameOfFunctor(FunctorOfTerm(nt[0])))->StrOfAE,\ + strncpy(LOCAL_ErrorSay, (char *)RepAtom(NameOfFunctor(FunctorOfTerm(nt[0])))->StrOfAE,\ MAX_ERROR_MSG_SIZE); LOCAL_ErrorMessage = LOCAL_ErrorSay; } @@ -2165,7 +2194,8 @@ E); stack_dump = TermNil; LOCAL_Error_Size = 0L; } - nt[1] = MkPairTerm(MkAtomTerm(Yap_LookupAtom(tmpbuf)), stack_dump); + nt[1] = MkPairTerm(MkAtomTerm(Yap_LookupAtom(tmpbuf)), + MkPairTerm(stack_dump, TermNil)); if (type == SYNTAX_ERROR) { nt[1] = MkPairTerm(where, nt[1]); } diff --git a/C/eval.c b/C/eval.c index fe53901f5..64b3a1c42 100644 --- a/C/eval.c +++ b/C/eval.c @@ -114,7 +114,7 @@ Eval(Term t USES_REGS) } else if (IsApplTerm(t)) { Functor fun = FunctorOfTerm(t); if (fun == FunctorString) { - const char *s = StringOfTerm(t); + const char *s = (const char*)StringOfTerm(t); if (s[1] == '\0') return MkIntegerTerm(s[0]); return Yap_ArithError(TYPE_ERROR_EVALUABLE, t, diff --git a/C/flags.c b/C/flags.c index 9eb7e7c16..a29a72075 100644 --- a/C/flags.c +++ b/C/flags.c @@ -87,9 +87,7 @@ static bool indexer( Term inp ) { return false; } -static bool dqf( Term t2 ) { - CACHE_REGS - ModEntry *new = Yap_GetModuleEntry(CurrentModule); +static bool dqf1( ModEntry *new, Term t2 USES_REGS ) { new->flags &= ~(DBLQ_CHARS|DBLQ_CODES|DBLQ_ATOM|DBLQ_STRING); if (t2 == TermString) { new->flags |= DBLQ_STRING; @@ -108,6 +106,12 @@ static bool dqf( Term t2 ) { return false; } +static bool dqf( Term t2 ) { + CACHE_REGS + ModEntry *new = Yap_GetModuleEntry(CurrentModule); + return dqf1( new, t2 PASS_REGS); +} + static bool isaccess( Term inp ) { if (inp == TermReadWrite || @@ -151,7 +155,7 @@ static bool mkprompt( Term inp ) { Yap_Error(TYPE_ERROR_ATOM, inp, "set_prolog_flag"); return false; } - strncpy( LOCAL_Prompt, RepAtom( AtomOfTerm( inp ) )->StrOfAE, MAX_PROMPT ); + strncpy( LOCAL_Prompt, (const char *)RepAtom( AtomOfTerm( inp ) )->StrOfAE, MAX_PROMPT ); return true; } @@ -164,7 +168,7 @@ static bool getenc( Term inp ) { Yap_Error(TYPE_ERROR_ATOM, inp, "set_prolog_flag"); return false; } - enc_id( RepAtom( AtomOfTerm( inp ) )->StrOfAE ); + enc_id( ( char *)RepAtom( AtomOfTerm( inp ) )->StrOfAE ); return true; } @@ -587,12 +591,12 @@ static bool setYapFlagInModule( Term tflag, Term t2, Term mod ) { FlagEntry *fv; ModEntry *new = Yap_GetModuleEntry(mod); - if (!mod) + if (!new) return false; fv = GetFlagProp( AtomOfTerm( tflag ) ); if (!fv && !fv->global) { Yap_Error(DOMAIN_ERROR_PROLOG_FLAG, tflag, "trying to set unknown module flag"); - return FALSE; + return false; } if (mod == USER_MODULE && !setYapFlag( tflag, t2) ) return false; @@ -639,25 +643,10 @@ static bool setYapFlagInModule( Term tflag, Term t2, Term mod ) new->flags |= BCKQ_CHARS; return true; } - } else if (fv->FlagOfVE == DOUBLE_QUOTES_FLAG) { - new->flags &= ~(DBLQ_CHARS|DBLQ_CODES|DBLQ_ATOM|DBLQ_STRING); - if (t2 == TermString) { - new->flags |= DBLQ_STRING; - return true; - } else if (t2 == TermAtom) { - new->flags |= DBLQ_ATOM; - return true; - } else if (t2 == TermCodes) { - new->flags |= DBLQ_CODES; - return true; - } else if (t2 == TermChars) { - new->flags |= DBLQ_CHARS; - return true; - } - Yap_Error(DOMAIN_ERROR_OUT_OF_RANGE, t2, "bad option for %s:backquoted_string flag", RepAtom(AtomOfTerm(tflag))->StrOfAE); - return false; + } if (fv->FlagOfVE == DOUBLE_QUOTES_FLAG) { + return dqf1(new, t2 PASS_REGS ); } -Yap_Error(DOMAIN_ERROR_OUT_OF_RANGE, t2, "flag %s is not module-scoped", RepAtom(AtomOfTerm(tflag))->StrOfAE); + Yap_Error(DOMAIN_ERROR_OUT_OF_RANGE, t2, "flag %s is not module-scoped", RepAtom(AtomOfTerm(tflag))->StrOfAE); return FALSE; } @@ -874,16 +863,19 @@ static Int current_prolog_flag( USES_REGS1 ) { void Yap_setModuleFlags(ModEntry *new, ModEntry *cme) { Atom at = new->AtomOfME; - new->flags = 0; - if (at == AtomProlog ) { - new->flags = UNKNOWN_FAIL | M_SYSTEM | M_CHARESCAPE | DBLQ_CODES | BCKQ_STRING; - return; - } else if (cme == NULL) { - new->flags = UNKNOWN_ERROR | M_SYSTEM | M_CHARESCAPE| DBLQ_CODES | BCKQ_STRING; - return; - } else + if (at == AtomProlog || CurrentModule == PROLOG_MODULE) { + new->flags = M_SYSTEM | UNKNOWN_ERROR |M_CHARESCAPE | DBLQ_CODES | BCKQ_STRING; + if (at == AtomUser) + new->flags = UNKNOWN_ERROR |M_CHARESCAPE | DBLQ_CODES | BCKQ_STRING; + } else if (cme && + cme->flags && cme != new) { new->flags = cme->flags; - } + } else { + new->flags = ( UNKNOWN_ERROR | M_CHARESCAPE | DBLQ_CODES | BCKQ_STRING + ); + } + //printf("cme=%s new=%s flags=%x\n",cme,at->StrOfAE,new->flags); +} bool setYapFlag( Term tflag, Term t2 ) { @@ -1213,6 +1205,7 @@ do_prolog_flag_property (Term tflag, Term opts USES_REGS) Yap_unify(TermAtom, args[PROLOG_FLAG_PROPERTY_TYPE].tvalue); else if (fv->type == nat) rc = rc && + Yap_unify(TermInteger, args[PROLOG_FLAG_PROPERTY_TYPE].tvalue); else if (fv->type == isfloat) rc = rc && @@ -1327,7 +1320,7 @@ newFlag( Term fl, Term val ) int i = GLOBAL_flagCount; GLOBAL_flagCount ++; - f.name = RepAtom(AtomOfTerm(fl))->StrOfAE; + f.name = (char *)RepAtom(AtomOfTerm(fl))->StrOfAE; f.writable = true; f.helper = 0; f.def = ok; diff --git a/C/globals.c b/C/globals.c index aa7313157..8ab5d5253 100644 --- a/C/globals.c +++ b/C/globals.c @@ -2722,6 +2722,7 @@ void Yap_InitGlobals(void) Yap_InitCPred("$allocate_arena", 2, p_allocate_arena, 0); Yap_InitCPred("arena_size", 1, p_default_arena_size, 0); Yap_InitCPred("b_setval", 2, p_b_setval, SafePredFlag); + Yap_InitCPred("__B_setval__", 2, p_b_setval, HiddenPredFlag|SafePredFlag); /** @pred b_setval(+ _Name_, + _Value_) @@ -2745,6 +2746,7 @@ assignment is reversed. */ Yap_InitCPred("nb_setval", 2, p_nb_setval, 0L); + Yap_InitCPred("__NB_setval__", 2, p_nb_setval, HiddenPredFlag); /** @pred nb_setval(+ _Name_, + _Value_) @@ -2816,6 +2818,8 @@ demo_nb_linkval :- */ Yap_InitCPred("$nb_getval", 3, p_nb_getval, SafePredFlag); + Yap_InitCPred("__NB_getval__", 3, p_nb_getval, HiddenPredFlag); + Yap_InitCPred("__B_getval__", 3, p_nb_getval, HiddenPredFlag); Yap_InitCPred("nb_setarg", 3, p_nb_setarg, 0L); /** @pred nb_setarg(+{Arg], + _Term_, + _Value_) diff --git a/C/grow.c b/C/grow.c index fcb7e78c2..d63c2bc8f 100755 --- a/C/grow.c +++ b/C/grow.c @@ -1370,7 +1370,7 @@ cp_atom_table(AtomHashEntry *ntb, UInt nsize) Atom natom; CELL hash; - hash = HashFunction(ap->StrOfAE) % nsize; + hash = HashFunction(ap->UStrOfAE) % nsize; natom = ap->NextOfAE; ap->NextOfAE = ntb[hash].Entry; ntb[hash].Entry = catom; diff --git a/C/inlines.c b/C/inlines.c index 820e40558..06015f76f 100644 --- a/C/inlines.c +++ b/C/inlines.c @@ -14,16 +14,16 @@ * comments: C-version for inline code used in meta-calls * * * *************************************************************************/ - - -/** @defgroup YAP_Terms Predicates on terms -@ingroup builtins -@{ - - -*/ - - + + +/** @defgroup YAP_Terms Predicates on terms +@ingroup builtins +@{ + + +*/ + + #define IN_INLINES_C 1 #include "absmi.h" @@ -47,13 +47,13 @@ static Int p_arg( USES_REGS1 ); static Int p_functor( USES_REGS1 ); -/** @pred atom( _T_) is iso - - -Succeeds if and only if _T_ is currently instantiated to an atom. - - -*/ +/** @pred atom( _T_) is iso + + +Succeeds if and only if _T_ is currently instantiated to an atom. + + +*/ static Int p_atom( USES_REGS1 ) { /* atom(?) */ @@ -75,13 +75,13 @@ p_atom( USES_REGS1 ) ENDD(d0); } -/** @pred atomic(T) is iso - - -Checks whether _T_ is an atomic symbol (atom or number). - - -*/ +/** @pred atomic(T) is iso + + +Checks whether _T_ is an atomic symbol (atom or number). + + +*/ static Int p_atomic( USES_REGS1 ) { /* atomic(?) */ @@ -103,13 +103,13 @@ p_atomic( USES_REGS1 ) ENDD(d0); } -/** @pred integer( _T_) is iso - - -Succeeds if and only if _T_ is currently instantiated to an integer. - - -*/ +/** @pred integer( _T_) is iso + + +Succeeds if and only if _T_ is currently instantiated to an integer. + + +*/ static Int p_integer( USES_REGS1 ) { /* integer(?,?) */ @@ -149,13 +149,13 @@ p_integer( USES_REGS1 ) ENDD(d0); } -/** @pred number( _T_) is iso - - -Checks whether `T` is an integer, rational or a float. - - -*/ +/** @pred number( _T_) is iso + + +Checks whether `T` is an integer, rational or a float. + + +*/ static Int p_number( USES_REGS1 ) { /* number(?) */ @@ -196,13 +196,13 @@ p_number( USES_REGS1 ) ENDD(d0); } -/** @pred db_reference( _T_) - - -Checks whether _T_ is a database reference. - - -*/ +/** @pred db_reference( _T_) + + +Checks whether _T_ is a database reference. + + +*/ static Int p_db_ref( USES_REGS1 ) { /* db_reference(?,?) */ @@ -224,13 +224,13 @@ p_db_ref( USES_REGS1 ) ENDD(d0); } -/** @pred primitive( ?_T_) - - -Checks whether _T_ is an atomic term or a database reference. - - -*/ +/** @pred primitive( ?_T_) + + +Checks whether _T_ is an atomic term or a database reference. + + +*/ static Int p_primitive( USES_REGS1 ) { /* primitive(?) */ @@ -252,13 +252,13 @@ p_primitive( USES_REGS1 ) ENDD(d0); } -/** @pred float( _T_) is iso - - -Checks whether _T_ is a floating point number. - - -*/ +/** @pred float( _T_) is iso + + +Checks whether _T_ is a floating point number. + + +*/ static Int p_float( USES_REGS1 ) { /* float(?) */ @@ -280,13 +280,13 @@ p_float( USES_REGS1 ) ENDD(d0); } -/** @pred compound( _T_) is iso - - -Checks whether _T_ is a compound term. - - -*/ +/** @pred compound( _T_) is iso + + +Checks whether _T_ is a compound term. + + +*/ static Int p_compound( USES_REGS1 ) { /* compound(?) */ @@ -314,13 +314,13 @@ p_compound( USES_REGS1 ) ENDD(d0); } -/** @pred nonvar( _T_) is iso - - -The opposite of `var( _T_)`. - - -*/ +/** @pred nonvar( _T_) is iso + + +The opposite of `var( _T_)`. + + +*/ static Int p_nonvar( USES_REGS1 ) { /* nonvar(?) */ @@ -337,13 +337,13 @@ p_nonvar( USES_REGS1 ) ENDD(d0); } -/** @pred var( _T_) is iso - - -Succeeds if _T_ is currently a free variable, otherwise fails. - - -*/ +/** @pred var( _T_) is iso + + +Succeeds if _T_ is currently a free variable, otherwise fails. + + +*/ static Int p_var( USES_REGS1 ) { /* var(?) */ @@ -360,13 +360,13 @@ p_var( USES_REGS1 ) ENDD(d0); } -/** @pred _X_ = _Y_ is iso - - -Tries to unify terms _X_ and _Y_. - - -*/ +/** @pred _X_ = _Y_ is iso + + +Tries to unify terms _X_ and _Y_. + + +*/ static Int p_equal( USES_REGS1 ) { /* ?=? */ @@ -412,7 +412,7 @@ eq(Term t1, Term t2 USES_REGS) case (CELL)FunctorLongInt: return(LongIntOfTerm(d0) == LongIntOfTerm(d1)); case (CELL)FunctorString: - return(strcmp(StringOfTerm(d0), StringOfTerm(d1)) == 0); + return(strcmp((char *)StringOfTerm(d0), (char *)StringOfTerm(d1)) == 0); #ifdef USE_GMP case (CELL)FunctorBigInt: return (Yap_gmp_tcmp_big_big(d0, d1) == 0); @@ -459,37 +459,37 @@ eq(Term t1, Term t2 USES_REGS) ENDD(d0); } - - -/** @pred ?_X_ == ?_Y_ is iso - -Succeeds if terms _X_ and _Y_ are strictly identical. The -difference between this predicate and =/2 is that, if one of the -arguments is a free variable, it only succeeds when they have already -been unified. - -~~~~~{.prolog} -?- X == Y. -~~~~~ -fails, but, - -~~~~~{.prolog} -?- X = Y, X == Y. -~~~~~ -succeeds. - -~~~~~{.prolog} -?- X == 2. -~~~~~ -fails, but, - -~~~~~{.prolog} -?- X = 2, X == 2. -~~~~~ -succeeds. - - -*/ + + +/** @pred ?_X_ == ?_Y_ is iso + +Succeeds if terms _X_ and _Y_ are strictly identical. The +difference between this predicate and =/2 is that, if one of the +arguments is a free variable, it only succeeds when they have already +been unified. + +~~~~~{.prolog} +?- X == Y. +~~~~~ +fails, but, + +~~~~~{.prolog} +?- X = Y, X == Y. +~~~~~ +succeeds. + +~~~~~{.prolog} +?- X == 2. +~~~~~ +fails, but, + +~~~~~{.prolog} +?- X = 2, X == 2. +~~~~~ +succeeds. + + +*/ static Int p_eq( USES_REGS1 ) { /* ? == ? */ @@ -503,13 +503,13 @@ Yap_eq(Term t1, Term t2) return eq(t1,t2 PASS_REGS); } -/** @pred _X_ \= _Y_ is iso - - -Succeeds if terms _X_ and _Y_ are not unifiable. - - -*/ +/** @pred _X_ \= _Y_ is iso + + +Succeeds if terms _X_ and _Y_ are not unifiable. + + +*/ static Int p_dif( USES_REGS1 ) { /* ? \= ? */ @@ -618,20 +618,20 @@ p_dif( USES_REGS1 ) ENDD(d0); } - -/** @pred arg(+ _N_,+ _T_, _A_) is iso - - -Succeeds if the argument _N_ of the term _T_ unifies with - _A_. The arguments are numbered from 1 to the arity of the term. - -The current version will generate an error if _T_ or _N_ are -unbound, if _T_ is not a compound term, of if _N_ is not a positive -integer. Note that previous versions of YAP would fail silently -under these errors. - - -*/ + +/** @pred arg(+ _N_,+ _T_, _A_) is iso + + +Succeeds if the argument _N_ of the term _T_ unifies with + _A_. The arguments are numbered from 1 to the arity of the term. + +The current version will generate an error if _T_ or _N_ are +unbound, if _T_ is not a compound term, of if _N_ is not a positive +integer. Note that previous versions of YAP would fail silently +under these errors. + + +*/ static Int p_arg( USES_REGS1 ) { /* arg(?,?,?) */ @@ -728,26 +728,26 @@ p_arg( USES_REGS1 ) } -/** @pred functor( _T_, _F_, _N_) is iso - - -The top functor of term _T_ is named _F_ and has arity _N_. - -When _T_ is not instantiated, _F_ and _N_ must be. If - _N_ is 0, _F_ must be an atomic symbol, which will be unified -with _T_. If _N_ is not 0, then _F_ must be an atom and - _T_ becomes instantiated to the most general term having functor - _F_ and arity _N_. If _T_ is instantiated to a term then - _F_ and _N_ are respectively unified with its top functor name -and arity. - -In the current version of YAP the arity _N_ must be an -integer. Previous versions allowed evaluable expressions, as long as the -expression would evaluate to an integer. This feature is not available -in the ISO Prolog standard. - - -*/ +/** @pred functor( _T_, _F_, _N_) is iso + + +The top functor of term _T_ is named _F_ and has arity _N_. + +When _T_ is not instantiated, _F_ and _N_ must be. If + _N_ is 0, _F_ must be an atomic symbol, which will be unified +with _T_. If _N_ is not 0, then _F_ must be an atom and + _T_ becomes instantiated to the most general term having functor + _F_ and arity _N_. If _T_ is instantiated to a term then + _F_ and _N_ are respectively unified with its top functor name +and arity. + +In the current version of YAP the arity _N_ must be an +integer. Previous versions allowed evaluable expressions, as long as the +expression would evaluate to an integer. This feature is not available +in the ISO Prolog standard. + + +*/ static Int p_functor( USES_REGS1 ) /* functor(?,?,?) */ { @@ -1114,7 +1114,7 @@ Yap_InitInlines(void) CurrentModule = cm; } - -/** -@} -*/ + +/** +@} +*/ diff --git a/C/load_dl.c b/C/load_dl.c index c9e678e93..37efee417 100755 --- a/C/load_dl.c +++ b/C/load_dl.c @@ -182,9 +182,9 @@ LoadForeign(StringList ofiles, StringList libs, CACHE_REGS while (libs) { - if (!Yap_TrueFileName(AtomName(libs->name), LOCAL_FileNameBuf, TRUE)) { + if (!Yap_TrueFileName((char *)AtomName(libs->name), LOCAL_FileNameBuf, TRUE)) { /* use LD_LIBRARY_PATH */ - strncpy(LOCAL_FileNameBuf, AtomName(libs->name), YAP_FILENAME_MAX); + strncpy(LOCAL_FileNameBuf, (char *)AtomName(libs->name), YAP_FILENAME_MAX); } #ifdef __osf__ @@ -206,7 +206,7 @@ LoadForeign(StringList ofiles, StringList libs, other routines */ /* dlopen wants to follow the LD_CONFIG_PATH */ - if (!Yap_TrueFileName(AtomName(ofiles->name), LOCAL_FileNameBuf, TRUE)) { + if (!Yap_TrueFileName((char *)AtomName(ofiles->name), LOCAL_FileNameBuf, TRUE)) { strcpy(LOCAL_ErrorSay, "%% Trying to open unexisting file in LoadForeign"); return LOAD_FAILLED; } diff --git a/C/load_foreign.c b/C/load_foreign.c index 72c10b157..b52e3e6da 100644 --- a/C/load_foreign.c +++ b/C/load_foreign.c @@ -80,7 +80,7 @@ p_load_foreign( USES_REGS1 ) /* get the initialization function name */ t1 = Deref(ARG3); - InitProcName = RepAtom(AtomOfTerm(t1))->StrOfAE; + InitProcName = (char *)RepAtom(AtomOfTerm(t1))->StrOfAE; /* call the OS specific function for dynamic loading */ if(Yap_LoadForeign(ofiles,libs,InitProcName,&InitProc)==LOAD_SUCCEEDED) { @@ -139,7 +139,7 @@ p_open_shared_object( USES_REGS1 ) { return FALSE; } - s = RepAtom(AtomOfTerm(t))->StrOfAE; + s = (char *)RepAtom(AtomOfTerm(t))->StrOfAE; if ((handle = Yap_LoadForeignFile(s, IntegerOfTerm(tflags)))==NULL) { Yap_Error(EXISTENCE_ERROR_SOURCE_SINK,t,"open_shared_object_failed for %s with %s\n", s, LOCAL_ErrorSay); return FALSE; @@ -209,14 +209,14 @@ p_call_shared_object_function( USES_REGS1 ) { return FALSE; } CurrentModule = tmod; - res = Yap_CallForeignFile(handle, RepAtom(AtomOfTerm(tfunc))->StrOfAE); + res = Yap_CallForeignFile(handle, (char *)RepAtom(AtomOfTerm(tfunc))->StrOfAE); CurrentModule = OldCurrentModule; return res; } static Int p_obj_suffix( USES_REGS1 ) { - return Yap_unify(Yap_CharsToListOfCodes(SO_EXT PASS_REGS),ARG1); + return Yap_unify(Yap_CharsToListOfCodes(SO_EXT, ENC_ISO_LATIN1 PASS_REGS),ARG1); } static Int @@ -256,7 +256,7 @@ Yap_ReOpenLoadForeign(void) YapInitProc InitProc = NULL; CurrentModule = f_code->module; - if(Yap_ReLoadForeign(f_code->objs,f_code->libs,RepAtom(f_code->f)->StrOfAE,&InitProc)==LOAD_SUCCEEDED) { + if(Yap_ReLoadForeign(f_code->objs,f_code->libs,(char *)RepAtom(f_code->f)->StrOfAE,&InitProc)==LOAD_SUCCEEDED) { if (InitProc) (*InitProc)(); } diff --git a/C/modules.c b/C/modules.c index 39af5002d..b40774e3f 100644 --- a/C/modules.c +++ b/C/modules.c @@ -47,11 +47,11 @@ static ModEntry *LookupModule(Term a); } inline static ModEntry *GetModuleEntry(Atom at) -/* get predicate entry for ap/arity; create it if neccessary. */ +/* Get predicate entry for ap/arity; create it if necessary. */ { Prop p0; AtomEntry *ae = RepAtom(at); - ModEntry *new; + ModEntry *new, *oat; p0 = ae->PropsOfAE; while (p0) { @@ -62,7 +62,6 @@ inline static ModEntry *GetModuleEntry(Atom at) } { CACHE_REGS - ModEntry *old; new = (ModEntry *)Yap_AllocAtomSpace(sizeof(*new)); INIT_RWLOCK(new->ModRWLock); new->KindOfPE = ModProperty; @@ -70,12 +69,12 @@ inline static ModEntry *GetModuleEntry(Atom at) new->NextME = CurrentModules; CurrentModules = new; new->AtomOfME = ae; - if (CurrentModule == PROLOG_MODULE || AtomOfTerm(CurrentModule) == at) { - old = NULL; - } else - old = GetModuleEntry(AtomOfTerm(CurrentModule)); - Yap_setModuleFlags(new, old); AddPropToAtom(ae, (PropEntry *)new); + if (CurrentModule == 0L || (oat = GetModuleEntry(AtomOfTerm(CurrentModule))) == new) { + Yap_setModuleFlags(new, NULL); + } else { + Yap_setModuleFlags(new, oat); + } } return new; } @@ -116,6 +115,7 @@ Term Yap_Module_Name(PredEntry *ap) { if (mod) return mod; return TermProlog; + } static ModEntry *LookupModule(Term a) { @@ -183,8 +183,9 @@ static Int if (t == TermProlog) { CurrentModule = PROLOG_MODULE; } else { + // make it very clear that t inherits from cm. + LookupModule(t); CurrentModule = t; - LookupModule(CurrentModule); } LOCAL_SourceModule = CurrentModule; return TRUE; diff --git a/C/parser.c b/C/parser.c index 38309b427..808706e0c 100755 --- a/C/parser.c +++ b/C/parser.c @@ -167,6 +167,8 @@ static Term ParseArgs( Atom, wchar_t, JMPBUFF *, Term CACHE_TYPE); static Term ParseList( JMPBUFF *CACHE_TYPE); static Term ParseTerm( int, JMPBUFF *CACHE_TYPE); +const char *Yap_tokRep(TokEntry *tokptr); + static void syntax_msg( const char *msg, ...) { @@ -237,7 +239,7 @@ VarEntry *Yap_LookupVar(const char *var) /* lookup variable in variables table UInt hv; p = LOCAL_VarTable; - hv = HashFunction(var) % AtomHashTableSize; + hv = HashFunction((unsigned char *)var) % AtomHashTableSize; while (p != NULL) { CELL hpv = p->hv; if (hv == hpv) { @@ -459,7 +461,9 @@ inline static void GNextToken(USES_REGS1) { inline static void checkfor(wchar_t c, JMPBUFF *FailBuff USES_REGS) { if (LOCAL_tokptr->Tok != Ord(Ponctuation_tok) || LOCAL_tokptr->TokInfo != (Term)c) { - syntax_msg("expected to find \'%c\', found %s", c, Yap_tokRep(LOCAL_tokptr)); + char s[1024]; + strncpy(s, Yap_tokRep(LOCAL_tokptr), 1023 ); + syntax_msg("expected to find \'%c\', found %s", c, s); FAIL; } NextToken; @@ -624,7 +628,7 @@ loop: if (((int)LOCAL_tokptr->TokInfo) == ',') { NextToken; if (LOCAL_tokptr->Tok == Ord(Name_tok) && - strcmp(RepAtom((Atom)(LOCAL_tokptr->TokInfo))->StrOfAE, "..") == 0) { + strcmp((char *)RepAtom((Atom)(LOCAL_tokptr->TokInfo))->StrOfAE, "..") == 0) { NextToken; to_store[1] = ParseTerm( 999, FailBuff PASS_REGS); } else { @@ -744,7 +748,7 @@ static Term ParseTerm( int prio, JMPBUFF *FailBuff USES_REGS) { case String_tok: /* build list on the heap */ { Volatile char *p = (char *)LOCAL_tokptr->TokInfo; - t = Yap_CharsToTDQ(p, CurrentModule PASS_REGS); + t = Yap_CharsToTDQ(p, CurrentModule, ENC_ISO_LATIN1 PASS_REGS); if (!t) { syntax_msg( "could not convert \'%s\'", (char *)LOCAL_tokptr->TokInfo ); FAIL; @@ -766,7 +770,8 @@ static Term ParseTerm( int prio, JMPBUFF *FailBuff USES_REGS) { case BQString_tok: /* build list on the heap */ { Volatile char *p = (char *)LOCAL_tokptr->TokInfo; - t = Yap_CharsToTBQ(p, CurrentModule PASS_REGS); + printf("%s\n", p); + t = Yap_CharsToTBQ(p, CurrentModule, ENC_ISO_LATIN1 PASS_REGS); if (!t) { syntax_msg( "could not convert \'%s\"", (char *)LOCAL_tokptr->TokInfo ); FAIL; @@ -1043,8 +1048,8 @@ Term Yap_Parse(UInt prio) { CACHE_REGS Volatile Term t; JMPBUFF FailBuff; - static int cnt; yhandle_t sls = Yap_CurrentSlot(PASS_REGS1); + if (!sigsetjmp(FailBuff.JmpBuff, 0)) { t = ParseTerm(prio, &FailBuff PASS_REGS); diff --git a/C/qlyw.c b/C/qlyw.c index 884526a14..b77851a8f 100755 --- a/C/qlyw.c +++ b/C/qlyw.c @@ -48,11 +48,11 @@ GrowAtomTable(void) { Atom a = p->val; export_atom_hash_entry_t *newp; CELL hash; - const char *apt; + const unsigned char *apt; if (!a) continue; - apt = RepAtom(a)->StrOfAE; + apt = RepAtom(a)->UStrOfAE; hash = HashFunction(apt)/(2*sizeof(CELL)) % new_size; newp = newt+hash; while (newp->val) { @@ -71,7 +71,7 @@ static void LookupAtom(Atom at) { CACHE_REGS - const char *p = RepAtom(at)->StrOfAE; + const unsigned char *p = RepAtom(at)->UStrOfAE; CELL hash = HashFunction(p) % LOCAL_ExportAtomHashTableSize; export_atom_hash_entry_t *a; @@ -590,8 +590,8 @@ SaveHash(FILE *stream) CHECK(save_bytes(stream, at->WStrOfAE, (wcslen(at->WStrOfAE)+1)*sizeof(wchar_t))); } else { CHECK(save_tag(stream, QLY_ATOM)); - CHECK(save_UInt(stream, strlen(RepAtom(at)->StrOfAE))); - CHECK(save_bytes(stream, at->StrOfAE, (strlen(at->StrOfAE)+1)*sizeof(char))); + CHECK(save_UInt(stream, strlen((char *)RepAtom(at)->StrOfAE))); + CHECK(save_bytes(stream, (char *)at->StrOfAE, (strlen((char *)at->StrOfAE)+1)*sizeof(char))); } } } diff --git a/C/realpath.c b/C/realpath.c new file mode 100644 index 000000000..ff286acd8 --- /dev/null +++ b/C/realpath.c @@ -0,0 +1,178 @@ + + + /var/www/vhosts/netmite.com/android/mydroid/bionic/libc/bionic/realpath.c + + +
+/*
+ * Copyright (c) 1994
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Jan-Simon Pendry.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)realpath.c	8.1 (Berkeley) 2/16/94";
+static char rcsid[] =
+"$FreeBSD: /repoman/r/ncvs/src/lib/libc/stdlib/realpath.c,v 1.6.2.1 2003/08/03 23:47:39 nectar Exp $";
+#endif /* LIBC_SCCS and not lint */
+
+#include <sys/param.h>
+#include <sys/stat.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/*
+ * char *realpath(const char *path, char resolved_path[MAXPATHLEN]);
+ *
+ * Find the real name of path, by removing all ".", ".." and symlink
+ * components.  Returns (resolved) on success, or (NULL) on failure,
+ * in which case the path which caused trouble is left in (resolved).
+ */
+char *
+realpath(path, resolved)
+	const char *path;
+	char *resolved;
+{
+	struct stat sb;
+	int fd, n, rootd, serrno;
+	char *p, *q, wbuf[MAXPATHLEN];
+      int symlinks = 0;
+
+	/* Save the starting point. */
+	if ((fd = open(".", O_RDONLY)) < 0) {
+		(void)strcpy(resolved, ".");
+		return (NULL);
+	}
+
+	/*
+	 * Find the dirname and basename from the path to be resolved.
+	 * Change directory to the dirname component.
+	 * lstat the basename part.
+	 *     if it is a symlink, read in the value and loop.
+	 *     if it is a directory, then change to that directory.
+	 * get the current directory name and append the basename.
+	 */
+	(void)strncpy(resolved, path, MAXPATHLEN - 1);
+	resolved[MAXPATHLEN - 1] = '\0';
+loop:
+	q = strrchr(resolved, '/');
+	if (q != NULL) {
+		p = q + 1;
+		if (q == resolved)
+			q = "/";
+		else {
+			do {
+				--q;
+			} while (q > resolved && *q == '/');
+			q[1] = '\0';
+			q = resolved;
+		}
+		if (chdir(q) < 0)
+			goto err1;
+	} else
+		p = resolved;
+
+	/* Deal with the last component. */
+	if (*p != '\0' && lstat(p, &sb) == 0) {
+		if (S_ISLNK(sb.st_mode)) {
+                      if (++symlinks > MAXSYMLINKS) {
+                              errno = ELOOP;
+                              goto err1;
+                      }
+			n = readlink(p, resolved, MAXPATHLEN - 1);
+			if (n < 0)
+				goto err1;
+			resolved[n] = '\0';
+			goto loop;
+		}
+		if (S_ISDIR(sb.st_mode)) {
+			if (chdir(p) < 0)
+				goto err1;
+			p = "";
+		}
+	}
+
+	/*
+	 * Save the last component name and get the full pathname of
+	 * the current directory.
+	 */
+	(void)strcpy(wbuf, p);
+	if (getcwd(resolved, MAXPATHLEN) == 0)
+		goto err1;
+
+	/*
+	 * Join the two strings together, ensuring that the right thing
+	 * happens if the last component is empty, or the dirname is root.
+	 */
+	if (resolved[0] == '/' && resolved[1] == '\0')
+		rootd = 1;
+	else
+		rootd = 0;
+
+	if (*wbuf) {
+		if (strlen(resolved) + strlen(wbuf) + (1-rootd) + 1 >
+		    MAXPATHLEN) {
+			errno = ENAMETOOLONG;
+			goto err1;
+		}
+		if (rootd == 0)
+			(void)strcat(resolved, "/");
+		(void)strcat(resolved, wbuf);
+	}
+
+	/* Go back to where we came from. */
+	if (fchdir(fd) < 0) {
+		serrno = errno;
+		goto err2;
+	}
+
+	/* It's okay if the close fails, what's an fd more or less? */
+	(void)close(fd);
+	return (resolved);
+
+err1:	serrno = errno;
+	(void)fchdir(fd);
+err2:	(void)close(fd);
+	errno = serrno;
+	return (NULL);
+}
+
+
+
+syntax highlighted by Code2HTML, v. 0.9.1 + + diff --git a/C/scanner.c b/C/scanner.c index e7ac0a021..a4ad190e3 100755 --- a/C/scanner.c +++ b/C/scanner.c @@ -536,6 +536,18 @@ static char chtype0[NUMBER_OF_CHARS + 1] = { #endif }; +typedef struct scanner_internals { + StreamDesc *t; + TokEntry *ctok; + char *_ScannerStack; // = (char *)TR; + char *ScannerExtraBlocks; + CELL *CommentsTail; + CELL *Comments; + CELL *CommentsNextChar; + wchar_t *CommentsBuff; + size_t CommentsBuffLim; +} scanner_internals; + char *Yap_chtype = chtype0 + 1; int Yap_wide_chtype(Int ch) { @@ -553,16 +565,15 @@ int Yap_wide_chtype(Int ch) { return BS; } -static inline int getchr__(struct stream_desc* inp) { - int c = inp->stream_wgetc_for_read(inp-GLOBAL_Stream); - if (!GLOBAL_CharConversionTable || c < 0 || c >= 256) - return c; - - return GLOBAL_CharConversionTable[c]; -} - -#define getchr(inp) getchr__(inp) +// standard get char, uses conversion table +// and converts to wide +#define getchr(inp) inp->stream_wgetc_for_read(inp-GLOBAL_Stream) +// get char for quoted data, eg, quoted atoms and so on +// converts to wide #define getchrq(inp) inp->stream_wgetc(inp-GLOBAL_Stream) +// get char for UTF-8 quoted data, eg, quoted strings +// reads bytes +#define getchru(inp) inp->stream_getc_utf8(inp-GLOBAL_Stream) /* in case there is an overflow */ typedef struct scanner_extra_alloc { @@ -1141,7 +1152,7 @@ Yap_tokRep(TokEntry *tokptr) switch (tokptr->Tok) { case Name_tok: - return RepAtom((Atom)info)->StrOfAE; + return (char *)RepAtom((Atom)info)->StrOfAE; case Number_tok: if ((b = Yap_TermToString(info, buf, sze, &length,LOCAL_encoding, flags)) != buf) { if (b) free(b); @@ -1158,7 +1169,15 @@ Yap_tokRep(TokEntry *tokptr) return (char *)info; case WString_tok: case WBQString_tok: - return utf8_wcscpy(buf, (wchar_t *)info); + { wchar_t *op = (wchar_t *)info; + wchar_t c; + unsigned char *bp = (unsigned char *)buf; + while ((c=*op++) ){ + bp += put_utf8(bp, c); + } + bp[0]='\0'; + return buf; + } case Error_tok: return ""; case eot_tok: @@ -1274,7 +1293,7 @@ static wchar_t *ch_to_wide(char *base, char *charp) { if ((ch & 0xff) == ch) { \ *charp++ = ch; \ } else { \ - charp = _PL__utf8_put_char(charp, ch); \ + charp = _PL__put_utf8(charp, chr); \ } \ } @@ -1382,7 +1401,7 @@ continue_comment: och = ch; ch = getchr(inp_stream); scan_name: - TokImage = ((AtomEntry *)(Yap_PreAllocCodeSpace()))->StrOfAE; + TokImage = (char *)((AtomEntry *)(Yap_PreAllocCodeSpace()))->StrOfAE; charp = TokImage; wcharp = NULL; isvar = (chtype(och) != LC); @@ -1555,7 +1574,7 @@ huge_var_error: case QT: case DC: quoted_string: - TokImage = ((AtomEntry *)(Yap_PreAllocCodeSpace()))->StrOfAE; + TokImage = (char *)((AtomEntry *)(Yap_PreAllocCodeSpace()))->StrOfAE; charp = TokImage; quote = ch; len = 0; @@ -1615,7 +1634,7 @@ quoted_string: } else { *charp = '\0'; } - if (quote == '"') { + if (quote == '"'||quote == '`') { if (wcharp) { mp = AllocScannerMemory(sizeof(wchar_t) * (len + 1)); } else { @@ -1635,37 +1654,21 @@ quoted_string: } t->TokInfo = Unsigned(mp); Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage); + if (quote == '"') { if (wcharp) { t->Tok = Ord(kind = WString_tok); } else { t->Tok = Ord(kind = String_tok); } - } else if (quote == '`') { - if (wcharp) { - mp = AllocScannerMemory( utf8_strlen1(TokImage) + 1 ); - } else { - mp = AllocScannerMemory(len + 1); - } - if (mp == NULL) { - LOCAL_ErrorMessage = - "not enough heap space to read in string or quoted atom"; - Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage); - t->Tok = Ord(kind = eot_tok); - return l; - } - if (wcharp) { - wcscpy((wchar_t *)mp, (wchar_t *)TokImage); - } else { - strcpy(mp, TokImage); - } - t->TokInfo = Unsigned(mp); - Yap_ReleasePreAllocCodeSpace((CODEADDR)TokImage); - if (wcharp) { - t->Tok = Ord(kind = WBQString_tok); - } else { - t->Tok = Ord(kind = BQString_tok); - } } else { + if (wcharp) { + t->Tok = Ord(kind = WBQString_tok); + } else { + t->Tok = Ord(kind = BQString_tok); + } + + } + } else { if (wcharp) { t->TokInfo = Unsigned(Yap_LookupWideAtom((wchar_t *)TokImage)); } else { @@ -1747,7 +1750,7 @@ enter_symbol: } else { Atom ae; - TokImage = ((AtomEntry *)(Yap_PreAllocCodeSpace()))->StrOfAE; + TokImage = (char *)((AtomEntry *)(Yap_PreAllocCodeSpace()))->StrOfAE; charp = TokImage; wcharp = NULL; add_ch_to_buff(och); @@ -1913,8 +1916,8 @@ enter_symbol: ch = getchrq(inp_stream); if (ch != '}') { } else { - add_ch_to_utf8_buff(och); - add_ch_to_utf8_buff(ch); + charp = ( char *)put_utf8((unsigned char *)charp, och); + charp = ( char *)put_utf8((unsigned char *)charp, ch); /* we're done */ break; } @@ -1924,7 +1927,7 @@ enter_symbol: t->Tok = Ord(kind = eot_tok); break; } else { - add_ch_to_utf8_buff(ch); + charp = ( char *)put_utf8((unsigned char *)charp, ch); ch = getchrq(inp_stream); } if (charp > (char *)AuxSp - 1024) { diff --git a/C/signals.c b/C/signals.c index 1dfeedea9..7cc4819ff 100755 --- a/C/signals.c +++ b/C/signals.c @@ -239,17 +239,17 @@ p_creep_fail( USES_REGS1 ) static Int stop_creeping( USES_REGS1 ) { get_signal( YAP_CREEP_SIGNAL PASS_REGS ); - return TRUE; + return true; } static Int -p_creep_allowed( USES_REGS1 ) +creep_allowed( USES_REGS1 ) { if (PP != NULL) { get_signal(YAP_CREEP_SIGNAL PASS_REGS); - return TRUE; + return true; } - return FALSE; + return false; } void @@ -455,7 +455,7 @@ Yap_InitSignalCPreds(void) Yap_InitCPred("$disable_debugging", 0, stop_creeping, NoTracePredFlag|HiddenPredFlag|SafePredFlag); Yap_InitCPred ("$first_signal", 1, p_first_signal, SafePredFlag|SyncPredFlag); Yap_InitCPred ("$continue_signals", 0, p_continue_signals, SafePredFlag|SyncPredFlag); - Yap_InitCPred("$creep_allowed", 0, p_creep_allowed, 0); + Yap_InitCPred("creep_allowed", 0, creep_allowed, 0); #ifdef DEBUG Yap_InitCPred("sys_debug", 1, p_debug, SafePredFlag|SyncPredFlag); #endif diff --git a/C/stack.c b/C/stack.c new file mode 100644 index 000000000..a7c517de2 --- /dev/null +++ b/C/stack.c @@ -0,0 +1,1651 @@ +/************************************************************************* +* * +* YAP Prolog * +* * +* Yap Prolog was developed at NCCUP - Universidade do Porto * +* * +* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * +* * +************************************************************************** +* * +* File: stack.c * +* comments: Stack Introspection * +* * +* Last rev: $Date: 2008-07-22 23:34:44 $,$Author: vsc $ * +* $Log: not supported by cvs2svn $ * +* Revision 1.230 2008/06/02 17:20:28 vsc * +* * +* * +*************************************************************************/ + +/** + * @file stack.c + * @author VITOR SANTOS COSTA + * @date Tue Sep 8 23:33:02 2015 + * + * @brief Get to know what is in your stack. + * + * + */ + +#include "Yap.h" +#include "clause.h" +#include "yapio.h" +#include "eval.h" +#include "tracer.h" +#ifdef YAPOR +#include "or.macros.h" +#endif /* YAPOR */ +#ifdef TABLING +#include "tab.macros.h" +#endif /* TABLING */ +#if HAVE_STRING_H +#include +#endif +#include + +#if !defined(YAPOR) && !defined(THREADS) +static void mark_pred(int, PredEntry *); +static void do_toggle_static_predicates_in_use(int); +#endif +static Int in_use( USES_REGS1 ); +static Int toggle_static_predicates_in_use( USES_REGS1 ); +static Int PredForCode(yamop *, Atom *, arity_t *, Term *); +static LogUpdIndex *find_owner_log_index(LogUpdIndex *, yamop *); +static StaticIndex *find_owner_static_index(StaticIndex *, yamop *); + +#define IN_BLOCK(P,B,SZ) ((CODEADDR)(P) >= (CODEADDR)(B) && \ + (CODEADDR)(P) < (CODEADDR)(B)+(SZ)) + +static PredEntry * +get_pred(Term t, Term tmod, char *pname) +{ + Term t0 = t; + + restart: + if (IsVarTerm(t)) { + Yap_Error(INSTANTIATION_ERROR, t0, pname); + return NULL; + } else if (IsAtomTerm(t)) { + return RepPredProp(Yap_GetPredPropByAtom(AtomOfTerm(t), tmod)); + } else if (IsIntegerTerm(t) && tmod == IDB_MODULE) { + return Yap_FindLUIntKey(IntegerOfTerm(t)); + } else if (IsApplTerm(t)) { + Functor fun = FunctorOfTerm(t); + if (IsExtensionFunctor(fun)) { + Yap_Error(TYPE_ERROR_CALLABLE, Yap_PredicateIndicator(t, tmod), pname); + return NULL; + } + if (fun == FunctorModule) { + Term tmod = ArgOfTerm(1, t); + if (IsVarTerm(tmod) ) { + Yap_Error(INSTANTIATION_ERROR, t0, pname); + return NULL; + } + if (!IsAtomTerm(tmod) ) { + Yap_Error(TYPE_ERROR_ATOM, t0, pname); + return NULL; + } + t = ArgOfTerm(2, t); + goto restart; + } + return RepPredProp(Yap_GetPredPropByFunc(fun, tmod)); + } else + return NULL; +} + + +static PredEntry * +PredForChoicePt(yamop *p_code, op_numbers *opn) { + while (TRUE) { + op_numbers opnum; + if (!p_code) + return NULL; + opnum = Yap_op_from_opcode(p_code->opc); + if (opn) + *opn = opnum; + switch(opnum) { + case _Nstop: + return NULL; + case _jump: + p_code = p_code->y_u.l.l; + break; + case _retry_me: + case _trust_me: + return p_code->y_u.Otapl.p; + case _retry_exo: + case _retry_all_exo: + return p_code->y_u.lp.p; + case _try_logical: + case _retry_logical: + case _trust_logical: + case _count_retry_logical: + case _count_trust_logical: + case _profiled_retry_logical: + case _profiled_trust_logical: + return p_code->y_u.OtaLl.d->ClPred; +#ifdef TABLING + case _trie_trust_var: + case _trie_retry_var: + case _trie_trust_var_in_pair: + case _trie_retry_var_in_pair: + case _trie_trust_val: + case _trie_retry_val: + case _trie_trust_val_in_pair: + case _trie_retry_val_in_pair: + case _trie_trust_atom: + case _trie_retry_atom: + case _trie_trust_atom_in_pair: + case _trie_retry_atom_in_pair: + case _trie_trust_null: + case _trie_retry_null: + case _trie_trust_null_in_pair: + case _trie_retry_null_in_pair: + case _trie_trust_pair: + case _trie_retry_pair: + case _trie_trust_appl: + case _trie_retry_appl: + case _trie_trust_appl_in_pair: + case _trie_retry_appl_in_pair: + case _trie_trust_extension: + case _trie_retry_extension: + case _trie_trust_double: + case _trie_retry_double: + case _trie_trust_longint: + case _trie_retry_longint: + case _trie_trust_gterm: + case _trie_retry_gterm: + return NULL; + case _table_load_answer: + case _table_try_answer: + case _table_answer_resolution: + case _table_completion: +#ifdef THREADS_CONSUMER_SHARING + case _table_answer_resolution_completion: +#endif /* THREADS_CONSUMER_SHARING */ + return NULL; /* ricroc: is this OK? */ + /* compile error --> return ENV_ToP(gc_B->cp_cp); */ +#endif /* TABLING */ + case _or_else: + if (p_code == p_code->y_u.Osblp.l) { + /* repeat */ + Atom at = AtomRepeatSpace; + return RepPredProp(PredPropByAtom(at, PROLOG_MODULE)); + } else { + return p_code->y_u.Osblp.p0; + } + break; + case _or_last: +#ifdef YAPOR + return p_code->y_u.Osblp.p0; +#else + return p_code->y_u.p.p; +#endif /* YAPOR */ + break; + case _count_retry_me: + case _retry_profiled: + case _retry2: + case _retry3: + case _retry4: + p_code = NEXTOP(p_code,l); + break; + default: + return p_code->y_u.Otapl.p; + } + } + return NULL; +} + +/** + * Yap_PredForChoicePt(): find out the predicate who generated a CP. + * + * @param cp the choice point + * @param op the YAAM instruction to process next + * + * @return A predixate structure or NULL + * + * usually pretty straightforward, it can fall in trouble with + 8 OR-P or tabling. + */ +PredEntry * +Yap_PredForChoicePt(choiceptr cp, op_numbers *op) { + if (cp == NULL) + return NULL; + return PredForChoicePt(cp->cp_ap, op); +} + +#if !defined(YAPOR) && !defined(THREADS) +static yamop *cur_clause(PredEntry *pe, yamop *codeptr) +{ + StaticClause *cl; + + cl = ClauseCodeToStaticClause(pe->cs.p_code.FirstClause); + do { + if (IN_BLOCK(codeptr,cl,cl->ClSize)) { + return cl->ClCode; + } + if (cl->ClCode == pe->cs.p_code.LastClause) + break; + cl = cl->ClNext; + } while (TRUE); + Yap_Error(SYSTEM_ERROR,TermNil,"could not find clause for indexing code"); + return(NULL); +} + +static yamop *cur_log_upd_clause(PredEntry *pe, yamop *codeptr) +{ + LogUpdClause *cl; + cl = ClauseCodeToLogUpdClause(pe->cs.p_code.FirstClause); + do { + if (IN_BLOCK(codeptr,cl->ClCode,cl->ClSize)) { + return((yamop *)cl->ClCode); + } + cl = cl->ClNext; + } while (cl != NULL); + Yap_Error(SYSTEM_ERROR,TermNil,"could not find clause for indexing code"); + return(NULL); +} + +bool +Yap_search_for_static_predicate_in_use(PredEntry *p, bool check_everything) +{ + choiceptr b_ptr = B; + CELL *env_ptr = ENV; + + if (check_everything && P) { + PredEntry *pe = EnvPreg(P); + if (p == pe) return true; + pe = EnvPreg(CP); + if (p == pe) return true; + } + do { + PredEntry *pe; + + /* check first environments that are younger than our latest choicepoint */ + if (check_everything && env_ptr) { + /* + I do not need to check environments for asserts, + only for retracts + */ + while (env_ptr && b_ptr > (choiceptr)env_ptr) { + yamop *cp = (yamop *)env_ptr[E_CP]; + PredEntry *pe; + + pe = EnvPreg(cp); + if (p == pe) return true; + if (env_ptr != NULL) + env_ptr = (CELL *)(env_ptr[E_E]); + } + } + /* now mark the choicepoint */ + + if (b_ptr) + pe = PredForChoicePt(b_ptr->cp_ap, NULL); + else + return false; + if (pe == p) { + if (check_everything) + return true; + PELOCK(38,p); + if (p->PredFlags & IndexedPredFlag) { + yamop *code_p = b_ptr->cp_ap; + yamop *code_beg = p->cs.p_code.TrueCodeOfPred; + + /* FIX ME */ + + if (p->PredFlags & LogUpdatePredFlag) { + LogUpdIndex *cl = ClauseCodeToLogUpdIndex(code_beg); + if (find_owner_log_index(cl, code_p)) + b_ptr->cp_ap = cur_log_upd_clause(pe, b_ptr->cp_ap->y_u.Otapl.d); + } else if (p->PredFlags & MegaClausePredFlag) { + StaticIndex *cl = ClauseCodeToStaticIndex(code_beg); + if (find_owner_static_index(cl, code_p)) + b_ptr->cp_ap = cur_clause(pe, b_ptr->cp_ap->y_u.Otapl.d); + } else { + /* static clause */ + StaticIndex *cl = ClauseCodeToStaticIndex(code_beg); + if (find_owner_static_index(cl, code_p)) { + b_ptr->cp_ap = cur_clause(pe, b_ptr->cp_ap->y_u.Otapl.d); + } + } + } + UNLOCKPE(63,pe); + } + env_ptr = b_ptr->cp_env; + b_ptr = b_ptr->cp_b; + } while (b_ptr != NULL); + return(FALSE); +} + +static void +mark_pred(int mark, PredEntry *pe) +{ + /* if the predicate is static mark it */ + if (pe->ModuleOfPred) { + PELOCK(39,p); + if (mark) { + pe->PredFlags |= InUsePredFlag; + } else { + pe->PredFlags &= ~InUsePredFlag; + } + UNLOCK(pe->PELock); + } +} + +/* go up the chain of choice_points and environments, + marking all static predicates that current execution is depending + upon */ +static void +do_toggle_static_predicates_in_use(int mask) +{ + choiceptr b_ptr = B; + CELL *env_ptr = ENV; + + if (b_ptr == NULL) + return; + + do { + PredEntry *pe; + + /* check first environments that are younger than our latest choicepoint */ + while (b_ptr > (choiceptr)env_ptr) { + PredEntry *pe = EnvPreg((yamop *)env_ptr[E_CP]); + + mark_pred(mask, pe); + env_ptr = (CELL *)(env_ptr[E_E]); + } + /* now mark the choicepoint */ + if ((b_ptr)) { + if ((pe = PredForChoicePt(b_ptr->cp_ap, NULL))) { + mark_pred(mask, pe); + } + } + env_ptr = b_ptr->cp_env; + b_ptr = b_ptr->cp_b; + } while (b_ptr != NULL); + /* mark or unmark all predicates */ + STATIC_PREDICATES_MARKED = mask; +} + +static Int +toggle_static_predicates_in_use( USES_REGS1 ) +{ +#if !defined(YAPOR) && !defined(THREADS) + Term t = Deref(ARG1); + Int mask; + + /* find out whether we need to mark or unmark */ + if (IsVarTerm(t)) { + Yap_Error(INSTANTIATION_ERROR,t,"toggle_static_predicates_in_use/1"); + return(FALSE); + } + if (!IsIntTerm(t)) { + Yap_Error(TYPE_ERROR_INTEGER,t,"toggle_static_predicates_in_use/1"); + return(FALSE); + } else { + mask = IntOfTerm(t); + } + do_toggle_static_predicates_in_use(mask); +#endif + return TRUE; +} + +#endif /* !defined(YAPOR) && !defined(THREADS) */ + +static void +clause_was_found(PredEntry *pp, Atom *pat, UInt *parity) { + if (pp->ModuleOfPred == IDB_MODULE) { + if (pp->PredFlags & NumberDBPredFlag) { + *parity = 0; + *pat = AtomInteger; + } else if (pp->PredFlags & AtomDBPredFlag) { + *parity = 0; + *pat = (Atom)pp->FunctorOfPred; + } else { + *pat = NameOfFunctor(pp->FunctorOfPred); + *parity = ArityOfFunctor(pp->FunctorOfPred); + } + } else { + *parity = pp->ArityOfPE; + if (pp->ArityOfPE) { + *pat = NameOfFunctor(pp->FunctorOfPred); + } else { + *pat = (Atom)(pp->FunctorOfPred); + } + } +} + +static void +code_in_pred_info(PredEntry *pp, Atom *pat, UInt *parity) { + clause_was_found(pp, pat, parity); +} + +static int +code_in_pred_lu_index(LogUpdIndex *icl, yamop *codeptr, CODEADDR *startp, CODEADDR *endp) { + LogUpdIndex *cicl; + if (IN_BLOCK(codeptr,icl,icl->ClSize)) { + if (startp) *startp = (CODEADDR)icl; + if (endp) *endp = (CODEADDR)icl+icl->ClSize; + return TRUE; + } + cicl = icl->ChildIndex; + while (cicl != NULL) { + if (code_in_pred_lu_index(cicl, codeptr, startp, endp)) + return TRUE; + cicl = cicl->SiblingIndex; + } + return FALSE; +} + +static int +code_in_pred_s_index(StaticIndex *icl, yamop *codeptr, CODEADDR *startp, CODEADDR *endp) { + StaticIndex *cicl; + if (IN_BLOCK(codeptr,icl,icl->ClSize)) { + if (startp) *startp = (CODEADDR)icl; + if (endp) *endp = (CODEADDR)icl+icl->ClSize; + return TRUE; + } + cicl = icl->ChildIndex; + while (cicl != NULL) { + if (code_in_pred_s_index(cicl, codeptr, startp, endp)) + return TRUE; + cicl = cicl->SiblingIndex; + } + return FALSE; +} + +static Int +find_code_in_clause(PredEntry *pp, yamop *codeptr, CODEADDR *startp, CODEADDR *endp) { + Int i = 1; + yamop *clcode; + + clcode = pp->cs.p_code.FirstClause; + if (clcode != NULL) { + if (pp->PredFlags & LogUpdatePredFlag) { + LogUpdClause *cl = ClauseCodeToLogUpdClause(clcode); + do { + if (IN_BLOCK(codeptr,(CODEADDR)cl,cl->ClSize)) { + if (startp) + *startp = (CODEADDR)cl; + if (endp) + *endp = (CODEADDR)cl+cl->ClSize; + return i; + } + i++; + cl = cl->ClNext; + } while (cl != NULL); + } else if (pp->PredFlags & DynamicPredFlag) { + do { + DynamicClause *cl; + + cl = ClauseCodeToDynamicClause(clcode); + if (IN_BLOCK(codeptr,cl,cl->ClSize)) { + if (startp) + *startp = (CODEADDR)cl; + if (endp) + *endp = (CODEADDR)cl+cl->ClSize; + return i; + } + if (clcode == pp->cs.p_code.LastClause) + break; + i++; + clcode = NextDynamicClause(clcode); + } while (TRUE); + } else if (pp->PredFlags & MegaClausePredFlag) { + MegaClause *cl; + + cl = ClauseCodeToMegaClause(clcode); + if (IN_BLOCK(codeptr,cl,cl->ClSize)) { + if (startp) + *startp = (CODEADDR)cl; + if (endp) + *endp = (CODEADDR)cl+cl->ClSize; + return 1+((char *)codeptr-(char *)cl->ClCode)/cl->ClItemSize; + } + } else { + StaticClause *cl; + + cl = ClauseCodeToStaticClause(clcode); + do { + if (IN_BLOCK(codeptr,cl,cl->ClSize)) { + if (startp) + *startp = (CODEADDR)cl; + if (endp) + *endp = (CODEADDR)cl+cl->ClSize; + return i; + } + if (cl->ClCode == pp->cs.p_code.LastClause) + break; + i++; + cl = cl->ClNext; + } while (TRUE); + } + } + return(0); +} + +static Term +clause_loc(void *clcode, PredEntry *pp) { + + if (pp->PredFlags & LogUpdatePredFlag) { + LogUpdClause *cl = ClauseCodeToLogUpdClause(clcode); + cl = ClauseCodeToLogUpdClause(clcode); + + if (cl->ClFlags & FactMask) { + return MkIntTerm(cl->lusl.ClLine); + } else { + return MkIntTerm(cl->lusl.ClSource->ag.line_number); + } + } else if (pp->PredFlags & DynamicPredFlag) { + DynamicClause *cl; + cl = ClauseCodeToDynamicClause(clcode); + + return TermNil; + } else if (pp->PredFlags & MegaClausePredFlag) { + MegaClause *mcl = ClauseCodeToMegaClause(pp->cs.p_code.FirstClause); + return MkIntTerm(mcl->ClLine); + } else { + StaticClause *cl; + cl = ClauseCodeToStaticClause(clcode); + + if (cl->ClFlags & FactMask) { + return MkIntTerm(cl->usc.ClLine); + } else if (cl->ClFlags & SrcMask) { + return MkIntTerm(cl->usc.ClSource->ag.line_number); + } else + return TermNil; + + } + return TermNil; +} + +static int +cl_code_in_pred(PredEntry *pp, yamop *codeptr, CODEADDR *startp, CODEADDR *endp) { + Int out; + + PELOCK(39,pp); + /* check if the codeptr comes from the indexing code */ + if (pp->PredFlags & IndexedPredFlag) { + if (pp->PredFlags & LogUpdatePredFlag) { + if (code_in_pred_lu_index(ClauseCodeToLogUpdIndex(pp->cs.p_code.TrueCodeOfPred), codeptr, startp, endp)) { + UNLOCK(pp->PELock); + return TRUE; + } + } else { + if (code_in_pred_s_index(ClauseCodeToStaticIndex(pp->cs.p_code.TrueCodeOfPred), codeptr, startp, endp)) { + UNLOCK(pp->PELock); + return TRUE; + } + } + } + if (pp->PredFlags & (CPredFlag|AsmPredFlag|UserCPredFlag)) { + StaticClause *cl = ClauseCodeToStaticClause(pp->CodeOfPred); + if (IN_BLOCK(codeptr,(CODEADDR)cl,cl->ClSize)) { + if (startp) + *startp = (CODEADDR)cl; + if (endp) + *endp = (CODEADDR)cl+cl->ClSize; + UNLOCK(pp->PELock); + return TRUE; + } else { + UNLOCK(pp->PELock); + return FALSE; + } + } else { + out = find_code_in_clause(pp, codeptr, startp, endp); + } + UNLOCK(pp->PELock); + if (out) return TRUE; + return FALSE; +} + +static Int +code_in_pred(PredEntry *pp, Atom *pat, UInt *parity, yamop *codeptr) { + Int out; + + PELOCK(40,pp); + /* check if the codeptr comes from the indexing code */ + if (pp->PredFlags & IndexedPredFlag) { + if (pp->PredFlags & LogUpdatePredFlag) { + if (code_in_pred_lu_index(ClauseCodeToLogUpdIndex(pp->cs.p_code.TrueCodeOfPred), codeptr, NULL, NULL)) { + code_in_pred_info(pp, pat, parity); + UNLOCK(pp->PELock); + return -1; + } + } else { + if (code_in_pred_s_index(ClauseCodeToStaticIndex(pp->cs.p_code.TrueCodeOfPred), codeptr, NULL, NULL)) { + code_in_pred_info(pp, pat, parity); + UNLOCK(pp->PELock); + return -1; + } + } + } + if ((out = find_code_in_clause(pp, codeptr, NULL, NULL))) { + clause_was_found(pp, pat, parity); + } + UNLOCK(pp->PELock); + return out; +} + +static Int +PredForCode(yamop *codeptr, Atom *pat, UInt *parity, Term *pmodule) { + Int found = 0; + ModEntry *me = CurrentModules; + + /* should we allow the user to see hidden predicates? */ + while (me) { + + PredEntry *pp; + pp = me->PredForME; + while (pp != NULL) { + if ((found = code_in_pred(pp, pat, parity, codeptr)) != 0) { + if (pmodule) + *pmodule = MkAtomTerm(me->AtomOfME); + return found; + } + pp = pp->NextPredOfModule; + } + me = me->NextME; + } + return(0); +} + +Int +Yap_PredForCode(yamop *codeptr, find_pred_type where_from, Atom *pat, UInt *parity, Term *pmodule) { + PredEntry *p; + + if (where_from == FIND_PRED_FROM_CP) { + p = PredForChoicePt(codeptr, NULL); + } else if (where_from == FIND_PRED_FROM_ENV) { + p = EnvPreg(codeptr); + if (p) { + Int out; + if (p->ModuleOfPred == PROLOG_MODULE) + *pmodule = TermProlog; + else + *pmodule = p->ModuleOfPred; + out = find_code_in_clause(p, codeptr, NULL, NULL); + clause_was_found(p, pat, parity); + return out; + } + } else { + return PredForCode(codeptr, pat, parity, pmodule); + } + if (p == NULL) { + return 0; + } + clause_was_found(p, pat, parity); + if (p->ModuleOfPred == PROLOG_MODULE) + *pmodule = TermProlog; + else + *pmodule = p->ModuleOfPred; + return -1; +} + +/* intruction blocks we found ourselves at */ +static PredEntry * +walk_got_lu_block(LogUpdIndex *cl, CODEADDR *startp, CODEADDR *endp) +{ + PredEntry *pp = cl->ClPred; + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + return pp; +} + +/* intruction blocks we found ourselves at */ +static PredEntry * +walk_got_lu_clause(LogUpdClause *cl, CODEADDR *startp, CODEADDR *endp) +{ + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + return cl->ClPred; +} + +/* we hit a meta-call, so we don't know what is happening */ +static PredEntry * +found_meta_call(CODEADDR *startp, CODEADDR *endp) +{ + PredEntry *pp = PredMetaCall; + *startp = (CODEADDR)&(pp->OpcodeOfPred); + *endp = (CODEADDR)NEXTOP((yamop *)&(pp->OpcodeOfPred),e); + return pp; +} + +/* intruction blocks we found ourselves at */ +static PredEntry * +walk_found_c_pred(PredEntry *pp, CODEADDR *startp, CODEADDR *endp) +{ + StaticClause *cl = ClauseCodeToStaticClause(pp->CodeOfPred); + *startp = (CODEADDR)&(cl->ClCode); + *endp = (CODEADDR)&(cl->ClCode)+cl->ClSize; + return pp; +} + +/* we hit a mega-clause, no point in going on */ +static PredEntry * +found_mega_clause(PredEntry *pp, CODEADDR *startp, CODEADDR *endp) +{ + MegaClause *mcl = ClauseCodeToMegaClause(pp->cs.p_code.FirstClause); + *startp = (CODEADDR)mcl; + *endp = (CODEADDR)mcl+mcl->ClSize; + return pp; +} + +/* we hit a mega-clause, no point in going on */ +static PredEntry * +found_idb_clause(yamop *pc, CODEADDR *startp, CODEADDR *endp) +{ + LogUpdClause *cl = ClauseCodeToLogUpdClause(pc); + + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + return cl->ClPred; +} + +/* we hit a expand_index, no point in going on */ +static PredEntry * +found_expand_index(yamop *pc, CODEADDR *startp, CODEADDR *endp, yamop *codeptr USES_REGS) +{ + PredEntry *pp = codeptr->y_u.sssllp.p; + if (pc == codeptr) { + *startp = (CODEADDR)codeptr; + *endp = (CODEADDR)NEXTOP(codeptr,sssllp); + } + return pp; +} + +/* we hit a expand_index, no point in going on */ +static PredEntry * +found_fail(yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS) +{ + PredEntry *pp = RepPredProp(Yap_GetPredPropByAtom(AtomFail,CurrentModule)); + *startp = *endp = (CODEADDR)FAILCODE; + return pp; +} + +/* we hit a expand_index, no point in going on */ +static PredEntry * +found_owner_op(yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS) +{ + PredEntry *pp = ((PredEntry *)(Unsigned(pc)-(CELL)(&(((PredEntry *)NULL)->OpcodeOfPred)))); + *startp = (CODEADDR)&(pp->OpcodeOfPred); + *endp = (CODEADDR)NEXTOP((yamop *)&(pp->OpcodeOfPred),e); + return pp; +} + +/* we hit a expand_index, no point in going on */ +static PredEntry * +found_expand(yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS) +{ + PredEntry *pp = ((PredEntry *)(Unsigned(pc)-(CELL)(&(((PredEntry *)NULL)->cs.p_code.ExpandCode)))); + *startp = (CODEADDR)&(pp->cs.p_code.ExpandCode); + *endp = (CODEADDR)NEXTOP((yamop *)&(pp->cs.p_code.ExpandCode),e); + return pp; +} + +static PredEntry * +found_ystop(yamop *pc, int clause_code, CODEADDR *startp, CODEADDR *endp, PredEntry *pp USES_REGS) +{ + if (pc == YESCODE) { + pp = RepPredProp(Yap_GetPredPropByAtom(AtomTrue,CurrentModule)); + *startp = (CODEADDR)YESCODE; + *endp = (CODEADDR)YESCODE+(CELL)(NEXTOP((yamop *)NULL,e)); + return pp; + } + if (!pp) { + /* must be an index */ + PredEntry **pep = (PredEntry **)pc->y_u.l.l; + pp = pep[-1]; + } + if (pp->PredFlags & LogUpdatePredFlag) { + if (clause_code) { + LogUpdClause *cl = ClauseCodeToLogUpdClause(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } else { + LogUpdIndex *cl = ClauseCodeToLogUpdIndex(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } + } else if (pp->PredFlags & DynamicPredFlag) { + DynamicClause *cl = ClauseCodeToDynamicClause(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } else { + if (clause_code) { + StaticClause *cl = ClauseCodeToStaticClause(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } else { + StaticIndex *cl = ClauseCodeToStaticIndex(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } + } + return pp; +} + +static PredEntry * +ClauseInfoForCode(yamop *codeptr, CODEADDR *startp, CODEADDR *endp USES_REGS) { + yamop *pc; + PredEntry *pp = NULL; + int clause_code = FALSE; + + if (codeptr >= COMMA_CODE && + codeptr < FAILCODE) { + pp = RepPredProp(Yap_GetPredPropByFunc(FunctorComma,CurrentModule)); + *startp = (CODEADDR)COMMA_CODE; + *endp = (CODEADDR)(FAILCODE-1); + return pp; + } + pc = codeptr; +#include "walkclause.h" + return NULL; +} + +PredEntry * +Yap_PredEntryForCode(yamop *codeptr, find_pred_type where_from, CODEADDR *startp, CODEADDR *endp) { + CACHE_REGS + if (where_from == FIND_PRED_FROM_CP) { + PredEntry *pp = PredForChoicePt(codeptr, NULL); + if (cl_code_in_pred(pp, codeptr, startp, endp)) { + return pp; + } + } else if (where_from == FIND_PRED_FROM_ENV) { + PredEntry *pp = EnvPreg(codeptr); + if (cl_code_in_pred(pp, codeptr, startp, endp)) { + return pp; + } + } else { + return ClauseInfoForCode(codeptr, startp, endp PASS_REGS); + } + return NULL; +} + + + + +/** + * Detect whether the predicate describing the goal in A1, + * module A2 is currently live in the stack. + * + * @param USES_REGS1 + * + * @return liveness + */ +static Int +in_use( USES_REGS1 ) +{ /* '$in_use'(+P,+Mod) */ + PredEntry *pe; + Int out; + + pe = get_pred(Deref(ARG1), Deref(ARG2), "$in_use"); + if (EndOfPAEntr(pe)) + return FALSE; + PELOCK(25,pe); + out = Yap_static_in_use(pe,TRUE); + UNLOCKPE(42,pe); + return(out); +} + + +static Int +pred_for_code( USES_REGS1 ) { + yamop *codeptr; + Atom at; + arity_t arity; + Term tmodule = TermProlog; + Int cl; + Term t = Deref(ARG1); + + if (IsVarTerm(t)) { + return FALSE; + } else if (IsApplTerm(t) && FunctorOfTerm(t) == FunctorStaticClause) { + codeptr = Yap_ClauseFromTerm(t)->ClCode; + } else if (IsIntegerTerm(t)) { + codeptr = (yamop *)IntegerOfTerm(t); + } else if (IsDBRefTerm(t)) { + codeptr = (yamop *)DBRefOfTerm(t); + } else { + return FALSE; + } + cl = PredForCode(codeptr, &at, &arity, &tmodule); + if (!tmodule) tmodule = TermProlog; + if (cl == 0) { + return Yap_unify(ARG5,MkIntTerm(0)); + } else { + return(Yap_unify(ARG2,MkAtomTerm(at)) && + Yap_unify(ARG3,MkIntegerTerm(arity)) && + Yap_unify(ARG4,tmodule) && + Yap_unify(ARG5,MkIntegerTerm(cl))); + } +} + +static LogUpdIndex * +find_owner_log_index(LogUpdIndex *cl, yamop *code_p) +{ + yamop *code_beg = cl->ClCode; + yamop *code_end = (yamop *)((char *)cl + cl->ClSize); + + if (code_p >= code_beg && code_p <= code_end) { + return cl; + } + cl = cl->ChildIndex; + while (cl != NULL) { + LogUpdIndex *out; + if ((out = find_owner_log_index(cl, code_p)) != NULL) { + return out; + } + cl = cl->SiblingIndex; + } + return NULL; +} + +static StaticIndex * +find_owner_static_index(StaticIndex *cl, yamop *code_p) +{ + yamop *code_beg = cl->ClCode; + yamop *code_end = (yamop *)((char *)cl + cl->ClSize); + + if (code_p >= code_beg && code_p <= code_end) { + return cl; + } + cl = cl->ChildIndex; + while (cl != NULL) { + StaticIndex *out; + if ((out = find_owner_static_index(cl, code_p)) != NULL) { + return out; + } + cl = cl->SiblingIndex; + } + return NULL; +} + +ClauseUnion * +Yap_find_owner_index(yamop *ipc, PredEntry *ap) +{ + /* we assume we have an owner index */ + if (ap->PredFlags & LogUpdatePredFlag) { + LogUpdIndex *cl = ClauseCodeToLogUpdIndex(ap->cs.p_code.TrueCodeOfPred); + return (ClauseUnion *)find_owner_log_index(cl,ipc); + } else { + StaticIndex *cl = ClauseCodeToStaticIndex(ap->cs.p_code.TrueCodeOfPred); + return (ClauseUnion *)find_owner_static_index(cl,ipc); + } +} + +static Term +all_envs(CELL *env_ptr USES_REGS) +{ + Term tf = AbsPair(HR); + CELL *start = HR; + CELL *bp = NULL; + + /* walk the environment chain */ + while (env_ptr) { + bp = HR; + HR += 2; + /* notice that MkIntegerTerm may increase the HReap */ + bp[0] = MkIntegerTerm(LCL0-env_ptr); + if (HR >= ASP-1024) { + HR = start; + LOCAL_Error_Size = (ASP-1024)-HR; + while (env_ptr) { + LOCAL_Error_Size += 2; + env_ptr = (CELL *)(env_ptr[E_E]); + } + return 0L; + } else { + bp[1] = AbsPair(HR); + } + env_ptr = (CELL *)(env_ptr[E_E]); + } + bp[1] = TermNil; + return tf; +} + +static Term +all_cps(choiceptr b_ptr USES_REGS) +{ + CELL *bp = NULL; + CELL *start = HR; + Term tf = AbsPair(HR); + + while (b_ptr) { + bp = HR; + HR += 2; + /* notice that MkIntegerTerm may increase the HReap */ + bp[0] = MkIntegerTerm((Int)(LCL0-(CELL *)b_ptr)); + if (HR >= ASP-1024) { + HR = start; + LOCAL_Error_Size = (ASP-1024)-HR; + while (b_ptr) { + LOCAL_Error_Size += 2; + b_ptr = b_ptr->cp_b; + } + return 0L; + } else { + bp[1] = AbsPair(HR); + } + b_ptr = b_ptr->cp_b; + } + bp[1] = TermNil; + return tf; +} + + + +static Int +p_all_choicepoints( USES_REGS1 ) +{ + Term t; + while ((t = all_cps(B PASS_REGS)) == 0L) { + if (!Yap_gcl(LOCAL_Error_Size, 1, ENV, gc_P(P,CP))) { + Yap_Error(OUT_OF_STACK_ERROR, TermNil, "while dumping choicepoints"); + return FALSE; + } + } + return Yap_unify(ARG1,t); +} + +static Int +p_all_envs( USES_REGS1 ) +{ + Term t; + while ((t = all_envs(ENV PASS_REGS)) == 0L) { + if (!Yap_gcl(LOCAL_Error_Size, 1, ENV, gc_P(P,CP))) { + Yap_Error(OUT_OF_STACK_ERROR, TermNil, "while dumping environments"); + return FALSE; + } + } + return Yap_unify(ARG1,t); +} + + Term +clause_info ( yamop *codeptr, PredEntry *pp) { + Term ts[2]; + CODEADDR begin; + + if (pp->ArityOfPE == 0) { + ts[0] = MkAtomTerm((Atom)pp->FunctorOfPred); + ts[1] = MkIntTerm(0); + } else { + ts[0] = MkAtomTerm(NameOfFunctor( pp->FunctorOfPred)); + ts[1] = MkIntegerTerm(pp->ArityOfPE); + } + + ts[0] = MkAtomTerm(pp->src.OwnerFile); + Term t1 = Yap_MkApplTerm( FunctorModule, 2, ts); + if (find_code_in_clause(pp, codeptr, &begin, NULL) <= 0 || + ((ts[0] = clause_loc(begin, pp) == TermNil ))) { + ts[0] = clause_loc(pp->cs.p_code.FirstClause, pp); + ts[1] = clause_loc(pp->cs.p_code.LastClause, pp); + if (ts[0] == ts[1] && ts[1] != TermNil) + {} + else if (ts[1]== TermNil && ts[0] != TermNil) + ts[0] = Yap_MkApplTerm( FunctorMinus, 2, ts); + } + ts[1] = t1; + return Yap_MkApplTerm( FunctorModule, 2, ts ); +} + + + + + + + +static Term +error_culprit(bool internal USES_REGS) +{ + PredEntry *pe; + // case number 1: Yap_Error called from built-in. + if (internal) { + pe = EnvPreg(CP); + if (pe->PredFlags & HiddenPredFlag) return clause_info(P, pe); + } else { + CELL * curENV = ENV; + yamop *curCP = CP; + PredEntry *pe = EnvPreg(curCP); + + while (curCP != YESCODE) { + if (pe->ModuleOfPred) return clause_info(P, pe); + curENV = (CELL *)(curENV[E_E]); + curCP = (yamop *)(curENV[E_CP]); + pe = EnvPreg(curCP); + } + } + return TermNil; +} + +static Term +all_calls( bool internal USES_REGS ) +{ + Term ts[6]; + Functor f = Yap_MkFunctor(AtomLocalSp,6); + + // The first argument is key: it tries to + // catch the culprit at the user level, + ts[0] = error_culprit(internal PASS_REGS); + ts[1] = MkAddressTerm(P); + ts[2] = MkAddressTerm(CP); + ts[3] = MkAddressTerm(PP); + if (trueLocalPrologFlag(STACK_DUMP_ON_ERROR_FLAG)) { + ts[4] = all_envs(ENV PASS_REGS); + ts[5] = all_cps(B PASS_REGS); + if (ts[4] == 0L || + ts[5] == 0L) + return 0L; + } else { + ts[4] = ts[5] = TermNil; + } + return Yap_MkApplTerm(f,6,ts); +} + +/** + * report the current status of the stacks up to level $N$ + * + * @param depth + * + * @return data on the current program counter + */ + +Term + Yap_all_calls( void ) +{ + CACHE_REGS + return all_calls( true PASS_REGS1 ); +} + + +static Int +current_stack( USES_REGS1 ) +{ + Term t; + while ((t = all_calls( false PASS_REGS1 )) == 0L) { + if (!Yap_gcl(LOCAL_Error_Size, 1, ENV, gc_P(P,CP))) { + Yap_Error(OUT_OF_STACK_ERROR, TermNil, "while dumping stack"); + return FALSE; + } + } + return Yap_unify(ARG1,t); +} + + +#if LOW_PROF + +static void +add_code_in_lu_index(LogUpdIndex *cl, PredEntry *pp) +{ + char *code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_LU_INDEX); + cl = cl->ChildIndex; + while (cl != NULL) { + add_code_in_lu_index(cl, pp); + cl = cl->SiblingIndex; + } +} + +static void +add_code_in_static_index(StaticIndex *cl, PredEntry *pp) +{ + char *code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_STATIC_INDEX); + cl = cl->ChildIndex; + while (cl != NULL) { + add_code_in_static_index(cl, pp); + cl = cl->SiblingIndex; + } +} + + +static void +add_code_in_pred(PredEntry *pp) { + yamop *clcode; + + PELOCK(49,pp); + /* check if the codeptr comes from the indexing code */ + + /* highly likely this is used for indexing */ + Yap_inform_profiler_of_clause(&(pp->OpcodeOfPred), &(pp->OpcodeOfPred)+1, pp, GPROF_INIT_OPCODE); + if (pp->PredFlags & (CPredFlag|AsmPredFlag)) { + char *code_end; + StaticClause *cl; + + clcode = pp->CodeOfPred; + cl = ClauseCodeToStaticClause(clcode); + code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_SYSTEM_CODE); + UNLOCK(pp->PELock); + return; + } + Yap_inform_profiler_of_clause(&(pp->cs.p_code.ExpandCode), &(pp->cs.p_code.ExpandCode)+1, pp, GPROF_INIT_EXPAND); + clcode = pp->cs.p_code.TrueCodeOfPred; + if (pp->PredFlags & IndexedPredFlag) { + if (pp->PredFlags & LogUpdatePredFlag) { + LogUpdIndex *cl = ClauseCodeToLogUpdIndex(clcode); + add_code_in_lu_index(cl, pp); + } else { + StaticIndex *cl = ClauseCodeToStaticIndex(clcode); + add_code_in_static_index(cl, pp); + } + } + clcode = pp->cs.p_code.FirstClause; + if (clcode != NULL) { + if (pp->PredFlags & LogUpdatePredFlag) { + LogUpdClause *cl = ClauseCodeToLogUpdClause(clcode); + do { + char *code_end; + + code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_LOG_UPD_CLAUSE); + cl = cl->ClNext; + } while (cl != NULL); + } else if (pp->PredFlags & DynamicPredFlag) { + do { + DynamicClause *cl; + CODEADDR code_end; + + cl = ClauseCodeToDynamicClause(clcode); + code_end = (CODEADDR)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_DYNAMIC_CLAUSE); + if (clcode == pp->cs.p_code.LastClause) + break; + clcode = NextDynamicClause(clcode); + } while (TRUE); + } else { + StaticClause *cl = ClauseCodeToStaticClause(clcode); + do { + char *code_end; + + code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp,GPROF_INIT_STATIC_CLAUSE); + if (cl->ClCode == pp->cs.p_code.LastClause) + break; + cl = cl->ClNext; + } while (TRUE); + } + } + UNLOCK(pp->PELock); +} + + +void +Yap_dump_code_area_for_profiler(void) { + ModEntry *me = CurrentModules; + + while (me) { + PredEntry *pp = me->PredForME; + + while (pp != NULL) { + /* if (pp->ArityOfPE) { + fprintf(stderr,"%s/%d %p\n", + RepAtom(NameOfFunctor(pp->FunctorOfPred))->StrOfAE, + pp->ArityOfPE, + pp); + } else { + fprintf(stderr,"%s %p\n", + RepAtom((Atom)(pp->FunctorOfPred))->StrOfAE, + pp); + }*/ + add_code_in_pred(pp); + pp = pp->NextPredOfModule; + } + me = me->NextME; + } + Yap_inform_profiler_of_clause(COMMA_CODE, FAILCODE, RepPredProp(Yap_GetPredPropByFunc(FunctorComma,0)), GPROF_INIT_COMMA); + Yap_inform_profiler_of_clause(FAILCODE, FAILCODE+1, RepPredProp(Yap_GetPredPropByAtom(AtomFail,0)), GPROF_INIT_FAIL); +} + +#endif /* LOW_PROF */ + + +static Int +program_continuation( USES_REGS1 ) +{ + PredEntry *pe = EnvPreg((yamop *)((ENV_Parent(ENV))[E_CP])); + if (pe->ModuleOfPred) { + if (!Yap_unify(ARG1,pe->ModuleOfPred)) + return FALSE; + } else { + if (!Yap_unify(ARG1,TermProlog)) + return FALSE; + } + if (pe->ArityOfPE) { + if (!Yap_unify(ARG2,MkAtomTerm(NameOfFunctor(pe->FunctorOfPred)))) + return FALSE; + if (!Yap_unify(ARG3,MkIntegerTerm(ArityOfFunctor(pe->FunctorOfPred)))) + return FALSE; + } else { + if (!Yap_unify(ARG2,MkAtomTerm((Atom)pe->FunctorOfPred))) + return FALSE; + if (!Yap_unify(ARG3,MkIntTerm(0))) + return FALSE; + } + return TRUE; +} + +static Term +BuildActivePred(PredEntry *ap, CELL *vect) +{ + CACHE_REGS + arity_t i; + + if (!ap->ArityOfPE) { + return MkVarTerm(); + } + for (i = 0; i < ap->ArityOfPE; i++) { + Term t = Deref(vect[i]); + if (IsVarTerm(t)) { + CELL *pt = VarOfTerm(t); + /* one stack */ + if (pt > HR) { + Term nt = MkVarTerm(); + Yap_unify(t, nt); + } + } + } + return Yap_MkApplTerm(ap->FunctorOfPred, ap->ArityOfPE, vect); +} + +static int +UnifyPredInfo(PredEntry *pe, int start_arg USES_REGS) { + arity_t arity = pe->ArityOfPE; + Term tmod, tname; + + if (pe->ModuleOfPred != IDB_MODULE) { + if (pe->ModuleOfPred == PROLOG_MODULE) { + tmod = TermProlog; + } else { + tmod = pe->ModuleOfPred; + } + if (pe->ArityOfPE == 0) { + tname = MkAtomTerm((Atom)pe->FunctorOfPred); + } else { + Functor f = pe->FunctorOfPred; + tname = MkAtomTerm(NameOfFunctor(f)); + } + } else { + tmod = pe->ModuleOfPred; + if (pe->PredFlags & NumberDBPredFlag) { + tname = MkIntegerTerm(pe->src.IndxId); + } else if (pe->PredFlags & AtomDBPredFlag) { + tname = MkAtomTerm((Atom)pe->FunctorOfPred); + } else { + Functor f = pe->FunctorOfPred; + tname = MkAtomTerm(NameOfFunctor(f)); + } + } + + return Yap_unify(XREGS[start_arg], tmod) && + Yap_unify(XREGS[start_arg+1],tname) && + Yap_unify(XREGS[start_arg+2],MkIntegerTerm(arity)); +} + + +static Int +ClauseId(yamop *ipc, PredEntry *pe) +{ + if (!ipc) + return 0; + return find_code_in_clause(pe, ipc, NULL, NULL); +} + +static Int +env_info( USES_REGS1 ) +{ + CELL *env = LCL0-IntegerOfTerm(Deref(ARG1)); + yamop *env_cp; + Term env_b, taddr; + + if (!env) + return FALSE; + env_b = MkIntegerTerm((Int)(LCL0-(CELL *)env[E_CB])); + env_cp = (yamop *)env[E_CP]; + + /* pe = PREVOP(env_cp,Osbpp)->y_u.Osbpp.p0; */ + taddr = MkIntegerTerm((Int)env); + return Yap_unify(ARG3,MkIntegerTerm((Int)env_cp)) && + Yap_unify(ARG2, taddr) && + Yap_unify(ARG4, env_b); +} + +static Int +p_cpc_info( USES_REGS1 ) +{ + PredEntry *pe; + yamop *ipc = (yamop *)IntegerOfTerm(Deref(ARG1)); + + pe = PREVOP(ipc,Osbpp)->y_u.Osbpp.p0; + return UnifyPredInfo(pe, 2 PASS_REGS) && + Yap_unify(ARG5,MkIntegerTerm(ClauseId(ipc,pe))); +} + +static Int +p_choicepoint_info( USES_REGS1 ) +{ + choiceptr cptr = (choiceptr)(LCL0-IntegerOfTerm(Deref(ARG1))); + PredEntry *pe = NULL; + int go_on = TRUE; + yamop *ipc = cptr->cp_ap; + yamop *ncl = NULL; + Term t = TermNil, taddr; + + taddr = MkIntegerTerm((Int)cptr); + while (go_on) { + op_numbers opnum = Yap_op_from_opcode(ipc->opc); + go_on = FALSE; + switch (opnum) { +#ifdef TABLING + case _table_load_answer: +#ifdef LOW_LEVEL_TRACER + pe = LOAD_CP(cptr)->cp_pred_entry; +#else + pe = UndefCode; +#endif + t = MkVarTerm(); + break; + case _table_try_answer: + case _table_retry_me: + case _table_trust_me: + case _table_retry: + case _table_trust: + case _table_completion: +#ifdef THREADS_CONSUMER_SHARING + case _table_answer_resolution_completion: +#endif /* THREADS_CONSUMER_SHARING */ +#ifdef LOW_LEVEL_TRACER +#ifdef DETERMINISTIC_TABLING + if (IS_DET_GEN_CP(cptr)) { + pe = DET_GEN_CP(cptr)->cp_pred_entry; + t = MkVarTerm(); + } else +#endif /* DETERMINISTIC_TABLING */ + { + pe = GEN_CP(cptr)->cp_pred_entry; + t = BuildActivePred(pe, (CELL *)(GEN_CP(B) + 1)); + } +#else + pe = UndefCode; + t = MkVarTerm(); +#endif + break; + case _table_answer_resolution: +#ifdef LOW_LEVEL_TRACER + pe = CONS_CP(cptr)->cp_pred_entry; +#else + pe = UndefCode; +#endif + t = MkVarTerm(); + break; + case _trie_trust_var: + case _trie_retry_var: + case _trie_trust_var_in_pair: + case _trie_retry_var_in_pair: + case _trie_trust_val: + case _trie_retry_val: + case _trie_trust_val_in_pair: + case _trie_retry_val_in_pair: + case _trie_trust_atom: + case _trie_retry_atom: + case _trie_trust_atom_in_pair: + case _trie_retry_atom_in_pair: + case _trie_trust_null: + case _trie_retry_null: + case _trie_trust_null_in_pair: + case _trie_retry_null_in_pair: + case _trie_trust_pair: + case _trie_retry_pair: + case _trie_trust_appl: + case _trie_retry_appl: + case _trie_trust_appl_in_pair: + case _trie_retry_appl_in_pair: + case _trie_trust_extension: + case _trie_retry_extension: + case _trie_trust_double: + case _trie_retry_double: + case _trie_trust_longint: + case _trie_retry_longint: + case _trie_trust_gterm: + case _trie_retry_gterm: + pe = UndefCode; + t = MkVarTerm(); + break; +#endif /* TABLING */ + case _try_logical: + case _retry_logical: + case _trust_logical: + case _count_retry_logical: + case _count_trust_logical: + case _profiled_retry_logical: + case _profiled_trust_logical: + ncl = ipc->y_u.OtaLl.d->ClCode; + pe = ipc->y_u.OtaLl.d->ClPred; + t = BuildActivePred(pe, cptr->cp_args); + break; + case _or_else: + pe = ipc->y_u.Osblp.p0; + ncl = ipc; + t = Yap_MkNewApplTerm(FunctorOr, 2); + break; + + case _or_last: +#ifdef YAPOR + pe = ipc->y_u.Osblp.p0; +#else + pe = ipc->y_u.p.p; +#endif + ncl = ipc; + t = Yap_MkNewApplTerm(FunctorOr, 2); + break; + case _retry2: + case _retry3: + case _retry4: + pe = NULL; + t = TermNil; + ipc = NEXTOP(ipc,l); + if (!ncl) + ncl = ipc->y_u.Otapl.d; + go_on = TRUE; + break; + case _jump: + pe = NULL; + t = TermNil; + ipc = ipc->y_u.l.l; + go_on = TRUE; + break; + case _retry_c: + case _retry_userc: + ncl = NEXTOP(ipc,OtapFs); + pe = ipc->y_u.OtapFs.p; + t = BuildActivePred(pe, cptr->cp_args); + break; + case _retry_profiled: + case _count_retry: + pe = NULL; + t = TermNil; + ncl = ipc->y_u.Otapl.d; + ipc = NEXTOP(ipc,p); + go_on = TRUE; + break; + case _retry_me: + case _trust_me: + case _count_retry_me: + case _count_trust_me: + case _profiled_retry_me: + case _profiled_trust_me: + case _retry_and_mark: + case _profiled_retry_and_mark: + case _retry: + case _trust: + if (!ncl) + ncl = ipc->y_u.Otapl.d; + pe = ipc->y_u.Otapl.p; + t = BuildActivePred(pe, cptr->cp_args); + break; + case _retry_exo: + case _retry_all_exo: + ncl = NULL; + pe = ipc->y_u.lp.p; + t = BuildActivePred(pe, cptr->cp_args); + break; + case _Nstop: + { + Atom at = AtomLive; + t = MkAtomTerm(at); + pe = RepPredProp(PredPropByAtom(at, CurrentModule)); + } + break; + case _Ystop: + default: + return FALSE; + } + } + return UnifyPredInfo(pe, 3 PASS_REGS) && + Yap_unify(ARG2, taddr) && + Yap_unify(ARG6,t) && + Yap_unify(ARG7,MkIntegerTerm(ClauseId(ncl,pe))); +} + +static Int /* $parent_pred(Module, Name, Arity) */ +parent_pred( USES_REGS1 ) +{ + /* This predicate is called from the debugger. + We assume a sequence of the form a -> b */ + Atom at; + arity_t arity; + Term module; + if (!PredForCode(P_before_spy, &at, &arity, &module)) { + return Yap_unify(ARG1, MkIntTerm(0)) && + Yap_unify(ARG2, MkAtomTerm(AtomMetaCall)) && + Yap_unify(ARG3, MkIntTerm(0)); + } + return Yap_unify(ARG1, MkIntTerm(module)) && + Yap_unify(ARG2, MkAtomTerm(at)) && + Yap_unify(ARG3, MkIntTerm(arity)); +} + + +void +Yap_InitStInfo(void) +{ + CACHE_REGS + Term cm = CurrentModule; + + Yap_InitCPred("in_use", 2, in_use, HiddenPredFlag|TestPredFlag | SafePredFlag|SyncPredFlag); + Yap_InitCPred("toggle_static_predicates_in_use", 0, toggle_static_predicates_in_use, HiddenPredFlag|SafePredFlag|SyncPredFlag); + CurrentModule = HACKS_MODULE; + Yap_InitCPred("current_choicepoints", 1, p_all_choicepoints, 0); + Yap_InitCPred("current_continuations", 1, p_all_envs, 0); + Yap_InitCPred("choicepoint", 7, p_choicepoint_info, 0); + Yap_InitCPred("continuation", 4, env_info,0); + Yap_InitCPred("cp_to_predicate", 5, p_cpc_info, 0); + CurrentModule = cm; + Yap_InitCPred("current_stack", 1, current_stack, HiddenPredFlag|SyncPredFlag); + Yap_InitCPred("pred_for_code", 5, pred_for_code, HiddenPredFlag|SyncPredFlag); + Yap_InitCPred("parent_pred", 3, parent_pred, HiddenPredFlag|SafePredFlag); + Yap_InitCPred("program_continuation", 3, program_continuation, HiddenPredFlag|SafePredFlag|SyncPredFlag); + + +} + diff --git a/C/stackinfo.c b/C/stackinfo.c new file mode 100644 index 000000000..f27792bd7 --- /dev/null +++ b/C/stackinfo.c @@ -0,0 +1,1159 @@ +/************************************************************************* +* * +* YAP Prolog * +* * +* Yap Prolog was developed at NCCUP - Universidade do Porto * +* * +* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * +* * +************************************************************************** +* * +* File: stack.c * +* comments: Stack Introspection * +* * +* Last rev: $Date: 2008-07-22 23:34:44 $,$Author: vsc $ * +* $Log: not supported by cvs2svn $ * +* Revision 1.230 2008/06/02 17:20:28 vsc * +* * +* * +*************************************************************************/ + +/** + * @file stack.c + * @author VITOR SANTOS COSTA + * @date Tue Sep 8 23:33:02 2015 + * + * @brief Get to know what is in your stack. + * + * + */ + +#include "Yap.h" +#include "clause.h" +#include "yapio.h" +#include "eval.h" +#include "tracer.h" +#ifdef YAPOR +#include "or.macros.h" +#endif /* YAPOR */ +#ifdef TABLING +#include "tab.macros.h" +#endif /* TABLING */ +#if HAVE_STRING_H +#include +#endif +#include + +static int static_in_use(PredEntry *, int); +#if !defined(YAPOR) && !defined(THREADS) +static Int search_for_static_predicate_in_use(PredEntry *, int); +static void mark_pred(int, PredEntry *); +static void do_toggle_static_predicates_in_use(int); +#endif +static Int in_use( USES_REGS1 ); +static Int toggle_static_predicates_in_use( USES_REGS1 ); +static Int PredForCode(yamop *, Atom *, arity_t *, Term *); + +static PredEntry * +PredForChoicePt(yamop *p_code, op_numbers *opn) { + while (TRUE) { + op_numbers opnum; + if (!p_code) + return NULL; + opnum = Yap_op_from_opcode(p_code->opc); + if (opn) + *opn = opnum; + switch(opnum) { + case _Nstop: + return NULL; + case _jump: + p_code = p_code->y_u.l.l; + break; + case _retry_me: + case _trust_me: + return p_code->y_u.Otapl.p; + case _retry_exo: + case _retry_all_exo: + return p_code->y_u.lp.p; + case _try_logical: + case _retry_logical: + case _trust_logical: + case _count_retry_logical: + case _count_trust_logical: + case _profiled_retry_logical: + case _profiled_trust_logical: + return p_code->y_u.OtaLl.d->ClPred; +#ifdef TABLING + case _trie_trust_var: + case _trie_retry_var: + case _trie_trust_var_in_pair: + case _trie_retry_var_in_pair: + case _trie_trust_val: + case _trie_retry_val: + case _trie_trust_val_in_pair: + case _trie_retry_val_in_pair: + case _trie_trust_atom: + case _trie_retry_atom: + case _trie_trust_atom_in_pair: + case _trie_retry_atom_in_pair: + case _trie_trust_null: + case _trie_retry_null: + case _trie_trust_null_in_pair: + case _trie_retry_null_in_pair: + case _trie_trust_pair: + case _trie_retry_pair: + case _trie_trust_appl: + case _trie_retry_appl: + case _trie_trust_appl_in_pair: + case _trie_retry_appl_in_pair: + case _trie_trust_extension: + case _trie_retry_extension: + case _trie_trust_double: + case _trie_retry_double: + case _trie_trust_longint: + case _trie_retry_longint: + case _trie_trust_gterm: + case _trie_retry_gterm: + return NULL; + case _table_load_answer: + case _table_try_answer: + case _table_answer_resolution: + case _table_completion: +#ifdef THREADS_CONSUMER_SHARING + case _table_answer_resolution_completion: +#endif /* THREADS_CONSUMER_SHARING */ + return NULL; /* ricroc: is this OK? */ + /* compile error --> return ENV_ToP(gc_B->cp_cp); */ +#endif /* TABLING */ + case _or_else: + if (p_code == p_code->y_u.Osblp.l) { + /* repeat */ + Atom at = AtomRepeatSpace; + return RepPredProp(PredPropByAtom(at, PROLOG_MODULE)); + } else { + return p_code->y_u.Osblp.p0; + } + break; + case _or_last: +#ifdef YAPOR + return p_code->y_u.Osblp.p0; +#else + return p_code->y_u.p.p; +#endif /* YAPOR */ + break; + case _count_retry_me: + case _retry_profiled: + case _retry2: + case _retry3: + case _retry4: + p_code = NEXTOP(p_code,l); + break; + default: + return p_code->y_u.Otapl.p; + } + } + return NULL; +} + +/** + * Yap_PredForChoicePt(): find out the predicate who generated a CP. + * + * @param cp the choice point + * @param op the YAAM instruction to process next + * + * @return A predixate structure or NULL + * + * usually pretty straightforward, it can fall in trouble with + 8 OR-P or tabling. + */ +PredEntry * +Yap_PredForChoicePt(choiceptr cp, op_numbers *op) { + if (cp == NULL) + return NULL; + return PredForChoicePt(cp->cp_ap, op); +} + +#if !defined(YAPOR) && !defined(THREADS) +static yamop *cur_clause(PredEntry *pe, yamop *codeptr) +{ + StaticClause *cl; + + cl = ClauseCodeToStaticClause(pe->cs.p_code.FirstClause); + do { + if (IN_BLOCK(codeptr,cl,cl->ClSize)) { + return cl->ClCode; + } + if (cl->ClCode == pe->cs.p_code.LastClause) + break; + cl = cl->ClNext; + } while (TRUE); + Yap_Error(SYSTEM_ERROR,TermNil,"could not find clause for indexing code"); + return(NULL); +} + +static yamop *cur_log_upd_clause(PredEntry *pe, yamop *codeptr) +{ + LogUpdClause *cl; + cl = ClauseCodeToLogUpdClause(pe->cs.p_code.FirstClause); + do { + if (IN_BLOCK(codeptr,cl->ClCode,cl->ClSize)) { + return((yamop *)cl->ClCode); + } + cl = cl->ClNext; + } while (cl != NULL); + Yap_Error(SYSTEM_ERROR,TermNil,"could not find clause for indexing code"); + return(NULL); +} + +static Int +search_for_static_predicate_in_use(PredEntry *p, int check_everything) +{ + choiceptr b_ptr = B; + CELL *env_ptr = ENV; + + if (check_everything && P) { + PredEntry *pe = EnvPreg(P); + if (p == pe) return TRUE; + pe = EnvPreg(CP); + if (p == pe) return TRUE; + } + do { + PredEntry *pe; + + /* check first environments that are younger than our latest choicepoint */ + if (check_everything && env_ptr) { + /* + I do not need to check environments for asserts, + only for retracts + */ + while (env_ptr && b_ptr > (choiceptr)env_ptr) { + yamop *cp = (yamop *)env_ptr[E_CP]; + PredEntry *pe; + + pe = EnvPreg(cp); + if (p == pe) return(TRUE); + if (env_ptr != NULL) + env_ptr = (CELL *)(env_ptr[E_E]); + } + } + /* now mark the choicepoint */ + + if (b_ptr) + pe = PredForChoicePt(b_ptr->cp_ap, NULL); + else + return FALSE; + if (pe == p) { + if (check_everything) + return TRUE; + PELOCK(38,p); + if (p->PredFlags & IndexedPredFlag) { + yamop *code_p = b_ptr->cp_ap; + yamop *code_beg = p->cs.p_code.TrueCodeOfPred; + + /* FIX ME */ + + if (p->PredFlags & LogUpdatePredFlag) { + LogUpdIndex *cl = ClauseCodeToLogUpdIndex(code_beg); + if (find_owner_log_index(cl, code_p)) + b_ptr->cp_ap = cur_log_upd_clause(pe, b_ptr->cp_ap->y_u.Otapl.d); + } else if (p->PredFlags & MegaClausePredFlag) { + StaticIndex *cl = ClauseCodeToStaticIndex(code_beg); + if (find_owner_static_index(cl, code_p)) + b_ptr->cp_ap = cur_clause(pe, b_ptr->cp_ap->y_u.Otapl.d); + } else { + /* static clause */ + StaticIndex *cl = ClauseCodeToStaticIndex(code_beg); + if (find_owner_static_index(cl, code_p)) { + b_ptr->cp_ap = cur_clause(pe, b_ptr->cp_ap->y_u.Otapl.d); + } + } + } + UNLOCKPE(63,pe); + } + env_ptr = b_ptr->cp_env; + b_ptr = b_ptr->cp_b; + } while (b_ptr != NULL); + return(FALSE); +} + +static void +mark_pred(int mark, PredEntry *pe) +{ + /* if the predicate is static mark it */ + if (pe->ModuleOfPred) { + PELOCK(39,p); + if (mark) { + pe->PredFlags |= InUsePredFlag; + } else { + pe->PredFlags &= ~InUsePredFlag; + } + UNLOCK(pe->PELock); + } +} + +/* go up the chain of choice_points and environments, + marking all static predicates that current execution is depending + upon */ +static void +do_toggle_static_predicates_in_use(int mask) +{ + choiceptr b_ptr = B; + CELL *env_ptr = ENV; + + if (b_ptr == NULL) + return; + + do { + PredEntry *pe; + + /* check first environments that are younger than our latest choicepoint */ + while (b_ptr > (choiceptr)env_ptr) { + PredEntry *pe = EnvPreg((yamop *)env_ptr[E_CP]); + + mark_pred(mask, pe); + env_ptr = (CELL *)(env_ptr[E_E]); + } + /* now mark the choicepoint */ + if ((b_ptr)) { + if ((pe = PredForChoicePt(b_ptr->cp_ap, NULL))) { + mark_pred(mask, pe); + } + } + env_ptr = b_ptr->cp_env; + b_ptr = b_ptr->cp_b; + } while (b_ptr != NULL); + /* mark or unmark all predicates */ + STATIC_PREDICATES_MARKED = mask; +} + +#endif /* !defined(YAPOR) && !defined(THREADS) */ + + } + if (p == NULL) { + return 0; + } + clause_was_found(p, pat, parity); + if (p->ModuleOfPred == PROLOG_MODULE) + *pmodule = TermProlog; + else + *pmodule = p->ModuleOfPred; + return -1; +} + +/* intruction blocks we found ourselves at */ +static PredEntry * +walk_got_lu_block(LogUpdIndex *cl, CODEADDR *startp, CODEADDR *endp) +{ + PredEntry *pp = cl->ClPred; + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + return pp; +} + +/* intruction blocks we found ourselves at */ +static PredEntry * +walk_got_lu_clause(LogUpdClause *cl, CODEADDR *startp, CODEADDR *endp) +{ + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + return cl->ClPred; +} + +/* we hit a meta-call, so we don't know what is happening */ +static PredEntry * +found_meta_call(CODEADDR *startp, CODEADDR *endp) +{ + PredEntry *pp = PredMetaCall; + *startp = (CODEADDR)&(pp->OpcodeOfPred); + *endp = (CODEADDR)NEXTOP((yamop *)&(pp->OpcodeOfPred),e); + return pp; +} + +/* intruction blocks we found ourselves at */ +static PredEntry * +walk_found_c_pred(PredEntry *pp, CODEADDR *startp, CODEADDR *endp) +{ + StaticClause *cl = ClauseCodeToStaticClause(pp->CodeOfPred); + *startp = (CODEADDR)&(cl->ClCode); + *endp = (CODEADDR)&(cl->ClCode)+cl->ClSize; + return pp; +} + +/* we hit a mega-clause, no point in going on */ +static PredEntry * +found_mega_clause(PredEntry *pp, CODEADDR *startp, CODEADDR *endp) +{ + MegaClause *mcl = ClauseCodeToMegaClause(pp->cs.p_code.FirstClause); + *startp = (CODEADDR)mcl; + *endp = (CODEADDR)mcl+mcl->ClSize; + return pp; +} + +/* we hit a mega-clause, no point in going on */ +static PredEntry * +found_idb_clause(yamop *pc, CODEADDR *startp, CODEADDR *endp) +{ + LogUpdClause *cl = ClauseCodeToLogUpdClause(pc); + + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + return cl->ClPred; +} + +/* we hit a expand_index, no point in going on */ +static PredEntry * +found_expand_index(yamop *pc, CODEADDR *startp, CODEADDR *endp, yamop *codeptr USES_REGS) +{ + PredEntry *pp = codeptr->y_u.sssllp.p; + if (pc == codeptr) { + *startp = (CODEADDR)codeptr; + *endp = (CODEADDR)NEXTOP(codeptr,sssllp); + } + return pp; +} + +/* we hit a expand_index, no point in going on */ +static PredEntry * +found_fail(yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS) +{ + PredEntry *pp = RepPredProp(Yap_GetPredPropByAtom(AtomFail,CurrentModule)); + *startp = *endp = (CODEADDR)FAILCODE; + return pp; +} + +/* we hit a expand_index, no point in going on */ +static PredEntry * +found_owner_op(yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS) +{ + PredEntry *pp = ((PredEntry *)(Unsigned(pc)-(CELL)(&(((PredEntry *)NULL)->OpcodeOfPred)))); + *startp = (CODEADDR)&(pp->OpcodeOfPred); + *endp = (CODEADDR)NEXTOP((yamop *)&(pp->OpcodeOfPred),e); + return pp; +} + +/* we hit a expand_index, no point in going on */ +static PredEntry * +found_expand(yamop *pc, CODEADDR *startp, CODEADDR *endp USES_REGS) +{ + PredEntry *pp = ((PredEntry *)(Unsigned(pc)-(CELL)(&(((PredEntry *)NULL)->cs.p_code.ExpandCode)))); + *startp = (CODEADDR)&(pp->cs.p_code.ExpandCode); + *endp = (CODEADDR)NEXTOP((yamop *)&(pp->cs.p_code.ExpandCode),e); + return pp; +} + +static PredEntry * +found_ystop(yamop *pc, int clause_code, CODEADDR *startp, CODEADDR *endp, PredEntry *pp USES_REGS) +{ + if (pc == YESCODE) { + pp = RepPredProp(Yap_GetPredPropByAtom(AtomTrue,CurrentModule)); + *startp = (CODEADDR)YESCODE; + *endp = (CODEADDR)YESCODE+(CELL)(NEXTOP((yamop *)NULL,e)); + return pp; + } + if (!pp) { + /* must be an index */ + PredEntry **pep = (PredEntry **)pc->y_u.l.l; + pp = pep[-1]; + } + if (pp->PredFlags & LogUpdatePredFlag) { + if (clause_code) { + LogUpdClause *cl = ClauseCodeToLogUpdClause(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } else { + LogUpdIndex *cl = ClauseCodeToLogUpdIndex(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } + } else if (pp->PredFlags & DynamicPredFlag) { + DynamicClause *cl = ClauseCodeToDynamicClause(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } else { + if (clause_code) { + StaticClause *cl = ClauseCodeToStaticClause(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } else { + StaticIndex *cl = ClauseCodeToStaticIndex(pc->y_u.l.l); + *startp = (CODEADDR)cl; + *endp = (CODEADDR)cl+cl->ClSize; + } + } + return pp; +} + +static PredEntry * +ClauseInfoForCode(yamop *codeptr, CODEADDR *startp, CODEADDR *endp USES_REGS) { + yamop *pc; + PredEntry *pp = NULL; + int clause_code = FALSE; + + if (codeptr >= COMMA_CODE && + codeptr < FAILCODE) { + pp = RepPredProp(Yap_GetPredPropByFunc(FunctorComma,CurrentModule)); + *startp = (CODEADDR)COMMA_CODE; + *endp = (CODEADDR)(FAILCODE-1); + return pp; + } + pc = codeptr; +#include "walkclause.h" + return NULL; +} + +PredEntry * +Yap_PredEntryForCode(yamop *codeptr, find_pred_type where_from, CODEADDR *startp, CODEADDR *endp) { + CACHE_REGS + if (where_from == FIND_PRED_FROM_CP) { + PredEntry *pp = PredForChoicePt(codeptr, NULL); + if (cl_code_in_pred(pp, codeptr, startp, endp)) { + return pp; + } + } else if (where_from == FIND_PRED_FROM_ENV) { + PredEntry *pp = EnvPreg(codeptr); + if (cl_code_in_pred(pp, codeptr, startp, endp)) { + return pp; + } + } else { + return ClauseInfoForCode(codeptr, startp, endp PASS_REGS); + } + return NULL; +} + +/** + * Detect whether the predicate describing the goal in A1, + * module A2 is currently live in the stack. + * + * @param USES_REGS1 + * + * @return liveness + */ +static Int +p_in_use( USES_REGS1 ) +{ /* '$in_use'(+P,+Mod) */ + PredEntry *pe; + Int out; + + pe = get_pred(Deref(ARG1), Deref(ARG2), "$in_use"); + if (EndOfPAEntr(pe)) + return FALSE; + PELOCK(25,pe); + out = static_in_use(pe,TRUE); + UNLOCKPE(42,pe); + return(out); +} + + +static Int +p_pred_for_code( USES_REGS1 ) { + yamop *codeptr; + Atom at; + arity_t arity; + Term tmodule = TermProlog; + Int cl; + Term t = Deref(ARG1); + + if (IsVarTerm(t)) { + return FALSE; + } else if (IsApplTerm(t) && FunctorOfTerm(t) == FunctorStaticClause) { + codeptr = Yap_ClauseFromTerm(t)->ClCode; + } else if (IsIntegerTerm(t)) { + codeptr = (yamop *)IntegerOfTerm(t); + } else if (IsDBRefTerm(t)) { + codeptr = (yamop *)DBRefOfTerm(t); + } else { + return FALSE; + } + cl = PredForCode(codeptr, &at, &arity, &tmodule); + if (!tmodule) tmodule = TermProlog; + if (cl == 0) { + return Yap_unify(ARG5,MkIntTerm(0)); + } else { + return(Yap_unify(ARG2,MkAtomTerm(at)) && + Yap_unify(ARG3,MkIntegerTerm(arity)) && + Yap_unify(ARG4,tmodule) && + Yap_unify(ARG5,MkIntegerTerm(cl))); + } +} + +#if LOW_PROF + +static void +add_code_in_lu_index(LogUpdIndex *cl, PredEntry *pp) +{ + char *code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_LU_INDEX); + cl = cl->ChildIndex; + while (cl != NULL) { + add_code_in_lu_index(cl, pp); + cl = cl->SiblingIndex; + } +} + +static void +add_code_in_static_index(StaticIndex *cl, PredEntry *pp) +{ + char *code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_STATIC_INDEX); + cl = cl->ChildIndex; + while (cl != NULL) { + add_code_in_static_index(cl, pp); + cl = cl->SiblingIndex; + } +} + + +static void +add_code_in_pred(PredEntry *pp) { + yamop *clcode; + + PELOCK(49,pp); + /* check if the codeptr comes from the indexing code */ + + /* highly likely this is used for indexing */ + Yap_inform_profiler_of_clause(&(pp->OpcodeOfPred), &(pp->OpcodeOfPred)+1, pp, GPROF_INIT_OPCODE); + if (pp->PredFlags & (CPredFlag|AsmPredFlag)) { + char *code_end; + StaticClause *cl; + + clcode = pp->CodeOfPred; + cl = ClauseCodeToStaticClause(clcode); + code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_SYSTEM_CODE); + UNLOCK(pp->PELock); + return; + } + Yap_inform_profiler_of_clause(&(pp->cs.p_code.ExpandCode), &(pp->cs.p_code.ExpandCode)+1, pp, GPROF_INIT_EXPAND); + clcode = pp->cs.p_code.TrueCodeOfPred; + if (pp->PredFlags & IndexedPredFlag) { + if (pp->PredFlags & LogUpdatePredFlag) { + LogUpdIndex *cl = ClauseCodeToLogUpdIndex(clcode); + add_code_in_lu_index(cl, pp); + } else { + StaticIndex *cl = ClauseCodeToStaticIndex(clcode); + add_code_in_static_index(cl, pp); + } + } + clcode = pp->cs.p_code.FirstClause; + if (clcode != NULL) { + if (pp->PredFlags & LogUpdatePredFlag) { + LogUpdClause *cl = ClauseCodeToLogUpdClause(clcode); + do { + char *code_end; + + code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_LOG_UPD_CLAUSE); + cl = cl->ClNext; + } while (cl != NULL); + } else if (pp->PredFlags & DynamicPredFlag) { + do { + DynamicClause *cl; + CODEADDR code_end; + + cl = ClauseCodeToDynamicClause(clcode); + code_end = (CODEADDR)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp, GPROF_INIT_DYNAMIC_CLAUSE); + if (clcode == pp->cs.p_code.LastClause) + break; + clcode = NextDynamicClause(clcode); + } while (TRUE); + } else { + StaticClause *cl = ClauseCodeToStaticClause(clcode); + do { + char *code_end; + + code_end = (char *)cl + cl->ClSize; + Yap_inform_profiler_of_clause(cl, code_end, pp,GPROF_INIT_STATIC_CLAUSE); + if (cl->ClCode == pp->cs.p_code.LastClause) + break; + cl = cl->ClNext; + } while (TRUE); + } + } + UNLOCK(pp->PELock); +} + + +void +Yap_dump_code_area_for_profiler(void) { + ModEntry *me = CurrentModules; + + while (me) { + PredEntry *pp = me->PredForME; + + while (pp != NULL) { + /* if (pp->ArityOfPE) { + fprintf(stderr,"%s/%d %p\n", + RepAtom(NameOfFunctor(pp->FunctorOfPred))->StrOfAE, + pp->ArityOfPE, + pp); + } else { + fprintf(stderr,"%s %p\n", + RepAtom((Atom)(pp->FunctorOfPred))->StrOfAE, + pp); + }*/ + add_code_in_pred(pp); + pp = pp->NextPredOfModule; + } + me = me->NextME; + } + Yap_inform_profiler_of_clause(COMMA_CODE, FAILCODE, RepPredProp(Yap_GetPredPropByFunc(FunctorComma,0)), GPROF_INIT_COMMA); + Yap_inform_profiler_of_clause(FAILCODE, FAILCODE+1, RepPredProp(Yap_GetPredPropByAtom(AtomFail,0)), GPROF_INIT_FAIL); +} + +#endif /* LOW_PROF */ + +static UInt +tree_index_ssz(StaticIndex *x) +{ + UInt sz = x->ClSize; + x = x->ChildIndex; + while (x != NULL) { + sz += tree_index_ssz(x); + x = x->SiblingIndex; + } + return sz; +} + +static UInt +index_ssz(StaticIndex *x, PredEntry *pe) +{ + UInt sz = 0; + yamop *ep = ExpandClausesFirst; + if (pe->PredFlags & MegaClausePredFlag) { + MegaClause *mcl = ClauseCodeToMegaClause(pe->cs.p_code.FirstClause); + if (mcl->ClFlags & ExoMask) { + struct index_t *i = ((struct index_t **)(pe->cs.p_code.FirstClause))[0]; + sz = 0; + + while (i) { + sz = i->size+sz; + i = i->next; + } + return sz; + } + } + /* expand clause blocks */ + while (ep) { + if (ep->y_u.sssllp.p == pe) + sz += (UInt)NEXTOP((yamop *)NULL,sssllp)+ep->y_u.sssllp.s1*sizeof(yamop *); + ep = ep->y_u.sssllp.snext; + } + /* main indexing tree */ + sz += tree_index_ssz(x); + return sz; +} + +static Int +static_statistics(PredEntry *pe) +{ + CACHE_REGS + UInt sz = sizeof(PredEntry), cls = 0, isz = 0; + StaticClause *cl = ClauseCodeToStaticClause(pe->cs.p_code.FirstClause); + + if (pe->cs.p_code.NOfClauses > 1 && + pe->cs.p_code.TrueCodeOfPred != pe->cs.p_code.FirstClause) { + isz = index_ssz(ClauseCodeToStaticIndex(pe->cs.p_code.TrueCodeOfPred), pe); + } + if (pe->PredFlags & MegaClausePredFlag) { + MegaClause *mcl = ClauseCodeToMegaClause(pe->cs.p_code.FirstClause); + return Yap_unify(ARG3, MkIntegerTerm(mcl->ClSize/mcl->ClItemSize)) && + Yap_unify(ARG4, MkIntegerTerm(mcl->ClSize)) && + Yap_unify(ARG5, MkIntegerTerm(isz)); + } + if (pe->cs.p_code.NOfClauses) { + do { + cls++; + sz += cl->ClSize; + if (cl->ClCode == pe->cs.p_code.LastClause) + break; + cl = cl->ClNext; + } while (TRUE); + } + return Yap_unify(ARG3, MkIntegerTerm(cls)) && + Yap_unify(ARG4, MkIntegerTerm(sz)) && + Yap_unify(ARG5, MkIntegerTerm(isz)); +} + +static Int +p_static_pred_statistics( USES_REGS1 ) +{ + Int out; + PredEntry *pe; + + pe = get_pred( Deref(ARG1), Deref(ARG2), "predicate_statistics"); + if (pe == NIL) + return (FALSE); + PELOCK(50,pe); + if (pe->PredFlags & (DynamicPredFlag|LogUpdatePredFlag|UserCPredFlag|AsmPredFlag|CPredFlag|BinaryPredFlag)) { + /* should use '$recordedp' in this case */ + UNLOCK(pe->PELock); + return FALSE; + } + out = static_statistics(pe); + UNLOCK(pe->PELock); + return out; +} + +static Int +p_predicate_erased_statistics( USES_REGS1 ) +{ + UInt sz = 0, cls = 0; + UInt isz = 0, icls = 0; + PredEntry *pe; + LogUpdClause *cl = DBErasedList; + LogUpdIndex *icl = DBErasedIList; + Term tpred = ArgOfTerm(2,Deref(ARG1)); + Term tmod = ArgOfTerm(1,Deref(ARG1)); + + if (EndOfPAEntr(pe=get_pred(tpred, tmod, "predicate_erased_statistics"))) + return FALSE; + while (cl) { + if (cl->ClPred == pe) { + cls++; + sz += cl->ClSize; + } + cl = cl->ClNext; + } + while (icl) { + if (pe == icl->ClPred) { + icls++; + isz += icl->ClSize; + } + icl = icl->SiblingIndex; + } + return + Yap_unify(ARG2,MkIntegerTerm(cls)) && + Yap_unify(ARG3,MkIntegerTerm(sz)) && + Yap_unify(ARG4,MkIntegerTerm(icls)) && + Yap_unify(ARG5,MkIntegerTerm(isz)); +} + +#ifdef DEBUG +static Int +p_predicate_lu_cps( USES_REGS1 ) +{ + return Yap_unify(ARG1, MkIntegerTerm(Yap_LiveCps)) && + Yap_unify(ARG2, MkIntegerTerm(Yap_FreedCps)) && + Yap_unify(ARG3, MkIntegerTerm(Yap_DirtyCps)) && + Yap_unify(ARG4, MkIntegerTerm(Yap_NewCps)); +} +#endif + +static Int +p_program_continuation( USES_REGS1 ) +{ + PredEntry *pe = EnvPreg((yamop *)((ENV_Parent(ENV))[E_CP])); + if (pe->ModuleOfPred) { + if (!Yap_unify(ARG1,pe->ModuleOfPred)) + return FALSE; + } else { + if (!Yap_unify(ARG1,TermProlog)) + return FALSE; + } + if (pe->ArityOfPE) { + if (!Yap_unify(ARG2,MkAtomTerm(NameOfFunctor(pe->FunctorOfPred)))) + return FALSE; + if (!Yap_unify(ARG3,MkIntegerTerm(ArityOfFunctor(pe->FunctorOfPred)))) + return FALSE; + } else { + if (!Yap_unify(ARG2,MkAtomTerm((Atom)pe->FunctorOfPred))) + return FALSE; + if (!Yap_unify(ARG3,MkIntTerm(0))) + return FALSE; + } + return TRUE; +} + +static Term +BuildActivePred(PredEntry *ap, CELL *vect) +{ + CACHE_REGS + arity_t i; + + if (!ap->ArityOfPE) { + return MkVarTerm(); + } + for (i = 0; i < ap->ArityOfPE; i++) { + Term t = Deref(vect[i]); + if (IsVarTerm(t)) { + CELL *pt = VarOfTerm(t); + /* one stack */ + if (pt > HR) { + Term nt = MkVarTerm(); + Yap_unify(t, nt); + } + } + } + return Yap_MkApplTerm(ap->FunctorOfPred, ap->ArityOfPE, vect); +} + +static int +UnifyPredInfo(PredEntry *pe, int start_arg USES_REGS) { + arity_t arity = pe->ArityOfPE; + Term tmod, tname; + + if (pe->ModuleOfPred != IDB_MODULE) { + if (pe->ModuleOfPred == PROLOG_MODULE) { + tmod = TermProlog; + } else { + tmod = pe->ModuleOfPred; + } + if (pe->ArityOfPE == 0) { + tname = MkAtomTerm((Atom)pe->FunctorOfPred); + } else { + Functor f = pe->FunctorOfPred; + tname = MkAtomTerm(NameOfFunctor(f)); + } + } else { + tmod = pe->ModuleOfPred; + if (pe->PredFlags & NumberDBPredFlag) { + tname = MkIntegerTerm(pe->src.IndxId); + } else if (pe->PredFlags & AtomDBPredFlag) { + tname = MkAtomTerm((Atom)pe->FunctorOfPred); + } else { + Functor f = pe->FunctorOfPred; + tname = MkAtomTerm(NameOfFunctor(f)); + } + } + + return Yap_unify(XREGS[start_arg], tmod) && + Yap_unify(XREGS[start_arg+1],tname) && + Yap_unify(XREGS[start_arg+2],MkIntegerTerm(arity)); +} + + +static Int +ClauseId(yamop *ipc, PredEntry *pe) +{ + if (!ipc) + return 0; + return find_code_in_clause(pe, ipc, NULL, NULL); +} + +static Int +p_env_info( USES_REGS1 ) +{ + CELL *env = LCL0-IntegerOfTerm(Deref(ARG1)); + yamop *env_cp; + Term env_b, taddr; + + if (!env) + return FALSE; + env_b = MkIntegerTerm((Int)(LCL0-(CELL *)env[E_CB])); + env_cp = (yamop *)env[E_CP]; + + /* pe = PREVOP(env_cp,Osbpp)->y_u.Osbpp.p0; */ + taddr = MkIntegerTerm((Int)env); + return Yap_unify(ARG3,MkIntegerTerm((Int)env_cp)) && + Yap_unify(ARG2, taddr) && + Yap_unify(ARG4, env_b); +} + +static Int +p_cpc_info( USES_REGS1 ) +{ + PredEntry *pe; + yamop *ipc = (yamop *)IntegerOfTerm(Deref(ARG1)); + + pe = PREVOP(ipc,Osbpp)->y_u.Osbpp.p0; + return UnifyPredInfo(pe, 2 PASS_REGS) && + Yap_unify(ARG5,MkIntegerTerm(ClauseId(ipc,pe))); +} + +static Int +p_choicepoint_info( USES_REGS1 ) +{ + choiceptr cptr = (choiceptr)(LCL0-IntegerOfTerm(Deref(ARG1))); + PredEntry *pe = NULL; + int go_on = TRUE; + yamop *ipc = cptr->cp_ap; + yamop *ncl = NULL; + Term t = TermNil, taddr; + + taddr = MkIntegerTerm((Int)cptr); + while (go_on) { + op_numbers opnum = Yap_op_from_opcode(ipc->opc); + go_on = FALSE; + switch (opnum) { +#ifdef TABLING + case _table_load_answer: +#ifdef LOW_LEVEL_TRACER + pe = LOAD_CP(cptr)->cp_pred_entry; +#else + pe = UndefCode; +#endif + t = MkVarTerm(); + break; + case _table_try_answer: + case _table_retry_me: + case _table_trust_me: + case _table_retry: + case _table_trust: + case _table_completion: +#ifdef THREADS_CONSUMER_SHARING + case _table_answer_resolution_completion: +#endif /* THREADS_CONSUMER_SHARING */ +#ifdef LOW_LEVEL_TRACER +#ifdef DETERMINISTIC_TABLING + if (IS_DET_GEN_CP(cptr)) { + pe = DET_GEN_CP(cptr)->cp_pred_entry; + t = MkVarTerm(); + } else +#endif /* DETERMINISTIC_TABLING */ + { + pe = GEN_CP(cptr)->cp_pred_entry; + t = BuildActivePred(pe, (CELL *)(GEN_CP(B) + 1)); + } +#else + pe = UndefCode; + t = MkVarTerm(); +#endif + break; + case _table_answer_resolution: +#ifdef LOW_LEVEL_TRACER + pe = CONS_CP(cptr)->cp_pred_entry; +#else + pe = UndefCode; +#endif + t = MkVarTerm(); + break; + case _trie_trust_var: + case _trie_retry_var: + case _trie_trust_var_in_pair: + case _trie_retry_var_in_pair: + case _trie_trust_val: + case _trie_retry_val: + case _trie_trust_val_in_pair: + case _trie_retry_val_in_pair: + case _trie_trust_atom: + case _trie_retry_atom: + case _trie_trust_atom_in_pair: + case _trie_retry_atom_in_pair: + case _trie_trust_null: + case _trie_retry_null: + case _trie_trust_null_in_pair: + case _trie_retry_null_in_pair: + case _trie_trust_pair: + case _trie_retry_pair: + case _trie_trust_appl: + case _trie_retry_appl: + case _trie_trust_appl_in_pair: + case _trie_retry_appl_in_pair: + case _trie_trust_extension: + case _trie_retry_extension: + case _trie_trust_double: + case _trie_retry_double: + case _trie_trust_longint: + case _trie_retry_longint: + case _trie_trust_gterm: + case _trie_retry_gterm: + pe = UndefCode; + t = MkVarTerm(); + break; +#endif /* TABLING */ + case _try_logical: + case _retry_logical: + case _trust_logical: + case _count_retry_logical: + case _count_trust_logical: + case _profiled_retry_logical: + case _profiled_trust_logical: + ncl = ipc->y_u.OtaLl.d->ClCode; + pe = ipc->y_u.OtaLl.d->ClPred; + t = BuildActivePred(pe, cptr->cp_args); + break; + case _or_else: + pe = ipc->y_u.Osblp.p0; + ncl = ipc; + t = Yap_MkNewApplTerm(FunctorOr, 2); + break; + + case _or_last: +#ifdef YAPOR + pe = ipc->y_u.Osblp.p0; +#else + pe = ipc->y_u.p.p; +#endif + ncl = ipc; + t = Yap_MkNewApplTerm(FunctorOr, 2); + break; + case _retry2: + case _retry3: + case _retry4: + pe = NULL; + t = TermNil; + ipc = NEXTOP(ipc,l); + if (!ncl) + ncl = ipc->y_u.Otapl.d; + go_on = TRUE; + break; + case _jump: + pe = NULL; + t = TermNil; + ipc = ipc->y_u.l.l; + go_on = TRUE; + break; + case _retry_c: + case _retry_userc: + ncl = NEXTOP(ipc,OtapFs); + pe = ipc->y_u.OtapFs.p; + t = BuildActivePred(pe, cptr->cp_args); + break; + case _retry_profiled: + case _count_retry: + pe = NULL; + t = TermNil; + ncl = ipc->y_u.Otapl.d; + ipc = NEXTOP(ipc,p); + go_on = TRUE; + break; + case _retry_me: + case _trust_me: + case _count_retry_me: + case _count_trust_me: + case _profiled_retry_me: + case _profiled_trust_me: + case _retry_and_mark: + case _profiled_retry_and_mark: + case _retry: + case _trust: + if (!ncl) + ncl = ipc->y_u.Otapl.d; + pe = ipc->y_u.Otapl.p; + t = BuildActivePred(pe, cptr->cp_args); + break; + case _retry_exo: + case _retry_all_exo: + ncl = NULL; + pe = ipc->y_u.lp.p; + t = BuildActivePred(pe, cptr->cp_args); + break; + case _Nstop: + { + Atom at = AtomLive; + t = MkAtomTerm(at); + pe = RepPredProp(PredPropByAtom(at, CurrentModule)); + } + break; + case _Ystop: + default: + return FALSE; + } + } + return UnifyPredInfo(pe, 3 PASS_REGS) && + Yap_unify(ARG2, taddr) && + Yap_unify(ARG6,t) && + Yap_unify(ARG7,MkIntegerTerm(ClauseId(ncl,pe))); +} + +void +Yap_InitCdMgr(void) +{ + CACHE_REGS + Term cm = CurrentModule; + + Yap_InitCPred("in_use", 2, in_use, HiddenPredFlag|TestPredFlag | SafePredFlag|SyncPredFlag); + Yap_InitCPred("toggle_static_predicates_in_use", 0, p_toggle_static_predicates_in_use, HiddenPredFlag|SafePredFlag|SyncPredFlag); + +} diff --git a/C/stdpreds.c b/C/stdpreds.c index 3d1e52445..3f60fafd2 100755 --- a/C/stdpreds.c +++ b/C/stdpreds.c @@ -538,7 +538,7 @@ static Int p_opdec(USES_REGS1) { /* '$opdec'(p,type,atom) */ if (tmod == TermProlog) { tmod = PROLOG_MODULE; } - return Yap_OpDec((int)IntOfTerm(p), RepAtom(AtomOfTerm(t))->StrOfAE, + return Yap_OpDec((int)IntOfTerm(p), (char *)RepAtom(AtomOfTerm(t))->StrOfAE, AtomOfTerm(at), tmod); } @@ -1501,7 +1501,7 @@ static Int p_statistics_atom_info(USES_REGS1) { while (catom != NIL) { Atom ncatom; count++; - spaceused += sizeof(AtomEntry) + strlen(RepAtom(catom)->StrOfAE) + 1; + spaceused += sizeof(AtomEntry) + strlen((char *)RepAtom(catom)->StrOfAE) + 1; ncatom = RepAtom(catom)->NextOfAE; if (ncatom != NIL) { READ_LOCK(RepAtom(ncatom)->ARWLock); @@ -1795,6 +1795,7 @@ void Yap_InitCPreds(void) { Yap_InitUnify(); Yap_InitQLY(); Yap_InitQLYR(); + Yap_InitStInfo(); Yap_udi_init(); Yap_udi_Interval_init(); Yap_InitSignalCPreds(); diff --git a/C/text.c b/C/text.c index efa83c5fc..39f53c042 100644 --- a/C/text.c +++ b/C/text.c @@ -226,8 +226,8 @@ SkipListCodes(Term *l, Term **tailp, Int *atoms, bool *wide) AtomEntry *ae = RepAtom(AtomOfTerm(hd)); if ((ae->StrOfAE)[1] != '\0') { length = -REPRESENTATION_ERROR_CHARACTER_CODE; } } - } else if (IsIntTerm(hd)) { - Int ch = IntOfTerm(hd); + } else if (IsIntegerTerm(hd)) { + Int ch = IntegerOfTerm(hd); if (/* *atoms|| */ch < 0) { *tailp = l; /*if (*atoms) length = -TYPE_ERROR_STRING;*/ length = -DOMAIN_ERROR_NOT_LESS_THAN_ZERO; } else if (ch > 0x80) { *wide = TRUE; } } else { @@ -287,7 +287,7 @@ Yap_ListOfAtomsToBuffer(void *buf, Term t, seq_tv_t *inp, bool *widep, size_t *l } else { char *s; if (buf) s = buf; - else s = ((AtomEntry *)Yap_PreAllocCodeSpace())->StrOfAE; + else s = (char *)((AtomEntry *)Yap_PreAllocCodeSpace())->StrOfAE; AUX_ERROR( t, 2*(n+1), s, char); s = get_string_from_list( t, inp, s, atoms PASS_REGS); return s; @@ -327,15 +327,16 @@ Yap_ListOfCodesToBuffer(void *buf, Term t, seq_tv_t *inp, bool *widep, size_t *l s = get_wide_from_list( t, inp, s, atoms PASS_REGS); return s; } else { - char *s; + char *s; if (buf) s = buf; else s = ((AtomEntry *)Yap_PreAllocCodeSpace())->StrOfAE; - AUX_ERROR( t, 2*(n+1), s, char); - s = get_string_from_list( t, inp, s, atoms PASS_REGS); + AUX_ERROR( t, 2*(n+1), (char *)s, char); + s = ( char *)get_string_from_list( t, inp, (char *)s, atoms PASS_REGS); return s; } } +#if USE_GEN_TYPE_ERROR static yap_error_number gen_type_error(int flags) { if ((flags & (YAP_STRING_STRING|YAP_STRING_ATOM|YAP_STRING_INT|YAP_STRING_FLOAT|YAP_STRING_ATOMS_CODES|YAP_STRING_BIG)) == @@ -355,6 +356,7 @@ gen_type_error(int flags) { return TYPE_ERROR_LIST; return TYPE_ERROR_NUMBER; } +#endif void * Yap_readText( void *buf, seq_tv_t *inp, encoding_t *enc, int *minimal, size_t *lengp USES_REGS) @@ -365,7 +367,7 @@ Yap_readText( void *buf, seq_tv_t *inp, encoding_t *enc, int *minimal, size_t *l /* we know what the term is */ if (inp->type & YAP_STRING_STRING && !IsVarTerm(inp->val.t) && IsStringTerm(inp->val.t)) { const char *s; - s = StringOfTerm( inp->val.t ); + s = (char *)StringOfTerm( inp->val.t ); if ( s == NULL ) { return 0L; } @@ -386,7 +388,7 @@ Yap_readText( void *buf, seq_tv_t *inp, encoding_t *enc, int *minimal, size_t *l *enc = ENC_WCHAR; return ws; } else { - s = at->StrOfAE; + s = (char *)at->StrOfAE; *lengp = strlen(s); *enc = ENC_ISO_LATIN1; return s; @@ -395,7 +397,6 @@ Yap_readText( void *buf, seq_tv_t *inp, encoding_t *enc, int *minimal, size_t *l if (inp->type & YAP_STRING_CODES && !IsVarTerm(inp->val.t) && (s = Yap_ListOfCodesToBuffer( buf, inp->val.t, inp, &wide, lengp PASS_REGS))) { // this is a term, extract to a sfer, and representation is wide *minimal = TRUE; - int wide = FALSE; *enc = ( wide ? ENC_WCHAR : ENC_ISO_LATIN1 ); return s; } @@ -404,7 +405,7 @@ Yap_readText( void *buf, seq_tv_t *inp, encoding_t *enc, int *minimal, size_t *l *minimal = TRUE; s = Yap_ListOfAtomsToBuffer( buf, inp->val.t, inp, &wide, lengp PASS_REGS); if (!s) return NULL; - if (wide) { *enc = ENC_WCHAR; } + if (wide) { *enc = ENC_ISO_UTF8; } else { *enc = ENC_ISO_LATIN1; } return s; } @@ -452,7 +453,7 @@ Yap_readText( void *buf, seq_tv_t *inp, encoding_t *enc, int *minimal, size_t *l return s; } if (inp->type & YAP_STRING_CHARS) { - *enc = ENC_ISO_LATIN1; + *enc = inp->enc; if (inp->type & YAP_STRING_NCHARS) *lengp = inp->sz; else @@ -481,21 +482,21 @@ write_strings( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng switch (enc) { case ENC_ISO_UTF8: - { char *s = s0, *lim = s + (max = strnlen(s, max)); + { unsigned char *s = s0, *lim = s + (max = strlen_utf8(s)); Term t = init_tstring( PASS_REGS1 ); - char *cp = s, *buf; + unsigned char *cp = s, *buf; LOCAL_TERM_ERROR( 2*(lim-s) ); buf = buf_from_tstring(HR); while (*cp && cp < lim) { - int chr; - cp = utf8_get_char(cp, &chr); - buf = utf8_put_char(buf, chr); + utf8proc_int32_t chr; + cp += get_utf8(cp, &chr); + buf += put_utf8(buf, chr); } if (max >= min) *buf++ = '\0'; else while (max < min) { max++; - buf = utf8_put_char(buf, '\0'); + buf += put_utf8(buf, '\0'); } close_tstring( buf PASS_REGS ); @@ -503,44 +504,44 @@ write_strings( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng } break; case ENC_ISO_LATIN1: - { unsigned char *s = s0, *lim = s + (max = strnlen(s0, max)); + { unsigned char *s = s0, *lim = s + (max = strlen_latin_utf8(s0)); Term t = init_tstring( PASS_REGS1 ); unsigned char *cp = s; - char *buf; + unsigned char *buf; + utf8proc_int32_t chr; LOCAL_TERM_ERROR( 2*(lim-s) ); buf = buf_from_tstring(HR); while (cp < lim) { - int chr; cp = get_char(cp, &chr); - buf = utf8_put_char(buf, chr); + buf += put_utf8(buf, chr); } if (max >= min) *buf++ = '\0'; else while (max < min) { max++; - buf = utf8_put_char(buf, '\0'); + buf += put_utf8(buf, chr); } close_tstring( buf PASS_REGS ); out->val.t = t; } break; case ENC_WCHAR: - { wchar_t *s = s0, *lim = s + (max = wcsnlen(s, max)); + { wchar_t *s = s0, *lim = s + (max = strlen_ucs2_utf8(s0)); Term t = init_tstring( PASS_REGS1 ); wchar_t *wp = s; - char *buf; + unsigned char *buf; LOCAL_TERM_ERROR( 2*(lim-s) ); buf = buf_from_tstring(HR); while (wp < lim) { - int chr; + utf8proc_int32_t chr; wp = get_wchar(wp, &chr); - buf = utf8_put_char(buf, chr); + buf += put_utf8(buf, chr); } if (max >= min) *buf++ = '\0'; else while (max < min) { max++; - buf = utf8_put_char(buf, '\0'); + buf += put_utf8(buf, '\0'); } close_tstring( buf PASS_REGS ); out->val.t = t; @@ -569,15 +570,15 @@ write_atoms( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng U switch (enc) { case ENC_ISO_UTF8: - { char *s = s0, *lim = s + strnlen(s, max); - char *cp = s; + { unsigned char *s = s0, *lim = s + strnlen((char*)s, max); + unsigned char *cp = s; wchar_t w[2]; w[1] = '\0'; LOCAL_TERM_ERROR( 2*(lim-s) ); while (cp < lim && *cp) { - int chr; + utf8proc_int32_t chr; CELL *cl; - cp = utf8_get_char(cp, &chr); + cp += get_utf8(cp, &chr); if (chr == '\0') break; w[0] = chr; cl = HR; @@ -597,7 +598,7 @@ write_atoms( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng U LOCAL_TERM_ERROR( 2*(lim-s) ); while (cp < lim) { - int chr; + utf8proc_int32_t chr; cp = get_char(cp, &chr); if (chr == '\0') break; w[0] = chr; @@ -617,7 +618,7 @@ write_atoms( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng U LOCAL_TERM_ERROR( 2*(lim-s) ); while (*cp && cp < lim) { - int chr; + utf8proc_int32_t chr; cp = get_wchar(cp, &chr); if (chr == '\0') break; w[0] = chr; @@ -657,12 +658,12 @@ write_codes( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng U switch (enc) { case ENC_ISO_UTF8: - { char *s = s0, *lim = s + strnlen(s, max); - char *cp = s; + { unsigned char *s = s0, *lim = s + strnlen(s0, max); + unsigned char *cp = s; LOCAL_TERM_ERROR( 2*(lim-s) ); while (*cp && cp < lim) { - int chr; - cp = utf8_get_char(cp, &chr); + utf8proc_int32_t chr; + cp += get_utf8(cp, &chr); HR[0] = MkIntTerm(chr); HR[1] = AbsPair(HR+2); HR += 2; @@ -677,7 +678,7 @@ write_codes( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng U LOCAL_TERM_ERROR( 2*(lim-s) ); while (cp < lim) { - int chr; + utf8proc_int32_t chr; cp = get_char(cp, &chr); HR[0] = MkIntTerm(chr); HR[1] = AbsPair(HR+2); @@ -693,7 +694,7 @@ write_codes( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng U LOCAL_TERM_ERROR( 2*(lim-s) ); while (cp < lim) { - int chr; + utf8proc_int32_t chr; cp = get_wchar(cp, &chr); HR[0] = MkIntTerm(chr); HR[1] = AbsPair(HR+2); @@ -734,13 +735,13 @@ write_atom( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng US switch (enc) { case ENC_ISO_UTF8: - { char *s = s0, *lim = s + strnlen(s, max); + { unsigned char *s = s0, *lim = s + strnlen(s0, max); wchar_t *buf = malloc(sizeof(wchar_t)*((lim+1)-s)), *ptr = buf; Atom at; while (*s && s < lim) { - int chr; - s = utf8_get_char(s, &chr); + utf8proc_int32_t chr; + s += get_utf8(s, &chr); *ptr++ = chr; } *ptr++ = '\0'; @@ -784,9 +785,9 @@ write_wbuffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng } if (out->enc != enc || out->type & (YAP_STRING_WITH_BUFFER|YAP_STRING_MALLOC)) { if (enc != ENC_WCHAR) { - sz = strlen((char *)s0); + sz = strlen((char *)s0)+1; } else { - sz = wcslen((wchar_t *)s0); + sz = wcslen((wchar_t *)s0)+1; } if (sz < min) sz = min; sz *= sizeof(wchar_t); @@ -807,7 +808,7 @@ write_wbuffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng case ENC_WCHAR: if (out->type & (YAP_STRING_WITH_BUFFER|YAP_STRING_MALLOC) ) { wchar_t *s = s0; - size_t n = wcslen( s ); + size_t n = wcslen( s )+1; if (n < min) n = min; memcpy( out->val.c, s0, n*sizeof(wchar_t)); out->val.w[n] = '\0'; @@ -815,23 +816,23 @@ write_wbuffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng } case ENC_ISO_UTF8: { - char *s = s0, *lim = s + (max = strnlen(s, max)); - char *cp = s; + unsigned char *s = s0, *lim = s + (max = strnlen(s0, max)); + unsigned char *cp = s; wchar_t *buf0, *buf; buf = buf0 = out->val.w; if (!buf) return -1; while (*cp && cp < lim) { - int chr; - cp = utf8_get_char(cp, &chr); + utf8proc_int32_t chr; + cp += get_utf8(cp, &chr); *buf++ = chr; } if (max >= min) *buf++ = '\0'; else while (max < min) { - int chr; + utf8proc_int32_t chr; max++; - cp = utf8_get_char(cp, &chr); + cp += get_utf8(cp, &chr); *buf++ = chr; } *buf = '\0'; @@ -850,8 +851,8 @@ write_wbuffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng } break; default: - sz_end = -1; - Yap_Error(SYSTEM_ERROR, TermNil, "Unsupported Encoding ~s in %s", enc_name(enc), __FUNCTION__); + sz_end = -1; + Yap_Error(SYSTEM_ERROR, TermNil, "Unsupported Encoding ~s in %s", enc_name(enc), __FUNCTION__); } } sz_end *= sizeof( wchar_t ); @@ -874,9 +875,9 @@ write_buffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng if (out->enc != enc || out->type & (YAP_STRING_WITH_BUFFER|YAP_STRING_MALLOC)) { size_t sz; if (enc != ENC_WCHAR) - sz = strlen((char *)s0); + sz = strlen((char *)s0)+1; else - sz = wcslen((wchar_t *)s0); + sz = wcslen((wchar_t *)s0)+1; if (sz < min) sz = min; if (!minimal) sz *= 4; if (out->type & (YAP_STRING_MALLOC)) { @@ -894,7 +895,7 @@ write_buffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng case ENC_ISO_UTF8: if (out->type & (YAP_STRING_WITH_BUFFER|YAP_STRING_MALLOC) ) { char *s = s0; - size_t n = strlen( s ); + size_t n = strlen( s )+1; memcpy( out->val.c, s0, n*sizeof(wchar_t)); out->val.c[n] = '\0'; sz_end = n+1; @@ -904,23 +905,24 @@ write_buffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng break; case ENC_ISO_LATIN1: { - char *s = s0, *lim = s + (max = strnlen(s, max)); - char *cp = s, *buf0, *buf; + unsigned char *s = s0, *lim = s + (max = strnlen(s0, max)); + unsigned char *cp = s, *buf0, *buf; + - buf = buf0 = out->val.c; + buf = buf0 = out->val.uc; if (!buf) return -1; while (*cp && cp < lim) { - int chr; + utf8proc_int32_t chr; chr = *cp++; - buf = utf8_put_char(buf, chr); + buf += put_utf8(buf, chr); } if (max >= min) *buf++ = '\0'; else while (max < min) { max++; - int chr; + utf8proc_int32_t chr; chr = *cp++; - buf = utf8_put_char(buf, chr); + buf += put_utf8(buf, chr); } buf[0] = '\0'; sz_end = (buf+1)-buf0; @@ -929,15 +931,15 @@ write_buffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng case ENC_WCHAR: { wchar_t *s = s0; - char *buf = out->val.c; + unsigned char *buf = out->val.uc; size_t n = wcslen( s ), i; if (n < min) n = min; for (i = 0; i < n; i++) { - int chr = s[i]; - buf = utf8_put_char(buf, chr); + utf8proc_int32_t chr = s[i]; + buf += put_utf8(buf, chr); } *buf++ = '\0'; - sz_end = (buf+1)-out->val.c; + sz_end = (buf+1)-out->val.uc; } break; default: @@ -962,26 +964,26 @@ write_buffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng break; case ENC_ISO_UTF8: { - char *s = s0, *lim = s + (max = strnlen(s, max)); - char *cp = s; - char *buf0, *buf; + unsigned char *s = s0, *lim = s + (max = strnlen(s0, max)); + unsigned char *cp = s; + unsigned char *buf0, *buf; - buf = buf0 = out->val.c; + buf = buf0 = out->val.uc; if (!buf) return -1; while (*cp && cp < lim) { - int chr; - cp = utf8_get_char(cp, &chr); + utf8proc_int32_t chr; + cp += get_utf8(cp, &chr); *buf++ = chr; } if (max >= min) *buf++ = '\0'; else while (max < min) { - int chr; + utf8proc_int32_t chr; max++; - cp = utf8_get_char(cp, &chr); + cp += get_utf8(cp, &chr); *buf++ = chr; } - sz_end = buf-out->val.c; + sz_end = buf-out->val.uc; } break; case ENC_WCHAR: @@ -999,7 +1001,10 @@ write_buffer( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng sz_end = -1; Yap_Error(SYSTEM_ERROR, TermNil, "Unsupported Encoding ~s in %s", enc_name(enc), __FUNCTION__); } - } + } else { + // no other encodings are supported. + sz_end = -1; + } if (out->type & (YAP_STRING_MALLOC)) { out->val.c = realloc(out->val.c,sz_end); } @@ -1022,8 +1027,8 @@ write_length( void *s0, seq_tv_t *out, encoding_t enc, int minimal, size_t leng switch (enc) { case ENC_ISO_UTF8: { - const char *s = s0; - return utf8_strlen1(s); + const unsigned char *s = s0; + return strlen_utf8(s); } case ENC_ISO_LATIN1: { @@ -1158,7 +1163,7 @@ advance_Text( void *s, int l, encoding_t enc ) case ENC_ISO_LATIN1: return ((char *)s)+l; case ENC_ISO_UTF8: - return (char *)utf8_skip((const char *)s,l); + return (char *)skip_utf8(s,l); case ENC_WCHAR: return ((wchar_t *)s)+l; default: @@ -1180,14 +1185,14 @@ cmp_Text( void *s1, void *s2, int l, encoding_t enc1, encoding_t enc2 ) return strncmp(s1, s2, l); case ENC_ISO_UTF8: { - int chr1, chr2; - char *w2 = s2; - for (i = 0; i < l; i++) { chr1 = *w1++; w2 = utf8_get_char(w2, &chr2); if (chr1-chr2) return chr1-chr2; } + utf8proc_int32_t chr1, chr2; + unsigned char *w2 = s2; + for (i = 0; i < l; i++) { chr1 = *w1++; w2 += get_utf8(w2, &chr2); if (chr1-chr2) return chr1-chr2; } } return 0; case ENC_WCHAR: { - int chr1, chr2; + utf8proc_int32_t chr1, chr2; wchar_t *w2 = s2; for (i = 0; i < l; i++) { chr1 = *w1++; chr2 = *w2++; if (chr1-chr2) return chr1-chr2; } } @@ -1198,27 +1203,27 @@ cmp_Text( void *s1, void *s2, int l, encoding_t enc1, encoding_t enc2 ) } case ENC_ISO_UTF8: { - char *w1 = (char *)s1; + unsigned char *w1 = s1; switch (enc2) { case ENC_ISO_LATIN1: { - int chr1, chr2; - char *w2 = s2; - for (i = 0; i < l; i++) { chr2 = *w2++; w1 = utf8_get_char(w1, &chr1); if (chr1-chr2) return chr1-chr2; } + utf8proc_int32_t chr1, chr2; + unsigned char *w2 = s2; + for (i = 0; i < l; i++) { chr2 = *w2++; w1 += get_utf8(w1, &chr1); if (chr1-chr2) return chr1-chr2; } } return 0; case ENC_ISO_UTF8: { - int chr1, chr2; - char *w2 = s2; - for (i = 0; i < l; i++) { w2 = utf8_get_char(w2, &chr2); w1 = utf8_get_char(w1, &chr1); if (chr1-chr2) return chr1-chr2; } + utf8proc_int32_t chr1, chr2; + unsigned char *w2 = s2; + for (i = 0; i < l; i++) { w2 += get_utf8(w2, &chr2); w1 += get_utf8(w1, &chr1); if (chr1-chr2) return chr1-chr2; } } return 0; case ENC_WCHAR: { - int chr1, chr2; + utf8proc_int32_t chr1, chr2; wchar_t *w2 = s2; - for (i = 0; i < l; i++) { chr2 = *w2++; w1 = utf8_get_char(w1, &chr1); if (chr1-chr2) return chr1-chr2; } + for (i = 0; i < l; i++) { chr2 = *w2++; w1 += get_utf8(w1, &chr1); if (chr1-chr2) return chr1-chr2; } } return 0; default: @@ -1231,16 +1236,16 @@ cmp_Text( void *s1, void *s2, int l, encoding_t enc1, encoding_t enc2 ) switch (enc2) { case ENC_ISO_LATIN1: { - int chr1, chr2; + utf8proc_int32_t chr1, chr2; char *w2 = s2; for (i = 0; i < l; i++) { chr1 = *w1++; chr2 = *w2++; if (chr1-chr2) return chr1-chr2; } } return 0; case ENC_ISO_UTF8: { - int chr1, chr2; - char *w2 = s2; - for (i = 0; i < l; i++) { chr1 = *w1++; w2 = utf8_get_char(w2, &chr2); if (chr1-chr2) return chr1-chr2; } + utf8proc_int32_t chr1, chr2; + unsigned char *w2 = s2; + for (i = 0; i < l; i++) { chr1 = *w1++; w2 += get_utf8(w2, &chr2); if (chr1-chr2) return chr1-chr2; } } return 0; case ENC_WCHAR: @@ -1261,20 +1266,20 @@ concat( int n, seq_tv_t *out, void *sv[], encoding_t encv[], size_t lengv[] USES if (out->type == YAP_STRING_STRING) { /* we assume we concatenate strings only, or ASCII stuff like numbers */ Term t = init_tstring( PASS_REGS1 ); - char *buf = buf_from_tstring(HR); + unsigned char *buf = buf_from_tstring(HR); int i; for (i = 0; i < n; i++) { if (encv[i] == ENC_WCHAR) { wchar_t *ptr = sv[i]; - int chr; - while ( (chr = *ptr++) ) buf = utf8_put_char(buf, chr); + utf8proc_int32_t chr; + while ( (chr = *ptr++) ) buf += put_utf8(buf, chr); } else if (encv[i] == ENC_ISO_LATIN1) { char *ptr = sv[i]; - int chr; - while ( (chr = *ptr++) ) buf = utf8_put_char(buf, chr); + utf8proc_int32_t chr; + while ( (chr = *ptr++) ) buf += put_utf8(buf, chr); } else { char *ptr = sv[i]; - int chr; + utf8proc_int32_t chr; while ( (chr = *ptr++) ) *buf++ = chr; } } @@ -1301,16 +1306,16 @@ concat( int n, seq_tv_t *out, void *sv[], encoding_t encv[], size_t lengv[] USES for (i = 0; i < n ; i ++) { if (encv[i] == ENC_WCHAR) { wchar_t *ptr = sv[i]; - int chr; + utf8proc_int32_t chr; while ( (chr = *ptr++) != '\0' ) *buf++ = chr; } else if (encv[i] == ENC_ISO_LATIN1) { char *ptr = sv[i]; - int chr; + utf8proc_int32_t chr; while ( (chr = *ptr++) != '\0' ) *buf++ = (unsigned char)chr; } else { - char *ptr = sv[i]; - int chr; - while ( (ptr = utf8_get_char( ptr, &chr )) != NULL ) { if (chr == '\0') break; else *buf++ = chr; } + unsigned char *ptr = sv[i]; + utf8proc_int32_t chr; + while ( (ptr += get_utf8( ptr, &chr )) != NULL ) { if (chr == '\0') break; else *buf++ = chr; } } } *buf++ = '\0'; @@ -1324,7 +1329,7 @@ concat( int n, seq_tv_t *out, void *sv[], encoding_t encv[], size_t lengv[] USES LOCAL_TERM_ERROR( sz/sizeof(CELL)+3 ); for (i = 0; i < n ; i ++) { char *ptr = sv[i]; - int chr; + utf8proc_int32_t chr; while ( (chr = *ptr++) != '\0' ) *buf++ = chr; } *buf++ = '\0'; @@ -1341,20 +1346,20 @@ slice( size_t min, size_t max, void *buf, seq_tv_t *out, encoding_t enc USES_REG if (out->type == YAP_STRING_STRING) { /* we assume we concatenate strings only, or ASCII stuff like numbers */ Term t = init_tstring( PASS_REGS1 ); - char *nbuf = buf_from_tstring(HR); + unsigned char *nbuf = buf_from_tstring(HR); if (enc == ENC_WCHAR) { wchar_t *ptr = (wchar_t *)buf + min; - int chr; - while ( min++ < max ) { chr = *ptr++; nbuf = utf8_put_char(nbuf, chr); } + utf8proc_int32_t chr; + while ( min++ < max ) { chr = *ptr++; nbuf += put_utf8(nbuf, chr); } } else if (enc == ENC_ISO_LATIN1) { - char *ptr = (char *)buf + min; - int chr; - while ( min++ < max ) { chr = *ptr++; nbuf = utf8_put_char(nbuf, chr); } + unsigned char *ptr = (unsigned char *)buf + min; + utf8proc_int32_t chr; + while ( min++ < max ) { chr = *ptr++; nbuf += put_utf8(nbuf, chr); } } else { - const char *ptr = utf8_skip ( (const char *)buf, min ); - int chr; + unsigned char *ptr = skip_utf8 (buf, min ); + utf8proc_int32_t chr; if (!ptr) return NULL; - while ( min++ < max ) { ptr = utf8_get_char(ptr, & chr); nbuf = utf8_put_char(nbuf, chr); } + while ( min++ < max ) { ptr += get_utf8(ptr, & chr); nbuf += put_utf8(nbuf, chr); } } *nbuf ++ = '\0'; close_tstring( nbuf PASS_REGS ); @@ -1387,11 +1392,11 @@ slice( size_t min, size_t max, void *buf, seq_tv_t *out, encoding_t enc USES_REG } else { /* atom */ wchar_t *nbuf = (wchar_t *)HR; - const char *ptr = utf8_skip ( (const char *)buf, min ); - int chr; + unsigned char *ptr = skip_utf8 ( ( unsigned char *)buf, min ); + utf8proc_int32_t chr; LOCAL_ERROR( max-min ); - while ( min++ < max ) { ptr = utf8_get_char(ptr, & chr); *nbuf++ = chr; } + while ( min++ < max ) { ptr += get_utf8(ptr, & chr); *nbuf++ = chr; } nbuf[0] = '\0'; at = Yap_LookupMaybeWideAtom( (wchar_t*)HR ); } diff --git a/C/tracer.c b/C/tracer.c index a1aee53b3..05cfba45d 100644 --- a/C/tracer.c +++ b/C/tracer.c @@ -334,12 +334,12 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args) } switch (port) { case enter_pred: - mname = RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; + mname = (char *)RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; arity = pred->ArityOfPE; if (arity == 0) - s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; + s = (char *)RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; else - s = RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; + s = (char *)RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; /* if ((pred->ModuleOfPred == 0) && (s[0] == '$')) return; */ send_tracer_message("CALL: ", s, arity, mname, args); @@ -353,23 +353,23 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args) break; case retry_table_generator: send_tracer_message("FAIL ", NULL, 0, NULL, args); - mname = RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; + mname = (char *)RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; arity = pred->ArityOfPE; if (arity == 0) - s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; + s = (char *)RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; else - s = RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; + s = (char *)RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; send_tracer_message("RETRY GENERATOR: ", s, arity, mname, args); break; case retry_table_consumer: send_tracer_message("FAIL ", NULL, 0, NULL, args); - mname = RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; + mname = (char *)RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; arity = pred->ArityOfPE; if (arity == 0) { - s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; + s = (char *)RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; send_tracer_message("RETRY CONSUMER: ", s, 0, mname, NULL); } else { - s = RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; + s = (char *)RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; send_tracer_message("RETRY CONSUMER: ", s, pred->ArityOfPE, mname, NULL); } break; @@ -378,27 +378,27 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args) if (pred == UndefCode) { send_tracer_message("RETRY LOADER ", NULL, 0, NULL, NULL); } else { - mname = RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; + mname = (char *)RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; arity = pred->ArityOfPE; if (arity == 0) - s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; + s = (char *)RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; else - s = RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; + s = (char *)RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; send_tracer_message("RETRY LOADER: ", s, 0, mname, NULL); } break; case retry_pred: send_tracer_message("FAIL ", NULL, 0, NULL, args); if (pred != NULL) { - mname = RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; + mname = (char *)RepAtom(AtomOfTerm(Yap_Module_Name(pred)))->StrOfAE; arity = pred->ArityOfPE; if (pred->ModuleOfPred == IDB_MODULE) { s = "recorded"; arity = 3; } else if (arity == 0) { - s = RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; + s = (char *)RepAtom((Atom)pred->FunctorOfPred)->StrOfAE; } else { - s = RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; + s = (char *)RepAtom(NameOfFunctor((pred->FunctorOfPred)))->StrOfAE; } send_tracer_message("RETRY: ", s, arity, mname, args); } diff --git a/C/utf8.c b/C/utf8.c deleted file mode 100644 index 916b582df..000000000 --- a/C/utf8.c +++ /dev/null @@ -1,272 +0,0 @@ -/* $Id$ - - Part of SWI-Prolog - - Author: Jan Wielemaker and Anjo Anjewierden - E-mail: jan@swi.psy.uva.nl - WWW: http://www.swi-prolog.org - Copyright (C): 1985-2002, University of Amsterdam - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include /* get size_t */ -#include "pl-utf8.h" - -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -UTF-8 Decoding, based on http://www.cl.cam.ac.uk/~mgk25/unicode.html -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - -#define CONT(i) ISUTF8_CB(in[i]) -#define VAL(i, s) ((in[i]&0x3f) << s) - -char * -_PL__utf8_get_char(const char *in, int *chr) -{ /* 2-byte, 0x80-0x7ff */ - if ( (in[0]&0xe0) == 0xc0 && CONT(1) ) - { *chr = ((in[0]&0x1f) << 6)|VAL(1,0); - return (char *)in+2; - } - /* 3-byte, 0x800-0xffff */ - if ( (in[0]&0xf0) == 0xe0 && CONT(1) && CONT(2) ) - { *chr = ((in[0]&0xf) << 12)|VAL(1,6)|VAL(2,0); - return (char *)in+3; - } - /* 4-byte, 0x10000-0x1FFFFF */ - if ( (in[0]&0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3) ) - { *chr = ((in[0]&0x7) << 18)|VAL(1,12)|VAL(2,6)|VAL(3,0); - return (char *)in+4; - } - /* 5-byte, 0x200000-0x3FFFFFF */ - if ( (in[0]&0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4) ) - { *chr = ((in[0]&0x3) << 24)|VAL(1,18)|VAL(2,12)|VAL(3,6)|VAL(4,0); - return (char *)in+5; - } - /* 6-byte, 0x400000-0x7FFFFFF */ - if ( (in[0]&0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5) ) - { *chr = ((in[0]&0x1) << 30)|VAL(1,24)|VAL(2,18)|VAL(3,12)|VAL(4,6)|VAL(5,0); - return (char *)in+4; - } - - *chr = *in; - - return (char *)in+1; -} - -unicode_type_t -_PL__utf8_type(const char *in0, size_t len) -{ /* 2-byte, 0x80-0x7ff */ - int chr; - char *in = (char *) in0; - int type = S_ASCII; - - while (in[0] != '\0' && in-in0 < len) { - if ( (in[0]&0xe0) == 0xc0 && CONT(1) ) - { chr = ((in[0]&0x1f) << 6)|VAL(1,0); - if (chr > 255) return S_WIDE; - if (chr > 127) type = S_LATIN; - in += 2; - break; - } - /* 3-byte, 0x800-0xffff */ - if ( (in[0]&0xf0) == 0xe0 && CONT(1) && CONT(2) ) - { chr = ((in[0]&0xf) << 12)|VAL(1,6)|VAL(2,0); - if (chr > 255) return S_WIDE; - if (chr > 127) type = S_LATIN; - in += 3; - } - /* 4-byte, 0x10000-0x1FFFFF */ - if ( (in[0]&0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3) ) - { chr = ((in[0]&0x7) << 18)|VAL(1,12)|VAL(2,6)|VAL(3,0); - if (chr > 255) return S_WIDE; - if (chr > 127) type = S_LATIN; - in += 4; - } - /* 5-byte, 0x200000-0x3FFFFFF */ - if ( (in[0]&0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4) ) - { chr = ((in[0]&0x3) << 24)|VAL(1,18)|VAL(2,12)|VAL(3,6)|VAL(4,0); - if (chr > 255) return S_WIDE; - if (chr > 127) type = S_LATIN; - in += 5; - } - /* 6-byte, 0x400000-0x7FFFFFF */ - if ( (in[0]&0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5) ) - { chr = ((in[0]&0x1) << 30)|VAL(1,24)|VAL(2,18)|VAL(3,12)|VAL(4,6)|VAL(5,0); - if (chr > 255) return S_WIDE; - if (chr > 127) type = S_LATIN; - in += 6; - } - in ++; - } - return type; -} - - -char * -_PL__utf8_put_char(char *out, int chr) -{ if ( chr < 0x80 ) - { *out++ = chr; - } else if ( chr < 0x800 ) - { *out++ = 0xc0|((chr>>6)&0x1f); - *out++ = 0x80|(chr&0x3f); - } else if ( chr < 0x10000 ) - { *out++ = 0xe0|((chr>>12)&0x0f); - *out++ = 0x80|((chr>>6)&0x3f); - *out++ = 0x80|(chr&0x3f); - } else if ( chr < 0x200000 ) - { *out++ = 0xf0|((chr>>18)&0x07); - *out++ = 0x80|((chr>>12)&0x3f); - *out++ = 0x80|((chr>>6)&0x3f); - *out++ = 0x80|(chr&0x3f); - } else if ( chr < 0x4000000 ) - { *out++ = 0xf8|((chr>>24)&0x03); - *out++ = 0x80|((chr>>18)&0x3f); - *out++ = 0x80|((chr>>12)&0x3f); - *out++ = 0x80|((chr>>6)&0x3f); - *out++ = 0x80|(chr&0x3f); - } else if ( (unsigned)chr < 0x80000000 ) - { *out++ = 0xfc|((chr>>30)&0x01); - *out++ = 0x80|((chr>>24)&0x3f); - *out++ = 0x80|((chr>>18)&0x3f); - *out++ = 0x80|((chr>>12)&0x3f); - *out++ = 0x80|((chr>>6)&0x3f); - *out++ = 0x80|(chr&0x3f); - } - - return out; -} - -char * -_PL__utf8_skip_char(const char *in) -{ /* 2-byte, 0x80-0x7ff */ - if ( (in[0]&0xe0) == 0xc0 && CONT(1) ) - { - return (char *)in+2; - } - /* 3-byte, 0x800-0xffff */ - if ( (in[0]&0xf0) == 0xe0 && CONT(1) && CONT(2) ) - { - return (char *)in+3; - } - /* 4-byte, 0x10000-0x1FFFFF */ - if ( (in[0]&0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3) ) - { - return (char *)in+4; - } - /* 5-byte, 0x200000-0x3FFFFFF */ - if ( (in[0]&0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4) ) - { - return (char *)in+5; - } - /* 6-byte, 0x400000-0x7FFFFFF */ - if ( (in[0]&0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5) ) - { - return (char *)in+4; - } - - return (char *)in+1; -} - - -size_t -utf8_strlen(const char *s, size_t len) -{ const char *e = &s[len]; - unsigned int l = 0; - - while(s0) - { int chr1, chr2; - - s1 = utf8_get_char(s1, &chr1); - s2 = utf8_get_char(s2, &chr2); - if (chr1-chr2) return chr1-chr2; - if (!chr1) return 0; - } - - return 0; -} - -int -utf8_strprefix(const char *s1, const char *s2) -{ - - while(1) - { int chr1, chr2; - - s1 = utf8_get_char(s1, &chr1); - s2 = utf8_get_char(s2, &chr2); - if (!chr2) return 1; - if (chr1-chr2) return 0; - } - - return 0; -} - -char * -utf8_wcscpy(char *sf, const wchar_t *s0) -{ - char *sf0 = sf; - while(1) - { int chr1; - - chr1 = * s0++; - if (chr1 == '\0') { - *sf++ = '\0'; - return sf0; - } - sf = utf8_put_char(sf, chr1); - } - - return NULL; -} diff --git a/C/write.c b/C/write.c index 81be5a966..8f50d032b 100644 --- a/C/write.c +++ b/C/write.c @@ -23,13 +23,13 @@ static char SccsId[] = "%W% %G%"; #include "Yap.h" #include "Yatom.h" #include "YapHeap.h" +#include "YapText.h" #include "yapio.h" #include "clause.h" #if COROUTINING #include "attvar.h" #endif #include "iopreds.h" -#include "pl-utf8.h" #if HAVE_STRING_H #include @@ -374,7 +374,7 @@ static void wrputf(Float f, struct write_globs *wglb) /* writes a float */ wrputc(' ', stream); } /* use SWI's format_float */ - sprintf(buf, floatFormat(),f); + sprintf(buf, (char *)floatFormat(),f); wrputs(buf, stream); #endif @@ -551,12 +551,12 @@ static void write_quoted(wchar_t ch, wchar_t quote, wrf stream) { } } -static void write_string(const char *s, +static void write_string(const unsigned char *s, struct write_globs *wglb) /* writes an integer */ { StreamDesc *stream = wglb->stream; - int chr, qt; - char *ptr = (char *)s; + utf8proc_int32_t chr, qt; + unsigned char *ptr = (unsigned char *) s; if (wglb->Write_strings) qt = '`'; @@ -564,7 +564,7 @@ static void write_string(const char *s, qt = '"'; wrputc(qt, stream); do { - ptr = utf8_get_char(ptr, &chr); + ptr += get_utf8(ptr, &chr); if (chr == '\0') break; write_quoted(chr, qt, stream); @@ -937,7 +937,7 @@ static void writeTerm(Term t, int p, int depth, int rinfixarg, wrputf(FloatOfTerm(t), wglb); return; case (CELL) FunctorString: - write_string(StringOfTerm(t), wglb); + write_string(UStringOfTerm(t), wglb); return; case (CELL) FunctorAttVar: write_var(RepAppl(t) + 1, wglb, &nrwt); @@ -1093,10 +1093,10 @@ static void writeTerm(Term t, int p, int depth, int rinfixarg, wrclose_bracket(wglb, TRUE); } /* avoid quoting commas and bars */ - if (!strcmp(RepAtom(atom)->StrOfAE, ",")) { + if (!strcmp((char *)RepAtom(atom)->StrOfAE, ",")) { wrputc(',', wglb->stream); lastw = separator; - } else if (!strcmp(RepAtom(atom)->StrOfAE, "|")) { + } else if (!strcmp((char *)RepAtom(atom)->StrOfAE, "|")) { wrputc('|', wglb->stream); lastw = separator; } else @@ -1247,3 +1247,28 @@ void Yap_plwrite(Term t, StreamDesc *mywrite, int max_depth, int flags, int prio restore_from_write(&rwt, &wglb); Yap_CloseSlots( sls ); } + + +char * +Yap_TermToString(Term t, char *s, size_t sz, size_t *length, encoding_t encp, int flags) +{ + CACHE_REGS + int sno = Yap_open_buf_write_stream(s, sz, encp, flags); + int old_output_stream = LOCAL_c_output_stream; + + if (sno < 0) + return NULL; + LOCK(GLOBAL_Stream[sno].streamlock); + LOCAL_c_output_stream = sno; + if (encp) + GLOBAL_Stream[sno].encoding = encp; + Yap_plwrite (t, GLOBAL_Stream+sno, 0, flags, 1200); + s[GLOBAL_Stream[sno].u.mem_string.pos] = '\0'; + GLOBAL_Stream[sno].status = Free_Stream_f; + UNLOCK(GLOBAL_Stream[sno].streamlock); + LOCAL_c_output_stream = old_output_stream; + if ( EX == 0 ) return s; + return NULL; +} + + diff --git a/CMakeFiles/3.3.1/CMakeCCompiler.cmake b/CMakeFiles/3.3.1/CMakeCCompiler.cmake new file mode 100644 index 000000000..131a7b2e8 --- /dev/null +++ b/CMakeFiles/3.3.1/CMakeCCompiler.cmake @@ -0,0 +1,63 @@ +set(CMAKE_C_COMPILER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "AppleClang") +set(CMAKE_C_COMPILER_VERSION "6.1.0.6020053") +set(CMAKE_C_COMPILE_FEATURES "c_function_prototypes;c_restrict;c_variadic_macros;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Darwin") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_SIMULATE_VERSION "") + +set(CMAKE_AR "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar") +set(CMAKE_RANLIB "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib") +set(CMAKE_LINKER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCC ) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "") +set(CMAKE_C_LIBRARY_ARCHITECTURE "") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + + + + +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/6.1.0/lib/darwin/libclang_rt.osx.a") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib;/usr/local/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "/Library/Frameworks;/System/Library/Frameworks") + + + diff --git a/CMakeFiles/3.3.1/CMakeCXXCompiler.cmake b/CMakeFiles/3.3.1/CMakeCXXCompiler.cmake new file mode 100644 index 000000000..e6ed6160b --- /dev/null +++ b/CMakeFiles/3.3.1/CMakeCXXCompiler.cmake @@ -0,0 +1,64 @@ +set(CMAKE_CXX_COMPILER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "AppleClang") +set(CMAKE_CXX_COMPILER_VERSION "6.1.0.6020053") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_template_template_parameters;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") + +set(CMAKE_CXX_PLATFORM_ID "Darwin") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_SIMULATE_VERSION "") + +set(CMAKE_AR "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar") +set(CMAKE_RANLIB "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib") +set(CMAKE_LINKER "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCXX ) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;mm;CPP) +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + + + + +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "c++;/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/6.1.0/lib/darwin/libclang_rt.osx.a") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib;/usr/local/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "/Library/Frameworks;/System/Library/Frameworks") + + + diff --git a/CMakeFiles/3.3.1/CMakeDetermineCompilerABI_C.bin b/CMakeFiles/3.3.1/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..b2bbcaa93a4014c27eb18488597dd935c878f4ba GIT binary patch literal 4368 zcmeHKO>0w85S`Z#TiRd(R#6nKB4R5v0Tru6h~m=(`w?mdQOYGBuQt#mlH_Sy5P~2y z6roF(;=gdA2rjy`zd+o$iy*FQ5%HXx8}eSXZr!|rc{AtEz30x%eVh5X`}Nm=h}A1n z?-7wObRFQijKUK+0!>1dN?*HW-?!&xx#}0o5C4kDvyP2Q&D;0p{af_;h<{BCMsCs% z?K5GeYR*cnv$vZsfda^P(QF}ZpVdo!Qa2%Ol**M$)ed1dU)}H>G>3?Nd|op6O1Y&c zg;HJ>N{eNU{q?>yeC#QOn0?<%lya8TVkJ{_T06S)`)v3Q8v z??-SH8iGdMY9+c{$VT(4%XwhRQ7H2``Reue@i$k;o?XsOJ={Lfa~f+%Nn~h9>v$V; z4RRLs@>~M_^$PEqgfiB8$G0fY>fDX{@2pm9PI2P;1o9|kTc^*!@V+EIgRo-;r*#q{ z=R7z8KaijUK?i~k1RV%E5Og5uK+u7p13?G=e+TX+8()$y`Z;cH**}?2*yIAwarQYz2jaDy zF*t)psKl(XXG+?u17 zoJ`)S$oXQXP?AfWW0faCi8F;>d4C+A`Uyi%sAcz4h~s)3+P-B3Ym8xp(rf!*$uaC1 zjR1A}IuN#6Ll6lLLBrTxN1enZ3BzFzh$o=1bhV6P0{^oXJ&pUSP`Ww}hN@a~vnq?3 H9YxD;+kB<) literal 0 HcmV?d00001 diff --git a/CMakeFiles/3.3.1/CMakeDetermineCompilerABI_CXX.bin b/CMakeFiles/3.3.1/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..d755911d140543a0efd7843c9b6247e89a2c588c GIT binary patch literal 4392 zcmeHK%W4!s6uq5?3CWPmB7&lXC@RtDWP%TZx`>a~3Fbu-K_a1;M~4~6Ok^H92@10b zI0Pk2mwtwuh#-=M3;#f}aW{&~7(_g$x|->Z23)x83%9FI)xEcFo$Af`wDBDEtk;x(r|@aul9`D>ZZDuDxK-PIEPARuKLbvCeY@Dm8CEm=A{Nd>-sKgVCF` z!`sZBQe~%FZU*kJH`a^GVEeKOA@*|hQk&GwmL8N!uM|qng8S>$OufS z_U&=+Ex>o+9Sr}2dQpV$V5YkEN&GMI15fd7pbq1BNA~y{nEdTvBnRE_890sg>5Sza z{O1Awll35K03Lx4S4zd<kwv$~uCrX7Q`kM<8wr(b@%c58hrv(^9ceBUXop(T;7 zF74+$%r)2`?#sL}@as386Nhupea9+hR`YC}pB@^Djl|GIE~Wb#4a9GOj$r)UYN_nx zV>e9-qD9WY*H z=cZp+Sql2PMdh=~sXFOO*-=?1nQ@A8BA?6^^zqUwbWA^blXr*yV)yA{?XF klMFzSFHDSFp&VB}p0WJrm6g6S)uJkuD=C$NkOvdA-*v{W5&!@I literal 0 HcmV?d00001 diff --git a/CMakeFiles/3.3.1/CMakeSystem.cmake b/CMakeFiles/3.3.1/CMakeSystem.cmake new file mode 100644 index 000000000..856db5ea9 --- /dev/null +++ b/CMakeFiles/3.3.1/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Darwin-14.5.0") +set(CMAKE_HOST_SYSTEM_NAME "Darwin") +set(CMAKE_HOST_SYSTEM_VERSION "14.5.0") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Darwin-14.5.0") +set(CMAKE_SYSTEM_NAME "Darwin") +set(CMAKE_SYSTEM_VERSION "14.5.0") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/CMakeFiles/3.3.1/CompilerIdC/CMakeCCompilerId.c b/CMakeFiles/3.3.1/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 000000000..444e4093c --- /dev/null +++ b/CMakeFiles/3.3.1/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,508 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(SDCC) +# define COMPILER_ID "SDCC" + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif + (void)argv; + return require; +} +#endif diff --git a/CMakeFiles/3.3.1/CompilerIdC/a.out b/CMakeFiles/3.3.1/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..b4308199f9cc781b17f953cb9bbc90f5b673a84a GIT binary patch literal 8600 zcmeHNO^6gn6n>p`ecJ7 zs-e5z{Ic=aKU+ndA(7QLL?jKZZxOjI8T3T^uw1T#`zrs zm733fG2cH#&*#EPF&MeYuu-~|YWnRadyx#ryT1b$1J^C%C&uOUWQ(l!0OJ)J%`m85 zH^#wu`$nU9XN{jYDda3Eh*zsNdI=83yJq5@F_Vb<@=FFoU#V90tDss`L3O#NaX)|G znRwhI3h`i0kth09$}g$q(5v_{?vMAUiMPj0BF5R+RJgDApi0fo%+Dl-VgLH}HQwLE zzA~;JqvsdBrq`RlS-dze9@PKKD>}F5=PrJhot=x%TxK9IV9Gs{2+v!b6YYm^U%2dK zL{e-wkyHlv4SeLDIX(bpEcc*D3GH_1WoS~~1fV9@OZxw-k7Lc0WCS|dYJ`*JU}>^= zvs?tG?1wUsV9)sXkAFS0{_XlV?P2G~AKrxx)QN1{ruAryX@eZb^>QBXo1}1^Q&9S% z^Yt^1ttDUuX!@0j4=0dEuoTT6N5l2nnTWq52Co8B-h$LuUl* z>uhuuy1Bvyn5W0Jd2GkpO4s?Vvl5$kzr;McK9-7yt!2B559cm^eCc$dR;dSNKg`e6 z>t+9=vRA#nDB4pmd(GuqSjo?NAzsjo)e8%y{2~)G(icVD@WVz>tLEKEPEMH4RNQeV z+>`Dx*PT9&AjnbSG?7}$A8uIkHh z6zc3ls!~#Z+b^`5zAE`%(GTTt#S5zPKI_j)rugk)NbbLls^>AEvvSw(QGZLB^3I>IOREp-UT}V literal 0 HcmV?d00001 diff --git a/CMakeFiles/3.3.1/CompilerIdCXX/CMakeCXXCompilerId.cpp b/CMakeFiles/3.3.1/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 000000000..721698c5b --- /dev/null +++ b/CMakeFiles/3.3.1/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,498 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__ ) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID "" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID "" + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID "" +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif + (void)argv; + return require; +} diff --git a/CMakeFiles/3.3.1/CompilerIdCXX/a.out b/CMakeFiles/3.3.1/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..66d523f790cff66d7043ed5e47800c9cd0289064 GIT binary patch literal 8632 zcmeHN&ube;6n4#2S{GSzn^4*W;>K!ZnmEBfsEIL?wX}`|`o&60 zoKk}?EfuEVOCf=iSFo4~jSmk*!xmx}oq$_eAbL5^mK5|7EtMH~s6YXK>RVan=sXW&QOdrj2363>Wk`d@+rxi?AD{GUb z+tm^<;V>DL$U9{*)$`SD4NfjW^xhqS&MVU9sgVZHR@_hwM|9P+@q z@O*8c=k%YA=NBg?GPw+rsI2L{K8)G_h+`hNU%1_B`?bs`#s$_QZ$p`1*$w%A$KWO~ zWdh21;xbw*mI2FvWxz6E8L$jk1}pC zN5jsT?qdFnd2u$(5GZyn9H&eCuGZo)i?auadmilPfj2uqa2ERE78 z8I=~%PZ%4NDPuN=VH1@TF(nB)j^Z*Ts<)2=ryO1R)Q+qxrtpL`hWIevoe;CQNPNNI zq`~vVn27#gunY_stwCH=z^`4(O=+6UH4ldVO{Xs8E6r2beMVylpK+-)?=0!6R=cyN M*6=R?Y=@D505hxy>i_@% literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/CELLSIZE.bin b/CMakeFiles/CheckTypeSize/CELLSIZE.bin new file mode 100755 index 0000000000000000000000000000000000000000..bccf88365377529e419ad5b2290e524de1b78460 GIT binary patch literal 8448 zcmeHM&ubGw6rMHKmNu9iiYSU*Mf^>hLtBCrZKbOz+8@*kVhLl?Y-zBG*kmy+2n7)g zMd(H8f8gD_UKHA!`VUAi-XiElY7z1KCL6MeEj@V<-h;PqzBg~)%zQhSnfGD)>+e>j ztdLU6`;<~q=tqF3%0^46BhUm?>xrT3&Ru76oZd#U8sUzJdEyAvddj&o)fi&NbK;=* z7;954P%O!a)*1lPp+E%qY2dBKUw}8}H8Ey< zCRI$;$M2S}s}_Ph4ZPL-zOA2&n)koP4u6{xr>>AJwCQl zg9st_zJ_5bXR%+7b>|o7DL>vyl)Z23PK78j<84LW4#ZYQE7s5QXl2EzB;T#BuJVp_ zi~*3K<=udHhhA9fOaC6hHt#xN+!>h}URtM7^v5p$0BX3Rh5!Hn literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/CELLSIZE.c b/CMakeFiles/CheckTypeSize/CELLSIZE.c new file mode 100644 index 000000000..5b7c46f9d --- /dev/null +++ b/CMakeFiles/CheckTypeSize/CELLSIZE.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(uintptr_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_DOUBLE.bin b/CMakeFiles/CheckTypeSize/SIZEOF_DOUBLE.bin new file mode 100755 index 0000000000000000000000000000000000000000..bccf88365377529e419ad5b2290e524de1b78460 GIT binary patch literal 8448 zcmeHM&ubGw6rMHKmNu9iiYSU*Mf^>hLtBCrZKbOz+8@*kVhLl?Y-zBG*kmy+2n7)g zMd(H8f8gD_UKHA!`VUAi-XiElY7z1KCL6MeEj@V<-h;PqzBg~)%zQhSnfGD)>+e>j ztdLU6`;<~q=tqF3%0^46BhUm?>xrT3&Ru76oZd#U8sUzJdEyAvddj&o)fi&NbK;=* z7;954P%O!a)*1lPp+E%qY2dBKUw}8}H8Ey< zCRI$;$M2S}s}_Ph4ZPL-zOA2&n)koP4u6{xr>>AJwCQl zg9st_zJ_5bXR%+7b>|o7DL>vyl)Z23PK78j<84LW4#ZYQE7s5QXl2EzB;T#BuJVp_ zi~*3K<=udHhhA9fOaC6hHt#xN+!>h}URtM7^v5p$0BX3Rh5!Hn literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_DOUBLE.c b/CMakeFiles/CheckTypeSize/SIZEOF_DOUBLE.c new file mode 100644 index 000000000..8ec3d4327 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_DOUBLE.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(double)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_FLOAT.bin b/CMakeFiles/CheckTypeSize/SIZEOF_FLOAT.bin new file mode 100755 index 0000000000000000000000000000000000000000..225f88b5c9764d45e8d2cad16047e08bc6033774 GIT binary patch literal 8448 zcmeHM&r4KM6uz&?6djxiB$A?D5&cGIp(5cz!pV+-967PB{}eGc*c;3yTH` z+!X#LZK5_UY*qaQ;ilaLElnc&zB}(RZzjc6i{KnM@7(X)bI-l^dv|m1`Mm%Ace7Gf zNU8N>N~tLH3&1mFqoq_QG!E5zVrayfbtV(^){9jS4@Atfs1h+s4D_j)13$7|sP>p`e>G4~{sOY2N-@i96Y^KEDO0~dV^KcxPas$eK;z3vuVL%uV2801&Ko}4PgaKhd82EP# zOvlUL;xC(CVTK*&7w0KI-HVrtKX#l7QGB7e7kNJr+Z?M{Kg(m4O{X&dVQXuPcciln zfCMe?2E04;z*1j(_XxIm*9qg!5Ut&?tPc1np|we6m7-QO+}vW4SKVrK{7&LlKC|Y| z#UMTN_9J(7PU}*CpYH3K_kzR-1HynXAPfit!hkR!3j%?n1HP>LoXsc30HRY%-HmG1kR39|%-0-yTA0_Z&X!wzq2_Bl};&EYlA_`E)_) zfR7d>PvbiQ%M@*aQYN5zwlEzL%T!KH@F{deSb&C$2`><%!M6|MD^OTAjo7G=|GfuO X)vvBzo9(cItMi3oN~cit$1eW>j6R=! literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_FLOAT.c b/CMakeFiles/CheckTypeSize/SIZEOF_FLOAT.c new file mode 100644 index 000000000..076a87c11 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_FLOAT.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(float)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_INT.bin b/CMakeFiles/CheckTypeSize/SIZEOF_INT.bin new file mode 100755 index 0000000000000000000000000000000000000000..225f88b5c9764d45e8d2cad16047e08bc6033774 GIT binary patch literal 8448 zcmeHM&r4KM6uz&?6djxiB$A?D5&cGIp(5cz!pV+-967PB{}eGc*c;3yTH` z+!X#LZK5_UY*qaQ;ilaLElnc&zB}(RZzjc6i{KnM@7(X)bI-l^dv|m1`Mm%Ace7Gf zNU8N>N~tLH3&1mFqoq_QG!E5zVrayfbtV(^){9jS4@Atfs1h+s4D_j)13$7|sP>p`e>G4~{sOY2N-@i96Y^KEDO0~dV^KcxPas$eK;z3vuVL%uV2801&Ko}4PgaKhd82EP# zOvlUL;xC(CVTK*&7w0KI-HVrtKX#l7QGB7e7kNJr+Z?M{Kg(m4O{X&dVQXuPcciln zfCMe?2E04;z*1j(_XxIm*9qg!5Ut&?tPc1np|we6m7-QO+}vW4SKVrK{7&LlKC|Y| z#UMTN_9J(7PU}*CpYH3K_kzR-1HynXAPfit!hkR!3j%?n1HP>LoXsc30HRY%-HmG1kR39|%-0-yTA0_Z&X!wzq2_Bl};&EYlA_`E)_) zfR7d>PvbiQ%M@*aQYN5zwlEzL%T!KH@F{deSb&C$2`><%!M6|MD^OTAjo7G=|GfuO X)vvBzo9(cItMi3oN~cit$1eW>j6R=! literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_INT.c b/CMakeFiles/CheckTypeSize/SIZEOF_INT.c new file mode 100644 index 000000000..e91c9b2c3 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_INT.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(int)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_INT_P.bin b/CMakeFiles/CheckTypeSize/SIZEOF_INT_P.bin new file mode 100755 index 0000000000000000000000000000000000000000..bccf88365377529e419ad5b2290e524de1b78460 GIT binary patch literal 8448 zcmeHM&ubGw6rMHKmNu9iiYSU*Mf^>hLtBCrZKbOz+8@*kVhLl?Y-zBG*kmy+2n7)g zMd(H8f8gD_UKHA!`VUAi-XiElY7z1KCL6MeEj@V<-h;PqzBg~)%zQhSnfGD)>+e>j ztdLU6`;<~q=tqF3%0^46BhUm?>xrT3&Ru76oZd#U8sUzJdEyAvddj&o)fi&NbK;=* z7;954P%O!a)*1lPp+E%qY2dBKUw}8}H8Ey< zCRI$;$M2S}s}_Ph4ZPL-zOA2&n)koP4u6{xr>>AJwCQl zg9st_zJ_5bXR%+7b>|o7DL>vyl)Z23PK78j<84LW4#ZYQE7s5QXl2EzB;T#BuJVp_ zi~*3K<=udHhhA9fOaC6hHt#xN+!>h}URtM7^v5p$0BX3Rh5!Hn literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_INT_P.c b/CMakeFiles/CheckTypeSize/SIZEOF_INT_P.c new file mode 100644 index 000000000..e217805d1 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_INT_P.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(int *)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_LONG.bin b/CMakeFiles/CheckTypeSize/SIZEOF_LONG.bin new file mode 100755 index 0000000000000000000000000000000000000000..bccf88365377529e419ad5b2290e524de1b78460 GIT binary patch literal 8448 zcmeHM&ubGw6rMHKmNu9iiYSU*Mf^>hLtBCrZKbOz+8@*kVhLl?Y-zBG*kmy+2n7)g zMd(H8f8gD_UKHA!`VUAi-XiElY7z1KCL6MeEj@V<-h;PqzBg~)%zQhSnfGD)>+e>j ztdLU6`;<~q=tqF3%0^46BhUm?>xrT3&Ru76oZd#U8sUzJdEyAvddj&o)fi&NbK;=* z7;954P%O!a)*1lPp+E%qY2dBKUw}8}H8Ey< zCRI$;$M2S}s}_Ph4ZPL-zOA2&n)koP4u6{xr>>AJwCQl zg9st_zJ_5bXR%+7b>|o7DL>vyl)Z23PK78j<84LW4#ZYQE7s5QXl2EzB;T#BuJVp_ zi~*3K<=udHhhA9fOaC6hHt#xN+!>h}URtM7^v5p$0BX3Rh5!Hn literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_LONG.c b/CMakeFiles/CheckTypeSize/SIZEOF_LONG.c new file mode 100644 index 000000000..ff0203c41 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_LONG.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(long int)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_LONG_INT.bin b/CMakeFiles/CheckTypeSize/SIZEOF_LONG_INT.bin new file mode 100755 index 0000000000000000000000000000000000000000..bccf88365377529e419ad5b2290e524de1b78460 GIT binary patch literal 8448 zcmeHM&ubGw6rMHKmNu9iiYSU*Mf^>hLtBCrZKbOz+8@*kVhLl?Y-zBG*kmy+2n7)g zMd(H8f8gD_UKHA!`VUAi-XiElY7z1KCL6MeEj@V<-h;PqzBg~)%zQhSnfGD)>+e>j ztdLU6`;<~q=tqF3%0^46BhUm?>xrT3&Ru76oZd#U8sUzJdEyAvddj&o)fi&NbK;=* z7;954P%O!a)*1lPp+E%qY2dBKUw}8}H8Ey< zCRI$;$M2S}s}_Ph4ZPL-zOA2&n)koP4u6{xr>>AJwCQl zg9st_zJ_5bXR%+7b>|o7DL>vyl)Z23PK78j<84LW4#ZYQE7s5QXl2EzB;T#BuJVp_ zi~*3K<=udHhhA9fOaC6hHt#xN+!>h}URtM7^v5p$0BX3Rh5!Hn literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_LONG_INT.c b/CMakeFiles/CheckTypeSize/SIZEOF_LONG_INT.c new file mode 100644 index 000000000..ff0203c41 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_LONG_INT.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(long int)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG.bin b/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG.bin new file mode 100755 index 0000000000000000000000000000000000000000..bccf88365377529e419ad5b2290e524de1b78460 GIT binary patch literal 8448 zcmeHM&ubGw6rMHKmNu9iiYSU*Mf^>hLtBCrZKbOz+8@*kVhLl?Y-zBG*kmy+2n7)g zMd(H8f8gD_UKHA!`VUAi-XiElY7z1KCL6MeEj@V<-h;PqzBg~)%zQhSnfGD)>+e>j ztdLU6`;<~q=tqF3%0^46BhUm?>xrT3&Ru76oZd#U8sUzJdEyAvddj&o)fi&NbK;=* z7;954P%O!a)*1lPp+E%qY2dBKUw}8}H8Ey< zCRI$;$M2S}s}_Ph4ZPL-zOA2&n)koP4u6{xr>>AJwCQl zg9st_zJ_5bXR%+7b>|o7DL>vyl)Z23PK78j<84LW4#ZYQE7s5QXl2EzB;T#BuJVp_ zi~*3K<=udHhhA9fOaC6hHt#xN+!>h}URtM7^v5p$0BX3Rh5!Hn literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG.c b/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG.c new file mode 100644 index 000000000..7c1ec1ef4 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(long long int)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG_INT.bin b/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG_INT.bin new file mode 100755 index 0000000000000000000000000000000000000000..bccf88365377529e419ad5b2290e524de1b78460 GIT binary patch literal 8448 zcmeHM&ubGw6rMHKmNu9iiYSU*Mf^>hLtBCrZKbOz+8@*kVhLl?Y-zBG*kmy+2n7)g zMd(H8f8gD_UKHA!`VUAi-XiElY7z1KCL6MeEj@V<-h;PqzBg~)%zQhSnfGD)>+e>j ztdLU6`;<~q=tqF3%0^46BhUm?>xrT3&Ru76oZd#U8sUzJdEyAvddj&o)fi&NbK;=* z7;954P%O!a)*1lPp+E%qY2dBKUw}8}H8Ey< zCRI$;$M2S}s}_Ph4ZPL-zOA2&n)koP4u6{xr>>AJwCQl zg9st_zJ_5bXR%+7b>|o7DL>vyl)Z23PK78j<84LW4#ZYQE7s5QXl2EzB;T#BuJVp_ zi~*3K<=udHhhA9fOaC6hHt#xN+!>h}URtM7^v5p$0BX3Rh5!Hn literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG_INT.c b/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG_INT.c new file mode 100644 index 000000000..7c1ec1ef4 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_LONG_LONG_INT.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(long long int)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_SHORT_INT.bin b/CMakeFiles/CheckTypeSize/SIZEOF_SHORT_INT.bin new file mode 100755 index 0000000000000000000000000000000000000000..83026d0617ba5913e231ad76d295800e5dc43b09 GIT binary patch literal 8448 zcmeHMO=}ZT6n$f?Ep0Ga6j2l%Mf@ynkhWAQm};jcXg_Exh_zgkW=exigeJkXAao-b zicl9y|ARlkm2O;iUgf?WVebwRnZ_d-^ree+K_uOb6`qu$77< zgxr(6=XR~WkFW#49ncAAP`Ljf2f?xZ-VY6Dd;61!%{9_znsVaGALY!``}pZ|9S`dt@_$ne`>i< zbaUM|x=}|qU7LLlhU>*`)B=0a!wF!@WhlpqGnA7zPXjhJk;_ zz}-aUYvM)AE3B~T{Ng&5r`w52>Bpv1B}&Ydwj=KcV{4;T>t|)Oy5>}8Kdi5>^Ne(Y z0g#~O*??z>n|4Y#)G)RCHy*O=a9A)s;(S^D4%^xbT8N_3`c@q_$4tv1)s}2GX+gCCoPcAe2`Z zlur0)(el*3L$FNI5ol!s>T3%<5V3UUR0kiyK!gowxR~%XF +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(short int)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_VOIDP.bin b/CMakeFiles/CheckTypeSize/SIZEOF_VOIDP.bin new file mode 100755 index 0000000000000000000000000000000000000000..bccf88365377529e419ad5b2290e524de1b78460 GIT binary patch literal 8448 zcmeHM&ubGw6rMHKmNu9iiYSU*Mf^>hLtBCrZKbOz+8@*kVhLl?Y-zBG*kmy+2n7)g zMd(H8f8gD_UKHA!`VUAi-XiElY7z1KCL6MeEj@V<-h;PqzBg~)%zQhSnfGD)>+e>j ztdLU6`;<~q=tqF3%0^46BhUm?>xrT3&Ru76oZd#U8sUzJdEyAvddj&o)fi&NbK;=* z7;954P%O!a)*1lPp+E%qY2dBKUw}8}H8Ey< zCRI$;$M2S}s}_Ph4ZPL-zOA2&n)koP4u6{xr>>AJwCQl zg9st_zJ_5bXR%+7b>|o7DL>vyl)Z23PK78j<84LW4#ZYQE7s5QXl2EzB;T#BuJVp_ zi~*3K<=udHhhA9fOaC6hHt#xN+!>h}URtM7^v5p$0BX3Rh5!Hn literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_VOIDP.c b/CMakeFiles/CheckTypeSize/SIZEOF_VOIDP.c new file mode 100644 index 000000000..f7de2f858 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_VOIDP.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(void *)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_VOID_P.bin b/CMakeFiles/CheckTypeSize/SIZEOF_VOID_P.bin new file mode 100755 index 0000000000000000000000000000000000000000..bccf88365377529e419ad5b2290e524de1b78460 GIT binary patch literal 8448 zcmeHM&ubGw6rMHKmNu9iiYSU*Mf^>hLtBCrZKbOz+8@*kVhLl?Y-zBG*kmy+2n7)g zMd(H8f8gD_UKHA!`VUAi-XiElY7z1KCL6MeEj@V<-h;PqzBg~)%zQhSnfGD)>+e>j ztdLU6`;<~q=tqF3%0^46BhUm?>xrT3&Ru76oZd#U8sUzJdEyAvddj&o)fi&NbK;=* z7;954P%O!a)*1lPp+E%qY2dBKUw}8}H8Ey< zCRI$;$M2S}s}_Ph4ZPL-zOA2&n)koP4u6{xr>>AJwCQl zg9st_zJ_5bXR%+7b>|o7DL>vyl)Z23PK78j<84LW4#ZYQE7s5QXl2EzB;T#BuJVp_ zi~*3K<=udHhhA9fOaC6hHt#xN+!>h}URtM7^v5p$0BX3Rh5!Hn literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_VOID_P.c b/CMakeFiles/CheckTypeSize/SIZEOF_VOID_P.c new file mode 100644 index 000000000..f7de2f858 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_VOID_P.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(void *)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_WCHAR_T.bin b/CMakeFiles/CheckTypeSize/SIZEOF_WCHAR_T.bin new file mode 100755 index 0000000000000000000000000000000000000000..225f88b5c9764d45e8d2cad16047e08bc6033774 GIT binary patch literal 8448 zcmeHM&r4KM6uz&?6djxiB$A?D5&cGIp(5cz!pV+-967PB{}eGc*c;3yTH` z+!X#LZK5_UY*qaQ;ilaLElnc&zB}(RZzjc6i{KnM@7(X)bI-l^dv|m1`Mm%Ace7Gf zNU8N>N~tLH3&1mFqoq_QG!E5zVrayfbtV(^){9jS4@Atfs1h+s4D_j)13$7|sP>p`e>G4~{sOY2N-@i96Y^KEDO0~dV^KcxPas$eK;z3vuVL%uV2801&Ko}4PgaKhd82EP# zOvlUL;xC(CVTK*&7w0KI-HVrtKX#l7QGB7e7kNJr+Z?M{Kg(m4O{X&dVQXuPcciln zfCMe?2E04;z*1j(_XxIm*9qg!5Ut&?tPc1np|we6m7-QO+}vW4SKVrK{7&LlKC|Y| z#UMTN_9J(7PU}*CpYH3K_kzR-1HynXAPfit!hkR!3j%?n1HP>LoXsc30HRY%-HmG1kR39|%-0-yTA0_Z&X!wzq2_Bl};&EYlA_`E)_) zfR7d>PvbiQ%M@*aQYN5zwlEzL%T!KH@F{deSb&C$2`><%!M6|MD^OTAjo7G=|GfuO X)vvBzo9(cItMi3oN~cit$1eW>j6R=! literal 0 HcmV?d00001 diff --git a/CMakeFiles/CheckTypeSize/SIZEOF_WCHAR_T.c b/CMakeFiles/CheckTypeSize/SIZEOF_WCHAR_T.c new file mode 100644 index 000000000..a86cd5e23 --- /dev/null +++ b/CMakeFiles/CheckTypeSize/SIZEOF_WCHAR_T.c @@ -0,0 +1,40 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#endif + +#define SIZE (sizeof(wchar_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/CMakeFiles/cmake.check_cache b/CMakeFiles/cmake.check_cache new file mode 100644 index 000000000..3dccd7317 --- /dev/null +++ b/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/CMakeFiles/feature_tests.bin b/CMakeFiles/feature_tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..8781eab1dd90c8494185c61856ad9a422b368bc9 GIT binary patch literal 8480 zcmeHMO^6&t6t2l`%(7Xsdk~^1I{rk|h20J0uy{(;i5m_1>#j-+NU( z^!x4MU;myFqBbYQol`=H6}0cbd@AY~3Gp=A7MheduDsK@)!2TYpN>*(lnruh=Q9XO zxzpI)85QyR_0ea=@&dkz(`fU>w3He3v!U!sdq?N78BD)ah%jI3`bYEPPBG;>DRpXl zLxU&n{Z!cdgB<}eKVon2_|dPFx!pH5lE$`DJUwae%jXCFF{Vt+Gwzc}O6tg#Qwa?u zPTIR)*n6rlz&ye?k%sZSe(k+?8*g7LV^JUYRwlY@Zv;@*a5nf9V_)>S#-7>v_+u$ELX+9mElMrf1OD zkNRD^|NAeOKL6(KbN9aQe|7a`JmcIKi;KR!Uh@15^eXntdYn(kiPz!%@f`atL?5j- zTpR1_)z!6&YjDCeyoEU&OXm-kf1Ka=@aLoB^w#dKyxO?3b91}##)j_qrE0ewwN*wk zqL#|z3}2#6W>jo$lj|*x%g09b@KHVK#!w0iw5^&nk+uRRv&@-h9=2A_!M&~{jWwfy zg*;1TcF?8qsiv{Y9mv>Zn6}kXpIb8N7KE38`FrvOGny)R-!iqlC=FUXNTLG60C9%4c@e_CV`XuV8z~8#Q*&^j{IB?@TMQpHBE)wHP$eR*>F&F?({{hGTbVUFF literal 0 HcmV?d00001 diff --git a/CMakeFiles/feature_tests.c b/CMakeFiles/feature_tests.c new file mode 100644 index 000000000..e08c57e75 --- /dev/null +++ b/CMakeFiles/feature_tests.c @@ -0,0 +1,34 @@ + + const char features[] = {"" +"C_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 +"1" +#else +"0" +#endif +"c_function_prototypes\n" +"C_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_restrict\n" +"C_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +"1" +#else +"0" +#endif +"c_static_assert\n" +"C_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_variadic_macros\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/CMakeFiles/feature_tests.cxx b/CMakeFiles/feature_tests.cxx new file mode 100644 index 000000000..3e74c566e --- /dev/null +++ b/CMakeFiles/feature_tests.cxx @@ -0,0 +1,405 @@ + + const char features[] = {"" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_aggregate_nsdmi) +"1" +#else +"0" +#endif +"cxx_aggregate_default_initializers\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_alias_templates) +"1" +#else +"0" +#endif +"cxx_alias_templates\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_alignas) +"1" +#else +"0" +#endif +"cxx_alignas\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_alignas) +"1" +#else +"0" +#endif +"cxx_alignof\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_attributes) +"1" +#else +"0" +#endif +"cxx_attributes\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_attribute_deprecated\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_auto_type) +"1" +#else +"0" +#endif +"cxx_auto_type\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_binary_literals) +"1" +#else +"0" +#endif +"cxx_binary_literals\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_constexpr) +"1" +#else +"0" +#endif +"cxx_constexpr\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_contextual_conversions) +"1" +#else +"0" +#endif +"cxx_contextual_conversions\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_decltype) +"1" +#else +"0" +#endif +"cxx_decltype\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_decltype_auto\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_decltype_incomplete_return_types) +"1" +#else +"0" +#endif +"cxx_decltype_incomplete_return_types\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_default_function_template_args) +"1" +#else +"0" +#endif +"cxx_default_function_template_args\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_defaulted_functions) +"1" +#else +"0" +#endif +"cxx_defaulted_functions\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_defaulted_functions) +"1" +#else +"0" +#endif +"cxx_defaulted_move_initializers\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_delegating_constructors) +"1" +#else +"0" +#endif +"cxx_delegating_constructors\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_deleted_functions) +"1" +#else +"0" +#endif +"cxx_deleted_functions\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_digit_separators\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_enum_forward_declarations\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_explicit_conversions) +"1" +#else +"0" +#endif +"cxx_explicit_conversions\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_extended_friend_declarations\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_extern_templates\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_override_control) +"1" +#else +"0" +#endif +"cxx_final\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_func_identifier\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_generalized_initializers) +"1" +#else +"0" +#endif +"cxx_generalized_initializers\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 501 && __cplusplus > 201103L +"1" +#else +"0" +#endif +"cxx_generic_lambdas\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_inheriting_constructors) +"1" +#else +"0" +#endif +"cxx_inheriting_constructors\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_inline_namespaces\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_lambdas) +"1" +#else +"0" +#endif +"cxx_lambdas\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_init_captures) +"1" +#else +"0" +#endif +"cxx_lambda_init_captures\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_local_type_template_args) +"1" +#else +"0" +#endif +"cxx_local_type_template_args\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_long_long_type\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_noexcept) +"1" +#else +"0" +#endif +"cxx_noexcept\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_nonstatic_member_init) +"1" +#else +"0" +#endif +"cxx_nonstatic_member_init\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_nullptr) +"1" +#else +"0" +#endif +"cxx_nullptr\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_override_control) +"1" +#else +"0" +#endif +"cxx_override\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_range_for) +"1" +#else +"0" +#endif +"cxx_range_for\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_raw_string_literals) +"1" +#else +"0" +#endif +"cxx_raw_string_literals\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_reference_qualified_functions) +"1" +#else +"0" +#endif +"cxx_reference_qualified_functions\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_relaxed_constexpr) +"1" +#else +"0" +#endif +"cxx_relaxed_constexpr\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_return_type_deduction) +"1" +#else +"0" +#endif +"cxx_return_type_deduction\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_right_angle_brackets\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_rvalue_references) +"1" +#else +"0" +#endif +"cxx_rvalue_references\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_sizeof_member\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_static_assert) +"1" +#else +"0" +#endif +"cxx_static_assert\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_strong_enums) +"1" +#else +"0" +#endif +"cxx_strong_enums\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 199711L +"1" +#else +"0" +#endif +"cxx_template_template_parameters\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_thread_local) +"1" +#else +"0" +#endif +"cxx_thread_local\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_trailing_return) +"1" +#else +"0" +#endif +"cxx_trailing_return_types\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_unicode_literals) +"1" +#else +"0" +#endif +"cxx_unicode_literals\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_generalized_initializers) +"1" +#else +"0" +#endif +"cxx_uniform_initialization\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_unrestricted_unions) +"1" +#else +"0" +#endif +"cxx_unrestricted_unions\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_user_literals) +"1" +#else +"0" +#endif +"cxx_user_literals\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_variable_templates) +"1" +#else +"0" +#endif +"cxx_variable_templates\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __cplusplus >= 201103L +"1" +#else +"0" +#endif +"cxx_variadic_macros\n" +"CXX_FEATURE:" +#if ((__clang_major__ * 100) + __clang_minor__) >= 400 && __has_feature(cxx_variadic_templates) +"1" +#else +"0" +#endif +"cxx_variadic_templates\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/CMakeFiles/git-data/HEAD b/CMakeFiles/git-data/HEAD new file mode 100644 index 000000000..cb089cd89 --- /dev/null +++ b/CMakeFiles/git-data/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/CMakeFiles/git-data/grabRef.cmake b/CMakeFiles/git-data/grabRef.cmake new file mode 100644 index 000000000..7f3438ac5 --- /dev/null +++ b/CMakeFiles/git-data/grabRef.cmake @@ -0,0 +1,43 @@ +# +# Internal file for GetGitRevisionDescription.cmake +# +# Requires CMake 2.6 or newer (uses the 'function' command) +# +# Original Author: +# 2009-2010 Ryan Pavlik +# http://academic.cleardefinition.com +# Iowa State University HCI Graduate Program/VRAC +# +# Copyright Iowa State University 2009-2010. +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +set(HEAD_HASH) + +file(READ "/Users/vsc/git/yap-6.3/CMakeFiles/git-data/HEAD" HEAD_CONTENTS LIMIT 1024) + +string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) +if(HEAD_CONTENTS MATCHES "ref") + # named branch + string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") + if(EXISTS "/Users/vsc/git/yap-6.3/.git/${HEAD_REF}") + configure_file("/Users/vsc/git/yap-6.3/.git/${HEAD_REF}" "/Users/vsc/git/yap-6.3/CMakeFiles/git-data/head-ref" COPYONLY) + else() + configure_file("/Users/vsc/git/yap-6.3/.git/packed-refs" "/Users/vsc/git/yap-6.3/CMakeFiles/git-data/packed-refs" COPYONLY) + file(READ "/Users/vsc/git/yap-6.3/CMakeFiles/git-data/packed-refs" PACKED_REFS) + if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") + set(HEAD_HASH "${CMAKE_MATCH_1}") + endif() + endif() +else() + # detached HEAD + configure_file("/Users/vsc/git/yap-6.3/.git/HEAD" "/Users/vsc/git/yap-6.3/CMakeFiles/git-data/head-ref" COPYONLY) +endif() + +if(NOT HEAD_HASH) + file(READ "/Users/vsc/git/yap-6.3/CMakeFiles/git-data/head-ref" HEAD_HASH LIMIT 1024) + string(STRIP "${HEAD_HASH}" HEAD_HASH) + endif() + + diff --git a/CMakeFiles/git-data/head-ref b/CMakeFiles/git-data/head-ref new file mode 100644 index 000000000..ff22ff88d --- /dev/null +++ b/CMakeFiles/git-data/head-ref @@ -0,0 +1 @@ +880a9989c3fca9bd8184f0098049fb87795fde62 diff --git a/CMakeLists.txt b/CMakeLists.txt index 945e6a2cd..903d3e61e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) set(CMAKE_PREFIX_PATH ~/Qt/5.4/clang_64/ ${CMAKE_PREFIX_PATH}) -set(configurations Debug) +set(CMAKE_BUILD_TYPE Debug) if(POLICY CMP0042) cmake_policy(SET CMP0042 NEW) # Set MACOSX_RPATH=YES by default @@ -151,7 +151,7 @@ set(YAP_STARTUP startup.yss) string(TIMESTAMP YAP_TIMESTAMP) string( SUBSTRING ${CMAKE_SHARED_LIBRARY_SUFFIX} 1 -1 SO_EXT ) # -include_directories (H include os JIT/HPP) +include_directories (H include os utf8proc JIT/HPP) include_directories (BEFORE ${CMAKE_BINARY_DIR}) # rpath stuff, hopefully it works @@ -231,6 +231,8 @@ if (HAVE_GCC) set_property( DIRECTORY APPEND_STRING PROPERTY COMPILE_OPTIONS -fexceptions ) endif() +set_property( DIRECTORY APPEND_STRING PROPERTY -fsanitize=memory;-fsanitize-memory-track-origins=2) + message(STATUS "Original CMAKE_C_FLAGS ${CMAKE_C_FLAGS}") # Compilation Flags @@ -255,6 +257,14 @@ set (BUILD_SHARED_LIBS ON) #option (YAP_SWI_IO ON) +#utf-8 is not an option +# we use the nice UTF-8 package +#available at the Julia project +include_directories ( utf8proc ) +add_definitions (-DUTF8PROC=1) + add_subdirectory ( utf8proc ) + + macro_optional_find_package (GMP ON) macro_log_feature (GMP_FOUND "libgmp" "GNU big integers and rationals" @@ -374,7 +384,6 @@ add_subdirectory (pl) #C++ interface add_subdirectory (CXX) -#major libraries ADD_SUBDIRECTORY(library) ADD_SUBDIRECTORY(swi/library) # ADD_SUBDIRECTORY(os) @@ -384,10 +393,6 @@ option (JIT "just in Time Clause Compilation" OFF) # macro_optional_find_package (JIT OFF) # macro_optional_add_subdirectory(JIT OFF) -if (YAP_JIT) -# INCLUDE_DIRECTORIES(JIT JIT/HPP) - add_definitions (-DYAP_JIT=1) -endif() macro_optional_add_subdirectory(library/mpi) @@ -484,11 +489,10 @@ option(YAP_CONDOR #file (GLOB PACKAGES packages/*/Makefile.mak) # needed by this packages -#configure_file(packages/Makefile.defs.cmake packages/Makefile.defs) -#configure_file(packages/Dialect.defs.cmake packages/Dialect.defs) target_link_libraries(libYap + utf8proc ${GMP_LIBRARIES} ${READLINE_LIBS} ${CMAKE_DL_LIBS} @@ -530,7 +534,7 @@ configure_file ("${PROJECT_SOURCE_DIR}/YapTermConfig.h.cmake" "${PROJECT_BINARY_DIR}/YapTermConfig.h" ) configure_file("${PROJECT_SOURCE_DIR}/GitSHA1.c.in" "${PROJECT_BINARY_DIR}/GitSHA1.c" @ONLY) - ADD_SUBDIRECTORY(console/terminal) +# ADD_SUBDIRECTORY(console/terminal) install ( @@ -541,3325 +545,3 @@ install ( ) macro_display_feature_log() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 000000000..29ed36a4e --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,401 @@ + + + + + + EnvironmentId + {378dfb04-c1f5-4fa0-86e6-78c9ff000795} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + true + 80 + true + true + 1 + true + false + 1 + true + 1 + 8 + false + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + 1 + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + {272d81a6-7879-4ae0-b3cf-b19e1dbf86c9} + 0 + 0 + 0 + + false + /Users/vsc/Yap/bins/t + + + + + false + + true + Make + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + clean + + true + + true + Make + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + all + + CMakeProjectManager.CMakeBuildConfiguration + + 1 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + yap-bin + -l /Users/vsc/share/logtalk/integration/logtalk_yap -z "start_low_level_trace,{'~/Yap/logtalk3/tests/prolog/predicates/open_4/tester'}" + false + /Users/vsc/share/logtalk + 2 + + LOGTALKHOME=/Users/vsc/share/logtalk + + yap-bin + + CMakeProjectManager.CMakeRunConfiguration.yap-bin + 3768 + false + true + false + false + true + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + Problogbdd + + false + + 2 + + Problogbdd + + CMakeProjectManager.CMakeRunConfiguration.Problogbdd + 3768 + false + true + false + false + true + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + Problogbdd-Lfi + + false + + 2 + + Problogbdd-Lfi + + CMakeProjectManager.CMakeRunConfiguration.Problogbdd-Lfi + 3768 + false + true + false + false + true + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + HorusCli + + false + + 2 + + HorusCli + + CMakeProjectManager.CMakeRunConfiguration.HorusCli + 3768 + false + true + false + false + true + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + qtyap + + false + + 2 + + qtyap + + CMakeProjectManager.CMakeRunConfiguration.qtyap + 3768 + false + true + false + false + true + + 5 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/CXX/CMakeFiles/CMakeDirectoryInformation.cmake b/CXX/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..bab203dbc --- /dev/null +++ b/CXX/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.3 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/Users/vsc/git/yap-6.3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/Users/vsc/git/yap-6.3") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/CXX/CMakeFiles/Yap++.dir/DependInfo.cmake b/CXX/CMakeFiles/Yap++.dir/DependInfo.cmake new file mode 100644 index 000000000..bae358ec6 --- /dev/null +++ b/CXX/CMakeFiles/Yap++.dir/DependInfo.cmake @@ -0,0 +1,40 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/Users/vsc/git/yap-6.3/CXX/yapi.cpp" "/Users/vsc/git/yap-6.3/CXX/CMakeFiles/Yap++.dir/yapi.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "Clang") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "COROUTINING=1" + "DEBUG=1" + "DEPTH_LIMIT=1" + "HAVE_CONFIG_H" + "LOW_LEVEL_TRACER=1" + "RATIONAL_TREES=1" + "TABLING=1" + "USE_THREADEAD_CODE=1" + "_YAP_NOT_INSTALLED_=1" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "." + "H" + "include" + "os" + "JIT/HPP" + "/usr/local/include" + "OPTYap" + "CXX/H" + "CXX/include" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/Users/vsc/git/yap-6.3/CMakeFiles/libYap.dir/DependInfo.cmake" + ) diff --git a/CXX/CMakeFiles/Yap++.dir/link.txt b/CXX/CMakeFiles/Yap++.dir/link.txt new file mode 100644 index 000000000..06a2c496a --- /dev/null +++ b/CXX/CMakeFiles/Yap++.dir/link.txt @@ -0,0 +1 @@ +/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -g -dynamiclib -Wl,-headerpad_max_install_names -o libYap++.dylib -install_name @rpath/libYap++.dylib CMakeFiles/Yap++.dir/yapi.cpp.o ../libYap.6.3.4.dylib -ldl /usr/local/lib/libgmp.dylib /usr/local/opt/readline/lib/libreadline.dylib /usr/lib/libncurses.dylib -Wl,-rpath,/Users/vsc/git/yap-6.3 diff --git a/CXX/CMakeFiles/progress.marks b/CXX/CMakeFiles/progress.marks new file mode 100644 index 000000000..21e72e8ac --- /dev/null +++ b/CXX/CMakeFiles/progress.marks @@ -0,0 +1 @@ +48 diff --git a/CXX/yapi.cpp b/CXX/yapi.cpp index 02fdc5628..04e0a831e 100644 --- a/CXX/yapi.cpp +++ b/CXX/yapi.cpp @@ -7,7 +7,7 @@ extern "C" { #include "YapInterface.h" #include "blobs.h" - + char *Yap_TermToString(Term t, char *s, size_t sz, size_t *length, encoding_t encoding, int flags); void YAP_UserCPredicate(const char *, YAP_UserCPred, YAP_Arity arity); @@ -358,11 +358,11 @@ char *YAPAtom::getName(void) { // return an UTF-8 version size_t sz = 512; wchar_t * ptr = a->WStrOfAE; - int ch = -1; - char *s = new char[sz], *op = s; + utf8proc_int32_t ch = -1; + char *s = new char[sz], *op = s; while (ch) { ch = *ptr++; - utf8_put_char( op, ch ); + op += put_utf8( (unsigned char *)op, ch); } sz = strlen(s)+1; char *os = new char[sz]; @@ -374,7 +374,7 @@ char *YAPAtom::getName(void) { char *s = new char [sz+1]; return Yap_blob_to_string( RepAtom(a) , s, sz); } else { - return a->StrOfAE; + return (char *)a->StrOfAE; } } diff --git a/CXX/yapt.hh b/CXX/yapt.hh index 8b36e03c2..2512b7eed 100644 --- a/CXX/yapt.hh +++ b/CXX/yapt.hh @@ -136,7 +136,7 @@ public: // Getter: outputs the atom; YAPAtom getAtom() { return YAPAtom(AtomOfTerm( gt() )); } // Getter: outputs the name as a sequence of ISO-LATIN1 codes; - const char *text() { return AtomOfTerm( gt() )->StrOfAE; } + const char *text() { return (const char *)AtomOfTerm( gt() )->StrOfAE; } }; /** diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/ChangeLog @@ -0,0 +1 @@ + diff --git a/FindPackageLog.txt b/FindPackageLog.txt new file mode 100644 index 000000000..d5344dc36 --- /dev/null +++ b/FindPackageLog.txt @@ -0,0 +1,35 @@ + +-- The following OPTIONAL packages have been found: + + * GMP + * Readline + * MPI + * Gecode + * ODBC , "Use ODBC Data-Base Interface " , + "" + * Sqlite3 + * PostgreSQL , "PostgreSQL Data-Base " , + "" + * PythonInterp + * SWIG + * PythonLibs + * Java , "Use Java System" , + "" + "" + * JNI , "Use Java Native Interface" , + "" + * CUDD , "Use CUDD Library" , + "" + * PkgConfig + * RAPTOR , "Use RAPTOR Library" , + "" + * Qt5Gui (required version >= 5.4.2) + * Qt5Widgets + * Qt5Core + +-- The following OPTIONAL packages have not been found: + + * MySQL , "Use MYSQL Data-Base Interface " , + "" + * R , "Use R Environment" , + "" diff --git a/GitSHA1.c b/GitSHA1.c new file mode 100644 index 000000000..f3ddb2b45 --- /dev/null +++ b/GitSHA1.c @@ -0,0 +1,2 @@ +#define GIT_SHA1 "880a9989c3fca9bd8184f0098049fb87795fde62" +const char g_GIT_SHA1[] = GIT_SHA1; diff --git a/H/Atoms.h b/H/Atoms.h index e760daf51..b20265568 100644 --- a/H/Atoms.h +++ b/H/Atoms.h @@ -59,7 +59,8 @@ typedef struct AtomEntryStruct #endif union { - char uStrOfAE[MIN_ARRAY]; /* representation of atom as a string */ + unsigned char uUStrOfAE[MIN_ARRAY]; /* representation of atom as a string */ + char uStrOfAE[MIN_ARRAY]; /* representation of atom as a string */ wchar_t uWStrOfAE[MIN_ARRAY]; /* representation of atom as a string */ struct atom_blob blob[MIN_ARRAY]; } rep; @@ -76,13 +77,15 @@ typedef struct ExtraAtomEntryStruct #endif union { - char uStrOfAE[4]; /* representation of atom as a string */ + unsigned char uUStrOfAE[4]; /* representation of atom as a string */ + char uStrOfAE[4]; /* representation of atom as a string */ wchar_t uWStrOfAE[2]; /* representation of atom as a string */ struct atom_blob blob[2]; } rep; } ExtraAtomEntry; +#define UStrOfAE rep.uUStrOfAE #define StrOfAE rep.uStrOfAE #define WStrOfAE rep.uWStrOfAE diff --git a/H/TermExt.h b/H/TermExt.h index cda5a0873..a0843d43d 100755 --- a/H/TermExt.h +++ b/H/TermExt.h @@ -352,28 +352,51 @@ IsLongIntTerm (Term t) #define MkStringTerm(i) __MkStringTerm((i) PASS_REGS) -INLINE_ONLY inline EXTERN Term __MkStringTerm (const char *s USES_REGS); +INLINE_ONLY inline EXTERN Term __MkStringTerm (const char *s USES_REGS); INLINE_ONLY inline EXTERN Term -__MkStringTerm (const char *s USES_REGS) +__MkStringTerm (const char *s USES_REGS) { Term t = AbsAppl(HR); - size_t sz = ALIGN_BY_TYPE(strlen(s)+1,CELL); + size_t sz = ALIGN_BY_TYPE(strlen((char *)s)+1,CELL); HR[0] = (CELL) FunctorString; HR[1] = (CELL) sz; - strcpy((char *)(HR+2), s); + strcpy((char *)(HR+2), (const char *)s); + HR[2+sz] = EndSpecials; + HR += 3+sz; + return t; +} + +INLINE_ONLY inline EXTERN Term __MkUStringTerm (const unsigned char *s USES_REGS); + +INLINE_ONLY inline EXTERN Term +__MkUStringTerm (const unsigned char *s USES_REGS) +{ + Term t = AbsAppl(HR); + size_t sz = ALIGN_BY_TYPE(strlen((char *)s)+1,CELL); + HR[0] = (CELL) FunctorString; + HR[1] = (CELL) sz; + strcpy((char *)(HR+2), (const char *)s); HR[2+sz] = EndSpecials; HR += 3+sz; return t; } -INLINE_ONLY inline EXTERN const char *StringOfTerm (Term t); +INLINE_ONLY inline EXTERN const unsigned char *UStringOfTerm (Term t); -INLINE_ONLY inline EXTERN const char * +INLINE_ONLY inline EXTERN const unsigned char * +UStringOfTerm (Term t) +{ + return (const unsigned char *) (RepAppl (t)+2); +} + +INLINE_ONLY inline EXTERN const char *StringOfTerm (Term t); + +INLINE_ONLY inline EXTERN const char * StringOfTerm (Term t) { - return (const char *) (RepAppl (t)+2); + return (const char *) (RepAppl (t)+2); } diff --git a/H/YapAppliedOpcodes.h b/H/YapAppliedOpcodes.h new file mode 100644 index 000000000..96d1c41d6 --- /dev/null +++ b/H/YapAppliedOpcodes.h @@ -0,0 +1,418 @@ + + /* This file was generated automatically by "yap -L misc/buildops" + please do not update */ + + OPCODE(Ystop ,l) + OPCODE(Nstop ,e) + OPCODE(try_me ,Otapl) + OPCODE(retry_me ,Otapl) + OPCODE(trust_me ,Otapl) + OPCODE(enter_profiling ,p) + OPCODE(retry_profiled ,p) + OPCODE(profiled_retry_me ,Otapl) + OPCODE(profiled_trust_me ,Otapl) + OPCODE(profiled_retry_logical ,OtaLl) + OPCODE(profiled_trust_logical ,OtILl) + OPCODE(count_call ,p) + OPCODE(count_retry ,p) + OPCODE(count_retry_me ,Otapl) + OPCODE(count_trust_me ,Otapl) + OPCODE(count_retry_logical ,OtaLl) + OPCODE(count_trust_logical ,OtILl) + OPCODE(lock_lu ,p) + OPCODE(unlock_lu ,e) + OPCODE(alloc_for_logical_pred ,L) + OPCODE(copy_idb_term ,e) + OPCODE(unify_idb_term ,e) + OPCODE(ensure_space ,Osbpa) + OPCODE(spy_or_trymark ,Otapl) + OPCODE(try_and_mark ,Otapl) + OPCODE(count_retry_and_mark ,Otapl) + OPCODE(profiled_retry_and_mark ,Otapl) + OPCODE(retry_and_mark ,Otapl) + OPCODE(trust_fail ,e) + OPCODE(op_fail ,e) + OPCODE(cut ,s) + OPCODE(cut_t ,s) + OPCODE(cut_e ,s) + OPCODE(save_b_x ,x) + OPCODE(save_b_y ,y) + OPCODE(commit_b_x ,xps) + OPCODE(commit_b_y ,yps) + OPCODE(execute ,pp) + OPCODE(dexecute ,pp) + OPCODE(fcall ,Osbpp) + OPCODE(call ,Osbpp) + OPCODE(procceed ,p) + OPCODE(allocate ,e) + OPCODE(deallocate ,p) +#ifdef BEAM + OPCODE(retry_eam ,e) +#endif +#ifdef BEAM + OPCODE(run_eam ,os) +#endif + OPCODE(get_x_var ,xx) + OPCODE(get_y_var ,yx) + OPCODE(get_yy_var ,yyxx) + OPCODE(get_x_val ,xx) + OPCODE(get_y_val ,yx) + OPCODE(get_atom ,xc) + OPCODE(get_2atoms ,cc) + OPCODE(get_3atoms ,ccc) + OPCODE(get_4atoms ,cccc) + OPCODE(get_5atoms ,ccccc) + OPCODE(get_6atoms ,cccccc) + OPCODE(get_list ,x) + OPCODE(get_struct ,xfa) + OPCODE(get_float ,xd) + OPCODE(get_longint ,xi) + OPCODE(get_bigint ,xN) + OPCODE(get_dbterm ,xD) + OPCODE(glist_valx ,xx) + OPCODE(glist_valy ,yx) + OPCODE(gl_void_varx ,xx) + OPCODE(gl_void_vary ,yx) + OPCODE(gl_void_valx ,xx) + OPCODE(gl_void_valy ,yx) + OPCODE(unify_x_var ,ox) + OPCODE(unify_x_var_write ,ox) + OPCODE(unify_l_x_var ,ox) + OPCODE(unify_l_x_var_write ,ox) + OPCODE(unify_x_var2 ,oxx) + OPCODE(unify_x_var2_write ,oxx) + OPCODE(unify_l_x_var2 ,oxx) + OPCODE(unify_l_x_var2_write ,oxx) + OPCODE(unify_y_var ,oy) + OPCODE(unify_y_var_write ,oy) + OPCODE(unify_l_y_var ,oy) + OPCODE(unify_l_y_var_write ,oy) + OPCODE(unify_x_val ,ox) + OPCODE(unify_x_val_write ,ox) + OPCODE(unify_l_x_val ,ox) + OPCODE(unify_l_x_val_write ,ox) + OPCODE(unify_y_val ,oy) + OPCODE(unify_y_val_write ,oy) + OPCODE(unify_l_y_val ,oy) + OPCODE(unify_l_y_val_write ,oy) + OPCODE(unify_x_loc ,ox) + OPCODE(unify_x_loc_write ,ox) + OPCODE(unify_l_x_loc ,ox) + OPCODE(unify_l_x_loc_write ,ox) + OPCODE(unify_y_loc ,oy) + OPCODE(unify_y_loc_write ,oy) + OPCODE(unify_l_y_loc ,oy) + OPCODE(unify_l_y_loc_write ,oy) + OPCODE(unify_void ,o) + OPCODE(unify_void_write ,o) + OPCODE(unify_l_void ,o) + OPCODE(unify_l_void_write ,o) + OPCODE(unify_n_voids ,os) + OPCODE(unify_n_voids_write ,os) + OPCODE(unify_l_n_voids ,os) + OPCODE(unify_l_n_voids_write ,os) + OPCODE(unify_atom ,oc) + OPCODE(unify_atom_write ,oc) + OPCODE(unify_l_atom ,oc) + OPCODE(unify_l_atom_write ,oc) + OPCODE(unify_n_atoms ,osc) + OPCODE(unify_n_atoms_write ,osc) + OPCODE(unify_float ,od) + OPCODE(unify_float_write ,od) + OPCODE(unify_l_float ,od) + OPCODE(unify_l_float_write ,od) + OPCODE(unify_longint ,oi) + OPCODE(unify_longint_write ,oi) + OPCODE(unify_l_longint ,oi) + OPCODE(unify_l_longint_write ,oi) + OPCODE(unify_bigint ,oN) + OPCODE(unify_l_bigint ,oN) + OPCODE(unify_dbterm ,oD) + OPCODE(unify_l_dbterm ,oD) + OPCODE(unify_list ,o) + OPCODE(unify_list_write ,o) + OPCODE(unify_l_list ,o) + OPCODE(unify_l_list_write ,o) + OPCODE(unify_struct ,ofa) + OPCODE(unify_struct_write ,ofa) + OPCODE(unify_l_struc ,ofa) + OPCODE(unify_l_struc_write ,ofa) + OPCODE(put_x_var ,xx) + OPCODE(put_y_var ,yx) + OPCODE(put_x_val ,xx) + OPCODE(put_xx_val ,xxxx) + OPCODE(put_y_val ,yx) + OPCODE(put_y_vals ,yyxx) + OPCODE(put_unsafe ,yx) + OPCODE(put_atom ,xc) + OPCODE(put_dbterm ,xD) + OPCODE(put_bigint ,xN) + OPCODE(put_float ,xd) + OPCODE(put_longint ,xi) + OPCODE(put_list ,x) + OPCODE(put_struct ,xfa) + OPCODE(write_x_var ,x) + OPCODE(write_void ,e) + OPCODE(write_n_voids ,s) + OPCODE(write_y_var ,y) + OPCODE(write_x_val ,x) + OPCODE(write_x_loc ,x) + OPCODE(write_y_val ,y) + OPCODE(write_y_loc ,y) + OPCODE(write_atom ,c) + OPCODE(write_bigint ,N) + OPCODE(write_dbterm ,D) + OPCODE(write_float ,d) + OPCODE(write_longint ,i) + OPCODE(write_n_atoms ,sc) + OPCODE(write_list ,e) + OPCODE(write_l_list ,e) + OPCODE(write_struct ,fa) + OPCODE(write_l_struc ,fa) + OPCODE(save_pair_x ,ox) + OPCODE(save_pair_x_write ,ox) + OPCODE(save_pair_y ,oy) + OPCODE(save_pair_y_write ,oy) + OPCODE(save_appl_x ,ox) + OPCODE(save_appl_x_write ,ox) + OPCODE(save_appl_y ,oy) + OPCODE(save_appl_y_write ,oy) + OPCODE(jump ,l) + OPCODE(move_back ,l) + OPCODE(skip ,l) + OPCODE(either ,Osblp) + OPCODE(or_else ,Osblp) + OPCODE(pop_n ,s) + OPCODE(pop ,e) + OPCODE(call_cpred ,Osbpp) + OPCODE(execute_cpred ,pp) + OPCODE(call_usercpred ,Osbpp) + OPCODE(call_c_wfail ,slp) + OPCODE(try_c ,OtapFs) + OPCODE(retry_c ,OtapFs) +#ifdef CUT_C + OPCODE(cut_c ,OtapFs) +#endif + OPCODE(try_userc ,OtapFs) + OPCODE(retry_userc ,OtapFs) +#ifdef CUT_C + OPCODE(cut_userc ,OtapFs) +#endif + OPCODE(lock_pred ,e) + OPCODE(index_pred ,e) +#ifdef THREADS + OPCODE(thread_local ,e) +#endif + OPCODE(expand_index ,e) + OPCODE(expand_clauses ,sssllp) + OPCODE(undef_p ,e) + OPCODE(spy_pred ,e) + OPCODE(try_clause ,Otapl) + OPCODE(try_clause2 ,l) + OPCODE(try_clause3 ,l) + OPCODE(try_clause4 ,l) + OPCODE(retry ,Otapl) + OPCODE(retry2 ,l) + OPCODE(retry3 ,l) + OPCODE(retry4 ,l) + OPCODE(trust ,Otapl) + OPCODE(try_in ,l) + OPCODE(enter_lu_pred ,Illss) + OPCODE(try_logical ,OtaLl) + OPCODE(retry_logical ,OtaLl) + OPCODE(trust_logical ,OtILl) + OPCODE(user_switch ,lp) + OPCODE(switch_on_type ,llll) + OPCODE(switch_list_nl ,ollll) + OPCODE(switch_on_arg_type ,xllll) + OPCODE(switch_on_sub_arg_type ,sllll) + OPCODE(jump_if_var ,l) + OPCODE(jump_if_nonvar ,xll) + OPCODE(if_not_then ,clll) + OPCODE(switch_on_func ,sssl) + OPCODE(switch_on_cons ,sssl) + OPCODE(go_on_func ,sssl) + OPCODE(go_on_cons ,sssl) + OPCODE(if_func ,sssl) + OPCODE(if_cons ,sssl) + OPCODE(index_dbref ,e) + OPCODE(index_blob ,e) + OPCODE(index_long ,e) +#if YAP_JIT + OPCODE(jit_handler ,jhc) +#endif + OPCODE(p_atom_x ,xl) + OPCODE(p_atom_y ,yl) + OPCODE(p_atomic_x ,xl) + OPCODE(p_atomic_y ,yl) + OPCODE(p_integer_x ,xl) + OPCODE(p_integer_y ,yl) + OPCODE(p_nonvar_x ,xl) + OPCODE(p_nonvar_y ,yl) + OPCODE(p_number_x ,xl) + OPCODE(p_number_y ,yl) + OPCODE(p_var_x ,xl) + OPCODE(p_var_y ,yl) + OPCODE(p_db_ref_x ,xl) + OPCODE(p_db_ref_y ,yl) + OPCODE(p_primitive_x ,xl) + OPCODE(p_primitive_y ,yl) + OPCODE(p_compound_x ,xl) + OPCODE(p_compound_y ,yl) + OPCODE(p_float_x ,xl) + OPCODE(p_float_y ,yl) + OPCODE(p_plus_vv ,xxx) + OPCODE(p_plus_vc ,xxn) + OPCODE(p_plus_y_vv ,yxx) + OPCODE(p_plus_y_vc ,yxn) + OPCODE(p_minus_vv ,xxx) + OPCODE(p_minus_cv ,xxn) + OPCODE(p_minus_y_vv ,yxx) + OPCODE(p_minus_y_cv ,yxn) + OPCODE(p_times_vv ,xxx) + OPCODE(p_times_vc ,xxn) + OPCODE(p_times_y_vv ,yxx) + OPCODE(p_times_y_vc ,yxn) + OPCODE(p_div_vv ,xxx) + OPCODE(p_div_vc ,xxn) + OPCODE(p_div_cv ,xxn) + OPCODE(p_div_y_vv ,yxx) + OPCODE(p_div_y_vc ,yxn) + OPCODE(p_div_y_cv ,yxn) + OPCODE(p_and_vv ,xxx) + OPCODE(p_and_vc ,xxn) + OPCODE(p_and_y_vv ,yxx) + OPCODE(p_and_y_vc ,yxn) + OPCODE(p_or_vv ,xxx) + OPCODE(p_or_vc ,xxn) + OPCODE(p_or_y_vv ,yxx) + OPCODE(p_or_y_vc ,yxn) + OPCODE(p_sll_vv ,xxx) + OPCODE(p_sll_vc ,xxn) + OPCODE(p_sll_cv ,xxn) + OPCODE(p_sll_y_vv ,yxx) + OPCODE(p_sll_y_vc ,yxn) + OPCODE(p_sll_y_cv ,yxn) + OPCODE(p_slr_vv ,xxx) + OPCODE(p_slr_vc ,xxn) + OPCODE(p_slr_cv ,xxn) + OPCODE(p_slr_y_vv ,yxx) + OPCODE(p_slr_y_vc ,yxn) + OPCODE(p_slr_y_cv ,yxn) + OPCODE(call_bfunc_xx ,plxxs) + OPCODE(call_bfunc_yx ,plxys) + OPCODE(call_bfunc_xy ,plxys) + OPCODE(call_bfunc_yy ,plyys) + OPCODE(p_equal ,e) + OPCODE(p_dif ,l) + OPCODE(p_eq ,l) + OPCODE(p_arg_vv ,xxx) + OPCODE(p_arg_cv ,xxn) + OPCODE(p_arg_y_vv ,yxx) + OPCODE(p_arg_y_cv ,yxn) + OPCODE(p_func2s_vv ,xxx) + OPCODE(p_func2s_cv ,xxc) + OPCODE(p_func2s_vc ,xxn) + OPCODE(p_func2s_y_vv ,yxx) + OPCODE(p_func2s_y_cv ,yxn) + OPCODE(p_func2s_y_vc ,yxn) + OPCODE(p_func2f_xx ,xxx) + OPCODE(p_func2f_xy ,xxy) + OPCODE(p_func2f_yx ,yxx) + OPCODE(p_func2f_yy ,yyx) + OPCODE(p_functor ,e) + OPCODE(p_execute2 ,Osbpp) + OPCODE(p_execute ,Osbmp) + OPCODE(p_execute_tail ,Osbpp) +#ifdef YAPOR + OPCODE(getwork_first_time ,e) + OPCODE(getwork ,Otapl) + OPCODE(getwork_seq ,Otapl) + OPCODE(sync ,Otapl) +#endif +#ifdef TABLING +#ifdef TABLING_INNER_CUTS + OPCODE(clause_with_cut ,e) +#endif + OPCODE(table_load_answer ,Otapl) + OPCODE(table_try_answer ,Otapl) + OPCODE(table_try_single ,Otapl) + OPCODE(table_try_me ,Otapl) + OPCODE(table_try ,Otapl) + OPCODE(table_retry_me ,Otapl) + OPCODE(table_retry ,Otapl) + OPCODE(table_trust_me ,Otapl) + OPCODE(table_trust ,Otapl) + OPCODE(table_new_answer ,s) + OPCODE(table_answer_resolution ,Otapl) + OPCODE(table_completion ,Otapl) +#ifdef THREADS_CONSUMER_SHARING + OPCODE(table_answer_resolution_completion,Otapl) +#endif + OPCODE(trie_do_var ,e) + OPCODE(trie_trust_var ,e) + OPCODE(trie_try_var ,e) + OPCODE(trie_retry_var ,e) + OPCODE(trie_do_var_in_pair ,e) + OPCODE(trie_trust_var_in_pair ,e) + OPCODE(trie_try_var_in_pair ,e) + OPCODE(trie_retry_var_in_pair ,e) + OPCODE(trie_do_val ,e) + OPCODE(trie_trust_val ,e) + OPCODE(trie_try_val ,e) + OPCODE(trie_retry_val ,e) + OPCODE(trie_do_val_in_pair ,e) + OPCODE(trie_trust_val_in_pair ,e) + OPCODE(trie_try_val_in_pair ,e) + OPCODE(trie_retry_val_in_pair ,e) + OPCODE(trie_do_atom ,e) + OPCODE(trie_trust_atom ,e) + OPCODE(trie_try_atom ,e) + OPCODE(trie_retry_atom ,e) + OPCODE(trie_do_atom_in_pair ,e) + OPCODE(trie_trust_atom_in_pair ,e) + OPCODE(trie_try_atom_in_pair ,e) + OPCODE(trie_retry_atom_in_pair ,e) + OPCODE(trie_do_null ,e) + OPCODE(trie_trust_null ,e) + OPCODE(trie_try_null ,e) + OPCODE(trie_retry_null ,e) + OPCODE(trie_do_null_in_pair ,e) + OPCODE(trie_trust_null_in_pair ,e) + OPCODE(trie_try_null_in_pair ,e) + OPCODE(trie_retry_null_in_pair ,e) + OPCODE(trie_do_pair ,e) + OPCODE(trie_trust_pair ,e) + OPCODE(trie_try_pair ,e) + OPCODE(trie_retry_pair ,e) + OPCODE(trie_do_appl ,e) + OPCODE(trie_trust_appl ,e) + OPCODE(trie_try_appl ,e) + OPCODE(trie_retry_appl ,e) + OPCODE(trie_do_appl_in_pair ,e) + OPCODE(trie_trust_appl_in_pair ,e) + OPCODE(trie_try_appl_in_pair ,e) + OPCODE(trie_retry_appl_in_pair ,e) + OPCODE(trie_do_extension ,e) + OPCODE(trie_trust_extension ,e) + OPCODE(trie_try_extension ,e) + OPCODE(trie_retry_extension ,e) + OPCODE(trie_do_double ,e) + OPCODE(trie_trust_double ,e) + OPCODE(trie_try_double ,e) + OPCODE(trie_retry_double ,e) + OPCODE(trie_do_longint ,e) + OPCODE(trie_trust_longint ,e) + OPCODE(trie_try_longint ,e) + OPCODE(trie_retry_longint ,e) + OPCODE(trie_do_gterm ,e) + OPCODE(trie_trust_gterm ,e) + OPCODE(trie_try_gterm ,e) + OPCODE(trie_retry_gterm ,e) +#endif + /* this instruction is hardwired */ +#ifdef YAPOR + OPCODE(or_last ,sblp) +#elseIlllllllllllllllllllllllllllllllllllllllllllllllllll + OPCODE(or_last ,p) +#endif diff --git a/H/YapFlags.h b/H/YapFlags.h index 4e6633f5d..142997443 100644 --- a/H/YapFlags.h +++ b/H/YapFlags.h @@ -172,7 +172,7 @@ typedef struct struct_param2 { } param2_t; typedef struct { - const char *name; + char *name; bool writable; flag_func def; const char *init; @@ -180,8 +180,8 @@ typedef struct { } flag_info; -typedef struct { - const char *name; +typedef struct { + char *name; flag_func def; const char *init; } arg_info; @@ -314,7 +314,7 @@ static inline int indexingMode(void) { } static inline const char *floatFormat(void) { - return RepAtom(AtomOfTerm(GLOBAL_Flags[FLOAT_FORMAT_FLAG].at))->StrOfAE; + return RepAtom(AtomOfTerm(GLOBAL_Flags[FLOAT_FORMAT_FLAG].at))->rep.uStrOfAE; } static inline size_t indexingDepth(void) { diff --git a/H/YapGFlagInfo.h b/H/YapGFlagInfo.h index b26aa674d..d34e44d6e 100644 --- a/H/YapGFlagInfo.h +++ b/H/YapGFlagInfo.h @@ -374,7 +374,13 @@ YAP is booted with the `-q` or `-L` flag. */ YAP_FLAG( VERBOSE_AUTOLOAD_FLAG, "verbose_autoload", true, boolean, "false" , NULL ), -YAP_FLAG( VERBOSE_FILE_SEARCH_FLAG, "verbose_file_search", true, boolean, "false" , NULL ), +YAP_FLAG( VERBOSE_FILE_SEARCH_FLAG, "verbose_file_search", true, boolean, "false" , NULL ), /**< `verbose_file_search ` + + If `true` allow printing of informational messages when +searching for file names. If `false` disable printing these messages. It +is `false` by default except if YAP is booted with the `-L` +flag. + */ YAP_FLAG( VERBOSE_LOAD_FLAG, "verbose_load", true, isatom, "normal" , NULL ), /**< `verbose_load ` If `true` allow printing of informational messages when diff --git a/H/YapTags.h b/H/YapTags.h index e727aa97a..00bfedc4e 100644 --- a/H/YapTags.h +++ b/H/YapTags.h @@ -256,9 +256,9 @@ AtomOfTerm (Term t) INLINE_ONLY inline EXTERN Term MkAtomTerm (Atom); INLINE_ONLY inline EXTERN Term -MkAtomTerm (Atom a) +MkAtomTerm (Atom at) { - return (Term) (TAGGEDA ((CELL)AtomTag, (CELL) (a))); + return (Term) (TAGGEDA ((CELL)AtomTag, (CELL) (at))); } diff --git a/H/YapText.h b/H/YapText.h index 52806bfdd..7c3028f55 100644 --- a/H/YapText.h +++ b/H/YapText.h @@ -29,7 +29,100 @@ */ #include "Yap.h" -#include "pl-utf8.h" +#include "utf8proc.h" + +inline static utf8proc_ssize_t get_utf8(utf8proc_uint8_t * ptr, utf8proc_int32_t *valp) { return utf8proc_iterate( ptr, -1, valp ); } + +inline static utf8proc_ssize_t put_utf8(utf8proc_uint8_t * ptr, utf8proc_int32_t val) { return utf8proc_encode_char( val, ptr ); } + +inline static utf8proc_uint8_t *skip_utf8( utf8proc_uint8_t * pt, utf8proc_ssize_t n) { + utf8proc_ssize_t i; + utf8proc_int32_t b; + for (i=0;i< n; i++) { + utf8proc_ssize_t l = utf8proc_iterate( pt, -1, &b ); + if (b==0) return pt; + pt += l; + } + return pt; +} + +inline static utf8proc_ssize_t strlen_utf8(const utf8proc_uint8_t * pt) { + utf8proc_ssize_t rc =0; + utf8proc_int32_t b; + while (true) { + utf8proc_ssize_t l = utf8proc_iterate( pt, -1, &b ); + if (b==0) return rc; + pt += l; + rc += l; + } + return rc; +} + +inline static utf8proc_ssize_t strlen_latin_utf8(const unsigned char * pt) { + utf8proc_ssize_t rc =0; + utf8proc_uint8_t b; + while (true) { + utf8proc_ssize_t l = utf8proc_encode_char( *pt, &b ); + if (b==0) return rc; + pt++; + rc += l; + } + return rc; +} + +inline static utf8proc_ssize_t strnlen_latin_utf8(const unsigned char * pt, size_t max) { + utf8proc_ssize_t rc =0; + utf8proc_uint8_t b; + while (true) { + utf8proc_ssize_t l = utf8proc_encode_char( *pt, &b ); + if (b==0) return rc; + pt++; + rc += l; + if (--max == 0) return rc; + } + return rc; +} + +inline static utf8proc_ssize_t strlen_ucs2_utf8(const wchar_t * pt) { + utf8proc_ssize_t rc =0; + utf8proc_uint8_t b; + while (true) { + utf8proc_ssize_t l = utf8proc_encode_char( *pt, &b ); + if (b==0) return rc; + pt ++; + rc += l; + } + return rc; +} + +inline static utf8proc_ssize_t strnlen_ucs2_utf8(const wchar_t * pt, size_t max) { + utf8proc_ssize_t rc =0; + utf8proc_uint8_t b; + while (true) { + utf8proc_ssize_t l = utf8proc_encode_char( *pt, &b ); + if (b==0) return rc; + pt ++; + rc += l; + if (--max == 0) return rc; + } + return rc; +} + +inline static int cmpn_utf8(const utf8proc_uint8_t * pt1, const utf8proc_uint8_t * pt2, utf8proc_ssize_t n) { + utf8proc_ssize_t i; + utf8proc_int32_t b; + for (i=0;i< n; i++) { + if (pt1[0] != pt2[0]) return pt1[0]- pt2[0]; + utf8proc_ssize_t l = utf8proc_iterate( pt1, -1, &b ); + if (l == 2) { if (pt1[1] != pt2[1]) return pt1[1]- pt2[1]; } + else if (l == 3) { if (pt1[2] != pt2[2]) return pt1[2]- pt2[2]; } + else if (l == 4) { if (pt1[3] != pt2[3]) return pt1[3]- pt2[3]; } + pt1 += l; + pt2 += l; + + } + return 0; +} const char *Yap_tokRep(TokEntry *tokptr); @@ -72,6 +165,7 @@ typedef union { const char *c0; const wchar_t *w0; char *c; + unsigned char *uc; wchar_t *w; Atom a; size_t l; @@ -100,14 +194,14 @@ init_tstring( USES_REGS1 ) { return t; } -static inline char * +static inline unsigned char * buf_from_tstring( CELL *p ) { - char *out = (char *)(p + 2); + unsigned char *out = (unsigned char *)(p + 2); return out; } static inline void -close_tstring( char *p USES_REGS ) { +close_tstring( unsigned char *p USES_REGS ) { CELL *szp = HR+1; HR = (CELL *)ALIGN_BY_TYPE( p ,CELL); *szp = (HR - szp)-1; @@ -345,12 +439,13 @@ Yap_AtomicToTBQ(Term t0, Term mod USES_REGS) } static inline Atom -Yap_CharsToAtom( const char *s USES_REGS ) +Yap_CharsToAtom( const char *s, encoding_t enc USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.sz = 0; + inp.enc = enc; inp.type = YAP_STRING_CHARS; out.type = YAP_STRING_ATOM; if (!Yap_CVT_Text(&inp, &out PASS_REGS)) @@ -359,12 +454,13 @@ Yap_CharsToAtom( const char *s USES_REGS ) } static inline Term -Yap_CharsToListOfAtoms( const char *s USES_REGS ) +Yap_CharsToListOfAtoms( const char *s, encoding_t enc USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.sz = 0; + inp.enc = enc; inp.type = YAP_STRING_CHARS; out.type = YAP_STRING_ATOMS; if (!Yap_CVT_Text(&inp, &out PASS_REGS)) @@ -373,12 +469,13 @@ Yap_CharsToListOfAtoms( const char *s USES_REGS ) } static inline Term -Yap_CharsToListOfCodes( const char *s USES_REGS ) +Yap_CharsToListOfCodes( const char *s, encoding_t enc USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.sz = 0; + inp.enc = enc; inp.type = YAP_STRING_CHARS; out.type = YAP_STRING_CODES; if (!Yap_CVT_Text(&inp, &out PASS_REGS)) @@ -387,13 +484,29 @@ Yap_CharsToListOfCodes( const char *s USES_REGS ) } static inline Term -Yap_CharsToDiffListOfCodes( const char *s, Term tail USES_REGS ) +Yap_UTF8ToListOfCodes( const char *s USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.sz = 0; inp.type = YAP_STRING_CHARS; + inp.enc = ENC_ISO_UTF8; + out.type = YAP_STRING_CODES; + if (!Yap_CVT_Text(&inp, &out PASS_REGS)) + return 0L; + return out.val.t; +} + +static inline Term +Yap_CharsToDiffListOfCodes( const char *s, Term tail, encoding_t enc USES_REGS ) +{ + seq_tv_t inp, out; + + inp.val.c0 = s; + inp.sz = 0; + inp.enc = enc; + inp.type = YAP_STRING_CHARS; out.type = YAP_STRING_DIFF|YAP_STRING_CODES; out.dif = tail; if (!Yap_CVT_Text(&inp, &out PASS_REGS)) @@ -402,12 +515,44 @@ Yap_CharsToDiffListOfCodes( const char *s, Term tail USES_REGS ) } static inline Term -Yap_CharsToString( const char *s USES_REGS ) +Yap_UTF8ToDiffListOfCodes( const char *s, Term tail USES_REGS ) +{ + seq_tv_t inp, out; + + inp.val.c0 = s; + inp.sz = 0; + inp.type = YAP_STRING_CHARS; + inp.enc = ENC_ISO_UTF8; + out.type = YAP_STRING_DIFF|YAP_STRING_CODES; + out.dif = tail; + if (!Yap_CVT_Text(&inp, &out PASS_REGS)) + return 0L; + return out.val.t; +} + +static inline Term +Yap_WCharsToDiffListOfCodes( const wchar_t *s, Term tail USES_REGS ) +{ + seq_tv_t inp, out; + + inp.val.w0 = s; + inp.sz = 0; + inp.type = YAP_STRING_WCHARS; + out.type = YAP_STRING_DIFF|YAP_STRING_CODES; + out.dif = tail; + if (!Yap_CVT_Text(&inp, &out PASS_REGS)) + return 0L; + return out.val.t; +} + +static inline Term +Yap_CharsToString( const char *s, encoding_t enc USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.sz = 0; + inp.enc = enc; inp.type = YAP_STRING_CHARS; out.type = YAP_STRING_STRING; if (!Yap_CVT_Text(&inp, &out PASS_REGS)) @@ -437,7 +582,7 @@ Yap_AtomToUTF8Text( Atom at, const char *s USES_REGS ) } static inline Term -Yap_CharsToTDQ( const char *s, Term mod USES_REGS ) +Yap_CharsToTDQ( const char *s, Term mod, encoding_t enc USES_REGS ) { seq_tv_t inp, out; @@ -445,6 +590,7 @@ Yap_CharsToTDQ( const char *s, Term mod USES_REGS ) inp.sz = 0; inp.type = YAP_STRING_CHARS; inp.mod = mod; + inp.enc = enc; out.type = mod_to_type(mod PASS_REGS); if (!Yap_CVT_Text(&inp, &out PASS_REGS)) return 0L; @@ -454,7 +600,7 @@ Yap_CharsToTDQ( const char *s, Term mod USES_REGS ) } static inline Term -Yap_CharsToTBQ( const char *s, Term mod USES_REGS ) +Yap_CharsToTBQ( const char *s, Term mod, encoding_t enc USES_REGS ) { seq_tv_t inp, out; @@ -462,6 +608,7 @@ Yap_CharsToTBQ( const char *s, Term mod USES_REGS ) inp.sz = 0; inp.type = YAP_STRING_CHARS; inp.mod = mod; + inp.enc = enc; out.type = mod_to_bqtype(mod PASS_REGS); if (!Yap_CVT_Text(&inp, &out PASS_REGS)) return 0L; @@ -646,13 +793,14 @@ YapListToTBQ(Term t0, Term mod USES_REGS) } static inline Atom -Yap_NCharsToAtom( const char *s, size_t len USES_REGS ) +Yap_NCharsToAtom( const char *s, size_t len, encoding_t enc USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.sz = len; inp.type = YAP_STRING_CHARS|YAP_STRING_NCHARS; + inp.enc = enc; out.type = YAP_STRING_ATOM; out.max = len; if (!Yap_CVT_Text(&inp, &out PASS_REGS)) @@ -661,12 +809,13 @@ Yap_NCharsToAtom( const char *s, size_t len USES_REGS ) } static inline Term -Yap_CharsToDiffListOfAtoms( const char *s, Term tail USES_REGS ) +Yap_CharsToDiffListOfAtoms( const char *s, encoding_t enc, Term tail USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.type = YAP_STRING_CHARS; + inp.enc = enc; out.type = YAP_STRING_ATOMS|YAP_STRING_DIFF; out.dif = tail; if (!Yap_CVT_Text(&inp, &out PASS_REGS)) @@ -676,13 +825,14 @@ Yap_CharsToDiffListOfAtoms( const char *s, Term tail USES_REGS ) static inline Term -Yap_NCharsToListOfCodes( const char *s, size_t len USES_REGS ) +Yap_NCharsToListOfCodes( const char *s, size_t len, encoding_t enc USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.sz = len; inp.type = YAP_STRING_CHARS|YAP_STRING_NCHARS; + inp.enc = enc; out.type = YAP_STRING_CODES; out.max = len; if (!Yap_CVT_Text(&inp, &out PASS_REGS)) @@ -691,12 +841,13 @@ Yap_NCharsToListOfCodes( const char *s, size_t len USES_REGS ) } static inline Term -Yap_NCharsToString( const char *s, size_t len USES_REGS ) +Yap_NCharsToString( const char *s, size_t len, encoding_t enc USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.sz = len; + inp.enc = enc; inp.type = YAP_STRING_CHARS|YAP_STRING_NCHARS; out.type = YAP_STRING_STRING; out.max = len; @@ -706,13 +857,14 @@ Yap_NCharsToString( const char *s, size_t len USES_REGS ) } static inline Term -Yap_NCharsToTDQ( const char *s, size_t len, Term mod USES_REGS ) +Yap_NCharsToTDQ( const char *s, size_t len, encoding_t enc, Term mod USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.type = YAP_STRING_CHARS|YAP_STRING_NCHARS; inp.sz = len; + inp.enc = enc; inp.mod = mod; out.type = mod_to_type(mod PASS_REGS); out.max = len; @@ -724,13 +876,14 @@ Yap_NCharsToTDQ( const char *s, size_t len, Term mod USES_REGS ) } static inline Term -Yap_NCharsToTBQ( const char *s, size_t len, Term mod USES_REGS ) +Yap_NCharsToTBQ( const char *s, size_t len, encoding_t enc, Term mod USES_REGS ) { seq_tv_t inp, out; inp.val.c0 = s; inp.type = YAP_STRING_CHARS|YAP_STRING_NCHARS; inp.sz = len; + inp.enc = enc; inp.mod = mod; out.type = mod_to_bqtype(mod PASS_REGS); out.max = len; diff --git a/H/Yapproto.h b/H/Yapproto.h index e48f10b06..2ba7307d7 100755 --- a/H/Yapproto.h +++ b/H/Yapproto.h @@ -26,8 +26,9 @@ Term Yap_GetValue(Atom); int Yap_HasOp(Atom); struct operator_entry *Yap_GetOpPropForAModuleHavingALock(struct AtomEntryStruct *, Term); Atom Yap_LookupAtom(const char *); +Atom Yap_ULookupAtom(const unsigned char *); Atom Yap_LookupAtomWithLength(const char *, size_t); -Atom Yap_LookupUTF8Atom(const char *); +Atom Yap_LookupUTF8Atom(const unsigned char *); Atom Yap_LookupMaybeWideAtom(const wchar_t *); Atom Yap_LookupMaybeWideAtomWithLength(const wchar_t *, size_t); Atom Yap_FullLookupAtom(const char *); @@ -64,13 +65,13 @@ void Yap_atom_gc( CACHE_TYPE1 ); void Yap_init_agc( void ); /* alloc.c */ -void Yap_FreeCodeSpace(char *); -char *Yap_AllocAtomSpace(size_t); -char *Yap_AllocCodeSpace(size_t); -char *Yap_ReallocCodeSpace(char *,size_t); +void Yap_FreeCodeSpace(void *); +void *Yap_AllocAtomSpace(size_t); +void *Yap_AllocCodeSpace(size_t); +void *Yap_ReallocCodeSpace(void *,size_t); ADDR Yap_AllocFromForeignArea(Int); int Yap_ExtendWorkSpace(Int); -void Yap_FreeAtomSpace(char *); +void Yap_FreeAtomSpace(void *); int Yap_FreeWorkSpace(void); void Yap_InitMemory(UInt,UInt,UInt); void Yap_InitExStacks(int,int,int); @@ -125,7 +126,7 @@ struct pred_entry *Yap_PredForChoicePt(choiceptr bptr, op_numbers *op); void Yap_InitCdMgr(void); struct pred_entry * Yap_PredFromClause( Term t USES_REGS ); bool Yap_discontiguous(struct pred_entry *ap USES_REGS ); -bool Yap_multiple(struct pred_entry *ap USES_REGS ); +bool Yap_multiple(struct pred_entry *ap, int mode USES_REGS ); void Yap_init_consult(int, const char *); void Yap_end_consult(void); void Yap_Abolish(struct pred_entry *); @@ -362,6 +363,11 @@ void Yap_InitSockets (void); /* sort.c */ void Yap_InitSortPreds(void); +/* stack.c */ +void Yap_InitStInfo(void); +#if !defined(YAPOR) && !defined(THREADS) +bool Yap_search_for_static_predicate_in_use(struct pred_entry *, bool); +#endif /* stdpreds.c */ void Yap_InitBackCPreds(void); diff --git a/H/Yatom.h b/H/Yatom.h index bdfb453f5..35c96ab43 100755 --- a/H/Yatom.h +++ b/H/Yatom.h @@ -440,7 +440,7 @@ IsModProperty (int flags) #define UNKNOWN_MASK (UNKNOWN_ERROR|UNKNOWN_WARNING|UNKNOWN_FAIL) Term Yap_getUnknownModule(ModEntry *m); - void Yap_setModuleFlags(ModEntry *n, ModEntry *o); +void Yap_setModuleFlags(ModEntry *n, ModEntry *o); /* operator property entry structure */ typedef struct operator_entry @@ -860,12 +860,12 @@ typedef enum } dbentry_flags; /* predicate initialization */ - void Yap_InitCPred(const char *, UInt, CPredicate, pred_flags_t); - void Yap_InitAsmPred(const char *, UInt, int, CPredicate, pred_flags_t); - void Yap_InitCmpPred(const char *, UInt, CmpPredicate, pred_flags_t); - void Yap_InitCPredBack(const char *, UInt, unsigned int, CPredicate,CPredicate,pred_flags_t); - void Yap_InitCPredBackCut(const char *, UInt, unsigned int, CPredicate,CPredicate,CPredicate,pred_flags_t); - void Yap_InitCPredBack_(const char *, UInt, unsigned int, CPredicate,CPredicate,CPredicate,pred_flags_t); + void Yap_InitCPred(const char *, UInt, CPredicate, pred_flags_t); + void Yap_InitAsmPred(const char *, UInt, int, CPredicate, pred_flags_t); + void Yap_InitCmpPred(const char *, UInt, CmpPredicate, pred_flags_t); + void Yap_InitCPredBack(const char *, UInt, unsigned int, CPredicate,CPredicate,pred_flags_t); + void Yap_InitCPredBackCut(const char *, UInt, unsigned int, CPredicate,CPredicate,CPredicate,pred_flags_t); + void Yap_InitCPredBack_(const char *, UInt, unsigned int, CPredicate,CPredicate,CPredicate,pred_flags_t); /* *********************** DBrefs **************************************/ @@ -889,9 +889,9 @@ INLINE_ONLY inline EXTERN DBTerm *TermToDBTerm(Term); INLINE_ONLY inline EXTERN DBTerm *TermToDBTerm(Term X) { if (IsPairTerm(X)) { - return(DBTerm *)((char *)RepPair(X) - (CELL) &(((DBTerm *) NULL)->Contents)); + return(DBTerm *)((unsigned char *)RepPair(X) - (CELL) &(((DBTerm *) NULL)->Contents)); } else { - return(DBTerm *)((char *)RepAppl(X) - (CELL) &(((DBTerm *) NULL)->Contents)); + return(DBTerm *)((unsigned char *)RepAppl(X) - (CELL) &(((DBTerm *) NULL)->Contents)); } } @@ -921,7 +921,7 @@ typedef struct DB_STRUCT DBTerm DBT; } DBStruct; -#define DBStructFlagsToDBStruct(X) ((DBRef)((char *)(X) - (CELL) &(((DBRef) NULL)->Flags))) +#define DBStructFlagsToDBStruct(X) ((DBRef)((unsigned char *)(X) - (CELL) &(((DBRef) NULL)->Flags))) #if MULTIPLE_STACKS #define INIT_DBREF_COUNT(X) (X)->ref_count = 0 @@ -1957,6 +1957,7 @@ PredPropByAtomAndMod (Atom at, Term cur_mod) return Yap_NewPredPropByAtom (ae, cur_mod); } + #if DEBUG_PELOCKING #define PELOCK(I,Z) \ { LOCK((Z)->PELock); (Z)->StatisticsForPred->NOfEntries=(I);(Z)->StatisticsForPred->NOfHeadSuccesses=pthread_self(); } @@ -1991,7 +1992,7 @@ AddPropToAtom(AtomEntry *ae, PropEntry *p) // auxiliary functions -INLINE_ONLY inline EXTERN const char *AtomName (Atom at); +INLINE_ONLY inline EXTERN const char *AtomName (Atom at); /** * AtomName: get a string with the name of an Atom. Assumes 8 bit representation. @@ -2003,7 +2004,7 @@ INLINE_ONLY inline EXTERN const char *AtomName (Atom at); INLINE_ONLY inline EXTERN const char * AtomName (Atom at) { - return RepAtom(at) -> StrOfAE; + return RepAtom(at) -> rep.uStrOfAE; } @@ -2021,7 +2022,7 @@ INLINE_ONLY inline EXTERN const char *AtomTermName (Term t); INLINE_ONLY inline EXTERN const char* AtomTermName (Term t) { - return RepAtom(AtomOfTerm(t)) -> StrOfAE; + return RepAtom(AtomOfTerm(t)) -> rep.uStrOfAE; } diff --git a/H/absmi-switch.h b/H/absmi-switch.h new file mode 100644 index 000000000..8c1f4545f --- /dev/null +++ b/H/absmi-switch.h @@ -0,0 +1,120 @@ +/************************************************************************* + * * + * YAP Prolog * + * * + * Yap Prolog was developed at NCCUP - Universidade do Porto * + * * + * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * + * * + ************************************************************************** + * * + * File: absmi.c * + * Last rev: * + * mods: * + * comments: Portable abstract machine interpreter that support threaded + * execution. * + * * + *************************************************************************/ + +/** + * @file absmi-threaded.h + * @author VITOR SANTOS COSTA + * @date Sun Aug 2 23:46:47 2015 + * + * @brief This file implements the support for switch-based execution of + * the YAP abstract machine emulator. + * + * Switch-based emulators consist of one or several switches that are at the + * core of an execution loop. They are simpler to implement, more compact, + * and easier to debug. + * + * + */ + +#ifndef ABSMI_THREADED_H + +#define ABSMI_THREADED_H + +#ifndef _NATIVE + +#define ALWAYS_START_PREFETCH(TYPE) { + +#define ALWAYS_START_PREFETCH_W(TYPE) { + +#define ALWAYS_LOOKAHEAD(WHERE) { + +#define START_PREFETCH(TYPE) { + +#define START_PREFETCH_W(TYPE) { + +#define INIT_PREFETCH() { + +#define PREFETCH_OP(X) + +#else + +#define ALWAYS_START_PREFETCH(TYPE) + +#define ALWAYS_START_PREFETCH_W(TYPE) + +#define ALWAYS_LOOKAHEAD(WHERE) + +#define START_PREFETCH(TYPE) + +#define START_PREFETCH_W(TYPE) + +#define INIT_PREFETCH() + +#define PREFETCH_OP(X) + +#endif /* _NATIVE */ + + #ifndef _NATIVE + +#define ALWAYS_END_PREFETCH() } + +#define ALWAYS_END_PREFETCH_W() } + +#define END_PREFETCH() } + +#define END_PREFETCH_W() } + +#else + +#define ALWAYS_END_PREFETCH() + +#define ALWAYS_END_PREFETCH_W() + +#define END_PREFETCH() + +#define END_PREFETCH_W() + +#endif /* _NATIVE */ + +#define DO_PREFETCH(TYPE) + +#define DO_PREFETCH_W(TYPE) + + #define JMPNext() goto nextop + + #define JMPNextW() goto nextop_write + + #define baGONext() JMPNext() + +#define GONextW() JMPNextW() + +#define ALWAYS_GONext() GONext() + +#define ALWAYS_GONextW() GONextW() + +#define Op(Label,Type) case _##Label: { START_PREFETCH(Type) + +#define OpW(Label,Type) case _##Label: { START_PREFETCH_W(Type) + +#define BOp(Label,Type) case _##Label: { + +#define PBOp(Label,Type) case _##Label: { INIT_PREFETCH() + +#define OpRW(Label,Type) case _##Label: { + +#endif // ABSMI_THREADED_H diff --git a/H/absmi-threaded.h b/H/absmi-threaded.h new file mode 100644 index 000000000..8d3266611 --- /dev/null +++ b/H/absmi-threaded.h @@ -0,0 +1,201 @@ +/************************************************************************* + * * + * YAP Prolog * + * * + * Yap Prolog was developed at NCCUP - Universidade do Porto * + * * + * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * + * * + ************************************************************************** + * * + * File: absmi.c * + * Last rev: * + * mods: * + * comments: Portable abstract machine interpreter that support threaded + * execution. * + * * + *************************************************************************/ + +/** + * @file absmi-threaded.h + * @author VITOR SANTOS COSTA + * @date Sun Aug 2 23:46:47 2015 + * + * @brief This file implements the support for threaded execution of + * the YAP abstract machine emulator. + * + % Threaded emulators keep the address of the instruction as the opcode + % itself. This makes it faster to execute virtual instructions, but + % when grain-size is small it is easy to spend most of the instruction + % waiting for data. + % + * YAP includes several operations to support threaded emulation: + * + * - a header that defines the type of instruction; + * + * - a transition instruction that moves to the next operation; + * + * - get values well before they are needed; this is still + * useful for the opcode of the next instruction. + * - + * + */ + +#ifndef ABSMI_THREADED_H + +#define ABSMI_THREADED_H + +#if USE_THREADED_CODE + +#ifndef _NATIVE + +#if YAP_JIT + +#define DO_PREFETCH(TYPE) \ + if (ExpEnv.config_struc.current_displacement) \ + to_go = (void *) OpAddress[Yap_op_from_opcode(NEXTOP(PREG,TYPE)->opc) + ExpEnv.config_struc.current_displacement]; \ + else \ + to_go = (void *)(NEXTOP(PREG,TYPE)->opc); + +#define DO_PREFETCH_W(TYPE) \ + if (ExpEnv.config_struc.current_displacement) \ + to_go = (void *)OpAddress[Yap_op_from_opcode(NEXTOP(PREG,TYPE)->y_u.o.opcw) + ExpEnv.config_struc.current_displacement]; \ + else \ + to_go = (void *)(NEXTOP(PREG,TYPE)->y_u.o.opcw); + +#else /* YAP_JIT */ + +#define DO_PREFETCH(TYPE) to_go = (void *)(NEXTOP(PREG,TYPE)->opc) + +#define DO_PREFETCH_W(TYPE) to_go = (void *)(NEXTOP(PREG,TYPE)->y_u.o.opcw) + +#endif /* YAP_JIT */ + +#else /* _NATIVE */ + +#define DO_PREFETCH(TYPE) + +#define DO_PREFETCH_W(TYPE) + +#endif /* _NATIVE */ + +#ifndef _NATIVE + +#if LIMITED_PREFETCH||USE_PREFETCH + +#define ALWAYS_START_PREFETCH(TYPE) \ + { register void *to_go; DO_PREFETCH(TYPE) + +#if YAP_JIT +#define ALWAYS_LOOKAHEAD(WHAT) \ + { \ + register void *to_go; \ + if (ExpEnv.config_struc.current_displacement) \ + to_go = (void *) OpAddress[Yap_op_from_opcode(WHAT) + ExpEnv.config_struc.current_displacement]; \ + else \ + to_go = (void *)(WHAT); +#else /* YAP_JIT */ +#define ALWAYS_LOOKAHEAD(WHAT) \ + { register void *to_go = (void *)(WHAT); +#endif /* YAP_JIT */ + +#define ALWAYS_START_PREFETCH_W(TYPE) \ + { register void *to_go; DO_PREFETCH_W(TYPE) + +#else + +#define ALWAYS_START_PREFETCH(TYPE) { + +#define ALWAYS_START_PREFETCH_W(TYPE) { + +#define ALWAYS_LOOKAHEAD(WHERE) { + +#endif /* LIMITED_PREFETCH||USE_PREFETCH */ + +#else /* _NATIVE */ + +#if LIMITED_PREFETCH||USE_PREFETCH + +#define ALWAYS_START_PREFETCH(TYPE) + +#define ALWAYS_LOOKAHEAD(WHAT) + +#define ALWAYS_START_PREFETCH_W(TYPE) + +#else + +#define ALWAYS_START_PREFETCH(TYPE) + +#define ALWAYS_START_PREFETCH_W(TYPE) + +#define ALWAYS_LOOKAHEAD(WHERE) + +#endif /* LIMITED_PREFETCH||USE_PREFETCH */ + +#endif /* _NATIVE */ + +#ifndef _NATIVE + +#ifdef USE_PREFETCH + +#define START_PREFETCH(TYPE) ALWAYS_START_PREFETCH(TYPE) + +#define START_PREFETCH_W(TYPE) ALWAYS_START_PREFETCH_W(TYPE) + +#define INIT_PREFETCH() \ + { register void *to_go; + +#define PREFETCH_OP(X) \ + if (ExpEnv.config_struc.current_displacement) \ + to_go = (void *) OpAddress[Yap_op_from_opcode((X)->opc) + ExpEnv.config_struc.current_displacement]; \ + else \ + to_go = (void *)((X)->opc); + +#else + +#define START_PREFETCH(TYPE) { + +#define START_PREFETCH_W(TYPE) { + +#define INIT_PREFETCH() { + +#define PREFETCH_OP(X) + +#endif /* USE_PREFETCH */ + +#else /* _NATIVE */ + +#ifdef USE_PREFETCH + +#define START_PREFETCH(TYPE) ALWAYS_START_PREFETCH(TYPE) + +#define START_PREFETCH_W(TYPE) ALWAYS_START_PREFETCH_W(TYPE) + +#define INIT_PREFETCH() + +#define PREFETCH_OP(X) + +#else + +#define START_PREFETCH(TYPE) + +#define START_PREFETCH_W(TYPE) + +#define INIT_PREFETCH() + +#define PREFETCH_OP(X) + +#endif /* USE_PREFETCH */ + +#endif /* _NATIVE */ + +/***************************************************************** + + How to jump to the next abstract machine instruction + +******************************************************************/ + + +#endif // THREADED_CODE + +#endif // ABSMI_THREADED_H diff --git a/H/absmi-traced.h b/H/absmi-traced.h new file mode 100644 index 000000000..5818242cf --- /dev/null +++ b/H/absmi-traced.h @@ -0,0 +1,138 @@ +/************************************************************************* + * * + * YAP Prolog * + * * + * Yap Prolog was developed at NCCUP - Universidade do Porto * + * * + * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * + * * + ************************************************************************** + * * + * File: absmi.c * + * Last rev: * + * mods: * + * comments: Portable abstract machine interpreter that support threaded + * execution. * + * * + *************************************************************************/ + +/** + * @file absmi-threaded.h + * @author VITOR SANTOS COSTA + * @date Sun Aug 2 23:46:47 2015 + * + * @brief This file implements the support for switch-based execution of + * the YAP abstract machine emulator. + * + % Switch-based emulators consist of one or several switches that are at the + + % + * YAP includes several operations to support threaded emulation: + * + * - a header that defines the type of instruction; + * + * - a transition instruction that moves to the next operation; + * + * - get values well before they are needed; this is still + * useful for the opcode of the next instruction. + * - + * +ss */ + +#ifndef ABSMI_THREADED_H + +#define ABSMI_THREADED_H + +#define ALWAYS_START_PREFETCH(TYPE) + +#define ALWAYS_START_PREFETCH_W(TYPE) + +#define ALWAYS_LOOKAHEAD(WHERE) + +#define START_PREFETCH(TYPE) + +#define START_PREFETCH_W(TYPE) + +#define INIT_PREFETCH() + +#define PREFETCH_OP(X) + +#define DO_PREFETCH(TYPE) + +#define DO_PREFETCH_W(TYPE) + +#define ALWAYS_END_PREFETCH() + +#define ALWAYS_END_PREFETCH_W() + +#define END_PREFETCH() + +#define END_PREFETCH_W() + + #if YAP_DBG_PREDS + + + #define Op(Label,Type) \ + _##Label:{ (ExpEnv.config_struc.current_displacement) ? \ + print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ + print_instruction(PREG, ON_INTERPRETER); \ + START_PREFETCH(Type) + + #define OpW(Label,Type) \ + Label:{ (ExpEnv.config_struc.current_displacement) ? \ + print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ + print_instruction(PREG, ON_INTERPRETER); \ + START_PREFETCH_W(Type) + + #define BOp(Label,Type) \ + Label:{ (ExpEnv.config_struc.current_displacement) ? \ + print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ + print_instruction(PREG, ON_INTERPRETER); + + #define PBOp(Label,Type) \ + Label:{ (ExpEnv.config_struc.current_displacement) ? \ + print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ + print_instruction(PREG, ON_INTERPRETER); \ + INIT_PREFETCH() + + #define OpRW(Label,Type) \ + Label:{ (ExpEnv.config_struc.current_displacement) ? \ + print_instruction(PREG, ON_PROFILED_INTERPRETER) : \ + print_instruction(PREG, ON_INTERPRETER); + + #else /* YAP_DBG_PREDS */ + + +#define JMPNext() goto nextop + +#define JMPNextW() goto nextop_write + +#define GONext() JMPNext() + +#define GONextW() JMPNextW() + +#define ALWAYS_GONext() GONext() + +#define ALWAYS_GONextW() GONextW() + + #define Op(Label,Type) \ + _##Label:{ START_PREFETCH(Type) + + #define OpW(Label,Type) \ + _##Label:{ START_PREFETCH_W(Type) + + #define BOp(Label,Type) \ + _##Label:{ + + #define PBOp(Label,Type) \ + _##Label:{ INIT_PREFETCH() + + #define OpRW(Label,Type) \ + _##Label:{ + + + #endif /* YAP_DBG_PREDS */ + + + +#endif // ABSMI_THREADED_H diff --git a/H/absmi.h b/H/absmi.h index 2e2998a0f..4b24d15a7 100755 --- a/H/absmi.h +++ b/H/absmi.h @@ -19,11 +19,6 @@ #define ABSMI_H 1 -#ifdef SCCS -static char SccsId[] = "%W% %G%"; - -#endif /* SCCS */ - #if NATIVE_EXECUTION /* just a stub */ #else @@ -222,8 +217,6 @@ restore_absmi_regs(REGSTORE * old_regs) #else Yap_regp = old_regs; #endif - // not neeeded any more - // LOCAL_PL_local_data_p->reg_cache = old_regs; } #endif /* PUSH_REGS */ diff --git a/H/amidefs.h b/H/amidefs.h index 1a1d14b07..17bbc0495 100644 --- a/H/amidefs.h +++ b/H/amidefs.h @@ -1063,7 +1063,8 @@ OPCODE ENV_ToOp(yamop *cp) static inline size_t EnvSize(yamop *cp) { - return ((-ENV_Size(cp))/(OPREG)sizeof(CELL)); + return ((-ENV_Size(cp + ))/(OPREG)sizeof(CELL)); } static inline diff --git a/H/amiops.h b/H/amiops.h index 8b251d6b8..9269524aa 100644 --- a/H/amiops.h +++ b/H/amiops.h @@ -160,7 +160,7 @@ A contains the address of the variable that is to be trailed DO_TRAIL(TERM, VAL) #else /* BBREG_TRAIL_SCHEME */ - + #define TRAIL(TERM, VAL) \ if (OUTSIDE(HBREG,TERM,BBREG)) \ DO_TRAIL(TERM, VAL) diff --git a/H/clause.h b/H/clause.h index f1aa0fd4a..8035fd46b 100644 --- a/H/clause.h +++ b/H/clause.h @@ -24,7 +24,7 @@ /* consulting files */ typedef union CONSULT_OBJ { - const char *filename; + const unsigned char *filename; int mode; Prop p; UInt c; @@ -428,8 +428,35 @@ Yap_ExoClausePredicateFromTerm(Term t) return (PredEntry *)IntegerOfTerm(ArgOfTerm(1,t)); } -#define DEAD_REF(ref) FALSE +/****************************************************************** + EXECUTING PROLOG CLAUSES + +******************************************************************/ + +bool +Yap_search_for_static_predicate_in_use(PredEntry *p, bool check_everything); + +static inline bool +Yap_static_in_use(PredEntry *p, bool check_everything) +{ +#if defined(YAPOR) || defined(THREADS) + return TRUE; +#else + pred_flags_t pflags = p->PredFlags; + if (pflags & (DynamicPredFlag|LogUpdatePredFlag)) { + return FALSE; + } + if (STATIC_PREDICATES_MARKED) { + return (p->PredFlags & InUsePredFlag); + } else { + /* This code does not work for YAPOR or THREADS!!!!!!!! */ + return Yap_search_for_static_predicate_in_use(p, check_everything); + } +#endif + +#define DEAD_REF(ref) FALSE +} typedef enum { FIND_PRED_FROM_ANYWHERE, diff --git a/H/dglobals.h b/H/dglobals.h index 946f68b2a..f541de27f 100644 --- a/H/dglobals.h +++ b/H/dglobals.h @@ -1,6 +1,6 @@ - - /* This file, dglobals.h , was generated automatically by "yap -L misc/buildlocalglobal" - please do not update, update misc/GLOBALS instead */ + + /* This file, dglobals.h, was generated automatically by "yap -L misc/buildlocalglobal" + please do not update, update misc/GLOBALS instead */ diff --git a/H/dlocals.h b/H/dlocals.h index 41fec19ba..f93c3f7a4 100644 --- a/H/dlocals.h +++ b/H/dlocals.h @@ -1,6 +1,6 @@ - - /* This file, dlocals.h , was generated automatically by "yap -L misc/buildlocalglobal" - please do not update, update misc/LOCALS instead */ + + /* This file, dlocals.h, was generated automatically by "yap -L misc/buildlocalglobal" + please do not update, update misc/LOCALS instead */ @@ -484,6 +484,8 @@ #define REMOTE_Mutexes(wid) REMOTE(wid)->Mutexes_ #define LOCAL_SourceModule LOCAL->SourceModule_ #define REMOTE_SourceModule(wid) REMOTE(wid)->SourceModule_ +#define LOCAL_Including LOCAL->Including_ +#define REMOTE_Including(wid) REMOTE(wid)->Including_ #define LOCAL_MAX_SIZE LOCAL->MAX_SIZE_ #define REMOTE_MAX_SIZE(wid) REMOTE(wid)->MAX_SIZE_ diff --git a/H/hglobals.h b/H/hglobals.h index c57e165d0..4b89bae14 100644 --- a/H/hglobals.h +++ b/H/hglobals.h @@ -1,6 +1,6 @@ - - /* This file, hglobals.h , was generated automatically by "yap -L misc/buildlocalglobal" - please do not update, update misc/GLOBALS instead */ + + /* This file, hglobals.h, was generated automatically by "yap -L misc/buildlocalglobal" + please do not update, update misc/GLOBALS instead */ diff --git a/H/hlocals.h b/H/hlocals.h index 9de3ce0d5..36923ef76 100644 --- a/H/hlocals.h +++ b/H/hlocals.h @@ -1,6 +1,6 @@ - - /* This file, hlocals.h , was generated automatically by "yap -L misc/buildlocalglobal" - please do not update, update misc/LOCALS instead */ + + /* This file, hlocals.h, was generated automatically by "yap -L misc/buildlocalglobal" + please do not update, update misc/LOCALS instead */ typedef struct worker_local { @@ -271,5 +271,6 @@ typedef struct worker_local { struct swi_mutex* Mutexes_; Term SourceModule_; + Term Including_; size_t MAX_SIZE_; } w_local; diff --git a/H/iatoms.h b/H/iatoms.h index 51f6df404..847005825 100644 --- a/H/iatoms.h +++ b/H/iatoms.h @@ -10,6 +10,7 @@ AtomAfUnix = Yap_LookupAtom("AF_UNIX"); AtomAlarm = Yap_FullLookupAtom("$alarm"); AtomAlias = Yap_LookupAtom("alias"); + AtomAll = Yap_LookupAtom("all"); AtomAltNot = Yap_LookupAtom("not"); AtomAny = Yap_LookupAtom("any"); AtomAppend = Yap_LookupAtom("append"); @@ -87,6 +88,7 @@ AtomDefault = Yap_LookupAtom("default"); AtomDevNull = Yap_LookupAtom("/dev/null"); AtomDiff = Yap_LookupAtom("\\="); + AtomDirectory = Yap_LookupAtom("disrectorys"); AtomDiscontiguous = Yap_LookupAtom("discontiguous"); AtomDiscontiguousWarnings = Yap_LookupAtom("discontiguous_warnings"); AtomDollar = Yap_FullLookupAtom("$"); @@ -110,8 +112,10 @@ AtomEq = Yap_LookupAtom("="); AtomError = Yap_LookupAtom("error"); AtomException = Yap_LookupAtom("exception"); + AtomExtensions = Yap_LookupAtom("extensions"); AtomEvaluable = Yap_LookupAtom("evaluable"); AtomEvaluationError = Yap_LookupAtom("evaluation_error"); + AtomExecutable = Yap_LookupAtom("executable"); AtomExecute = Yap_LookupAtom("execute"); AtomExecAnswers = Yap_LookupAtom("exec_answers"); AtomExecuteInMod = Yap_FullLookupAtom("$execute_in_mod"); @@ -121,12 +125,17 @@ AtomExistenceError = Yap_LookupAtom("existence_error"); AtomExoClause = Yap_FullLookupAtom("$exo_clause"); AtomExpectedNumber = Yap_LookupAtom("expected_number_syntax"); + AtomExpand = Yap_LookupAtom("expand"); AtomExtendFileSearchPath = Yap_FullLookupAtom("$extend_file_search_path"); + AtomExtendsions = Yap_LookupAtom("extensionh"); AtomFB = Yap_LookupAtom("fb"); AtomFail = Yap_LookupAtom("fail"); AtomFalse = Yap_LookupAtom("false"); AtomFast = Yap_FullLookupAtom("$fast"); + AtomFileErrors = Yap_LookupAtom("file_errors"); AtomFileerrors = Yap_LookupAtom("fileerrors"); + AtomFileType = Yap_LookupAtom("file_type"); + AtomFirst = Yap_LookupAtom("first"); AtomFloat = Yap_LookupAtom("float"); AtomFloatFormat = Yap_LookupAtom("\%.15g"); AtomFloatOverflow = Yap_LookupAtom("float_overflow"); @@ -239,6 +248,7 @@ AtomOperator = Yap_LookupAtom("operator"); AtomOperatorPriority = Yap_LookupAtom("operator_priority"); AtomOperatorSpecifier = Yap_LookupAtom("operator_specifier"); + AtomOpt = Yap_LookupAtom("opt"); AtomOtherwise = Yap_LookupAtom("otherwise"); AtomOutOfAttvarsError = Yap_LookupAtom("out_of_attvars_error"); AtomOutOfAuxspaceError = Yap_LookupAtom("out_of_auxspace_error"); @@ -264,6 +274,7 @@ AtomProcedure = Yap_LookupAtom("procedure"); AtomProfile = Yap_FullLookupAtom("$profile"); AtomProlog = Yap_LookupAtom("prolog"); + AtomQly = Yap_LookupAtom("qly"); AtomQuery = Yap_LookupAtom("?-"); AtomQueue = Yap_LookupAtom("queue"); AtomQuiet = Yap_LookupAtom("quiet"); @@ -280,6 +291,7 @@ AtomRedefineWarnings = Yap_LookupAtom("redefine_warnings"); AtomRedoFreeze = Yap_FullLookupAtom("$redo_freeze"); AtomRefoundVar = Yap_FullLookupAtom("$I_FOUND_THE_VARIABLE_AGAIN"); + AtomRelativeTo = Yap_FullLookupAtom("relative_to"); AtomRepeat = Yap_LookupAtom("repeat"); AtomRepeatSpace = Yap_LookupAtom("repeat "); AtomReposition = Yap_LookupAtom("reposition"); @@ -319,6 +331,7 @@ AtomSingleton = Yap_LookupAtom("singleton"); AtomSlash = Yap_LookupAtom("/"); AtomSocket = Yap_LookupAtom("socket"); + AtomSolutions = Yap_LookupAtom("solutions"); AtomSource = Yap_LookupAtom("source"); AtomSourceSink = Yap_LookupAtom("source_sink"); AtomSpy = Yap_FullLookupAtom("$spy"); @@ -335,6 +348,7 @@ AtomStreamPos = Yap_FullLookupAtom("$stream_position"); AtomStreamPosition = Yap_LookupAtom("stream_position"); AtomString = Yap_LookupAtom("string"); + AtomStyleCheck = Yap_LookupAtom("style_check"); AtomSTRING = Yap_FullLookupAtom("String"); AtomSwi = Yap_LookupAtom("swi"); AtomSymbolChar = Yap_LookupAtom("symbol_char"); @@ -361,6 +375,7 @@ AtomTrue = Yap_LookupAtom("true"); AtomTty = Yap_LookupAtom("tty"); AtomTtys = Yap_LookupAtom("ttys"); + AtomTxt = Yap_LookupAtom("txt"); AtomTypeError = Yap_LookupAtom("type_error"); AtomUndefined = Yap_LookupAtom("undefined"); AtomUndefp = Yap_FullLookupAtom("$undefp"); @@ -379,6 +394,7 @@ AtomVariableNames = Yap_LookupAtom("variable_names"); AtomHiddenVar = Yap_FullLookupAtom("$V"); AtomVariable = Yap_LookupAtom("variable"); + AtomVerboseFileSearch = Yap_LookupAtom("verbose_file_search"); AtomVersionNumber = Yap_FullLookupAtom("$version_name"); AtomWakeUpGoal = Yap_FullLookupAtom("$wake_up_goal"); AtomWarning = Yap_LookupAtom("warning"); @@ -501,6 +517,7 @@ FunctorStreamEOS = Yap_MkFunctor(AtomEndOfStream,1); FunctorStreamPos = Yap_MkFunctor(AtomStreamPos,4); FunctorString1 = Yap_MkFunctor(AtomString,1); + FunctorStyleCheck = Yap_MkFunctor(AtomStyleCheck,4); FunctorSyntaxError = Yap_MkFunctor(AtomSyntaxError,4); FunctorShortSyntaxError = Yap_MkFunctor(AtomSyntaxError,1); FunctorTermExpansion = Yap_MkFunctor(AtomTermExpansion,2); diff --git a/H/iglobals.h b/H/iglobals.h index 5a2023de6..7a3345553 100644 --- a/H/iglobals.h +++ b/H/iglobals.h @@ -1,6 +1,6 @@ - - /* This file, iglobals.h , was generated automatically by "yap -L misc/buildlocalglobal" - please do not update, update misc/GLOBALS instead */ + + /* This file, iglobals.h, was generated automatically by "yap -L misc/buildlocalglobal" + please do not update, update misc/GLOBALS instead */ diff --git a/H/ilocals.h b/H/ilocals.h index 439fb4825..b51970ff1 100755 --- a/H/ilocals.h +++ b/H/ilocals.h @@ -1,6 +1,6 @@ - - /* This file, ilocals.h , was generated automatically by "yap -L misc/buildlocalglobal" - please do not update, update misc/LOCALS instead */ + + /* This file, ilocals.h, was generated automatically by "yap -L misc/buildlocalglobal" + please do not update, update misc/LOCALS instead */ static void InitWorker(int wid) { @@ -271,5 +271,6 @@ static void InitWorker(int wid) { REMOTE_Mutexes(wid) = NULL; REMOTE_SourceModule(wid) = 0; + REMOTE_Including(wid) = TermNil; REMOTE_MAX_SIZE(wid) = 1024L; } diff --git a/H/pl-utf8.h b/H/pl-utf8.h deleted file mode 100644 index 488791db3..000000000 --- a/H/pl-utf8.h +++ /dev/null @@ -1,82 +0,0 @@ -/* $Id$ - - Part of SWI-Prolog - - Author: Jan Wielemaker and Anjo Anjewierden - E-mail: jan@swi.psy.uva.nl - WWW: http://www.swi-prolog.org - Copyright (C): 1985-2002, University of Amsterdam - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - - -#ifndef UTF8_H_INCLUDED -#define UTF8_H_INCLUDED - -#include - -#define PL_MB_LEN_MAX 16 - -#define UTF8_MALFORMED_REPLACEMENT 0xfffd - -#define ISUTF8_MB(c) ((unsigned)(c) >= 0xc0 && (unsigned)(c) <= 0xfd) - -#define ISUTF8_CB(c) (((c)&0xc0) == 0x80) /* Is continuation byte */ -#define ISUTF8_FB2(c) (((c)&0xe0) == 0xc0) -#define ISUTF8_FB3(c) (((c)&0xf0) == 0xe0) -#define ISUTF8_FB4(c) (((c)&0xf8) == 0xf0) -#define ISUTF8_FB5(c) (((c)&0xfc) == 0xf8) -#define ISUTF8_FB6(c) (((c)&0xfe) == 0xfc) - -#define UTF8_FBN(c) (!(c&0x80) ? 0 : \ - ISUTF8_FB2(c) ? 1 : \ - ISUTF8_FB3(c) ? 2 : \ - ISUTF8_FB4(c) ? 3 : \ - ISUTF8_FB5(c) ? 4 : \ - ISUTF8_FB6(c) ? 5 : -1) -#define UTF8_FBV(c,n) ( n == 0 ? c : (c & ((0x01<<(6-n))-1)) ) - -#define utf8_get_char(in, chr) \ - (*(in) & 0x80 ? _PL__utf8_get_char(in, chr) \ - : (*(chr) = *(in), (char *)(in)+1)) -#define utf8_skip_char(in) \ - (*(in) & 0x80 ? _PL__utf8_skip_char(in) \ - : (char *)(in)+1) -#define utf8_put_char(out, chr) \ - ((chr) < 0x80 ? out[0]=(char)(chr), out+1 \ - : _PL__utf8_put_char(out, (chr))) - -extern char *_PL__utf8_get_char(const char *in, int *chr); -extern char *_PL__utf8_put_char(char *out, int chr); -extern char *_PL__utf8_skip_char(const char *out); - -extern size_t utf8_strlen(const char *s, size_t len); -extern size_t utf8_strlen1(const char *s); -extern const char * utf8_skip(const char *s, int n); -extern int utf8_strncmp(const char *s1, const char *s2, size_t n); -extern int utf8_strprefix(const char *s1, const char *s2); -/// copy a wide string to an UTF-8 version. -extern char *utf8_wcscpy(char *sf, const wchar_t *s0); - -typedef enum { - S_ASCII, - S_LATIN, - S_WIDE -} unicode_type_t; - -extern unicode_type_t _PL__utf8_type(const char *in0, size_t len); - -#endif /*UTF8_H_INCLUDED*/ diff --git a/H/ratoms.h b/H/ratoms.h index b3950570f..df5291871 100644 --- a/H/ratoms.h +++ b/H/ratoms.h @@ -10,6 +10,7 @@ AtomAfUnix = AtomAdjust(AtomAfUnix); AtomAlarm = AtomAdjust(AtomAlarm); AtomAlias = AtomAdjust(AtomAlias); + AtomAll = AtomAdjust(AtomAll); AtomAltNot = AtomAdjust(AtomAltNot); AtomAny = AtomAdjust(AtomAny); AtomAppend = AtomAdjust(AtomAppend); @@ -87,6 +88,7 @@ AtomDefault = AtomAdjust(AtomDefault); AtomDevNull = AtomAdjust(AtomDevNull); AtomDiff = AtomAdjust(AtomDiff); + AtomDirectory = AtomAdjust(AtomDirectory); AtomDiscontiguous = AtomAdjust(AtomDiscontiguous); AtomDiscontiguousWarnings = AtomAdjust(AtomDiscontiguousWarnings); AtomDollar = AtomAdjust(AtomDollar); @@ -110,8 +112,10 @@ AtomEq = AtomAdjust(AtomEq); AtomError = AtomAdjust(AtomError); AtomException = AtomAdjust(AtomException); + AtomExtensions = AtomAdjust(AtomExtensions); AtomEvaluable = AtomAdjust(AtomEvaluable); AtomEvaluationError = AtomAdjust(AtomEvaluationError); + AtomExecutable = AtomAdjust(AtomExecutable); AtomExecute = AtomAdjust(AtomExecute); AtomExecAnswers = AtomAdjust(AtomExecAnswers); AtomExecuteInMod = AtomAdjust(AtomExecuteInMod); @@ -121,12 +125,17 @@ AtomExistenceError = AtomAdjust(AtomExistenceError); AtomExoClause = AtomAdjust(AtomExoClause); AtomExpectedNumber = AtomAdjust(AtomExpectedNumber); + AtomExpand = AtomAdjust(AtomExpand); AtomExtendFileSearchPath = AtomAdjust(AtomExtendFileSearchPath); + AtomExtendsions = AtomAdjust(AtomExtendsions); AtomFB = AtomAdjust(AtomFB); AtomFail = AtomAdjust(AtomFail); AtomFalse = AtomAdjust(AtomFalse); AtomFast = AtomAdjust(AtomFast); + AtomFileErrors = AtomAdjust(AtomFileErrors); AtomFileerrors = AtomAdjust(AtomFileerrors); + AtomFileType = AtomAdjust(AtomFileType); + AtomFirst = AtomAdjust(AtomFirst); AtomFloat = AtomAdjust(AtomFloat); AtomFloatFormat = AtomAdjust(AtomFloatFormat); AtomFloatOverflow = AtomAdjust(AtomFloatOverflow); @@ -239,6 +248,7 @@ AtomOperator = AtomAdjust(AtomOperator); AtomOperatorPriority = AtomAdjust(AtomOperatorPriority); AtomOperatorSpecifier = AtomAdjust(AtomOperatorSpecifier); + AtomOpt = AtomAdjust(AtomOpt); AtomOtherwise = AtomAdjust(AtomOtherwise); AtomOutOfAttvarsError = AtomAdjust(AtomOutOfAttvarsError); AtomOutOfAuxspaceError = AtomAdjust(AtomOutOfAuxspaceError); @@ -264,6 +274,7 @@ AtomProcedure = AtomAdjust(AtomProcedure); AtomProfile = AtomAdjust(AtomProfile); AtomProlog = AtomAdjust(AtomProlog); + AtomQly = AtomAdjust(AtomQly); AtomQuery = AtomAdjust(AtomQuery); AtomQueue = AtomAdjust(AtomQueue); AtomQuiet = AtomAdjust(AtomQuiet); @@ -280,6 +291,7 @@ AtomRedefineWarnings = AtomAdjust(AtomRedefineWarnings); AtomRedoFreeze = AtomAdjust(AtomRedoFreeze); AtomRefoundVar = AtomAdjust(AtomRefoundVar); + AtomRelativeTo = AtomAdjust(AtomRelativeTo); AtomRepeat = AtomAdjust(AtomRepeat); AtomRepeatSpace = AtomAdjust(AtomRepeatSpace); AtomReposition = AtomAdjust(AtomReposition); @@ -319,6 +331,7 @@ AtomSingleton = AtomAdjust(AtomSingleton); AtomSlash = AtomAdjust(AtomSlash); AtomSocket = AtomAdjust(AtomSocket); + AtomSolutions = AtomAdjust(AtomSolutions); AtomSource = AtomAdjust(AtomSource); AtomSourceSink = AtomAdjust(AtomSourceSink); AtomSpy = AtomAdjust(AtomSpy); @@ -335,6 +348,7 @@ AtomStreamPos = AtomAdjust(AtomStreamPos); AtomStreamPosition = AtomAdjust(AtomStreamPosition); AtomString = AtomAdjust(AtomString); + AtomStyleCheck = AtomAdjust(AtomStyleCheck); AtomSTRING = AtomAdjust(AtomSTRING); AtomSwi = AtomAdjust(AtomSwi); AtomSymbolChar = AtomAdjust(AtomSymbolChar); @@ -361,6 +375,7 @@ AtomTrue = AtomAdjust(AtomTrue); AtomTty = AtomAdjust(AtomTty); AtomTtys = AtomAdjust(AtomTtys); + AtomTxt = AtomAdjust(AtomTxt); AtomTypeError = AtomAdjust(AtomTypeError); AtomUndefined = AtomAdjust(AtomUndefined); AtomUndefp = AtomAdjust(AtomUndefp); @@ -379,6 +394,7 @@ AtomVariableNames = AtomAdjust(AtomVariableNames); AtomHiddenVar = AtomAdjust(AtomHiddenVar); AtomVariable = AtomAdjust(AtomVariable); + AtomVerboseFileSearch = AtomAdjust(AtomVerboseFileSearch); AtomVersionNumber = AtomAdjust(AtomVersionNumber); AtomWakeUpGoal = AtomAdjust(AtomWakeUpGoal); AtomWarning = AtomAdjust(AtomWarning); @@ -501,6 +517,7 @@ FunctorStreamEOS = FuncAdjust(FunctorStreamEOS); FunctorStreamPos = FuncAdjust(FunctorStreamPos); FunctorString1 = FuncAdjust(FunctorString1); + FunctorStyleCheck = FuncAdjust(FunctorStyleCheck); FunctorSyntaxError = FuncAdjust(FunctorSyntaxError); FunctorShortSyntaxError = FuncAdjust(FunctorShortSyntaxError); FunctorTermExpansion = FuncAdjust(FunctorTermExpansion); diff --git a/H/rglobals.h b/H/rglobals.h index a6bb90f57..b2f04ff7b 100644 --- a/H/rglobals.h +++ b/H/rglobals.h @@ -1,6 +1,6 @@ - - /* This file, rglobals.h , was generated automatically by "yap -L misc/buildlocalglobal" - please do not update, update misc/GLOBALS instead */ + + /* This file, rglobals.h, was generated automatically by "yap -L misc/buildlocalglobal" + please do not update, update misc/GLOBALS instead */ diff --git a/H/rlocals.h b/H/rlocals.h index a2de2f841..bc0b8c425 100644 --- a/H/rlocals.h +++ b/H/rlocals.h @@ -1,6 +1,6 @@ - - /* This file, rlocals.h , was generated automatically by "yap -L misc/buildlocalglobal" - please do not update, update misc/LOCALS instead */ + + /* This file, rlocals.h, was generated automatically by "yap -L misc/buildlocalglobal" + please do not update, update misc/LOCALS instead */ static void RestoreWorker(int wid USES_REGS) { @@ -272,4 +272,5 @@ static void RestoreWorker(int wid USES_REGS) { + } diff --git a/H/tatoms.h b/H/tatoms.h index efee32272..df98327bf 100644 --- a/H/tatoms.h +++ b/H/tatoms.h @@ -26,6 +26,9 @@ Atom AtomAlias_; #define AtomAlias Yap_heap_regs->AtomAlias_ #define TermAlias MkAtomTerm( Yap_heap_regs->AtomAlias_ ) + Atom AtomAll_; +#define AtomAll Yap_heap_regs->AtomAll_ +#define TermAll MkAtomTerm( Yap_heap_regs->AtomAll_ ) Atom AtomAltNot_; #define AtomAltNot Yap_heap_regs->AtomAltNot_ #define TermAltNot MkAtomTerm( Yap_heap_regs->AtomAltNot_ ) @@ -257,6 +260,9 @@ Atom AtomDiff_; #define AtomDiff Yap_heap_regs->AtomDiff_ #define TermDiff MkAtomTerm( Yap_heap_regs->AtomDiff_ ) + Atom AtomDirectory_; +#define AtomDirectory Yap_heap_regs->AtomDirectory_ +#define TermDirectory MkAtomTerm( Yap_heap_regs->AtomDirectory_ ) Atom AtomDiscontiguous_; #define AtomDiscontiguous Yap_heap_regs->AtomDiscontiguous_ #define TermDiscontiguous MkAtomTerm( Yap_heap_regs->AtomDiscontiguous_ ) @@ -326,12 +332,18 @@ Atom AtomException_; #define AtomException Yap_heap_regs->AtomException_ #define TermException MkAtomTerm( Yap_heap_regs->AtomException_ ) + Atom AtomExtensions_; +#define AtomExtensions Yap_heap_regs->AtomExtensions_ +#define TermExtensions MkAtomTerm( Yap_heap_regs->AtomExtensions_ ) Atom AtomEvaluable_; #define AtomEvaluable Yap_heap_regs->AtomEvaluable_ #define TermEvaluable MkAtomTerm( Yap_heap_regs->AtomEvaluable_ ) Atom AtomEvaluationError_; #define AtomEvaluationError Yap_heap_regs->AtomEvaluationError_ #define TermEvaluationError MkAtomTerm( Yap_heap_regs->AtomEvaluationError_ ) + Atom AtomExecutable_; +#define AtomExecutable Yap_heap_regs->AtomExecutable_ +#define TermExecutable MkAtomTerm( Yap_heap_regs->AtomExecutable_ ) Atom AtomExecute_; #define AtomExecute Yap_heap_regs->AtomExecute_ #define TermExecute MkAtomTerm( Yap_heap_regs->AtomExecute_ ) @@ -359,9 +371,15 @@ Atom AtomExpectedNumber_; #define AtomExpectedNumber Yap_heap_regs->AtomExpectedNumber_ #define TermExpectedNumber MkAtomTerm( Yap_heap_regs->AtomExpectedNumber_ ) + Atom AtomExpand_; +#define AtomExpand Yap_heap_regs->AtomExpand_ +#define TermExpand MkAtomTerm( Yap_heap_regs->AtomExpand_ ) Atom AtomExtendFileSearchPath_; #define AtomExtendFileSearchPath Yap_heap_regs->AtomExtendFileSearchPath_ #define TermExtendFileSearchPath MkAtomTerm( Yap_heap_regs->AtomExtendFileSearchPath_ ) + Atom AtomExtendsions_; +#define AtomExtendsions Yap_heap_regs->AtomExtendsions_ +#define TermExtendsions MkAtomTerm( Yap_heap_regs->AtomExtendsions_ ) Atom AtomFB_; #define AtomFB Yap_heap_regs->AtomFB_ #define TermFB MkAtomTerm( Yap_heap_regs->AtomFB_ ) @@ -374,9 +392,18 @@ Atom AtomFast_; #define AtomFast Yap_heap_regs->AtomFast_ #define TermFast MkAtomTerm( Yap_heap_regs->AtomFast_ ) + Atom AtomFileErrors_; +#define AtomFileErrors Yap_heap_regs->AtomFileErrors_ +#define TermFileErrors MkAtomTerm( Yap_heap_regs->AtomFileErrors_ ) Atom AtomFileerrors_; #define AtomFileerrors Yap_heap_regs->AtomFileerrors_ #define TermFileerrors MkAtomTerm( Yap_heap_regs->AtomFileerrors_ ) + Atom AtomFileType_; +#define AtomFileType Yap_heap_regs->AtomFileType_ +#define TermFileType MkAtomTerm( Yap_heap_regs->AtomFileType_ ) + Atom AtomFirst_; +#define AtomFirst Yap_heap_regs->AtomFirst_ +#define TermFirst MkAtomTerm( Yap_heap_regs->AtomFirst_ ) Atom AtomFloat_; #define AtomFloat Yap_heap_regs->AtomFloat_ #define TermFloat MkAtomTerm( Yap_heap_regs->AtomFloat_ ) @@ -713,6 +740,9 @@ Atom AtomOperatorSpecifier_; #define AtomOperatorSpecifier Yap_heap_regs->AtomOperatorSpecifier_ #define TermOperatorSpecifier MkAtomTerm( Yap_heap_regs->AtomOperatorSpecifier_ ) + Atom AtomOpt_; +#define AtomOpt Yap_heap_regs->AtomOpt_ +#define TermOpt MkAtomTerm( Yap_heap_regs->AtomOpt_ ) Atom AtomOtherwise_; #define AtomOtherwise Yap_heap_regs->AtomOtherwise_ #define TermOtherwise MkAtomTerm( Yap_heap_regs->AtomOtherwise_ ) @@ -788,6 +818,9 @@ Atom AtomProlog_; #define AtomProlog Yap_heap_regs->AtomProlog_ #define TermProlog MkAtomTerm( Yap_heap_regs->AtomProlog_ ) + Atom AtomQly_; +#define AtomQly Yap_heap_regs->AtomQly_ +#define TermQly MkAtomTerm( Yap_heap_regs->AtomQly_ ) Atom AtomQuery_; #define AtomQuery Yap_heap_regs->AtomQuery_ #define TermQuery MkAtomTerm( Yap_heap_regs->AtomQuery_ ) @@ -836,6 +869,9 @@ Atom AtomRefoundVar_; #define AtomRefoundVar Yap_heap_regs->AtomRefoundVar_ #define TermRefoundVar MkAtomTerm( Yap_heap_regs->AtomRefoundVar_ ) + Atom AtomRelativeTo_; +#define AtomRelativeTo Yap_heap_regs->AtomRelativeTo_ +#define TermRelativeTo MkAtomTerm( Yap_heap_regs->AtomRelativeTo_ ) Atom AtomRepeat_; #define AtomRepeat Yap_heap_regs->AtomRepeat_ #define TermRepeat MkAtomTerm( Yap_heap_regs->AtomRepeat_ ) @@ -953,6 +989,9 @@ Atom AtomSocket_; #define AtomSocket Yap_heap_regs->AtomSocket_ #define TermSocket MkAtomTerm( Yap_heap_regs->AtomSocket_ ) + Atom AtomSolutions_; +#define AtomSolutions Yap_heap_regs->AtomSolutions_ +#define TermSolutions MkAtomTerm( Yap_heap_regs->AtomSolutions_ ) Atom AtomSource_; #define AtomSource Yap_heap_regs->AtomSource_ #define TermSource MkAtomTerm( Yap_heap_regs->AtomSource_ ) @@ -1001,6 +1040,9 @@ Atom AtomString_; #define AtomString Yap_heap_regs->AtomString_ #define TermString MkAtomTerm( Yap_heap_regs->AtomString_ ) + Atom AtomStyleCheck_; +#define AtomStyleCheck Yap_heap_regs->AtomStyleCheck_ +#define TermStyleCheck MkAtomTerm( Yap_heap_regs->AtomStyleCheck_ ) Atom AtomSTRING_; #define AtomSTRING Yap_heap_regs->AtomSTRING_ #define TermSTRING MkAtomTerm( Yap_heap_regs->AtomSTRING_ ) @@ -1079,6 +1121,9 @@ Atom AtomTtys_; #define AtomTtys Yap_heap_regs->AtomTtys_ #define TermTtys MkAtomTerm( Yap_heap_regs->AtomTtys_ ) + Atom AtomTxt_; +#define AtomTxt Yap_heap_regs->AtomTxt_ +#define TermTxt MkAtomTerm( Yap_heap_regs->AtomTxt_ ) Atom AtomTypeError_; #define AtomTypeError Yap_heap_regs->AtomTypeError_ #define TermTypeError MkAtomTerm( Yap_heap_regs->AtomTypeError_ ) @@ -1133,6 +1178,9 @@ Atom AtomVariable_; #define AtomVariable Yap_heap_regs->AtomVariable_ #define TermVariable MkAtomTerm( Yap_heap_regs->AtomVariable_ ) + Atom AtomVerboseFileSearch_; +#define AtomVerboseFileSearch Yap_heap_regs->AtomVerboseFileSearch_ +#define TermVerboseFileSearch MkAtomTerm( Yap_heap_regs->AtomVerboseFileSearch_ ) Atom AtomVersionNumber_; #define AtomVersionNumber Yap_heap_regs->AtomVersionNumber_ #define TermVersionNumber MkAtomTerm( Yap_heap_regs->AtomVersionNumber_ ) @@ -1385,6 +1433,8 @@ #define FunctorStreamPos Yap_heap_regs->FunctorStreamPos_ Functor FunctorString1_; #define FunctorString1 Yap_heap_regs->FunctorString1_ + Functor FunctorStyleCheck_; +#define FunctorStyleCheck Yap_heap_regs->FunctorStyleCheck_ Functor FunctorSyntaxError_; #define FunctorSyntaxError Yap_heap_regs->FunctorSyntaxError_ Functor FunctorShortSyntaxError_; diff --git a/ID b/ID new file mode 100644 index 0000000000000000000000000000000000000000..5ee7a8b87c30ecdbf06d1f4fb0eb07b61dc46a0d GIT binary patch literal 2162323 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