about summary refs log tree commit diff
path: root/src/comp/syntax
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2011-07-28 17:22:59 +0000
committerGraydon Hoare <graydon@mozilla.com>2011-07-28 17:22:59 +0000
commitacac6abc8512971f56be7c12940c8016ae6e94ff (patch)
tree8f73d8814fcc53ce68fd23beca17e507b3a84f9f /src/comp/syntax
parent1836f59d9a769216161367cabe3269cb6c915cd7 (diff)
downloadrust-acac6abc8512971f56be7c12940c8016ae6e94ff.tar.gz
rust-acac6abc8512971f56be7c12940c8016ae6e94ff.zip
Parse, store and print type parameter kind constraints.
Diffstat (limited to 'src/comp/syntax')
-rw-r--r--src/comp/syntax/ast.rs2
-rw-r--r--src/comp/syntax/parse/parser.rs9
-rw-r--r--src/comp/syntax/print/pprust.rs4
3 files changed, 12 insertions, 3 deletions
diff --git a/src/comp/syntax/ast.rs b/src/comp/syntax/ast.rs
index 45be817f91a..d5d99a886aa 100644
--- a/src/comp/syntax/ast.rs
+++ b/src/comp/syntax/ast.rs
@@ -31,7 +31,7 @@ type def_id = {crate: crate_num, node: node_id};
 const local_crate: crate_num = 0;
 fn local_def(id: node_id) -> def_id { ret {crate: local_crate, node: id}; }
 
-type ty_param = ident;
+type ty_param = {ident: ident, kind: kind};
 
 tag def {
     def_fn(def_id, purity);
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index 4d8fe833559..79728fade13 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -1696,7 +1696,14 @@ fn parse_block_tail(p: &parser, lo: uint) -> ast::blk {
     ret spanned(lo, hi, bloc);
 }
 
-fn parse_ty_param(p: &parser) -> ast::ty_param { ret parse_ident(p); }
+fn parse_ty_param(p: &parser) -> ast::ty_param {
+    let k = alt p.peek() {
+      token::TILDE. { p.bump(); ast::kind_unique }
+      token::AT. { p.bump(); ast::kind_shared }
+      _ { ast::kind_pinned }
+    };
+    ret {ident: parse_ident(p), kind: k};
+}
 
 fn parse_ty_params(p: &parser) -> ast::ty_param[] {
     let ty_params: ast::ty_param[] = ~[];
diff --git a/src/comp/syntax/print/pprust.rs b/src/comp/syntax/print/pprust.rs
index 92510af42cf..db3586d9275 100644
--- a/src/comp/syntax/print/pprust.rs
+++ b/src/comp/syntax/print/pprust.rs
@@ -1149,7 +1149,9 @@ fn print_alias(s: &ps, m: ast::mode) {
 fn print_type_params(s: &ps, params: &ast::ty_param[]) {
     if ivec::len(params) > 0u {
         word(s.s, "[");
-        fn printParam(s: &ps, param: &ast::ty_param) { word(s.s, param); }
+        fn printParam(s: &ps, param: &ast::ty_param) {
+            word(s.s, param.ident);
+        }
         commasep(s, inconsistent, params, printParam);
         word(s.s, "]");
     }