Finalize moves-based-on-type implementation.
Changes: - Refactor move mode computation - Removes move mode arguments, unary move, capture clauses (though they still parse for backwards compatibility) - Simplify how moves are handled in trans - Fix a number of illegal copies that cropped up - Workaround for bug involving def-ids in params (see details below) Future work (I'll open bugs for these...): - Improve error messages for moves that are due to bindings - Add support for moving owned content like a.b.c to borrow check, test in trans (but I think it'll "just work") - Proper fix for def-ids in params Def ids in params: Move captures into a map instead of recomputing. This is a workaround for a larger bug having to do with the def-ids associated with ty_params, which are not always properly preserved when inlining. I am not sure of my preferred fix for the larger bug yet. This current fix removes the only code in trans that I know of which relies on ty_param def-ids, but feels fragile.
This commit is contained in:
@@ -173,8 +173,8 @@ pub fn find_meta_items_by_name(metas: &[@ast::meta_item], name: &str) ->
|
||||
* Returns true if a list of meta items contains another meta item. The
|
||||
* comparison is performed structurally.
|
||||
*/
|
||||
pub fn contains(haystack: ~[@ast::meta_item], needle: @ast::meta_item)
|
||||
-> bool {
|
||||
pub fn contains(haystack: &[@ast::meta_item],
|
||||
needle: @ast::meta_item) -> bool {
|
||||
for haystack.each |item| {
|
||||
if eq(*item, needle) { return true; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user