亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vm_interpret.cpp

?? c-smile 一個語法類似與JS 又有點像C++的 編譯器
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
    VALUE * argv = &SP ( argc-1 );

    if ( ctor->is_native () ) 
    {
      VALUE v = invoke_native ( ctor,  argc - 1, argv + 1 );
      POPN ( n );
      SP ( 0 ) = v;
    }
    else
    {
      CHECKSTACK ( FRAME_SIZE );
      code = ctor;
      package = code->klass () ->get_package ();
      SP ( n ) = code;
      SP ( n-1 ) = klass->create_instance ();
      PUSH ( argc );		/* argument count */
      PUSH ( eh_pos );
      PUSH ( m_stack_pos );
      PUSH ( int ( fp - stkbase ) );	/* old fp */
      PUSH ( int ( pc - cbase ) );	/* old pc */
      cbase = pc = ( unsigned char * ) code->bytecode ();
      fp = sp;
    }

  }

  void
    VM::opPMREF () 
  {

    CLASS *klass = get_class ( &SP ( 1 ) );
    CLASS *orig_klass = klass;
    CHECKTYPE ( 0, DT_SYMBOL );
    symbol_t selector = SP ( 0 ) .v.v_symbol;

    THING *thing = SP ( 1 ) .v.v_thing;
    while ( klass ) 
    {
      ENTRY e = klass->find ( selector );
      if ( e.is_valid () ) 
      {
        VALUE *vprop = e.value ();
        switch ( e.type () ) 
        {
        case ST_PROPERTY:
          {
            if ( vprop->v_type == DT_CODE ) 
            {
              if ( vprop->v.v_code->is_native () ) 
              {
                SP ( 1 ) = ( * ( vprop->v.v_code->native () ) ) ( 0, &SP ( 0 ) );
                POP;
                return;
              }
              else
              {
                SP ( 0 ) = SP ( 1 );
                CHECKSTACK ( FRAME_SIZE );
                code = vprop->v.v_code;
                package = code->klass () ->get_package ();
                SP ( 1 ) = code;
                PUSH ( 1 );		/* argument count */
                PUSH ( eh_pos );
                PUSH ( m_stack_pos );
                PUSH ( int ( fp - stkbase ) );	/* old fp */
                PUSH ( int ( pc - cbase ) );	/* old pc */
                cbase = pc = ( unsigned char * ) code->bytecode ();
                fp = sp;
                return;
              }
            }
            else
              error ( "'%s' is not a property function",  voc [ selector ] );

          }
          break;
        case ST_DATA:
          POP;
          SP ( 0 ) = sp->v.v_object->members [ vprop->v.v_integer ];
          return;
        case ST_CONST:
        case ST_SDATA:
          POP;
          SP ( 0 ) = *vprop;
          return;
        case ST_FUNCTION:
          POP;
          if ( vprop->v_type == DT_CODE ) 
          {
            SP ( 0 ) .set_method ( thing, vprop->v.v_code );
          }
          else assert ( false );
          return;
        }
      }

      klass = klass->base;

    }
    if ( orig_klass ) 
      error ( "'%s' not found in class '%s'", voc [ selector ], (const char *) orig_klass->full_name () );
    else
      error ( "'%s' is not an object", nameoftype ( SP ( 1 ) .v_type ) );
  }

  void
    VM::opPMSET () 
  {
    CLASS *klass = get_class ( &SP ( 2 ) );
    CLASS *i_klass = klass;
    CHECKTYPE ( 1, DT_SYMBOL );
    symbol_t selector = SP ( 1 ) .v.v_symbol;
    while ( klass ) 
    {
      ENTRY e = klass->find ( selector );
      if ( e.is_valid () ) 
      {
        VALUE *vprop = e.value ();
        switch ( e.type () ) 
        {
        case ST_PROPERTY:
          {
            int     argc = 2;
            VALUE t = SP ( 2 ); SP ( 2 ) = SP ( 1 ); SP ( 1 ) = t;
            VALUE * argv = &SP ( argc-1 );
            if ( vprop->v_type == DT_CODE ) 
            {
              if ( vprop->v.v_code->is_native () ) 
              {
                POP;
                SP ( 0 ) = ( * ( vprop->v.v_code->native () ) ) ( 1, argv+1 );
                return;
              }
              else
              {
                CHECKSTACK ( FRAME_SIZE );
                code = vprop->v.v_code;
                package = code->klass () ->get_package ();
                SP ( argc ) = code;
                PUSH ( argc );		    /* argument count */
                PUSH ( eh_pos );
                PUSH ( m_stack_pos );
                PUSH ( int ( fp - stkbase ) );	/* old fp */
                PUSH ( int ( pc - cbase ) );	/* old pc */
                cbase = pc = ( unsigned char * ) code->bytecode ();
                fp = sp;
                return;
              }
            }
            else
              error ( "'%s' is not a property function",  voc [ selector ] );
          }
          break;
        case ST_DATA:
          SP ( 2 ) .v.v_object->members [ vprop->v.v_integer ] = SP ( 0 );
          POPN ( 2 );
          return;
        case ST_SDATA:
          *vprop = SP ( 2 );
          POPN ( 2 );
          return;
          //default:
        }
      }

      klass = klass->base;

    }

    if ( i_klass ) 
      error ( "Property '%s' not found in class '%s'", voc [ selector ], voc [ i_klass->name ] );
    else
      error ( "Type '%s' is not an object", nameoftype ( SP ( 2 ) .v_type ) );
  }

  // opVREF - VREF opcode handler
  void
    VM::opVREF () 
  {
    CLASS *klass = get_class ( &SP ( 1 ) );
    string klass_name;
    if ( klass == 0 ) 
      klass_name = nameoftype ( SP ( 1 ) .v_type );
    else if ( klass->item_function == 0 ) 
      klass_name = klass->full_name ();
    else
    {
      CODE *code = klass->item_function;
      SP ( 1 ) = call ( code, SP ( 1 ), 1, &SP ( 0 ) );
      POP;
      return;
    }
    error ( "function [] not implemented for '%s'", ( const char * ) klass_name );
  }

  // opVSET - VSET opcode handler
  void
    VM::opVSET () 
  {
    CLASS *klass = get_class ( &SP ( 2 ) );
    string klass_name;
    if ( klass == 0 ) 
      klass_name = nameoftype ( SP ( 2 ) .v_type );
    else if ( klass->item_function == 0 ) 
      klass_name = klass->full_name ();
    else
    {
      CODE *code = klass->item_function;
      SP ( 2 ) = call ( code, SP ( 2 ), 2, &SP ( 1 ) );
      POPN ( 2 );
      return;
    }
    error ( "function [] not implemented for '%s'", ( const char * ) klass_name );
  }


  // type names
  static char *tnames [ ] =
  {
    "null", 
    "string", 
    "float", 
    "integer", 
    "class", 
    "object", 
    "array", 
    "function", 
    "var", 
    "native_object", 
    "symbol", 
    "method"
  };


  // nameoftype - get the name of a type
  char *
    nameoftype ( int type ) 
  {
    static char buf [ 20 ];
    if ( type >= _DTMIN && type <= _DTMAX )
      return ( tnames [ type ] );
    sprintf ( buf, " ( %d ) ", type );
    return ( buf );
  }

  // badtype - report a bad operand type
  void
    VM::badtype ( int off, int type ) 
  {
    string tn = nameoftype ( SP ( off ) .v_type );
    error ( "Bad argument type '%s',  expected '%s'", (const char *) tn,
                                                      nameoftype ( type ) );
  }

  // stackover - report a stack overflow error
  void
    VM::stackover () 
  {
    error ( "Stack overflow" );
  }

  string
    VM::stack_trace () 
  {

    string out;
    CODE *	        code;	          // current code vector
    VALUE *			    fp = this->fp;	// the frame pointer
    while ( fp != stkbase ) 
    {
      int  coff = FP ( FRAME_ARGC ) .v.v_integer + FRAME_SIZE;
      code = FP ( coff ) .v.v_code;
      out += string::format ( " -> %s () \n", ( const char * ) code->full_name () );
      fp = stkbase + FP ( FRAME_FPOFF ) .v.v_integer;
    }
    return out;
  }

  // error - print an error message and exit
  void
    VM::error ( const char *fmt,  ... ) 
  {
    char buf1 [ 200 ];

    va_list args;
    va_start ( args,  fmt );
    _vsnprintf ( buf1, 100, fmt,  args );
    va_end ( args );

    throw VM_RTE ( VM::current (), buf1 );
  }

  void
    VM::throw_error ( const VALUE& v ) 
  {
    throw VM_RTE ( VM::current (), v );
  }

  // wrongcnt - report wrong number of arguments
  void
    VM::wrongcnt ( int n, int cnt ) 
  {
    if ( n < cnt ) 
      error ( "Too many arguments" );
    else if ( n > cnt ) 
      error ( "Too few arguments" );
  }

  CLASS *
    VM::get_class ( const VALUE *v ) 
  {
    switch ( v->v_type ) 
    {
    case DT_OBJECT:
      return v->v.v_object->klass;
    case DT_STRING:
      return class_string;
    case DT_ARRAY:
      return class_array;
    case DT_EXT:
      return  v->v.v_thing->get_class ();
    }
    return NULL;
  }

  string
    VM::get_file_name () 
  {
    if ( code && code->klass () ) 
    {
      PACKAGE * pkg = code->klass () ->get_package ();
      return CSTR ( pkg->file_name );
    }
    return string ( "" );
  }

  // badtype - report a bad operand type
  void
    VM::checktype ( VALUE& vl, int type, int number ) 
  {
    if ( vl.v_type != type ) 
      error ( "Bad type of argument %d: %s expected %s", 
    number, nameoftype ( vl.v_type ), nameoftype ( type ) );
  }

  VALUE
    VM::call ( CODE *c, int argc, VALUE *argv ) 
  {
    start_call ( c, argc, argv );
    execute_call ();
    VALUE v = SP ( 0 );
    POP;
    return v;
  }

  VALUE
    VM::call ( CODE *c, VALUE& v_this, int argc,  VALUE *argv ) 
  {
    start_call ( c, v_this, argc, argv );
    execute_call ();
    VALUE v = SP ( 0 );
    POP;
    return v;
  }

  VALUE
    VM::call ( VALUE& c, int argc, VALUE *argv ) 
  {
    switch ( c.v_type ) 
    {
    case DT_CODE:
      start_call ( c.v.v_code, argc, argv );
      break;
    case DT_OBJECT_METHOD:
      start_call ( c.v.v_om.code, c.v.v_om.thing, argc, argv );
      break;
    default:
      error ( "Bad type of argument. Got '%s' instead of function or method",
              nameoftype ( c.v_type ) );
    }
    execute_call ();
    VALUE v = SP ( 0 );
    POP;
    return v;
  }

  VALUE
    VM::send ( VALUE& v, symbol_t t, int argc, VALUE *argv ) 
  {
    CLASS *klass = get_class ( &v );
    if ( klass == 0 ) error ( "%s is not an object", nameoftype ( v.v_type ) );
    CLASS *orig_klass = klass;
    VALUE r;

    while ( klass ) 
    {
      ENTRY e = klass->find ( t );
      if ( e.is_valid () && e.type () == ST_FUNCTION ) 
      {
        start_call ( e.value () ->v.v_code, v, argc, argv );
        execute_call ();
        r = SP ( 0 );
        POP;
        return r;
      }
      klass = klass->base;
    }
    error ( "method '%s' not found in class '%s'",  voc [ t ],
            (const char *) orig_klass->full_name () );
    return r;
  }

  VM_RTE::VM_RTE ( VM *vm, const char *msg ) : description ( msg ) 
  {
    line_no = vm->get_line_num ();
    source = vm->get_file_name ();
    if ( vm->native_code ) 
      function_name = vm->native_code->full_name ();
  }

  VM_RTE::VM_RTE ( VM *vm, const VALUE& ev ) : err_value ( ev ) 
  {
    line_no = 0;
    source = "";
    if ( vm->native_code ) 
      function_name = vm->native_code->full_name ();
  }

  string
    VM_RTE::report () 
  {
    string t;
    if ( line_no < 0 ) 
      t.printf ( "%s\n", ( const char * ) description );
    else
    {
      if ( description.length () == 0 ) 
        t.printf ( "%s - %s\n", 
      (const char * ) function_name, 
      (const char * ) err_value.to_string () 
       );
      else if ( function_name.length () ) 
        t.printf ( "%s - %s\n%s ( %d ) \n", 
                   (const char *) function_name, 
                   (const char *) description, 
                   (const char *) source, line_no
       );
      else
        t.printf ( "%s\n%s ( %d ) \n", 
                   (const char * ) description, 
                   (const char * ) source, line_no
       );
    }
    return t;
  }

};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区精品在线观看| 黄色资源网久久资源365| 亚洲成av人片在www色猫咪| 日韩黄色片在线观看| 老司机精品视频导航| 风间由美一区二区av101| 91久久线看在观草草青青| 666欧美在线视频| 国产拍欧美日韩视频二区| 一区二区三区四区在线播放| 日本不卡一区二区三区 | 欧美性xxxxxxxx| 日韩欧美中文字幕精品| 国产精品视频一二三| 亚洲一区二区三区四区在线| 精品一区二区成人精品| 一本大道久久a久久精二百| 日韩精品一区国产麻豆| 亚洲视频1区2区| 久久99国产精品麻豆| 在线这里只有精品| 国产欧美精品国产国产专区 | 欧美日韩综合不卡| 国产亚洲成年网址在线观看| 亚洲午夜激情av| 成人黄页毛片网站| 日韩女同互慰一区二区| 亚洲美女视频在线观看| 韩日欧美一区二区三区| 欧美撒尿777hd撒尿| 国产精品美女久久久久久久久久久| 亚洲成av人片| 91亚洲国产成人精品一区二区三| 日韩一区二区三区三四区视频在线观看 | 久久久精品影视| 日日夜夜精品视频天天综合网| 懂色av中文一区二区三区| 91精品国产一区二区三区香蕉| 中文字幕一区二区在线播放| 麻豆传媒一区二区三区| 欧美午夜一区二区三区免费大片| 欧美激情艳妇裸体舞| 美女尤物国产一区| 欧美日韩一卡二卡| 亚洲精品写真福利| 成人午夜短视频| www日韩大片| 日本一区中文字幕| 欧美日韩国产精品自在自线| 亚洲天堂免费在线观看视频| 国产成人综合网| 精品免费视频.| 欧美aaaaaa午夜精品| 欧美日韩一区不卡| 亚洲自拍偷拍九九九| 色素色在线综合| 亚洲视频在线一区二区| 懂色av噜噜一区二区三区av| 2022国产精品视频| 国产真实乱子伦精品视频| 欧美xxxxx牲另类人与| 日本特黄久久久高潮| 91麻豆精品国产自产在线| 午夜精品久久久久| 欧美日韩午夜精品| 亚洲成人动漫在线免费观看| 欧美视频中文一区二区三区在线观看| 国产精品久久久久久户外露出| 成人综合在线观看| 欧美国产精品一区二区| 不卡在线观看av| 日韩一区在线免费观看| 色综合中文综合网| 亚洲国产精品t66y| 成人午夜视频网站| 中文欧美字幕免费| a美女胸又www黄视频久久| 亚洲人123区| 91国产精品成人| 一区二区三区美女视频| 91福利精品第一导航| 亚洲国产一二三| 欧美日韩国产美女| 免费成人av在线播放| 久久影音资源网| 丁香另类激情小说| 亚洲欧美偷拍另类a∨色屁股| 91极品视觉盛宴| 午夜精品久久久| 欧美成人猛片aaaaaaa| 国产精品一级在线| 国产精品私人自拍| 欧美伊人久久久久久久久影院| 午夜精品久久久久| 久久亚洲二区三区| 成人看片黄a免费看在线| 亚洲欧美另类久久久精品2019| 欧美丝袜丝nylons| 久草精品在线观看| 中文字幕不卡三区| 在线这里只有精品| 麻豆久久久久久| 欧美国产丝袜视频| 欧美性受xxxx| 美女www一区二区| 国产欧美一区二区精品性色超碰 | 国产精品电影院| 欧美系列亚洲系列| 国产一区二区三区四区五区美女| 中文在线一区二区 | 五月激情综合色| 精品国产91久久久久久久妲己| 高清在线观看日韩| 亚洲一区在线视频观看| 欧美电影免费观看高清完整版在 | 中文字幕欧美日本乱码一线二线| 色先锋aa成人| 欧美aaa在线| 亚洲视频一区在线| 欧美一区二区三区思思人| 国产成人午夜视频| 亚洲电影一区二区| 久久蜜桃香蕉精品一区二区三区| 一本到高清视频免费精品| 日本三级亚洲精品| 国产精品成人在线观看| 在线播放91灌醉迷j高跟美女 | 国产午夜亚洲精品不卡 | 日韩精品1区2区3区| 国产精品三级久久久久三级| 7777精品伊人久久久大香线蕉完整版 | 91精品国产一区二区人妖| 成人免费毛片嘿嘿连载视频| 天天综合色天天综合色h| 日本一区二区三区电影| 在线播放91灌醉迷j高跟美女| eeuss鲁一区二区三区| 久久黄色级2电影| 亚洲综合在线视频| 国产视频一区在线观看| 在线不卡中文字幕播放| 91美女蜜桃在线| 国产一区二区女| 日韩国产精品91| 亚洲欧美一区二区三区国产精品| 精品国产a毛片| 欧美精品v国产精品v日韩精品| 99这里只有精品| 国产另类ts人妖一区二区| 日韩中文字幕91| 亚洲一区视频在线| **性色生活片久久毛片| 久久婷婷综合激情| 欧美一级艳片视频免费观看| 91九色02白丝porn| 99久久免费国产| 国产成人日日夜夜| 黄网站免费久久| 毛片av中文字幕一区二区| 亚洲丝袜自拍清纯另类| 99精品欧美一区二区蜜桃免费| 国产亚洲欧美激情| 亚洲精品水蜜桃| 国产精品毛片a∨一区二区三区 | 天天av天天翘天天综合网 | 在线精品国精品国产尤物884a| 粉嫩欧美一区二区三区高清影视 | 国产午夜亚洲精品午夜鲁丝片 | 精品一区二区影视| 日韩av不卡在线观看| 午夜精品福利一区二区蜜股av| 亚洲男帅同性gay1069| 国产精品欧美一级免费| 国产偷国产偷精品高清尤物| 日韩精品一区二区三区视频| 日韩一区二区三区免费看| 正在播放亚洲一区| 91精品国产综合久久久蜜臀粉嫩 | 麻豆成人91精品二区三区| 午夜国产精品一区| 性欧美大战久久久久久久久| 亚洲国产一区在线观看| 亚洲国产精品精华液网站| 亚洲成精国产精品女| 婷婷久久综合九色国产成人| 亚洲成va人在线观看| 日韩在线播放一区二区| 免费观看一级特黄欧美大片| 六月丁香综合在线视频| 理论电影国产精品| 国产一区二区三区综合| 国产乱人伦偷精品视频不卡| 国产69精品一区二区亚洲孕妇 | 国产精品你懂的在线欣赏| 国产精品高清亚洲| 一区二区三区四区五区视频在线观看| 亚洲影视资源网| 日韩av一区二区在线影视| 久久草av在线| 国产成人综合精品三级|