cmark

My personal build of CMark ✏️

Commit
78ad57d6919c20831c8f6d3455a72d431afd1715
Parent
151cb9e51b25bfd644e1920c078ca894fc9e7e9d
Author
John MacFarlane <jgm@berkeley.edu>
Date

Restored memoization code.

Diffstat

1 file changed, 15 insertions, 0 deletions

Status File Name N° Changes Insertions Deletions
Modified js/stmd.js 15 15 0
diff --git a/js/stmd.js b/js/stmd.js
@@ -745,6 +745,13 @@
     // and returning the inline parsed.
     var parseInline = function() {
         var startpos = this.pos;
+
+        var memoized = this.memo[startpos];
+        if (memoized) {
+            this.pos = memoized.endpos;
+            return memoized.inline;
+        }
+
         var c = this.peek();
         if (!c) {
             return null;
@@ -785,6 +792,12 @@
             this.pos += 1;
             res = [{t: 'Str', c: c}];
         }
+
+        if (res) {
+            this.memo[startpos] = { inline: res,
+                                    endpos: this.pos };
+        }
+
         return res;
     };
 
@@ -793,6 +806,7 @@
         this.subject = s;
         this.pos = 0;
         this.refmap = refmap || {};
+        this.memo = {};
         this.last_emphasis_closer = { '*': s.length, '_': s.length };
         var inlines = [];
         var next_inline;
@@ -810,6 +824,7 @@
             last_emphasis_closer: null,  // used by parseEmphasis method
             pos: 0,
             refmap: {},
+            memo: {},
             match: match,
             peek: peek,
             spnl: spnl,