From 6bd476ff30f63cc6e6e1e2d70932f3145c617d54 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 19 Nov 2020 13:23:05 +0100 Subject: [PATCH] Add AstNode::getParent --- generator/src/ql_gen.rs | 15 +++++++++++++++ ql/src/codeql_ruby/ast.qll | 2 ++ 2 files changed, 17 insertions(+) diff --git a/generator/src/ql_gen.rs b/generator/src/ql_gen.rs index 15681ee7261..b8ec8ec5cb9 100644 --- a/generator/src/ql_gen.rs +++ b/generator/src/ql_gen.rs @@ -46,6 +46,20 @@ fn create_ast_node_class<'a>() -> ql::Class<'a> { create_none_predicate("getLocation", false, Some(ql::Type::Normal("Location"))); let get_a_field_or_child = create_none_predicate("getAFieldOrChild", false, Some(ql::Type::Normal("AstNode"))); + let get_parent = ql::Predicate { + name: "getParent", + overridden: false, + return_type: Some(ql::Type::Normal("AstNode")), + formal_parameters: vec![], + body: ql::Expression::Equals( + Box::new(ql::Expression::Var("this")), + Box::new(ql::Expression::Dot( + Box::new(ql::Expression::Var("result")), + "getAFieldOrChild", + vec![], + )), + ), + }; let describe_ql_class = ql::Predicate { name: "describeQlClass", overridden: false, @@ -64,6 +78,7 @@ fn create_ast_node_class<'a>() -> ql::Class<'a> { predicates: vec![ to_string, get_location, + get_parent, get_a_field_or_child, describe_ql_class, ], diff --git a/ql/src/codeql_ruby/ast.qll b/ql/src/codeql_ruby/ast.qll index b66e15806ae..6275a8811a8 100644 --- a/ql/src/codeql_ruby/ast.qll +++ b/ql/src/codeql_ruby/ast.qll @@ -11,6 +11,8 @@ class AstNode extends @ast_node { Location getLocation() { none() } + AstNode getParent() { this = result.getAFieldOrChild() } + AstNode getAFieldOrChild() { none() } string describeQlClass() { result = "???" }