From 1ae13b3fdd02593581b8ccd374ea4971d473e9dc Mon Sep 17 00:00:00 2001 From: Roy Frostig Date: Thu, 22 Jul 2010 12:45:58 -0700 Subject: [PATCH] Source FIXME annotations for issue #81 and a correction to STMT_bind fmt. --- src/boot/fe/ast.ml | 2 +- src/boot/me/trans.ml | 5 ++++- src/lib/_vec.rs | 12 +++++++----- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/boot/fe/ast.ml b/src/boot/fe/ast.ml index 76e6e306195..390d944d8c2 100644 --- a/src/boot/fe/ast.ml +++ b/src/boot/fe/ast.ml @@ -1013,7 +1013,7 @@ and fmt_stmt_body (ff:Format.formatter) (s:stmt) : unit = | STMT_bind (dst, fn, arg_opts) -> fmt_lval ff dst; - fmt ff " = "; + fmt ff " = bind "; fmt_lval ff fn; fmt_atom_opts ff arg_opts; fmt ff ";"; diff --git a/src/boot/me/trans.ml b/src/boot/me/trans.ml index 07b22dca951..6ec88f997f8 100644 --- a/src/boot/me/trans.ml +++ b/src/boot/me/trans.ml @@ -3818,7 +3818,7 @@ let trans_visitor (* * NB: 'all_*_args', both self and callee, are always 4-tuples: * - * [out_ptr, task_ptr, [args], [indirect_args]] + * [out_ptr, task_ptr, indirect_args, ty_params, [args]] * * The first few bindings here just destructure those via GEP. * @@ -3833,6 +3833,9 @@ let trans_visitor get_element_ptr all_self_args_cell Abi.calltup_elt_ty_params in let callee_args_cell = + (* FIXME (issue #81): Once we've actually got proper ty_params, + * we should GEP dynamically here to get the args, since they may + * be aligned dynamically if they have parameterized type. *) get_element_ptr all_callee_args_cell Abi.calltup_elt_args in let self_indirect_args_cell = diff --git a/src/lib/_vec.rs b/src/lib/_vec.rs index decb09f8e08..c0555bf1b03 100644 --- a/src/lib/_vec.rs +++ b/src/lib/_vec.rs @@ -26,11 +26,13 @@ fn init_fn[T](&init_op[T] op, uint n_elts) -> vec[T] { } fn init_elt[T](&T t, uint n_elts) -> vec[T] { - // FIXME: should be: - // fn elt_op[X](X x, uint i) -> X { ret x; } - // auto inner = bind elt_op[T](t, _); - // ret init_fn[T](inner, n_elts); - // but this does not work presently. + /** + * FIXME (issue #81): should be: + * + * fn elt_op[T](T x, uint i) -> T { ret x; } + * let init_op[T] inner = bind elt_op[T](t, _); + * ret init_fn[T](inner, n_elts); + */ let vec[T] v = alloc[T](n_elts); let uint i = n_elts; while (i > uint(0)) {