diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /sim/ucsim/error.cc | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'sim/ucsim/error.cc')
| -rw-r--r-- | sim/ucsim/error.cc | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/sim/ucsim/error.cc b/sim/ucsim/error.cc new file mode 100644 index 0000000..25e91a0 --- /dev/null +++ b/sim/ucsim/error.cc @@ -0,0 +1,187 @@ +/* + * Simulator of microcontrollers (error.cc) + * + * Copyright (C) 1997,16 Drotos Daniel, Talker Bt. + * + * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu + * + */ + +/* This file is part of microcontroller simulator: ucsim. + +UCSIM 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. + +UCSIM 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 UCSIM; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ +/*@1@*/ + +#include <stdlib.h> +#include "i_string.h" + +// prj (local) +#include "errorcl.h" +#include "globals.h" +#include "utils.h" + +// cmd.src +#include "newcmdcl.h" + +struct id_element error_on_off_names[]= { + { ERROR_PARENT, "unset" }, + { ERROR_ON , "on" }, + { ERROR_OFF , "off" }, + { 0 , 0 } +}; + +static class cl_error_registry error_registry; + +class cl_list *cl_error_registry::registered_errors= 0; + +/* + */ + +cl_error_class::cl_error_class(enum error_type typ, const char *aname, + enum error_on_off be_on/* = ERROR_PARENT*/): + cl_base() +{ + type= typ; + on= be_on; + set_name(aname, "not-known"); +} + +cl_error_class::cl_error_class(enum error_type typ, const char *aname, + class cl_error_class *parent, + enum error_on_off be_on/* = ERROR_PARENT*/): + cl_base() +{ + type= typ; + on= be_on; + set_name(aname, "not-known"); + if (parent) + parent->add_child(this); +} + +void +cl_error_class::set_on(enum error_on_off val) +{ + if (!get_parent() && + val == ERROR_PARENT) + return; + on= val; +} + +bool +cl_error_class::is_on(void) +{ + if (on == ERROR_PARENT) + { + if (!get_parent()) + return(true); + class cl_error_class *p= + dynamic_cast<class cl_error_class *>(get_parent()); + return(p->is_on()); + } + else + return(on == ERROR_ON); +} + +enum error_type +cl_error_class::get_type(void) +{ + return(type); +} + +/*char * +cl_error_class::get_name(void) +{ + return(name); +}*/ + +char * +cl_error_class::get_type_name() +{ + return(get_id_string(error_type_names, type, /*cchars*/((char*)"untyped"))); + /*switch (type) + { + case err_unknown: return("unclassified"); break; + case err_error: return("error"); break; + case err_warning: return("warning"); break; + } + return("untyped");*/ +} + + +/* + */ + +cl_error::cl_error(void): + cl_base() +{ + classification= error_registry.find(/*cchars*/("non-classified")); + +} + +cl_error::~cl_error(void) +{} + +int +cl_error::init(void) +{ + //type= get_type(); + return(0); +} + +enum error_type +cl_error::get_type(void) +{ + if (classification) + return(classification->get_type()); + return(err_unknown); +} + +enum error_on_off +cl_error::get_on(void) +{ + if (!classification) + return(ERROR_ON); + return(classification->get_on()); +} + +bool +cl_error::is_on(void) +{ + if (!classification) + return(true); + return(classification->is_on()); +} + +void +cl_error::print(class cl_commander_base *c) +{ + c->dd_printf(cchars("%s\n"), get_type_name()); +} + +char * +cl_error::get_type_name() +{ + enum error_type type= get_type(); + return(get_id_string(error_type_names, type, /*cchars*/((char*)"untyped"))); +} + +cl_error_registry::cl_error_registry(void) +{ + if (NULL == error_registry.find(/*cchars*/("non-classified"))) + register_error(new cl_error_class(err_error, /*cchars*/("non-classified"), ERROR_ON)); +} + +/* End of sim.src/error.cc */ |
