diff options
| author | Joshua Yanovski <pythonesque@gmail.com> | 2013-10-28 19:22:42 -0700 |
|---|---|---|
| committer | Joshua Yanovski <pythonesque@gmail.com> | 2013-10-28 22:57:34 -0700 |
| commit | 01ab8542fbcfbea2cb0dcdc538e56a7167f70f51 (patch) | |
| tree | 3b25fae9af67f37473f301c3db91aa6ffbe62097 /src/libsyntax | |
| parent | dba60700804119f7e953e6b2b72ce4875c9d60cb (diff) | |
| download | rust-01ab8542fbcfbea2cb0dcdc538e56a7167f70f51.tar.gz rust-01ab8542fbcfbea2cb0dcdc538e56a7167f70f51.zip | |
Field identifiers now include specific spans (Closes #8263).
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/ext/build.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/fold.rs | 7 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 2 |
5 files changed, 11 insertions, 7 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 6647c4c811e..3467e1aaadc 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -471,11 +471,13 @@ pub struct Arm { #[deriving(Clone, Eq, Encodable, Decodable, IterBytes)] pub struct Field { - ident: Ident, + ident: SpannedIdent, expr: @Expr, span: Span, } +pub type SpannedIdent = Spanned<Ident>; + #[deriving(Clone, Eq, Encodable, Decodable, IterBytes)] pub enum BlockCheckMode { DefaultBlock, diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 4c3ab840b44..273ce180a5f 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -529,7 +529,7 @@ impl AstBuilder for @ExtCtxt { self.expr(b.span, ast::ExprBlock(b)) } fn field_imm(&self, span: Span, name: Ident, e: @ast::Expr) -> ast::Field { - ast::Field { ident: name, expr: e, span: span } + ast::Field { ident: respan(span, name), expr: e, span: span } } fn expr_struct(&self, span: Span, path: ast::Path, fields: ~[ast::Field]) -> @ast::Expr { self.expr(span, ast::ExprStruct(path, fields, None)) diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index e9ecb95c545..fddf674a846 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -10,7 +10,7 @@ use ast::*; use ast; -use codemap::{Span, Spanned}; +use codemap::{respan, Span, Spanned}; use parse::token; use opt_vec::OptVec; @@ -551,7 +551,7 @@ fn fold_struct_field<T:ast_fold>(f: @struct_field, fld: &T) -> @struct_field { fn fold_field_<T:ast_fold>(field: Field, folder: &T) -> Field { ast::Field { - ident: folder.fold_ident(field.ident), + ident: respan(field.ident.span, folder.fold_ident(field.ident.node)), expr: folder.fold_expr(field.expr), span: folder.new_span(field.span), } @@ -797,7 +797,8 @@ pub fn noop_fold_expr<T:ast_fold>(e: @ast::Expr, folder: &T) -> @ast::Expr { folder.fold_expr(er)) } ExprField(el, id, ref tys) => { - ExprField(folder.fold_expr(el), folder.fold_ident(id), + ExprField(folder.fold_expr(el), + folder.fold_ident(id), tys.map(|x| folder.fold_ty(x))) } ExprIndex(callee_id, el, er) => { diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 5a5e310e56f..8b399266676 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1549,10 +1549,11 @@ impl Parser { pub fn parse_field(&self) -> Field { let lo = self.span.lo; let i = self.parse_ident(); + let hi = self.last_span.hi; self.expect(&token::COLON); let e = self.parse_expr(); ast::Field { - ident: i, + ident: spanned(lo, hi, i), expr: e, span: mk_sp(lo, e.span.hi), } diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 12193411910..f3090c7dd16 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1111,7 +1111,7 @@ pub fn print_call_post(s: @ps, pub fn print_expr(s: @ps, expr: &ast::Expr) { fn print_field(s: @ps, field: &ast::Field) { ibox(s, indent_unit); - print_ident(s, field.ident); + print_ident(s, field.ident.node); word_space(s, ":"); print_expr(s, field.expr); end(s); |
