-441f3f1f350b532707c48273d7f454cf1c4e959f
+ddfb845fad1f2e8b84383f262ed5ea5be7b3e35a
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
return TRAVERSE_CONTINUE;
}
+ const Named_object* nco = expr->named_constant();
+ if (nco != 0 && nco->package() == NULL)
+ {
+ const Named_constant *nc = nco->const_value();
+ Type::traverse(nc->type(), this);
+ return TRAVERSE_CONTINUE;
+ }
+
return TRAVERSE_CONTINUE;
}
if (type->is_void_type())
return TRAVERSE_SKIP_COMPONENTS;
+ // Skip the nil type, turns up in function bodies.
+ if (type->is_nil_type())
+ return TRAVERSE_SKIP_COMPONENTS;
+
// Skip abstract types. We should never see these in real code,
// only in things like const declarations.
if (type->is_abstract())
named_object()
{ return this->constant_; }
+ const Named_object*
+ named_object() const
+ { return this->constant_; }
+
// Check that the initializer does not refer to the constant itself.
void
check_for_init_loop();
|| (no->is_variable() && !no->var_value()->is_global()));
}
+const Named_object*
+Expression::named_constant() const
+{
+ if (this->classification() != EXPRESSION_CONST_REFERENCE)
+ return NULL;
+ const Const_expression* ce = static_cast<const Const_expression*>(this);
+ return ce->named_object();
+}
+
// Class Type_guard_expression.
// Traversal.
boolean_constant_value(bool* val) const
{ return this->do_boolean_constant_value(val); }
+ // If this is a const reference expression, return the named
+ // object to which the expression refers, otherwise return NULL.
+ const Named_object*
+ named_constant() const;
+
// This is called if the value of this expression is being
// discarded. This issues warnings about computed values being
// unused. This returns true if all is well, false if it issued an