return !error;
}
+
+ public override void get_used_variables (Collection<LocalVariable> collection) {
+ // require captured variables to be initialized
+ if (method.closure) {
+ method.get_captured_variables (collection);
+ }
+ }
}
local.captured = true;
block.captured = true;
analyzer.current_method.closure = true;
+ analyzer.current_method.add_captured_variable (local);
}
} else if (member is FormalParameter) {
var param = (FormalParameter) member;
Method? callback_method;
+ // only valid for closures
+ Gee.List<LocalVariable> captured_variables;
+
/**
* Creates a new method.
*
return params;
}
+
+ public void add_captured_variable (LocalVariable local) {
+ assert (this.closure);
+
+ if (captured_variables == null) {
+ captured_variables = new ArrayList<LocalVariable> ();
+ }
+ captured_variables.add (local);
+ }
+
+ public void get_captured_variables (Collection<LocalVariable> variables) {
+ if (captured_variables != null) {
+ foreach (var local in captured_variables) {
+ variables.add (local);
+ }
+ }
+ }
}
// vim:sw=8 noet