⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gbx_exec_loop.c

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 C
📖 第 1 页 / 共 3 页
字号:
/***************************************************************************  exec_loop.c  The interpreter main loop  (c) 2000-2004 Beno� Minisini <gambas@users.sourceforge.net>  This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 1, or (at your option)  any later version.  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.***************************************************************************/#define __GBX_EXEC_LOOP_C#include "gb_common.h"#include "gb_error.h"#include "gbx_type.h"#include "gbx_debug.h"#include "gbx_subr.h"#include "gb_pcode.h"#include "gbx_stack.h"#include "gbx_trace.h"#include "gbx_event.h"#include "gbx_value.h"#include "gbx_local.h"#include "gbx_string.h"#include "gbx_api.h"#include "gbx_archive.h"#include "gbx_exec.h"#define SUBR_is EXEC_nop#define SUBR_beep EXEC_nop#define GET_XXX()   (((signed short)(code << 4)) >> 4)#define GET_UXXX()   (code & 0xFFF)#define GET_7XX()   (code & 0x7FF)#define GET_XX()    ((signed char)(code & 0xFF))#define GET_3X()    (code & 0x3F)PRIVATE EXEC_FUNC SubrTable[] ={  /* 28 */  SUBR_eq,            SUBR_ne,            SUBR_gt,            SUBR_le,  /* 2C */  SUBR_lt,            SUBR_ge,            SUBR_is,            SUBR_case,  /* 30 */  SUBR_add,           SUBR_sub,           SUBR_mul,           SUBR_div,  /* 34 */  SUBR_neg,           SUBR_quo,           SUBR_rem,           SUBR_pow,  /* 38 */  SUBR_and,           SUBR_or,            SUBR_not,           SUBR_xor,  /* 3C */  SUBR_cat,           SUBR_like,          SUBR_file,          EXEC_ILLEGAL,  SUBR_left,       /* 00 */  SUBR_mid,        /* 01 */  SUBR_right,      /* 02 */  SUBR_len,        /* 03 */  SUBR_space,      /* 04 */  SUBR_string,     /* 05 */  SUBR_trim,       /* 06 */  SUBR_upper,      /* 07 */  SUBR_lower,      /* 08 */  SUBR_chr,        /* 09 */  SUBR_asc,        /* 10 */  SUBR_instr,      /* 11 */  SUBR_instr,      /* 12 */  SUBR_subst,      /* 13 */  SUBR_replace,    /* 14 */  SUBR_split,      /* 15 */  SUBR_sconv,      /* 16 */  SUBR_abs,        /* 17 */  SUBR_int,        /* 18 */  SUBR_math,       /* 19 */  SUBR_sgn,        /* 20 */  SUBR_fix,        /* 21 */  SUBR_pi,         /* 22 */  SUBR_round,      /* 23 */  SUBR_randomize,  /* 24 */  SUBR_rnd,        /* 25 */  SUBR_min_max,    /* 26 */  SUBR_min_max,    /* 27 */  SUBR_if,         /* 28 */  SUBR_choose,     /* 29 */  SUBR_array,      /* 30 */  EXEC_ILLEGAL,    /* 31 */  EXEC_ILLEGAL,    /* 32 */  EXEC_ILLEGAL,    /* 33 */  EXEC_ILLEGAL,    /* 34 */  SUBR_bit,        /* 35 */  EXEC_ILLEGAL,    /* 36 */  EXEC_ILLEGAL,    /* 37 */  EXEC_ILLEGAL,    /* 38 */  EXEC_ILLEGAL,    /* 39 */  EXEC_ILLEGAL,    /* 40 */  EXEC_ILLEGAL,    /* 41 */  SUBR_is_type,    /* 42 */  SUBR_type,       /* 43 */  SUBR_conv,       /* 44 */  SUBR_bin,        /* 45 */  SUBR_hex,        /* 46 */  SUBR_val,        /* 47 */  SUBR_str,        /* 48 */  SUBR_format,     /* 49 */  SUBR_timer,      /* 50 */  SUBR_now,        /* 51 */  SUBR_year,       /* 52 */  SUBR_date,       /* 53 */  SUBR_time,       /* 54 */  SUBR_error,      /* 55 */  SUBR_eval,       /* 56 */  SUBR_use,        /* 57 */  SUBR_beep,       /* 58 */  SUBR_wait,       /* 59 */  SUBR_open,       /* 60 */  SUBR_close,      /* 61 */  SUBR_input,      /* 62 */  SUBR_print,      /* 63 */  SUBR_read,       /* 64 */  SUBR_write,      /* 65 */  SUBR_eof,        /* 66 */  SUBR_lof,        /* 67 */  SUBR_seek,       /* 68 */  SUBR_kill,       /* 69 */  SUBR_mkdir,      /* 70 */  SUBR_rmdir,      /* 71 */  SUBR_exist,      /* 72 */  SUBR_rename,     /* 73 */  SUBR_stat,       /* 74 */  SUBR_linput,     /* 75 */  SUBR_temp,       /* 76 */  SUBR_isdir,      /* 77 */  SUBR_dir,        /* 78 */  SUBR_flush,      /* 79 */  SUBR_exec,       /* 80 */  SUBR_copy,       /* 81 */  SUBR_access,     /* 82 */  SUBR_link,       /* 83 */  SUBR_lock,       /* 84 */  EXEC_ILLEGAL,    /* 85 */  EXEC_ILLEGAL,    /* 86 */};PUBLIC void EXEC_loop(void){  static void *jump_table[256] =  {    /* 00 NOP             */  &&_NEXT,    /* 01 PUSH LOCAL      */  &&_PUSH_LOCAL,    /* 02 PUSH ARRAY      */  &&_PUSH_ARRAY,    /* 03 PUSH UNKNOWN    */  &&_PUSH_UNKNOWN,    /* 04 illegal         */  &&_ILLEGAL,    /* 05 illegal         */  &&_ILLEGAL,    /* 06 PUSH SPECIAL    */  &&_PUSH_SPECIAL,    /* 07 PUSH EVENT      */  &&_PUSH_EVENT,    /* 08 QUIT            */  &&_QUIT,    /* 09 POP LOCAL       */  &&_POP_LOCAL,    /* 0A POP ARRAY       */  &&_POP_ARRAY,    /* 0B POP UNKNOWN     */  &&_POP_UNKNOWN,    /* 0C POP OPTIONAL    */  &&_POP_OPTIONAL,    /* 0D POP CTRL        */  &&_POP_CTRL,    /* 0E BREAK           */  &&_BREAK,    /* 0F RETURN          */  &&_RETURN,    /* 10 PUSH SHORT      */  &&_PUSH_SHORT,    /* 11 PUSH INTEGER    */  &&_PUSH_INTEGER,    /* 12 PUSH CHAR       */  &&_PUSH_CHAR,    /* 13 PUSH ME         */  &&_PUSH_ME,    /* 14 PUSH NULL       */  &&_PUSH_NULL,    /* 15 PUSH VOID       */  &&_PUSH_VOID,    /* 16 PUSH RETURN     */  &&_ILLEGAL,    /* 17 PUSH BOOLEAN    */  &&_PUSH_BOOLEAN,    /* 18 PUSH LAST       */  &&_PUSH_LAST,    /* 19 EVENT           */  &&_EVENT,    /* 1A TRY             */  &&_TRY,    /* 1B END TRY         */  &&_END_TRY,    /* 1C CATCH           */  &&_CATCH,    /* 1D DUP             */  &&_DUP,    /* 1E DROP            */  &&_DROP,    /* 1F NEW             */  &&_NEW,    /* 20 JUMP            */  &&_JUMP,    /* 21 JUMP IF TRUE    */  &&_JUMP_IF_TRUE,    /* 22 JUMP IF FALSE   */  &&_JUMP_IF_FALSE,    /* 23 CALL            */  &&_CALL,    /* 24 JUMP FIRST      */  &&_JUMP_FIRST,    /* 25 JUMP NEXT       */  &&_JUMP_NEXT,    /* 26 FIRST           */  &&_ENUM_FIRST,    /* 27 NEXT            */  &&_ENUM_NEXT,    /* 28                 */  &&_SUBR,    /* 29                 */  &&_SUBR,    /* 2A                 */  &&_SUBR,    /* 2B                 */  &&_SUBR,    /* 2C                 */  &&_SUBR,    /* 2D                 */  &&_SUBR,    /* 2E                 */  &&_SUBR,    /* 2F                 */  &&_SUBR,    /* 30                 */  &&_SUBR,    /* 31                 */  &&_SUBR,    /* 32                 */  &&_SUBR,    /* 33                 */  &&_SUBR,    /* 34                 */  &&_SUBR,    /* 35                 */  &&_SUBR,    /* 36                 */  &&_SUBR,    /* 37                 */  &&_SUBR,    /* 38                 */  &&_SUBR,    /* 39                 */  &&_SUBR,    /* 3A                 */  &&_SUBR,    /* 3B                 */  &&_SUBR,    /* 3C                 */  &&_SUBR,    /* 3D                 */  &&_SUBR,    /* 3E                 */  &&_SUBR,    /* 3F                 */  &&_SUBR,    /* 40                 */  &&_SUBR,    /* 41                 */  &&_SUBR,    /* 42                 */  &&_SUBR,    /* 43                 */  &&_SUBR,    /* 44                 */  &&_SUBR,    /* 45                 */  &&_SUBR,    /* 46                 */  &&_SUBR,    /* 47                 */  &&_SUBR,    /* 48                 */  &&_SUBR,    /* 49                 */  &&_SUBR,    /* 4A                 */  &&_SUBR,    /* 4B                 */  &&_SUBR,    /* 4C                 */  &&_SUBR,    /* 4D                 */  &&_SUBR,    /* 4E                 */  &&_SUBR,    /* 4F                 */  &&_SUBR,    /* 50                 */  &&_SUBR,    /* 51                 */  &&_SUBR,    /* 52                 */  &&_SUBR,    /* 53                 */  &&_SUBR,    /* 54                 */  &&_SUBR,    /* 55                 */  &&_SUBR,    /* 56                 */  &&_SUBR,    /* 57                 */  &&_SUBR,    /* 58                 */  &&_SUBR,    /* 59                 */  &&_SUBR,    /* 5A                 */  &&_SUBR,    /* 5B                 */  &&_SUBR,    /* 5C                 */  &&_SUBR,    /* 5D                 */  &&_SUBR,    /* 5E                 */  &&_SUBR,    /* 5F                 */  &&_SUBR,    /* 60                 */  &&_SUBR,    /* 61                 */  &&_SUBR,    /* 62                 */  &&_SUBR,    /* 63                 */  &&_SUBR,    /* 64                 */  &&_SUBR,    /* 65                 */  &&_SUBR,    /* 66                 */  &&_SUBR,    /* 67                 */  &&_SUBR,    /* 68                 */  &&_SUBR,    /* 69                 */  &&_SUBR,    /* 6A                 */  &&_SUBR,    /* 6B                 */  &&_SUBR,    /* 6C                 */  &&_SUBR,    /* 6D                 */  &&_SUBR,    /* 6E                 */  &&_SUBR,    /* 6F                 */  &&_SUBR,    /* 70                 */  &&_SUBR,    /* 71                 */  &&_SUBR,    /* 72                 */  &&_SUBR,    /* 73                 */  &&_SUBR,    /* 74                 */  &&_SUBR,    /* 75                 */  &&_SUBR,    /* 76                 */  &&_SUBR,    /* 77                 */  &&_SUBR,    /* 78                 */  &&_SUBR,    /* 79                 */  &&_SUBR,    /* 7A                 */  &&_SUBR,    /* 7B                 */  &&_SUBR,    /* 7C                 */  &&_SUBR,    /* 7D                 */  &&_SUBR,    /* 7E                 */  &&_SUBR,    /* 7F                 */  &&_SUBR,    /* 80                 */  &&_SUBR,    /* 81                 */  &&_SUBR,    /* 82                 */  &&_SUBR,    /* 83                 */  &&_SUBR,    /* 84                 */  &&_SUBR,    /* 85                 */  &&_SUBR,    /* 86                 */  &&_SUBR,    /* 87                 */  &&_SUBR,    /* 88                 */  &&_SUBR,    /* 89                 */  &&_SUBR,    /* 8A                 */  &&_SUBR,    /* 8B                 */  &&_SUBR,    /* 8C                 */  &&_SUBR,    /* 8D                 */  &&_SUBR,    /* 8E                 */  &&_SUBR,    /* 8F                 */  &&_SUBR,    /* 90                 */  &&_SUBR,    /* 91                 */  &&_SUBR,    /* 92                 */  &&_SUBR,    /* 93                 */  &&_SUBR,    /* 94                 */  &&_SUBR,    /* 95                 */  &&_SUBR,    /* 96                 */  &&_SUBR,    /* 97                 */  &&_SUBR,    /* 98                 */  &&_SUBR,    /* 99                 */  &&_SUBR,    /* 9A                 */  &&_SUBR,    /* 9B                 */  &&_SUBR,    /* 9C                 */  &&_SUBR,    /* 9D                 */  &&_ILLEGAL,    /* 9E                 */  &&_ILLEGAL,    /* 9F                 */  &&_ILLEGAL,    /* A0 ADD QUICK       */  &&_TODO,    /* A1 ADD QUICK       */  &&_TODO,    /* A2 ADD QUICK       */  &&_TODO,    /* A3 ADD QUICK       */  &&_TODO,    /* A4 ADD QUICK       */  &&_TODO,    /* A5 ADD QUICK       */  &&_TODO,    /* A6 ADD QUICK       */  &&_TODO,    /* A7 ADD QUICK       */  &&_TODO,    /* A8 ADD QUICK       */  &&_TODO,    /* A9 ADD QUICK       */  &&_TODO,    /* AA ADD QUICK       */  &&_TODO,    /* AB ADD QUICK       */  &&_TODO,    /* AC ADD QUICK       */  &&_TODO,    /* AD ADD QUICK       */  &&_TODO,    /* AE ADD QUICK       */  &&_TODO,    /* AF ADD QUICK       */  &&_TODO,    /* B0 PUSH CLASS      */  &&_PUSH_CLASS,    /* B1 PUSH CLASS      */  &&_PUSH_CLASS,    /* B2 PUSH CLASS      */  &&_PUSH_CLASS,    /* B3 PUSH CLASS      */  &&_PUSH_CLASS,    /* B4 PUSH CLASS      */  &&_PUSH_CLASS,    /* B5 PUSH CLASS      */  &&_PUSH_CLASS,    /* B6 PUSH CLASS      */  &&_PUSH_CLASS,    /* B7 PUSH CLASS      */  &&_PUSH_CLASS,    /* B8 PUSH FUNCTION   */  &&_PUSH_FUNCTION,    /* B9 PUSH FUNCTION   */  &&_PUSH_FUNCTION,    /* BA PUSH FUNCTION   */  &&_PUSH_FUNCTION,    /* BB PUSH FUNCTION   */  &&_PUSH_FUNCTION,    /* BC PUSH FUNCTION   */  &&_PUSH_FUNCTION,    /* BD PUSH FUNCTION   */  &&_PUSH_FUNCTION,    /* BE PUSH FUNCTION   */  &&_PUSH_FUNCTION,    /* BF PUSH FUNCTION   */  &&_PUSH_FUNCTION,    /* C0 PUSH DYNAMIC    */  &&_PUSH_DYNAMIC,    /* C1 PUSH DYNAMIC    */  &&_PUSH_DYNAMIC,    /* C2 PUSH DYNAMIC    */  &&_PUSH_DYNAMIC,    /* C3 PUSH DYNAMIC    */  &&_PUSH_DYNAMIC,    /* C4 PUSH DYNAMIC    */  &&_PUSH_DYNAMIC,    /* C5 PUSH DYNAMIC    */  &&_PUSH_DYNAMIC,    /* C6 PUSH DYNAMIC    */  &&_PUSH_DYNAMIC,    /* C7 PUSH DYNAMIC    */  &&_PUSH_DYNAMIC,    /* C8 PUSH STATIC     */  &&_PUSH_STATIC,    /* C9 PUSH STATIC     */  &&_PUSH_STATIC,    /* CA PUSH STATIC     */  &&_PUSH_STATIC,    /* CB PUSH STATIC     */  &&_PUSH_STATIC,    /* CC PUSH STATIC     */  &&_PUSH_STATIC,    /* CD PUSH STATIC     */  &&_PUSH_STATIC,    /* CE PUSH STATIC     */  &&_PUSH_STATIC,    /* CF PUSH STATIC     */  &&_PUSH_STATIC,    /* D0 POP DYNAMIC     */  &&_POP_DYNAMIC,    /* D1 POP DYNAMIC     */  &&_POP_DYNAMIC,    /* D2 POP DYNAMIC     */  &&_POP_DYNAMIC,    /* D3 POP DYNAMIC     */  &&_POP_DYNAMIC,    /* D4 POP DYNAMIC     */  &&_POP_DYNAMIC,    /* D5 POP DYNAMIC     */  &&_POP_DYNAMIC,    /* D6 POP DYNAMIC     */  &&_POP_DYNAMIC,    /* D7 POP DYNAMIC     */  &&_POP_DYNAMIC,    /* D8 POP STATIC      */  &&_POP_STATIC,    /* D9 POP STATIC      */  &&_POP_STATIC,    /* DA POP STATIC      */  &&_POP_STATIC,    /* DB POP STATIC      */  &&_POP_STATIC,    /* DC POP STATIC      */  &&_POP_STATIC,    /* DD POP STATIC      */  &&_POP_STATIC,    /* DE POP STATIC      */  &&_POP_STATIC,    /* DF POP STATIC      */  &&_POP_STATIC,    /* E0 PUSH CONST      */  &&_PUSH_CONST,    /* E1 PUSH CONST      */  &&_PUSH_CONST,    /* E2 PUSH CONST      */  &&_PUSH_CONST,    /* E3 PUSH CONST      */  &&_PUSH_CONST,    /* E4 PUSH CONST      */  &&_PUSH_CONST,    /* E5 PUSH CONST      */  &&_PUSH_CONST,    /* E6 PUSH CONST      */  &&_PUSH_CONST,    /* E7 PUSH CONST      */  &&_PUSH_CONST,    /* E8 PUSH CONST      */  &&_PUSH_CONST,    /* E9 PUSH CONST      */  &&_PUSH_CONST,    /* EA PUSH CONST      */  &&_PUSH_CONST,    /* EB PUSH CONST      */  &&_PUSH_CONST,    /* EC PUSH CONST      */  &&_PUSH_CONST,    /* ED PUSH CONST      */  &&_PUSH_CONST,    /* EE PUSH CONST      */  &&_PUSH_CONST,    /* EF PUSH CONST      */  &&_PUSH_CONST,    /* F0 PUSH QUICK      */  &&_PUSH_QUICK,    /* F1 PUSH QUICK      */  &&_PUSH_QUICK,    /* F2 PUSH QUICK      */  &&_PUSH_QUICK,    /* F3 PUSH QUICK      */  &&_PUSH_QUICK,    /* F4 PUSH QUICK      */  &&_PUSH_QUICK,    /* F5 PUSH QUICK      */  &&_PUSH_QUICK,    /* F6 PUSH QUICK      */  &&_PUSH_QUICK,    /* F7 PUSH QUICK      */  &&_PUSH_QUICK,    /* F8 PUSH QUICK      */  &&_PUSH_QUICK,    /* F9 PUSH QUICK      */  &&_PUSH_QUICK,    /* FA PUSH QUICK      */  &&_PUSH_QUICK,    /* FB PUSH QUICK      */  &&_PUSH_QUICK,    /* FC PUSH QUICK      */  &&_PUSH_QUICK,    /* FD PUSH QUICK      */  &&_PUSH_QUICK,    /* FE PUSH QUICK      */  &&_PUSH_QUICK,    /* FF PUSH QUICK      */  &&_PUSH_QUICK  };  register int ind;  register ushort code;  /*ushort uind;*/  TYPE type;  void _pop_ctrl(int ind)  {    register VALUE *val = &BP[ind];    RELEASE(val);    SP--;    *val = *SP;  }  goto _MAIN;/*-----------------------------------------------*/_NEXT3:  PC++;_NEXT2:  PC++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -