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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rtl.cpp

?? c-smile 一個語法類似與JS 又有點像C++的 編譯器
?? CPP
字號:
/*
*
* rtl.cpp
*
* 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
*
*/

#include <stdio.h>
#include <stdlib.h>
#include "c-smile.h"
#include "vm.h"
#include "scanner.h" // for TKNSIZE
#include "streams.h"
#include "arithmetic.h"
#include "rtl.h"
#include <locale.h>

namespace c_smile
{
  // badtype - report a bad operand type
  void
    badtype ( VALUE& vl, int type )
  {
    char tn1 [ 20 ];
    strcpy ( tn1, nameoftype ( vl.v_type ) );
    VM::error ( "Bad argument type" );
  }

  static VALUE xtypeof ( int argc, VALUE *argv );
  static VALUE xgc     ( int argc, VALUE *argv );
  static VALUE xsizeof ( int argc, VALUE *argv );
  static VALUE xprint  ( int argc, VALUE *argv );
  static VALUE xsystem ( int argc, VALUE *argv );

  void
    error_parameters ()
  {
    VM::error ( "Bad parameters." );
  }

  void
    error_read_only ()
  {
    VM::error ( "Property is read-only" );
  }

  void
    error_type ( CLASS *cls  )
  {
    VM::error ( "Must be an object of '%s' class or <null>.",
                (const char *) cls->full_name () );
  }


