{
return kind::APPLY_TESTER;
}
+ else if (tn.isDatatypeUpdater())
+ {
+ return kind::APPLY_UPDATER;
+ }
return kind::UNDEFINED_KIND;
}
argTypes = t.getDatatypeConstructorDomainSorts();
rangeType = t.getDatatypeConstructorCodomainSort();
}
- else if (t.isDatatypeTester())
- {
- argTypes.push_back(t.getDatatypeTesterDomainSort());
- rangeType = t.getDatatypeTesterCodomainSort();
- }
else if (t.isDatatypeSelector())
{
argTypes.push_back(t.getDatatypeSelectorDomainSort());
}
else
{
- Assert(isFunction() || isDatatypeConstructor() || isDatatypeSelector());
+ Assert(isFunction() || isDatatypeConstructor() || isDatatypeSelector()
+ || isDatatypeUpdater());
for (uint32_t i = 0, i_end = getNumChildren() - 1; i < i_end; ++i)
{
args.push_back((*this)[i]);
{
return NodeManager::currentNM()->booleanType();
}
- Assert(isFunction() || isDatatypeConstructor() || isDatatypeSelector())
+ Assert(isFunction() || isDatatypeConstructor() || isDatatypeSelector()
+ || isDatatypeUpdater())
<< "Cannot get range type of " << *this;
return (*this)[getNumChildren() - 1];
}
{
TypeNode tn = s.getType();
if (tn.isDatatypeConstructor() || tn.isDatatypeSelector()
- || tn.isDatatypeTester())
+ || tn.isDatatypeTester() || tn.isDatatypeUpdater())
{
// datatype symbols should be considered interpreted symbols here, not
// (higher-order) variables.
{
TypeNode tn = s.getType();
if (tn.isDatatypeConstructor() || tn.isDatatypeSelector()
- || tn.isDatatypeTester())
+ || tn.isDatatypeTester() || tn.isDatatypeUpdater())
{
// datatype symbols should be considered interpreted symbols here, not
// (higher-order) variables.