blob: 4fc901c735a9af5a0475ed762aeed8d6bdc546e3 [file] [log] [blame]
#include "Matcher.h"
MatchResult match(QList<Token> data, QList<Token> pattern, VarContext context) {
if (data.empty() && pattern.empty()) {
return MatchResult{true, context};
}
Token patternHead = pattern.first();
Token dataHead = data.first();
pattern.removeFirst();
if (patternHead.isSym() || patternHead.isIdent()) {
if (patternHead == pattern.first()) {
data.removeFirst();
return match(data, pattern, context);
} else {
return MatchResult{false, context};
}
} else if (patternHead.isParen() && dataHead.isParen()) {
data.removeFirst();
auto result = match(dataHead.parenContent(), patternHead.parenContent(), context);
if (result.success) {
return match(data, pattern, result.context);
} else {
return MatchResult{false, result.context};
}
}
}