Automatic pack loading pack. More...
#include <autopack.hpp>
Public Member Functions | |
| scope & | subs () override |
| state | getState () const override |
| void | setState (state new1) override |
| nbool | isValid () const override |
| void | rel () override |
Public Member Functions inherited from by::pack | |
| manifest & | getManifest () |
| const manifest & | getManifest () const |
| void | rel () override |
| void | addDependent (me &dependent) |
| Adds a dependent pack to this slot. | |
| void | addDependent (me *it) BY_SIDE_FUNC(addDependent) |
| const tnarr< me > & | getDependents () const |
Public Member Functions inherited from by::obj | |
| obj () | |
| Constructs an obj representing an "any" class. | |
| obj (const scope &subs) | |
| Constructs an obj from a given scope, typically representing its initial set of children. | |
| obj (const me &rhs) | |
| Copy constructor for obj. | |
| me & | operator= (const me &rhs) |
| scope & | subs () override |
| tstr< nbicontainer > | mySubs () const override |
| state | getState () const override |
| void | setState (state new1) override |
| scope & | getShares () |
| const scope &getShares() const BY_CONST_FUNC(getShares()) scope const scope::super & | getOwns () const BY_CONST_FUNC(getOwns()) const ntype &getType() const override |
| void | onCloneDeep (const clonable &from) override |
| Performs a deep clone operation, copying the contents from another clonable object. | |
| virtual node * | getCallComplete () |
| Returns the node responsible for completing the object's construction or initialization calls. | |
| const node *getCallComplete() const BY_CONST_FUNC(getCallComplete()) protected str | _onBeforeCtor () override |
| Hook method called before the object's constructor is fully executed. | |
Public Member Functions inherited from by::baseObj | |
| str | eval (const args &a) override |
| priorType | prioritize (const args &a) const override |
| virtual const baseObj & | getOrigin () const |
| void | inFrame (const bicontainable *args) const override |
| void | outFrame () const override |
| const src & | getSrc () const override |
| virtual const node & | getSubPack () const |
| Retrieves a sub-package represented as a node. | |
| virtual baseObj * | make () const |
| const modifier & | getModifier () const override |
Public Member Functions inherited from by::node | |
| me & | operator[] (const std::string &name) |
| const me & | operator[] (const std::string &name) const BY_CONST_FUNC(operator[](name)) |
| me & | operator[] (const std::string *it) |
| const me & | operator[] (const std::string *it) const BY_CONST_FUNC(operator[](it)) |
| me & | operator[] (const nchar *name) |
| const me & | operator[] (const nchar *name) const BY_CONST_FUNC(operator[](name)) |
| nbool | in (const node &elem) const |
| nbool | in (const node *elem) const |
| const scope & | subs () const BY_CONST_FUNC(subs()) virtual tstr< nbicontainer > mySubs() const |
| Returns a tstr to a container of immediate sub-nodes (excluding inherited or chained ones). | |
| const node * | promote (const node &it) const |
| const node * | promote (const node *it) const BY_SIDE_FUNC(promote) |
| template<typename T > | |
| T * | sub (std::function< nbool(const std::string &, const T &)> l) |
| template<typename T > | |
| const T * | sub (std::function< nbool(const std::string &, const T &)> l) const BY_CONST_FUNC(sub< T >(l)) template< typename T |
| template<typename T = me> | |
| const T * | sub () const BY_CONST_FUNC(sub< T >()) template< typename T |
| template<typename T = me> | |
| T * | sub (const std::string *it) BY_SIDE_FUNC(sub) |
| template<typename T = me> | |
| const T * | sub (const std::string &name) const BY_CONST_FUNC(sub< T >(name)) template< typename T |
| template<typename T = me> | |
| T * | sub (const std::string *name, const args &a) BY_SIDE_FUNC(name |
| template<typename T = me> | |
| const T * | sub (const std::string &name, const args &a) const BY_CONST_FUNC(sub< T >(name |
| template<typename T = me> | |
| const T a const T * | sub (const std::string *name, const args &a) const BY_CONST_FUNC(sub< T >(name |
| template<typename T > | |
| const T a const T a tnarr< T, strTactic > | subAll (std::function< nbool(const std::string &, const T &)> l) const |
| template<typename T = me> | |
| tnarr< T, strTactic > | subAll () const |
| template<typename T = me> | |
| tpriorities< T > | subAll (const std::string &name) const |
| template<typename T = me> | |
| tpriorities< T > | subAll (const std::string *it) const BY_SIDE_FUNC(subAll< T >) template< typename T |
| template<typename T = me> | |
| tpriorities< T > | subAll (const std::string &name, const args &a) const |
| template<typename T = me> | |
| tpriorities< T > | subAll (const std::string *name, const args *a) const BY_SIDE_FUNC(name |
| tpriorities< T > subAll< T > | tpriorities ()) |
| template<typename T = me> | |
| tpriorities< T > | subAll (const std::string *name, const args &a) const BY_SIDE_FUNC(name |
| tpriorities< T > subAll< T > | tpriorities ()) |
| bool | canEval (const args &a) const |
| priorType | prioritize (const args *it) const BY_SIDE_FUNC(it |
| str | eval (const args *it) BY_SIDE_FUNC(eval) |
| str | eval (const std::string &name, const args &a) |
| str | eval (const std::string &name, const args *a) BY_SIDE_FUNC(a |
| str | eval (name, a) |
| str | str ()) |
| str | eval (const std::string *name, const args &a) BY_SIDE_FUNC(name |
| str eval | str ()) |
| str | eval (const std::string *name, const args *a) BY_SIDE_FUNC(name &&a |
| str eval | str ()) |
| str | eval (const std::string &name) |
| str | eval (const std::string *it) BY_SIDE_FUNC(eval) |
| str | eval () |
| template<typename T > | |
| nbool | is () const |
| nbool | is (const typeProvidable &to) const |
| nbool | is (const typeProvidable *it) const BY_SIDE_FUNC(is) |
| nbool | is (const type &to) const |
| nbool | is (const type *it) const BY_SIDE_FUNC(is) |
| template<typename T > | |
| tstr< T > | as () const |
| str | as (const typeProvidable &to) const |
| str | as (const typeProvidable *it) const BY_SIDE_FUNC(as) |
| str | as (const type &to) const |
| str | as (const type *it) const BY_SIDE_FUNC(as) |
| template<typename T > | |
| nbool | isImpli () const |
| virtual nbool | isImpli (const type &to) const |
| nbool | isImpli (const typeProvidable &to) const |
| nbool | isImpli (const typeProvidable *it) const BY_SIDE_FUNC(isImpli) |
| template<typename T > | |
| tstr< T > | asImpli () const |
| virtual str | asImpli (const type &to) const |
| str | asImpli (const typeProvidable &to) const |
| str | asImpli (const typeProvidable *it) const BY_SIDE_FUNC(asImpli) |
| virtual nbool | isComplete () const |
| virtual str | infer () const |
| virtual void | accept (const visitInfo &i, visitor &v) |
| void | inFrame (const bicontainable *args) const override |
| void | outFrame () const override |
| virtual void | inFrame (const bicontainable *args) const=0 |
| void | inFrame () const |
| virtual void | outFrame () const=0 |
Public Member Functions inherited from by::instance | |
| instance (id newId) | |
| instance (const me &rhs) | |
| me & | operator= (const me &rhs)=default |
| void * | operator new (size_t sz) noexcept |
| void | operator delete (void *pt, size_t sz) noexcept |
| virtual id | getId () const |
| virtual nbool | isHeap () const |
| Checks if this instance is allocated on the heap. | |
| const life * | getBindTag () const |
| Returns a pointer to the associated life object for reference counting. | |
Public Member Functions inherited from by::typeProvidable | |
| nbool | operator== (const me &rhs) const |
| nbool | operator!= (const me &rhs) const |
| virtual const type & | getType () const =0 |
| nbool | isSub (const type &it) const |
| nbool | isSub (const type *it) const BY_SIDE_FUNC(isSub) |
| nbool | isSub (const me &it) const |
| nbool | isSub (const me *it) const BY_SIDE_FUNC(isSub) |
| nbool | isSuper (const type &it) const |
| nbool | isSuper (const type *it) const BY_SIDE_FUNC(isSuper) |
| nbool | isSuper (const me &it) const |
| nbool | isSuper (const me *it) const BY_SIDE_FUNC(isSuper) |
| template<typename T > | |
| nint | isSub () const |
| template<typename T > | |
| nint | isSuper () const |
| template<typename T > | |
| T * | cast () |
| template<typename T > | |
| const T * | cast () const BY_CONST_FUNC(cast< T >()) virtual void *cast(const type &to) |
| Safe cast to target type using type hierarchy information. | |
| const void * | cast (const type &to) const BY_CONST_FUNC(cast(to)) void *cast(const type *it) BY_SIDE_FUNC(cast) |
Public Member Functions inherited from by::clonable | |
| virtual me * | clone () const =0 |
| virtual me * | cloneDeep () const |
| virtual void | onCloneDeep (const me &from) |
Public Member Functions inherited from by::frameInteractable | |
| void | inFrame () const |
Protected Member Functions | |
| void | _invalidate () override |
| Protected virtual method to invalidate the pack. | |
Protected Member Functions inherited from by::obj | |
| obj (const scope &shares, scope &owns) | |
| Protected constructor for obj, allowing explicit separation of shares and owns. | |
Protected Member Functions inherited from by::baseObj | |
| baseObj ()=default | |
| Default constructor for baseObj. | |
| baseObj (const baseObj *org, nbool isScripted) | |
| Constructs a baseObj from an existing origin object. | |
| str | _onEvalSub (node &sub, const args &a) override |
| Protected virtual method for evaluating a sub-node. | |
| void | _setSrc (const src &s) override |
| virtual void | _inFrame (frame &fr, const bicontainable *args) const |
| Enters this object's frame into the current execution stack. | |
| virtual void | _setType (const mgdType &new1) |
| Sets the script type for this base object. | |
| virtual void | _setModifier (const modifier &mod) |
Protected Member Functions inherited from by::node | |
| void | _setSrc (const src *it) BY_SIDE_FUNC(_setSrc) |
Protected Member Functions inherited from by::instance | |
| nbool | _setId (id new1) |
Additional Inherited Members | |
Static Public Member Functions inherited from by::instance | |
| static vault & | getVault () |
Public Attributes inherited from by::node | |
| T sub | name |
| T sub | nullptr |
| tpriorities< T > subAll< T > | name |
| priorType prioritize | it |
| priorType prioritize | NO_MATCH |
| str eval | name |
Static Public Attributes inherited from by::baseObj | |
| static const std::string | COMMON_NAME = "@common" |
| static const std::string | EXPAND_NAME = "@expand" |
Static Protected Member Functions inherited from by::instance | |
| static instancer * | _getMgr () |
Protected Attributes inherited from by::baseObj | |
| tstr< baseObj > | _org |
Automatic pack loading pack.
Inherits from pack, so see the pack class first if unfamiliar with it.
The byeol language lazily and dynamically loads packs. autopack implements this feature. When packLoader finds a pack file, it creates appropriate packLoading objects and places them in autopack. Later, when accessing autopack to retrieve contained symbols, packLoading operates lazily to load symbols from the file.
See packLoader and packLoading for details.
packLoading can be retrieved from the native environment (dll or so files) or from the byeol runtime environment (.byeol files). Or both may exist in a single pack. Therefore, autopack doesn't hold just one packLoading but handles them as an array.
We cannot simply assume all packs are verified and flawless and just load them. Sometimes packs need to be verified again to ensure correctness, so some autopacks must parse or verify before loading symbols. The problem is that packs very frequently depend on other packs. If a dependent pack fails verification, that fact must propagate so all dependent packs also become unusable. This is solved by an algorithm controlling the four states described below.
Has four states total with the following loading pipeline flow:
Packs depending on other packs is very common. Because autopack operates lazily, loading one pack may access another autopack, causing that autopack to also recursively enter the loading sequence. This checks for duplicate initialization or incomplete pipeline traversal.
autopack points to the _pack object defined in pack. This object contains symbols loaded from the external pack file. Since autopack is responsible for pack loading through packLoading, it's also responsible for symbol and pack destruction. Using RAII, when the autopack object is destroyed, all symbols are removed first, then the packLoading object is also removed to perform operations like closing so files. See packLoading for details.
when you try to load pack by accessing subs() of autopack instance, it processes loading and access to errReport when exception occurs during that procedure. basically, accessing to subs() of autopack happen when you eval your AST. which means, you're required to prepare a thread. so autopack will use the errReport instance in current thread::getEx().
|
overrideprotectedvirtual |
Protected virtual method to invalidate the pack.
This method is typically called internally to mark the pack as invalid, making it unusable for further operations.
Reimplemented from by::pack.
|
overridevirtual |
Implements by::statable.
|
overridevirtual |
|
overridevirtual |
Implements by::statable.