@jdeighan/coffee-utils 6.0.4 → 6.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jdeighan/coffee-utils",
3
3
  "type": "module",
4
- "version": "6.0.4",
4
+ "version": "6.0.7",
5
5
  "description": "A set of utility functions for CoffeeScript",
6
6
  "main": "coffee_utils.js",
7
7
  "exports": {
@@ -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,6 +24,9 @@ export class CallStack
15
24
 
16
25
  call: (funcName, hInfo) ->
17
26
 
27
+ if doDebugStack
28
+ prefix = ' '.repeat(@lStack.length)
29
+ LOG "#{prefix}[> CALL #{funcName}]"
18
30
  @lStack.push({funcName, hInfo})
19
31
  return
20
32
 
@@ -26,15 +38,26 @@ export class CallStack
26
38
  LOG "returnFrom('#{fName}') but stack is empty"
27
39
  return undef
28
40
  {funcName, hInfo} = @lStack.pop()
29
- if funcName != fName
41
+ while (funcName != fName) && (@lStack.length > 0)
42
+ LOG "[MISSING RETURN FROM #{funcName} (return from #{fName})]"
43
+ {funcName, hInfo} = @lStack.pop()
44
+
45
+ if doDebugStack
46
+ prefix = ' '.repeat(@lStack.length)
47
+ LOG "#{prefix}[< BACK #{fName}]"
48
+ if (funcName == fName)
49
+ return hInfo
50
+ else
30
51
  @dump()
31
- LOG "returnFrom('#{fName}') but TOS is '#{funcName}'"
32
- return hInfo
52
+ LOG "BAD returnFrom('#{fName}')"
53
+ return undef
33
54
 
34
55
  # ........................................................................
35
56
 
36
57
  reset: () ->
37
58
 
59
+ if doDebugStack
60
+ LOG "RESET STACK"
38
61
  @lStack = []
39
62
 
40
63
  # ........................................................................
package/src/call_stack.js CHANGED
@@ -1,8 +1,11 @@
1
1
  // Generated by CoffeeScript 2.6.1
2
- // call_stack.coffee
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,44 @@ export var CallStack = class CallStack {
18
28
 
19
29
  // ........................................................................
20
30
  call(funcName, hInfo) {
31
+ var prefix;
32
+ if (doDebugStack) {
33
+ prefix = ' '.repeat(this.lStack.length);
34
+ LOG(`${prefix}[> CALL ${funcName}]`);
35
+ }
21
36
  this.lStack.push({funcName, hInfo});
22
37
  }
23
38
 
24
39
  // ........................................................................
25
40
  returnFrom(fName) {
26
- var funcName, hInfo;
41
+ var funcName, hInfo, prefix;
27
42
  if (this.lStack.length === 0) {
28
43
  LOG(`returnFrom('${fName}') but stack is empty`);
29
44
  return undef;
30
45
  }
31
46
  ({funcName, hInfo} = this.lStack.pop());
32
- if (funcName !== fName) {
47
+ while ((funcName !== fName) && (this.lStack.length > 0)) {
48
+ LOG(`[MISSING RETURN FROM ${funcName} (return from ${fName})]`);
49
+ ({funcName, hInfo} = this.lStack.pop());
50
+ }
51
+ if (doDebugStack) {
52
+ prefix = ' '.repeat(this.lStack.length);
53
+ LOG(`${prefix}[< BACK ${fName}]`);
54
+ }
55
+ if (funcName === fName) {
56
+ return hInfo;
57
+ } else {
33
58
  this.dump();
34
- LOG(`returnFrom('${fName}') but TOS is '${funcName}'`);
59
+ LOG(`BAD returnFrom('${fName}')`);
60
+ return undef;
35
61
  }
36
- return hInfo;
37
62
  }
38
63
 
39
64
  // ........................................................................
40
65
  reset() {
66
+ if (doDebugStack) {
67
+ LOG("RESET STACK");
68
+ }
41
69
  return this.lStack = [];
42
70
  }
43
71
 
@@ -34,6 +34,8 @@ export LOG = (lArgs...) ->
34
34
  console.log label
35
35
  return
36
36
 
37
+ export DEBUG = LOG # synonym
38
+
37
39
  # ---------------------------------------------------------------------------
38
40
 
39
41
  export setStringifier = (func) ->
package/src/log_utils.js CHANGED
@@ -59,6 +59,9 @@ export var LOG = function(...lArgs) {
59
59
  }
60
60
  };
61
61
 
62
+ export var DEBUG = LOG; // synonym
63
+
64
+
62
65
  // ---------------------------------------------------------------------------
63
66
  export var setStringifier = function(func) {
64
67
  var orgStringifier;