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
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)

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.

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.

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.

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.

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.

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.

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.

sizes: Vec<usize>

Sizes of the different registers involved.

Attempt of applying an operation to different sizes registers.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Formats the value using the given formatter. Read more

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Performs the conversion.

Performs the conversion.

Performs the conversion.

Performs the conversion.

Feeds this value into the given Hasher. Read more

Feeds a slice of this type into the given Hasher. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

Converts the given value to a String. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.