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

📄 ex_bar.cc

📁 早期freebsd实现
💻 CC
字号:
// bar.cc - test the runtime support for GNU C++ exception handling.//          inspired by a PROLOG toplevel loop by Heinz Seidl (hgs@cygnus.com)#define S(s) SS(s)#define SS(s) # sextern "C" {    int printf (const char*, ...);    void abort ();    int exit (int);};enum TERM { ATOM, INTEGER, DOUBLE, STRUCTURE, LIST, REF, EOF };exception {    int number;    char * message;} EX_IMPL;exception {    TERM Term;    char * message;} EX_CALL;exception {} EX_EOF;void pread (TERM & Term){    // simulate an input buffer    //    static int p = 0;    TERM buffer[] =       { REF,	LIST,	STRUCTURE,	DOUBLE,	INTEGER,	ATOM      };    const int blen = sizeof (buffer) / sizeof (TERM);        if ( p < blen)      Term = buffer[p++];    else      Term = EOF;}void call (const TERM & Term) raises EX_CALL, EX_EOF, EX_IMPL{    switch (Term)       {	case REF:	  raise EX_CALL (REF,			 "Sorry - dereferencing not implemented (REF).");	  break;	case LIST:	  raise EX_CALL (LIST,   			 "LISTs are not callable (LIST).");	  break;	case STRUCTURE:	  raise EX_CALL (STRUCTURE,			 "Undefined predicate (STRUCTURE).");	  break;	case DOUBLE:	  raise EX_CALL (DOUBLE,			 "DOUBLEs are not callable (DOUBLE).");	  break;	case INTEGER:	  raise EX_CALL (INTEGER,			 "INTEGERs are not callable (INTEGER).");	case ATOM:	   raise EX_CALL (ATOM,			  "Undefined predicate (ATOM).");	  break;	case EOF:	  raise EX_EOF ();	  break;	default:	  raise EX_IMPL ( Term,			 "Implementation error in file " __FILE__ 			 " at line "  S(__LINE__) " .");      }}void main(){    try {	while (1) {	    try {		while (1) 		  {		      TERM Term;		      pread (Term);		      call (Term);		  }	    } except ep {		EX_CALL {		    printf ("EXCEPTION(%d) : %s\n", ep.Term, ep.message);		}		EX_EOF {		    printf ("EOF encountered.\n");		    raise ep;		}		default {		    raise ep;		}	    }	}    } except ep {	EX_IMPL {	    printf ("FATAL(%d): %s\n", ep.number, ep.message);	    abort();	}	EX_EOF {	    printf ("Good bye.\n");	}	default {	    raise ep;	}    }    return 0;}

⌨️ 快捷键说明

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