librustc: Don't require `pub extern` to make extern functions visible
Reexport static methods on structs & enums.
Fix a small typo in a comment.
std: fix run tests when symlink is in the rust checkout path
syntax: move callee_id into the expr_ variants
auto merge of #6880 : thomaslee/rust/issue-6745, r=catamorphism

This fixes #6745, which itself relates to #4202. Slightly ham-fisted -- feel particularly funny about using the typeck phase to gather the base -> impl mapping, and the separate code paths for traits vs. "real" bases feels like it could be avoided -- but it seems to work.

As always, open to suggestions if there's a better way to accomplish what I'm trying to do.

@catamorphism r?
Add test for #6861
auto merge of #6885 : erickt/rust/move-callee_id, r=catamorphism

The `callee_id` in `ast::expr` in only used in a couple expression variants. This moves the `callee_id` into those branches to make it more clear when its should be used.

Also, it fixes a bug in a std::run test when there is a symlink in the path rust where was checked out.
Refactor some hashmap code into a new private function mangle()

Add new private hashmap function

    fn mangle(&mut self,
              k: K,
              not_found: &fn(&K) -> V,
              found: &fn(&K, &mut V)) -> uint

Rewrite find_or_insert() and find_or_insert_with() on top of mangle().

Also take the opportunity to change the return type of find_or_insert()
and find_or_insert_with() to &'a mut V. This fixes #6394.
Add new function hashmap.insert_or_update_with()

fn insert_or_update_with<'a>(&'a mut self,
                             k: K,
                             f: &fn(&K, &mut V)) -> &'a V
Swap return value of pipes::init Fixes #4501
auto merge of #6807 : catamorphism/rust/rustpkg-extern-mod, r=catamorphism

r? @graydon Addresses #5681
Mark run-pass/unit-like-struct-drop-run.rs as xfast-fail.
auto merge of #6891 : luqmana/rust/unit-struct-drop, r=catamorphism
auto merge of #6815 : kballard/rust/hashmap-insert_or_modify_with, r=erickt

`std::hashmap::HashMap.insert_or_update_with()` is basically the opposite
of `find_or_insert_with()`. It inserts a given key-value pair if the key
does not already exist, or replaces the existing value with the output
of the passed function if it does.

This is useful because replicating this with existing functionality is awkward, especially with the current borrow-checker. In my own project I have code that looks like

	if match map.find_mut(&key) {
		None => { true }
		Some(x) => { *x += 1; false }
	} {
		map.insert(key, 0);
	}

and it took several iterations to make it look this good. The new function turns this into

    map.insert_or_update_with(key, 0, |_,x| *x += 1);
auto merge of #6896 : nickdesaulniers/rust/issue4501, r=brson

review? @brson
Add a get_mut method to accompany the get method.
auto merge of #6867 : Dretch/rust/hashmap_get_mut, r=nikomatsakis
auto merge of #6866 : pcwalton/rust/pub-extern, r=brson

r? @brson
std: Fix search-and-replace typos