| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 
							- <?php
 
- namespace JmesPath;
 
- /**
 
-  * Uses an external tree visitor to interpret an AST.
 
-  */
 
- class AstRuntime
 
- {
 
-     private $parser;
 
-     private $interpreter;
 
-     private $cache = [];
 
-     private $cachedCount = 0;
 
-     public function __construct(
 
-         Parser $parser = null,
 
-         callable $fnDispatcher = null
 
-     ) {
 
-         $fnDispatcher = $fnDispatcher ?: FnDispatcher::getInstance();
 
-         $this->interpreter = new TreeInterpreter($fnDispatcher);
 
-         $this->parser = $parser ?: new Parser();
 
-     }
 
-     /**
 
-      * Returns data from the provided input that matches a given JMESPath
 
-      * expression.
 
-      *
 
-      * @param string $expression JMESPath expression to evaluate
 
-      * @param mixed  $data       Data to search. This data should be data that
 
-      *                           is similar to data returned from json_decode
 
-      *                           using associative arrays rather than objects.
 
-      *
 
-      * @return mixed Returns the matching data or null
 
-      */
 
-     public function __invoke($expression, $data)
 
-     {
 
-         if (!isset($this->cache[$expression])) {
 
-             // Clear the AST cache when it hits 1024 entries
 
-             if (++$this->cachedCount > 1024) {
 
-                 $this->cache = [];
 
-                 $this->cachedCount = 0;
 
-             }
 
-             $this->cache[$expression] = $this->parser->parse($expression);
 
-         }
 
-         return $this->interpreter->visit($this->cache[$expression], $data);
 
-     }
 
- }
 
 
  |