diff options
Diffstat (limited to 'gcc/rust/resolve/rust-ast-resolve.cc')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve.cc | 183 |
1 files changed, 1 insertions, 182 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve.cc b/gcc/rust/resolve/rust-ast-resolve.cc index 3fb8b41..094fa4a 100644 --- a/gcc/rust/resolve/rust-ast-resolve.cc +++ b/gcc/rust/resolve/rust-ast-resolve.cc @@ -22,6 +22,7 @@ #include "rust-ast-resolve-toplevel.h" #include "rust-ast-resolve-item.h" #include "rust-ast-resolve-expr.h" +#include "rust-ast-resolve-struct-expr-field.h" #define MKBUILTIN_TYPE(_X, _R, _TY) \ do \ @@ -388,41 +389,6 @@ NameResolution::go (AST::Crate &crate) ResolveItem::go (it->get (), CanonicalPath::create_empty (), crate_prefix); } -// rust-ast-resolve-expr.h - -void -ResolveExpr::visit (AST::BlockExpr &expr) -{ - NodeId scope_node_id = expr.get_node_id (); - resolver->get_name_scope ().push (scope_node_id); - resolver->get_type_scope ().push (scope_node_id); - resolver->get_label_scope ().push (scope_node_id); - resolver->push_new_name_rib (resolver->get_name_scope ().peek ()); - resolver->push_new_type_rib (resolver->get_type_scope ().peek ()); - resolver->push_new_label_rib (resolver->get_type_scope ().peek ()); - - for (auto &s : expr.get_statements ()) - { - if (s->is_item ()) - ResolveStmt::go (s.get (), s->get_node_id (), prefix, canonical_prefix, - CanonicalPath::create_empty ()); - } - - for (auto &s : expr.get_statements ()) - { - if (!s->is_item ()) - ResolveStmt::go (s.get (), s->get_node_id (), prefix, canonical_prefix, - CanonicalPath::create_empty ()); - } - - if (expr.has_tail_expr ()) - resolve_expr (expr.get_tail_expr ().get (), expr.get_node_id ()); - - resolver->get_name_scope ().pop (); - resolver->get_type_scope ().pop (); - resolver->get_label_scope ().pop (); -} - // rust-ast-resolve-struct-expr-field.h void @@ -448,120 +414,6 @@ ResolveStructExprField::visit (AST::StructExprFieldIdentifier &field) ResolveExpr::go (&expr, field.get_node_id (), prefix, canonical_prefix); } -// rust-ast-resolve-type.h - -std::string -ResolveTypeToCanonicalPath::canonicalize_generic_args (AST::GenericArgs &args) -{ - std::string buf; - - size_t i = 0; - size_t total = args.get_type_args ().size (); - - for (auto &ty_arg : args.get_type_args ()) - { - buf += ty_arg->as_string (); - if ((i + 1) < total) - buf += ","; - - i++; - } - - return "<" + buf + ">"; -} - -bool -ResolveTypeToCanonicalPath::type_resolve_generic_args (AST::GenericArgs &args) -{ - for (auto > : args.get_type_args ()) - { - ResolveType::go (gt.get (), UNKNOWN_NODEID); - // FIXME error handling here for inference variable since they do not have - // a node to resolve to - // if (resolved == UNKNOWN_NODEID) return false; - } - return true; -} - -void -ResolveTypeToCanonicalPath::visit (AST::TypePathSegmentGeneric &seg) -{ - if (seg.is_error ()) - { - failure_flag = true; - rust_error_at (seg.get_locus (), "segment has error: %s", - seg.as_string ().c_str ()); - return; - } - - if (!seg.has_generic_args ()) - { - auto ident_segment - = CanonicalPath::new_seg (seg.get_node_id (), - seg.get_ident_segment ().as_string ()); - result = result.append (ident_segment); - return; - } - - if (type_resolve_generic_args_flag) - { - bool ok = type_resolve_generic_args (seg.get_generic_args ()); - failure_flag = !ok; - } - - if (include_generic_args_flag) - { - std::string generics - = canonicalize_generic_args (seg.get_generic_args ()); - auto generic_segment - = CanonicalPath::new_seg (seg.get_node_id (), - seg.get_ident_segment ().as_string () - + "::" + generics); - result = result.append (generic_segment); - return; - } - - auto ident_segment - = CanonicalPath::new_seg (seg.get_node_id (), - seg.get_ident_segment ().as_string ()); - result = result.append (ident_segment); -} - -void -ResolveTypeToCanonicalPath::visit (AST::TypePathSegment &seg) -{ - if (seg.is_error ()) - { - failure_flag = true; - rust_error_at (seg.get_locus (), "segment has error: %s", - seg.as_string ().c_str ()); - return; - } - - CanonicalPath ident_seg - = CanonicalPath::new_seg (seg.get_node_id (), - seg.get_ident_segment ().as_string ()); - result = result.append (ident_seg); -} - -void -ResolveTypeToCanonicalPath::visit (AST::ReferenceType &ref) -{ - auto inner_type - = ResolveTypeToCanonicalPath::resolve (*ref.get_type_referenced ().get (), - include_generic_args_flag, - type_resolve_generic_args_flag); - - std::string segment_string ("&"); - if (ref.get_has_mut ()) - segment_string += "mut "; - - segment_string += inner_type.get (); - - auto ident_seg = CanonicalPath::new_seg (ref.get_node_id (), segment_string); - result = result.append (ident_seg); -} - // rust-ast-resolve-expr.h void @@ -799,39 +651,6 @@ ResolvePath::resolve_segments (CanonicalPath prefix, size_t offs, } } -// rust-ast-resolve-type.h - -void -ResolveType::visit (AST::ArrayType &type) -{ - type.get_elem_type ()->accept_vis (*this); - // FIXME - // the capacity expr can contain block-expr with functions but these should be - // folded via constexpr code - ResolveExpr::go (type.get_size_expr ().get (), type.get_node_id (), - CanonicalPath::create_empty (), - CanonicalPath::create_empty ()); -} - -void -ResolveType::visit (AST::TraitObjectTypeOneBound &type) -{ - NodeId bound_resolved_id - = ResolveTypeBound::go (&type.get_trait_bound (), type.get_node_id ()); - ok = bound_resolved_id != UNKNOWN_NODEID; -} - -void -ResolveType::visit (AST::TraitObjectType &type) -{ - ok = true; - for (auto &bound : type.get_type_param_bounds ()) - { - /* NodeId bound_resolved_id = */ - ResolveTypeBound::go (bound.get (), type.get_node_id ()); - } -} - // rust-ast-resolve-item.h void |