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

📄 gbx_eval.c

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 C
字号:
/***************************************************************************  eval.c  Expression evaluator  (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_EVAL_C#include "gb_common.h"#include "gb_array.h"#include "gbx_string.h"#include "gbx_class.h"#include "gbx_exec.h"#include "gbx_eval.h"#include "gbx_c_collection.h"#include "gbx_api.h"PUBLIC bool EVAL_debug = FALSE;PRIVATE EXPRESSION *EVAL;PRIVATE void EVAL_enter(){  /* sauvegarde du contexte */  STACK_push_frame(&EXEC_current);  /* V閞ification de la pile */  STACK_check(EVAL->func.stack_usage);  /* entr閑 de fonction */  BP = SP;  FP = &EVAL->func;  PC = EVAL->func.code;    OP = NULL;  CP = &EVAL->exec_class;  EP = NULL;  EC = NULL;  RP->type = T_VOID;}PRIVATE bool EVAL_exec(){  STACK_push_frame(&EXEC_current);  PC = NULL;  EVAL_enter();    ERROR_clear();  TRY  {    EXEC_loop();    TEMP = RET;    /*RET.type = T_VOID;*/    UNBORROW(&TEMP);    STACK_pop_frame(&EXEC_current);  }  CATCH  {    STACK_pop_frame(&EXEC_current);    STACK_pop_frame(&EXEC_current);  }  END_TRY  return (ERROR_info.code != 0);}PUBLIC bool EVAL_expression(EXPRESSION *expr, EVAL_FUNCTION func){  int i;  EVAL_SYMBOL *sym;  /*HASH_TABLE *hash_table;  char *name;  CCOL_ENUM enum_state;*/  EVAL = expr;  #ifdef DEBUG  printf("EVAL: %s\n", EVAL->source);  #endif  STACK_check(EVAL->nvar);  for (i = 0; i < EVAL->nvar; i++)  {    SP->type = T_VARIANT;    SP->_variant.vtype = T_NULL;    sym = (EVAL_SYMBOL *)TABLE_get_symbol(EVAL->table, EVAL->var[EVAL->nvar - i - 1]);    if ((*func)(sym->sym.name, sym->sym.len, (GB_VARIANT *)SP))    {      GB_Error("Unknown symbol");      /* ?? La pile est elle bien lib閞閑 */      return TRUE;    }    /*VALUE_read(SP, &value, T_VARIANT);*/    BORROW(SP);    SP++;  }  /*EXEC_function(&exec, EVAL->nvar);*/  return EVAL_exec();}

⌨️ 快捷键说明

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