Skip to content

Commit 3d2382b

Browse files
committed
Abstract all the primitive consumption into a single consumeAPrimitive() function.
1 parent 5316b97 commit 3d2382b

File tree

1 file changed

+24
-39
lines changed

1 file changed

+24
-39
lines changed

parser.js

Lines changed: 24 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ function parse(tokens) {
8080
case "CDC":
8181
case "WHITESPACE": break;
8282
case "AT-KEYWORD": push(new AtRule(token.value)) && switchto('at-rule'); break;
83-
case "{": parseerror("Attempt to open a curly-block at top-level.") && consumeASimpleBlock(token); break;
83+
case "{": parseerror("Attempt to open a curly-block at top-level.") && consumeAPrimitive(); break;
8484
default: push(new StyleRule) && switchto('selector') && reprocess();
8585
}
8686
break;
@@ -92,10 +92,7 @@ function parse(tokens) {
9292
if(rule.fillType !== '') switchto(rule.fillType);
9393
else parseerror("Attempt to open a curly-block in a statement-type at-rule.") && switchto('next-block') && reprocess();
9494
break;
95-
case "[":
96-
case "(": rule.appendPrelude(consumeASimpleBlock(token)); break;
97-
case "FUNCTION": rule.appendPrelude(consumeAFunc(token)); break;
98-
default: rule.appendPrelude(token);
95+
default: rule.appendPrelude(consumeAPrimitive());
9996
}
10097
break;
10198

@@ -113,10 +110,7 @@ function parse(tokens) {
113110
case "selector":
114111
switch(token.tokenType) {
115112
case "{": switchto('declaration'); break;
116-
case "[":
117-
case "(": rule.appendSelector(consumeASimpleBlock(token)); break;
118-
case "FUNCTION": rule.appendSelector(consumeAFunc(token)); break;
119-
default: rule.appendSelector(token);
113+
default: rule.appendSelector(consumeAPrimitive());
120114
}
121115
break;
122116

@@ -142,10 +136,6 @@ function parse(tokens) {
142136

143137
case "declaration-value":
144138
switch(token.tokenType) {
145-
case "{":
146-
case "[":
147-
case "(": decl.append(consumeASimpleBlock(token)); break;
148-
case "FUNCTION": decl.append(consumeAFunc(token)); break;
149139
case "DELIM":
150140
if(token.value == "!" && next().tokenType == 'IDENTIFIER' && next().value.toLowerCase() == "important") {
151141
consume();
@@ -157,7 +147,7 @@ function parse(tokens) {
157147
break;
158148
case ";": rule.append(decl) && discarddecl() && switchto(); break;
159149
case "}": rule.append(decl) && discarddecl() && pop() && switchto(); break;
160-
default: decl.append(token);
150+
default: decl.append(consumeAPrimitive());
161151
}
162152
break;
163153

@@ -172,23 +162,16 @@ function parse(tokens) {
172162

173163
case "next-block":
174164
switch(token.tokenType) {
175-
case "{": consumeASimpleBlock(token) && switchto(); break;
176-
case "[":
177-
case "(": consumeASimpleBlock(token); break;
178-
case "FUNCTION": consumeAFunc(token); break;
179-
default: break;
165+
case "{": consumeAPrimitive() && switchto(); break;
166+
default: consumeAPrimitive(); break;
180167
}
181168
break;
182169

183170
case "next-declaration":
184171
switch(token.tokenType) {
185172
case ";": switchto('declaration'); break;
186173
case "}": switchto('declaration') && reprocess(); break;
187-
case "{":
188-
case "[":
189-
case "(": consumeASimpleBlock(token); break;
190-
case "FUNCTION": consumeAFunc(token); break;
191-
default: break;
174+
default: consumeAPrimitive(); break;
192175
}
193176
break;
194177

@@ -199,26 +182,32 @@ function parse(tokens) {
199182
}
200183
}
201184

202-
function consumeASimpleBlock(startToken) {
203-
var endingTokenType = {"(":")", "[":"]", "{":"}"}[startToken.tokenType];
204-
var block = new SimpleBlock(startToken.tokenType);
185+
function consumeAPrimitive() {
186+
switch(token.tokenType) {
187+
case "{":
188+
case "[":
189+
case "{": return consumeASimpleBlock();
190+
case "FUNCTION": return consumeAFunc();
191+
default: return token;
192+
}
193+
}
194+
195+
function consumeASimpleBlock() {
196+
var endingTokenType = {"(":")", "[":"]", "{":"}"}[token.tokenType];
197+
var block = new SimpleBlock(token.tokenType);
205198

206199
for(;;) {
207200
consume();
208201
switch(token.tokenType) {
209202
case "EOF":
210203
case endingTokenType: return block;
211-
case "{":
212-
case "[":
213-
case "(": block.append(consumeASimpleBlock(token)); break;
214-
case "FUNCTION": block.append(consumeAFunc(token)); break;
215-
default: block.append(token);
204+
default: block.append(consumeAPrimitive());
216205
}
217206
}
218207
}
219208

220-
function consumeAFunc(startToken) {
221-
var func = new Func(startToken.value);
209+
function consumeAFunc() {
210+
var func = new Func(token.value);
222211
var arg = new FuncArg();
223212

224213
for(;;) {
@@ -234,11 +223,7 @@ function parse(tokens) {
234223
arg.append(token);
235224
}
236225
break;
237-
case "{":
238-
case "[":
239-
case "(": arg.append(consumeASimpleBlock(token)); break;
240-
case "FUNCTION": arg.append(consumeAFunc(token)); break;
241-
default: arg.append(token);
226+
default: arg.append(consumeAPrimitive());
242227
}
243228
}
244229
}

0 commit comments

Comments
 (0)