int sInst::runcode(const char *code, bool showerr, bool canfree)
{
  if (m_vm) 
  {
    m_pc.Set("");
    eel_preprocess_strings(this,m_pc,code);
    NSEEL_CODEHANDLE code = NSEEL_code_compile_ex(m_vm,m_pc.Get(),1,canfree ? 0 : NSEEL_CODE_COMPILE_FLAG_COMMONFUNCS);
    char *err;
    if (!code && (err=NSEEL_code_getcodeerror(m_vm)))
    {
      if (NSEEL_code_geterror_flag(m_vm)&1) return 1;
      if (showerr) fprintf(stderr,"NSEEL_code_compile: %s\n",err);
      return -1;
    }
    else
    {
      if (code)
      {
        NSEEL_VM_enumallvars(m_vm,varEnumProc, this);
        NSEEL_code_execute(code);
        if (canfree) NSEEL_code_free(code);
        else m_code_freelist.Add((void*)code);
      }
      return 0;
    }
  }
  return -1;
}
Beispiel #2
0
NSEEL_CODEHANDLE AVS_EEL_IF_Compile(void *context, char *code)
{
  NSEEL_CODEHANDLE ret;
  EnterCriticalSection(&g_eval_cs);
  ret=NSEEL_code_compile((NSEEL_VMCTX)context,code,0);
  if (!ret)
  {
    if (g_log_errors)
    {
      char *expr = NSEEL_code_getcodeerror((NSEEL_VMCTX)context);
      if (expr)
      {
        int l=strlen(expr);
        if (l > 512) l=512;
        movestringover(last_error_string,l+2);
        memcpy(last_error_string,expr,l);
        last_error_string[l]='\r';
        last_error_string[l+1]='\n';
      }
    }
  }
  LeaveCriticalSection(&g_eval_cs);
  return ret;
}