mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter.git
synced 2024-11-29 00:10:26 +00:00
d515af0ae6
This allows a little bit more of abstraction: we can store other data in the tree, without having to store it in a specific node (e.g. the variables map, which is still unused). It also adds a few typehints, and specializes the return value of eval'ing the AST: previously, it was the one of evalNode, which wasn't guaranteed to be an AFPData. Now we have this guarantee. Last but not least, we can now measure runtime metrics for evalTree, which doesn't recurse. Bonus: fix a check in the old parser, which used the wrong variable when reporting outofbounds errors. Change-Id: Iff806793b1d968e9bb6220f1459f3d0ac587c7da
40 lines
708 B
PHP
40 lines
708 B
PHP
<?php
|
|
|
|
/**
|
|
* A class representing a whole AST generated by AFPTreeParser, holding AFPTreeNode's and a list
|
|
* of custom variable names.
|
|
*/
|
|
class AFPSyntaxTree {
|
|
/**
|
|
* @var AFPTreeNode|null
|
|
*/
|
|
private $rootNode;
|
|
/**
|
|
* @var string[]
|
|
*/
|
|
private $variableNames;
|
|
|
|
/**
|
|
* @param string[] $variableNames
|
|
* @param AFPTreeNode|null $root
|
|
*/
|
|
public function __construct( array $variableNames, AFPTreeNode $root = null ) {
|
|
$this->rootNode = $root;
|
|
$this->variableNames = $variableNames;
|
|
}
|
|
|
|
/**
|
|
* @return AFPTreeNode|null
|
|
*/
|
|
public function getRoot() {
|
|
return $this->rootNode;
|
|
}
|
|
|
|
/**
|
|
* @return string[]
|
|
*/
|
|
public function getVariableNames() {
|
|
return $this->variableNames;
|
|
}
|
|
}
|