  /* xtypeof - get the data type of a value */
  static VALUE
    xtypeof ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv [ 0 ].v_type );
  }

  // xgc - invoke the garbage collector
  static VALUE
    xgc ( int argc, VALUE *argv )
  {
    argcount ( argc, 0 );
    return VALUE ( (int) memory.gc () );
  }

  // xsizeof - get the size of a vector or string
  static VALUE
    xsizeof ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    switch ( argv [ 0 ].v_type )
    {
    case DT_ARRAY:
      return VALUE ( argv [ 0 ].v.v_vector->size () );
    case DT_STRING:
      return VALUE ( (int) argv [ 0 ].v.v_string->size () );
    default:
      break;
    }
    return VALUE ( 0 );
  }


  // xprint - generic print function
  static VALUE
    xprint ( int argc, VALUE *argv )
  {
    string s;
    for ( int i = 0; i < argc; ++i )
    {
      s = argv [ i ];
      io_stream *ios = VM::sout;
      ios->put ( (const char *) s );
    }
    return VALUE ();
  }

  // xint - will make int value
  static VALUE
    xint ( int argc, VALUE *argv )
  {
    if ( argc == 0 )
      return 0;

    char *p;
    switch ( argv->v_type  )
    {
    case DT_NULL:     return 0;
    case DT_INTEGER:  return argv->v.v_integer;
    case DT_FLOAT:    return int ( argv->v.v_float );
    case DT_STRING:
      if ( argc == 1 )
        return atoi ( CSTR ( argv->v.v_string ) );
      else
        return strtol ( CSTR ( argv->v.v_string ), &p, int ( argv [ 1 ] ) );
    default:          return int ( argv->v.v_thing );
    }
  }

  // xfloat - will make float value
  static VALUE
    xfloat ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    switch ( argv->v_type )
    {
    case DT_NULL:     return 0.0;
    case DT_INTEGER:  return double ( argv->v.v_integer );
    case DT_FLOAT:    return argv->v.v_float;
    case DT_STRING:   return atof ( CSTR ( argv->v.v_string ) );
    default:          return (double) int ( argv->v.v_thing );
    }
  }


  // xnumber - will make either float or int value
  static VALUE
    xnumber ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    switch ( argv->v_type )
    {
    case DT_NULL:     return 0;
    case DT_INTEGER:
    case DT_FLOAT:    return argv [ 0 ];
    case DT_STRING:
      {
        string s ( CSTR ( argv->v.v_string ) );
        char *endptr;
        long lv = strtol ( s, &endptr, 0 );
        if ( *endptr != 0 )
        {
          double dv = strtod ( s, &endptr );
          if ( *endptr != 0 )
            return VM::undefined;
          return dv;
        }
        return VALUE ( lv );
      }
    default:          return int ( argv->v.v_thing );
    }
  }

  // xstring - will make string value
  static VALUE
    xstring ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->to_STRING () );
  }

  bool
    VALUE::is_bytecode ()  const
  {
    return ( v_type == DT_CODE ) && v.v_code->is_bytecode ();
  }

  bool
    VALUE::is_nativecode ()  const
  {
    return ( v_type == DT_CODE ) && v.v_code->is_native ();
  }

  VALUE::operator string ()  const
  {
    STRING *s = to_STRING ();
    return string ( CSTR ( s ) );
  }

  STRING *
    VALUE::to_STRING ()  const
  {
    if ( is_string () )
      return v.v_string;
    CLASS * cls = VM::get_class ( this );
    if ( cls == 0 )
    {
      string ss = to_string ();
      return new STRING ( (const char *) ss );
    }
    VALUE v = cls->to_string ( this );
    if ( !v.is_string () )
    {
      VM::error ( "%s.toString ()  returns '%s' instead of 'string'",
                  (const char *) cls->full_name (), nameoftype ( v.v_type ) );
    }
    return v.v.v_string;
  }

  string
    VALUE::to_string ()  const
  {
    string r;
    switch ( v_type )
    {
    case DT_NULL:
      if ( v.v_integer == 0 )
        return "<undefined>";
      else
        return "<null>";

    case DT_CLASS:
      {
        string classname = v.v_class->full_name ();
        r.printf ( "<class-%s>", (const char *) classname );
        return r;
      }
    case DT_OBJECT:
      {
        string classname = v.v_object->klass->full_name ();
        r.printf ( "<object of class-%s>", (const char *) classname );
        return r;
      }
    case DT_ARRAY:
      r.printf ( "<array [ %d ]>", v.v_vector->size () );
      return r;

    case DT_INTEGER:
      r.printf ( "%ld", v.v_integer );
      return r;

    case DT_FLOAT:
      r.printf ( "%f", v.v_float );
      return r;

    case DT_STRING:
      r = v.v_string->cstr ();
      return  r;

    case DT_CODE:
      {
        string classname = v.v_code->klass()->full_name ();
        string funcname = VM::voc [ v.v_code->name () ];
        r.printf ( "<%s method %s of class %s>",
                    v.v_code->is_bytecode () ? "bytecode":"native",
                    (const char *) funcname, (const char *) classname );
        return r;
      }
    case DT_VAR:
      {
        string classname = v.v_var.klass->full_name ();
        const char * entryname = VM::voc [ v.v_var.symbol () ];
        r.printf ( "<%s::%s>", (const char *) classname, entryname );
        return r;
      }
    case DT_SYMBOL:
      r.printf ( "<symbol-%d '%s'", v.v_symbol, VM::voc [ v.v_symbol ] );
      return r;

    case DT_OBJECT_METHOD:
      return "<object.method reference>";

    case DT_EXT:
      return "<extender>";

    }

    r.printf ( "undefined type: %d", v_type );
    return r;

  }

  bool
    operator == ( const VALUE& vl, const VALUE& vr )
  {
    if ( vl.v_type != vr.v_type )
      return false;
    if ( vl.v.data == vr.v.data )
      return true;
    if ( vl.v_type == DT_STRING )
      return VALUE ( *vl.v.v_string == *vr.v.v_string );
    return false;
  }

  // xsystem - execute a system command
  static VALUE
    xsystem ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    chktype ( 0, DT_STRING );
    return VALUE ( system ( CSTR ( argv [ 0 ].v.v_string ) ) );
  }

  static VALUE
    is_string ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->is_string () );
  }

  static VALUE
    is_array ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->is_array () );
  }

  static VALUE
    is_number ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( ( argv->v_type == DT_INTEGER ) ||
                   ( argv->v_type == DT_FLOAT ) );
  }

  static VALUE
    is_integer ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->is_int () );
  }

  static VALUE
    is_float ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->is_float () );
  }

  static VALUE
    is_null ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->v_type == DT_NULL );
  }

  static VALUE
    is_undefined ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( ( argv->v_type == DT_NULL ) && ( argv->v.v_integer == 0 ) );
  }

  static VALUE
    is_function ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->v_type == DT_CODE );
  }

  static VALUE
    is_method ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->v_type == DT_OBJECT_METHOD );
  }

  static VALUE
    is_object ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->v_type == DT_STRING ||
                   argv->v_type == DT_OBJECT ||
                   argv->v_type == DT_ARRAY ||
                   argv->v_type == DT_EXT );
  }

  static VALUE
    is_class ( int argc, VALUE *argv )
  {
    argcount ( argc, 1 );
    return VALUE ( argv->v_type == DT_CLASS );
  }

  class STD: public PACKAGE
  {
  public:
    STD ();

    static VALUE xlocale ( int argc, VALUE* argv );
  };


  STD::STD () : PACKAGE ( "std", "c-smile.cpp" )
  {
    add_static_function ( "typeof", xtypeof );
    add_static_function ( "gc",     xgc );
    add_static_function ( "sizeof", xsizeof );
    add_static_function ( "print",  xprint );
    add_static_function ( "system", xsystem );
    add_static_function ( "locale", xlocale );
    add_static_function ( "int",    xint );
    add_static_function ( "float",  xfloat );
    add_static_function ( "number", xnumber );

    add_static_function ( "is_string",    is_string );
    add_static_function ( "is_number",    is_number );
    add_static_function ( "is_array",     is_array );
    add_static_function ( "is_int",       is_integer );
    add_static_function ( "is_float",     is_float );
    add_static_function ( "is_null",      is_null );
    add_static_function ( "is_undefined", is_undefined );
    add_static_function ( "is_function",  is_function );
    add_static_function ( "is_method",    is_method );
    add_static_function ( "is_object",    is_object );
    add_static_function ( "is_class",     is_class );

    // setup the standard i/o streams

    add_static_data ( "in",  VALUE ( new STREAM::INSTANCE ( VM::sin  ) ) );
    add_static_data ( "out", VALUE ( new STREAM::INSTANCE ( VM::sout ) ) );
    add_static_data ( "err", VALUE ( new STREAM::INSTANCE ( VM::serr ) ) );

    add_static_data ( "true",  VALUE ( true  ) );
    add_static_data ( "false", VALUE ( false ) );

  }

  VALUE
    STD::xlocale ( int argc, VALUE *argv )
  {
    if ( argc ) //set
    {
      if ( argv [ 0 ].is_string () )
      {
        setlocale ( LC_ALL, CSTR ( argv [ 0 ].v.v_string ) );
      }
      else
        badtype ( argv [ 0 ], DT_STRING );
    }
    else
      error_parameters ();

    return VM::undefined;
  }

  class TYPE: public CLASS
  {
  public:
    TYPE ( PACKAGE* package ) : CLASS ( "type", 0, package )
    {
      add_static_data ( "NULL",     VALUE ( DT_NULL    ) );
      add_static_data ( "STRING",   VALUE ( DT_STRING  ) );
      add_static_data ( "FLOAT",    VALUE ( DT_FLOAT   ) );
      add_static_data ( "INTEGER",  VALUE ( DT_INTEGER ) );
      add_static_data ( "CLASS",    VALUE ( DT_CLASS   ) );

      add_static_data ( "OBJECT",   VALUE ( DT_OBJECT  ) );
      add_static_data ( "ARRAY",    VALUE ( DT_ARRAY   ) );
      add_static_data ( "FUNCTION", VALUE ( DT_CODE    ) );
      add_static_data ( "METHOD",   VALUE ( DT_OBJECT_METHOD ) );
    }
  };

  extern void init_threads ();

  void
    VM::init_std_package ()
  {
    std = new STD ();
    add_package ( std );

    VM::class_array = new ARRAY_CLASS ( std );
    VM::class_string = new STRING_CLASS ( std );

    new THREAD ( std );
    new MUTEX  ( std );
    new STREAM ( std );
    new DATE   ( std );
    new MAP    ( std );
    new SOCKET ( std );
    new BLOB   ( std );
    new NODE   ( std );
    new TYPE   ( std );
    new REGEXP ( std );

  }

  string
    format ( const char *fmt, int argc, VALUE *argv )
  {
    string out;
    string formatted;
    const char *pc = fmt, *pcold = fmt;
    int argi = 0;
    string cfmt;

    for ( ; *pc;  ++pc )
    {
      while ( *pc && *pc != '%' )
        out += *pc++;

      if ( *pc == 0 )
        break;

      if ( *++pc == '%' )
        out += '%';
      else if ( argi < argc )
        for ( cfmt = "%"; *pc ;++pc )
        {
          if ( *pc == '*' )
          {
            if ( argv [ argi ].is_int () )
              cfmt += argv [ argi++ ].to_string ();
            else
              VM::error ( "printf:argument %d is not an integer", argi );
          }
          else
          {
            cfmt += *pc;
            if ( *pc == 's' )
            {
              out += formatted.printf ( cfmt,
                                        (const char *)
                                        string ( argv [ argi++ ] )
                                      );
              break;
            }
            else if ( *pc == 'c'  )
            {
              if ( argv [ argi ].is_number () )
                out += formatted.printf ( cfmt, char ( 0xFF & int ( argv [ argi++ ] ) ) );
              else
                out += "<NaN>";
                break;
            }
            else if ( strchr ( "dioxXbu", *pc ) )
            {
              if ( argv [ argi ].is_number () )
                out += formatted.printf ( cfmt, int ( argv [ argi++ ] ) );
              else
                out += "<NaN>";
              break;
            }
            else if ( strchr ( "fgGeE", *pc ) )
            {
              if ( argv [ argi ].is_number () )
                out += formatted.printf ( cfmt, double ( argv [ argi++ ] ) );
              else
                out += "<NaN>";
              break;
            }
            else if ( *pc == 0 || *pc == '%' )
              break;
          }
        }
    }
    return out;
  }

};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产99久久久国产精品潘金网站| 粉嫩一区二区三区在线看| 久久久久久亚洲综合影院红桃| 一本到不卡精品视频在线观看| 久久精品72免费观看| 亚洲精品第一国产综合野| 国产视频一区在线观看| 在线成人高清不卡| 欧洲视频一区二区| 99视频精品免费视频| 精品一区二区三区的国产在线播放| 亚洲国产精品人人做人人爽| 国产精品女主播av| 久久久电影一区二区三区| 欧美一区二区播放| 欧美日韩免费观看一区二区三区| 成人av在线一区二区三区| 国内一区二区在线| 强制捆绑调教一区二区| 香蕉加勒比综合久久| 亚洲嫩草精品久久| 国产精品久久久久影视| 中文一区二区在线观看| 欧美mv日韩mv国产网站| 欧美一级日韩免费不卡| 欧美三级韩国三级日本一级| 91精品91久久久中77777| 91免费在线视频观看| a亚洲天堂av| 91影院在线免费观看| eeuss鲁片一区二区三区| 国产91精品在线观看| 国产成人啪午夜精品网站男同| 精品中文字幕一区二区小辣椒| 蜜桃视频一区二区三区| 麻豆久久久久久| 久久精品国产久精国产爱| 日本中文一区二区三区| 青青草国产成人99久久| 日本美女一区二区三区视频| 日韩精品免费专区| 九九九久久久精品| 国产精品一级二级三级| 大桥未久av一区二区三区中文| 国产成人在线视频网址| 成人午夜私人影院| 99精品国产视频| 91国产福利在线| 欧美高清视频www夜色资源网| 欧美日韩精品免费观看视频| 欧美日韩中文国产| 日韩欧美国产午夜精品| 欧美xxx久久| 国产三级精品三级| 亚洲免费观看在线观看| 亚洲最大的成人av| 秋霞午夜av一区二区三区| 美国毛片一区二区| 国产成人av电影在线| 99视频在线精品| 欧美日本在线一区| 日韩免费福利电影在线观看| 久久久久国产免费免费| 亚洲婷婷在线视频| 天涯成人国产亚洲精品一区av| 蜜桃精品视频在线| 99视频有精品| 在线不卡免费av| 久久久久久久久久久电影| 亚洲欧洲日韩在线| 日本中文字幕一区| www.综合网.com| 欧美色图天堂网| 26uuu国产一区二区三区| 国产精品免费免费| 日韩va欧美va亚洲va久久| 国产成人av电影| 欧美日韩视频在线一区二区| 国产福利91精品一区二区三区| 91麻豆国产福利在线观看| 色婷婷综合中文久久一本| 欧美一区二区国产| 国产精品国产a| 日韩在线一二三区| 国产91精品精华液一区二区三区| 色欲综合视频天天天| 日韩精品专区在线影院重磅| 国产精品视频一二三区| 日韩在线一区二区| 99re成人精品视频| 日韩精品一区国产麻豆| 一区二区三区欧美| 国产精品一区二区91| 欧美性xxxxxx少妇| 久久精品水蜜桃av综合天堂| 亚洲v精品v日韩v欧美v专区| 成人av综合在线| 亚洲精品在线免费播放| 亚洲国产精品尤物yw在线观看| 国产激情视频一区二区三区欧美| 欧美另类z0zxhd电影| 综合久久国产九一剧情麻豆| 精品制服美女久久| 欧美日韩久久一区二区| 综合激情成人伊人| 国产精品一级二级三级| 日韩三级视频在线观看| 亚洲在线观看免费| 大胆欧美人体老妇| 精品国产一区二区三区四区四 | 国产精品污www在线观看| 免费精品视频在线| 欧美揉bbbbb揉bbbbb| 中文字幕在线观看一区二区| 九九九久久久精品| 日韩一区二区免费在线电影| 一区二区激情视频| 91在线码无精品| 国产午夜亚洲精品午夜鲁丝片| 蜜桃传媒麻豆第一区在线观看| 欧美日韩一区小说| 亚洲一区二区视频在线观看| 色婷婷综合久久久久中文一区二区| 亚洲国产精品精华液ab| 国产成人av资源| 久久精品一二三| 国产经典欧美精品| 国产欧美日韩不卡免费| 国产乱国产乱300精品| 欧美精品一区二区高清在线观看| 人人精品人人爱| 日韩免费一区二区三区在线播放| 香蕉av福利精品导航| 日韩久久精品一区| 日本视频一区二区| 日韩欧美黄色影院| 黄色资源网久久资源365| 欧美电视剧在线观看完整版| 男女性色大片免费观看一区二区| 欧美猛男gaygay网站| 五月天一区二区三区| 欧美美女一区二区三区| 石原莉奈在线亚洲三区| 日韩女优制服丝袜电影| 麻豆一区二区三| 久久免费美女视频| 成人国产精品免费网站| 亚洲激情网站免费观看| 欧洲一区二区三区在线| 日韩福利视频导航| 久久综合九色综合97婷婷| 国产精品一区二区久激情瑜伽 | 亚洲欧美精品午睡沙发| 91精品福利视频| 日韩精品视频网站| 久久亚洲综合av| 99精品视频在线观看| 亚洲国产另类av| 精品成人一区二区| 大陆成人av片| 亚洲影院久久精品| 欧美大片在线观看| 波多野结衣一区二区三区| 一区二区三区中文免费| 91精品国产色综合久久ai换脸| 狠狠色伊人亚洲综合成人| 国产精品色在线| 欧美日韩免费高清一区色橹橹| 蜜臀久久99精品久久久久久9 | 久久久久久久久久看片| 一本高清dvd不卡在线观看| 免费xxxx性欧美18vr| 国产欧美一区二区三区在线老狼| 色哟哟欧美精品| 精品一区二区免费在线观看| 国产精品国产自产拍在线| 欧美精三区欧美精三区| 成人性视频网站| 日韩高清电影一区| 国产精品麻豆久久久| 欧美性感一类影片在线播放| 国产自产视频一区二区三区| 亚洲精品少妇30p| 久久综合色天天久久综合图片| 99久久综合99久久综合网站| 日韩av一级片| 亚洲婷婷综合色高清在线| 精品国产一区二区三区久久久蜜月 | 在线观看三级视频欧美| 国产精品一色哟哟哟| 亚洲激情网站免费观看| 久久综合色综合88| 欧美日韩美少妇| 成人h动漫精品一区二区| 蜜臀国产一区二区三区在线播放| 日韩av电影免费观看高清完整版在线观看| 国产欧美日产一区| 日韩免费视频一区| 在线观看亚洲精品| 波多野结衣欧美|