Skip to content

Commit b3b2bba

Browse files
committed
Ruby: make some generated predicates final
1 parent b43cc23 commit b3b2bba

File tree

3 files changed

+448
-422
lines changed

3 files changed

+448
-422
lines changed

ruby/generator/src/ql.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ impl<'a> fmt::Display for Class<'a> {
6868
qldoc: None,
6969
name: self.name,
7070
overridden: false,
71+
is_final: false,
7172
return_type: None,
7273
formal_parameters: vec![],
7374
body: charpred.clone(),
@@ -239,6 +240,7 @@ pub struct Predicate<'a> {
239240
pub qldoc: Option<String>,
240241
pub name: &'a str,
241242
pub overridden: bool,
243+
pub is_final: bool,
242244
pub return_type: Option<Type<'a>>,
243245
pub formal_parameters: Vec<FormalParameter<'a>>,
244246
pub body: Expression<'a>,
@@ -249,6 +251,9 @@ impl<'a> fmt::Display for Predicate<'a> {
249251
if let Some(qldoc) = &self.qldoc {
250252
write!(f, "/** {} */", qldoc)?;
251253
}
254+
if self.is_final {
255+
write!(f, "final ")?;
256+
}
252257
if self.overridden {
253258
write!(f, "override ")?;
254259
}

ruby/generator/src/ql_gen.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) ->
1111
)),
1212
name: "toString",
1313
overridden: false,
14+
is_final: false,
1415
return_type: Some(ql::Type::String),
1516
formal_parameters: vec![],
1617
body: ql::Expression::Equals(
@@ -26,6 +27,7 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) ->
2627
name: "getLocation",
2728
qldoc: Some(String::from("Gets the location of this element.")),
2829
overridden: false,
30+
is_final: true,
2931
return_type: Some(ql::Type::Normal("L::Location")),
3032
formal_parameters: vec![],
3133
body: ql::Expression::Pred(
@@ -48,6 +50,7 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) ->
4850
qldoc: Some(String::from("Gets the parent of this element.")),
4951
name: "getParent",
5052
overridden: false,
53+
is_final: true,
5154
return_type: Some(ql::Type::Normal("AstNode")),
5255
formal_parameters: vec![],
5356
body: ql::Expression::Pred(
@@ -66,6 +69,7 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) ->
6669
)),
6770
name: "getParentIndex",
6871
overridden: false,
72+
is_final: true,
6973
return_type: Some(ql::Type::Int),
7074
formal_parameters: vec![],
7175
body: ql::Expression::Pred(
@@ -84,6 +88,7 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) ->
8488
)),
8589
name: "getAPrimaryQlClass",
8690
overridden: false,
91+
is_final: false,
8792
return_type: Some(ql::Type::String),
8893
formal_parameters: vec![],
8994
body: ql::Expression::Equals(
@@ -99,6 +104,7 @@ pub fn create_ast_node_class<'a>(ast_node: &'a str, node_info_table: &'a str) ->
99104
),
100105
name: "getPrimaryQlClasses",
101106
overridden: false,
107+
is_final: false,
102108
return_type: Some(ql::Type::String),
103109
formal_parameters: vec![],
104110
body: ql::Expression::Equals(
@@ -140,6 +146,7 @@ pub fn create_token_class<'a>(token_type: &'a str, tokeninfo: &'a str) -> ql::Cl
140146
qldoc: Some(String::from("Gets the value of this token.")),
141147
name: "getValue",
142148
overridden: false,
149+
is_final: true,
143150
return_type: Some(ql::Type::String),
144151
formal_parameters: vec![],
145152
body: create_get_field_expr_for_column_storage("result", tokeninfo, 1, tokeninfo_arity),
@@ -150,6 +157,7 @@ pub fn create_token_class<'a>(token_type: &'a str, tokeninfo: &'a str) -> ql::Cl
150157
)),
151158
name: "toString",
152159
overridden: true,
160+
is_final: true,
153161
return_type: Some(ql::Type::String),
154162
formal_parameters: vec![],
155163
body: ql::Expression::Equals(
@@ -173,15 +181,15 @@ pub fn create_token_class<'a>(token_type: &'a str, tokeninfo: &'a str) -> ql::Cl
173181
get_value,
174182
//get_location,
175183
to_string,
176-
create_get_a_primary_ql_class("Token"),
184+
create_get_a_primary_ql_class("Token", false),
177185
],
178186
}
179187
}
180188

