![]()  | 
  
    ArkScript
    
   A small, lisp-inspired, functional scripting language 
   | 
 
Handles function macros. More...
#include <Function.hpp>
Public Member Functions | |
| bool | applyMacro (Node &node, unsigned depth) override | 
| bool | canHandle (Node &node) override | 
| Node | macroNode (Node &node) override | 
| Returns the macro node that will be expanded.   | |
| MacroExecutor (MacroProcessor *processor, unsigned debug=0) | |
| Construct a new Macro Executor object.   | |
  Public Member Functions inherited from Ark::internal::MacroExecutor | |
| MacroExecutor (MacroProcessor *processor, unsigned debug=0) | |
| Construct a new Macro Executor object.   | |
| virtual | ~MacroExecutor ()=default | 
| Need a virtual destructor to correctly destroy object.   | |
Private Member Functions | |
| void | unify (const std::unordered_map< std::string, Node > &map, Node &target, Node *parent, std::size_t index=0, std::size_t unify_depth=0) | 
Additional Inherited Members | |
  Protected Member Functions inherited from Ark::internal::MacroExecutor | |
| const Node * | findNearestMacro (const std::string &name) const | 
| Find the nearest macro matching a giving name.   | |
| void | applyMacroProxy (Node &node, unsigned depth) | 
| Apply a macro on a given node.   | |
| void | handleMacroNode (Node &node) const | 
| Registers macros based on their type, expand conditional macros.   | |
| bool | isTruthy (const Node &node) const | 
| Check if a node can be evaluated to true.   | |
| Node | evaluate (Node &node, unsigned depth, bool is_not_body) const | 
| Evaluate only the macros.   | |
| void | throwMacroProcessingError (const std::string &message, const Node &node) | 
| Throw a macro processing error.   | |
  Protected Attributes inherited from Ark::internal::MacroExecutor | |
| unsigned int | m_debug | 
| MacroProcessor * | m_processor | 
| This is a non-owned pointer.   | |
Handles function macros.
Definition at line 23 of file Function.hpp.
      
  | 
  overridevirtual | 
| node | |
| depth | depth of the macro processor evaluation | 
Implements Ark::internal::MacroExecutor.
Definition at line 16 of file Function.cpp.
References Ark::internal::MacroExecutor::applyMacroProxy(), Ark::internal::Node::constList(), Ark::internal::MacroExecutor::evaluate(), Ark::internal::MacroExecutor::findNearestMacro(), Ark::internal::getListNode(), Ark::internal::List, Ark::internal::Node::list(), Ark::internal::Language::macros, Ark::internal::Spread, Ark::internal::Node::string(), Ark::internal::Symbol, Ark::internal::MacroExecutor::throwMacroProcessingError(), unify(), and Ark::internal::Node::updateValueAndType().
      
  | 
  nodiscardoverridevirtual | 
| node | 
Implements Ark::internal::MacroExecutor.
Definition at line 11 of file Function.cpp.
References Ark::internal::Node::constList(), Ark::internal::List, Ark::internal::Node::nodeType(), and Ark::internal::Symbol.
      
  | 
  explicit | 
Construct a new Macro Executor object.
| processor | |
| debug | 
Definition at line 36 of file Executor.cpp.
Returns the macro node that will be expanded.
| node | AST node on which the executor will run | 
Implements Ark::internal::MacroExecutor.
Definition at line 93 of file Function.cpp.
References Ark::internal::Node::constList(), Ark::internal::MacroExecutor::findNearestMacro(), Ark::internal::Node::list(), and Ark::internal::Node::string().
      
  | 
  private | 
Definition at line 101 of file Function.cpp.
References Ark::internal::getListNode(), Ark::internal::Node::isListLike(), Ark::internal::List, Ark::internal::Node::list(), Ark::internal::Macro, Ark::MaxMacroUnificationDepth, Ark::internal::Node::nodeType(), Ark::internal::Node::setNodeType(), Ark::internal::Spread, Ark::internal::Node::string(), Ark::internal::Symbol, Ark::internal::MacroExecutor::throwMacroProcessingError(), and unify().
Referenced by applyMacro(), and unify().