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

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

?? cli-script.c

?? 這個(gè)是LINUX下的GDB調(diào)度工具的源碼
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
/* GDB CLI command scripting.   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,   1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Free Software   Foundation, Inc.   This file is part of GDB.   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 2 of the License, 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., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  */#include "defs.h"#include "value.h"#include "language.h"		/* For value_true */#include <ctype.h>#include "ui-out.h"#include "gdb_string.h"#include "top.h"#include "cli/cli-cmds.h"#include "cli/cli-decode.h"#include "cli/cli-script.h"/* Prototypes for local functions */static enum command_control_type	recurse_read_control_structure (struct command_line *current_cmd);static char *insert_args (char *line);static struct cleanup * setup_user_args (char *p);static void validate_comname (char *);/* Level of control structure.  */static int control_level;/* Source command state variable. */static int source_error_allocated;/* Structure for arguments to user defined functions.  */#define MAXUSERARGS 10struct user_args  {    struct user_args *next;    struct      {	char *arg;	int len;      }    a[MAXUSERARGS];    int count;  } *user_args;/* Allocate, initialize a new command line structure for one of the   control commands (if/while).  */static struct command_line *build_command_line (enum command_control_type type, char *args){  struct command_line *cmd;  if (args == NULL)    error ("if/while commands require arguments.\n");  cmd = (struct command_line *) xmalloc (sizeof (struct command_line));  cmd->next = NULL;  cmd->control_type = type;  cmd->body_count = 1;  cmd->body_list    = (struct command_line **) xmalloc (sizeof (struct command_line *)					* cmd->body_count);  memset (cmd->body_list, 0, sizeof (struct command_line *) * cmd->body_count);  cmd->line = savestring (args, strlen (args));  return cmd;}/* Build and return a new command structure for the control commands   such as "if" and "while".  */static struct command_line *get_command_line (enum command_control_type type, char *arg){  struct command_line *cmd;  struct cleanup *old_chain = NULL;  /* Allocate and build a new command line structure.  */  cmd = build_command_line (type, arg);  old_chain = make_cleanup_free_command_lines (&cmd);  /* Read in the body of this command.  */  if (recurse_read_control_structure (cmd) == invalid_control)    {      warning ("error reading in control structure\n");      do_cleanups (old_chain);      return NULL;    }  discard_cleanups (old_chain);  return cmd;}/* Recursively print a command (including full control structures).  */voidprint_command_lines (struct ui_out *uiout, struct command_line *cmd,		     unsigned int depth){  struct command_line *list;  list = cmd;  while (list)    {      if (depth)	ui_out_spaces (uiout, 2 * depth);      /* A simple command, print it and continue.  */      if (list->control_type == simple_control)	{	  ui_out_field_string (uiout, NULL, list->line);	  ui_out_text (uiout, "\n");	  list = list->next;	  continue;	}      /* loop_continue to jump to the start of a while loop, print it         and continue. */      if (list->control_type == continue_control)	{	  ui_out_field_string (uiout, NULL, "loop_continue");	  ui_out_text (uiout, "\n");	  list = list->next;	  continue;	}      /* loop_break to break out of a while loop, print it and continue.  */      if (list->control_type == break_control)	{	  ui_out_field_string (uiout, NULL, "loop_break");	  ui_out_text (uiout, "\n");	  list = list->next;	  continue;	}      /* A while command.  Recursively print its subcommands and continue.  */      if (list->control_type == while_control)	{	  ui_out_field_fmt (uiout, NULL, "while %s", list->line);	  ui_out_text (uiout, "\n");	  print_command_lines (uiout, *list->body_list, depth + 1);	  if (depth)	    ui_out_spaces (uiout, 2 * depth);	  ui_out_field_string (uiout, NULL, "end");	  ui_out_text (uiout, "\n");	  list = list->next;	  continue;	}      /* An if command.  Recursively print both arms before continueing.  */      if (list->control_type == if_control)	{	  ui_out_field_fmt (uiout, NULL, "if %s", list->line);	  ui_out_text (uiout, "\n");	  /* The true arm. */	  print_command_lines (uiout, list->body_list[0], depth + 1);	  /* Show the false arm if it exists.  */	  if (list->body_count == 2)	    {	      if (depth)		ui_out_spaces (uiout, 2 * depth);	      ui_out_field_string (uiout, NULL, "else");	      ui_out_text (uiout, "\n");	      print_command_lines (uiout, list->body_list[1], depth + 1);	    }	  if (depth)	    ui_out_spaces (uiout, 2 * depth);	  ui_out_field_string (uiout, NULL, "end");	  ui_out_text (uiout, "\n");	  list = list->next;	  continue;	}      /* ignore illegal command type and try next */      list = list->next;    }				/* while (list) */}/* Handle pre-post hooks.  */static voidclear_hook_in_cleanup (void *data){  struct cmd_list_element *c = data;  c->hook_in = 0; /* Allow hook to work again once it is complete */}voidexecute_cmd_pre_hook (struct cmd_list_element *c){  if ((c->hook_pre) && (!c->hook_in))    {      struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);      c->hook_in = 1; /* Prevent recursive hooking */      execute_user_command (c->hook_pre, (char *) 0);      do_cleanups (cleanups);    }}voidexecute_cmd_post_hook (struct cmd_list_element *c){  if ((c->hook_post) && (!c->hook_in))    {      struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);      c->hook_in = 1; /* Prevent recursive hooking */      execute_user_command (c->hook_post, (char *) 0);      do_cleanups (cleanups);    }}/* Execute the command in CMD.  */static voiddo_restore_user_call_depth (void * call_depth){	  int * depth = call_depth;  /* We will be returning_to_top_level() at this point, so we want to     reset our depth. */  (*depth) = 0;}voidexecute_user_command (struct cmd_list_element *c, char *args){  struct command_line *cmdlines;  struct cleanup *old_chain;  enum command_control_type ret;  static int user_call_depth = 0;  extern int max_user_call_depth;  old_chain = setup_user_args (args);  cmdlines = c->user_commands;  if (cmdlines == 0)    /* Null command */    return;  if (++user_call_depth > max_user_call_depth)    error ("Max user call depth exceeded -- command aborted\n");  old_chain = make_cleanup (do_restore_user_call_depth, &user_call_depth);  /* Set the instream to 0, indicating execution of a     user-defined function.  */  old_chain = make_cleanup (do_restore_instream_cleanup, instream);  instream = (FILE *) 0;  while (cmdlines)    {      ret = execute_control_command (cmdlines);      if (ret != simple_control && ret != break_control)	{	  warning ("Error in control structure.\n");	  break;	}      cmdlines = cmdlines->next;    }  do_cleanups (old_chain);  user_call_depth--;}enum command_control_typeexecute_control_command (struct command_line *cmd){  struct expression *expr;  struct command_line *current;  struct cleanup *old_chain = make_cleanup (null_cleanup, 0);  struct value *val;  struct value *val_mark;  int loop;  enum command_control_type ret;  char *new_line;  /* Start by assuming failure, if a problem is detected, the code     below will simply "break" out of the switch.  */  ret = invalid_control;  switch (cmd->control_type)    {    case simple_control:      /* A simple command, execute it and return.  */      new_line = insert_args (cmd->line);      if (!new_line)	break;      make_cleanup (free_current_contents, &new_line);      execute_command (new_line, 0);      ret = cmd->control_type;      break;    case continue_control:    case break_control:      /* Return for "continue", and "break" so we can either         continue the loop at the top, or break out.  */      ret = cmd->control_type;      break;    case while_control:      {	/* Parse the loop control expression for the while statement.  */	new_line = insert_args (cmd->line);	if (!new_line)	  break;	make_cleanup (free_current_contents, &new_line);	expr = parse_expression (new_line);	make_cleanup (free_current_contents, &expr);	ret = simple_control;	loop = 1;	/* Keep iterating so long as the expression is true.  */	while (loop == 1)	  {	    int cond_result;	    QUIT;	    /* Evaluate the expression.  */	    val_mark = value_mark ();	    val = evaluate_expression (expr);	    cond_result = value_true (val);	    value_free_to_mark (val_mark);	    /* If the value is false, then break out of the loop.  */	    if (!cond_result)	      break;	    /* Execute the body of the while statement.  */	    current = *cmd->body_list;	    while (current)	      {		ret = execute_control_command (current);		/* If we got an error, or a "break" command, then stop		   looping.  */		if (ret == invalid_control || ret == break_control)		  {		    loop = 0;		    break;		  }		/* If we got a "continue" command, then restart the loop		   at this point.  */		if (ret == continue_control)		  break;		/* Get the next statement.  */		current = current->next;	      }	  }	/* Reset RET so that we don't recurse the break all the way down.  */	if (ret == break_control)	  ret = simple_control;	break;      }    case if_control:      {	new_line = insert_args (cmd->line);	if (!new_line)	  break;	make_cleanup (free_current_contents, &new_line);	/* Parse the conditional for the if statement.  */	expr = parse_expression (new_line);	make_cleanup (free_current_contents, &expr);	current = NULL;	ret = simple_control;	/* Evaluate the conditional.  */	val_mark = value_mark ();	val = evaluate_expression (expr);	/* Choose which arm to take commands from based on the value of the	   conditional expression.  */	if (value_true (val))	  current = *cmd->body_list;	else if (cmd->body_count == 2)	  current = *(cmd->body_list + 1);	value_free_to_mark (val_mark);	/* Execute commands in the given arm.  */	while (current)	  {	    ret = execute_control_command (current);	    /* If we got an error, get out.  */	    if (ret != simple_control)	      break;	    /* Get the next statement in the body.  */	    current = current->next;	  }	break;      }    default:      warning ("Invalid control type in command structure.");      break;    }  do_cleanups (old_chain);  return ret;}/* "while" command support.  Executes a body of statements while the

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
懂色av中文一区二区三区 | 国产欧美日韩综合精品一区二区| 国产在线日韩欧美| 国产精品国产三级国产普通话99 | 五月婷婷激情综合网| 2023国产一二三区日本精品2022| av福利精品导航| 久久精品国产网站| 亚洲精品国产品国语在线app| 日韩一区二区不卡| 91蜜桃在线观看| 精品一区二区三区在线播放视频 | 国产精品 欧美精品| 亚洲一二三四久久| 国产欧美日韩另类一区| 91精品综合久久久久久| 97精品视频在线观看自产线路二| 狠狠色丁香婷综合久久| 日韩精品一二三四| 亚洲精品视频在线观看免费 | 国产精品久99| 久久日韩精品一区二区五区| 欧美日韩黄色一区二区| 色先锋久久av资源部| 成人av午夜影院| 国产九色sp调教91| 老司机一区二区| 日韩精品三区四区| 亚洲成av人在线观看| 一级女性全黄久久生活片免费| 国产精品激情偷乱一区二区∴| 国产无一区二区| 久久综合av免费| 精品福利一二区| 精品久久久久久久久久久久包黑料| 欧美理论在线播放| 精品国产免费人成在线观看| 欧美精品乱码久久久久久按摩| 日本久久电影网| 91久久精品日日躁夜夜躁欧美| 99免费精品在线观看| 不卡的av网站| 91视频观看视频| 色婷婷久久综合| 91免费看视频| 91福利国产精品| 日韩精品色哟哟| 午夜亚洲福利老司机| 日韩免费成人网| 丁香天五香天堂综合| 亚洲免费观看高清完整版在线| 欧美一区二区三区视频在线观看 | 欧美日本精品一区二区三区| 欧美另类变人与禽xxxxx| 欧美久久一区二区| 日韩写真欧美这视频| 精品国产网站在线观看| 久久久久久久久久久黄色 | 亚洲福利一区二区三区| 亚洲电影一区二区| 日韩综合小视频| 久久99国产精品免费网站| 精品一区二区三区欧美| 成人做爰69片免费看网站| 99re热这里只有精品免费视频| 91国内精品野花午夜精品 | 欧美色视频在线观看| 337p亚洲精品色噜噜噜| 精品成人一区二区三区四区| 国产精品网友自拍| 亚洲一二三专区| 老司机精品视频一区二区三区| 久久99在线观看| 国产麻豆成人传媒免费观看| 99v久久综合狠狠综合久久| 欧美性色欧美a在线播放| 日韩欧美一二三| 1区2区3区国产精品| 日韩中文欧美在线| 日韩三级电影网址| 日韩一区二区三区在线视频| 日本亚洲最大的色成网站www| 高清成人在线观看| 欧美影片第一页| 精品美女在线播放| 依依成人精品视频| 久久激情五月激情| 日本乱码高清不卡字幕| 精品国产免费人成在线观看| 亚洲精品视频免费看| 精品亚洲欧美一区| 91麻豆免费观看| 久久综合久久久久88| 怡红院av一区二区三区| 国产黑丝在线一区二区三区| 欧美少妇xxx| 国产精品毛片无遮挡高清| 日本亚洲电影天堂| va亚洲va日韩不卡在线观看| 亚洲欧美日韩小说| 国产精品视频一二三区| 一区二区中文字幕在线| 99久久免费国产| 日韩视频免费观看高清完整版在线观看| 国产夜色精品一区二区av| 欧美专区在线观看一区| 久久精品国产精品亚洲红杏| 91视视频在线观看入口直接观看www| 欧美色图一区二区三区| 国产欧美日韩激情| 久久99久久久欧美国产| 欧美日韩五月天| 日韩美女久久久| 粉嫩在线一区二区三区视频| 日韩免费一区二区三区在线播放| 国产酒店精品激情| 精品国产免费一区二区三区四区 | 国产在线精品视频| 精品视频在线免费看| 日本一区二区成人在线| 国产一区二区三区不卡在线观看 | 国产无人区一区二区三区| 蜜臀av亚洲一区中文字幕| 91成人国产精品| 日韩美女视频一区二区| 91一区二区三区在线播放| 国产欧美中文在线| 国产精品888| 久久午夜色播影院免费高清| 精品亚洲aⅴ乱码一区二区三区| 欧美男人的天堂一二区| 亚洲va韩国va欧美va| 欧美视频精品在线观看| 亚洲成人你懂的| 欧美视频一区二区| 亚洲一区二区av电影| 欧美日韩在线播| 日欧美一区二区| 日韩欧美一级在线播放| 蜜臀久久久久久久| 日韩精品一区二区在线| 久久国产生活片100| 欧美va在线播放| 国产一区二区在线视频| 久久久亚洲精品一区二区三区| 国产一区二区调教| 国产精品网站导航| 色欧美日韩亚洲| 亚洲一二三四在线观看| 欧美一级在线观看| 韩国在线一区二区| 国产农村妇女精品| 91美女在线视频| 亚洲午夜成aⅴ人片| 91麻豆精品久久久久蜜臀| 免费观看一级欧美片| 久久影院电视剧免费观看| 懂色av一区二区夜夜嗨| 亚洲欧美日韩国产成人精品影院| 91电影在线观看| 日韩电影在线观看网站| 久久久美女毛片| 不卡欧美aaaaa| 午夜电影一区二区| 久久综合色之久久综合| 成人午夜av电影| 亚洲成a人v欧美综合天堂| 精品国产乱码久久久久久夜甘婷婷| 国产麻豆精品久久一二三| 一区二区视频免费在线观看| 欧美一区午夜视频在线观看 | 国产在线不卡视频| 亚洲欧美偷拍另类a∨色屁股| 欧美日韩日本视频| 国产传媒欧美日韩成人| 一区二区三区毛片| 久久亚洲一级片| 日本高清无吗v一区| 久久精品国产99国产| 中文字幕中文字幕中文字幕亚洲无线| 在线观看欧美黄色| 精品一区二区三区视频在线观看| 亚洲欧美在线视频观看| 日韩欧美在线一区二区三区| www.亚洲色图.com| 免费在线看一区| 亚洲视频一二区| 精品日韩在线一区| 91福利视频网站| 国产成人日日夜夜| 天天操天天综合网| 亚洲视频一区在线| 精品国产一区二区三区久久久蜜月| 91在线看国产| 国产麻豆精品一区二区| 日韩电影在线看| 一区二区高清在线| 国产精品青草综合久久久久99| 这里只有精品99re| 在线看一区二区|