181189
// Creates the `ReservedWord` class.
182190
pub fn create_reserved_word_class(db_name: &str) -> ql::Class {
183191
let class_name = "ReservedWord";
184-
let get_a_primary_ql_class = create_get_a_primary_ql_class(class_name);
192+
let get_a_primary_ql_class = create_get_a_primary_ql_class(class_name, true);
185193
ql::Class {
186194
qldoc: Some(String::from("A reserved word.")),
187195
name: class_name,
@@ -205,6 +213,7 @@ fn create_none_predicate<'a>(
205213
qldoc,
206214
name,
207215
overridden,
216+
is_final: false,
208217
return_type,
209218
formal_parameters: Vec::new(),
210219
body: ql::Expression::Pred("none", vec![]),
@@ -213,13 +222,14 @@ fn create_none_predicate<'a>(
213222

214223
/// Creates an overridden `getAPrimaryQlClass` predicate that returns the given
215224
/// name.
216-
fn create_get_a_primary_ql_class(class_name: &str) -> ql::Predicate {
225+
fn create_get_a_primary_ql_class(class_name: &str, is_final: bool) -> ql::Predicate {
217226
ql::Predicate {
218227
qldoc: Some(String::from(
219228
"Gets the name of the primary QL class for this element.",
220229
)),
221230
name: "getAPrimaryQlClass",
222231
overridden: true,
232+
is_final,
223233
return_type: Some(ql::Type::String),
224234
formal_parameters: vec![],
225235
body: ql::Expression::Equals(
@@ -428,6 +438,7 @@ fn create_field_getters<'a>(
428438
qldoc: Some(qldoc),
429439
name: &field.getter_name,
430440
overridden: false,
441+
is_final: true,
431442
return_type,
432443
formal_parameters,
433444
body,
@@ -452,7 +463,8 @@ pub fn convert_nodes(nodes: &node_types::NodeTypeMap) -> Vec<ql::TopLevel> {
452463
match &node.kind {
453464
node_types::EntryKind::Token { kind_id: _ } => {
454465
if type_name.named {
455-
let get_a_primary_ql_class = create_get_a_primary_ql_class(&node.ql_class_name);
466+
let get_a_primary_ql_class =
467+
create_get_a_primary_ql_class(&node.ql_class_name, true);
456468
let mut supertypes: BTreeSet<ql::Type> = BTreeSet::new();
457469
supertypes.insert(ql::Type::At(&node.dbscheme_name));
458470
supertypes.insert(ql::Type::Normal("Token"));
@@ -511,7 +523,7 @@ pub fn convert_nodes(nodes: &node_types::NodeTypeMap) -> Vec<ql::TopLevel> {
511523
.into_iter()
512524
.collect(),
513525
characteristic_predicate: None,
514-
predicates: vec![create_get_a_primary_ql_class(main_class_name)],
526+
predicates: vec![create_get_a_primary_ql_class(main_class_name, true)],
515527
};
516528

517529
let mut main_table_column_index: usize = 0;
@@ -539,6 +551,7 @@ pub fn convert_nodes(nodes: &node_types::NodeTypeMap) -> Vec<ql::TopLevel> {
539551
qldoc: Some(String::from("Gets a field or child node of this node.")),
540552
name: "getAFieldOrChild",
541553
overridden: true,
554+
is_final: true,
542555
return_type: Some(ql::Type::Normal("AstNode")),
543556
formal_parameters: vec![],
544557
body: ql::Expression::Or(get_child_exprs),

0 commit comments

Comments
 (0)