aboutsummaryrefslogtreecommitdiff
path: root/lib/ast.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ast.js')
-rw-r--r--lib/ast.js22
1 files changed, 19 insertions, 3 deletions
diff --git a/lib/ast.js b/lib/ast.js
index f496095a..f75670e6 100644
--- a/lib/ast.js
+++ b/lib/ast.js
@@ -118,9 +118,25 @@ var AST_Node = DEFNODE("Node", "start end", {
}
}, null);
-AST_Node.warn = function(txt, props) {
- if (AST_Node.warn_function) AST_Node.warn_function(string_template(txt, props));
-};
+(AST_Node.log_function = function(fn, verbose) {
+ var printed = Object.create(null);
+ if (fn) {
+ AST_Node.info = verbose ? function(text, props) {
+ log("INFO: " + string_template(text, props));
+ } : noop;
+ AST_Node.warn = function(text, props) {
+ log("WARN: " + string_template(text, props));
+ };
+ } else {
+ AST_Node.info = AST_Node.warn = noop;
+ }
+
+ function log(msg) {
+ if (printed[msg]) return;
+ printed[msg] = true;
+ fn(msg);
+ }
+})();
/* -----[ statements ]----- */