Enum qasmsim::error::QasmSimError [−][src]
#[non_exhaustive]
pub enum QasmSimError<'src> {
UnknownError(String),
InvalidToken {
source: &'src str,
lineno: usize,
startpos: usize,
endpos: Option<usize>,
token: Option<Tok>,
expected: Vec<String>,
},
UnexpectedEOF {
source: &'src str,
lineno: usize,
startpos: usize,
endpos: Option<usize>,
token: Option<Tok>,
expected: Vec<String>,
},
UnexpectedToken {
source: &'src str,
lineno: usize,
startpos: usize,
endpos: Option<usize>,
token: Option<Tok>,
expected: Vec<String>,
},
RedefinitionError {
source: &'src str,
symbol_name: String,
lineno: usize,
previous_lineno: usize,
},
LibraryNotFound {
source: &'src str,
libpath: String,
lineno: usize,
},
IndexOutOfBounds {
source: &'src str,
lineno: usize,
symbol_name: String,
index: usize,
size: usize,
},
SymbolNotFound {
source: &'src str,
lineno: usize,
symbol_name: String,
expected: QasmType,
},
WrongNumberOfParameters {
source: &'src str,
lineno: usize,
symbol_name: String,
are_registers: bool,
given: usize,
expected: usize,
},
UndefinedGate {
source: &'src str,
lineno: usize,
symbol_name: String,
},
TypeMismatch {
source: &'src str,
lineno: usize,
symbol_name: String,
expected: QasmType,
},
RegisterSizeMismatch {
source: &'src str,
lineno: usize,
symbol_name: String,
sizes: Vec<usize>,
},
}
Expand description
Types of errors in QasmSim. QasmSim errors contain information about the error and the location in the source code where the error happens.
QasmSimError
instances can be printed. They refer to the source code and
try to provide contextual information for fixing the problem.
Conversion between ParseError
, RuntimeError
and LinkerError
is
possible thanks to the trait From
is defined for the pair
(&'source str, T)
(see alias SrcAndErr
) for all the errors listed
above.
Examples
The error type of simulate()
is RuntimeError
.
RuntimeError
is a sourceless error in the sense it does not relate with
the concrete source code beyond the location in the AST at which the error
happens.
You can use map_err
for for capturing the error and converting it
into a QasmSimError
from its pairing with the source.
use qasmsim::{QasmSimError, parse_and_link, simulate};
let source = r#"
OPENQASM 2.0;
qreg q[2];
CX q[1], q[2]; // Notice we are indexing out of bounds here.
"#;
let program = parse_and_link(source)?;
let runtime_error = simulate(&program).expect_err("Index out of bounds");
let qasmsim_error = QasmSimError::from((source, runtime_error));
Variants (Non-exhaustive)
This enum is marked as non-exhaustive
UnknownError(String)
Tuple Fields
0: String
A generic unknown error.
InvalidToken
Fields
source: &'src str
Line source.
lineno: usize
Line number.
startpos: usize
Position inside the line (0-based) where the invalid token starts.
Found an invalid token at some position.
UnexpectedEOF
Fields
source: &'src str
Line source.
lineno: usize
Line number.
startpos: usize
Position inside the line (0-based) where the invalid token starts.
Found an unexpected end of file.
UnexpectedToken
Fields
source: &'src str
Line source.
lineno: usize
Line number.
startpos: usize
Position inside the line (0-based) where the invalid token starts.
Found an unexpected token.
RedefinitionError
Fields
source: &'src str
Line source.
symbol_name: String
Name of the register declared for second time.
lineno: usize
Line number.
previous_lineno: usize
Line number where the register was originally declared.
Found a redefinition of a register.
LibraryNotFound
Fields
source: &'src str
Line source.
libpath: String
Path to the library to be included.
lineno: usize
Line number.
The unability of linking a library.
IndexOutOfBounds
Fields
source: &'src str
Line source.
lineno: usize
Line number.
symbol_name: String
Name of the register being indexed.
index: usize
Index tried to access.
size: usize
Size of the register.
Use of register index that does not fit the register size.
SymbolNotFound
Fields
source: &'src str
Line source.
lineno: usize
Line number.
symbol_name: String
Name of the unknown symbol.
expected: QasmType
The expected type.
Use of an unknown/undeclared symbol.
WrongNumberOfParameters
Fields
source: &'src str
Line source.
lineno: usize
Line number.
symbol_name: String
Name of the operation.
are_registers: bool
Indicate if the parameters are registers or real values.
given: usize
The number of passed parameters.
expected: usize
The number of expected parameters.
The attempt of applying an operation passing the wrong number of parameters.
UndefinedGate
Fields
source: &'src str
Line source.
lineno: usize
Line number.
symbol_name: String
Name of the unknown gate.
Use of a gate not previously defined.
TypeMismatch
Fields
source: &'src str
Line source.
lineno: usize
Line number.
symbol_name: String
Name of the symbol with the incorrect type.
expected: QasmType
Expected type.
Found an unexpected type of value.
RegisterSizeMismatch
Fields
source: &'src str
Line source.
lineno: usize
Line number.
symbol_name: String
Name of the operation.
Attempt of applying an operation to different sizes registers.
Trait Implementations
Performs the conversion.
impl<'src> From<(&'src str, ParseError<Location, Tok, LexicalError<Location>>)> for QasmSimError<'src>
impl<'src> From<(&'src str, ParseError<Location, Tok, LexicalError<Location>>)> for QasmSimError<'src>
Performs the conversion.
Performs the conversion.
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
Auto Trait Implementations
impl<'src> RefUnwindSafe for QasmSimError<'src>
impl<'src> Send for QasmSimError<'src>
impl<'src> Sync for QasmSimError<'src>
impl<'src> Unpin for QasmSimError<'src>
impl<'src> UnwindSafe for QasmSimError<'src>
Blanket Implementations
Mutably borrows from an owned value. Read more