about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/comp/middle/metadata.rs1
-rw-r--r--src/comp/middle/trans.rs3
-rw-r--r--src/comp/middle/ty.rs12
-rw-r--r--src/comp/middle/typeck.rs3
-rw-r--r--src/comp/middle/walk.rs1
5 files changed, 20 insertions, 0 deletions
diff --git a/src/comp/middle/metadata.rs b/src/comp/middle/metadata.rs
index bee1cd17ade..e2e60b80075 100644
--- a/src/comp/middle/metadata.rs
+++ b/src/comp/middle/metadata.rs
@@ -174,6 +174,7 @@ mod Encode {
                 w.write_char(']');
             }
             case (ty::ty_box(?mt)) {w.write_char('@'); enc_mt(w, cx, mt); }
+            case (ty::ty_ptr(?mt)) {w.write_char('*'); enc_mt(w, cx, mt); }
             case (ty::ty_vec(?mt)) {w.write_char('V'); enc_mt(w, cx, mt); }
             case (ty::ty_port(?t)) {w.write_char('P'); enc_ty(w, cx, t); }
             case (ty::ty_chan(?t)) {w.write_char('C'); enc_ty(w, cx, t); }
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index acabb056617..3712ed7475d 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -882,6 +882,9 @@ fn type_of_inner(&@crate_ctxt cx, &span sp, &ty::t t) -> TypeRef {
         case (ty::ty_vec(?mt)) {
             llty = T_ptr(T_vec(type_of_inner(cx, sp, mt.ty)));
         }
+        case (ty::ty_ptr(?mt)) {
+            llty = T_ptr(type_of_inner(cx, sp, mt.ty));
+        }
         case (ty::ty_port(?t)) {
             llty = T_ptr(T_port(type_of_inner(cx, sp, t)));
         }
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index e7c5001f824..d10cbd338ad 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -109,6 +109,7 @@ tag sty {
     ty_tag(ast::def_id, vec[t]);
     ty_box(mt);
     ty_vec(mt);
+    ty_ptr(mt);
     ty_port(t);
     ty_chan(t);
     ty_task;
@@ -436,6 +437,10 @@ fn mk_box(&ctxt cx, &mt tm) -> t {
     ret gen_ty(cx, ty_box(tm));
 }
 
+fn mk_ptr(&ctxt cx, &mt tm) -> t {
+    ret gen_ty(cx, ty_ptr(tm));
+}
+
 fn mk_imm_box(&ctxt cx, &t ty) -> t {
     ret mk_box(cx, rec(ty=ty, mut=ast::imm));
 }
@@ -1225,6 +1230,7 @@ fn hash_type_structure(&sty st) -> uint {
         case (ty_type) { ret 32u; }
         case (ty_native) { ret 33u; }
         case (ty_bot) { ret 34u; }
+        case (ty_ptr(?mt)) { ret hash_subty(35u, mt.ty); }
     }
 }
 
@@ -1356,6 +1362,12 @@ fn equal_type_structures(&sty a, &sty b) -> bool {
                 case (_) { ret false; }
             }
         }
+        case (ty_ptr(?mt_a)) {
+            alt (b) {
+                case (ty_ptr(?mt_b)) { ret equal_mt(mt_a, mt_b); }
+                case (_) { ret false; }
+            }
+        }
         case (ty_port(?t_a)) {
             alt (b) {
                 case (ty_port(?t_b)) { ret eq_ty(t_a, t_b); }
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index 551184b037d..e952908a6ba 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -284,6 +284,9 @@ fn ast_ty_to_ty(&ty::ctxt tcx, &ty_getter getter, &@ast::ty ast_ty) -> ty::t {
         case (ast::ty_vec(?mt)) {
             typ = ty::mk_vec(tcx, ast_mt_to_mt(tcx, getter, mt));
         }
+        case (ast::ty_ptr(?mt)) {
+            typ = ty::mk_ptr(tcx, ast_mt_to_mt(tcx, getter, mt));
+        }
         case (ast::ty_task) { typ = ty::mk_task(tcx); }
         case (ast::ty_port(?t)) {
             typ = ty::mk_port(tcx, ast_ty_to_ty(tcx, getter, t));
diff --git a/src/comp/middle/walk.rs b/src/comp/middle/walk.rs
index e08a27f2dba..76b027fd8f9 100644
--- a/src/comp/middle/walk.rs
+++ b/src/comp/middle/walk.rs
@@ -156,6 +156,7 @@ fn walk_ty(&ast_visitor v, @ast::ty t) {
         case (ast::ty_str) {}
         case (ast::ty_box(?mt)) { walk_ty(v, mt.ty); }
         case (ast::ty_vec(?mt)) { walk_ty(v, mt.ty); }
+        case (ast::ty_ptr(?mt)) { walk_ty(v, mt.ty); }
         case (ast::ty_task) {}
         case (ast::ty_port(?t)) { walk_ty(v, t); }
         case (ast::ty_chan(?t)) { walk_ty(v, t); }