@jdeighan/coffee-utils 7.0.59 → 7.0.60
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +1 -1
- package/src/call_stack.coffee +18 -6
- package/src/call_stack.js +24 -8
- package/src/coffee_utils.coffee +9 -1
- package/src/coffee_utils.js +12 -1
- package/src/debug_utils.coffee +4 -4
- package/src/debug_utils.js +4 -4
package/package.json
CHANGED
package/src/call_stack.coffee
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# call_stack.coffee
|
2
2
|
|
3
3
|
import {
|
4
|
-
undef, defined, croak, assert, OL, isBoolean, escapeStr,
|
4
|
+
undef, defined, croak, assert, OL, isBoolean, escapeStr, deepCopy,
|
5
5
|
} from '@jdeighan/coffee-utils'
|
6
6
|
import {log, LOG} from '@jdeighan/coffee-utils/log'
|
7
7
|
import {getPrefix} from '@jdeighan/coffee-utils/arrow'
|
@@ -36,7 +36,7 @@ export class CallStack
|
|
36
36
|
|
37
37
|
# ........................................................................
|
38
38
|
|
39
|
-
enter: (funcName) ->
|
39
|
+
enter: (funcName, lArgs=[]) ->
|
40
40
|
# --- funcName might be <object>.<method>
|
41
41
|
|
42
42
|
if doDebugStack
|
@@ -56,12 +56,14 @@ export class CallStack
|
|
56
56
|
fullName: funcName # "#{ident1}.#{ident2}"
|
57
57
|
funcName: ident2
|
58
58
|
isLogged: false
|
59
|
+
lArgs: deepCopy(lArgs)
|
59
60
|
})
|
60
61
|
else
|
61
62
|
@lStack.push({
|
62
63
|
fullName: funcName
|
63
64
|
funcName: ident1
|
64
65
|
isLogged: false
|
66
|
+
lArgs: deepCopy(lArgs)
|
65
67
|
})
|
66
68
|
return
|
67
69
|
|
@@ -156,15 +158,25 @@ export class CallStack
|
|
156
158
|
|
157
159
|
# ........................................................................
|
158
160
|
|
159
|
-
dump: (
|
161
|
+
dump: () ->
|
160
162
|
|
161
|
-
lLines = ["
|
163
|
+
lLines = ["CALL STACK:"]
|
162
164
|
if @lStack.length == 0
|
163
165
|
lLines.push " <EMPTY>"
|
164
166
|
else
|
165
167
|
for item, i in @lStack
|
166
|
-
lLines.push "
|
167
|
-
return lLines.join("\n")
|
168
|
+
lLines.push " " + @callStr(i, item)
|
169
|
+
return lLines.join("\n")
|
170
|
+
|
171
|
+
# ........................................................................
|
172
|
+
|
173
|
+
callStr: (i, item) ->
|
174
|
+
|
175
|
+
sym = if item.isLogged then '*' else ''
|
176
|
+
str = "#{i}#{sym}: #{item.fullName}"
|
177
|
+
for arg in item.lArgs
|
178
|
+
str += " #{OL(arg)}"
|
179
|
+
return str
|
168
180
|
|
169
181
|
# ........................................................................
|
170
182
|
|
package/src/call_stack.js
CHANGED
@@ -9,7 +9,8 @@ import {
|
|
9
9
|
assert,
|
10
10
|
OL,
|
11
11
|
isBoolean,
|
12
|
-
escapeStr
|
12
|
+
escapeStr,
|
13
|
+
deepCopy
|
13
14
|
} from '@jdeighan/coffee-utils';
|
14
15
|
|
15
16
|
import {
|
@@ -45,7 +46,7 @@ export var CallStack = class CallStack {
|
|
45
46
|
}
|
46
47
|
|
47
48
|
// ........................................................................
|
48
|
-
enter(funcName) {
|
49
|
+
enter(funcName, lArgs = []) {
|
49
50
|
var _, ident1, ident2, lMatches;
|
50
51
|
// --- funcName might be <object>.<method>
|
51
52
|
if (doDebugStack) {
|
@@ -58,13 +59,15 @@ export var CallStack = class CallStack {
|
|
58
59
|
this.lStack.push({
|
59
60
|
fullName: funcName, // "#{ident1}.#{ident2}"
|
60
61
|
funcName: ident2,
|
61
|
-
isLogged: false
|
62
|
+
isLogged: false,
|
63
|
+
lArgs: deepCopy(lArgs)
|
62
64
|
});
|
63
65
|
} else {
|
64
66
|
this.lStack.push({
|
65
67
|
fullName: funcName,
|
66
68
|
funcName: ident1,
|
67
|
-
isLogged: false
|
69
|
+
isLogged: false,
|
70
|
+
lArgs: deepCopy(lArgs)
|
68
71
|
});
|
69
72
|
}
|
70
73
|
}
|
@@ -162,19 +165,32 @@ export var CallStack = class CallStack {
|
|
162
165
|
}
|
163
166
|
|
164
167
|
// ........................................................................
|
165
|
-
dump(
|
168
|
+
dump() {
|
166
169
|
var i, item, j, lLines, len, ref;
|
167
|
-
lLines = [
|
170
|
+
lLines = ["CALL STACK:"];
|
168
171
|
if (this.lStack.length === 0) {
|
169
172
|
lLines.push(" <EMPTY>");
|
170
173
|
} else {
|
171
174
|
ref = this.lStack;
|
172
175
|
for (i = j = 0, len = ref.length; j < len; i = ++j) {
|
173
176
|
item = ref[i];
|
174
|
-
lLines.push(
|
177
|
+
lLines.push(" " + this.callStr(i, item));
|
175
178
|
}
|
176
179
|
}
|
177
|
-
return lLines.join("\n")
|
180
|
+
return lLines.join("\n");
|
181
|
+
}
|
182
|
+
|
183
|
+
// ........................................................................
|
184
|
+
callStr(i, item) {
|
185
|
+
var arg, j, len, ref, str, sym;
|
186
|
+
sym = item.isLogged ? '*' : '';
|
187
|
+
str = `${i}${sym}: ${item.fullName}`;
|
188
|
+
ref = item.lArgs;
|
189
|
+
for (j = 0, len = ref.length; j < len; j++) {
|
190
|
+
arg = ref[j];
|
191
|
+
str += ` ${OL(arg)}`;
|
192
|
+
}
|
193
|
+
return str;
|
178
194
|
}
|
179
195
|
|
180
196
|
// ........................................................................
|
package/src/coffee_utils.coffee
CHANGED
@@ -349,7 +349,15 @@ export ltrunc = (str, nChars) ->
|
|
349
349
|
|
350
350
|
export deepCopy = (obj) ->
|
351
351
|
|
352
|
-
|
352
|
+
if (obj == undef)
|
353
|
+
return undef
|
354
|
+
objStr = JSON.stringify(obj)
|
355
|
+
try
|
356
|
+
newObj = JSON.parse(objStr)
|
357
|
+
catch err
|
358
|
+
croak "ERROR: err.message", objStr
|
359
|
+
|
360
|
+
return newObj
|
353
361
|
|
354
362
|
# ---------------------------------------------------------------------------
|
355
363
|
# escapeStr - escape newlines, TAB chars, etc.
|
package/src/coffee_utils.js
CHANGED
@@ -347,7 +347,18 @@ export var ltrunc = function(str, nChars) {
|
|
347
347
|
// ---------------------------------------------------------------------------
|
348
348
|
// deepCopy - deep copy an array or object
|
349
349
|
export var deepCopy = function(obj) {
|
350
|
-
|
350
|
+
var err, newObj, objStr;
|
351
|
+
if (obj === undef) {
|
352
|
+
return undef;
|
353
|
+
}
|
354
|
+
objStr = JSON.stringify(obj);
|
355
|
+
try {
|
356
|
+
newObj = JSON.parse(objStr);
|
357
|
+
} catch (error1) {
|
358
|
+
err = error1;
|
359
|
+
croak("ERROR: err.message", objStr);
|
360
|
+
}
|
361
|
+
return newObj;
|
351
362
|
};
|
352
363
|
|
353
364
|
// ---------------------------------------------------------------------------
|
package/src/debug_utils.coffee
CHANGED
@@ -29,9 +29,9 @@ lFunctions = undef # --- only used when doDebugDebug is true
|
|
29
29
|
|
30
30
|
# ---------------------------------------------------------------------------
|
31
31
|
|
32
|
-
export dumpCallStack = (
|
32
|
+
export dumpCallStack = () ->
|
33
33
|
|
34
|
-
LOG callStack.dump(
|
34
|
+
LOG callStack.dump()
|
35
35
|
return
|
36
36
|
|
37
37
|
# ---------------------------------------------------------------------------
|
@@ -66,7 +66,7 @@ debugDebug = (label, lObjects...) ->
|
|
66
66
|
switch type
|
67
67
|
when 'enter'
|
68
68
|
assert defined(funcName), "type enter, funcName = undef"
|
69
|
-
callStack.enter funcName
|
69
|
+
callStack.enter funcName, lObjects
|
70
70
|
doLog = (lFunctions == undef) || (funcName in lFunctions)
|
71
71
|
|
72
72
|
when 'return'
|
@@ -105,7 +105,7 @@ export debug = (label, lObjects...) ->
|
|
105
105
|
nObjects = lObjects.length
|
106
106
|
[type, funcName] = getType(label, nObjects)
|
107
107
|
if (type == 'enter')
|
108
|
-
callStack.enter funcName
|
108
|
+
callStack.enter funcName, lObjects
|
109
109
|
|
110
110
|
debugDebug "enter debug(#{OL(label)})", lObjects...
|
111
111
|
debugDebug "type = #{OL(type)}"
|
package/src/debug_utils.js
CHANGED
@@ -70,8 +70,8 @@ lFunctions = undef; // --- only used when doDebugDebug is true
|
|
70
70
|
|
71
71
|
|
72
72
|
// ---------------------------------------------------------------------------
|
73
|
-
export var dumpCallStack = function(
|
74
|
-
LOG(callStack.dump(
|
73
|
+
export var dumpCallStack = function() {
|
74
|
+
LOG(callStack.dump());
|
75
75
|
};
|
76
76
|
|
77
77
|
// ---------------------------------------------------------------------------
|
@@ -101,7 +101,7 @@ debugDebug = function(label, ...lObjects) {
|
|
101
101
|
switch (type) {
|
102
102
|
case 'enter':
|
103
103
|
assert(defined(funcName), "type enter, funcName = undef");
|
104
|
-
callStack.enter(funcName);
|
104
|
+
callStack.enter(funcName, lObjects);
|
105
105
|
doLog = (lFunctions === undef) || (indexOf.call(lFunctions, funcName) >= 0);
|
106
106
|
break;
|
107
107
|
case 'return':
|
@@ -138,7 +138,7 @@ export var debug = function(label, ...lObjects) {
|
|
138
138
|
nObjects = lObjects.length;
|
139
139
|
[type, funcName] = getType(label, nObjects);
|
140
140
|
if (type === 'enter') {
|
141
|
-
callStack.enter(funcName);
|
141
|
+
callStack.enter(funcName, lObjects);
|
142
142
|
}
|
143
143
|
debugDebug(`enter debug(${OL(label)})`, ...lObjects);
|
144
144
|
debugDebug(`type = ${OL(type)}`);
|