Skip to content

Commit 3419563

Browse files
committedJun 29, 2020
only inline allocated vars
1 parent adf40bd commit 3419563

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed
 

‎index.js

+21-8
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,6 @@ var get = function(obj, additionalSchemas, ptr) {
4545
}
4646
}
4747

48-
var formatName = function(field) {
49-
field = JSON.stringify(field)
50-
var pattern = /\[([^\[\]"]+)\]/
51-
while (pattern.test(field)) field = field.replace(pattern, '."+$1+"')
52-
return field
53-
}
54-
5548
var types = {}
5649

5750
types.any = function() {
@@ -123,8 +116,27 @@ var compile = function(schema, cache, root, reporter, opts) {
123116
opts.greedy : false;
124117

125118
var syms = {}
119+
var allocated = []
126120
var gensym = function(name) {
127-
return name+(syms[name] = (syms[name] || 0)+1)
121+
var res = name+(syms[name] = (syms[name] || 0)+1)
122+
allocated.push(res)
123+
return res
124+
}
125+
126+
var formatName = function(field) {
127+
var s = JSON.stringify(field)
128+
try {
129+
var pattern = /\[([^\[\]"]+)\]/
130+
while (pattern.test(s)) s = s.replace(pattern, replacer)
131+
return s
132+
} catch (_) {
133+
return JSON.stringify(field)
134+
}
135+
136+
function replacer (match, v) {
137+
if (allocated.indexOf(v) === -1) throw new Error('Unreplaceable')
138+
return '." + ' + v + ' + "'
139+
}
128140
}
129141

130142
var reversePatterns = {}
@@ -140,6 +152,7 @@ var compile = function(schema, cache, root, reporter, opts) {
140152
var genloop = function() {
141153
var v = vars.shift()
142154
vars.push(v+v[0])
155+
allocated.push(v)
143156
return v
144157
}
145158

0 commit comments

Comments
 (0)
Please sign in to comment.