void eval_set_callee_alias(CStrRef alias) { DECLARE_THREAD_INFO; FrameInjection *fi; for (fi = info->m_top; fi; fi= fi->getPrev()) { if (fi->isEvalFrame()) { break; } } EvalFrameInjection *efi = static_cast<EvalFrameInjection*>(fi); if (efi) efi->getEnv().setCalleeAlias(alias); }
static String get_current_alias() { DECLARE_THREAD_INFO; FrameInjection *fi; for (fi = info->m_top; fi; fi= fi->getPrev()) { if (fi->isEvalFrame()) { break; } } EvalFrameInjection *efi = static_cast<EvalFrameInjection*>(fi); return (efi) ? efi->getEnv().getCalleeAlias() : String(); }
Eval::VariableEnvironment * FrameInjection::GetVariableEnvironment(bool skip /* = false */) { FrameInjection *t = ThreadInfo::s_threadInfo->m_top; if (skip && t) { t = t->m_prev; } if (t && t->isEvalFrame()) { Eval::EvalFrameInjection* efi = static_cast<Eval::EvalFrameInjection*>(t); return &(efi->getEnv()); } return NULL; }
bool eval_get_call_info_hook(const CallInfo *&ci, void *&extra, const char *s, int64 hash /* = -1 */) { const Eval::Function *fs = Eval::RequestEvalState::findFunction(s); if (fs) { ci = fs->getCallInfo(); if (extra) { DECLARE_THREAD_INFO; FrameInjection *fi; for (fi = info->m_top; fi; fi= fi->getPrev()) { if (fi->isEvalFrame()) { break; } } EvalFrameInjection *efi = static_cast<EvalFrameInjection*>(fi); efi->getEnv().setClosure(extra); } extra = (void*)fs; return true; } return false; }