in src/RStuff/RUtil.h [221:244]
inline std::string getCallFunctionName(SEXP call) {
SHIELD(call);
if (TYPEOF(call) != LANGSXP) {
return "";
}
ShieldSEXP func = CAR(call);
if (func.type() == SYMSXP) {
return asStringUTF8(func);
}
if (func.type() == LANGSXP && func.length() == 3) {
SEXP op = CAR(func);
if (TYPEOF(op) == SYMSXP) {
std::string name = asStringUTF8(op);
if (name == "::" || name == ":::" || name == "$" || name == "@") {
std::string name1 = asStringUTF8(CADR(func));
std::string name2 = asStringUTF8(CADDR(func));
if (!name1.empty() && !name2.empty()) {
return quoteIfNeeded(name1) + name + quoteIfNeeded(name2);
}
}
}
}
return "";
}