1
0
Fork 0

debug.nas: use argument to disable/enable color

(on top of the normal color setting -- i.e. this overrides that)
This commit is contained in:
Philosopher 2014-05-30 20:59:14 -05:00
parent f91d439ac0
commit ddcb543c10
2 changed files with 47 additions and 47 deletions

View file

@ -67,22 +67,22 @@
# ANSI color code wrappers (see $ man console_codes) # ANSI color code wrappers (see $ man console_codes)
# #
var _title = func(s) globals.string.color("33;42;1", s); # backtrace header var _title = func(s, color=nil) globals.string.color("33;42;1", s, color); # backtrace header
var _section = func(s) globals.string.color("37;41;1", s); # backtrace frame var _section = func(s, color=nil) globals.string.color("37;41;1", s, color); # backtrace frame
var _error = func(s) globals.string.color("31;1", s); # internal errors var _error = func(s, color=nil) globals.string.color("31;1", s, color); # internal errors
var _bench = func(s) globals.string.color("37;45;1", s); # benchmark info var _bench = func(s, color=nil) globals.string.color("37;45;1", s); # benchmark info
var _nil = func(s) globals.string.color("32", s); # nil var _nil = func(s, color=nil) globals.string.color("32", s, color); # nil
var _string = func(s) globals.string.color("31", s); # "foo" var _string = func(s, color=nil) globals.string.color("31", s, color); # "foo"
var _num = func(s) globals.string.color("31", s); # 0.0 var _num = func(s, color=nil) globals.string.color("31", s, color); # 0.0
var _bracket = func(s) globals.string.color("", s); # [ ] var _bracket = func(s, color=nil) globals.string.color("", s, color); # [ ]
var _brace = func(s) globals.string.color("", s); # { } var _brace = func(s, color=nil) globals.string.color("", s, color); # { }
var _angle = func(s) globals.string.color("", s); # < > var _angle = func(s, color=nil) globals.string.color("", s, color); # < >
var _vartype = func(s) globals.string.color("33", s); # func ghost var _vartype = func(s, color=nil) globals.string.color("33", s, color); # func ghost
var _proptype = func(s) globals.string.color("34", s); # BOOL INT LONG DOUBLE ... var _proptype = func(s, color=nil) globals.string.color("34", s, color); # BOOL INT LONG DOUBLE ...
var _path = func(s) globals.string.color("36", s); # /some/property/path var _path = func(s, color=nil) globals.string.color("36", s, color); # /some/property/path
var _internal = func(s) globals.string.color("35", s); # me parents var _internal = func(s, color=nil) globals.string.color("35", s, color); # me parents
var _varname = func(s) s; # variable_name var _varname = func(s, color=nil) s; # variable_name
## ##
@ -142,7 +142,7 @@ var _tree = func(n, graph = 1, prefix = "", level = 0) {
} }
var attributes = func(p, verbose = 1) { var attributes = func(p, verbose = 1, color=nil) {
var r = p.getAttribute("readable") ? "" : "r"; var r = p.getAttribute("readable") ? "" : "r";
var w = p.getAttribute("writable") ? "" : "w"; var w = p.getAttribute("writable") ? "" : "w";
var R = p.getAttribute("trace-read") ? "R" : ""; var R = p.getAttribute("trace-read") ? "R" : "";
@ -159,24 +159,24 @@ var attributes = func(p, verbose = 1) {
type ~= ", L" ~ l; type ~= ", L" ~ l;
if (verbose and (var c = p.getAttribute("references")) > 2) if (verbose and (var c = p.getAttribute("references")) > 2)
type ~= ", #" ~ (c - 2); type ~= ", #" ~ (c - 2);
return _proptype(type ~ ")"); return _proptype(type ~ ")", color);
} }
var _dump_prop = func(p) { var _dump_prop = func(p, color=nil) {
_path(p.getPath()) ~ " = " ~ debug.string(p.getValue()) ~ " " ~ attributes(p); _path(p.getPath(), color) ~ " = " ~ debug.string(p.getValue()) ~ " " ~ attributes(p);
} }
var _dump_var = func(v) { var _dump_var = func(v, color=nil) {
if (v == "me" or v == "parents") if (v == "me" or v == "parents")
return _internal(v); return _internal(v, color);
else else
return _varname(v); return _varname(v, color);
} }
var _dump_string = func(str) { var _dump_string = func(str, color=nil) {
var s = "'"; var s = "'";
for (var i = 0; i < size(str); i += 1) { for (var i = 0; i < size(str); i += 1) {
var c = str[i]; var c = str[i];
@ -193,55 +193,55 @@ var _dump_string = func(str) {
else else
s ~= sprintf("\\x%02x", c); s ~= sprintf("\\x%02x", c);
} }
return _string(s ~ "'"); return _string(s ~ "'", color);
} }
# dump hash keys as variables if they are valid variable names, or as string otherwise # dump hash keys as variables if they are valid variable names, or as string otherwise
var _dump_key = func(s) { var _dump_key = func(s, color=nil) {
if (num(s) != nil) if (num(s) != nil)
return _num(s); return _num(s, color);
if (!size(s)) if (!size(s))
return _dump_string(s); return _dump_string(s, color);
if (!globals.string.isalpha(s[0]) and s[0] != `_`) if (!globals.string.isalpha(s[0]) and s[0] != `_`)
return _dump_string(s); return _dump_string(s, color);
for (var i = 1; i < size(s); i += 1) for (var i = 1; i < size(s); i += 1)
if (!globals.string.isalnum(s[i]) and s[i] != `_`) if (!globals.string.isalnum(s[i]) and s[i] != `_`)
return _dump_string(s); return _dump_string(s, color);
_dump_var(s); _dump_var(s, color);
} }
var string = func(o) { var string = func(o, color=nil) {
var t = typeof(o); var t = typeof(o);
if (t == "nil") { if (t == "nil") {
return _nil("nil"); return _nil("nil", color);
} elsif (t == "scalar") { } elsif (t == "scalar") {
return num(o) == nil ? _dump_string(o) : _num(o~""); return num(o) == nil ? _dump_string(o, color) : _num(o~"", color);
} elsif (t == "vector") { } elsif (t == "vector") {
var s = ""; var s = "";
forindex (var i; o) forindex (var i; o)
s ~= (i == 0 ? "" : ", ") ~ debug.string(o[i]); s ~= (i == 0 ? "" : ", ") ~ debug.string(o[i], color);
return _bracket("[") ~ s ~ _bracket("]"); return _bracket("[", color) ~ s ~ _bracket("]", color);
} elsif (t == "hash") { } elsif (t == "hash") {
if (contains(o, "parents") and typeof(o.parents) == "vector" if (contains(o, "parents") and typeof(o.parents) == "vector"
and size(o.parents) == 1 and o.parents[0] == props.Node) and size(o.parents) == 1 and o.parents[0] == props.Node)
return _angle("<") ~ _dump_prop(o) ~ _angle(">"); return _angle("<", color) ~ _dump_prop(o, color) ~ _angle(">", color);
var k = keys(o); var k = keys(o);
var s = ""; var s = "";
forindex (var i; k) forindex (var i; k)
s ~= (i == 0 ? "" : ", ") ~ _dump_key(k[i]) ~ ": " ~ debug.string(o[k[i]]); s ~= (i == 0 ? "" : ", ") ~ _dump_key(k[i], color) ~ ": " ~ debug.string(o[k[i]], color);
return _brace("{") ~ " " ~ s ~ " " ~ _brace("}"); return _brace("{", color) ~ " " ~ s ~ " " ~ _brace("}", color);
} elsif (t == "ghost") { } elsif (t == "ghost") {
return _angle("<") ~ _nil(ghosttype(o)) ~ _angle(">"); return _angle("<", color) ~ _nil(ghosttype(o), color) ~ _angle(">", color);
} else { } else {
return _angle("<") ~ _vartype(t) ~ _angle(">"); return _angle("<", color) ~ _vartype(t, color) ~ _angle(">", color);
} }
} }

View file

@ -486,10 +486,11 @@ var scanf = func(test, format, result) {
# ANSI colors (see $ man console_codes) # ANSI colors (see $ man console_codes)
# #
var setcolors = func(enabled) { var setcolors = func(enabled) {
if (enabled and getprop("/sim/startup/stderr-to-terminal")) color_enabled = (enabled and getprop("/sim/startup/stderr-to-terminal"));
color = func(color, s) { "\x1b[" ~ color ~ "m" ~ s ~ "\x1b[m" } }
else var color = func(color, s, enabled=nil) {
color = func(dummy, s) { s } if (enabled == nil) enabled = color_enabled;
return enabled ? "\x1b[" ~ color ~ "m" ~ s ~ "\x1b[m" : s;
} }
@ -499,10 +500,9 @@ var setcolors = func(enabled) {
# #
# print(string.color("31;1", "this is red")); # print(string.color("31;1", "this is red"));
# #
var color = func nil; var color_enabled = 0;
setcolors(getprop("/sim/startup/terminal-ansi-colors"));
_setlistener("/sim/signals/nasal-dir-initialized", func { _setlistener("/sim/signals/nasal-dir-initialized", func {
setlistener("/sim/startup/terminal-ansi-colors", func(n) setcolors(n.getBoolValue())); setlistener("/sim/startup/terminal-ansi-colors", func(n) setcolors(n.getBoolValue()), 1, 0);
}); });