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

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

?? arithmetic.h

?? c-smile 一個語法類似與JS 又有點像C++的 編譯器
?? H
字號:
/*
*
* arithmetic.h
*
* Copyright (c) 2001, 2002
* Andrew Fedoniouk - andrew@terra-informatica.org
* Portions: Serge Kuznetsov - kuznetsov@deeptown.org
*
* See the file "COPYING" for information on usage 
* and redistribution of this file
*
*/

#ifndef __arithmetic_h
#define __arithmetic_h

#include "c-smile.h"
#include "tool.h"
#include "vm.h"

namespace c_smile
{
  inline void
    op_inc ( VM *vm,  VALUE& a ) 
  {
    switch ( a.v_type ) 
    {
    case DT_INTEGER:
      a.v.v_integer++;
      return;
    case DT_FLOAT:
      a.v.v_float++;
      return;
    default:
      vm->error ( "Not a number" );
    }
  }

  inline void
    op_dec ( VM *vm,  VALUE& a ) 
  {
    switch ( a.v_type ) 
    {
    case DT_INTEGER:
      a.v.v_integer--;
      return;
    case DT_FLOAT:
      a.v.v_float--;
      return;
    default:
      vm->error ( "Not a number" );
    }
  }

  inline VALUE
    op_add ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type ) 
    {
      switch ( a.v_type ) 
      {
      case DT_INTEGER: return VALUE ( a.v.v_integer + b.v.v_integer );
      case DT_FLOAT:   return VALUE ( a.v.v_float + b.v.v_float );
      case DT_STRING:  return VALUE ( new STRING ( *a.v.v_string + *b.v.v_string ) );
      }
    }
    else if ( a.is_string () || b.is_string () ) 
    {
      VALUE as = a.to_STRING ();
      VALUE bs = b.to_STRING ();
      return VALUE ( new STRING ( *as.v.v_string + *bs.v.v_string ) );
    }
    else
      switch ( a.v_type )
      {
        case DT_INTEGER:
          if ( b.v_type == DT_FLOAT )
            return VALUE ( double ( a.v.v_integer ) + b.v.v_float );
          break;
        case DT_FLOAT:
          if ( b.v_type == DT_INTEGER )
            return VALUE ( a.v.v_float + double ( b.v.v_integer ) );
          break;
      }
    vm->error ( "Incompatible type" );
    return VM::null;
  }

  inline VALUE
    op_sub ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type ) 
    {
      switch ( a.v_type ) 
      {
        case DT_INTEGER: return VALUE ( a.v.v_integer - b.v.v_integer );
        case DT_FLOAT:   return VALUE ( a.v.v_float - b.v.v_float );
      }
    }
    else
      switch ( a.v_type )
      {
      case DT_INTEGER:
        if ( b.v_type == DT_FLOAT )
          return VALUE ( double ( a.v.v_integer ) - b.v.v_float );
        break;
      case DT_FLOAT:
        if ( b.v_type == DT_INTEGER )
          return VALUE ( a.v.v_float - double ( b.v.v_integer ) );
        break;
      }
    vm->error ( "Not a number" );
    return VM::null;
  }

  inline VALUE
    op_mul ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type ) 
    {
      switch ( a.v_type ) 
      {
        case DT_INTEGER: return VALUE ( a.v.v_integer * b.v.v_integer );
        case DT_FLOAT:   return VALUE ( a.v.v_float * b.v.v_float );
      }
    }
    else
      switch ( a.v_type )
      {
      case DT_INTEGER:
        if ( b.v_type == DT_FLOAT )
          return VALUE ( double ( a.v.v_integer ) * b.v.v_float );
        break;
      case DT_FLOAT:
        if ( b.v_type == DT_INTEGER )
          return VALUE ( a.v.v_float * double ( b.v.v_integer ) );
        break;
      }
    vm->error ( "Not a number" );
    return VM::null;
  }

  inline VALUE
    op_div ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type ) 
    {
      switch ( a.v_type ) 
      {
      case DT_INTEGER:
        if ( b.v.v_integer == 0 )
          vm->error ( "Division by 0" );
        return VALUE ( a.v.v_integer / b.v.v_integer );
      case DT_FLOAT:
        if ( b.v.v_float == 0.0 )
          vm->error ( "Division by 0" );
        return VALUE ( a.v.v_float / b.v.v_float );
      }
    }
    else if ( a.is_number () && b.is_number () ) 
      return op_div ( vm,  VALUE ( double ( a ) ), VALUE ( double ( b ) ) );

    vm->error ( "Not a number" );
    return VM::null;
  }

  inline VALUE
    op_rem ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type ) 
    {
      switch ( a.v_type ) 
      {
      case DT_INTEGER:
        if ( b.v.v_integer == 0 )
          vm->error ( "Division by 0" );
        return VALUE ( a.v.v_integer % b.v.v_integer );
      }
    }
    else if ( a.is_number () && b.is_number () ) 
      return op_rem ( vm,  VALUE ( int ( a ) ), VALUE ( int ( b ) ) );

    vm->error ( "Not an integer number" );
    return VM::null;
  }

  inline VALUE
    op_band ( VM *vm, const VALUE& a, const VALUE& b ) 
  {
    if ( a.v_type == b.v_type && a.v_type == DT_INTEGER ) 
    {
      return VALUE ( a.v.v_integer & b.v.v_integer );
    }
    vm->error ( "Not an integer number" );
    return VM::null;
  }

  inline VALUE
    op_bor ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type && a.v_type == DT_INTEGER ) 
    {
      return VALUE ( a.v.v_integer | b.v.v_integer );
    }
    vm->error ( "Not an integer number" );
    return VM::null;
  }

  inline VALUE
    op_bxor ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type && a.v_type == DT_INTEGER ) 
    {
      return VALUE ( a.v.v_integer ^ b.v.v_integer );
    }
    vm->error ( "Not an integer number" );
    return VM::null;
  }

  inline VALUE
    op_bnot ( VM *vm,   const VALUE& a ) 
  {
    if ( a.v_type == DT_INTEGER )
      return VALUE ( ~a.v.v_integer );

    vm->error ( "Not an integer number" );
    return VM::null;
  }

  inline VALUE
    op_lt ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type ) 
    {
      switch ( a.v_type ) 
      {
      case DT_INTEGER: return VALUE ( a.v.v_integer < b.v.v_integer );
      case DT_FLOAT:   return VALUE ( a.v.v_float < b.v.v_float );
      case DT_STRING:  return VALUE ( *a.v.v_string < *b.v.v_string );
      }
    }
    else
      switch ( a.v_type )
      {
      case DT_INTEGER:
        if ( b.v_type == DT_FLOAT )
          return VALUE ( double ( a.v.v_integer ) < b.v.v_float );
        break;
      case DT_FLOAT:
        if ( b.v_type == DT_INTEGER )
          return VALUE ( a.v.v_float < double ( b.v.v_integer ) );
        break;
      }
    vm->error ( "Incompatible type" );
    return VM::null;
  }

  inline VALUE
    op_le ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type ) 
    {
      switch ( a.v_type ) 
      {
      case DT_INTEGER: return VALUE ( a.v.v_integer <= b.v.v_integer );
      case DT_FLOAT:   return VALUE ( a.v.v_float <= b.v.v_float );
      case DT_STRING:  return VALUE ( *a.v.v_string <= *b.v.v_string );
      }
    }
    else
      switch ( a.v_type )
      {
        case DT_INTEGER:
          if ( b.v_type == DT_FLOAT )
            return VALUE ( double ( a.v.v_integer ) <= b.v.v_float );
          break;
        case DT_FLOAT:
          if ( b.v_type == DT_INTEGER )
            return VALUE ( a.v.v_float <= double ( b.v.v_integer ) );
          break;
      }
    vm->error ( "Incompatible type" );
    return VM::null;
  }

  inline VALUE
    op_neq ( VM *vm,  const VALUE& a,  const VALUE& b ) 
  {
    if ( a.v_type == b.v_type ) 
    {
      switch ( a.v_type ) 
      {
      case DT_NULL:     return VALUE ( false );
      case DT_INTEGER:  return VALUE ( a.v.v_integer != b.v.v_integer );
      case DT_FLOAT:    return VALUE ( a.v.v_float != b.v.v_float );
      case DT_STRING:   return VALUE ( *a.v.v_string != *b.v.v_string );
      default:
        if ( a.is_thing () ) 
          return VALUE ( a.v.v_thing != b.v.v_thing );
        return VALUE ( a.v.data != b.v.data );
      }
    }
    else
      switch ( a.v_type ) 
      {
      case DT_NULL: return VALUE ( true );
      case DT_INTEGER:
        switch ( b.v_type ) 
        {
        case DT_INTEGER: return VALUE ( a.v.v_integer != b.v.v_integer );
        case DT_FLOAT: return VALUE ( double ( a.v.v_integer ) != b.v.v_float );
        }
        break;
      case DT_FLOAT:
        switch ( b.v_type ) 
        {
        case DT_INTEGER: return VALUE ( a.v.v_float != double ( b.v.v_integer ) );
        case DT_FLOAT: return VALUE ( a.v.v_float != b.v.v_float );
        }
      break;
      }
    return VALUE ( false );
  }

};

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷综合久色| 奇米影视在线99精品| 久久久久国产精品麻豆ai换脸 | 国产成人小视频| 国产在线日韩欧美| 国产精品亚洲а∨天堂免在线| 黑人巨大精品欧美黑白配亚洲| 韩国一区二区在线观看| 国产高清视频一区| 色噜噜狠狠色综合欧洲selulu| 色综合久久久久综合| 欧美日本一区二区| 久久蜜桃av一区精品变态类天堂| 国产精品毛片久久久久久| 亚洲裸体xxx| 理论电影国产精品| 91看片淫黄大片一级在线观看| 欧美三级电影一区| 国产欧美一区二区三区在线看蜜臀 | 精品免费国产一区二区三区四区| 精品国一区二区三区| 亚洲久草在线视频| 国产精品亚洲第一区在线暖暖韩国| 色狠狠桃花综合| 中文字幕日本乱码精品影院| 奇米精品一区二区三区四区| 色88888久久久久久影院野外| 欧美videos大乳护士334| 亚洲午夜精品网| 99精品久久99久久久久| 国产喂奶挤奶一区二区三区| 日本欧美肥老太交大片| 91久久精品一区二区二区| 菠萝蜜视频在线观看一区| 国产精品香蕉一区二区三区| 91精品国产综合久久久蜜臀图片 | 成人禁用看黄a在线| 日韩欧美激情一区| 另类调教123区| 欧美一二区视频| 激情五月播播久久久精品| 欧美一区二区三区视频在线观看| 午夜精品久久久久久久99水蜜桃| 一本久久精品一区二区| 亚洲一区在线观看免费 | 亚洲日本一区二区| 色八戒一区二区三区| 亚洲成av人综合在线观看| 欧美一区二区视频在线观看2020 | 亚洲人快播电影网| 欧美日韩一区二区三区高清| 日韩福利视频导航| 国产欧美日韩三级| 欧美一区二区三区男人的天堂| 另类的小说在线视频另类成人小视频在线 | 波多野结衣一区二区三区| 一区二区三区在线高清| 久久精品一区二区三区av| 色狠狠一区二区三区香蕉| 国产伦理精品不卡| 一区二区不卡在线播放| 国产日韩综合av| 欧美大片在线观看一区二区| 欧美亚洲一区二区在线| 国产不卡在线视频| 国产真实乱子伦精品视频| 青青草原综合久久大伊人精品| 中文字幕日韩欧美一区二区三区| 久久综合久久综合久久| 在线成人午夜影院| 欧美日韩免费观看一区二区三区| 97精品视频在线观看自产线路二| 九九视频精品免费| 激情久久五月天| 久久99精品国产.久久久久| 五月婷婷激情综合| 麻豆成人久久精品二区三区小说| 亚洲自拍偷拍综合| 日韩影院在线观看| 国产综合色精品一区二区三区| 日本中文字幕一区| 国产精品一区二区久激情瑜伽| 国产精品资源在线| 91麻豆国产福利精品| 欧美最猛性xxxxx直播| 欧美乱熟臀69xxxxxx| 精品久久久久av影院| 国产精品护士白丝一区av| 亚洲午夜久久久久久久久电影院 | 国产亚洲欧美色| 成人黄色在线视频| 日本一区中文字幕| 波多野结衣亚洲一区| 欧美性猛交xxxx乱大交退制版| 欧美亚洲国产bt| 欧美国产综合色视频| 偷拍与自拍一区| 91麻豆成人久久精品二区三区| 在线成人免费观看| 午夜精品免费在线观看| 日日夜夜免费精品| 国产白丝精品91爽爽久久| 色婷婷亚洲综合| 国产精品高清亚洲| 国产精品91xxx| 91超碰这里只有精品国产| **网站欧美大片在线观看| 蜜臀av一区二区三区| 欧美日韩色综合| 午夜激情一区二区三区| 91福利精品视频| 亚洲男人都懂的| 色婷婷综合中文久久一本| 日本一区二区三区四区| 国产91在线观看丝袜| 国产免费成人在线视频| 国产精品一区专区| 国产精品久久久久久久久快鸭 | 亚洲精品在线观看网站| 久久精品国产一区二区| 精品国偷自产国产一区| 九九九精品视频| 中文字幕欧美一| 在线电影欧美成精品| 国产成人精品网址| 亚洲欧洲日韩在线| 欧美午夜精品一区| 国产一区二区三区黄视频| 久久婷婷综合激情| 色呦呦国产精品| 捆绑紧缚一区二区三区视频| 久久久久国产成人精品亚洲午夜| 成人av午夜影院| 日本三级亚洲精品| 中文字幕在线不卡国产视频| 欧美精品国产精品| 国产成人超碰人人澡人人澡| 午夜免费久久看| 中文字幕亚洲一区二区va在线| 欧美三级视频在线观看| 成人一道本在线| 国产又黄又大久久| 韩国在线一区二区| 日日夜夜免费精品| 樱桃视频在线观看一区| 国产欧美一区二区精品性色超碰| 欧美系列在线观看| 欧美在线免费观看亚洲| 99在线精品视频| 成人理论电影网| 北条麻妃一区二区三区| 国产xxx精品视频大全| 国产传媒欧美日韩成人| 久久不见久久见中文字幕免费| 日本不卡中文字幕| 久久99精品网久久| 粉嫩av一区二区三区粉嫩| 粉嫩嫩av羞羞动漫久久久| 成人国产精品免费观看视频| 丁香天五香天堂综合| 精品一区二区三区久久| 日韩视频永久免费| 精品视频999| 日韩精品一区二区三区中文不卡| 91精品国产综合久久久久久漫画| 欧美美女直播网站| 国产拍揄自揄精品视频麻豆| 亚洲欧美色图小说| 蜜桃91丨九色丨蝌蚪91桃色| 国产成人一区在线| 欧美三级在线看| 久久婷婷国产综合国色天香| 国产精品日日摸夜夜摸av| 亚洲一区二区三区四区在线 | 欧美性欧美巨大黑白大战| 日韩精品一区二区三区老鸭窝| 国产亚洲精品精华液| 亚洲成人资源网| 一本久久综合亚洲鲁鲁五月天| 久久综合成人精品亚洲另类欧美 | 日韩亚洲欧美一区| 亚洲国产欧美在线| 99久久99精品久久久久久| 久久精品人人做人人爽人人| 午夜久久久久久久久久一区二区| 成人在线综合网| 久久影院视频免费| 国产一区二区在线观看免费| 欧美日韩一区不卡| 午夜伊人狠狠久久| 欧美精品一卡两卡| 爽爽淫人综合网网站| 欧美人狂配大交3d怪物一区| 亚洲综合色婷婷| 欧美妇女性影城| 久久99精品视频| 日本一区二区免费在线| 色综合天天综合网国产成人综合天 | 欧美人牲a欧美精品| 看电影不卡的网站|