mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter.git
synced 2024-11-29 08:14:42 +00:00
016da694a6
* Reimplement tools, starting with a spiffy AJAX expression tester. Didn't bother implementing as non-AJAX, as it's just an extra. * Change exchange protocol between native parser and PHP app. Resulted in 2-3-fold performance boost. * Fix minor bug from last night.
42 lines
1.1 KiB
C++
Executable file
42 lines
1.1 KiB
C++
Executable file
#include "afparser.h"
|
|
#include "afutils.h"
|
|
// #include "aftypes.h"
|
|
#include <map>
|
|
|
|
class FilterEvaluator {
|
|
public:
|
|
void reset();
|
|
void setVar( string key, AFPData value );
|
|
void setVars( map<string,AFPData> values );
|
|
bool evaluateFilter( string code );
|
|
string evaluateExpression( string code );
|
|
protected:
|
|
bool move();
|
|
bool move( int shift );
|
|
void doLevelEntry( AFPData* result );
|
|
void doLevelSet( AFPData* result );
|
|
void doLevelBoolOps( AFPData* result );
|
|
void doLevelCompares( AFPData* result );
|
|
void doLevelMulRels( AFPData* result );
|
|
void doLevelSumRels( AFPData* result );
|
|
void doLevelPow( AFPData* result );
|
|
void doLevelBoolInvert( AFPData* result );
|
|
void doLevelSpecialWords( AFPData* result );
|
|
void doLevelUnarys( AFPData* result );
|
|
void doLevelBraces( AFPData* result );
|
|
void doLevelFunction( AFPData* result );
|
|
void doLevelAtom( AFPData* result );
|
|
|
|
AFPToken cur;
|
|
vector<AFPToken> tokens;
|
|
map<string, vector<AFPToken> > tokenCache;
|
|
unsigned int pos;
|
|
string code;
|
|
map<string,AFPData> vars;
|
|
bool forceResult;
|
|
};
|
|
|
|
// typedef AFPData (*AFPFunction) (vector<AFPData>);
|
|
|
|
vector<string> getOpsForType( string type );
|