in impl/src/tooling/icpp/interpreter/op_eval.cpp [2156:2253]
void Evaluator::evaluatePrimitiveBody(const BSQInvokePrimitiveDecl* invk, StorageLocationPtr resultsl, const BSQType* restype)
{
switch (invk->implkey)
{
case BSQPrimitiveImplTag::validator_accepts: {
//BSQString str = SLPTR_LOAD_CONTENTS_AS(BSQString, this->cframe->argsbase[0]);
assert(false);
break;
}
case BSQPrimitiveImplTag::string_empty:
assert(false);
break;
case BSQPrimitiveImplTag::string_append:
assert(false);
break;
case BSQPrimitiveImplTag::stringof_string:
SLPTR_STORE_CONTENTS_AS(BSQString, resultsl, SLPTR_LOAD_CONTENTS_AS(BSQString, this->cframe->argsbase[0]));
break;
case BSQPrimitiveImplTag::stringof_from:
SLPTR_STORE_CONTENTS_AS(BSQString, resultsl, SLPTR_LOAD_CONTENTS_AS(BSQString, this->cframe->argsbase[0]));
break;
case BSQPrimitiveImplTag::list_size: {
BSQNat length = dynamic_cast<const BSQListType*>(invk->enclosingtype)->getLength(SLPTR_LOAD_CONTENTS_AS(BSQList, this->cframe->argsbase[0]));
SLPTR_STORE_CONTENTS_AS(BSQNat, resultsl, length);
break;
}
case BSQPrimitiveImplTag::list_empty: {
BSQBool empty = dynamic_cast<const BSQListType*>(invk->enclosingtype)->getLength(SLPTR_LOAD_CONTENTS_AS(BSQList, this->cframe->argsbase[0])) == 0;
SLPTR_STORE_CONTENTS_AS(BSQBool, resultsl, empty);
break;
}
case BSQPrimitiveImplTag::list_unsafe_get: {
auto idx = SLPTR_LOAD_CONTENTS_AS(BSQNat, this->cframe->argsbase[1]);
dynamic_cast<const BSQListType*>(invk->enclosingtype)->getValueAtPosition(this->cframe->argsbase[0], idx);
break;
}
case BSQPrimitiveImplTag::list_fill:
assert(false);
break;
case BSQPrimitiveImplTag::list_concat2:
assert(false);
break;
case BSQPrimitiveImplTag::list_haspredcheck: {
StorageLocationPtr scratcharg = (this->cframe->mixedbase + invk->mixedoffsetMap.find("vv")->second.first);
const BSQPCode* pc = invk->pcodes.find("p")->second;
BSQPCodeOperator lambda(Environment::g_invokes[pc->code]);
loadPCodeCapturedArgs(lambda, pc);
dynamic_cast<const BSQListType*>(invk->enclosingtype)->hasPredCheck(this->cframe->argsbase[0], scratcharg, resultsl, [this, &lambda](const std::vector<StorageLocationPtr>& args, StorageLocationPtr res) {
this->invokePCode(lambda, args, res);
});
break;
}
case BSQPrimitiveImplTag::list_haspredcheck_idx:
assert(false);
break;
case BSQPrimitiveImplTag::list_findindexof:
assert(false);
break;
case BSQPrimitiveImplTag::list_findindexoflast:
assert(false);
break;
case BSQPrimitiveImplTag::list_findindexof_idx:
assert(false);
break;
case BSQPrimitiveImplTag::list_findindexoflast_idx:
assert(false);
break;
case BSQPrimitiveImplTag::list_minidx:
assert(false);
break;
case BSQPrimitiveImplTag::list_maxidx:
assert(false);
break;
case BSQPrimitiveImplTag::list_sum:
assert(false);
break;
case BSQPrimitiveImplTag::list_filter:
assert(false);
break;
case BSQPrimitiveImplTag::list_filter_idx:
assert(false);
break;
case BSQPrimitiveImplTag::list_slice:
assert(false);
break;
case BSQPrimitiveImplTag::list_map:
assert(false);
break;
case BSQPrimitiveImplTag::list_map_idx:
assert(false);
break;
default:
assert(false);
break;
}
}