From 84a56ed7cdba3d0751b7a95d09210f26bd3e44c6 Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Tue, 31 May 2011 16:27:39 -0700 Subject: [PATCH] Teach the compiler to understand yield and join, as well as using task as a type name. --- src/comp/front/ast.rs | 1 + src/comp/front/creader.rs | 1 + src/comp/front/parser.rs | 2 +- src/comp/middle/ty.rs | 1 + src/comp/middle/typeck.rs | 2 +- src/comp/middle/walk.rs | 1 + 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs index 55ef2211774e..a27de4b969ff 100644 --- a/src/comp/front/ast.rs +++ b/src/comp/front/ast.rs @@ -321,6 +321,7 @@ tag ty_ { ty_str; ty_box(mt); ty_vec(mt); + ty_task; ty_port(@ty); ty_chan(@ty); ty_tup(vec[mt]); diff --git a/src/comp/front/creader.rs b/src/comp/front/creader.rs index 442d6177fa3f..9ad6b51632a0 100644 --- a/src/comp/front/creader.rs +++ b/src/comp/front/creader.rs @@ -106,6 +106,7 @@ fn parse_ty(@pstate st, str_def sd) -> ty::t { case ('p') { ret ty::mk_param(st.tcx, parse_int(st) as uint); } case ('@') { ret ty::mk_box(st.tcx, parse_mt(st, sd)); } case ('V') { ret ty::mk_vec(st.tcx, parse_mt(st, sd)); } + case ('a') { ret ty::mk_task(st.tcx); } case ('P') { ret ty::mk_port(st.tcx, parse_ty(st, sd)); } case ('C') { ret ty::mk_chan(st.tcx, parse_ty(st, sd)); } case ('T') { diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index a8da7294928d..ecfd881a613e 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -208,7 +208,6 @@ fn bad_expr_word_table() -> std::map::hashmap[str, ()] { words.insert("const", ()); words.insert("log", ()); words.insert("log_err", ()); - words.insert("yield", ()); words.insert("tag", ()); words.insert("obj", ()); ret words; @@ -482,6 +481,7 @@ fn parse_ty(&parser p) -> @ast::ty { else if (eat_word(p, "float")) { t = ast::ty_float; } else if (eat_word(p, "str")) { t = ast::ty_str; } else if (eat_word(p, "char")) { t = ast::ty_char; } + else if (eat_word(p, "task")) { t = ast::ty_task; } else if (eat_word(p, "i8")) { t = ast::ty_machine(common::ty_i8); } else if (eat_word(p, "i16")) { t = ast::ty_machine(common::ty_i16); } else if (eat_word(p, "i32")) { t = ast::ty_machine(common::ty_i32); } diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs index 38283d1f7545..7dd1c5d28cba 100644 --- a/src/comp/middle/ty.rs +++ b/src/comp/middle/ty.rs @@ -772,6 +772,7 @@ fn fold_ty(&ctxt cx, ty_fold fld, t ty_0) -> t { case (ty_str) { /* no-op */ } case (ty_type) { /* no-op */ } case (ty_native) { /* no-op */ } + case (ty_task) { /* no-op */ } case (ty_box(?tm)) { ty = copy_cname(cx, mk_box(cx, rec(ty=fold_ty(cx, fld, tm.ty), mut=tm.mut)), ty); diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index d0bf818b8275..589105867bdb 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -284,7 +284,7 @@ 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_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 b57f3217c3f9..1cec06cd9f8f 100644 --- a/src/comp/middle/walk.rs +++ b/src/comp/middle/walk.rs @@ -154,6 +154,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_task) {} case (ast::ty_port(?t)) { walk_ty(v, t); } case (ast::ty_chan(?t)) { walk_ty(v, t); } case (ast::ty_tup(?mts)) {