Skip to content

Commit 3cd2b24

Browse files
committed
Drop curly_block
closes #13
1 parent 7a6fa65 commit 3cd2b24

File tree

2 files changed

+21
-42
lines changed

2 files changed

+21
-42
lines changed

src/parser/event_parser/grammar/items.rs

+17-1
Original file line numberDiff line numberDiff line change
@@ -235,5 +235,21 @@ fn fn_item(p: &mut Parser) {
235235
assert!(p.at(FN_KW));
236236
p.bump();
237237

238-
p.expect(IDENT) && p.expect(L_PAREN) && p.expect(R_PAREN) && p.curly_block(|_| ());
238+
p.expect(IDENT);
239+
if p.at(L_PAREN) {
240+
fn_value_parameters(p);
241+
} else {
242+
p.error().message("expected function arguments").emit();
243+
}
244+
245+
if p.at(L_CURLY) {
246+
p.expect(L_CURLY);
247+
p.expect(R_CURLY);
248+
}
249+
250+
fn fn_value_parameters(p: &mut Parser) {
251+
assert!(p.at(L_PAREN));
252+
p.bump();
253+
p.expect(R_PAREN);
254+
}
239255
}

src/parser/event_parser/parser.rs

+4-41
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use {SyntaxKind, TextUnit, Token};
22
use super::Event;
33
use super::super::is_insignificant;
4-
use SyntaxKind::{EOF, ERROR, L_CURLY, R_CURLY, TOMBSTONE};
4+
use SyntaxKind::{EOF, TOMBSTONE};
55

66
pub(crate) struct Marker {
77
pos: u32,
@@ -106,9 +106,6 @@ pub(crate) struct Parser<'t> {
106106

107107
pos: usize,
108108
events: Vec<Event>,
109-
110-
curly_level: i32,
111-
curly_limit: Option<i32>,
112109
}
113110

114111
impl<'t> Parser<'t> {
@@ -131,13 +128,10 @@ impl<'t> Parser<'t> {
131128

132129
pos: 0,
133130
events: Vec::new(),
134-
curly_level: 0,
135-
curly_limit: None,
136131
}
137132
}
138133

139134
pub(crate) fn into_events(self) -> Vec<Event> {
140-
assert!(self.curly_limit.is_none());
141135
assert_eq!(self.current(), EOF);
142136
self.events
143137
}
@@ -146,13 +140,7 @@ impl<'t> Parser<'t> {
146140
if self.pos == self.tokens.len() {
147141
return EOF;
148142
}
149-
let token = self.tokens[self.pos];
150-
if let Some(limit) = self.curly_limit {
151-
if limit == self.curly_level && token.kind == R_CURLY {
152-
return EOF;
153-
}
154-
}
155-
token.kind
143+
self.tokens[self.pos].kind
156144
}
157145

158146
pub(crate) fn start(&mut self) -> Marker {
@@ -172,11 +160,8 @@ impl<'t> Parser<'t> {
172160

173161
pub(crate) fn bump(&mut self) -> SyntaxKind {
174162
let kind = self.current();
175-
match kind {
176-
L_CURLY => self.curly_level += 1,
177-
R_CURLY => self.curly_level -= 1,
178-
EOF => return EOF,
179-
_ => (),
163+
if kind == EOF {
164+
return EOF;
180165
}
181166
self.pos += 1;
182167
self.event(Event::Token {
@@ -190,28 +175,6 @@ impl<'t> Parser<'t> {
190175
self.tokens.get(self.pos + n).map(|t| t.kind).unwrap_or(EOF)
191176
}
192177

193-
pub(crate) fn curly_block<F: FnOnce(&mut Parser)>(&mut self, f: F) -> bool {
194-
let old_level = self.curly_level;
195-
let old_limit = self.curly_limit;
196-
if !self.expect(L_CURLY) {
197-
return false;
198-
}
199-
self.curly_limit = Some(self.curly_level);
200-
f(self);
201-
assert!(self.curly_level > old_level);
202-
self.curly_limit = old_limit;
203-
if !self.expect(R_CURLY) {
204-
let err = self.start();
205-
while self.curly_level > old_level {
206-
if self.bump() == EOF {
207-
break;
208-
}
209-
}
210-
err.complete(self, ERROR);
211-
}
212-
true
213-
}
214-
215178
fn event(&mut self, event: Event) {
216179
self.events.push(event)
217180
}

0 commit comments

Comments
 (0)