示例#1
0
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();
}
示例#2
0
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);
}
示例#3
0
Array CmdVariable::GetLocalVariables(FrameInjection* frame, bool &global) {
  Array ret;
  if (!frame || FrameInjection::IsGlobalScope(frame)) {
    global = true;
    ret = GetGlobalVariables();
  } else {
    global = false;
    if (frame->isEvalFrame()) {
      EvalFrameInjection *eframe = static_cast<EvalFrameInjection*>(frame);
      ret = eframe->getEnv().getDefinedVariables();
      ret.remove("GLOBALS");
    }
  }
  return ret;
}
示例#4
0
bool CmdVariable::onServer(DebuggerProxy *proxy) {
  FrameInjection *frame = ThreadInfo::s_threadInfo->m_top;
  for (int i = 0; i < m_frame && frame; i++) {
    frame = frame->getPrev();
  }
  m_global = (!frame || !frame->getPrev());

  if (frame) {
    EvalFrameInjection *eframe = dynamic_cast<EvalFrameInjection*>(frame);
    if (eframe) {
      m_variables = eframe->getEnv().getDefinedVariables();
      m_variables.remove("GLOBALS");
    }
  }
  return proxy->send(this);
}
示例#5
0
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;
      EvalFrameInjection *efi = NULL;
      for (FrameInjection *fi = info->m_top; fi; fi= fi->getPrev()) {
        efi = dynamic_cast<EvalFrameInjection*>(fi);
       if (efi) break;
      }
      ASSERT(efi);
      efi->getEnv().setClosure(extra);
    }
    extra = (void*)fs;
    return true;
  }
  return false;
}