Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
5f18065212
commit
dc8f1be6f4
168
js/com/err.js
Normal file
168
js/com/err.js
Normal file
|
@ -0,0 +1,168 @@
|
|||
/**
|
||||
** ==================================
|
||||
** OOOO OOOO OOOO O O OOOO
|
||||
** O O O O O O O O O
|
||||
** O O O O O O O O O
|
||||
** OOOO OOOO OOOO O OOO OOOO
|
||||
** O O O O O O O O O
|
||||
** O O O O O O O O O
|
||||
** OOOO OOOO OOOO OOOO O O OOOO
|
||||
** ==================================
|
||||
** BSSLAB, Dr. Stefan Bosse http://www.bsslab.de
|
||||
**
|
||||
** COPYRIGHT: THIS SOFTWARE, EXECUTABLE AND SOURCE CODE IS OWNED
|
||||
** BY THE AUTHOR.
|
||||
** THIS SOURCE CODE MAY NOT BE COPIED, EXTRACTED,
|
||||
** MODIFIED, OR OTHERWISE USED IN A CONTEXT
|
||||
** OUTSIDE OF THE SOFTWARE SYSTEM.
|
||||
**
|
||||
** $AUTHORS: Stefan Bosse
|
||||
** $INITIAL: (C) 2006-2016 BSSLAB
|
||||
** $CREATED: sbosse on 9/22/15.
|
||||
** $VERSION: 1.2.1
|
||||
**
|
||||
** $INFO:
|
||||
**
|
||||
** Error management
|
||||
**
|
||||
** $ENDOFINFO
|
||||
*
|
||||
*/
|
||||
|
||||
var Io = Require('com/io');
|
||||
var Comp = Require('com/compat');
|
||||
var Array = Comp.array;
|
||||
var Printf = Comp.printf;
|
||||
var String = Comp.string;
|
||||
|
||||
var suppress_warnings = [];
|
||||
var error_next = 0;
|
||||
var errors = Array.create (100,['','']);
|
||||
var silent = false;
|
||||
var verbose = false;
|
||||
var verbosity_level = 0;
|
||||
var errno = 0;
|
||||
var warn_is_err = false;
|
||||
var err_notify = function() {};
|
||||
var warn_next = 0;
|
||||
var warnings = Array.create (100,['','']);
|
||||
|
||||
/** Register a new error from class 'err_class' (string)
|
||||
** with message 'err_format' containing argument %s place holders.
|
||||
** Returns unique error #id.
|
||||
*
|
||||
* @param err_class
|
||||
* @param err_format
|
||||
* @returns {number}
|
||||
*/
|
||||
function register_err(err_class,err_format) {
|
||||
var next = error_next;
|
||||
error_next = error_next + 1;
|
||||
if (error_next == Array.length(errors))
|
||||
errors = Array.append(errors, Array.create(100, ['','']));
|
||||
errors[next] = [err_class,err_format];
|
||||
return next;
|
||||
}
|
||||
/**
|
||||
** Register a new warning from class 'warn_class' (string)
|
||||
** with message 'warn_format' containing argument %s place holders.
|
||||
** Returns unique warnor #id.
|
||||
*
|
||||
* @param warn_class
|
||||
* @param warn_format
|
||||
* @returns {number}
|
||||
*/
|
||||
function register_warn(warn_class,warn_format) {
|
||||
var next = warn_next;
|
||||
warn_next = warn_next + 1;
|
||||
if (warn_next == Array.length(warnings))
|
||||
warnings = Array.append(warnings, Array.create(100, ['','']));
|
||||
warnings[next] = [warn_class,warn_format];
|
||||
return next;
|
||||
}
|
||||
|
||||
var err_overflow = register_err("ERR","Invalid error number %s");
|
||||
var warn_overflow = register_err("warn","Invalid warning number %s");
|
||||
|
||||
function replace (str,args){
|
||||
var _str=str;
|
||||
Array.match(args,function(hd,tl) {
|
||||
_str = String.replace_first('%s',hd,str);
|
||||
_str=replace(_str,tl);
|
||||
},function () {
|
||||
_str=str;
|
||||
});
|
||||
return _str;
|
||||
}
|
||||
|
||||
function err_unsafe(err_num,args) {
|
||||
var err_cf = errors[err_num];
|
||||
Io.out(Printf.sprintf('[ERROR %s]: %s.', err_cf[0], replace(err_cf[1], args)));
|
||||
throw [err_num,args];
|
||||
}
|
||||
|
||||
function err(err_num,args) {
|
||||
silent = false;
|
||||
var err_cf;
|
||||
if (err_num >= error_next || err_num < 0)
|
||||
err_unsafe(err_overflow,[Printf.sprintf("%d",err_num)]);
|
||||
else
|
||||
err_cf=errors[err_num];
|
||||
|
||||
var msg = Printf.sprintf('[ERROR %s] %s.',err_cf[0],replace(err_cf[1], args));
|
||||
if (!silent) Io.out(msg);
|
||||
err_notify(msg);
|
||||
errno = err_num;
|
||||
throw [err_num,args]
|
||||
}
|
||||
|
||||
function err_sprint(err_num,args) {
|
||||
var err_cf;
|
||||
if (err_num >= error_next || err_num < 0)
|
||||
err_cf=err_unsafe(err_overflow,[Printf.sprintf("%d",err_num)]);
|
||||
else
|
||||
err_cf=errors[err_num];
|
||||
|
||||
var msg = Printf.sprintf('[%s] %s.',err_cf[0],replace(err_cf[1], args));
|
||||
return msg;
|
||||
}
|
||||
|
||||
function err_raise(err_num,args) {
|
||||
throw new Error((err_sprint(err_num,args)));
|
||||
}
|
||||
|
||||
function err_warn(err_num,args) {
|
||||
Io.out(err_sprint(err_num,args));
|
||||
}
|
||||
|
||||
var last_warning = '';
|
||||
var warning_repeated = 0;
|
||||
|
||||
function warn(warn_num,args) {
|
||||
var warn_cf;
|
||||
if (warn_num >= warn_next || warn_num < 0)
|
||||
err_unsafe(warn_overflow,[Printf.sprintf("%d",warn_num)]);
|
||||
else
|
||||
warn_cf=warnings[warn_num];
|
||||
if (!Array.member(suppress_warnings,warn_cf[0])) {
|
||||
var msg = Printf.sprintf("[WARNING %s] %s.",warn_cf[0], replace(warn_cf[1],args));
|
||||
if (String.equal(msg,last_warning)) warning_repeated++;
|
||||
else warning_repeated=0;
|
||||
if ((warning_repeated % 100)==1)
|
||||
Io.out ('[More warnings follow]');
|
||||
else if (warning_repeated==0)
|
||||
Io.out(msg);
|
||||
}
|
||||
if (warn_is_err) throw "Exit"; // Todo ??
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
err:err,
|
||||
err_raise:err_raise,
|
||||
err_warn:err_warn,
|
||||
raise:err_raise,
|
||||
err_sprint:err_sprint,
|
||||
register_warn:register_warn,
|
||||
register_err:register_err,
|
||||
warn:warn
|
||||
};
|
Loading…
Reference in New Issue
Block a user