Closed
Description
Writing a csv reader using only peg:
Cargo.toml:
[package]
name = "peg-reader"
version = "0.1.0"
authors = ["Ewan Higgs <ewan_higgs@yahoo.co.uk>"]
[[bin]]
name = "pegreader"
[dependencies]
peg = "0.3.0"
src/pegreader.rs:
#![feature(plugin)]
#![plugin(peg_syntax_ext)]
use std::io::BufReader;
use std::io::BufRead;
use std::fs::File;
peg! parser(r#"
#[pub]
record -> Vec<String>
= field ** ","
field -> String
= "\"" f:([]* {match_str.to_string() }) "\"" { f }
/ f:([^,\n]* { match_str.to_string() }) [,\n] { f }
"#);
fn main() {
let fpath = ::std::env::args().nth(1).unwrap();
let f = File::open(fpath).unwrap();
let file = BufReader::new(&f);
let mut sum = 0;
for line in file.lines() {
let l = line.unwrap();
let rec = parser::record(&l).unwrap();
sum += rec.len();
}
println!("{}", sum);
}
#[test]
fn test_hello() {
assert_eq!(parser::record(r#"hello,","," ",world,"!""#).unwrap().len(), 5);
}
Yields the following ICE:
$ RUST_BACKTRACE=1 cargo test
Compiling peg-reader v0.1.0 (file:///Users/ehiggs/src/csv-game/rust/peg-reader)
error: internal compiler error: unexpected panic
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'index out of bounds: the len is 0 but the index is 0', ../src/libcollections/vec.rs:1362
stack backtrace:
1: 0x11118999a - std::sys::imp::backtrace::tracing::imp::write::he3d1bfbdbf113480
2: 0x11119975f - std::panicking::default_hook::{{closure}}::h575f1b40d2e88f07
3: 0x111196825 - std::panicking::default_hook::h3d5dccce8125d0cf
4: 0x111196f56 - std::panicking::rust_panic_with_hook::h00b81bb3dcbd51f2
5: 0x111196df4 - std::panicking::begin_panic::ha6a0d553db9869ff
6: 0x111196d12 - std::panicking::begin_panic_fmt::h24d113aee3ee4081
7: 0x111196c77 - rust_begin_unwind
8: 0x1111d9b00 - core::panicking::panic_fmt::he441b2ea2036b98a
9: 0x1111d9a78 - core::panicking::panic_bounds_check::h344fb76ff622c3e5
10: 0x10cf84e80 - <core::iter::Map<I, F> as core::iter::iterator::Iterator>::next::h820c95c1b3aa8208
11: 0x10cfa41f3 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::match_expr::hefe82ecad27ae537
12: 0x10cf9637f - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
13: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
14: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
15: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
16: 0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
17: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
18: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
19: 0x10cf96872 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
20: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
21: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
22: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
23: 0x10cfa5796 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::expr_into_pattern::h2f3f166d14a49580
24: 0x10cfec431 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
25: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
26: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
27: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
28: 0x10cfecf08 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::{{closure}}::hd672fe9a3991fc90
29: 0x10cf95de3 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
30: 0x10cf98f8e - rustc_mir::build::expr::stmt::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::stmt_expr::h2f8718954681358b
31: 0x10cf9926a - rustc_mir::build::expr::stmt::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::stmt_expr::h2f8718954681358b
32: 0x10cfec25a - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
33: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
34: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
35: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
36: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
37: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
38: 0x10cfa5796 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::expr_into_pattern::h2f3f166d14a49580
39: 0x10cfec431 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
40: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
41: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
42: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
43: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
44: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
45: 0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
46: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
47: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
48: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
49: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
50: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
51: 0x10cfa5796 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::expr_into_pattern::h2f3f166d14a49580
52: 0x10cfec431 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
53: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
54: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
55: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
56: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
57: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
58: 0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
59: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
60: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
61: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
62: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
63: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
64: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
65: 0x10cfa4b9c - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::match_expr::hefe82ecad27ae537
66: 0x10cf9637f - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
67: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
68: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
69: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
70: 0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
71: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
72: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
73: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
74: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
75: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
76: 0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
77: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
78: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
79: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
80: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
81: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
82: 0x10cfa5796 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::expr_into_pattern::h2f3f166d14a49580
83: 0x10cfec431 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
84: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
85: 0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
86: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
87: 0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
88: 0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
89: 0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
90: 0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
91: 0x10cf8c9fd - rustc_mir::build::Builder::args_and_body::hc6fc40bd82a1524e
92: 0x10cfc116e - <rustc_mir::mir_map::BuildMir<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_fn::hb919fc4d5273e06e
93: 0x10cfbb39f - <rustc_mir::mir_map::BuildMir<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item::h5f0bf930f7d30b20
94: 0x10cfb6e7f - rustc_mir::mir_map::build_mir_for_crate::h4bf661fe4fbb6129
95: 0x10cab8b82 - rustc_driver::driver::phase_3_run_analysis_passes::{{closure}}::hb062c53ab7b33bac
96: 0x10ca84616 - rustc_driver::driver::phase_3_run_analysis_passes::h016090d638ff1d7f
97: 0x10ca775b5 - rustc_driver::driver::compile_input::h21840cdf516c3ab1
98: 0x10caa1d39 - rustc_driver::run_compiler::h81a62653df4e7b03
99: 0x10c9e0d18 - std::panicking::try::do_call::h54deb93462da3a7f
100: 0x111199d1a - __rust_maybe_catch_panic
... <frames omitted>
error: Could not compile `peg-reader`.
To learn more, run the command again with --verbose.
Rustc version:
$ rustc --version --verbose
rustc 1.14.0-nightly (cae6ab1c4 2016-11-05)
binary: rustc
commit-hash: cae6ab1c458ade22b4c228fcd4195917c96e2465
commit-date: 2016-11-05
host: x86_64-apple-darwin
release: 1.14.0-nightly
LLVM version: 3.9
I wasn't sure if it should compile, but I didn't expect an ICE.