aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-07-02 16:27:39 -0700
committerGraydon Hoare <[email protected]>2010-07-02 16:27:39 -0700
commit8660ce50a134a74bc841f32e50eb1eab83f8b45b (patch)
treeaeb7795b09c1d2507198cfa8642ef797d685bc8f /src
parentFix bug in clone logic; was ignoring the mutability-strip step in later rule. (diff)
parentFix two bugs in tag patterns: 1. Look up the tag constructor function item us... (diff)
downloadrust-8660ce50a134a74bc841f32e50eb1eab83f8b45b.tar.xz
rust-8660ce50a134a74bc841f32e50eb1eab83f8b45b.zip
Merge branch 'master' of [email protected]:graydon/rust into exterior_and_mutable_types
Diffstat (limited to 'src')
-rw-r--r--src/Makefile3
-rw-r--r--src/boot/me/resolve.ml2
-rw-r--r--src/boot/me/semant.ml18
-rw-r--r--src/test/run-pass/generic-fn-twice.rs10
-rw-r--r--src/test/run-pass/generic-obj.rs2
5 files changed, 23 insertions, 12 deletions
diff --git a/src/Makefile b/src/Makefile
index bf11e98d..fa02a2a2 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -325,7 +325,7 @@ TEST_XFAILS_X86 := test/run-pass/mlist-cycle.rs \
test/run-pass/vec-slice.rs \
test/run-pass/fn-lval.rs \
test/run-pass/generic-fn-infer.rs \
- test/run-pass/generic-obj.rs \
+ test/run-pass/generic-fn-twice.rs \
test/run-pass/generic-recursive-tag.rs \
test/run-pass/mutable-alias-vec.rs \
test/run-pass/mutable-vec-drop.rs \
@@ -372,6 +372,7 @@ TEST_XFAILS_LLVM := $(addprefix test/run-pass/, \
generic-drop-glue.rs \
generic-exterior-box.rs \
generic-fn-infer.rs \
+ generic-fn-twice.rs \
generic-fn.rs \
generic-obj-with-derived-type.rs \
generic-obj.rs \
diff --git a/src/boot/me/resolve.ml b/src/boot/me/resolve.ml
index 5077d5ce..641df884 100644
--- a/src/boot/me/resolve.ml
+++ b/src/boot/me/resolve.ml
@@ -931,7 +931,7 @@ let pattern_resolving_visitor
Ast.PAT_tag (lval, pats) ->
let lval_nm = lval_to_name lval in
let lval_id = lval_base_id lval in
- let tag_ctor_id = lval_to_referent cx lval_id in
+ let tag_ctor_id = (lval_item cx lval).id in
if referent_is_item cx tag_ctor_id
(* FIXME (issue #76): we should actually check here that the
diff --git a/src/boot/me/semant.ml b/src/boot/me/semant.ml
index ea82e685..8d2ed8ac 100644
--- a/src/boot/me/semant.ml
+++ b/src/boot/me/semant.ml
@@ -432,15 +432,15 @@ let fn_output_ty (fn_ty:Ast.ty) : Ast.ty =
(* name of tag constructor function -> name for indexing in the ty_tag *)
let rec tag_ctor_name_to_tag_name (name:Ast.name) : Ast.name =
match name with
- Ast.NAME_base nb ->
- begin
- match nb with
- Ast.BASE_ident _ -> name
- | Ast.BASE_app (id, _) -> Ast.NAME_base (Ast.BASE_ident id)
- | _ ->
- bug () "tag_or_iso_ty_tup_by_name with non-tag-ctor name"
- end
- | Ast.NAME_ext (inner_name, _) -> tag_ctor_name_to_tag_name inner_name
+ Ast.NAME_base (Ast.BASE_ident _) -> name
+ | Ast.NAME_base (Ast.BASE_app (id, _)) ->
+ Ast.NAME_base (Ast.BASE_ident id)
+
+ | Ast.NAME_ext (_, Ast.COMP_ident id)
+ | Ast.NAME_ext (_, Ast.COMP_app (id, _)) ->
+ Ast.NAME_base (Ast.BASE_ident id)
+
+ | _ -> bug () "tag_or_iso_ty_tup_by_name with non-tag-ctor name"
;;
let tag_or_iso_ty_tup_by_name (ty:Ast.ty) (name:Ast.name) : Ast.ty_tup =
diff --git a/src/test/run-pass/generic-fn-twice.rs b/src/test/run-pass/generic-fn-twice.rs
new file mode 100644
index 00000000..0c6257f8
--- /dev/null
+++ b/src/test/run-pass/generic-fn-twice.rs
@@ -0,0 +1,10 @@
+// -*- rust -*-
+
+mod foomod {
+ fn foo[T]() {}
+}
+
+fn main() {
+ foomod.foo[int]();
+ foomod.foo[int]();
+}
diff --git a/src/test/run-pass/generic-obj.rs b/src/test/run-pass/generic-obj.rs
index 414aaff4..1ff7d180 100644
--- a/src/test/run-pass/generic-obj.rs
+++ b/src/test/run-pass/generic-obj.rs
@@ -11,7 +11,7 @@ obj buf[T](tup(T,T,T) data) {
}
}
- fn take(T t) {}
+ fn take(&T t) {}
}
fn main() {