@jdeighan/coffee-utils 6.0.4 → 6.0.5
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 +26 -7
- package/src/call_stack.js +32 -9
package/package.json
CHANGED
package/src/call_stack.coffee
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
# call_stack.coffee
|
2
2
|
|
3
|
-
import {undef, croak} from '@jdeighan/coffee-utils'
|
3
|
+
import {undef, croak, assert} from '@jdeighan/coffee-utils'
|
4
4
|
import {log, LOG} from '@jdeighan/coffee-utils/log'
|
5
5
|
|
6
|
+
doDebugStack = false
|
7
|
+
|
8
|
+
# ---------------------------------------------------------------------------
|
9
|
+
|
10
|
+
export debugStack = (flag=true) ->
|
11
|
+
|
12
|
+
doDebugStack = flag
|
13
|
+
return
|
14
|
+
|
6
15
|
# ---------------------------------------------------------------------------
|
7
16
|
|
8
17
|
export class CallStack
|
@@ -15,26 +24,36 @@ export class CallStack
|
|
15
24
|
|
16
25
|
call: (funcName, hInfo) ->
|
17
26
|
|
27
|
+
if doDebugStack
|
28
|
+
LOG "[CALL #{funcName}]"
|
18
29
|
@lStack.push({funcName, hInfo})
|
19
30
|
return
|
20
31
|
|
21
32
|
# ........................................................................
|
22
33
|
|
23
|
-
returnFrom: (
|
34
|
+
returnFrom: (funcName) ->
|
24
35
|
|
36
|
+
if doDebugStack
|
37
|
+
LOG "[RETURN FROM #{funcName}]"
|
25
38
|
if @lStack.length == 0
|
26
|
-
LOG "returnFrom('#{
|
39
|
+
LOG "returnFrom('#{funcName}') but stack is empty"
|
27
40
|
return undef
|
28
|
-
|
29
|
-
if funcName
|
41
|
+
TOSfName = @lStack[@lStack.length-1].funcName
|
42
|
+
if funcName == TOSfName
|
43
|
+
{funcName, hInfo} = @lStack.pop()
|
44
|
+
assert funcName==TOSfName, "Bad func name on stack"
|
45
|
+
return hInfo
|
46
|
+
else
|
30
47
|
@dump()
|
31
|
-
LOG "returnFrom('#{
|
32
|
-
|
48
|
+
LOG "returnFrom('#{funcName}') but TOS is '#{TOSfName}'"
|
49
|
+
return undef
|
33
50
|
|
34
51
|
# ........................................................................
|
35
52
|
|
36
53
|
reset: () ->
|
37
54
|
|
55
|
+
if doDebugStack
|
56
|
+
LOG "RESET STACK"
|
38
57
|
@lStack = []
|
39
58
|
|
40
59
|
# ........................................................................
|
package/src/call_stack.js
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
// Generated by CoffeeScript 2.6.1
|
2
|
-
|
2
|
+
// call_stack.coffee
|
3
|
+
var doDebugStack;
|
4
|
+
|
3
5
|
import {
|
4
6
|
undef,
|
5
|
-
croak
|
7
|
+
croak,
|
8
|
+
assert
|
6
9
|
} from '@jdeighan/coffee-utils';
|
7
10
|
|
8
11
|
import {
|
@@ -10,6 +13,13 @@ import {
|
|
10
13
|
LOG
|
11
14
|
} from '@jdeighan/coffee-utils/log';
|
12
15
|
|
16
|
+
doDebugStack = false;
|
17
|
+
|
18
|
+
// ---------------------------------------------------------------------------
|
19
|
+
export var debugStack = function(flag = true) {
|
20
|
+
doDebugStack = flag;
|
21
|
+
};
|
22
|
+
|
13
23
|
// ---------------------------------------------------------------------------
|
14
24
|
export var CallStack = class CallStack {
|
15
25
|
constructor() {
|
@@ -18,26 +28,39 @@ export var CallStack = class CallStack {
|
|
18
28
|
|
19
29
|
// ........................................................................
|
20
30
|
call(funcName, hInfo) {
|
31
|
+
if (doDebugStack) {
|
32
|
+
LOG(`[CALL ${funcName}]`);
|
33
|
+
}
|
21
34
|
this.lStack.push({funcName, hInfo});
|
22
35
|
}
|
23
36
|
|
24
37
|
// ........................................................................
|
25
|
-
returnFrom(
|
26
|
-
var
|
38
|
+
returnFrom(funcName) {
|
39
|
+
var TOSfName, hInfo;
|
40
|
+
if (doDebugStack) {
|
41
|
+
LOG(`[RETURN FROM ${funcName}]`);
|
42
|
+
}
|
27
43
|
if (this.lStack.length === 0) {
|
28
|
-
LOG(`returnFrom('${
|
44
|
+
LOG(`returnFrom('${funcName}') but stack is empty`);
|
29
45
|
return undef;
|
30
46
|
}
|
31
|
-
|
32
|
-
if (funcName
|
47
|
+
TOSfName = this.lStack[this.lStack.length - 1].funcName;
|
48
|
+
if (funcName === TOSfName) {
|
49
|
+
({funcName, hInfo} = this.lStack.pop());
|
50
|
+
assert(funcName === TOSfName, "Bad func name on stack");
|
51
|
+
return hInfo;
|
52
|
+
} else {
|
33
53
|
this.dump();
|
34
|
-
LOG(`returnFrom('${
|
54
|
+
LOG(`returnFrom('${funcName}') but TOS is '${TOSfName}'`);
|
55
|
+
return undef;
|
35
56
|
}
|
36
|
-
return hInfo;
|
37
57
|
}
|
38
58
|
|
39
59
|
// ........................................................................
|
40
60
|
reset() {
|
61
|
+
if (doDebugStack) {
|
62
|
+
LOG("RESET STACK");
|
63
|
+
}
|
41
64
|
return this.lStack = [];
|
42
65
|
}
|
43
66
|
|