• Places
    • Home
    • Graphs
    • Prefixes
  • Admin
    • Users
    • Settings
    • Plugins
    • Statistics
  • CPACK
    • Home
    • List packs
    • Submit pack
  • Repository
    • Load local file
    • Load from HTTP
    • Load from library
    • Remove triples
    • Clear repository
  • Query
    • YASGUI SPARQL Editor
    • Simple Form
    • SWISH Prolog shell
  • Help
    • Documentation
    • Tutorial
    • Roadmap
    • HTTP Services
  • Login

12.4.13 Discarding Data
All Application Manual Name SummaryHelp

  • Documentation
    • Reference manual
      • Foreign Language Interface
        • The Foreign Include File
          • Discarding Data
            • PL_open_foreign_frame()
            • PL_close_foreign_frame()
            • PL_discard_foreign_frame()
            • PL_rewind_foreign_frame()
    • Packages
Availability:C-language interface function
fid_t PL_open_foreign_frame()
Create a foreign frame, holding a mark that allows the system to undo bindings and destroy data created after it, as well as providing the environment for creating term references. Each call to a foreign predicate is wrapped in a PL_open_foreign_frame() and PL_close_foreign_frame() pair. This ensures that term_t handles created during the execution of a foreign predicate are scoped to this execution. Note that if the foreign predicate is non-deterministic, term_t handles are scoped to each activation of the foreign function.

The user may create explicit foreign frames to undo (backtrack) changes to Prolog terms. See PL_unify() for an example. An explicit foreign frame must also be used for creating a callback from C to Prolog (see PL_open_query()) to ensure the existence of such a frame and to scope the term_t handles needed to setup the call to Prolog.

On success, the stack has room for at least 10 term_t handles. This implies that foreign predicates as well as code inside an explicitly created foreign frame may use PL_new_term_ref() to create up to 10 term_t handles without checking the return status.

Returns (fid_t)0 on failure. Failure is either lack of space on the stacks, in which case a resource exception is scheduled or atom-gc being in progress in the current thread, in which case no exception is scheduled. The latter is an exceptional case that prevents doing a callback on Prolog from blob release handlers.230Such a callback would deadlock if the callback creates new atoms or requires stack shifts or garbage collection.

ClioPatria (version V3.1.1-51-ga0b30a5)