{
public:
Lower_parse_tree(Gogo* gogo, Named_object* function)
- : Traverse(traverse_constants
+ : Traverse(traverse_variables
+ | traverse_constants
| traverse_functions
| traverse_statements
| traverse_expressions),
{ }
int
+ variable(Named_object*);
+
+ int
constant(Named_object*, bool);
int
int iota_value_;
};
+// Lower variables. We handle variables specially to break loops in
+// which a variable initialization expression refers to itself. The
+// loop breaking is in lower_init_expression.
+
+int
+Lower_parse_tree::variable(Named_object* no)
+{
+ if (no->is_variable())
+ no->var_value()->lower_init_expression(this->gogo_, this->function_);
+ return TRAVERSE_CONTINUE;
+}
+
// Lower constants. We handle constants specially so that we can set
// the right value for the predeclared constant iota. This works in
// conjunction with the way we lower Const_expression objects.