NMGenerator::Type type(const nvar& v){ switch(v.type()){ case nvar::Function:{ NMGenerator::Type t = NMGenerator::type(v); if(!(t & NMGenerator::Supported) || t == NMGenerator::Requested){ return t; } size_t size = v.size(); for(size_t i = 0; i < size; ++i){ NMGenerator::Type ti = type(v[i]); if(!(ti & NMGenerator::Supported)){ return ti; } else if(ti == NMGenerator::Requested){ t = ti; } } return t; } case nvar::Symbol: return o_->Get(v).isNone() ? NMGenerator::Requested : NMGenerator::Supported; } return NMGenerator::Supported; }