Skip to content

Commit 6a36cc2

Browse files
committed
Remove ArraySubscripts, replace with Vec<Subscript>
Signed-off-by: James Goppert <james.goppert@gmail.com>
1 parent 0e52618 commit 6a36cc2

File tree

8 files changed

+28
-67
lines changed

8 files changed

+28
-67
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "rumoca_parser"
33
authors = ["James Goppert", "Benjamin Perseghetti"]
44
description = "A Modelica parser leveraging LALRPOP"
5-
version = "0.8.0"
5+
version = "0.9.0"
66
edition = "2021"
77
license = "Apache-2.0"
88

src/s1_parser/ast.rs

+4-9
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub enum ClassSpecifier {
4040
},
4141
Extends {
4242
name: String,
43-
modification: Option<Vec<Argument>>,
43+
modification: Vec<Argument>,
4444
description: Vec<String>,
4545
composition: Vec<CompositionPart>,
4646
name_end: String,
@@ -111,7 +111,7 @@ pub struct ClassPrefixes {
111111
pub struct ComponentClause {
112112
pub type_prefix: TypePrefix,
113113
pub type_specifier: TypeSpecifier,
114-
pub array_subscripts: Option<ArraySubscripts>,
114+
pub array_subscripts: Vec<Subscript>,
115115
pub components: Vec<ComponentDeclaration>,
116116
}
117117

@@ -125,7 +125,7 @@ pub struct ComponentClause1 {
125125
#[derive(CommonTraits!, Default)]
126126
pub struct Declaration {
127127
pub name: String,
128-
pub array_subscripts: Option<ArraySubscripts>,
128+
pub array_subscripts: Vec<Subscript>,
129129
pub modification: Option<Modification>,
130130
}
131131

@@ -265,12 +265,7 @@ pub struct ComponentReference {
265265
#[derive(CommonTraits!, Default)]
266266
pub struct RefPart {
267267
pub name: String,
268-
pub array_subscripts: Option<ArraySubscripts>,
269-
}
270-
271-
#[derive(CommonTraits!, Default)]
272-
pub struct ArraySubscripts {
273-
pub sub: Vec<Subscript>,
268+
pub array_subscripts: Vec<Subscript>,
274269
}
275270

276271
#[derive(CommonTraits!, Default)]

src/s1_parser/modelica.lalrpop

+6-10
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ pub LongClassSpecifier: ast::ClassSpecifier = {
255255
"end" <name_end: IDENT> => {
256256
ast::ClassSpecifier::Extends {
257257
name,
258-
modification,
258+
modification: modification.unwrap_or(Vec::new()),
259259
description,
260260
composition,
261261
name_end,
@@ -465,7 +465,7 @@ pub ComponentClause: ast::ComponentClause = {
465465
ast::ComponentClause {
466466
type_prefix,
467467
type_specifier,
468-
array_subscripts,
468+
array_subscripts: array_subscripts.unwrap_or(Vec::new()),
469469
components,
470470
}
471471
}
@@ -533,7 +533,7 @@ pub Declaration: ast::Declaration = {
533533
<modification:Modification?> => {
534534
ast::Declaration {
535535
name,
536-
array_subscripts,
536+
array_subscripts: array_subscripts.unwrap_or(Vec::new()),
537537
modification,
538538
}
539539
}
@@ -1202,7 +1202,7 @@ pub RefPart: ast::RefPart = {
12021202
<name:IDENT> <array_subscripts:ArraySubscripts?> => {
12031203
ast::RefPart {
12041204
name,
1205-
array_subscripts,
1205+
array_subscripts: array_subscripts.unwrap_or(Vec::new()),
12061206
}
12071207
}
12081208
}
@@ -1250,12 +1250,8 @@ pub FunctionCallArguments: Vec<ast::Expression> = {
12501250

12511251
//✅ array-subscripts :
12521252
//✅ "[" subscript { "," subscript } "]"
1253-
pub ArraySubscripts: ast::ArraySubscripts = {
1254-
"[" <sub: SeparatedList<Subscript, ",">> "]" => {
1255-
ast::ArraySubscripts {
1256-
sub,
1257-
}
1258-
},
1253+
pub ArraySubscripts: Vec<ast::Subscript> = {
1254+
"[" <sub: SeparatedList<Subscript, ",">> "]" => sub,
12591255
}
12601256
//✅ subscript :
12611257
//✅ ":" | expression

src/s2_analysis/visitable.rs

+8-22
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,8 @@ impl<'a> Visitable<'a> for ast::ClassSpecifier {
4949
composition,
5050
..
5151
} => {
52-
if let Some(modifs) = modification {
53-
for modif in modifs.iter() {
54-
(*modif).accept(visitor);
55-
}
52+
for modif in modification.iter() {
53+
(*modif).accept(visitor);
5654
}
5755
for part in composition.iter() {
5856
part.accept(visitor);
@@ -169,8 +167,8 @@ impl<'a> Visitable<'a> for ast::ComponentClause {
169167
visitor.enter_component_clause(self);
170168
self.type_prefix.accept(visitor);
171169
self.type_specifier.accept(visitor);
172-
if let Some(subs) = self.array_subscripts.as_ref() {
173-
subs.accept(visitor);
170+
for sub in self.array_subscripts.iter() {
171+
sub.accept(visitor);
174172
}
175173
for comp in self.components.iter() {
176174
comp.accept(visitor);
@@ -196,8 +194,8 @@ impl<'a> Visitable<'a> for ast::Declaration {
196194
fn accept<V: Visitor<'a> + ?Sized>(&'a self, visitor: &mut V) {
197195
visitor.enter_any();
198196
visitor.enter_declaration(self);
199-
if let Some(subs) = self.array_subscripts.as_ref() {
200-
subs.accept(visitor);
197+
for sub in self.array_subscripts.iter() {
198+
sub.accept(visitor);
201199
}
202200
if let Some(modif) = self.modification.as_ref() {
203201
modif.accept(visitor);
@@ -435,22 +433,10 @@ impl<'a> Visitable<'a> for ast::RefPart {
435433
fn accept<V: Visitor<'a> + ?Sized>(&'a self, visitor: &mut V) {
436434
visitor.enter_any();
437435
visitor.enter_ref_part(self);
438-
if let Some(subs) = self.array_subscripts.as_ref() {
439-
subs.accept(visitor);
440-
}
441-
visitor.exit_ref_part(self);
442-
visitor.exit_any();
443-
}
444-
}
445-
446-
impl<'a> Visitable<'a> for ast::ArraySubscripts {
447-
fn accept<V: Visitor<'a> + ?Sized>(&'a self, visitor: &mut V) {
448-
visitor.enter_any();
449-
visitor.enter_array_subscripts(self);
450-
for sub in self.sub.iter() {
436+
for sub in self.array_subscripts.iter() {
451437
sub.accept(visitor);
452438
}
453-
visitor.exit_array_subscripts(self);
439+
visitor.exit_ref_part(self);
454440
visitor.exit_any();
455441
}
456442
}

src/s2_analysis/visitable_mut.rs

+8-22
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,8 @@ impl VisitableMut for ast::ClassSpecifier {
4949
composition,
5050
..
5151
} => {
52-
if let Some(modifs) = modification {
53-
for modif in modifs.iter_mut() {
54-
(*modif).accept_mut(visitor);
55-
}
52+
for modif in modification.iter_mut() {
53+
(*modif).accept_mut(visitor);
5654
}
5755
for part in composition.iter_mut() {
5856
part.accept_mut(visitor);
@@ -169,8 +167,8 @@ impl VisitableMut for ast::ComponentClause {
169167
visitor.enter_component_clause_mut(self);
170168
self.type_prefix.accept_mut(visitor);
171169
self.type_specifier.accept_mut(visitor);
172-
if let Some(subs) = self.array_subscripts.as_mut() {
173-
subs.accept_mut(visitor);
170+
for sub in self.array_subscripts.iter_mut() {
171+
sub.accept_mut(visitor);
174172
}
175173
for comp in self.components.iter_mut() {
176174
comp.accept_mut(visitor);
@@ -196,8 +194,8 @@ impl VisitableMut for ast::Declaration {
196194
fn accept_mut<V: VisitorMut + ?Sized>(&mut self, visitor: &mut V) {
197195
visitor.enter_any();
198196
visitor.enter_declaration_mut(self);
199-
if let Some(subs) = self.array_subscripts.as_mut() {
200-
subs.accept_mut(visitor);
197+
for sub in self.array_subscripts.iter_mut() {
198+
sub.accept_mut(visitor);
201199
}
202200
if let Some(modif) = self.modification.as_mut() {
203201
modif.accept_mut(visitor);
@@ -435,22 +433,10 @@ impl VisitableMut for ast::RefPart {
435433
fn accept_mut<V: VisitorMut + ?Sized>(&mut self, visitor: &mut V) {
436434
visitor.enter_any();
437435
visitor.enter_ref_part_mut(self);
438-
if let Some(subs) = self.array_subscripts.as_mut() {
439-
subs.accept_mut(visitor);
440-
}
441-
visitor.exit_ref_part_mut(self);
442-
visitor.exit_any();
443-
}
444-
}
445-
446-
impl VisitableMut for ast::ArraySubscripts {
447-
fn accept_mut<V: VisitorMut + ?Sized>(&mut self, visitor: &mut V) {
448-
visitor.enter_any();
449-
visitor.enter_array_subscripts_mut(self);
450-
for sub in self.sub.iter_mut() {
436+
for sub in self.array_subscripts.iter_mut() {
451437
sub.accept_mut(visitor);
452438
}
453-
visitor.exit_array_subscripts_mut(self);
439+
visitor.exit_ref_part_mut(self);
454440
visitor.exit_any();
455441
}
456442
}

src/s2_analysis/visitor.rs

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ pub trait Visitor<'a> {
3838
IfExpressionBlock,
3939
ComponentReference,
4040
RefPart,
41-
ArraySubscripts,
4241
Subscript,
4342
Argument,
4443
Modification,

src/s2_analysis/visitor_mut.rs

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ pub trait VisitorMut {
3838
IfExpressionBlock,
3939
ComponentReference,
4040
RefPart,
41-
ArraySubscripts,
4241
Subscript,
4342
Argument,
4443
Modification,

0 commit comments

Comments
 (0)