[][src]Enum qasmsim::error::QasmSimError

#[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>,
    },
}

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)

Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
UnknownError(String)

A generic unknown error.

InvalidToken

Found an invalid token at some position.

Fields of InvalidToken

source: &'src str

Line source.

lineno: usize

Line number.

startpos: usize

Position inside the line (0-based) where the invalid token starts.

endpos: Option<usize>

Position inside the line (0-based) where the invalid token ends.

token: Option<Tok>

Token found.

expected: Vec<String>

A list of expected tokens.

UnexpectedEOF

Found an unexpected end of file.

Fields of UnexpectedEOF

source: &'src str

Line source.

lineno: usize

Line number.

startpos: usize

Position inside the line (0-based) where the invalid token starts.

endpos: Option<usize>

Position inside the line (0-based) where the invalid token ends.

token: Option<Tok>

Token found.

expected: Vec<String>

A list of expected tokens.

UnexpectedToken

Found an unexpected token.

Fields of UnexpectedToken

source: &'src str

Line source.

lineno: usize

Line number.

startpos: usize

Position inside the line (0-based) where the invalid token starts.

endpos: Option<usize>

Position inside the line (0-based) where the invalid token ends.

token: Option<Tok>

Token found.

expected: Vec<String>

A list of expected tokens.

RedefinitionError

Found a redefinition of a register.

Fields of RedefinitionError

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.

LibraryNotFound

The unability of linking a library.

Fields of LibraryNotFound

source: &'src str

Line source.

libpath: String

Path to the library to be included.

lineno: usize

Line number.

IndexOutOfBounds

Use of register index that does not fit the register size.

Fields of IndexOutOfBounds

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.

SymbolNotFound

Use of an unknown/undeclared symbol.

Fields of SymbolNotFound

source: &'src str

Line source.

lineno: usize

Line number.

symbol_name: String

Name of the unknown symbol.

expected: QasmType

The expected type.

WrongNumberOfParameters

The attempt of applying an operation passing the wrong number of parameters.

Fields of WrongNumberOfParameters

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.

UndefinedGate

Use of a gate not previously defined.

Fields of UndefinedGate

source: &'src str

Line source.

lineno: usize

Line number.

symbol_name: String

Name of the unknown gate.

TypeMismatch

Found an unexpected type of value.

Fields of TypeMismatch

source: &'src str

Line source.

lineno: usize

Line number.

symbol_name: String

Name of the symbol with the incorrect type.

expected: QasmType

Expected type.

RegisterSizeMismatch

Attempt of applying an operation to different sizes registers.

Fields of RegisterSizeMismatch

source: &'src str

Line source.

lineno: usize

Line number.

symbol_name: String

Name of the operation.

sizes: Vec<usize>

Sizes of the different registers involved.

Trait Implementations

impl<'src> Clone for QasmSimError<'src>[src]

impl<'src> Debug for QasmSimError<'src>[src]

impl<'_> Display for QasmSimError<'_>[src]

impl<'src> Eq for QasmSimError<'src>[src]

impl<'_> Error for QasmSimError<'_>[src]

impl<'src> From<(&'src str, LinkerError)> for QasmSimError<'src>[src]

impl<'src> From<(&'src str, ParseError<Location, Tok, LexicalError<Location>>)> for QasmSimError<'src>[src]

impl<'src> From<(&'src str, RuntimeError)> for QasmSimError<'src>[src]

impl<'_> From<String> for QasmSimError<'_>[src]

impl<'src> Hash for QasmSimError<'src>[src]

impl<'src> PartialEq<QasmSimError<'src>> for QasmSimError<'src>[src]

impl<'src> StructuralEq for QasmSimError<'src>[src]

impl<'src> StructuralPartialEq for QasmSimError<'src>[src]

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

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,