diff --git a/benches/frontend.rs b/benches/frontend.rs index f350e140..5261d178 100644 --- a/benches/frontend.rs +++ b/benches/frontend.rs @@ -18,7 +18,7 @@ fn parse_frontend_file(filename: &str) -> Expr { } fn compile_frontend_file(filename: &str) -> StandardProgram { - match parse_frontend_file(filename).compile().unwrap() { + match parse_frontend_file(filename).compile(false).unwrap() { // If we got back a valid program, assemble it and return the result. Ok(asm_code) => asm_code.assemble(CALL_STACK_SIZE).unwrap().into(), Err(asm_code) => asm_code.assemble(CALL_STACK_SIZE).unwrap(), diff --git a/docs/sage/asm/core/enum.CoreOp.html b/docs/sage/asm/core/enum.CoreOp.html index 3980bd86..253789e4 100644 --- a/docs/sage/asm/core/enum.CoreOp.html +++ b/docs/sage/asm/core/enum.CoreOp.html @@ -388,8 +388,8 @@
§

BitwiseNand

Fields

§src: Location
§dst: Location
§

BitwiseXor

Fields

§src: Location
§dst: Location
§

BitwiseOr

Fields

§src: Location
§dst: Location
§

BitwiseNor

Fields

§src: Location
§dst: Location
§

BitwiseAnd

Fields

§src: Location
§dst: Location
§

BitwiseNot(Location)

§

VecBitwiseAnd

Fields

§size: usize
§src: Location
§dst: Location
§

VecBitwiseOr

Fields

§size: usize
§src: Location
§dst: Location
§

VecBitwiseXor

Fields

§size: usize
§src: Location
§dst: Location
§

VecBitwiseNor

Fields

§size: usize
§src: Location
§dst: Location
§

VecBitwiseNand

Fields

§size: usize
§src: Location
§dst: Location
§

VecBitwiseNot

Fields

§size: usize
§dst: Location

Implementations§

source§

impl CoreOp

source

pub fn put_string(msg: impl ToString, dst: Output) -> Self

Put a string literal as UTF-8 to the output device.

source

pub fn push_string(msg: impl ToString) -> Self

Push a string literal as UTF-8 to the stack.

source

pub fn stack_alloc_string(dst: Location, text: impl ToString) -> Self

Allocate a string on the stack, and store its address in a destination register.

-

Trait Implementations§

source§

impl Clone for CoreOp

source§

fn clone(&self) -> CoreOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CoreOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CoreOp

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for CoreOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for CoreOp

source§

fn clone(&self) -> CoreOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CoreOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CoreOp

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for CoreOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for CoreOp

source§

fn cmp(&self, other: &CoreOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -398,8 +398,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for CoreOp

source§

fn partial_cmp(&self, other: &CoreOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for CoreOp

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CoreOp

source§

impl StructuralEq for CoreOp

source§

impl StructuralPartialEq for CoreOp

Auto Trait Implementations§

§

impl RefUnwindSafe for CoreOp

§

impl Send for CoreOp

§

impl Sync for CoreOp

§

impl Unpin for CoreOp

§

impl UnwindSafe for CoreOp

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for CoreOp

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CoreOp

source§

impl StructuralEq for CoreOp

source§

impl StructuralPartialEq for CoreOp

Auto Trait Implementations§

§

impl RefUnwindSafe for CoreOp

§

impl Send for CoreOp

§

impl Sync for CoreOp

§

impl Unpin for CoreOp

§

impl UnwindSafe for CoreOp

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -418,5 +418,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/asm/core/struct.CoreProgram.html b/docs/sage/asm/core/struct.CoreProgram.html index a81d1c11..49c9668e 100644 --- a/docs/sage/asm/core/struct.CoreProgram.html +++ b/docs/sage/asm/core/struct.CoreProgram.html @@ -21,9 +21,9 @@ The message is a message to be logged before the instructions. This tells some context about the instructions being logged. The i is the instruction number to start logging at. -This will log all instructions until the end of the program.
source§

impl Clone for CoreProgram

source§

fn clone(&self) -> CoreProgram

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CoreProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for CoreProgram

A default program is an empty program.

-
source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for CoreProgram

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<CoreProgram> for StandardProgram

source§

fn from(core: CoreProgram) -> Self

Converts to this type from the input type.
source§

impl Hash for CoreProgram

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +This will log all instructions until the end of the program.

source§

impl Clone for CoreProgram

source§

fn clone(&self) -> CoreProgram

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CoreProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for CoreProgram

A default program is an empty program.

+
source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for CoreProgram

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<CoreProgram> for StandardProgram

source§

fn from(core: CoreProgram) -> Self

Converts to this type from the input type.
source§

impl Hash for CoreProgram

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for CoreProgram

source§

fn cmp(&self, other: &CoreProgram) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -32,8 +32,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for CoreProgram

source§

fn partial_cmp(&self, other: &CoreProgram) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for CoreProgram

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CoreProgram

source§

impl StructuralEq for CoreProgram

source§

impl StructuralPartialEq for CoreProgram

Auto Trait Implementations§

§

impl RefUnwindSafe for CoreProgram

§

impl Send for CoreProgram

§

impl Sync for CoreProgram

§

impl Unpin for CoreProgram

§

impl UnwindSafe for CoreProgram

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for CoreProgram

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CoreProgram

source§

impl StructuralEq for CoreProgram

source§

impl StructuralPartialEq for CoreProgram

Auto Trait Implementations§

§

impl RefUnwindSafe for CoreProgram

§

impl Send for CoreProgram

§

impl Sync for CoreProgram

§

impl Unpin for CoreProgram

§

impl UnwindSafe for CoreProgram

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -52,5 +52,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/asm/enum.Error.html b/docs/sage/asm/enum.Error.html index 6f9a5c27..7d28360a 100644 --- a/docs/sage/asm/enum.Error.html +++ b/docs/sage/asm/enum.Error.html @@ -14,8 +14,8 @@
§

Unmatched(CoreOp, usize)

The given instruction did not have a matching “end”. This is used for If, Else, While, For, and Fn statements.

§

Unexpected(CoreOp, usize)

The given instruction was not expected, or cannot be used in this context.

-

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl From<Error> for Error

source§

fn from(e: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

Create an IR error from an assembly error.

-
source§

fn from(e: Error) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Error

source§

fn eq(&self, other: &Error) -> bool

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl From<Error> for Error

Create an IR error from an assembly error.

+
source§

fn from(e: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(e: Error) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Error

source§

fn eq(&self, other: &Error) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Error

source§

fn partial_cmp(&self, other: &Error) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= diff --git a/docs/sage/asm/globals/struct.Globals.html b/docs/sage/asm/globals/struct.Globals.html index 2ac53b25..246126d2 100644 --- a/docs/sage/asm/globals/struct.Globals.html +++ b/docs/sage/asm/globals/struct.Globals.html @@ -9,10 +9,10 @@
source

pub fn get_global_location(&mut self, name: &str) -> Option<Location>

Get the location of a global variable.

source

pub fn get_global_size(&self, name: &str) -> Option<usize>

Get the size of a global variable. This is the number of cells that the global variable occupies.

-

Trait Implementations§

source§

impl Clone for Globals

source§

fn clone(&self) -> Globals

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Globals

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Globals

source§

fn default() -> Self

Create a new empty Globals lookup.

-
source§

impl<'de> Deserialize<'de> for Globals

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Globals

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Serialize for Globals

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl Clone for Globals

source§

fn clone(&self) -> Globals

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Globals

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Globals

source§

fn default() -> Self

Create a new empty Globals lookup.

+
source§

impl<'de> Deserialize<'de> for Globals

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Globals

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Serialize for Globals

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Globals

§

impl Send for Globals

§

impl Sync for Globals

§

impl Unpin for Globals

§

impl UnwindSafe for Globals

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -31,5 +31,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/asm/location/enum.Location.html b/docs/sage/asm/location/enum.Location.html index 6cd2bb1f..efcd1865 100644 --- a/docs/sage/asm/location/enum.Location.html +++ b/docs/sage/asm/location/enum.Location.html @@ -14,8 +14,8 @@

Implementations§

source§

impl Location

source

pub fn offset(&self, offset: isize) -> Self

Get the location offset by a constant number of cells from a starting location. For example, Offset(Address(8), -2) is equivalent to Address(6).

source

pub fn deref(&self) -> Self

Get the location of the value pointed to by this location.

-

Trait Implementations§

source§

impl Clone for Location

source§

fn clone(&self) -> Location

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Location

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Location

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Location

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Location

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for Location

source§

fn clone(&self) -> Location

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Location

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Location

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Location

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Location

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Location

source§

fn cmp(&self, other: &Location) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -24,8 +24,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Location

source§

fn partial_cmp(&self, other: &Location) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for Location

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Location

source§

impl StructuralEq for Location

source§

impl StructuralPartialEq for Location

Auto Trait Implementations§

§

impl RefUnwindSafe for Location

§

impl Send for Location

§

impl Sync for Location

§

impl Unpin for Location

§

impl UnwindSafe for Location

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for Location

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Location

source§

impl StructuralEq for Location

source§

impl StructuralPartialEq for Location

Auto Trait Implementations§

§

impl RefUnwindSafe for Location

§

impl Send for Location

§

impl Sync for Location

§

impl Unpin for Location

§

impl UnwindSafe for Location

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -44,5 +44,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/asm/std/enum.StandardOp.html b/docs/sage/asm/std/enum.StandardOp.html index 9dfa2e1b..b6c9cb5c 100644 --- a/docs/sage/asm/std/enum.StandardOp.html +++ b/docs/sage/asm/std/enum.StandardOp.html @@ -186,13 +186,13 @@
§

VecACos

Fields

§dst: Location
§size: usize

Perform a SIMD floating point inverse cosine operation.

§

VecATan

Fields

§dst: Location
§size: usize

Perform a SIMD floating point inverse tangent operation.

§

VecGez

Fields

§src: Location
§dst: Location
§size: usize

Perform a SIMD floating point greater than or equal to zero operation.

-

Trait Implementations§

source§

impl Clone for StandardOp

source§

fn clone(&self) -> StandardOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StandardOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for StandardOp

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for StandardOp

source§

fn eq(&self, other: &StandardOp) -> bool

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Clone for StandardOp

source§

fn clone(&self) -> StandardOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StandardOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for StandardOp

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for StandardOp

source§

fn eq(&self, other: &StandardOp) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for StandardOp

source§

fn partial_cmp(&self, other: &StandardOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for StandardOp

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for StandardOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for StandardOp

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for StandardOp

Auto Trait Implementations§

§

impl RefUnwindSafe for StandardOp

§

impl Send for StandardOp

§

impl Sync for StandardOp

§

impl Unpin for StandardOp

§

impl UnwindSafe for StandardOp

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -211,5 +211,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/asm/std/struct.StandardProgram.html b/docs/sage/asm/std/struct.StandardProgram.html index 007ed469..ba07d00b 100644 --- a/docs/sage/asm/std/struct.StandardProgram.html +++ b/docs/sage/asm/std/struct.StandardProgram.html @@ -25,13 +25,13 @@ context about the instructions being logged. The i is the instruction number to start logging at. This will log all instructions until the end of the program.
source§

impl Clone for StandardProgram

source§

fn clone(&self) -> StandardProgram

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StandardProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for StandardProgram

A default program is an empty program.

-
source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for StandardProgram

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<CoreProgram> for StandardProgram

source§

fn from(core: CoreProgram) -> Self

Converts to this type from the input type.
source§

impl PartialEq for StandardProgram

source§

fn eq(&self, other: &StandardProgram) -> bool

This method tests for self and other values to be equal, and is used +
source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for StandardProgram

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<CoreProgram> for StandardProgram

source§

fn from(core: CoreProgram) -> Self

Converts to this type from the input type.
source§

impl PartialEq for StandardProgram

source§

fn eq(&self, other: &StandardProgram) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for StandardProgram

source§

fn partial_cmp(&self, other: &StandardProgram) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for StandardProgram

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for StandardProgram

Auto Trait Implementations§

§

impl RefUnwindSafe for StandardProgram

§

impl Send for StandardProgram

§

impl Sync for StandardProgram

§

impl Unpin for StandardProgram

§

impl UnwindSafe for StandardProgram

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for StandardProgram

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for StandardProgram

Auto Trait Implementations§

§

impl RefUnwindSafe for StandardProgram

§

impl Send for StandardProgram

§

impl Sync for StandardProgram

§

impl Unpin for StandardProgram

§

impl UnwindSafe for StandardProgram

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -50,5 +50,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/frontend/fn.parse.html b/docs/sage/frontend/fn.parse.html index 0b00525c..5dd66246 100644 --- a/docs/sage/frontend/fn.parse.html +++ b/docs/sage/frontend/fn.parse.html @@ -1,5 +1,5 @@ parse in sage::frontend - Rust -

Function sage::frontend::parse

source ·
pub fn parse(
+    

Function sage::frontend::parse

source ·
pub fn parse(
     input: impl ToString,
     filename: Option<&str>,
     include_builtins: bool,
diff --git a/docs/sage/frontend/fn.parse_module.html b/docs/sage/frontend/fn.parse_module.html
index 095986e4..51e838aa 100644
--- a/docs/sage/frontend/fn.parse_module.html
+++ b/docs/sage/frontend/fn.parse_module.html
@@ -1,2 +1,6 @@
 parse_module in sage::frontend - Rust
-    

Function sage::frontend::parse_module

source ·
pub fn parse_module(name: &str, input: &str) -> Result<Declaration, String>
\ No newline at end of file +

Function sage::frontend::parse_module

source ·
pub fn parse_module(
+    name: &str,
+    input: &str,
+    checked: bool
+) -> Result<Declaration, String>
\ No newline at end of file diff --git a/docs/sage/frontend/index.html b/docs/sage/frontend/index.html index 225005f7..3195da4c 100644 --- a/docs/sage/frontend/index.html +++ b/docs/sage/frontend/index.html @@ -1,2 +1,2 @@ sage::frontend - Rust -
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/sage/lir/enum.Annotation.html b/docs/sage/lir/enum.Annotation.html index fc869b9c..7eeac744 100644 --- a/docs/sage/lir/enum.Annotation.html +++ b/docs/sage/lir/enum.Annotation.html @@ -31,8 +31,8 @@
source

pub fn is_dead_code(&self) -> bool

Is this dead code?

source

pub fn is_compiler_generated(&self) -> bool

Is this compiler-generated?

source

pub fn is_temporary(&self) -> bool

Is this a temporary?

-

Trait Implementations§

source§

impl BitOr for Annotation

§

type Output = Annotation

The resulting type after applying the | operator.
source§

fn bitor(self, rhs: Self) -> Self::Output

Performs the | operation. Read more
source§

impl BitOrAssign for Annotation

source§

fn bitor_assign(&mut self, rhs: Self)

Performs the |= operation. Read more
source§

impl Clone for Annotation

source§

fn clone(&self) -> Annotation

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Annotation

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Annotation

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl From<SourceCodeLocation> for Annotation

source§

fn from(value: SourceCodeLocation) -> Self

Converts to this type from the input type.
source§

impl Hash for Annotation

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl BitOr for Annotation

§

type Output = Annotation

The resulting type after applying the | operator.
source§

fn bitor(self, rhs: Self) -> Self::Output

Performs the | operation. Read more
source§

impl BitOrAssign for Annotation

source§

fn bitor_assign(&mut self, rhs: Self)

Performs the |= operation. Read more
source§

impl Clone for Annotation

source§

fn clone(&self) -> Annotation

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Annotation

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Annotation

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl From<SourceCodeLocation> for Annotation

source§

fn from(value: SourceCodeLocation) -> Self

Converts to this type from the input type.
source§

impl Hash for Annotation

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Annotation

source§

fn cmp(&self, other: &Annotation) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -41,8 +41,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Annotation

source§

fn partial_cmp(&self, other: &Annotation) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for Annotation

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Annotation

source§

impl StructuralEq for Annotation

source§

impl StructuralPartialEq for Annotation

Auto Trait Implementations§

§

impl RefUnwindSafe for Annotation

§

impl Send for Annotation

§

impl Sync for Annotation

§

impl Unpin for Annotation

§

impl UnwindSafe for Annotation

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for Annotation

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Annotation

source§

impl StructuralEq for Annotation

source§

impl StructuralPartialEq for Annotation

Auto Trait Implementations§

§

impl RefUnwindSafe for Annotation

§

impl Send for Annotation

§

impl Sync for Annotation

§

impl Unpin for Annotation

§

impl UnwindSafe for Annotation

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -60,5 +60,5 @@ otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/enum.Arithmetic.html b/docs/sage/lir/enum.Arithmetic.html index 72224e56..df60db6f 100644 --- a/docs/sage/lir/enum.Arithmetic.html +++ b/docs/sage/lir/enum.Arithmetic.html @@ -34,7 +34,7 @@ lhs: &Expr, rhs: &Expr, env: &Env -) -> Result<bool, Error>
Checks if the operation can be applied to the given expressions.
source§

impl Clone for Arithmetic

source§

fn clone(&self) -> Arithmetic

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Arithmetic

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Arithmetic

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Copy for Arithmetic

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +) -> Result<bool, Error>

Checks if the operation can be applied to the given expressions.
source§

impl Clone for Arithmetic

source§

fn clone(&self) -> Arithmetic

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Arithmetic

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Arithmetic

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Copy for Arithmetic

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/sage/lir/enum.ConstExpr.html b/docs/sage/lir/enum.ConstExpr.html index cf412e43..7a7d49f8 100644 --- a/docs/sage/lir/enum.ConstExpr.html +++ b/docs/sage/lir/enum.ConstExpr.html @@ -1,4 +1,4 @@ -ConstExpr in sage::lir - Rust +ConstExpr in sage::lir - Rust

Enum sage::lir::ConstExpr

source ·
pub enum ConstExpr {
 
Show 30 variants Annotated(Box<Self>, Annotation), Declare(Box<Declaration>, Box<Self>), @@ -62,43 +62,46 @@
§

Monomorphize(Box<Self>, Vec<Type>)

Monomorphize a constant expression with some type arguments.

§

Template(Vec<(String, Option<Type>)>, Box<Self>)

§

Member(Box<Self>, Box<Self>)

Get an attribute of a constant expression.

§

As(Box<Self>, Type)

Cast a constant expression to another type.

-

Implementations§

source§

impl ConstExpr

source

pub fn monomorphize(self, ty_args: Vec<Type>) -> Self

source

pub fn equals(&self, other: &Self, env: &Env) -> bool

source

pub fn template(&self, params: Vec<(String, Option<Type>)>) -> Self

source

pub fn var(var: impl ToString) -> Self

Evaluate a variable in the current scope.

+

Implementations§

source§

impl ConstExpr

source

pub fn monomorphize(self, ty_args: Vec<Type>) -> Self

source

pub fn equals(&self, other: &Self, env: &Env) -> bool

source

pub fn template(&self, params: Vec<(String, Option<Type>)>) -> Self

source

pub fn var(var: impl ToString) -> Self

Evaluate a variable in the current scope.

source

pub fn proc( common_name: Option<String>, args: Vec<(String, Mutability, Type)>, ret: Type, body: impl Into<Expr> ) -> Self

Construct a procedure.

-
source

pub fn with(&self, older_decls: impl Into<Declaration>) -> Self

Return this expression, but with a given declaration in scope.

-
source

pub fn annotate(self, annotation: Annotation) -> Self

Annotate this constant expression with a source code location.

-
source

pub fn app(self, args: Vec<Expr>) -> Expr

Apply this procedure or builtin to a list of expressions at runtime.

-
source

pub fn eval(self, env: &Env) -> Result<Self, Error>

Evaluate this constant expression at compile time, +

source

pub fn hard_with(&self, older_decls: impl Into<Declaration>) -> Self

source

pub fn with(&self, older_decls: impl Into<Declaration>) -> Self

Return this expression, but with a given declaration in scope.

+
source

pub fn annotate(self, annotation: Annotation) -> Self

Annotate this constant expression with a source code location.

+
source

pub fn app(self, args: Vec<Expr>) -> Expr

Apply this procedure or builtin to a list of expressions at runtime.

+
source

pub fn eval(self, env: &Env) -> Result<Self, Error>

Evaluate this constant expression at compile time, and get the result.

-
source

pub fn as_type(self, t: Type) -> Self

Cast an expression as another type.

-
source

pub fn field(self, field: ConstExpr) -> Self

Get a field from a structure, union, or tuple.

+
source

pub fn as_type(self, t: Type) -> Self

Cast an expression as another type.

+
source

pub fn field(self, field: ConstExpr) -> Self

Get a field from a structure, union, or tuple.

For tuples, use an Int constant expression to access the nth field (zero indexed). For unions or structures, use a Symbol constant expression to access the field.

-
source

pub fn as_int(self, env: &Env) -> Result<i64, Error>

Try to get this constant expression as an integer.

-
source

pub fn as_char(self, env: &Env) -> Result<char, Error>

Try to get this constant expression as a character.

-
source

pub fn as_float(self, env: &Env) -> Result<f64, Error>

Try to get this constant expression as a float.

-
source

pub fn as_bool(self, env: &Env) -> Result<bool, Error>

Try to get this constant expression as a boolean value.

-
source

pub fn as_symbol(self, env: &Env) -> Result<String, Error>

Try to get this constant expression as a symbol (like in LISP).

-

Trait Implementations§

source§

impl Clone for ConstExpr

source§

fn clone(&self) -> ConstExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Compile for ConstExpr

Compile a constant expression.

-
source

pub fn as_int(self, env: &Env) -> Result<i64, Error>

Try to get this constant expression as an integer.

+
source

pub fn as_char(self, env: &Env) -> Result<char, Error>

Try to get this constant expression as a character.

+
source

pub fn as_float(self, env: &Env) -> Result<f64, Error>

Try to get this constant expression as a float.

+
source

pub fn as_bool(self, env: &Env) -> Result<bool, Error>

Try to get this constant expression as a boolean value.

+
source

pub fn as_symbol(self, env: &Env) -> Result<String, Error>

Try to get this constant expression as a symbol (like in LISP).

+

Trait Implementations§

source§

impl Clone for ConstExpr

source§

fn clone(&self) -> ConstExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Compile for ConstExpr

Compile a constant expression.

+
source§

fn compile_expr( self, env: &mut Env, output: &mut dyn AssemblyProgram -) -> Result<(), Error>

source§

fn compile(self) -> Result<Result<CoreProgram, StandardProgram>, Error>
where - Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for ConstExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for ConstExpr

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for ConstExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ConstExpr> for Expr

source§

fn from(c: ConstExpr) -> Self

Converts to this type from the input type.
source§

impl From<PolyProcedure> for ConstExpr

source§

fn from(value: PolyProcedure) -> Self

Converts to this type from the input type.
source§

impl From<Procedure> for ConstExpr

source§

fn from(value: Procedure) -> Self

Converts to this type from the input type.
source§

impl From<Type> for ConstExpr

source§

fn from(value: Type) -> Self

Converts to this type from the input type.
source§

impl GetType for ConstExpr

source§

fn get_type_checked(&self, env: &Env, i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check -recursion depth to prevent a possible stack overflow.
source§

fn substitute(&mut self, name: &str, substitution: &Type)

Substitute a type for a given name in the environment.
source§

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.
source§

fn substitute_types(&mut self, names: &[String], types: &[Type])

source§

impl Hash for ConstExpr

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +) -> Result<(), Error>

source§

fn compile( + self, + core: bool +) -> Result<Result<CoreProgram, StandardProgram>, Error>
where + Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for ConstExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for ConstExpr

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for ConstExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ConstExpr> for Expr

source§

fn from(c: ConstExpr) -> Self

Converts to this type from the input type.
source§

impl From<PolyProcedure> for ConstExpr

source§

fn from(value: PolyProcedure) -> Self

Converts to this type from the input type.
source§

impl From<Procedure> for ConstExpr

source§

fn from(value: Procedure) -> Self

Converts to this type from the input type.
source§

impl From<Type> for ConstExpr

source§

fn from(value: Type) -> Self

Converts to this type from the input type.
source§

impl GetType for ConstExpr

source§

fn get_type_checked(&self, env: &Env, i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check +recursion depth to prevent a possible stack overflow.
source§

fn substitute(&mut self, name: &str, substitution: &Type)

Substitute a type for a given name in the environment.
source§

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.
source§

fn substitute_types(&mut self, names: &[String], types: &[Type])

source§

impl Hash for ConstExpr

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl PartialEq for ConstExpr

source§

fn eq(&self, other: &ConstExpr) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for ConstExpr

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Simplify for ConstExpr

source§

fn simplify_checked(self, env: &Env, i: usize) -> Result<Self, Error>

Simplify an expression while maintaining structural equality, but limit +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for ConstExpr

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Simplify for ConstExpr

source§

fn simplify_checked(self, env: &Env, i: usize) -> Result<Self, Error>

Simplify an expression while maintaining structural equality, but limit the number of recursive calls to prevent stack overflow. i is a -counter to prevent infinite recursion.
source§

fn simplify(self, env: &Env) -> Result<Self, Error>

Simplify an expression while maintaining structural equality.
source§

impl TypeCheck for ConstExpr

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for ConstExpr

source§

impl Send for ConstExpr

source§

impl StructuralPartialEq for ConstExpr

source§

impl Sync for ConstExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +counter to prevent infinite recursion.

source§

fn simplify(self, env: &Env) -> Result<Self, Error>

Simplify an expression while maintaining structural equality.
source§

impl TypeCheck for ConstExpr

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for ConstExpr

source§

impl Send for ConstExpr

source§

impl StructuralPartialEq for ConstExpr

source§

impl Sync for ConstExpr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -120,5 +123,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/enum.Declaration.html b/docs/sage/lir/enum.Declaration.html index 86b92188..8a509024 100644 --- a/docs/sage/lir/enum.Declaration.html +++ b/docs/sage/lir/enum.Declaration.html @@ -10,7 +10,7 @@ ExternProc(String, FFIProcedure), Impl(Type, Vec<(String, ConstExpr)>), Many(Arc<Vec<Declaration>>), - Module(String, Arc<Vec<Declaration>>), + Module(String, Arc<Vec<Declaration>>, bool, usize), FromImport { module: ConstExpr, names: Vec<(String, Option<String>)>, @@ -27,29 +27,33 @@
§

ExternProc(String, FFIProcedure)

A foreign function declaration.

§

Impl(Type, Vec<(String, ConstExpr)>)

Declare associated constants and procedures for a type.

§

Many(Arc<Vec<Declaration>>)

Many declarations.

-
§

Module(String, Arc<Vec<Declaration>>)

Declare a module

+
§

Module(String, Arc<Vec<Declaration>>, bool, usize)

Declare a module

Do NOT instantiate this directly: use the Declaration::module method. This will redistribute the declarations to make sure everything is in-order internally to be imported/exported.

§

FromImport

Fields

§module: ConstExpr

Import an element from a module.

-
§

FromImportAll(ConstExpr)

Implementations§

source§

impl Declaration

source

pub fn many(decls: impl Into<Vec<Self>>) -> Self

Create a collection of declarations

-
source

pub fn module(name: impl ToString, decls: impl Into<Vec<Self>>) -> Self

Create a module with a given name and a list of declarations

-

Trait Implementations§

source§

impl<T> Add<T> for Declaration
where - T: Into<Declaration>,

§

type Output = Declaration

The resulting type after applying the + operator.
source§

fn add(self, other: T) -> Self::Output

Performs the + operation. Read more
source§

impl<T> AddAssign<T> for Declaration
where - T: Into<Declaration>,

source§

fn add_assign(&mut self, other: T)

Performs the += operation. Read more
source§

impl Clone for Declaration

source§

fn clone(&self) -> Declaration

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Declaration

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Declaration

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Declaration

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl From<(&str, ConstExpr)> for Declaration

source§

fn from((name, proc): (&str, ConstExpr)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Expr)> for Declaration

source§

fn from((name, expr): (&str, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, FFIProcedure)> for Declaration

source§

fn from((name, proc): (&str, FFIProcedure)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Mutability, Expr)> for Declaration

source§

fn from((name, mutability, expr): (&str, Mutability, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Mutability, Option<Type>, Expr)> for Declaration

§

FromImportAll(ConstExpr)

Implementations§

source§

impl Declaration

source

pub fn many(decls: impl Into<Vec<Self>>) -> Self

Create a collection of declarations

+
source

pub fn module( + name: impl ToString, + decls: impl Into<Vec<Self>>, + checked: bool +) -> Self

Create a module with a given name and a list of declarations, and whether or not it is checked.

+

Trait Implementations§

source§

impl<T> Add<T> for Declaration
where + T: Into<Declaration>,

§

type Output = Declaration

The resulting type after applying the + operator.
source§

fn add(self, other: T) -> Self::Output

Performs the + operation. Read more
source§

impl<T> AddAssign<T> for Declaration
where + T: Into<Declaration>,

source§

fn add_assign(&mut self, other: T)

Performs the += operation. Read more
source§

impl Clone for Declaration

source§

fn clone(&self) -> Declaration

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Declaration

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Declaration

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Declaration

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl From<(&str, ConstExpr)> for Declaration

source§

fn from((name, proc): (&str, ConstExpr)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Expr)> for Declaration

source§

fn from((name, expr): (&str, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, FFIProcedure)> for Declaration

source§

fn from((name, proc): (&str, FFIProcedure)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Mutability, Expr)> for Declaration

source§

fn from((name, mutability, expr): (&str, Mutability, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Mutability, Option<Type>, Expr)> for Declaration

source§

fn from( (name, mutability, ty, expr): (&str, Mutability, Option<Type>, Expr) -) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Mutability, Type, Expr)> for Declaration

source§

fn from((name, mutability, ty, expr): (&str, Mutability, Type, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, PolyProcedure)> for Declaration

source§

fn from((name, proc): (&str, PolyProcedure)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Procedure)> for Declaration

source§

fn from((name, proc): (&str, Procedure)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Type)> for Declaration

source§

fn from((name, expr): (&str, Type)) -> Self

Converts to this type from the input type.
source§

impl From<(Pattern, Expr)> for Declaration

source§

fn from((pat, expr): (Pattern, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, ConstExpr)> for Declaration

source§

fn from((name, expr): (String, ConstExpr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Expr)> for Declaration

source§

fn from((name, expr): (String, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, FFIProcedure)> for Declaration

source§

fn from((name, proc): (String, FFIProcedure)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Mutability, Expr)> for Declaration

source§

fn from((name, mutability, expr): (String, Mutability, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Mutability, Option<Type>, Expr)> for Declaration

source§

fn from( +) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Mutability, Type, Expr)> for Declaration

source§

fn from((name, mutability, ty, expr): (&str, Mutability, Type, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, PolyProcedure)> for Declaration

source§

fn from((name, proc): (&str, PolyProcedure)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Procedure)> for Declaration

source§

fn from((name, proc): (&str, Procedure)) -> Self

Converts to this type from the input type.
source§

impl From<(&str, Type)> for Declaration

source§

fn from((name, expr): (&str, Type)) -> Self

Converts to this type from the input type.
source§

impl From<(Pattern, Expr)> for Declaration

source§

fn from((pat, expr): (Pattern, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, ConstExpr)> for Declaration

source§

fn from((name, expr): (String, ConstExpr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Expr)> for Declaration

source§

fn from((name, expr): (String, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, FFIProcedure)> for Declaration

source§

fn from((name, proc): (String, FFIProcedure)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Mutability, Expr)> for Declaration

source§

fn from((name, mutability, expr): (String, Mutability, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Mutability, Option<Type>, Expr)> for Declaration

source§

fn from( (name, mutability, ty, expr): (String, Mutability, Option<Type>, Expr) -) -> Self

Converts to this type from the input type.
source§

impl From<(String, Mutability, Type, Expr)> for Declaration

source§

fn from((name, mutability, ty, expr): (String, Mutability, Type, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, PolyProcedure)> for Declaration

source§

fn from((name, proc): (String, PolyProcedure)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Procedure)> for Declaration

source§

fn from((name, proc): (String, Procedure)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Type)> for Declaration

source§

fn from((name, ty): (String, Type)) -> Self

Converts to this type from the input type.
source§

impl<K, V> From<BTreeMap<K, V>> for Declaration

source§

fn from(bt: BTreeMap<K, V>) -> Self

Converts to this type from the input type.
source§

impl From<Box<Declaration>> for Declaration

source§

fn from(x: Box<Self>) -> Self

Converts to this type from the input type.
source§

impl<T> From<Vec<T>> for Declaration
where - T: Into<Declaration>,

source§

fn from(decls: Vec<T>) -> Self

Converts to this type from the input type.
source§

impl Hash for Declaration

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +) -> Self

Converts to this type from the input type.
source§

impl From<(String, Mutability, Type, Expr)> for Declaration

source§

fn from((name, mutability, ty, expr): (String, Mutability, Type, Expr)) -> Self

Converts to this type from the input type.
source§

impl From<(String, PolyProcedure)> for Declaration

source§

fn from((name, proc): (String, PolyProcedure)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Procedure)> for Declaration

source§

fn from((name, proc): (String, Procedure)) -> Self

Converts to this type from the input type.
source§

impl From<(String, Type)> for Declaration

source§

fn from((name, ty): (String, Type)) -> Self

Converts to this type from the input type.
source§

impl<K, V> From<BTreeMap<K, V>> for Declaration

source§

fn from(bt: BTreeMap<K, V>) -> Self

Converts to this type from the input type.
source§

impl From<Box<Declaration>> for Declaration

source§

fn from(x: Box<Self>) -> Self

Converts to this type from the input type.
source§

impl<T> From<Vec<T>> for Declaration
where + T: Into<Declaration>,

source§

fn from(decls: Vec<T>) -> Self

Converts to this type from the input type.
source§

impl Hash for Declaration

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl PartialEq for Declaration

source§

fn eq(&self, other: &Declaration) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Declaration

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for Declaration

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl StructuralPartialEq for Declaration

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl Serialize for Declaration

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for Declaration

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl StructuralPartialEq for Declaration

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -68,5 +72,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/enum.Error.html b/docs/sage/lir/enum.Error.html index 17b43c02..295e33d0 100644 --- a/docs/sage/lir/enum.Error.html +++ b/docs/sage/lir/enum.Error.html @@ -1,6 +1,6 @@ -Error in sage::lir - Rust -

Enum sage::lir::Error

source ·
pub enum Error {
-
Show 44 variants Annotated(Box<Self>, Annotation), +Error in sage::lir - Rust +

Enum sage::lir::Error

source ·
pub enum Error {
+
Show 45 variants Annotated(Box<Self>, Annotation), UnimplementedOperator(String), UnexpectedConstParam { found: Type, @@ -51,6 +51,7 @@ InvalidConstExpr(ConstExpr), UnsupportedOperation(Expr), TypeRedefined(String), + ModuleRedefined(String), UnusedExpr(Expr, Type), InvalidTemplateArgs(Type), ApplyNonTemplate(Type), @@ -100,6 +101,7 @@
§

InvalidConstExpr(ConstExpr)

Invalid constant expression.

§

UnsupportedOperation(Expr)

Expression uses an operation unsupported by the target.

§

TypeRedefined(String)

Tried to define a type that already exists.

+
§

ModuleRedefined(String)

Tried to define a module that already exists.

§

UnusedExpr(Expr, Type)

Unused expression returned a non-None value.

§

InvalidTemplateArgs(Type)

Invalid number of template arguments to a type.

§

ApplyNonTemplate(Type)

Tried to apply a non-template type to some arguments.

@@ -107,9 +109,9 @@
§

CompilePolyProc(PolyProcedure)

Tried to compile a polymorphic procedure without monomorphing it.

§

InvalidMonomorphize(ConstExpr)

Cannot monomorphize a constant expression.

§

DuplicateMember(Type, String)

Duplicate implementations of a member for a type

-

Implementations§

source§

impl Error

source

pub fn annotate(self, annotation: Annotation) -> Self

Annotate an error with some metadata.

-

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl From<Error> for Error

Create an IR error from an assembly error.

-
source§

fn from(e: Error) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for T
where +

Implementations§

source§

impl Error

source

pub fn annotate(self, annotation: Annotation) -> Self

Annotate an error with some metadata.

+

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl From<Error> for Error

Create an IR error from an assembly error.

+
source§

fn from(e: Error) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/sage/lir/enum.Expr.html b/docs/sage/lir/enum.Expr.html index 028f8b56..33114b88 100644 --- a/docs/sage/lir/enum.Expr.html +++ b/docs/sage/lir/enum.Expr.html @@ -76,44 +76,44 @@ For unions or structures, use a Symbol constant expression to access the field.

Do NOT instantiate this directly: use the .field method on the container expression.

§

Index(Box<Self>, Box<Self>)

Index an array or pointer with an expression that evaluates to an Int at runtime.

-

Implementations§

source§

impl Expr

source

pub const NONE: Self = _

A constant expression that evaluates to None. +

Implementations§

source§

impl Expr

source

pub const NONE: Self = _

A constant expression that evaluates to None. This constant is defined so that we don’t have to write Expr::ConstExpr every time we want to use None.

source

pub fn print(self) -> Self

source

pub fn println(self) -> Self

source

pub fn is_method_call(&self, env: &Env) -> Result<bool, Error>

source

pub fn transform_method_call(&self, env: &Env) -> Result<Self, Error>

source

pub fn get_method_call_mutability( &self, env: &Env ) -> Result<Option<Mutability>, Error>

source

pub fn annotate(&self, annotation: impl Into<Annotation>) -> Self

An annotated expression with some metadata.

-
source

pub fn with(&self, older_decls: impl Into<Declaration>) -> Self

Return this expression, but with a given declaration in scope.

-
source

pub fn hard_with(&self, older_decls: impl Into<Declaration>) -> Self

source

pub fn size_of(self) -> Self

Get the size of an expression.

-
source

pub fn as_type(self, t: Type) -> Self

Cast an expression as another type.

-
source

pub fn unop(self, op: impl ToString) -> Self

Apply a unary operation to this expression.

-
source

pub fn not(self) -> Self

Logical not this expression.

-
source

pub fn bitxor(self, other: impl Into<Self>) -> Self

Bitwise this expression with another.

-
source

pub fn bitor(self, other: impl Into<Self>) -> Self

BitwiseOr this expression with another.

-
source

pub fn bitnand(self, other: impl Into<Self>) -> Self

BitwiseOr this expression with another.

-
source

pub fn bitand(self, other: impl Into<Self>) -> Self

BitwiseAnd this expression with another.

-
source

pub fn bitnor(self, other: impl Into<Self>) -> Self

BitwiseAnd this expression with another.

-
source

pub fn bitnot(self) -> Self

BitwiseAnd this expression with another.

-
source

pub fn lt(self, other: impl Into<Self>) -> Self

Is this expression less than another?

-
source

pub fn le(self, other: impl Into<Self>) -> Self

Is this expression less than or equal to another?

-
source

pub fn gt(self, other: impl Into<Self>) -> Self

Is this expression greater than another?

-
source

pub fn ge(self, other: impl Into<Self>) -> Self

Is this expression greater than or equal to another?

-
source

pub fn eq(self, other: impl Into<Self>) -> Self

Is this expression greater than another?

-
source

pub fn neq(self, other: impl Into<Self>) -> Self

Is this expression greater than or equal to another?

-
source

pub fn and(self, other: impl Into<Self>) -> Self

Logical and this expression with another.

-
source

pub fn or(self, other: impl Into<Self>) -> Self

Logical or this expression with another.

-
source

pub fn pow(self, exp: impl Into<Self>) -> Self

Get the power of this expression to another.

-
source

pub fn add(self, other: impl Into<Self>) -> Self

Add this expression to another.

-
source

pub fn sub(self, other: impl Into<Self>) -> Self

Subtract an expression from this expression.

-
source

pub fn mul(self, other: impl Into<Self>) -> Self

Multiply this expression by another.

-
source

pub fn div(self, other: impl Into<Self>) -> Self

Divide this expression by another.

-
source

pub fn rem(self, other: impl Into<Self>) -> Self

Get the remainder of this expression divided by another.

-
source

pub fn neg(self) -> Self

Get the remainder of this expression divided by another.

-
source

pub fn field(self, field: ConstExpr) -> Self

Get a field from a structure, union, or tuple.

+
source

pub fn with(&self, older_decls: impl Into<Declaration>) -> Self

Return this expression, but with a given declaration in scope.

+
source

pub fn hard_with(&self, older_decls: impl Into<Declaration>) -> Self

source

pub fn size_of(self) -> Self

Get the size of an expression.

+
source

pub fn as_type(self, t: Type) -> Self

Cast an expression as another type.

+
source

pub fn unop(self, op: impl ToString) -> Self

Apply a unary operation to this expression.

+
source

pub fn not(self) -> Self

Logical not this expression.

+
source

pub fn bitxor(self, other: impl Into<Self>) -> Self

Bitwise this expression with another.

+
source

pub fn bitor(self, other: impl Into<Self>) -> Self

BitwiseOr this expression with another.

+
source

pub fn bitnand(self, other: impl Into<Self>) -> Self

BitwiseOr this expression with another.

+
source

pub fn bitand(self, other: impl Into<Self>) -> Self

BitwiseAnd this expression with another.

+
source

pub fn bitnor(self, other: impl Into<Self>) -> Self

BitwiseAnd this expression with another.

+
source

pub fn bitnot(self) -> Self

BitwiseAnd this expression with another.

+
source

pub fn lt(self, other: impl Into<Self>) -> Self

Is this expression less than another?

+
source

pub fn le(self, other: impl Into<Self>) -> Self

Is this expression less than or equal to another?

+
source

pub fn gt(self, other: impl Into<Self>) -> Self

Is this expression greater than another?

+
source

pub fn ge(self, other: impl Into<Self>) -> Self

Is this expression greater than or equal to another?

+
source

pub fn eq(self, other: impl Into<Self>) -> Self

Is this expression greater than another?

+
source

pub fn neq(self, other: impl Into<Self>) -> Self

Is this expression greater than or equal to another?

+
source

pub fn and(self, other: impl Into<Self>) -> Self

Logical and this expression with another.

+
source

pub fn or(self, other: impl Into<Self>) -> Self

Logical or this expression with another.

+
source

pub fn pow(self, exp: impl Into<Self>) -> Self

Get the power of this expression to another.

+
source

pub fn add(self, other: impl Into<Self>) -> Self

Add this expression to another.

+
source

pub fn sub(self, other: impl Into<Self>) -> Self

Subtract an expression from this expression.

+
source

pub fn mul(self, other: impl Into<Self>) -> Self

Multiply this expression by another.

+
source

pub fn div(self, other: impl Into<Self>) -> Self

Divide this expression by another.

+
source

pub fn rem(self, other: impl Into<Self>) -> Self

Get the remainder of this expression divided by another.

+
source

pub fn neg(self) -> Self

Get the remainder of this expression divided by another.

+
source

pub fn field(self, field: ConstExpr) -> Self

Get a field from a structure, union, or tuple.

For tuples, use an Int constant expression to access the nth field (zero indexed). For unions or structures, use a Symbol constant expression to access the field.

-
source

pub fn idx(self, idx: impl Into<Self>) -> Self

Index an array or pointer with an expression that evaluates to an Int at runtime.

-
source

pub fn let_var( +

source

pub fn idx(self, idx: impl Into<Self>) -> Self

Index an array or pointer with an expression that evaluates to an Int at runtime.

+
source

pub fn let_var( var: impl ToString, mutability: impl Into<Mutability>, t: Option<Type>, @@ -124,17 +124,17 @@ var will be declared with the type t, and the expression e will be assigned to it.

The result of this expression is the ret value, which is evaluated under this new scope.

When this expression is finished evaluating, var will be removed from the scope.

-

source

pub fn let_vars( +

source

pub fn let_vars( vars: Vec<(&str, Mutability, Option<Type>, Self)>, ret: impl Into<Self> ) -> Self

Create a let binding for an expression, and define multiple variables.

-
source

pub fn let_type(typename: impl ToString, t: Type, ret: impl Into<Self>) -> Self

Create a let binding for an type.

+
source

pub fn let_type(typename: impl ToString, t: Type, ret: impl Into<Self>) -> Self

Create a let binding for an type.

This will create a new scope with the type typename defined. typename will be declared with the type t, and the expression ret will be evaluated under this new scope.

When this expression is finished evaluating, typename will be removed from the scope.

-
source

pub fn let_types(vars: Vec<(&str, Type)>, ret: impl Into<Self>) -> Self

Create several type bindings at onces.

-
source

pub fn let_const( +

source

pub fn let_types(vars: Vec<(&str, Type)>, ret: impl Into<Self>) -> Self

Create several type bindings at onces.

+
source

pub fn let_const( constname: impl ToString, e: ConstExpr, ret: impl Into<Self> @@ -142,11 +142,11 @@

This will create a new scope with the constant constname defined. ret will be evaluated under this new scope.

When this expression is finished evaluating, constname will be removed from the scope.

-

source

pub fn let_consts( +

source

pub fn let_consts( constants: Vec<(&str, ConstExpr)>, ret: impl Into<Self> ) -> Self

Create several const bindings at onces.

-
source

pub fn let_proc( +

source

pub fn let_proc( procname: impl ToString, proc: Procedure, ret: impl Into<Self> @@ -154,34 +154,37 @@

This will create a new scope with the procedure proc defined. ret will be evaluated under this new scope.

When this expression is finished evaluating, proc will be removed from the scope.

-

source

pub fn let_procs(procs: BTreeMap<&str, Procedure>, ret: impl Into<Self>) -> Self

Create several proc bindings at onces.

-
source

pub fn structure(vars: BTreeMap<&str, Self>) -> Self

Create a structure of fields to expressions.

-
source

pub fn var(var: impl ToString) -> Self

Evaluate a variable in the current scope.

-
source

pub fn app(self, args: Vec<Self>) -> Self

Apply this expression as a procedure to some arguments.

-
source

pub fn if_then(self, t: impl Into<Self>, e: impl Into<Self>) -> Self

Create an if-then-else statement with this expression as the condition.

-
source

pub fn while_loop(self, body: impl Into<Self>) -> Self

Create a while statement with this expression as the condition.

-
source

pub fn refer(self, mutability: impl Into<Mutability>) -> Self

Reference this expression (i.e. get a pointer to it).

-
source

pub fn deref(self) -> Self

Dereference this expression (i.e. get the value it points to).

-
source

pub fn deref_mut(self, e: impl Into<Self>) -> Self

Dereference this expression (i.e. get the value it points to), +

source

pub fn let_procs(procs: BTreeMap<&str, Procedure>, ret: impl Into<Self>) -> Self

Create several proc bindings at onces.

+
source

pub fn structure(vars: BTreeMap<&str, Self>) -> Self

Create a structure of fields to expressions.

+
source

pub fn var(var: impl ToString) -> Self

Evaluate a variable in the current scope.

+
source

pub fn app(self, args: Vec<Self>) -> Self

Apply this expression as a procedure to some arguments.

+
source

pub fn if_then(self, t: impl Into<Self>, e: impl Into<Self>) -> Self

Create an if-then-else statement with this expression as the condition.

+
source

pub fn while_loop(self, body: impl Into<Self>) -> Self

Create a while statement with this expression as the condition.

+
source

pub fn refer(self, mutability: impl Into<Mutability>) -> Self

Reference this expression (i.e. get a pointer to it).

+
source

pub fn deref(self) -> Self

Dereference this expression (i.e. get the value it points to).

+
source

pub fn deref_mut(self, e: impl Into<Self>) -> Self

Dereference this expression (i.e. get the value it points to), and write another expression to its position in memory.

-
source

pub fn assign_op(self, op: impl ToString, e: impl Into<Self>) -> Self

Perform an AssignOp on this expression.

-
source

pub fn assign(self, op: impl ToString, e: impl Into<Self>) -> Self

Perform an AssignOp on this expression.

-

Trait Implementations§

source§

impl Clone for Expr

source§

fn clone(&self) -> Expr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Compile for Expr

Compile an LIR expression into several core assembly instructions.

-
source

pub fn assign_op(self, op: impl ToString, e: impl Into<Self>) -> Self

Perform an AssignOp on this expression.

+
source

pub fn assign(self, op: impl ToString, e: impl Into<Self>) -> Self

Perform an AssignOp on this expression.

+

Trait Implementations§

source§

impl Clone for Expr

source§

fn clone(&self) -> Expr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Compile for Expr

Compile an LIR expression into several core assembly instructions.

+
source§

fn compile_expr( self, env: &mut Env, output: &mut dyn AssemblyProgram -) -> Result<(), Error>

source§

fn compile(self) -> Result<Result<CoreProgram, StandardProgram>, Error>
where - Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for Expr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Expr

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Expr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ConstExpr> for Expr

source§

fn from(c: ConstExpr) -> Self

Converts to this type from the input type.
source§

impl GetType for Expr

Infer the type associated with an expression under a given environment.

-
source§

fn substitute(&mut self, name: &str, ty: &Type)

Substitute a type in a given expression.

-
source§

fn get_type_checked(&self, env: &Env, i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check -recursion depth to prevent a possible stack overflow.
source§

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.
source§

fn substitute_types(&mut self, names: &[String], types: &[Type])

source§

impl Hash for Expr

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +) -> Result<(), Error>

source§

fn compile( + self, + core: bool +) -> Result<Result<CoreProgram, StandardProgram>, Error>
where + Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for Expr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Expr

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Expr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ConstExpr> for Expr

source§

fn from(c: ConstExpr) -> Self

Converts to this type from the input type.
source§

impl GetType for Expr

Infer the type associated with an expression under a given environment.

+
source§

fn substitute(&mut self, name: &str, ty: &Type)

Substitute a type in a given expression.

+
source§

fn get_type_checked(&self, env: &Env, i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check +recursion depth to prevent a possible stack overflow.
source§

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.
source§

fn substitute_types(&mut self, names: &[String], types: &[Type])

source§

impl Hash for Expr

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

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

impl PartialEq for Expr

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used + Self: Sized,
Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for Expr

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Expr

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for Expr

Check the type-soundness of a given expression.

+sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Expr

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for Expr

Check the type-soundness of a given expression.

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.

Auto Trait Implementations§

§

impl RefUnwindSafe for Expr

§

impl Send for Expr

§

impl Sync for Expr

§

impl Unpin for Expr

§

impl UnwindSafe for Expr

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where @@ -204,5 +207,5 @@ T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/enum.Mutability.html b/docs/sage/lir/enum.Mutability.html index 51239783..afde595d 100644 --- a/docs/sage/lir/enum.Mutability.html +++ b/docs/sage/lir/enum.Mutability.html @@ -18,12 +18,12 @@ cannot decay to mutable pointers. Any pointers are unchecked..

source

pub fn is_mutable(&self) -> bool

Can this data be accessed mutably?

source

pub fn is_constant(&self) -> bool

Is this data protected against mutation?

-

Trait Implementations§

source§

impl Clone for Mutability

source§

fn clone(&self) -> Mutability

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Mutability

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Mutability

source§

fn default() -> Mutability

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for Mutability

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Mutability

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Mutability> for bool

Convert a mutability into a boolean. +

Trait Implementations§

source§

impl Clone for Mutability

source§

fn clone(&self) -> Mutability

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Mutability

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Mutability

source§

fn default() -> Mutability

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for Mutability

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Mutability

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Mutability> for bool

Convert a mutability into a boolean. It will return true if the data is mutable (or any), and false if it is immutable.

-
source§

fn from(m: Mutability) -> Self

Converts to this type from the input type.
source§

impl From<bool> for Mutability

Convert a boolean into a mutability. +

source§

fn from(m: Mutability) -> Self

Converts to this type from the input type.
source§

impl From<bool> for Mutability

Convert a boolean into a mutability. True is mutable, false is immutable.

-
source§

fn from(b: bool) -> Self

Converts to this type from the input type.
source§

impl Hash for Mutability

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +
source§

fn from(b: bool) -> Self

Converts to this type from the input type.

source§

impl Hash for Mutability

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Mutability

source§

fn cmp(&self, other: &Mutability) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -33,8 +33,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Mutability

source§

fn partial_cmp(&self, other: &Mutability) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for Mutability

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Mutability

source§

impl Eq for Mutability

source§

impl StructuralEq for Mutability

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for Mutability

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Mutability

source§

impl Eq for Mutability

source§

impl StructuralEq for Mutability

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -53,5 +53,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/enum.Pattern.html b/docs/sage/lir/enum.Pattern.html index 5208f9bb..b1870b15 100644 --- a/docs/sage/lir/enum.Pattern.html +++ b/docs/sage/lir/enum.Pattern.html @@ -14,7 +14,7 @@ When matching, the pattern just checks if the expression matches the pattern. When binding, the pattern binds the expression to corresponding variables in the pattern, and evaluates an expression with those variables.

-

Variants§

§

Tuple(Vec<Pattern>)

§

Struct(BTreeMap<String, Pattern>)

§

Variant(String, Option<Box<Pattern>>)

§

Symbol(Mutability, String)

§

ConstExpr(ConstExpr)

§

Alt(Vec<Pattern>)

§

Pointer(Box<Pattern>)

§

Wildcard

Implementations§

source§

impl Pattern

source

pub fn tup(patterns: Vec<Pattern>) -> Self

Construct a new pattern which matches a tuple of patterns.

+

Variants§

§

Tuple(Vec<Pattern>)

§

Struct(BTreeMap<String, Pattern>)

§

Variant(String, Option<Box<Pattern>>)

§

Symbol(Mutability, String)

§

ConstExpr(ConstExpr)

§

Alt(Vec<Pattern>)

§

Pointer(Box<Pattern>)

§

Wildcard

Implementations§

source§

impl Pattern

source

pub fn tup(patterns: Vec<Pattern>) -> Self

Construct a new pattern which matches a tuple of patterns.

source

pub fn struct_(patterns: BTreeMap<String, Pattern>) -> Self

Construct a new pattern which matches a struct with a given set of fields.

source

pub fn sym(mutable: impl Into<Mutability>, name: impl ToString) -> Self

Construct a new pattern which matches a symbol with a given name.

source

pub fn int(n: i64) -> Self

Construct a new pattern which matches a constant integer.

@@ -35,7 +35,7 @@ ty: &Type, env: &Env ) -> Result<bool, Error>

Is this pattern exhaustive?

-
source

pub fn are_patterns_exhaustive( +

source

pub fn are_patterns_exhaustive( expr: &Expr, patterns: &[Pattern], matching_expr_ty: &Type, @@ -43,14 +43,14 @@ ) -> Result<bool, Error>

This associated function returns whether or not a set of patterns is exhaustive, that is, whether or not it matches all possible values of a given type. This is used to check if a match expression is exhaustive.

-
source

pub fn type_check( +

source

pub fn type_check( &self, matching_expr: &Expr, branch: &Expr, env: &Env ) -> Result<(), Error>

Type-check a pattern match of an expression against this pattern, and type-check the branch where the expression is bound to the pattern.

-
source

pub fn if_let_pattern( +

source

pub fn if_let_pattern( &self, expr: &Expr, then: &Expr, @@ -58,13 +58,13 @@ env: &Env ) -> Result<Expr, Error>

Generate an if letexpression, which matches a given expr, and executes then if the expression matches the pattern, and else_ otherwise.

-
source

pub fn match_pattern( +

source

pub fn match_pattern( expr: &Expr, branches: &[(Self, Expr)], env: &Env ) -> Result<Expr, Error>

Generate an expression which evaluates a match expression, which matches a given expr against a set of patterns and branches.

-
source

pub fn get_bindings( +

source

pub fn get_bindings( &self, expr: &Expr, ty: &Type, @@ -73,7 +73,7 @@

For example (a, b) binds the variables a and b to the first and second elements of the tuple respectively. This function would return a map with the keys a and b and the values being their types.

-

source

pub fn declare_let_bind( +

source

pub fn declare_let_bind( &self, expr: &Expr, ty: &Type, @@ -84,13 +84,13 @@ defining the bindings in the environment to map to the correct position in the stack relative to the expression. If the expression and pattern differ in size or type, then this will not work correctly. This function does not check the arguments.

-

Trait Implementations§

source§

impl Clone for Pattern

source§

fn clone(&self) -> Pattern

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Pattern

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Pattern

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Pattern

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Pattern

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for Pattern

source§

fn clone(&self) -> Pattern

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Pattern

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Pattern

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Pattern

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Pattern

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl PartialEq for Pattern

source§

fn eq(&self, other: &Pattern) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Pattern

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Pattern

source§

impl StructuralEq for Pattern

source§

impl StructuralPartialEq for Pattern

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl Serialize for Pattern

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Pattern

source§

impl StructuralEq for Pattern

source§

impl StructuralPartialEq for Pattern

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -109,5 +109,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/enum.Put.html b/docs/sage/lir/enum.Put.html index 32a155d0..70841ba4 100644 --- a/docs/sage/lir/enum.Put.html +++ b/docs/sage/lir/enum.Put.html @@ -13,7 +13,7 @@ t: &Type, env: &mut Env, output: &mut dyn AssemblyProgram -) -> Result<(), Error>

Trait Implementations§

source§

impl Clone for Put

source§

fn clone(&self) -> Put

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Put

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Put

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Put

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +) -> Result<(), Error>

Trait Implementations§

source§

impl Clone for Put

source§

fn clone(&self) -> Put

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Put

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Put

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Put

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Put

source§

fn cmp(&self, other: &Put) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where diff --git a/docs/sage/lir/enum.Type.html b/docs/sage/lir/enum.Type.html index 8c597693..bd7691b4 100644 --- a/docs/sage/lir/enum.Type.html +++ b/docs/sage/lir/enum.Type.html @@ -180,16 +180,16 @@ previous_applications: &mut HashMap<(Type, Vec<Type>), Type>, checked: bool ) -> Result<Self, Error>

Perform type applications if possible.

-

Trait Implementations§

source§

impl Clone for Type

source§

fn clone(&self) -> Type

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Type

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Type

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Type

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Type> for ConstExpr

source§

fn from(value: Type) -> Self

Converts to this type from the input type.
source§

impl GetSize for Type

Calculate the size of a type in units of cells.

+

Trait Implementations§

source§

impl Clone for Type

source§

fn clone(&self) -> Type

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Type

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Type

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Type

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Type> for ConstExpr

source§

fn from(value: Type) -> Self

Converts to this type from the input type.
source§

impl GetSize for Type

Calculate the size of a type in units of cells.

source§

fn get_size_checked(&self, env: &Env, i: usize) -> Result<usize, Error>

Get the size of something in memory, but limit the number of recursive calls to prevent stack overflow. i is a counter to prevent infinite recursion.
source§

fn get_size(&self, env: &Env) -> Result<usize, Error>

Get the size of something in memory (number of cells).
source§

impl Hash for Type

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl PartialEq for Type

source§

fn eq(&self, other: &Type) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Type

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Simplify for Type

source§

fn simplify_checked(self, env: &Env, i: usize) -> Result<Self, Error>

Simplify an expression while maintaining structural equality, but limit +sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Type

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Simplify for Type

source§

fn simplify_checked(self, env: &Env, i: usize) -> Result<Self, Error>

Simplify an expression while maintaining structural equality, but limit the number of recursive calls to prevent stack overflow. i is a counter to prevent infinite recursion.
source§

fn simplify(self, env: &Env) -> Result<Self, Error>

Simplify an expression while maintaining structural equality.
source§

impl TypeCheck for Type

Check the soundness of a given type in the environment.

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for Type

source§

impl Send for Type

source§

impl StructuralPartialEq for Type

source§

impl Sync for Type

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where @@ -211,5 +211,5 @@ T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/struct.Assign.html b/docs/sage/lir/struct.Assign.html index 755cc95e..813980ac 100644 --- a/docs/sage/lir/struct.Assign.html +++ b/docs/sage/lir/struct.Assign.html @@ -34,7 +34,7 @@ dst: &Expr, src: &Expr, env: &Env -) -> Result<bool, Error>
Checks if the operation can be applied to the given expressions.
source§

impl Clone for Assign

source§

fn clone(&self) -> Assign

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Assign

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Assign

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Assign

§

impl Send for Assign

§

impl Sync for Assign

§

impl Unpin for Assign

§

impl !UnwindSafe for Assign

Blanket Implementations§

source§

impl<T> Any for T
where +) -> Result<bool, Error>

Checks if the operation can be applied to the given expressions.
source§

impl Clone for Assign

source§

fn clone(&self) -> Assign

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Assign

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Assign

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Assign

§

impl Send for Assign

§

impl Sync for Assign

§

impl Unpin for Assign

§

impl !UnwindSafe for Assign

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/sage/lir/struct.BitwiseNot.html b/docs/sage/lir/struct.BitwiseNot.html index aa99ef70..8c77ea84 100644 --- a/docs/sage/lir/struct.BitwiseNot.html +++ b/docs/sage/lir/struct.BitwiseNot.html @@ -1,5 +1,5 @@ BitwiseNot in sage::lir - Rust -

Struct sage::lir::BitwiseNot

source ·
pub struct BitwiseNot;

Trait Implementations§

source§

impl Clone for BitwiseNot

source§

fn clone(&self) -> BitwiseNot

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BitwiseNot

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for BitwiseNot

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for BitwiseNot

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Struct sage::lir::BitwiseNot

source ·
pub struct BitwiseNot;

Trait Implementations§

source§

impl Clone for BitwiseNot

source§

fn clone(&self) -> BitwiseNot

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BitwiseNot

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for BitwiseNot

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for BitwiseNot

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for BitwiseNot

source§

fn cmp(&self, other: &BitwiseNot) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where diff --git a/docs/sage/lir/struct.BitwiseOr.html b/docs/sage/lir/struct.BitwiseOr.html index b9d37f92..bd9c067f 100644 --- a/docs/sage/lir/struct.BitwiseOr.html +++ b/docs/sage/lir/struct.BitwiseOr.html @@ -27,7 +27,7 @@ rhs: &Expr, env: &mut Env, output: &mut dyn AssemblyProgram -) -> Result<(), Error>

Compiles the operation on the given expressions.
source§

impl Clone for BitwiseOr

source§

fn clone(&self) -> BitwiseOr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BitwiseOr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for BitwiseOr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for BitwiseOr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +) -> Result<(), Error>

Compiles the operation on the given expressions.
source§

impl Clone for BitwiseOr

source§

fn clone(&self) -> BitwiseOr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BitwiseOr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for BitwiseOr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for BitwiseOr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for BitwiseOr

source§

fn cmp(&self, other: &BitwiseOr) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where diff --git a/docs/sage/lir/struct.CoreBuiltin.html b/docs/sage/lir/struct.CoreBuiltin.html index fb5f4b50..8a6b846d 100644 --- a/docs/sage/lir/struct.CoreBuiltin.html +++ b/docs/sage/lir/struct.CoreBuiltin.html @@ -17,15 +17,18 @@ self, _env: &mut Env, output: &mut dyn AssemblyProgram -) -> Result<(), Error>

source§

fn compile(self) -> Result<Result<CoreProgram, StandardProgram>, Error>
where - Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for CoreBuiltin

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CoreBuiltin

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreBuiltin

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GetType for CoreBuiltin

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check +) -> Result<(), Error>

source§

fn compile( + self, + core: bool +) -> Result<Result<CoreProgram, StandardProgram>, Error>
where + Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for CoreBuiltin

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CoreBuiltin

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreBuiltin

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GetType for CoreBuiltin

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check recursion depth to prevent a possible stack overflow.
source§

fn substitute(&mut self, name: &str, ty: &Type)

Substitute a type for a given name in the environment.
source§

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.
source§

fn substitute_types(&mut self, names: &[String], types: &[Type])

source§

impl Hash for CoreBuiltin

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl PartialEq for CoreBuiltin

source§

fn eq(&self, other: &CoreBuiltin) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for CoreBuiltin

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for CoreBuiltin

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for CoreBuiltin

source§

impl StructuralPartialEq for CoreBuiltin

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl Serialize for CoreBuiltin

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for CoreBuiltin

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for CoreBuiltin

source§

impl StructuralPartialEq for CoreBuiltin

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -47,5 +50,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/struct.Data.html b/docs/sage/lir/struct.Data.html index 49f72e80..96f7f44c 100644 --- a/docs/sage/lir/struct.Data.html +++ b/docs/sage/lir/struct.Data.html @@ -1,6 +1,6 @@ Data in sage::lir - Rust

Struct sage::lir::Data

source ·
pub struct Data;
Expand description

Get the Union data associated with a tagged union (EnumUnion).

-

Trait Implementations§

source§

impl Clone for Data

source§

fn clone(&self) -> Data

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Data

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Data

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Data

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for Data

source§

fn clone(&self) -> Data

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Data

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Data

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Data

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Data

source§

fn cmp(&self, other: &Data) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where diff --git a/docs/sage/lir/struct.Delete.html b/docs/sage/lir/struct.Delete.html index 3fa3cc61..757f434e 100644 --- a/docs/sage/lir/struct.Delete.html +++ b/docs/sage/lir/struct.Delete.html @@ -1,5 +1,5 @@ Delete in sage::lir - Rust -

Struct sage::lir::Delete

source ·
pub struct Delete;

Trait Implementations§

source§

impl Clone for Delete

source§

fn clone(&self) -> Delete

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Delete

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Delete

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Delete

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Struct sage::lir::Delete

source ·
pub struct Delete;

Trait Implementations§

source§

impl Clone for Delete

source§

fn clone(&self) -> Delete

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Delete

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Delete

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Delete

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Delete

source§

fn cmp(&self, other: &Delete) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where diff --git a/docs/sage/lir/struct.Env.html b/docs/sage/lir/struct.Env.html index d6804a4b..6b838b3c 100644 --- a/docs/sage/lir/struct.Env.html +++ b/docs/sage/lir/struct.Env.html @@ -1,27 +1,27 @@ Env in sage::lir - Rust -

Struct sage::lir::Env

source ·
pub struct Env { /* private fields */ }
Expand description

An environment under which expressions and types are compiled and typechecked. +

Struct sage::lir::Env

source ·
pub struct Env { /* private fields */ }
Expand description

An environment under which expressions and types are compiled and typechecked. This is essentially the scope of an expression.

-

Implementations§

source§

impl Env

Implementations§

source§

impl Env

source

pub fn get_type_of_associated_const( &self, ty: &Type, name: &str ) -> Option<Type>

Get the type of an associated constant of a type.

-
source

pub fn get_associated_const( +

source

pub fn get_associated_const( &self, ty: &Type, name: &str -) -> Option<(ConstExpr, Type)>

source

pub fn has_associated_const(&self, ty: &Type, name: &str) -> bool

source

pub fn get_all_associated_consts(&self, ty: &Type) -> Vec<(String, ConstExpr)>

source

pub fn add_associated_const( +) -> Option<(ConstExpr, Type)>

source

pub fn has_associated_const(&self, ty: &Type, name: &str) -> bool

source

pub fn get_all_associated_consts(&self, ty: &Type) -> Vec<(String, ConstExpr)>

source

pub fn add_associated_const( &self, ty: Type, associated_const_name: impl ToString, expr: ConstExpr -) -> Result<(), Error>

source

pub fn define_types(&mut self, types: Vec<(String, Type)>)

Define multiple types with the given names under this environment.

+) -> Result<(), Error>

source

pub fn define_types(&mut self, types: Vec<(String, Type)>)

Define multiple types with the given names under this environment.

This must be used in situations where the different types depend on each other. This is because the sizes of types are memoized, and this will interfere with the memoization process if the types are defined separately. It will lead to typechecking errors if the environment does not already have a memoized size for the type of a subexpression.

-
source

pub fn define_var( +

source

pub fn define_var( &mut self, var: impl ToString, mutability: Mutability, @@ -30,7 +30,7 @@ ) -> Result<isize, Error>

Define a variable in the current scope. This will increment the scope’s frame pointer offset by the size of the variable. This method returns the offset of the variable from the frame pointer under this scope.

-

Trait Implementations§

source§

impl Clone for Env

source§

fn clone(&self) -> Env

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Env

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Env

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Display for Env

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Env

§

impl Send for Env

§

impl Sync for Env

§

impl Unpin for Env

§

impl !UnwindSafe for Env

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl Clone for Env

source§

fn clone(&self) -> Env

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Env

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Env

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl Display for Env

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Env

§

impl Send for Env

§

impl Sync for Env

§

impl Unpin for Env

§

impl !UnwindSafe for Env

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/sage/lir/struct.FFIProcedure.html b/docs/sage/lir/struct.FFIProcedure.html index 1525ac7b..6a30c406 100644 --- a/docs/sage/lir/struct.FFIProcedure.html +++ b/docs/sage/lir/struct.FFIProcedure.html @@ -8,15 +8,18 @@ self, env: &mut Env, output: &mut dyn AssemblyProgram -) -> Result<(), Error>

source§

fn compile(self) -> Result<Result<CoreProgram, StandardProgram>, Error>
where - Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for FFIProcedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for FFIProcedure

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for FFIProcedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl GetType for FFIProcedure

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check +) -> Result<(), Error>
source§

fn compile( + self, + core: bool +) -> Result<Result<CoreProgram, StandardProgram>, Error>
where + Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for FFIProcedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for FFIProcedure

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for FFIProcedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl GetType for FFIProcedure

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check recursion depth to prevent a possible stack overflow.
source§

fn substitute(&mut self, name: &str, substitution: &Type)

Substitute a type for a given name in the environment.
source§

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.
source§

fn substitute_types(&mut self, names: &[String], types: &[Type])

source§

impl Hash for FFIProcedure

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl PartialEq for FFIProcedure

source§

fn eq(&self, other: &FFIProcedure) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for FFIProcedure

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for FFIProcedure

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for FFIProcedure

source§

impl StructuralEq for FFIProcedure

source§

impl StructuralPartialEq for FFIProcedure

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl Serialize for FFIProcedure

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for FFIProcedure

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for FFIProcedure

source§

impl StructuralEq for FFIProcedure

source§

impl StructuralPartialEq for FFIProcedure

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -38,5 +41,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/struct.Get.html b/docs/sage/lir/struct.Get.html index 3c5ccc69..0ecefb0f 100644 --- a/docs/sage/lir/struct.Get.html +++ b/docs/sage/lir/struct.Get.html @@ -1,5 +1,5 @@ Get in sage::lir - Rust -

Struct sage::lir::Get

source ·
pub struct Get;

Trait Implementations§

source§

impl Clone for Get

source§

fn clone(&self) -> Get

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Get

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Get

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Get

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Struct sage::lir::Get

source ·
pub struct Get;

Trait Implementations§

source§

impl Clone for Get

source§

fn clone(&self) -> Get

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Get

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Get

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Get

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Get

source§

fn cmp(&self, other: &Get) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where diff --git a/docs/sage/lir/struct.New.html b/docs/sage/lir/struct.New.html index 8e673443..5d51a63a 100644 --- a/docs/sage/lir/struct.New.html +++ b/docs/sage/lir/struct.New.html @@ -1,5 +1,5 @@ New in sage::lir - Rust -

Struct sage::lir::New

source ·
pub struct New;

Trait Implementations§

source§

impl Clone for New

source§

fn clone(&self) -> New

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for New

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for New

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for New

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Struct sage::lir::New

source ·
pub struct New;

Trait Implementations§

source§

impl Clone for New

source§

fn clone(&self) -> New

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for New

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for New

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for New

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for New

source§

fn cmp(&self, other: &New) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where diff --git a/docs/sage/lir/struct.Not.html b/docs/sage/lir/struct.Not.html index bdd4ef46..e3ef0aee 100644 --- a/docs/sage/lir/struct.Not.html +++ b/docs/sage/lir/struct.Not.html @@ -1,6 +1,6 @@ Not in sage::lir - Rust

Struct sage::lir::Not

source ·
pub struct Not;
Expand description

A boolean “Not” operation on a value.

-

Trait Implementations§

source§

impl Clone for Not

source§

fn clone(&self) -> Not

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Not

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Not

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl UnaryOp for Not

source§

fn can_apply(&self, expr: &Type, env: &Env) -> Result<bool, Error>

Can this unary operation be applied to the given type?

+

Trait Implementations§

source§

impl Clone for Not

source§

fn clone(&self) -> Not

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Not

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Not

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl UnaryOp for Not

source§

fn can_apply(&self, expr: &Type, env: &Env) -> Result<bool, Error>

Can this unary operation be applied to the given type?

source§

fn return_type(&self, _expr: &Expr, _env: &Env) -> Result<Type, Error>

Get the type of the result of applying this unary operation to the given type.

source§

fn eval(&self, expr: &ConstExpr, env: &mut Env) -> Result<ConstExpr, Error>

Evaluate this unary operation on the given constant values.

source§

fn compile_types( diff --git a/docs/sage/lir/struct.Or.html b/docs/sage/lir/struct.Or.html index b552e601..294765d4 100644 --- a/docs/sage/lir/struct.Or.html +++ b/docs/sage/lir/struct.Or.html @@ -32,7 +32,7 @@ lhs: &Expr, rhs: &Expr, env: &Env -) -> Result<bool, Error>

Checks if the operation can be applied to the given expressions.
source§

impl Clone for Or

source§

fn clone(&self) -> Or

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Or

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Or

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Copy for Or

Auto Trait Implementations§

§

impl RefUnwindSafe for Or

§

impl Send for Or

§

impl Sync for Or

§

impl Unpin for Or

§

impl UnwindSafe for Or

Blanket Implementations§

source§

impl<T> Any for T
where +) -> Result<bool, Error>

Checks if the operation can be applied to the given expressions.
source§

impl Clone for Or

source§

fn clone(&self) -> Or

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Or

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Display for Or

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Copy for Or

Auto Trait Implementations§

§

impl RefUnwindSafe for Or

§

impl Send for Or

§

impl Sync for Or

§

impl Unpin for Or

§

impl UnwindSafe for Or

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/docs/sage/lir/struct.PolyProcedure.html b/docs/sage/lir/struct.PolyProcedure.html index e83253f7..9aecd812 100644 --- a/docs/sage/lir/struct.PolyProcedure.html +++ b/docs/sage/lir/struct.PolyProcedure.html @@ -23,14 +23,14 @@ ) -> Result<Procedure, Error>

Take some type arguments and produce a monomorphized version of the procedure. This monomorphized version can then be compiled directly. Additionally, the mono version of the procedure is memoized, so that it is only compiled once.

-

Trait Implementations§

source§

impl Clone for PolyProcedure

source§

fn clone(&self) -> PolyProcedure

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PolyProcedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for PolyProcedure

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for PolyProcedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<PolyProcedure> for ConstExpr

source§

fn from(value: PolyProcedure) -> Self

Converts to this type from the input type.
source§

impl GetType for PolyProcedure

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check +

Trait Implementations§

source§

impl Clone for PolyProcedure

source§

fn clone(&self) -> PolyProcedure

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PolyProcedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for PolyProcedure

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for PolyProcedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<PolyProcedure> for ConstExpr

source§

fn from(value: PolyProcedure) -> Self

Converts to this type from the input type.
source§

impl GetType for PolyProcedure

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check recursion depth to prevent a possible stack overflow.
source§

fn substitute(&mut self, name: &str, ty: &Type)

Substitute a type for a given name in the environment.
source§

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.
source§

fn substitute_types(&mut self, names: &[String], types: &[Type])

source§

impl Hash for PolyProcedure

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl PartialEq for PolyProcedure

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for PolyProcedure

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for PolyProcedure

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for PolyProcedure

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl Serialize for PolyProcedure

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for PolyProcedure

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for PolyProcedure

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -52,5 +52,5 @@ T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/struct.Procedure.html b/docs/sage/lir/struct.Procedure.html index 33687318..628db5bf 100644 --- a/docs/sage/lir/struct.Procedure.html +++ b/docs/sage/lir/struct.Procedure.html @@ -23,15 +23,18 @@ self, env: &mut Env, output: &mut dyn AssemblyProgram -) -> Result<(), Error>
source§

fn compile(self) -> Result<Result<CoreProgram, StandardProgram>, Error>
where - Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for Procedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Procedure

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Procedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Procedure> for ConstExpr

source§

fn from(value: Procedure) -> Self

Converts to this type from the input type.
source§

impl GetType for Procedure

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check +) -> Result<(), Error>
source§

fn compile( + self, + core: bool +) -> Result<Result<CoreProgram, StandardProgram>, Error>
where + Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for Procedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Procedure

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Procedure

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Procedure> for ConstExpr

source§

fn from(value: Procedure) -> Self

Converts to this type from the input type.
source§

impl GetType for Procedure

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check recursion depth to prevent a possible stack overflow.
source§

fn substitute(&mut self, name: &str, ty: &Type)

Substitute a type for a given name in the environment.
source§

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.
source§

fn substitute_types(&mut self, names: &[String], types: &[Type])

source§

impl Hash for Procedure

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl PartialEq for Procedure

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for Procedure

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for Procedure

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for Procedure

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl Serialize for Procedure

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for Procedure

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for Procedure

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -53,5 +56,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/struct.StandardBuiltin.html b/docs/sage/lir/struct.StandardBuiltin.html index c6fbd634..11094469 100644 --- a/docs/sage/lir/struct.StandardBuiltin.html +++ b/docs/sage/lir/struct.StandardBuiltin.html @@ -18,15 +18,18 @@ self, _env: &mut Env, output: &mut dyn AssemblyProgram -) -> Result<(), Error>
source§

fn compile(self) -> Result<Result<CoreProgram, StandardProgram>, Error>
where - Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for StandardBuiltin

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for StandardBuiltin

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardBuiltin

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GetType for StandardBuiltin

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check +) -> Result<(), Error>
source§

fn compile( + self, + core: bool +) -> Result<Result<CoreProgram, StandardProgram>, Error>
where + Self: Sized + Clone,

Compile the expression into an assembly program. Read more
source§

impl Debug for StandardBuiltin

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for StandardBuiltin

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardBuiltin

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl GetType for StandardBuiltin

source§

fn get_type_checked(&self, _env: &Env, _i: usize) -> Result<Type, Error>

Get the type of a value under a given environment and check recursion depth to prevent a possible stack overflow.
source§

fn substitute(&mut self, name: &str, ty: &Type)

Substitute a type for a given name in the environment.
source§

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.
source§

fn substitute_types(&mut self, names: &[String], types: &[Type])

source§

impl Hash for StandardBuiltin

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl PartialEq for StandardBuiltin

source§

fn eq(&self, other: &StandardBuiltin) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Serialize for StandardBuiltin

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for StandardBuiltin

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for StandardBuiltin

source§

impl StructuralPartialEq for StandardBuiltin

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +sufficient, and should not be overridden without very good reason.

source§

impl Serialize for StandardBuiltin

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypeCheck for StandardBuiltin

source§

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.
source§

impl Eq for StandardBuiltin

source§

impl StructuralPartialEq for StandardBuiltin

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -48,5 +51,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/lir/trait.Compile.html b/docs/sage/lir/trait.Compile.html index bac14512..52e7803c 100644 --- a/docs/sage/lir/trait.Compile.html +++ b/docs/sage/lir/trait.Compile.html @@ -1,5 +1,5 @@ Compile in sage::lir - Rust -

Trait sage::lir::Compile

source ·
pub trait Compile: TypeCheck + Debug + Display {
+    

Trait sage::lir::Compile

source ·
pub trait Compile: TypeCheck + Debug + Display {
     // Required method
     fn compile_expr(
         self,
@@ -8,19 +8,25 @@
     ) -> Result<(), Error>;
 
     // Provided method
-    fn compile(self) -> Result<Result<CoreProgram, StandardProgram>, Error>
+    fn compile(
+        self,
+        core: bool
+    ) -> Result<Result<CoreProgram, StandardProgram>, Error>
        where Self: Sized + Clone { ... }
 }
Expand description

A trait which allows an LIR expression to be compiled to one of the two variants of the assembly language.

-

Required Methods§

Required Methods§

source

fn compile_expr( self, env: &mut Env, output: &mut dyn AssemblyProgram -) -> Result<(), Error>

Provided Methods§

Provided Methods§

source

fn compile( + self, + core: bool +) -> Result<Result<CoreProgram, StandardProgram>, Error>
where Self: Sized + Clone,

Compile the expression into an assembly program.

On success, this will return an Ok value containing either a successfully compiled core assembly program, or a fallback standard assembly program.

On an error, this will return an Err value containing the error.

-

Implementors§

source§

impl Compile for ConstExpr

Compile a constant expression.

-
source§

impl Compile for Expr

Compile an LIR expression into several core assembly instructions.

+

Implementors§

source§

impl Compile for ConstExpr

Compile a constant expression.

+
source§

impl Compile for Expr

Compile an LIR expression into several core assembly instructions.

source§

impl Compile for CoreBuiltin

source§

impl Compile for FFIProcedure

source§

impl Compile for Procedure

source§

impl Compile for StandardBuiltin

\ No newline at end of file diff --git a/docs/sage/lir/trait.GetType.html b/docs/sage/lir/trait.GetType.html index 0c95cd84..2ff57367 100644 --- a/docs/sage/lir/trait.GetType.html +++ b/docs/sage/lir/trait.GetType.html @@ -12,5 +12,5 @@ recursion depth to prevent a possible stack overflow.

source

fn substitute(&mut self, name: &str, ty: &Type)

Substitute a type for a given name in the environment.

Provided Methods§

source

fn get_type(&self, env: &Env) -> Result<Type, Error>

Get the type associated with a value under a given environment.

-
source

fn substitute_types(&mut self, names: &[String], types: &[Type])

Implementors§

source§

impl GetType for ConstExpr

source§

impl GetType for Expr

Infer the type associated with an expression under a given environment.

+
source

fn substitute_types(&mut self, names: &[String], types: &[Type])

Implementors§

source§

impl GetType for ConstExpr

source§

impl GetType for Expr

Infer the type associated with an expression under a given environment.

source§

impl GetType for CoreBuiltin

source§

impl GetType for FFIProcedure

source§

impl GetType for PolyProcedure

source§

impl GetType for Procedure

source§

impl GetType for StandardBuiltin

\ No newline at end of file diff --git a/docs/sage/lir/trait.Simplify.html b/docs/sage/lir/trait.Simplify.html index 54c095e5..30a6cfe5 100644 --- a/docs/sage/lir/trait.Simplify.html +++ b/docs/sage/lir/trait.Simplify.html @@ -10,4 +10,4 @@ the number of recursive calls to prevent stack overflow. i is a counter to prevent infinite recursion.

Provided Methods§

source

fn simplify(self, env: &Env) -> Result<Self, Error>

Simplify an expression while maintaining structural equality.

-

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file +

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/docs/sage/lir/trait.TypeCheck.html b/docs/sage/lir/trait.TypeCheck.html index a72ef39a..5070859e 100644 --- a/docs/sage/lir/trait.TypeCheck.html +++ b/docs/sage/lir/trait.TypeCheck.html @@ -6,6 +6,6 @@

Whenever this is applied, it will return Ok(()) if the typing is sound, and Err(...) if it is not.

Required Methods§

source

fn type_check(&self, env: &Env) -> Result<(), Error>

Type check the expression.

-

Implementors§

source§

impl TypeCheck for ConstExpr

source§

impl TypeCheck for Declaration

source§

impl TypeCheck for Expr

Check the type-soundness of a given expression.

+

Implementors§

source§

impl TypeCheck for ConstExpr

source§

impl TypeCheck for Declaration

source§

impl TypeCheck for Expr

Check the type-soundness of a given expression.

source§

impl TypeCheck for Type

Check the soundness of a given type in the environment.

source§

impl TypeCheck for CoreBuiltin

source§

impl TypeCheck for FFIProcedure

source§

impl TypeCheck for PolyProcedure

source§

impl TypeCheck for Procedure

source§

impl TypeCheck for StandardBuiltin

\ No newline at end of file diff --git a/docs/sage/parse/struct.SourceCodeLocation.html b/docs/sage/parse/struct.SourceCodeLocation.html index 8b44fe0b..3fda30de 100644 --- a/docs/sage/parse/struct.SourceCodeLocation.html +++ b/docs/sage/parse/struct.SourceCodeLocation.html @@ -7,8 +7,8 @@ pub filename: Option<String>, }
Expand description

A struct representing a location in the source code. This is used to format errors properly.

-

Fields§

§line: usize§column: usize§offset: usize§length: Option<usize>§filename: Option<String>

Implementations§

source§

impl SourceCodeLocation

source

pub fn get_code(&self, source: &str) -> String

Trait Implementations§

source§

impl Clone for SourceCodeLocation

source§

fn clone(&self) -> SourceCodeLocation

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SourceCodeLocation

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for SourceCodeLocation

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl From<SourceCodeLocation> for Annotation

source§

fn from(value: SourceCodeLocation) -> Self

Converts to this type from the input type.
source§

impl Hash for SourceCodeLocation

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Fields§

§line: usize§column: usize§offset: usize§length: Option<usize>§filename: Option<String>

Implementations§

source§

impl SourceCodeLocation

source

pub fn get_code(&self, source: &str) -> String

Trait Implementations§

source§

impl Clone for SourceCodeLocation

source§

fn clone(&self) -> SourceCodeLocation

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SourceCodeLocation

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for SourceCodeLocation

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl From<SourceCodeLocation> for Annotation

source§

fn from(value: SourceCodeLocation) -> Self

Converts to this type from the input type.
source§

impl Hash for SourceCodeLocation

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for SourceCodeLocation

source§

fn cmp(&self, other: &SourceCodeLocation) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -17,8 +17,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for SourceCodeLocation

source§

fn partial_cmp(&self, other: &SourceCodeLocation) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for SourceCodeLocation

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for SourceCodeLocation

source§

impl StructuralEq for SourceCodeLocation

source§

impl StructuralPartialEq for SourceCodeLocation

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for SourceCodeLocation

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for SourceCodeLocation

source§

impl StructuralEq for SourceCodeLocation

source§

impl StructuralPartialEq for SourceCodeLocation

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -36,5 +36,5 @@ otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/side_effects/ffi/struct.FFIBinding.html b/docs/sage/side_effects/ffi/struct.FFIBinding.html index f290d360..3498df78 100644 --- a/docs/sage/side_effects/ffi/struct.FFIBinding.html +++ b/docs/sage/side_effects/ffi/struct.FFIBinding.html @@ -8,8 +8,8 @@ the foreign function will read from the FFI channel. The output cells is the number of cells that the foreign function will write to the FFI channel.

Fields§

§name: String§input_cells: usize§output_cells: usize

Implementations§

source§

impl FFIBinding

source

pub fn new(name: String, input_cells: usize, output_cells: usize) -> Self

Create a new FFI binding.

-

Trait Implementations§

source§

impl Clone for FFIBinding

source§

fn clone(&self) -> FFIBinding

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for FFIBinding

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for FFIBinding

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for FFIBinding

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for FFIBinding

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for FFIBinding

source§

fn clone(&self) -> FFIBinding

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for FFIBinding

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for FFIBinding

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for FFIBinding

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for FFIBinding

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for FFIBinding

source§

fn cmp(&self, other: &FFIBinding) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -18,8 +18,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for FFIBinding

source§

fn partial_cmp(&self, other: &FFIBinding) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for FFIBinding

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for FFIBinding

source§

impl StructuralEq for FFIBinding

source§

impl StructuralPartialEq for FFIBinding

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for FFIBinding

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for FFIBinding

source§

impl StructuralEq for FFIBinding

source§

impl StructuralPartialEq for FFIBinding

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -38,5 +38,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/side_effects/io/enum.Axis.html b/docs/sage/side_effects/io/enum.Axis.html index d8afc913..1c4fa691 100644 --- a/docs/sage/side_effects/io/enum.Axis.html +++ b/docs/sage/side_effects/io/enum.Axis.html @@ -4,8 +4,8 @@ Y, Z, }
Expand description

The different axes an input or output might use.

-

Variants§

Trait Implementations§

source§

impl Clone for Axis

source§

fn clone(&self) -> Axis

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Axis

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Axis

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Axis

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Axis

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Variants§

Trait Implementations§

source§

impl Clone for Axis

source§

fn clone(&self) -> Axis

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Axis

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Axis

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Axis

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Axis

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Axis

source§

fn cmp(&self, other: &Axis) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -14,8 +14,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Axis

source§

fn partial_cmp(&self, other: &Axis) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for Axis

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Axis

source§

impl Eq for Axis

source§

impl StructuralEq for Axis

source§

impl StructuralPartialEq for Axis

Auto Trait Implementations§

§

impl RefUnwindSafe for Axis

§

impl Send for Axis

§

impl Sync for Axis

§

impl Unpin for Axis

§

impl UnwindSafe for Axis

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for Axis

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Axis

source§

impl Eq for Axis

source§

impl StructuralEq for Axis

source§

impl StructuralPartialEq for Axis

Auto Trait Implementations§

§

impl RefUnwindSafe for Axis

§

impl Send for Axis

§

impl Sync for Axis

§

impl Unpin for Axis

§

impl UnwindSafe for Axis

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -34,5 +34,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/side_effects/io/enum.Color.html b/docs/sage/side_effects/io/enum.Color.html index a8335edb..b82b0475 100644 --- a/docs/sage/side_effects/io/enum.Color.html +++ b/docs/sage/side_effects/io/enum.Color.html @@ -21,8 +21,8 @@
§

Magenta

Magenta

§

Orange

Orange

§

RGB(u8, u8, u8)

RGB

-

Trait Implementations§

source§

impl Clone for Color

source§

fn clone(&self) -> Color

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Color

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Color

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Color

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Color

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for Color

source§

fn clone(&self) -> Color

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Color

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Color

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Color

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Color

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Color

source§

fn cmp(&self, other: &Color) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -31,8 +31,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Color

source§

fn partial_cmp(&self, other: &Color) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for Color

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Color

source§

impl Eq for Color

source§

impl StructuralEq for Color

source§

impl StructuralPartialEq for Color

Auto Trait Implementations§

§

impl RefUnwindSafe for Color

§

impl Send for Color

§

impl Sync for Color

§

impl Unpin for Color

§

impl UnwindSafe for Color

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for Color

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Color

source§

impl Eq for Color

source§

impl StructuralEq for Color

source§

impl StructuralPartialEq for Color

Auto Trait Implementations§

§

impl RefUnwindSafe for Color

§

impl Send for Color

§

impl Sync for Color

§

impl Unpin for Color

§

impl UnwindSafe for Color

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -51,5 +51,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/side_effects/io/enum.Direction.html b/docs/sage/side_effects/io/enum.Direction.html index 4e05776c..ccf43e2a 100644 --- a/docs/sage/side_effects/io/enum.Direction.html +++ b/docs/sage/side_effects/io/enum.Direction.html @@ -5,8 +5,8 @@ Left, Right, }
Expand description

The different directions a D-Pad a might use.

-

Variants§

§

Up

§

Down

§

Left

§

Right

Trait Implementations§

source§

impl Clone for Direction

source§

fn clone(&self) -> Direction

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Direction

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Direction

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Direction

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Direction

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Variants§

§

Up

§

Down

§

Left

§

Right

Trait Implementations§

source§

impl Clone for Direction

source§

fn clone(&self) -> Direction

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Direction

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Direction

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Direction

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Direction

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Direction

source§

fn cmp(&self, other: &Direction) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -15,8 +15,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Direction

source§

fn partial_cmp(&self, other: &Direction) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for Direction

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Direction

source§

impl Eq for Direction

source§

impl StructuralEq for Direction

source§

impl StructuralPartialEq for Direction

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for Direction

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Direction

source§

impl Eq for Direction

source§

impl StructuralEq for Direction

source§

impl StructuralPartialEq for Direction

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -35,5 +35,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/side_effects/io/enum.InputMode.html b/docs/sage/side_effects/io/enum.InputMode.html index 67571c26..e0d1350c 100644 --- a/docs/sage/side_effects/io/enum.InputMode.html +++ b/docs/sage/side_effects/io/enum.InputMode.html @@ -101,8 +101,8 @@
§

DigitalPin

Input from a digital input (0=low, 1=high)

§

Custom(String)

Custom output modes A custom input mode (for use with a custom output device)

-

Trait Implementations§

source§

impl Clone for InputMode

source§

fn clone(&self) -> InputMode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for InputMode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for InputMode

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for InputMode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for InputMode

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for InputMode

source§

fn clone(&self) -> InputMode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for InputMode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for InputMode

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for InputMode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for InputMode

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for InputMode

source§

fn cmp(&self, other: &InputMode) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -111,8 +111,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for InputMode

source§

fn partial_cmp(&self, other: &InputMode) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for InputMode

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for InputMode

source§

impl StructuralEq for InputMode

source§

impl StructuralPartialEq for InputMode

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for InputMode

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for InputMode

source§

impl StructuralEq for InputMode

source§

impl StructuralPartialEq for InputMode

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -131,5 +131,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/side_effects/io/enum.OutputMode.html b/docs/sage/side_effects/io/enum.OutputMode.html index a102ae8f..b553c761 100644 --- a/docs/sage/side_effects/io/enum.OutputMode.html +++ b/docs/sage/side_effects/io/enum.OutputMode.html @@ -89,8 +89,8 @@
§

SetCursorPixel(Color)

Set the color of a given pixel on the display

§

Custom(String)

Custom output modes A custom output mode (for use with a custom output device)

-

Trait Implementations§

source§

impl Clone for OutputMode

source§

fn clone(&self) -> OutputMode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for OutputMode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for OutputMode

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for OutputMode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for OutputMode

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for OutputMode

source§

fn clone(&self) -> OutputMode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for OutputMode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for OutputMode

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for OutputMode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for OutputMode

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for OutputMode

source§

fn cmp(&self, other: &OutputMode) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -99,8 +99,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for OutputMode

source§

fn partial_cmp(&self, other: &OutputMode) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for OutputMode

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for OutputMode

source§

impl StructuralEq for OutputMode

source§

impl StructuralPartialEq for OutputMode

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for OutputMode

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for OutputMode

source§

impl StructuralEq for OutputMode

source§

impl StructuralPartialEq for OutputMode

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -119,5 +119,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/side_effects/io/struct.Channel.html b/docs/sage/side_effects/io/struct.Channel.html index d4731578..0f74f7e4 100644 --- a/docs/sage/side_effects/io/struct.Channel.html +++ b/docs/sage/side_effects/io/struct.Channel.html @@ -1,7 +1,7 @@ Channel in sage::side_effects::io - Rust

Struct sage::side_effects::io::Channel

source ·
pub struct Channel(pub usize);
Expand description

The channel to use for a given I/O mode.

-

Tuple Fields§

§0: usize

Trait Implementations§

source§

impl Clone for Channel

source§

fn clone(&self) -> Channel

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Channel

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Channel

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Channel

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Channel

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Tuple Fields§

§0: usize

Trait Implementations§

source§

impl Clone for Channel

source§

fn clone(&self) -> Channel

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Channel

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Channel

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Channel

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Channel

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Channel

source§

fn cmp(&self, other: &Channel) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -10,8 +10,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Channel

source§

fn partial_cmp(&self, other: &Channel) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for Channel

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Channel

source§

impl Eq for Channel

source§

impl StructuralEq for Channel

source§

impl StructuralPartialEq for Channel

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for Channel

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Channel

source§

impl Eq for Channel

source§

impl StructuralEq for Channel

source§

impl StructuralPartialEq for Channel

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -30,5 +30,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/side_effects/io/struct.Input.html b/docs/sage/side_effects/io/struct.Input.html index e69dee55..d22a3366 100644 --- a/docs/sage/side_effects/io/struct.Input.html +++ b/docs/sage/side_effects/io/struct.Input.html @@ -11,8 +11,8 @@
source

pub const fn stdin_float() -> Self

Input from STDIN (float)

source

pub const fn random() -> Self

A random number

source

pub const fn clock() -> Self

The time (in seconds) since the program started

-

Trait Implementations§

source§

impl Clone for Input

source§

fn clone(&self) -> Input

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Input

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Input

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Input

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Input

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for Input

source§

fn clone(&self) -> Input

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Input

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Input

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Input

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Input

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Input

source§

fn cmp(&self, other: &Input) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -21,8 +21,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Input

source§

fn partial_cmp(&self, other: &Input) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for Input

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Input

source§

impl StructuralEq for Input

source§

impl StructuralPartialEq for Input

Auto Trait Implementations§

§

impl RefUnwindSafe for Input

§

impl Send for Input

§

impl Sync for Input

§

impl Unpin for Input

§

impl UnwindSafe for Input

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for Input

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Input

source§

impl StructuralEq for Input

source§

impl StructuralPartialEq for Input

Auto Trait Implementations§

§

impl RefUnwindSafe for Input

§

impl Send for Input

§

impl Sync for Input

§

impl Unpin for Input

§

impl UnwindSafe for Input

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -41,5 +41,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/side_effects/io/struct.Output.html b/docs/sage/side_effects/io/struct.Output.html index 536b2e95..1bb7c0b7 100644 --- a/docs/sage/side_effects/io/struct.Output.html +++ b/docs/sage/side_effects/io/struct.Output.html @@ -12,8 +12,8 @@
source

pub const fn stderr_char() -> Self

Output to STDERR (ASCII character)

source

pub const fn stderr_int() -> Self

Output to STDERR (integer)

source

pub const fn stderr_float() -> Self

Output to STDERR (float)

-

Trait Implementations§

source§

impl Clone for Output

source§

fn clone(&self) -> Output

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Output

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Output

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Output

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Output

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for Output

source§

fn clone(&self) -> Output

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Output

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Output

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Output

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl Hash for Output

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for Output

source§

fn cmp(&self, other: &Output) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -22,8 +22,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Output

source§

fn partial_cmp(&self, other: &Output) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for Output

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Output

source§

impl StructuralEq for Output

source§

impl StructuralPartialEq for Output

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for Output

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for Output

source§

impl StructuralEq for Output

source§

impl StructuralPartialEq for Output

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -42,5 +42,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/vm/enum.CoreOp.html b/docs/sage/vm/enum.CoreOp.html index f1b58ea4..1d7486c9 100644 --- a/docs/sage/vm/enum.CoreOp.html +++ b/docs/sage/vm/enum.CoreOp.html @@ -117,8 +117,8 @@ The argument is the size of the vector to check if the register is non-negative.

§

Get(Input)

Get a value from an input source and store it in the register.

§

Put(Output)

Write the value of the register to an output source.

-

Trait Implementations§

source§

impl Clone for CoreOp

source§

fn clone(&self) -> CoreOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CoreOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CoreOp

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for CoreOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for CoreOp

source§

fn clone(&self) -> CoreOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CoreOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for CoreOp

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for CoreOp

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for CoreOp

source§

fn cmp(&self, other: &CoreOp) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -127,8 +127,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for CoreOp

source§

fn partial_cmp(&self, other: &CoreOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for CoreOp

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CoreOp

source§

impl StructuralEq for CoreOp

source§

impl StructuralPartialEq for CoreOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for CoreOp

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Eq for CoreOp

source§

impl StructuralEq for CoreOp

source§

impl StructuralPartialEq for CoreOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -147,5 +147,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/vm/enum.Error.html b/docs/sage/vm/enum.Error.html index 11506c82..b6805b91 100644 --- a/docs/sage/vm/enum.Error.html +++ b/docs/sage/vm/enum.Error.html @@ -7,7 +7,7 @@ of the virtual machine, this error is triggered.

§

ExpectedCore(StandardOp)

When the virtual machine attempts to get the program as core, but finds standard instructions, this error is triggered.

-

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl From<Error> for Error

source§

fn from(e: Error) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Error

source§

fn eq(&self, other: &Error) -> bool

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult

Formats the value using the given formatter. Read more
source§

impl From<Error> for Error

source§

fn from(e: Error) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Error

source§

fn eq(&self, other: &Error) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for Error

source§

fn partial_cmp(&self, other: &Error) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= diff --git a/docs/sage/vm/enum.StandardOp.html b/docs/sage/vm/enum.StandardOp.html index 86d608bb..8e0d9e95 100644 --- a/docs/sage/vm/enum.StandardOp.html +++ b/docs/sage/vm/enum.StandardOp.html @@ -61,13 +61,13 @@ FFI buffer of cells. Whenever an FFI function is called, it will receive its arguments from this buffer.

§

Call(FFIBinding)

Call a foreign function interface function.

-

Trait Implementations§

source§

impl Clone for StandardOp

source§

fn clone(&self) -> StandardOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StandardOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for StandardOp

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for StandardOp

source§

fn eq(&self, other: &StandardOp) -> bool

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Clone for StandardOp

source§

fn clone(&self) -> StandardOp

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StandardOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for StandardOp

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardOp

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for StandardOp

source§

fn eq(&self, other: &StandardOp) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for StandardOp

source§

fn partial_cmp(&self, other: &StandardOp) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for StandardOp

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for StandardOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for StandardOp

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl StructuralPartialEq for StandardOp

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -86,5 +86,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/vm/struct.CoreProgram.html b/docs/sage/vm/struct.CoreProgram.html index e5bdc05d..2cd319f4 100644 --- a/docs/sage/vm/struct.CoreProgram.html +++ b/docs/sage/vm/struct.CoreProgram.html @@ -5,8 +5,8 @@
source

pub fn get_main(&self) -> Vec<CoreOp>

Get the code outside of any functions.

source

pub fn get_functions(&self) -> HashMap<i32, Vec<CoreOp>>

Get the code for each function.

source

pub fn get_main_and_functions(self) -> (Vec<CoreOp>, HashMap<i32, Vec<CoreOp>>)

Get the code outside of any functions, and the code for each function.

-

Trait Implementations§

source§

impl Clone for CoreProgram

source§

fn clone(&self) -> CoreProgram

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Default for CoreProgram

source§

fn default() -> CoreProgram

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for CoreProgram

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<CoreProgram> for StandardProgram

source§

fn from(core: CoreProgram) -> Self

Converts to this type from the input type.
source§

impl Hash for CoreProgram

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +

Trait Implementations§

source§

impl Clone for CoreProgram

source§

fn clone(&self) -> CoreProgram

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Default for CoreProgram

source§

fn default() -> CoreProgram

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for CoreProgram

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for CoreProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<CoreProgram> for StandardProgram

source§

fn from(core: CoreProgram) -> Self

Converts to this type from the input type.
source§

impl Hash for CoreProgram

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

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

impl Ord for CoreProgram

source§

fn cmp(&self, other: &CoreProgram) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where @@ -15,8 +15,8 @@ by ==.

1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for CoreProgram

source§

fn partial_cmp(&self, other: &CoreProgram) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for CoreProgram

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl VirtualMachineProgram for CoreProgram

source§

fn op(&mut self, op: CoreOp)

source§

fn std_op(&mut self, op: StandardOp) -> Result<(), Error>

source§

fn code(&self) -> Result<CoreProgram, StandardProgram>

source§

fn set_float_vector(&mut self, vector: Vec<f64>) -> Result<(), Error>

source§

fn set_vector(&mut self, vector: Vec<i64>)

source§

fn store_vector(&mut self, n: usize)

source§

fn load_vector(&mut self, n: usize)

source§

fn ffi_call(&mut self, ffi: FFIBinding) -> Result<(), Error>

source§

fn poke(&mut self) -> Result<(), Error>

source§

fn peek(&mut self) -> Result<(), Error>

source§

fn comment(&mut self, comment: &str)

source§

fn restore(&mut self)

source§

fn save(&mut self)

source§

fn ret(&mut self)

source§

fn where_is_pointer(&mut self)

source§

fn deref(&mut self)

source§

fn refer(&mut self)

source§

fn move_pointer(&mut self, cells: isize)

source§

fn set_register(&mut self, val: i64)

source§

fn set_float_register(&mut self, val: f64) -> Result<(), Error>

source§

fn begin_while(&mut self)

source§

fn begin_if(&mut self)

source§

fn begin_else(&mut self)

source§

fn begin_function(&mut self)

source§

fn end(&mut self)

source§

fn call(&mut self)

source§

fn index(&mut self)

source§

fn bitwise_nand(&mut self)

source§

fn get(&mut self, src: Input)

source§

fn put(&mut self, dst: Output)

source§

fn is_non_negative(&mut self)

source§

impl Eq for CoreProgram

source§

impl StructuralEq for CoreProgram

source§

impl StructuralPartialEq for CoreProgram

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for CoreProgram

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl VirtualMachineProgram for CoreProgram

source§

fn op(&mut self, op: CoreOp)

source§

fn std_op(&mut self, op: StandardOp) -> Result<(), Error>

source§

fn code(&self) -> Result<CoreProgram, StandardProgram>

source§

fn set_float_vector(&mut self, vector: Vec<f64>) -> Result<(), Error>

source§

fn set_vector(&mut self, vector: Vec<i64>)

source§

fn store_vector(&mut self, n: usize)

source§

fn load_vector(&mut self, n: usize)

source§

fn ffi_call(&mut self, ffi: FFIBinding) -> Result<(), Error>

source§

fn poke(&mut self) -> Result<(), Error>

source§

fn peek(&mut self) -> Result<(), Error>

source§

fn comment(&mut self, comment: &str)

source§

fn restore(&mut self)

source§

fn save(&mut self)

source§

fn ret(&mut self)

source§

fn where_is_pointer(&mut self)

source§

fn deref(&mut self)

source§

fn refer(&mut self)

source§

fn move_pointer(&mut self, cells: isize)

source§

fn set_register(&mut self, val: i64)

source§

fn set_float_register(&mut self, val: f64) -> Result<(), Error>

source§

fn begin_while(&mut self)

source§

fn begin_if(&mut self)

source§

fn begin_else(&mut self)

source§

fn begin_function(&mut self)

source§

fn end(&mut self)

source§

fn call(&mut self)

source§

fn index(&mut self)

source§

fn bitwise_nand(&mut self)

source§

fn get(&mut self, src: Input)

source§

fn put(&mut self, dst: Output)

source§

fn is_non_negative(&mut self)

source§

impl Eq for CoreProgram

source§

impl StructuralEq for CoreProgram

source§

impl StructuralPartialEq for CoreProgram

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -35,5 +35,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/vm/struct.StandardProgram.html b/docs/sage/vm/struct.StandardProgram.html index 9e30cf4b..0f0b1285 100644 --- a/docs/sage/vm/struct.StandardProgram.html +++ b/docs/sage/vm/struct.StandardProgram.html @@ -7,13 +7,13 @@
source

pub fn get_main_and_functions( self ) -> (Vec<StandardOp>, HashMap<i32, Vec<StandardOp>>)

Get the code outside of any functions, and the code for each function.

-

Trait Implementations§

source§

impl Clone for StandardProgram

source§

fn clone(&self) -> StandardProgram

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Default for StandardProgram

source§

fn default() -> StandardProgram

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for StandardProgram

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<CoreProgram> for StandardProgram

source§

fn from(core: CoreProgram) -> Self

Converts to this type from the input type.
source§

impl PartialEq for StandardProgram

source§

fn eq(&self, other: &StandardProgram) -> bool

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Clone for StandardProgram

source§

fn clone(&self) -> StandardProgram

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Default for StandardProgram

source§

fn default() -> StandardProgram

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for StandardProgram

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for StandardProgram

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<CoreProgram> for StandardProgram

source§

fn from(core: CoreProgram) -> Self

Converts to this type from the input type.
source§

impl PartialEq for StandardProgram

source§

fn eq(&self, other: &StandardProgram) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for StandardProgram

source§

fn partial_cmp(&self, other: &StandardProgram) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
source§

impl Serialize for StandardProgram

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl VirtualMachineProgram for StandardProgram

source§

fn op(&mut self, op: CoreOp)

source§

fn std_op(&mut self, op: StandardOp) -> Result<(), Error>

source§

fn code(&self) -> Result<CoreProgram, StandardProgram>

source§

fn set_float_vector(&mut self, vector: Vec<f64>) -> Result<(), Error>

source§

fn set_vector(&mut self, vector: Vec<i64>)

source§

fn store_vector(&mut self, n: usize)

source§

fn load_vector(&mut self, n: usize)

source§

fn ffi_call(&mut self, ffi: FFIBinding) -> Result<(), Error>

source§

fn poke(&mut self) -> Result<(), Error>

source§

fn peek(&mut self) -> Result<(), Error>

source§

fn comment(&mut self, comment: &str)

source§

fn restore(&mut self)

source§

fn save(&mut self)

source§

fn ret(&mut self)

source§

fn where_is_pointer(&mut self)

source§

fn deref(&mut self)

source§

fn refer(&mut self)

source§

fn move_pointer(&mut self, cells: isize)

source§

fn set_register(&mut self, val: i64)

source§

fn set_float_register(&mut self, val: f64) -> Result<(), Error>

source§

fn begin_while(&mut self)

source§

fn begin_if(&mut self)

source§

fn begin_else(&mut self)

source§

fn begin_function(&mut self)

source§

fn end(&mut self)

source§

fn call(&mut self)

source§

fn index(&mut self)

source§

fn bitwise_nand(&mut self)

source§

fn get(&mut self, src: Input)

source§

fn put(&mut self, dst: Output)

source§

fn is_non_negative(&mut self)

source§

impl StructuralPartialEq for StandardProgram

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +operator. Read more

source§

impl Serialize for StandardProgram

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl VirtualMachineProgram for StandardProgram

source§

fn op(&mut self, op: CoreOp)

source§

fn std_op(&mut self, op: StandardOp) -> Result<(), Error>

source§

fn code(&self) -> Result<CoreProgram, StandardProgram>

source§

fn set_float_vector(&mut self, vector: Vec<f64>) -> Result<(), Error>

source§

fn set_vector(&mut self, vector: Vec<i64>)

source§

fn store_vector(&mut self, n: usize)

source§

fn load_vector(&mut self, n: usize)

source§

fn ffi_call(&mut self, ffi: FFIBinding) -> Result<(), Error>

source§

fn poke(&mut self) -> Result<(), Error>

source§

fn peek(&mut self) -> Result<(), Error>

source§

fn comment(&mut self, comment: &str)

source§

fn restore(&mut self)

source§

fn save(&mut self)

source§

fn ret(&mut self)

source§

fn where_is_pointer(&mut self)

source§

fn deref(&mut self)

source§

fn refer(&mut self)

source§

fn move_pointer(&mut self, cells: isize)

source§

fn set_register(&mut self, val: i64)

source§

fn set_float_register(&mut self, val: f64) -> Result<(), Error>

source§

fn begin_while(&mut self)

source§

fn begin_if(&mut self)

source§

fn begin_else(&mut self)

source§

fn begin_function(&mut self)

source§

fn end(&mut self)

source§

fn call(&mut self)

source§

fn index(&mut self)

source§

fn bitwise_nand(&mut self)

source§

fn get(&mut self, src: Input)

source§

fn put(&mut self, dst: Output)

source§

fn is_non_negative(&mut self)

source§

impl StructuralPartialEq for StandardProgram

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -32,5 +32,5 @@ T: Clone,
§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

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

fn clone_into(&self, target: &mut T)

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

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

\ No newline at end of file + U: TryFrom<T>,
§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for T
where + T: for<'de> Deserialize<'de>,

\ No newline at end of file diff --git a/docs/sage/web/index.html b/docs/sage/web/index.html index d6649037..e578c2f9 100644 --- a/docs/sage/web/index.html +++ b/docs/sage/web/index.html @@ -271,6 +271,94 @@ main();`); break; + case "planets": + source.setValue(`from std.time import Instant, Date; +from std.physics import Point3D; +from std.physics.astronomy import Planet; + +fun main() { + let d = Date.date(2024, 9, 18); + print("On "); + d.print(); + println(); + + let instant = Instant.from_date(d); + + println("Position units are AU, with Sun at origin:"); + for let mut i=0; i<8; i+=1; { + let planet = Planet.PLANETS[i]; + planet.print(); + println(": ", planet.position_at_instant(instant) + .convert(m_to_au)); + } +} + +fun m_to_au(m: Float): Float { + return m / 149597870700.0; +} + +main();`); + break; + case "lunar": + source.setValue(`from std.time import Date, Weekday; +from std.physics.astronomy import MoonPhase; + +fun main() { + lunar_calendar(10, 2024); +} + +fun lunar_calendar(month: Int, year: Int) { + let d = Date.date(year, month, 1); + let start_weekday = d.weekday(); + + let days_in_month = d.days_in_month(); + + let mut day = 1; + let mut weekday = Weekday of Sunday; + println(" Lunar Calendar "); + print(" "); + d.print(); + println("\\n---------------------------------"); + println("Sun Mon Tue Wed Thu Fri Sat"); + let mut is_first_week = True; + while day <= days_in_month { + for let mut i=0; i<7; i+=1; { + if is_first_week && weekday.is_before(start_weekday) { + print(" "); + } else { + if day <= days_in_month { + if day < 10 { + print(" "); + } else { + print(""); + } + print(day); + MoonPhase.from_date(Date.date(year, month, day)).print(); + print(" "); + } + day += 1; + } + weekday = weekday.next(); + } + is_first_week = False; + println(); + } + + println("---------------------------------\n"); + println("Legend:"); + println("N: New Moon"); + println("W: Waxing Crescent"); + println("Q: First Quarter"); + println("G: Waxing Gibbous"); + println("F: Full Moon"); + println("g: Waning Gibbous"); + println("q: Last Quarter"); + println("w: Waning Crescent"); +} + +main();`); + break; + case "const-generics": source.setValue(`fun main() { // Create an array struct @@ -2348,27 +2436,39 @@
diff --git a/docs/sage/web/web_bg.wasm b/docs/sage/web/web_bg.wasm index fd2335e5..0368f721 100644 Binary files a/docs/sage/web/web_bg.wasm and b/docs/sage/web/web_bg.wasm differ diff --git a/docs/search-index.js b/docs/search-index.js index 8871aa85..9796e7a4 100644 --- a/docs/search-index.js +++ b/docs/search-index.js @@ -1,5 +1,5 @@ var searchIndex = new Map(JSON.parse('[\ -["sage",{"doc":"The Sage Programming Language","t":"SSSCCCCCCCEKEEEEEEGEEEEEEEEEPPPPPPNNNNNCMNNNNNNNNMCNNMCNMNCMNNNNNPPPPPPPPPPPPPPPPGFPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFNNNNNNNNNNNNNNNNNNNNNNNNNNNSPSSSSSSSPPGPSSNNNNNNNNNNNNNNNNNNNNNNNNNPPPPPPPPPPPPPPPPPPPPPGFPPPPPPPPPPPPPPPPPPPNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHFPPFPPPGPPPPPPPGPPPPPPFKPKPFFFFFFPPTTPPPPGKPPPGPPPPFPPTFPPGPPFPPPPPPPPPPFPGGPFPPPPPFKKPPPPPPPPPPPPPPPPPPPPPPPPPPTPPPPPPPPPPPPPPPPGPTFPPFPPPPPPFPPPFGPPPPPFPPPPFGPPPPPTKPPPFPPPPPPPPPPPTFPPKPPPPPGPPPKPPPTKPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOFNNNNNONNNNNONNNNNNOOOHHHHHNNNNNNCCFNNNNNNNNNNNNNNNONONONNNNNNNPPPPGPPPPPPPPPPFPPGPPPPPPPPPPGPPPPPPPPFGPPPPPPPPPPPPPPFGPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKKNNNNCMMMNMMMMNNNNNMCMMMMMFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPPPPPPPPPPPPPFGPFPPPKPPPPGPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPFFGFPPPPPFPPPKPPNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOMNNNONNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNMNNONNNNNNNMNNNMNNNMNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["LOGO","LOGO_WITH_COLOR","NULL","asm","frontend","lir","parse","side_effects","targets","vm","A","AssemblyProgram","B","C","CoreOp","CoreProgram","D","E","Error","F","FP","GP","Globals","Location","REGISTERS","SP","StandardOp","StandardProgram","UndefinedGlobal","UndefinedLabel","Unexpected","Unmatched","UnsupportedInstruction","VirtualMachineError","borrow","borrow_mut","clone","clone_into","comment","core","current_instruction","deref","deref_mut","drop","eq","fmt","fmt","from","from","get_op","globals","init","into","is_defined","location","log_instructions_after","op","partial_cmp","std","std_op","to_owned","to_string","try_from","try_into","type_id","Add","And","ArithmeticRightShift","Array","BitwiseAnd","BitwiseNand","BitwiseNor","BitwiseNot","BitwiseOr","BitwiseXor","Call","CallLabel","Comment","Compare","Const","Copy","CoreOp","CoreProgram","Dec","Div","DivRem","Else","End","Fn","Get","GetAddress","Global","If","Inc","Index","IsEqual","IsGreater","IsGreaterEqual","IsLess","IsLessEqual","IsNotEqual","LeftShift","LogicalRightShift","Many","Move","Mul","Neg","Next","Not","Or","Pop","PopFrom","Prev","Push","PushAddress","PushConst","PushTo","Put","Rem","Return","Set","SetLabel","Sub","Swap","VecAdd","VecAnd","VecArithmeticRightShift","VecBitwiseAnd","VecBitwiseNand","VecBitwiseNor","VecBitwiseNot","VecBitwiseOr","VecBitwiseXor","VecDec","VecDiv","VecGez","VecInc","VecIndex","VecLeftShift","VecLogicalRightShift","VecMul","VecNeg","VecNot","VecOffset","VecOr","VecRem","VecSet","VecSub","While","assemble","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","cmp","code","current_instruction","default","deref","deref","deref_mut","deref_mut","deserialize","deserialize","drop","drop","eq","eq","fmt","fmt","fmt","fmt","from","from","get_op","hash","hash","init","init","into","into","is_defined","new","op","partial_cmp","partial_cmp","push_string","put_string","serialize","serialize","stack_alloc_string","std_op","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","a","a","a","a","a","a","a","addr","b","b","b","b","b","b","b","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","name","offset","offset","offset","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","sp","sp","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","vals","vals","Globals","add_global","borrow","borrow_mut","clone","clone_into","default","deref","deref_mut","deserialize","drop","fmt","fmt","from","get_global","get_global_location","get_global_size","get_size","init","into","new","resolve","serialize","to_owned","to_string","try_from","try_into","type_id","A","Address","B","C","D","E","F","FP","GP","Global","Indirect","Location","Offset","REGISTERS","SP","borrow","borrow_mut","clone","clone_into","cmp","deref","deref","deref_mut","deserialize","drop","eq","fmt","fmt","from","hash","init","into","offset","partial_cmp","serialize","to_owned","to_string","try_from","try_into","type_id","ACos","ASin","ATan","Add","Alloc","Call","Const","CoreOp","Cos","Div","Free","IsGreater","IsLess","Mul","Neg","Pow","PushConst","Rem","Set","Sin","Sqrt","StandardOp","StandardProgram","Sub","Tan","ToFloat","ToInt","VecACos","VecASin","VecATan","VecAdd","VecCos","VecDiv","VecGez","VecMul","VecNeg","VecPow","VecRem","VecSet","VecSin","VecSub","VecTan","assemble","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","code","current_instruction","default","deref","deref","deref_mut","deref_mut","deserialize","deserialize","drop","drop","eq","eq","fmt","fmt","fmt","fmt","from","from","from","get_op","init","init","into","into","is_defined","new","op","partial_cmp","partial_cmp","serialize","serialize","std_op","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","a","a","b","b","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","size","size","size","size","size","size","size","size","size","size","size","size","size","size","src","src","src","src","src","src","src","src","src","src","src","src","src","vals","get_lisp_env","parse","parse_module","parse_source","Add","Add","Alt","And","Annotated","Annotated","Annotated","Annotation","Any","Any","Any","Apply","Apply","ApplyNonProc","ApplyNonTemplate","Arithmetic","Array","Array","Array","As","As","AssemblyError","Assign","AssignOp","AssignOp","BinaryOp","BinaryOp","BitwiseAnd","BitwiseNand","BitwiseNor","BitwiseNot","BitwiseOr","BitwiseXor","Bool","Bool","COMPILER_GENERATED","CONSTANT","Cell","Cell","Char","Char","Comparison","Compile","CompilePolyProc","CompilerGenerated","Const","ConstExpr","ConstExpr","ConstExpr","ConstParam","Constant","CoreBuiltin","CoreBuiltin","CouldntSimplify","DEAD_CODE","Data","DeadCode","Debug","Declaration","Declare","Declare","Delete","Deref","DerefMut","DerefNonPointer","Display","Divide","DuplicateMember","Enum","EnumUnion","EnumUnion","EnumUnion","Env","Equal","Error","Expr","ExternProc","FFIProcedure","FFIProcedure","Float","Float","FromImport","FromImportAll","Get","GetSize","GetType","GreaterThan","GreaterThanOrEqual","If","IfLet","Immutable","Impl","Index","Int","Int","InvalidAs","InvalidAssignOp","InvalidAssignOpTypes","InvalidBinaryOp","InvalidBinaryOpTypes","InvalidConstExpr","InvalidIndex","InvalidMatchExpr","InvalidMonomorphize","InvalidPatternForExpr","InvalidPatternForType","InvalidRefer","InvalidTemplateArgs","InvalidTernaryOp","InvalidTernaryOpTypes","InvalidUnaryOp","InvalidUnaryOpTypes","LIVE_CODE","LessThan","LessThanOrEqual","Let","Location","Many","Many","Many","Match","Member","Member","MemberNotFound","MismatchedMutability","MismatchedTypes","Module","Monomorphize","Multiply","Mutability","Mutable","NONE","Negate","NegativeArrayLength","Never","New","NonExhaustivePatterns","NonIntegralConst","NonSymbol","None","None","None","Not","NotEqual","Null","Of","Or","Pattern","Pointer","Pointer","Poly","PolyProc","PolyProc","PolyProcedure","Power","Proc","Proc","Proc","Procedure","Put","RecursionDepthConst","RecursionDepthTypeEquality","Refer","Remainder","Return","SIMPLIFY_RECURSION_LIMIT","Simplify","SizeOfExpr","SizeOfTemplate","SizeOfType","StandardBuiltin","StandardBuiltin","StaticVar","Struct","Struct","Struct","Struct","Subtract","Symbol","Symbol","Symbol","SymbolNotDefined","TEMPORARY","Tag","Template","Temporary","TernaryOp","TernaryOp","Tuple","Tuple","Tuple","Tuple","Type","Type","Type","Type","TypeCheck","TypeNotDefined","TypeOf","TypeRedefined","USER_GENERATED","UnaryOp","UnaryOp","UnexpectedConstParam","UnimplementedOperator","Union","Union","Union","Unit","UnsizedType","UnsupportedOperation","UnusedExpr","Var","VarPat","Variant","VariantNotFound","When","While","Wildcard","add","add","add_assign","add_associated_const","add_monomorphized_associated_consts","alt","and","annotate","annotate","annotate","app","app","apply","are_patterns_exhaustive","args","args","as_bool","as_char","as_float","as_int","as_symbol","as_type","as_type","assign","assign_op","bitand","bitnand","bitnor","bitnot","bitor","bitor","bitor_assign","bitxor","body","body","bool","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_cast_to","can_decay_to","can_decay_to","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile_expr","compile_expr","compile_expr","compile_expr","compile_expr","compile_expr","compile_expr","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","contains_symbol","debug","declare_let_bind","default","default","define_types","define_var","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","display","display","display","display","display","display","display","display","display","div","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equals","equals","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","field","field","float","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_mono","ge","get_all_associated_consts","get_args","get_associated_const","get_bindings","get_body","get_branch_result_type","get_common_name","get_mangled_name","get_method_call_mutability","get_monomorph_template_args","get_name","get_ret","get_self_param_mutability","get_size","get_size","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_template_params","get_type","get_type","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_of_associated_const","get_type_params","gt","hard_with","has_associated_const","has_element_type","has_location","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","idx","if_let_pattern","if_then","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","int","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_atomic","is_compiler_generated","is_concrete","is_const_param","is_constant","is_dead_code","is_exhaustive","is_location","is_method_call","is_monomorph_of","is_mutable","is_none","is_poly","is_recursive","is_recursive_helper","is_self_param_reference","is_simple","is_temporary","le","let_bind","let_const","let_consts","let_proc","let_procs","let_type","let_types","let_var","let_vars","location","lt","many","match_pattern","module","monomorphize","monomorphize","mul","name","name","name","name","name","name","name","name","name","name","neg","neq","new","new","new","new","not","or","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","perform_template_applications","pointer","pow","print","println","proc","push_label","refer","rem","ret","ret","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","set_common_name","simplify","simplify_checked","simplify_checked","simplify_checked","simplify_until_atomic","simplify_until_concrete","simplify_until_const_param","simplify_until_has_members","simplify_until_has_variants","simplify_until_matches","simplify_until_poly","simplify_until_simple","simplify_until_type_checks","simplify_until_union","size_of","strip_template","struct_","structure","sub","substitute","substitute","substitute","substitute","substitute","substitute","substitute","substitute","substitute","substitute_types","substitute_types","sym","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","transform_method_call","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tup","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unop","var","var","variant_index","while_loop","wildcard","with","with","with","with","module","names","expected","expected","expr","expr","expr","expr","found","found","found","patterns","SourceCodeLocation","borrow","borrow_mut","clone","clone_into","cmp","column","deref","deref_mut","deserialize","drop","eq","filename","fmt","from","get_code","hash","init","into","length","line","offset","parse_asm","parse_frontend","parse_frontend_minimal","parse_lir","parse_vm","partial_cmp","serialize","to_owned","try_from","try_into","type_id","ffi","io","FFIBinding","borrow","borrow_mut","clone","clone_into","cmp","deref","deref_mut","deserialize","drop","eq","fmt","fmt","from","hash","init","input_cells","into","name","new","output_cells","partial_cmp","serialize","to_owned","to_string","try_from","try_into","type_id","Accelerometer","Altimeter","AnalogPin","AnalogPin","Axis","Barometer","Bell","Black","Blower","Blue","BlueLight","Brightness","Brightness","Button","Buzzer","Channel","ClearDisplay","Clock","Color","Compass","ConductivitySensor","Cooler","Custom","Custom","Cyan","DPad","DepthSensor","DigitalPin","DigitalPin","Direction","Down","Fan","FlowSensor","Green","GreenLight","Gyroscope","Heater","Humidity","Input","InputMode","JoyStick","Keyboard","Left","Magenta","Magnetometer","Microphone","MotorSpeed","MoveCursorDown","MoveCursorLeft","MoveCursorRight","MoveCursorUp","Note","Odometer","Orange","Output","OutputMode","PHSensor","Position","Pressure","PressureGauge","PrinterChar","PrinterFloat","PrinterInt","Proximity","Pump","RGB","RainGauge","Random","Red","RedLight","Right","Servo","SetCursorChar","SetCursorColumn","SetCursorPixel","SetCursorRow","Solenoid","SpeakerFrequency","SpeakerVolume","Speedometer","StderrChar","StderrFloat","StderrInt","StdinChar","StdinFloat","StdinInt","StdoutChar","StdoutFloat","StdoutInt","StepperMotor","Temperature","Thermometer","UVSensor","Up","UpdateDisplay","Valve","VolumeSensor","WeightSensor","White","WindDirection","WindSpeed","X","Y","Yellow","Z","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","channel","channel","clock","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","eq","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","hash","hash","hash","hash","hash","hash","hash","hash","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","mode","mode","new","new","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","random","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","stderr_char","stderr_float","stderr_int","stdin_char","stdin_float","stdin_int","stdout_char","stdout_float","stdout_int","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","Architecture","CompiledTarget","build_core","build_op","build_std","build_std_op","c","declare_proc","end","get","indentation","name","op","peek","poke","post_funs","postlude","postop","pre_funs","prelude","put","sage_lisp","std_op","supports_floats","supports_input","supports_output","version","C","borrow","borrow_mut","declare_proc","default","deref","deref_mut","drop","end","from","get","init","into","name","op","peek","poke","post_funs","postlude","postop","prelude","put","std_op","supports_floats","supports_input","supports_output","try_from","try_into","type_id","version","SageLisp","borrow","borrow_mut","build_core","build_std","declare_proc","default","deref","deref_mut","drop","end","from","get","init","into","name","new","op","peek","poke","post_funs","postlude","postop","prelude","put","std_op","supports_floats","supports_input","supports_output","try_from","try_into","type_id","version","ACos","ASin","ATan","Add","Add","Alloc","And","ArithmeticRightShift","BitwiseAnd","BitwiseNand","BitwiseNot","BitwiseOr","BitwiseXor","Call","Call","Comment","CoreInterpreter","CoreOp","CoreOp","CoreProgram","Cos","Dec","Deref","Device","Div","Div","Else","End","Error","ExpectedCore","Free","Function","Get","If","Inc","Index","IsNonNegative","IsNonNegative","LeftShift","Load","LogicalRightShift","Move","Mul","Mul","Neg","Neg","Not","Offset","Or","Peek","Poke","Pow","Put","Refer","Rem","Rem","Return","Set","Set","Sin","StandardDevice","StandardInterpreter","StandardOp","StandardProgram","Store","Sub","Sub","Swap","Tan","TestingDevice","ToFloat","ToInt","UnsupportedInstruction","VirtualMachineProgram","Where","While","add_binding","as_float","as_int","begin_else","begin_function","begin_if","begin_while","bitwise_nand","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","call","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","code","code","code","comment","default","default","default","default","default","default","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","drop","end","eq","eq","eq","eq","eq","ffi","ffi_call","ffi_call","ffi_call","ffi_call","ffi_channel","flatten","flatten","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","get","get","get","get","get_functions","get_functions","get_main","get_main","get_main_and_functions","get_main_and_functions","hash","hash","index","init","init","init","init","init","init","init","init","init","input","into","into","into","into","into","into","into","into","into","is_non_negative","load_vector","move_pointer","new","new","new","new_raw","op","op","op","output","output_str","output_vals","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","peek","peek","peek","peek","poke","poke","poke","poke","put","put","put","put","refer","restore","ret","run","run","save","serialize","serialize","serialize","serialize","set_float_register","set_float_vector","set_register","set_vector","std_op","std_op","std_op","store_vector","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","where_is_pointer"],"q":[[0,"sage"],[10,"sage::asm"],[65,"sage::asm::core"],[207,"sage::asm::core::CoreOp"],[348,"sage::asm::globals"],[376,"sage::asm::location"],[416,"sage::asm::std"],[510,"sage::asm::std::StandardOp"],[565,"sage::frontend"],[569,"sage::lir"],[1917,"sage::lir::Declaration"],[1919,"sage::lir::Error"],[1929,"sage::parse"],[1962,"sage::side_effects"],[1964,"sage::side_effects::ffi"],[1992,"sage::side_effects::io"],[2298,"sage::targets"],[2325,"sage::targets::c"],[2355,"sage::targets::sage_lisp"],[2388,"sage::vm"],[2700,"alloc::string"],[2701,"core::fmt"],[2702,"core::fmt"],[2703,"core::option"],[2704,"core::cmp"],[2705,"core::any"],[2706,"serde::de"],[2707,"core::hash"],[2708,"alloc::vec"],[2709,"alloc::string"],[2710,"sage_lisp"],[2711,"core::convert"],[2712,"alloc::boxed"],[2713,"alloc::collections::btree::map"],[2714,"std::collections::hash::map"],[2715,"std::collections::hash::set"],[2716,"core::ops::function"]],"d":["The UNICODE character art for the logo of the language.","The UNICODE character art for the logo of the language, …","The value of the NULL pointer constant.","Assembly Module","","LIR (Low Intermediate Representation) Module","Parsing Module","Side Effects Module","Targets Module","Virtual Machine Module","","A frontend to both the CoreProgram and StandardProgram …","","","","","","","An error generated by assembling some assembly language …","","","","","","","","","","The given global was not defined.","The given label was not defined.","The given instruction was not expected, or cannot be used …","The given instruction did not have a matching “end”. …","Is this standard assembly operation supported by the …","An error generated by the virtual machine.","","","","","Insert a comment into the program.","Core Assembly Variant","Get the current instruction number.","","","","","","","","Returns the argument unchanged.","Get the operation at the given instruction number.","Assembly Global Variables","","Calls U::from(self).","Is the given label defined yet in the operations? I.E., …","Assembly Memory Location","Log all the instructions after the given instruction …","Insert a core operation into the program.","","Standard Assembly Variant","Attempt to insert a standard operation into the program. …","","","","","","Add an integer value from a source location to a …","Logical “and” a destination with a source value.","Arithmetic right shift a destination by a source value. …","Store a list of values at a source location. Then, store …","","","","","","","Get a value in memory and call it as a label ID.","Call a function with a given label.","","Store the comparison of “a” and “b” in a …","Write a set of values to a memory location.","Copy a number of cells from a source referenced location …","A core instruction of the assembly language. These are …","An assembly program composed of core instructions, which …","Decrement the integer value of a location.","Divide a destination location by a source value.","Divide a destination location by a source value. Store the …","Add an “else” clause to an “if the value is not zero…","Terminate a function declaration, a while loop, an if …","Declare a new label.","Get a value from the input device / interface and store it …","Get the address of a location, and store it in a …","Declare a global variable.","Begin an “if the value is not zero” statement over a …","Increment the integer value of a location.","Get the address of a location indexed by an offset stored …","Perform dst = a == b.","Perform dst = a > b.","Perform dst = a >= b.","Perform dst = a < b.","Perform dst = a <= b.","Perform dst = a != b.","Left shift a destination by a source value.","Logical right shift a destination by a source value. This …","Many instructions to execute; conveniently grouped …","Copy a value from a source location to a destination …","Multiply a destination location by a source value.","Negate an integer.","Make this pointer point to the next cell (or the nth next …","Replace a value in memory with its boolean complement.","Logical “or” a destination with a source value.","Pop a number of cells from the stack and store it in a …","Pop a number of cells from a specified stack and store it …","Make this pointer point to the previous cell (or the nth …","Push a number of cells starting at a memory location on …","Get the address of a location and push it to the stack.","Push a const to the stack.","Push a number of cells starting at a memory location onto …","Put a value from a source register to the output device / …","Store the remainder of the destination modulus the source …","Return from the current function.","Set the value of a register, or any location in memory, to …","Set the value of a register, or any location in memory, to …","Subtract a source integer value from a destination …","Swap the values of two locations.","Perform a SIMD addition over a vector of integers. This …","Perform a vector “And” operation. This will perform a …","Perform a SIMD arithmetic right shift operation over a …","","","","","","","Decrement a vector of integers.","Perform a SIMD division over a vector of integers. This …","Perform a SIMD “is >= zero” operation over a vector of …","Increment a vector of integers.","Perform a SIMD pointer index operation over a vector of …","Perform a SIMD left shift operation over a vector of …","Perform a SIMD logical right shift operation over a vector …","Perform a SIMD multiplication over a vector of integers. …","Negate a vector of integers using SIMD.","Perform a vector “Not” operation. This will replace …","Perform a SIMD pointer arithmetic operation over a vector …","Perform a vector “Or” operation. This will perform a …","Perform a SIMD remainder over a vector of integers. This …","Set the vector values of a destination.","Perform a SIMD subtraction over a vector of integers. This …","Begin a “while the value is not zero” loop over a …","Assemble a program of core assembly instructions into the …","","","","","","","","","","","The list of core assembly instructions in the program.","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","Calls U::from(self).","Calls U::from(self).","","Create a new program of core assembly instructions.","","","","Push a string literal as UTF-8 to the stack.","Put a string literal as UTF-8 to the output device.","","","Allocate a string on the stack, and store its address in a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A lookup for all the global variables in an assembly …","Add a global variable to the list of globals.","","","","","Create a new empty Globals lookup.","","","","","","","Returns the argument unchanged.","Get the location, and size of a global variable.","Get the location of a global variable.","Get the size of a global variable. This is the number of …","Get the size of the global variables. This is the number …","","Calls U::from(self).","Create a new empty Globals lookup.","Resolve the global variables in a location to produce an …","","","","","","","The “A” general purpose register.","A fixed position in the tape (a constant address known at …","The “B” general purpose register.","The “C” general purpose register.","The “D” general purpose register.","The “E” general purpose register.","The “F” general purpose register.","The frame pointer register.","The Global Pointer register. This is used to access global …","A global variable.","Use the value of a cell on the tape as an address. For …","A location in memory (on the tape of the virtual machine).","Go to a position in memory, and then move the pointer …","","The stack pointer register.","","","","","","Get the location of the value pointed to by this location.","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","Get the location offset by a constant number of cells from …","","","","","","","","Perform inverse Cos on a cell (float) and store the result …","Perform inverse Sin on a cell (float) and store the result …","Perform inverse Tan on a cell (float) and store the result …","Add the source cell (float) to the destination cell …","Take the value in the operand cell. Allocate that number …","Call a foreign function.","Write some constant values to a location on the tape","Execute a core instruction.","Perform Cos on a cell (float) and store the result in the …","Divide the destination cell (float) by the source cell …","Free the memory allocated at the address stored in the …","Perform dst = a > b.","Perform dst = a < b.","Multiply the source cell (float) by the destination cell …","Negate the value of a cell (float) and store the result in …","Raise a cell (float) to the power of another cell (float).","Push some constant values to the stack.","Perform the modulo operation on the destination cell …","Set the value of a cell to a constant float.","Perform Sin on a cell (float) and store the result in the …","Take the square root of a cell (float).","A standard instruction of the assembly language. These are …","A program composed of standard instructions, which can be …","Subtract the source cell (float) from the destination cell …","Perform Tan on a cell (float) and store the result in the …","Take the integer value stored in a cell and store the …","Take the float value stored in a cell and store the …","Perform a SIMD floating point inverse cosine operation.","Perform a SIMD floating point inverse sine operation.","Perform a SIMD floating point inverse tangent operation.","Perform a SIMD floating point addition operation.","Perform a SIMD floating point cosine operation.","Perform a SIMD floating point division operation.","Perform a SIMD floating point greater than or equal to …","Perform a SIMD floating point multiplication operation.","Perform a SIMD floating point negation operation.","Perform a SIMD floating point power operation.","Perform a SIMD floating point remainder operation.","Set the vector values of a destination.","Perform a SIMD floating point sine operation.","Perform a SIMD floating point subtraction operation.","Perform a SIMD floating point tangent operation.","Assemble the program into a virtual machine program.","","","","","","","","","The list of standard assembly instructions in the program.","Get the current instruction number.","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Get the operation at the given instruction number.","","","Calls U::from(self).","Calls U::from(self).","Is the given label defined yet in the operations?","Create a new program of core assembly instructions.","Add a core operation to the program.","","","","","Add a standard operation to the program.","","","","","","","","","","","The first cell in the comparison (left hand side).","The first cell in the comparison (left hand side).","The second cell in the comparison (right hand side).","The second cell in the comparison (right hand side).","The beginning of the constant data.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The source cell.","The source cell.","The source cell.","The source cell.","The source cell.","The source cell.","","","","","","","","The constant data.","","","","","","","","A boolean “And” operation between two values.","An error with some annotation about the source code that …","","An expression along with data about its source code …","An annotation for metadata about an LIR expression. This …","The expression equal to any other expression.","Unchecked access to a value. This is used to override …","A type reserved by the compiler. This type is equal to any …","Apply a function with some arguments.","A type that constructs a concrete type from a polymorphic …","Tried to apply a non-procedure to some arguments.","Tried to apply a non-template type to some arguments.","An arithmetic operation.","An array of constant values.","An array of expressions.","An array of a given type, with a constant size.","Cast a constant expression to another type.","Cast an expression to another type.","An error caused by trying to assemble invalid code …","An assignment operation. This is used to implement …","A trait used to implemented an assignment operation.","Perform an assignment operation on two expressions.","A trait used to implement a binary operation.","Perform a binary operation on two expressions.","A boolean “BitwiseAnd” operation between two values.","A boolean “BitwiseNand” operation between two values.","A boolean “BitwiseNor” operation between two values.","","A boolean “BitwiseOr” operation between two values.","A boolean “BitwiseXor” operation between two values.","A constant boolean value.","The type of a boolean value.","An annotation for compiler-generated code.","An annotation for a constant.","A constant integer value representing a cell on the tape.","The type of the most basic unit of memory.","A constant chararacter.","The type of a character.","A comparison operation between two values.","A trait which allows an LIR expression to be compiled to …","Tried to compile a polymorphic procedure without …","Is this expression compiler-generated?","A constant expression.","A compiletime expression.","A constant expression.","","A constant literal used in a type expression, like a …","Is this expression a constant?","A builtin pseudo-procedure implemented in the core …","A builtin implemented in handwritten core assembly.","Recursion depth exceeded when trying to confirm a type’s …","An annotation for dead code.","Get the Union data associated with a tagged union …","Is this expression dead code?","","A declaration of a variable, function, type, etc.","Bind a list of types in a constant expression.","Declare any number of variables, procedures, types, or …","","Dereference this expression (i.e. get the value it points …","Store an expression to an address (a pointer).","Tried to dereference a non-pointer.","","","Duplicate implementations of a member for a type","An enumeration of a list of possible named values. A …","A tagged union of constant values.","A tagged union: a typechecked union of different variants. …","An enumeration of a list of possible types. This is a sum …","An environment under which expressions and types are …","","An LIR compilation error.","TODO: Add variants for LetProc, LetVar, etc. to support …","A foreign function declaration.","A typed procedure which calls a foreign function. This is …","A foreign function interface binding.","A constant floating point value.","The floating-point number type.","Import an element from a module.","","","Get the size of something in memory (number of cells).","Get the type associated with a value under a given …","","","An if-then-else expression.","An if-let expression.","Immutable access to a value. This is the default way to …","Declare associated constants and procedures for a type.","Index an array or pointer with an expression that …","A constant integer value.","The integer type.","Invalid type casting expression.","Invalid assignment operation (assign, add_assign, …","Invalid assign op types (incorrect types).","Invalid binary operation (add, subtract, and, or) …","Invalid binary op types (incorrect types).","Invalid constant expression.","Invalid Index expression (incorrect types).","Tried to match over an expression that cannot be matched …","Cannot monomorphize a constant expression.","Tried to use a pattern that is not valid for the given …","Tried to use a pattern that is not valid for the given …","Invalid Refer expression. The compiler was not able to …","Invalid number of template arguments to a type.","Invalid ternary operation (if) expression (incorrect …","Invalid ternary op types (incorrect types).","Invalid unary operation (negate, not) expression …","Invalid unary op types (incorrect types).","An annotation for live code.","","","Bind a type to a name in a temporary scope.","The source code location of the expression.","Many annotations can be attached to an expression. This is …","Many declarations.","A block of expressions. The last expression in the block …","A match expression.","Get an attribute of a constant expression.","Get a field or member from a structure, union, or tuple. …","Tried to access an undefined member of a tuple, struct, or …","Mismatched mutability","Mismatched types","Declare a module","Monomorphize a constant expression with some type …","","Mutability of a pointer. This is used to provide type …","Mutable access to a value.","A constant expression that evaluates to None. This …","","Tried to create an array with a negative length.","The type of an expression that will never return, or doesn…","","Invalid pattern for a match expression.","Got another type when expecting an integer, bool, or char.","Expected a symbol, but got something else.","No annotation.","The unit, or “void” instance.","The type of void expressions.","A boolean “Not” operation on a value.","","The null pointer constant.","A constant enum variant.","A boolean “Or” operation between two values.","A pattern which can be matched against an expression.","","A pointer to another type.","A polymorphic, parametric type. This type is used with the …","A polymorphic procedure.","A polymorphic procedure declaration.","A polymorphic procedure of LIR code which can be applied …","","A procedure.","A procedure declaration.","A procedure with a list of parameters and a return type.","A monomorphic procedure of LIR code which can be applied …","Print a value to a given output.","Recursion depth exceeded when trying to evaluate a …","Recursion depth exceeded when trying to confirm a type’s …","Reference this expression (i.e. get a pointer to it).","","Return a value from a function.","This is the maximum number of times a type will be …","Simplify an expression while maintaining structural …","Get the size of an expression’s type (in cells) as a …","Tried to get the size of a template type.","Get the size of a type (in cells) as a constant int.","A builtin pseudo-procedure implemented in the standard …","A builtin implemented in handwritten standard assembly.","A static variable declaration.","A structure of constant values.","A structure of fields to expressions.","","A tuple with named members. This is a product type.","","A named constant.","","A named type.","A symbol was used, but not defined.","An annotation for a temporary.","Get the Enum value of the tag associated with a tagged …","","Is this expression a temporary?","A trait used to implement a ternary operation.","Perform a ternary operation on three expressions.","A tuple of constant values.","A tuple of expressions.","","A heterogenous collection of types. This is a product type.","The representation of a type in the LIR type system.","A type as a constant expression.","A type declaration.","A trait object. This is internally represented as an …","A trait used to enforce type checking.","A type was used, but not defined.","Get the type of an expression. (as an array of chars)","Tried to define a type that already exists.","An annotation for user-generated code.","A trait used to implement a unary operation.","Perform a unary operation on two expressions.","An error caused by unexpectedly passing a constant …","","A union of constant values.","A union: a collection of named fields. The Type value is …","A union of a list of possible types mapped to named …","This type is identified by its name. Most types are …","Tried to instantiate a type that cannot be sized. This is …","Expression uses an operation unsupported by the target.","Unused expression returned a non-None value.","A variable declaration.","A variable declaration with a pattern.","","The variant of an enum is not defined.","A constant, compile time if-then-else expression.","Create a while loop: while the first expression evaluates …","","","Add this expression to another.","","","Add monomorphized methods for a given monomorph of a …","Construct a new pattern which binds to several alternate …","Logical and this expression with another.","Annotate an error with some metadata.","Annotate this constant expression with a source code …","An annotated expression with some metadata.","Apply this procedure or builtin to a list of expressions …","Apply this expression as a procedure to some arguments.","Apply this template type with some type arguments.","This associated function returns whether or not a set of …","The arguments of the builtin. These will be typechecked …","The arguments of the builtin. These will be typechecked …","Try to get this constant expression as a boolean value.","Try to get this constant expression as a character.","Try to get this constant expression as a float.","Try to get this constant expression as an integer.","Try to get this constant expression as a symbol (like in …","Cast an expression as another type.","Cast an expression as another type.","Perform an AssignOp on this expression.","Perform an AssignOp on this expression.","BitwiseAnd this expression with another.","BitwiseOr this expression with another.","BitwiseAnd this expression with another.","BitwiseAnd this expression with another.","","BitwiseOr this expression with another.","","Bitwise this expression with another.","The list of assembly instructions to be pasted into the …","The list of assembly instructions to be pasted into the …","Construct a new pattern which matches a constant boolean.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Checks if the operation can be applied to the given types.","Checks if the operation can be applied to the given type.","Checks if the operation can be applied to the given types.","Checks if the operation can be applied to the given types.","","","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Can this type be cast to another type?","Can a pointer of this mutability decay to a pointer of …","Can this type decay into another type?","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Clones the operation into a boxed trait object.","Clones the operation into a boxed trait object.","Clones the operation into a boxed trait object.","Clones the operation into a boxed trait object.","","","","Clone this operation into a trait object.","Clone this binary operation into a box.","Clone this binary operation into a box.","Clone this binary operation into a box.","","Clone this binary operation into a box.","Clone this binary operation into a box.","","Clone this operation into a box.","Clone this operation into a box.","Clone this binary operation into a box.","Clone this operation into a box.","Clone this operation into a box.","Clone this operation into a box.","Clone this operation into a box.","Clone this operation into a box.","Clone this operation into a box.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Compile the expression into an assembly program.","Compile the expression into an assembly program.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expression.","Compiles the operation on the given expression.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compile the assignment operation.","","","","","","","","","","Compiles the operation on the given types. (Generates the …","Compiles the operation on the given type. (Generates the …","Compiles the operation on the given types. (Generates the …","Compiles the operation on the given types. (Generates the …","","","Compile the binary operation.","Compile the assignment operation.","Compile the binary operation.","Compile the binary operation.","Compile the binary operation.","","Compile the binary operation.","Compile the binary operation.","Compile the binary operation.","Compile the unary operation.","Compile the unary operation.","Compile the binary operation.","Compile the binary operation.","Compile the unary operation.","Compile the unary operation.","Compile the unary operation.","Compile the unary operation.","Compile the unary operation.","Does this type contain a symbol with the given name? This …","","Let-bind the pattern to the given expression. This will …","","","Define multiple types with the given names under this …","Define a variable in the current scope. This will …","","","","","","Dereference this expression (i.e. get the value it points …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Dereference this expression (i.e. get the value it points …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","","Divide this expression by another.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Is this expression greater than another?","","","","","","","","","","","","","","","","","","","","","","","","","","","Are two types structurally equal?","Evaluates the operation on the given constant expressions.","Evaluates the operation on the given constant expression.","Evaluates the operation on the given constant expressions.","Evaluates the operation on the given constant expressions.","Evaluate this constant expression at compile time, and get …","","","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Get a field from a structure, union, or tuple.","Get a field from a structure, union, or tuple.","Construct a new pattern which matches a constant float.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","","","Returns the argument unchanged.","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Is this expression greater than or equal to another?","","Get the arguments of the procedure.","","Get the map of new variables and their types which are …","Get the body of the procedure.","Get the type of a branch with a given expression matched …","Get the name of the procedure known to the LIR front-end.","Get the mangled name of the procedure. The procedure’s …","","Get the template arguments for the monomorph (this type) …","Get the name of this polymorphic procedure. This is not …","Get the return type of the procedure.","Get the first argument’s mutability (if it is a pointer)","Get the size of something in memory (number of cells).","Get the size of something in memory (number of cells).","Get the size of something in memory, but limit the number …","","","","","","","","","Get the template parameters for this template type.","Get the type associated with a value under a given …","Get the type associated with a value under a given …","Get the type of a value under a given environment and check","","","","","","","","Get the type of an associated constant of a type.","","Is this expression greater than another?","","","Does this type have an element type matching the supplied …","Does this annotation have a location?","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Index an array or pointer with an expression that …","Generate an if letexpression, which matches a given expr, …","Create an if-then-else statement with this expression as …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Construct a new pattern which matches a constant integer.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Is this type an irreducible, atomic type?","Is this compiler-generated?","Is this type simplified enough to get information about …","Is this type a constant parameter?","Is this data protected against mutation?","Is this dead code?","Is this pattern exhaustive?","Is this annotation a location?","","Is this type a monomorph of a given template type?","Can this data be accessed mutably?","Is this annotation none?","Is this a polymorphic function?","","Is this type recursive?","Is first argument of function a reference?","Is this type in a simple form? A simple form is a form …","Is this a temporary?","Is this expression less than or equal to another?","Create a let-bound type.","Create a let binding for a constant expression.","Create several const bindings at onces.","Create a proc binding for a procedure.","Create several proc bindings at onces.","Create a let binding for an type.","Create several type bindings at onces.","Create a let binding for an expression.","Create a let binding for an expression, and define …","Get the location of this annotation.","Is this expression less than another?","Create a collection of declarations","Generate an expression which evaluates a match expression, …","Create a module with a given name and a list of …","","Take some type arguments and produce a monomorphized …","Multiply this expression by another.","","","","","","","","","The name of the builtin. This isn’t used in compilation, …","The name of the builtin. This isn’t used in compilation, …","Get the remainder of this expression divided by another.","Is this expression greater than or equal to another?","Create a new assignment operation.","Create a new FFI procedure.","Construct a new procedure with a given list of arguments …","Construct a new polymorphic procedure with type …","Logical not this expression.","Logical or this expression with another.","","","","","","","","","","","","","","","","","","","","","","","Perform type applications if possible.","Construct a new pattern which matches a pointer.","Get the power of this expression to another.","","","Construct a procedure.","Push this procedure’s label to the stack.","Reference this expression (i.e. get a pointer to it).","Get the remainder of this expression divided by another.","The return value the builtin will leave on the stack after …","The return value the builtin will leave on the stack after …","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expression.","Gets the type of the operation on the given expression.","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expressions.","","","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","","","","","","","","","","","","","This is just for debugging purposes. This sets the common …","Simplify an expression while maintaining structural …","Simplify an expression while maintaining structural …","","","","Simplify until the type is concrete.","Simplify until the type is concrete.","Simplify a type until you can get its members.","Simplify a type until you can get its variants.","Simplify an expression until it matches a given function …","Simplify until the type is a polymorphic type.","","Simplify until the type passes the type checker.","Simplify a type until it’s a union.","Get the size of an expression.","Strip the template arguments to get the inner type","Construct a new pattern which matches a struct with a …","Create a structure of fields to expressions.","Subtract an expression from this expression.","Substitute a type for a given name in the environment.","","Substitute a type in a given expression.","","","","","","Substitute all occurences of a symbol with another type. …","","","Construct a new pattern which matches a symbol with a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Construct a new pattern which matches a tuple of patterns.","Type check the expression.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expression.","Typechecks the operation on the given expression.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expressions.","","","","Type-check a pattern match of an expression against this …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Apply a unary operation to this expression.","Evaluate a variable in the current scope.","Evaluate a variable in the current scope.","Calculate the integral value of a variant in an enum.","Create a while statement with this expression as the …","Construct a new pattern which matches any expression.","Return this expression, but with a given declaration in …","Return this expression, but with a given declaration in …","","","","","","","","","","","","","","","A struct representing a location in the source code. This …","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","Parse Core and Standard variants of assembly source code. …","Parse frontend sage code into an LIR expression.","","Parse LIR code as an LIR expression.","Parse Core and Standard variants of virtual machine source …","","","","","","","Foreign Function Interface","I/O Module","This is an FFI binding, which is used to call a foreign …","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","Create a new FFI binding.","","","","","","","","","Input from an accelerometer (in meters per second per …","Input from altitude sensor (in meters)","Electrical device input modes (These should typically be …","Electrical device output modes Set the voltage of a given …","The different axes an input or output might use.","Input from a barometer (pressure in atmospheres)","Ring a bell (in hertz)","Black","Set the pressure of a given blower (in atmospheres)","Blue","Blue light intensity (in lux)","Input from a light sensor (in lux)","Lighting device output modes Set the brightness of a given …","Input from a button (0=not pressed, 1=pressed)","Sound output modes Ring a given buzzer (in hertz)","The channel to use for a given I/O mode.","Clear the display","Physical sensor input modes (These should typically be …","The different output colors a program might use.","Input from a compass (degrees)","Input from a conductivity sensor (in siemens per meter)","Turn a cooler on or off (0=off, 1=on)","Custom output modes A custom input mode (for use with a …","Custom output modes A custom output mode (for use with a …","Cyan","User input modes (These should typically be used for games …","Input from depth sensor (in meters)","Input from a digital input (0=low, 1=high)","Set the state of a given digital output (0=low, 1=high)","The different directions a D-Pad a might use.","","Set the pressure of a given fan (in atmospheres)","Input from a flow sensor (in liters per second)","Green","Green light intensity (in lux)","Input from a gyroscope (in degrees per second) around a …","Turn a heater on or off (0=off, 1=on)","Input from a humidity sensor (in percent)","An input source for a program.","The different types of input modes a program might use.","Input from a JoyStick the degree of displacement in a …","Input from keyboard (ASCII character)","","Magenta","Input from a magnetometer (in teslas) in a given axis","Input from a microphone (frequency in hertz)","Set the speed of a given motor (in revolutions per minute)","Move the cursor down on the display","Move the cursor left on the display","Move the cursor right on the display","Move the cursor up on the display","Play a given note (in hertz)","Input from an odometer (in meters)","Orange","An output destination for a program.","The different types of output modes a program might use.","Input from a pH sensor (in pH)","Input from a position sensor in a given axis (x, y, z)","Set the pressure of a given vacuum/pressurizer …","Engineering / Science sensor input modes Input from a …","Alternative output modes for standard output Printer …","Printer (float)","Printer (integer)","Input from a distance sensor (in meters)","Set the pressure of a given pump (in atmospheres)","RGB ","Input from a rain gauge (in millimeters)","Special input modes A random number","Red","Environment sensor input modes (These should typically be …","","Set the position of a given servo (in radians)","Write a character to the display","Set the cursor column on the display","Set the color of a given pixel on the display","Set the cursor row on the display","Set the polarity of a solenoid (0=off, 1=on)","Set the frequency of a given speaker (in hertz)","Set the volume of a given speaker (in percent)","Navigation input modes (These should typically be …","Standard error (ASCII character)","Standard error (float)","Standard error (integer)","Standard input modes (The standard interface is typically …","Standard input (float)","Standard input (integer)","Standard output modes Standard output (ASCII character)","Standard output (float)","Standard output (integer)","Robotics device output modes Set the position of a given …","Set the temperature of a given heating/cooling device …","Input from a thermometer (degrees K)","Input from a UV sensor (in watts per square meter)","","Display output modes Update the display","Set the position of a given valve (0=closed, 1=open)","Input from a volume sensor (in liters)","Input from a weight sensor (in kilograms)","White","Input from a wind direction sensor (in degrees)","Input from a wind speed sensor (in meters per second)","","","Yellow","","","","","","","","","","","","","","","","","","The channel to use for the input.","The channel to use for the output.","The time (in seconds) since the program started","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","The mode of the input.","The mode of the output.","Create a new input source.","Create a new output destination.","","","","","","","","","A random number","","","","","","","","","Output to STDERR (ASCII character)","Output to STDERR (float)","Output to STDERR (integer)","Input from STDIN (ASCII character)","Input from STDIN (float)","Input from STDIN (integer)","Output to STDOUT (ASCII character)","Output to STDOUT (float)","Output to STDOUT (integer)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A trait for a target architecture to be compiled to.","Implement a compiler for the given target.","Compile the core variant of the machine code (must be …","","Compile the standard variant of the machine code (should …","","C Target","Compile the declaration of a procedure.","Compile an End instruction (with the matching If or While …","Get a value from the given input stream (mode + channel).","The string used for indentation.","The name of the target architecture.","Compile a CoreOp instruction.","Peek a value from the device connected to the program.","Poke a value to the device connected to the program.","The code after the function definitions.","The code after the program ends.","The code after each instruction.","The code before the function definitions.","The code before the program starts.","Put a value to the given output stream (mode + channel).","C Target","Compile a StandardOp instruction.","Whether or not the target architecture supports floating …","Whether or not the target architecture supports the given …","Whether or not the target architecture supports the given …","The version of the target architecture.","The type for the C target which implements the Target …","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","The type for the C target which implements the Target …","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","Store the inverse-cosine of the register (as a float) into …","Store the inverse-sine of the register (as a float) into …","Store the inverse-tangent of the register (as a float) …","Add the value pointed to on the tape to the register. The …","Add the value pointed to on the tape to the register (as …","Take the value of the register, and allocate that number …","Boolean-and the register and the value pointed to on the …","Interpret the register’s value as a signed integer. …","Perform bitwise and on the cell and the value pointed to …","Perform bitwise nand on the cell and the value pointed to …","Bitwise not the register. Store the result in the register.","Perform bitwise or on the cell and the value pointed to on …","Perform a bitwise xor on the cell and the value pointed to …","Calls the nth function defined in the program, where n is …","Call a foreign function interface function.","A comment in the machine code (not in the compiled output).","The interpreter which runs the virtual machine program.","An individual core virtual machine instruction.","Execute a core instruction.","A program of only core virtual machine instructions.","Store the cosine of the register (as a float) into the …","Decrement the register.","The pointer is made equal to the value pointed to on the …","Create an input / output device for the virtual machine …","Divide the register by the value pointed to on the tape. …","Divide the register by the value pointed to on the tape …","Begin an “else” conditional.","End a conditional.","An error generated by the virtual machine.","When the virtual machine attempts to get the program as …","Free the memory pointed to by the register.","Create a new function.","Get a value from an input source and store it in the …","Begin an “if the register is not zero” conditional.","Increment the register. The argument is the size of the …","Interpret the register’s value as a pointer to a cell. …","Make the register equal to 1 if the register is …","Make the register equal to the integer 1 if the register …","Left shift the cell by the value pointed to on the tape. …","Store the value pointed to on the tape to the register.","Logical right shift the cell by the value pointed to on …","Move the pointer on the tape by a number of cells.","Multiply the register by the value pointed to on the tape. …","Multiply the register by the value pointed to on the tape …","Negate the register. The argument is the size of the …","Negate the value of the register (as a float).","Boolean-not the register (0 if the register is non-zero, 1 …","Interpret the register’s value as a pointer to a cell. …","Boolean-or the register and the value pointed to on the …","Get a value from the input interface / device and store it …","Write the value of the register to the output interface / …","Store the value of the register (as a float) to the power …","Write the value of the register to an output source.","The last “deref” operation is undone; the pointer is …","Store the remainder of the register and the value pointed …","Store the remainder of the register and the value pointed …","Return from the current function.","Set the register equal to a constant value.","Set the register equal to a constant floating point value.","Store the sine of the register (as a float) into the …","A device used for standard input and output. This simply …","The interpreter which runs the standard variant of virtual …","An individual standard virtual machine instruction.","A program of core and standard virtual machine …","Store the register to the value pointed to on the tape.","Subtract the value pointed to on the tape from the …","Subtract the value pointed to on the tape from the …","Swap the value of the register with the value pointed to …","Store the tangent of the register (as a float) into the …","A device used for testing the compiler. This simply keeps …","Convert the register from an integer to a float.","Convert the register from a float to an integer.","When an instruction is unsupported for a given …","An interface to conveniently create virtual machine …","Store the value of the pointer to the register.","Begin a “while the register is not zero” loop.","","A function to reinterpret the bits of an integer as a …","A function to reinterpret the bits of a float as an …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","FFI call to the device. This will get the FFI binding for …","","","","","Flatten a core program so that all of its functions are …","Flatten a core program so that all of its functions are …","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the next input (from a given input source).","","","","Get the code for each function.","Get the code for each function.","Get the code outside of any functions.","Get the code outside of any functions.","Get the code outside of any functions, and the code for …","Get the code outside of any functions, and the code for …","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","Create a new testing device with some given sample input.","","","","","","Get the output of the testing device as a string (ascii).","","","","","","","Peek at the next value in the FFI buffer for the FFI …","","","","Poke a value into the FFI buffer for the FFI function …","","","","Put the given value to the given output destination.","","","","","","","Run a core program using this interpreter and its device.","Run a core program using this interpreter and its device.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,3,0,3,1,1,1,1,1,1,1,1,3,0,1,1,3,0,3,3,1,0,3,1,1,1,1,1,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,17,17,10,17,10,17,10,17,10,17,10,17,17,17,17,10,17,10,17,10,17,10,17,10,17,17,10,10,17,10,17,17,10,17,10,17,10,17,17,17,17,10,10,10,17,10,10,17,17,10,17,10,17,10,17,10,17,10,107,108,109,110,111,112,113,114,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,107,108,109,110,111,112,113,147,148,149,150,151,152,153,154,155,156,157,158,159,160,117,144,145,160,116,124,125,126,127,128,131,132,133,134,135,139,140,141,142,143,144,145,161,146,154,155,156,157,158,159,161,146,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,136,137,138,139,140,141,142,145,161,147,149,150,151,152,153,154,155,156,157,158,147,148,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,25,0,0,0,0,0,0,0,25,25,0,25,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,28,28,11,28,11,28,11,28,11,28,28,28,28,11,28,11,28,11,28,11,28,11,28,28,11,11,28,28,11,28,28,11,28,11,28,28,28,28,11,28,11,28,28,11,28,11,28,11,28,11,28,11,162,163,162,163,164,165,166,167,168,169,170,162,163,171,172,173,174,175,176,177,178,179,180,181,182,183,184,171,172,173,174,175,176,177,178,179,180,181,182,183,184,165,166,167,168,169,170,171,172,173,174,175,177,184,164,0,0,0,0,0,50,38,0,37,36,31,0,36,68,35,31,35,37,37,0,36,31,35,36,31,37,0,0,31,0,31,0,0,0,0,0,0,36,35,39,39,36,35,36,35,0,0,37,39,32,0,31,38,35,39,0,36,37,39,0,39,60,0,36,31,0,31,31,37,60,50,37,35,36,31,35,0,58,0,0,32,0,36,36,35,32,32,0,0,0,58,58,31,31,68,32,31,36,35,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,58,58,35,39,39,32,31,31,36,31,37,37,37,32,36,50,0,68,31,0,37,35,0,37,37,37,39,36,35,0,58,36,36,0,0,38,35,35,36,32,0,50,36,32,35,0,0,37,37,31,50,31,35,0,36,37,36,0,36,32,36,31,38,35,50,36,38,35,37,39,0,36,39,0,31,36,31,38,35,0,36,32,35,0,37,36,37,39,0,31,37,37,36,31,35,35,37,37,37,32,32,38,37,31,31,38,32,31,32,34,35,38,31,37,36,31,36,31,35,38,69,70,36,36,36,36,36,36,31,31,31,31,31,31,31,39,31,39,31,69,70,38,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,44,44,45,45,46,46,47,47,35,68,35,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,44,45,46,47,39,48,49,52,53,54,55,56,57,58,59,60,61,64,65,66,67,68,75,75,44,44,45,45,46,46,47,47,48,50,51,61,62,75,36,31,69,70,71,72,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,35,60,38,34,68,34,34,39,34,37,36,32,31,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,39,34,37,36,32,31,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,39,36,32,31,38,69,70,71,72,73,68,35,44,44,45,45,46,46,47,47,60,31,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,44,45,46,47,39,36,32,31,31,48,49,52,53,54,55,56,57,58,59,60,61,64,65,66,67,38,69,70,71,72,73,68,35,36,35,44,45,46,47,36,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,36,31,38,39,34,34,37,37,36,36,32,32,31,31,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63,64,64,65,65,66,66,67,67,38,38,69,69,70,70,71,71,72,72,73,73,68,68,35,35,39,39,34,37,37,36,36,36,36,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,31,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,68,35,73,31,34,72,34,38,72,38,72,72,31,35,73,72,35,80,80,80,36,31,69,70,71,72,73,35,35,81,81,81,36,31,69,70,71,72,73,34,73,31,31,34,35,39,39,36,32,31,48,49,52,53,54,55,56,57,58,59,60,61,64,65,66,67,38,69,70,71,72,73,68,35,31,38,31,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,38,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,35,39,35,35,68,39,38,39,31,35,68,39,35,35,35,35,35,39,31,35,31,31,31,31,31,31,31,31,39,31,32,38,32,36,73,31,44,44,45,45,46,46,47,47,69,70,31,31,51,71,72,73,31,31,44,45,46,47,39,48,49,52,53,54,55,56,57,58,59,60,61,64,65,66,67,68,35,38,31,31,31,36,72,31,31,69,70,44,44,45,45,46,46,47,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,39,36,32,31,38,69,70,71,72,73,68,35,72,82,82,36,35,35,35,35,35,35,35,35,35,35,35,31,35,38,31,31,81,36,31,69,70,71,72,73,35,81,81,38,36,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,31,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,38,85,44,44,45,45,46,46,47,47,36,32,31,38,69,70,71,72,73,35,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,31,36,31,35,31,38,36,31,72,73,185,185,186,187,188,186,187,189,188,186,187,189,0,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,0,0,0,0,0,76,76,76,76,76,76,0,0,0,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,91,91,91,92,0,91,92,90,92,90,91,91,92,91,92,0,92,91,0,91,91,92,91,92,90,91,91,91,92,0,89,92,91,90,91,91,92,91,0,0,91,91,89,90,91,91,92,92,92,92,92,92,91,90,0,0,91,91,92,91,92,92,92,91,92,90,91,91,90,91,89,92,92,92,92,92,92,92,92,91,92,92,92,91,91,91,92,92,92,92,92,91,91,89,92,92,91,91,90,91,91,88,88,90,88,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,87,23,87,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,88,89,89,90,90,91,91,92,92,93,93,87,87,23,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,87,23,87,23,88,89,90,91,92,93,87,23,87,88,89,90,91,92,93,87,23,23,23,23,87,87,87,23,23,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,0,0,94,94,94,94,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,97,97,97,97,97,0,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,0,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,96,96,96,95,96,96,95,95,95,95,95,95,95,95,96,95,0,0,96,0,96,95,95,0,95,96,95,95,0,9,96,95,95,95,95,95,95,96,95,95,95,95,95,96,95,96,95,95,95,96,96,96,95,95,95,96,95,95,96,96,0,0,0,0,95,95,96,95,96,0,96,96,9,0,95,95,101,0,0,102,102,102,102,102,103,104,18,95,29,96,105,101,9,103,104,18,95,29,96,105,101,9,102,18,95,29,96,101,9,18,95,29,96,101,9,18,95,102,18,29,102,103,104,18,29,105,101,103,104,102,18,95,29,96,105,101,9,103,104,18,95,29,96,105,101,9,18,95,29,96,103,104,18,95,29,96,105,101,9,102,18,95,29,96,9,105,106,102,105,101,105,18,29,18,95,95,29,96,96,105,101,9,9,103,104,18,95,29,29,96,105,101,9,106,102,105,101,18,29,18,29,18,29,18,95,102,103,104,18,95,29,96,105,101,9,105,103,104,18,95,29,96,105,101,9,102,102,102,103,104,105,105,102,18,29,105,105,105,18,95,29,96,9,106,102,105,101,106,102,105,101,106,102,105,101,102,102,102,103,104,102,18,95,29,96,102,102,102,102,102,18,29,102,18,95,29,96,101,9,18,95,29,96,9,103,104,18,95,29,96,105,101,9,103,104,18,95,29,96,105,101,9,103,104,18,95,29,96,105,101,9,102],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[1,1],[[-1,-2],2,[],[]],[[3,4],2],0,[3,5],[5,-1,[]],[5,-1,[]],[5,2],[[1,1],6],[[1,7],8],[[1,7],8],[9,1],[-1,-1,[]],[[3,5],[[13,[[12,[10,11]]]]]],0,[[],5],[-1,-2,[],[]],[[3,14],6],0,[[3,14,14,5],2],[[3,10],2],[[1,1],[[13,[15]]]],0,[[3,11],[[12,[2,1]]]],[-1,-2,[],[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[17,5],[[12,[18,1]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[17,17],[10,10],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[17,17],15],[[10,10],15],0,[17,5],[[],17],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[17]]],19],[-1,[[12,[10]]],19],[5,2],[5,2],[[17,17],6],[[10,10],6],[[17,7],8],[[17,7],8],[[10,7],8],[[10,7],8],[-1,-1,[]],[-1,-1,[]],[[17,5],[[13,[[12,[10,11]]]]]],[[17,-1],2,20],[[10,-1],2,20],[[],5],[[],5],[-1,-2,[],[]],[-1,-2,[],[]],[[17,14],6],[[[21,[10]]],17],[[17,10],2],[[17,17],[[13,[15]]]],[[10,10],[[13,[15]]]],[-1,10,22],[[-1,23],10,22],[[17,-1],12,24],[[10,-1],12,24],[[25,-1],10,22],[[17,11],[[12,[2,1]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[26,4,5],25],[-1,-2,[],[]],[-1,-2,[],[]],[26,26],[[-1,-2],2,[],[]],[[],26],[5,-1,[]],[5,-1,[]],[-1,[[12,[26]]],19],[5,2],[[26,7],8],[[26,7],8],[-1,-1,[]],[[26,14],[[13,[[2,[25,5,5]]]]]],[[26,14],[[13,[25]]]],[[26,14],[[13,[5]]]],[26,5],[[],5],[-1,-2,[],[]],[[],26],[[26,25],[[12,[25,1]]]],[[26,-1],12,24],[-1,-2,[],[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[25,25],[[-1,-2],2,[],[]],[[25,25],15],[25,25],[5,-1,[]],[5,-1,[]],[-1,[[12,[25]]],19],[5,2],[[25,25],6],[[25,7],8],[[25,7],8],[-1,-1,[]],[[25,-1],2,20],[[],5],[-1,-2,[],[]],[[25,27],25],[[25,25],[[13,[15]]]],[[25,-1],12,24],[-1,-2,[],[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[28,5],[[12,[29,1]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[28,28],[11,11],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],0,[28,5],[[],28],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[28]]],19],[-1,[[12,[11]]],19],[5,2],[5,2],[[28,28],6],[[11,11],6],[[28,7],8],[[28,7],8],[[11,7],8],[[11,7],8],[-1,-1,[]],[17,28],[-1,-1,[]],[[28,5],[[13,[[12,[10,11]]]]]],[[],5],[[],5],[-1,-2,[],[]],[-1,-2,[],[]],[[28,14],6],[[[21,[11]]],28],[[28,10],2],[[28,28],[[13,[15]]]],[[11,11],[[13,[15]]]],[[28,-1],12,24],[[11,-1],12,24],[[28,11],[[12,[2,1]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],30],[[-1,[13,[14]],6,6],[[12,[31,4]]],22],[[14,14],[[12,[32,4]]]],[[14,[13,[4]]],[[12,[31,4]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[32,-1],-2,[[33,[32]]],[]],[[31,-1],31,[[33,[31]]]],[[32,-1],2,[[33,[32]]]],[[34,35,-1,36],[[12,[2,37]]],22],[[35,34],[[12,[2,37]]]],[[[21,[38]]],38],[[31,-1],31,[[33,[31]]]],[[37,39],37],[[36,39],36],[[31,-1],31,[[33,[39]]]],[[36,[21,[31]]],31],[[31,[21,[31]]],31],[[35,[21,[35]]],35],[[31,[40,[38]],35,34],[[12,[6,37]]]],0,0,[[36,34],[[12,[6,37]]]],[[36,34],[[12,[41,37]]]],[[36,34],[[12,[42,37]]]],[[36,34],[[12,[43,37]]]],[[36,34],[[12,[4,37]]]],[[36,35],36],[[31,35],31],[[31,-1,-2],31,22,[[33,[31]]]],[[31,-1,-2],31,22,[[33,[31]]]],[[31,-1],31,[[33,[31]]]],[[31,-1],31,[[33,[31]]]],[[31,-1],31,[[33,[31]]]],[31,31],[[39,39],-1,[]],[[31,-1],31,[[33,[31]]]],[[39,39],2],[[31,-1],31,[[33,[31]]]],0,0,[6,38],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[44,35,35,34],[[12,[6,37]]]],[[45,35,34],[[12,[6,37]]]],[[46,35,35,34],[[12,[6,37]]]],[[47,35,35,35,34],[[12,[6,37]]]],[[48,35,35,34],[[12,[6,37]]]],[[49,35,34],[[12,[6,37]]]],[[50,35,35,34],[[12,[6,37]]]],[[51,35,35,34],[[12,[6,37]]]],[[52,35,35,34],[[12,[6,37]]]],[[53,35,35,34],[[12,[6,37]]]],[[54,35,35,34],[[12,[6,37]]]],[[55,35,34],[[12,[6,37]]]],[[56,35,35,34],[[12,[6,37]]]],[[57,35,35,34],[[12,[6,37]]]],[[58,35,35,34],[[12,[6,37]]]],[[59,35,34],[[12,[6,37]]]],[[60,35,34],[[12,[6,37]]]],[[61,35,35,34],[[12,[6,37]]]],[[62,35,35,34],[[12,[6,37]]]],[[63,35,34],[[12,[6,37]]]],[[64,35,34],[[12,[6,37]]]],[[65,35,34],[[12,[6,37]]]],[[66,35,34],[[12,[6,37]]]],[[67,35,34],[[12,[6,37]]]],[[44,31,31,34],[[12,[6,37]]]],[[44,31,31,34],[[12,[6,37]]]],[[45,31,34],[[12,[6,37]]]],[[45,31,34],[[12,[6,37]]]],[[46,31,31,34],[[12,[6,37]]]],[[46,31,31,34],[[12,[6,37]]]],[[47,31,31,31,34],[[12,[6,37]]]],[[47,31,31,31,34],[[12,[6,37]]]],[[35,35,34],[[12,[6,37]]]],[[68,68],6],[[35,35,34],[[12,[6,37]]]],[39,39],[34,34],[37,37],[36,36],[32,32],[31,31],[48,48],[49,49],[50,50],[51,51],[52,52],[53,53],[54,54],[55,55],[56,56],[57,57],[58,58],[59,59],[60,60],[61,61],[62,62],[63,63],[64,64],[65,65],[66,66],[67,67],[38,38],[69,69],[70,70],[71,71],[72,72],[73,73],[68,68],[35,35],[44,[[74,[44]]]],[45,[[74,[45]]]],[46,[[74,[46]]]],[47,[[74,[47]]]],[48,[[74,[46]]]],[49,[[74,[45]]]],[50,[[74,[46]]]],[51,[[74,[44]]]],[52,[[74,[46]]]],[53,[[74,[46]]]],[54,[[74,[46]]]],[55,[[74,[45]]]],[56,[[74,[46]]]],[57,[[74,[46]]]],[58,[[74,[46]]]],[59,[[74,[45]]]],[60,[[74,[45]]]],[61,[[74,[46]]]],[62,[[74,[46]]]],[63,[[74,[45]]]],[64,[[74,[45]]]],[65,[[74,[45]]]],[66,[[74,[45]]]],[67,[[74,[45]]]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[44,44],15],[[45,45],15],[[46,46],15],[[47,47],15],[[39,39],15],[[48,48],15],[[49,49],15],[[52,52],15],[[53,53],15],[[54,54],15],[[55,55],15],[[56,56],15],[[57,57],15],[[58,58],15],[[59,59],15],[[60,60],15],[[61,61],15],[[64,64],15],[[65,65],15],[[66,66],15],[[67,67],15],[[68,68],15],[75,[[12,[[12,[17,28]],37]]]],[75,[[12,[[12,[17,28]],37]]]],[[44,31,31,34,3],[[12,[2,37]]]],[[44,31,31,34,3],[[12,[2,37]]]],[[45,31,34,3],[[12,[2,37]]]],[[45,31,34,3],[[12,[2,37]]]],[[46,31,31,34,3],[[12,[2,37]]]],[[46,31,31,34,3],[[12,[2,37]]]],[[47,31,31,31,34,3],[[12,[2,37]]]],[[47,31,31,31,34,3],[[12,[2,37]]]],[[48,31,31,34,3],[[12,[2,37]]]],[[50,31,31,34,3],[[12,[2,37]]]],[[51,31,31,34,3],[[12,[2,37]]]],[[61,31,31,34,3],[[12,[2,37]]]],[[62,31,31,34,3],[[12,[2,37]]]],[[75,34,3],[[12,[2,37]]]],[[36,34,3],[[12,[2,37]]]],[[31,34,3],[[12,[2,37]]]],[[69,34,3],[[12,[2,37]]]],[[70,34,3],[[12,[2,37]]]],[[71,34,3],[[12,[2,37]]]],[[72,34,3],[[12,[2,37]]]],[[44,35,35,34,3],[[12,[2,37]]]],[[45,35,34,3],[[12,[2,37]]]],[[46,35,35,34,3],[[12,[2,37]]]],[[47,35,35,35,34,3],[[12,[2,37]]]],[[48,35,35,34,3],[[12,[2,37]]]],[[49,35,34,3],[[12,[2,37]]]],[[50,35,35,34,3],[[12,[2,37]]]],[[51,35,35,34,3],[[12,[2,37]]]],[[52,35,35,34,3],[[12,[2,37]]]],[[53,35,35,34,3],[[12,[2,37]]]],[[54,35,35,34,3],[[12,[2,37]]]],[[55,35,34,3],[[12,[2,37]]]],[[56,35,35,34,3],[[12,[2,37]]]],[[57,35,35,34,3],[[12,[2,37]]]],[[58,35,35,34,3],[[12,[2,37]]]],[[59,35,34,3],[[12,[2,37]]]],[[60,35,34,3],[[12,[2,37]]]],[[61,35,35,34,3],[[12,[2,37]]]],[[62,35,35,34,3],[[12,[2,37]]]],[[63,35,34,3],[[12,[2,37]]]],[[64,35,34,3],[[12,[2,37]]]],[[65,35,34,3],[[12,[2,37]]]],[[66,35,34,3],[[12,[2,37]]]],[[67,35,34,3],[[12,[2,37]]]],[[35,14],6],[[25,35,34,3],[[12,[2,37]]]],[[38,31,35,34],[[12,[2,37]]]],[[],34],[[],68],[[34,[21,[[2,[4,35]]]]],2],[[34,-1,68,35,6],[[12,[27,37]]],22],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[31,31],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[[31,-1],31,[[33,[31]]]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[39]]],19],[-1,[[12,[36]]],19],[-1,[[12,[32]]],19],[-1,[[12,[31]]],19],[-1,[[12,[38]]],19],[-1,[[12,[69]]],19],[-1,[[12,[70]]],19],[-1,[[12,[71]]],19],[-1,[[12,[72]]],19],[-1,[[12,[73]]],19],[-1,[[12,[68]]],19],[-1,[[12,[35]]],19],[[44,31,31],4],[[44,31,31],4],[[45,31],4],[[45,31],4],[[46,31,31],4],[[46,31,31],4],[[47,31,31,31],4],[[47,31,31,31],4],[[25,35,34,3],[[12,[2,37]]]],[[31,-1],31,[[33,[31]]]],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[[44,44],6],[[45,45],6],[[46,46],6],[[47,47],6],[[39,39],6],[[36,36],6],[[32,32],6],[[31,-1],31,[[33,[31]]]],[[31,31],6],[[48,48],6],[[49,49],6],[[52,52],6],[[53,53],6],[[54,54],6],[[55,55],6],[[56,56],6],[[57,57],6],[[58,58],6],[[59,59],6],[[60,60],6],[[61,61],6],[[64,64],6],[[65,65],6],[[66,66],6],[[67,67],6],[[38,38],6],[[69,69],6],[[70,70],6],[[71,71],6],[[72,72],6],[[73,73],6],[[68,68],6],[[35,35],6],[[36,36,34],6],[[35,35,34],[[12,[6,37]]]],[[44,36,36,34],[[12,[36,37]]]],[[45,36,34],[[12,[36,37]]]],[[46,36,36,34],[[12,[36,37]]]],[[47,36,36,36,34],[[12,[36,37]]]],[[36,34],[[12,[36,37]]]],[[48,36,36,34],[[12,[36,37]]]],[[49,36,34],[[12,[36,37]]]],[[50,36,36,34],[[12,[36,37]]]],[[51,36,36,34],[[12,[36,37]]]],[[52,36,36,34],[[12,[36,37]]]],[[53,36,36,34],[[12,[36,37]]]],[[54,36,36,34],[[12,[36,37]]]],[[55,36,34],[[12,[36,37]]]],[[56,36,36,34],[[12,[36,37]]]],[[57,36,36,34],[[12,[36,37]]]],[[58,36,36,34],[[12,[36,37]]]],[[59,36,34],[[12,[36,37]]]],[[60,36,34],[[12,[36,37]]]],[[61,36,36,34],[[12,[36,37]]]],[[62,36,36,34],[[12,[36,37]]]],[[63,36,34],[[12,[36,37]]]],[[64,36,34],[[12,[36,37]]]],[[65,36,34],[[12,[36,37]]]],[[66,36,34],[[12,[36,37]]]],[[67,36,34],[[12,[36,37]]]],[[36,36],36],[[31,36],31],[42,38],[[39,7],8],[[34,7],8],[[34,7],8],[[37,7],8],[[37,7],8],[[36,7],8],[[36,7],8],[[32,7],8],[[32,7],8],[[31,7],8],[[31,7],8],[[48,7],8],[[48,7],8],[[49,7],8],[[49,7],8],[[50,7],8],[[50,7],8],[[51,7],8],[[51,7],8],[[52,7],8],[[52,7],8],[[53,7],8],[[53,7],8],[[54,7],8],[[54,7],8],[[55,7],8],[[55,7],8],[[56,7],8],[[56,7],8],[[57,7],8],[[57,7],8],[[58,7],8],[[58,7],8],[[59,7],8],[[59,7],8],[[60,7],8],[[60,7],8],[[61,7],8],[[61,7],8],[[62,7],8],[[62,7],8],[[63,7],8],[[63,7],8],[[64,7],8],[[64,7],8],[[65,7],8],[[65,7],8],[[66,7],8],[[66,7],8],[[67,7],8],[[67,7],8],[[38,7],8],[[38,7],8],[[69,7],8],[[69,7],8],[[70,7],8],[[70,7],8],[[71,7],8],[[71,7],8],[[72,7],8],[[72,7],8],[[73,7],8],[[73,7],8],[[68,7],8],[[68,7],8],[[35,7],8],[[35,7],8],[76,39],[-1,-1,[]],[-1,-1,[]],[1,37],[-1,-1,[]],[35,36],[72,36],[73,36],[-1,-1,[]],[[[2,[4,73]]],32],[[[2,[14,73]]],32],[[[2,[4,36]]],32],[[[2,[4,72]]],32],[[[2,[38,31]]],32],[[[2,[4,68,35,31]]],32],[[[2,[4,71]]],32],[[[2,[4,35]]],32],[[[77,[-1,-2]]],32,[],[]],[[[2,[14,68,[13,[35]],31]]],32],[[[2,[14,71]]],32],[[[74,[32]]],32],[[[2,[4,68,[13,[35]],31]]],32],[[[21,[-1]]],32,[[33,[32]]]],[[[2,[14,36]]],32],[[[2,[14,68,35,31]]],32],[[[2,[4,31]]],32],[[[2,[14,72]]],32],[[[2,[4,68,31]]],32],[[[2,[14,35]]],32],[[[2,[14,68,31]]],32],[[[2,[14,31]]],32],[-1,-1,[]],[36,31],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[6,68],[-1,-1,[]],[-1,-1,[]],[[72,[21,[[2,[4,[13,[35]]]]]]],73],[[31,-1],31,[[33,[31]]]],[[34,35],[[21,[[2,[4,36]]]]]],[72,[[40,[[2,[4,68,35]]]]]],[[34,35,14],[[13,[[2,[36,35]]]]]],[[38,31,35,34],[[12,[[78,[4,[2,[68,35]]]],37]]]],[72,31],[[38,31,31,34],[[12,[35,37]]]],[72,[[13,[14]]]],[72,14],[[31,34],[[12,[[13,[68]],37]]]],[[35,35,[78,[4,[2,[35,[13,[35]]]]]],[79,[4]],34],[[12,[2,37]]]],[73,14],[72,35],[[35,34],[[13,[68]]]],[[80,34],[[12,[5,37]]]],[[80,34],[[12,[5,37]]]],[[80,34,5],[[12,[5,37]]]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[35,34,5],[[12,[5,37]]]],[[35,34],[[21,[[2,[4,[13,[35]]]]]]]],[[81,34],[[12,[35,37]]]],[[81,34],[[12,[35,37]]]],[[81,34,5],[[12,[35,37]]]],[[36,34,5],[[12,[35,37]]]],[[31,34,5],[[12,[35,37]]]],[[69,34,5],[[12,[35,37]]]],[[70,34,5],[[12,[35,37]]]],[[71,34,5],[[12,[35,37]]]],[[72,34,5],[[12,[35,37]]]],[[73,34,5],[[12,[35,37]]]],[[34,35,14],[[13,[35]]]],[73,[[21,[[2,[4,[13,[35]]]]]]]],[[31,-1],31,[[33,[31]]]],[[31,-1],31,[[33,[32]]]],[[34,35,14],6],[[35,35,34],[[12,[6,37]]]],[39,6],[[39,-1],2,20],[[36,-1],2,20],[[32,-1],2,20],[[31,-1],2,20],[[48,-1],2,20],[[49,-1],2,20],[[52,-1],2,20],[[53,-1],2,20],[[54,-1],2,20],[[55,-1],2,20],[[56,-1],2,20],[[57,-1],2,20],[[58,-1],2,20],[[59,-1],2,20],[[60,-1],2,20],[[61,-1],2,20],[[64,-1],2,20],[[65,-1],2,20],[[66,-1],2,20],[[67,-1],2,20],[[38,-1],2,20],[[69,-1],2,20],[[70,-1],2,20],[[71,-1],2,20],[[72,-1],2,20],[[73,-1],2,20],[[68,-1],2,20],[[35,-1],2,20],[[31,-1],31,[[33,[31]]]],[[38,31,31,31,34],[[12,[31,37]]]],[[31,-1,-2],31,[[33,[31]]],[[33,[31]]]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[43,38],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[35,6],[39,6],[35,6],[35,6],[68,6],[39,6],[[38,31,35,34],[[12,[6,37]]]],[39,6],[[31,34],[[12,[6,37]]]],[[35,35,34],[[12,[6,37]]]],[68,6],[39,6],[35,6],[[35,34],[[12,[6,37]]]],[[35,[79,[4]],34],[[12,[6,37]]]],[[35,34],[[12,[6,37]]]],[35,6],[39,6],[[31,-1],31,[[33,[31]]]],[[14,35,35],35],[[-1,36,-2],31,22,[[33,[31]]]],[[[21,[[2,[14,36]]]],-1],31,[[33,[31]]]],[[-1,72,-2],31,22,[[33,[31]]]],[[[77,[14,72]],-1],31,[[33,[31]]]],[[-1,35,-2],31,22,[[33,[31]]]],[[[21,[[2,[14,35]]]],-1],31,[[33,[31]]]],[[-1,-2,[13,[35]],-3,-4],31,22,[[33,[68]]],[[33,[31]]],[[33,[31]]]],[[[21,[[2,[14,68,[13,[35]],31]]]],-1],31,[[33,[31]]]],[39,[[13,[76]]]],[[31,-1],31,[[33,[31]]]],[-1,32,[[33,[[21,[32]]]]]],[[31,[40,[[2,[38,31]]]],34],[[12,[31,37]]]],[[-1,-2],32,22,[[33,[[21,[32]]]]]],[[36,[21,[35]]],36],[[73,[21,[35]],34],[[12,[72,37]]]],[[31,-1],31,[[33,[31]]]],[44,4],[44,4],[45,4],[45,4],[46,4],[46,4],[47,4],[47,4],0,0,[31,31],[[31,-1],31,[[33,[31]]]],[-1,51,46],[[4,[21,[35]],35],71],[[[13,[4]],[21,[[2,[4,68,35]]]],35,-1],72,[[33,[31]]]],[[4,[21,[[2,[4,[13,[35]]]]]],[21,[[2,[4,68,35]]]],35,-1],73,[[33,[31]]]],[31,31],[[31,-1],31,[[33,[31]]]],[[44,44],[[13,[15]]]],[[45,45],[[13,[15]]]],[[46,46],[[13,[15]]]],[[47,47],[[13,[15]]]],[[39,39],[[13,[15]]]],[[48,48],[[13,[15]]]],[[49,49],[[13,[15]]]],[[52,52],[[13,[15]]]],[[53,53],[[13,[15]]]],[[54,54],[[13,[15]]]],[[55,55],[[13,[15]]]],[[56,56],[[13,[15]]]],[[57,57],[[13,[15]]]],[[58,58],[[13,[15]]]],[[59,59],[[13,[15]]]],[[60,60],[[13,[15]]]],[[61,61],[[13,[15]]]],[[64,64],[[13,[15]]]],[[65,65],[[13,[15]]]],[[66,66],[[13,[15]]]],[[67,67],[[13,[15]]]],[[68,68],[[13,[15]]]],[[35,34,[78,[[2,[35,[21,[35]]]],35]],6],[[12,[35,37]]]],[38,38],[[31,-1],31,[[33,[31]]]],[31,31],[31,31],[[[13,[4]],[21,[[2,[4,68,35]]]],35,-1],36,[[33,[31]]]],[[72,3],2],[[31,-1],31,[[33,[68]]]],[[31,-1],31,[[33,[31]]]],0,0,[[44,31,31,34],[[12,[35,37]]]],[[44,31,31,34],[[12,[35,37]]]],[[45,31,34],[[12,[35,37]]]],[[45,31,34],[[12,[35,37]]]],[[46,31,31,34],[[12,[35,37]]]],[[46,31,31,34],[[12,[35,37]]]],[[47,31,31,31,34],[[12,[35,37]]]],[[47,31,31,31,34],[[12,[35,37]]]],[[48,31,31,34],[[12,[35,37]]]],[[49,31,34],[[12,[35,37]]]],[[50,31,31,34],[[12,[35,37]]]],[[51,31,31,34],[[12,[35,37]]]],[[52,31,31,34],[[12,[35,37]]]],[[53,31,31,34],[[12,[35,37]]]],[[54,31,31,34],[[12,[35,37]]]],[[55,31,34],[[12,[35,37]]]],[[56,31,31,34],[[12,[35,37]]]],[[57,31,31,34],[[12,[35,37]]]],[[58,31,31,34],[[12,[35,37]]]],[[59,31,34],[[12,[35,37]]]],[[60,31,34],[[12,[35,37]]]],[[61,31,31,34],[[12,[35,37]]]],[[62,31,31,34],[[12,[35,37]]]],[[63,31,34],[[12,[35,37]]]],[[64,31,34],[[12,[35,37]]]],[[65,31,34],[[12,[35,37]]]],[[66,31,34],[[12,[35,37]]]],[[67,31,34],[[12,[35,37]]]],[[39,-1],12,24],[[36,-1],12,24],[[32,-1],12,24],[[31,-1],12,24],[[38,-1],12,24],[[69,-1],12,24],[[70,-1],12,24],[[71,-1],12,24],[[72,-1],12,24],[[73,-1],12,24],[[68,-1],12,24],[[35,-1],12,24],[[72,-1],2,22],[[82,34],[[12,[82,37]]]],[[82,34,5],[[12,[82,37]]]],[[36,34,5],[[12,[36,37]]]],[[35,34,5],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,6],[[12,[36,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,35,-1,6],[[12,[35,37]]],[[84,[35,34],[[83,[[12,[6,37]]]]]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[31,31],[[35,34],35],[[[77,[4,38]]],38],[[[77,[14,31]]],31],[[31,-1],31,[[33,[31]]]],[[81,14,35],2],[[36,14,35],2],[[31,14,35],2],[[69,14,35],2],[[70,14,35],2],[[71,14,35],2],[[72,14,35],2],[[73,14,35],2],[[35,14,35],35],[[81,[40,[4]],[40,[35]]],2],[[81,[40,[4]],[40,[35]]],2],[[-1,-2],38,[[33,[68]]],22],[[36,[21,[[2,[4,[13,[35]]]]]]],36],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[[31,34],[[12,[31,37]]]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[[[21,[38]]],38],[[85,34],[[12,[2,37]]]],[[44,31,31,34],[[12,[2,37]]]],[[44,31,31,34],[[12,[2,37]]]],[[45,31,34],[[12,[2,37]]]],[[45,31,34],[[12,[2,37]]]],[[46,31,31,34],[[12,[2,37]]]],[[46,31,31,34],[[12,[2,37]]]],[[47,31,31,31,34],[[12,[2,37]]]],[[47,31,31,31,34],[[12,[2,37]]]],[[36,34],[[12,[2,37]]]],[[32,34],[[12,[2,37]]]],[[31,34],[[12,[2,37]]]],[[38,31,31,34],[[12,[2,37]]]],[[69,34],[[12,[2,37]]]],[[70,34],[[12,[2,37]]]],[[71,34],[[12,[2,37]]]],[[72,34],[[12,[2,37]]]],[[73,34],[[12,[2,37]]]],[[35,34],[[12,[2,37]]]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[[31,-1],31,22],[-1,36,22],[-1,31,22],[[[40,[4]],4],[[13,[5]]]],[[31,-1],31,[[33,[31]]]],[[],38],[[36,-1],36,[[33,[32]]]],[[31,-1],31,[[33,[32]]]],[[72,-1],72,[[33,[32]]]],[[73,-1],73,[[33,[32]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[76,76],[[-1,-2],2,[],[]],[[76,76],15],0,[5,-1,[]],[5,-1,[]],[-1,[[12,[76]]],19],[5,2],[[76,76],6],0,[[76,7],8],[-1,-1,[]],[[76,14],4],[[76,-1],2,20],[[],5],[-1,-2,[],[]],0,0,0,[-1,[[12,[[12,[17,28]],4]]],22],[[-1,[13,[14]]],[[12,[31,4]]],22],[[-1,[13,[14]]],[[12,[31,4]]],22],[-1,[[12,[31,4]]],22],[-1,[[12,[[12,[18,29]],4]]],22],[[76,76],[[13,[15]]]],[[76,-1],12,24],[-1,-2,[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[86,86],[[-1,-2],2,[],[]],[[86,86],15],[5,-1,[]],[5,-1,[]],[-1,[[12,[86]]],19],[5,2],[[86,86],6],[[86,7],8],[[86,7],8],[-1,-1,[]],[[86,-1],2,20],[[],5],0,[-1,-2,[],[]],0,[[4,5,5],86],0,[[86,86],[[13,[15]]]],[[86,-1],12,24],[-1,-2,[],[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,[[],87],[88,88],[89,89],[90,90],[91,91],[92,92],[93,93],[87,87],[23,23],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[88,88],15],[[89,89],15],[[90,90],15],[[91,91],15],[[92,92],15],[[93,93],15],[[87,87],15],[[23,23],15],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[88]]],19],[-1,[[12,[89]]],19],[-1,[[12,[90]]],19],[-1,[[12,[91]]],19],[-1,[[12,[92]]],19],[-1,[[12,[93]]],19],[-1,[[12,[87]]],19],[-1,[[12,[23]]],19],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[[88,88],6],[[89,89],6],[[90,90],6],[[91,91],6],[[92,92],6],[[93,93],6],[[87,87],6],[[23,23],6],[[88,7],8],[[88,7],8],[[89,7],8],[[89,7],8],[[90,7],8],[[90,7],8],[[91,7],8],[[91,7],8],[[92,7],8],[[92,7],8],[[93,7],8],[[93,7],8],[[87,7],8],[[87,7],8],[[23,7],8],[[23,7],8],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[88,-1],2,20],[[89,-1],2,20],[[90,-1],2,20],[[91,-1],2,20],[[92,-1],2,20],[[93,-1],2,20],[[87,-1],2,20],[[23,-1],2,20],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,[[91,5],87],[[92,5],23],[[88,88],[[13,[15]]]],[[89,89],[[13,[15]]]],[[90,90],[[13,[15]]]],[[91,91],[[13,[15]]]],[[92,92],[[13,[15]]]],[[93,93],[[13,[15]]]],[[87,87],[[13,[15]]]],[[23,23],[[13,[15]]]],[[],87],[[88,-1],12,24],[[89,-1],12,24],[[90,-1],12,24],[[91,-1],12,24],[[92,-1],12,24],[[93,-1],12,24],[[87,-1],12,24],[[23,-1],12,24],[[],23],[[],23],[[],23],[[],87],[[],87],[[],87],[[],23],[[],23],[[],23],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],0,0,[[94,18],[[12,[4,4]]]],[[94,95,[21,[95]],[21,[5]],5,5],[[12,[4,4]]]],[[94,29],[[12,[4,4]]]],[[94,96,[21,[95]],[21,[5]],5,5],[[12,[4,4]]]],0,[[97,5],4],[[97,95,[13,[5]]],4],[[97,87],[[12,[4,4]]]],[97,[[13,[4]]]],[97,14],[[97,95],4],[97,[[12,[4,4]]]],[97,[[12,[4,4]]]],[[97,[21,[98]]],[[13,[4]]]],[[97,6],[[13,[4]]]],[97,[[13,[4]]]],[[97,[21,[98]]],[[13,[4]]]],[[97,6],[[13,[4]]]],[[97,23],[[12,[4,4]]]],0,[[97,96],[[12,[4,4]]]],[97,6],[[97,87],6],[[97,23],6],[97,14],0,[-1,-2,[],[]],[-1,-2,[],[]],[[99,5],4],[[],99],[5,-1,[]],[5,-1,[]],[5,2],[[99,95,[13,[5]]],4],[-1,-1,[]],[[99,87],[[12,[4,4]]]],[[],5],[-1,-2,[],[]],[99,14],[[99,95],4],[99,[[12,[4,4]]]],[99,[[12,[4,4]]]],[[99,[21,[98]]],[[13,[4]]]],[[99,6],[[13,[4]]]],[99,[[13,[4]]]],[[99,6],[[13,[4]]]],[[99,23],[[12,[4,4]]]],[[99,96],[[12,[4,4]]]],[99,6],[[99,87],6],[[99,23],6],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[99,14],0,[-1,-2,[],[]],[-1,-2,[],[]],[[100,18],[[12,[4,4]]]],[[100,29],[[12,[4,4]]]],[[100,5],4],[[],100],[5,-1,[]],[5,-1,[]],[5,2],[[100,95,[13,[5]]],4],[-1,-1,[]],[[100,87],[[12,[4,4]]]],[[],5],[-1,-2,[],[]],[100,14],[30,100],[[100,95],4],[100,[[12,[4,4]]]],[100,[[12,[4,4]]]],[[100,[21,[98]]],[[13,[4]]]],[[100,6],[[13,[4]]]],[100,[[13,[4]]]],[[100,6],[[13,[4]]]],[[100,23],[[12,[4,4]]]],[[100,96],[[12,[4,4]]]],[100,6],[[100,87],6],[[100,23],6],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[100,14],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[101,86],2],[43,42],[42,43],[102,2],[102,2],[102,2],[102,2],[102,2],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[102,2],[18,18],[95,95],[29,29],[96,96],[101,101],[9,9],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[18,18],15],[[95,95],15],[102,[[12,[18,29]]]],[18,[[12,[18,29]]]],[29,[[12,[18,29]]]],[[102,14],2],[[],[[103,[101]]]],[[],[[104,[101]]]],[[],18],[[],29],[[],105],[[],101],[5,-1,[]],[5,-1,[]],[102,2],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[18]]],19],[-1,[[12,[95]]],19],[-1,[[12,[29]]],19],[-1,[[12,[96]]],19],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[102,2],[[18,18],6],[[95,95],6],[[29,29],6],[[96,96],6],[[9,9],6],0,[[106,86,[13,[[21,[43]]]]],[[12,[2,4]]]],[[102,86],[[12,[2,9]]]],[[105,86,[13,[[21,[43]]]]],[[12,[2,4]]]],[[101,86,[13,[[21,[43]]]]],[[12,[2,4]]]],0,[18,18],[29,29],[[18,7],8],[[95,7],8],[[95,7],8],[[29,7],8],[[96,7],8],[[96,7],8],[[105,7],8],[[101,7],8],[[9,7],8],[[9,7],8],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[18,29],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[106,87],[[12,[43,4]]]],[[102,87],2],[[105,87],[[12,[43,4]]]],[[101,87],[[12,[43,4]]]],[18,[[78,[98,[21,[95]]]]]],[29,[[78,[98,[21,[96]]]]]],[18,[[21,[95]]]],[29,[[21,[96]]]],[18,[[2,[[21,[95]],[78,[98,[21,[95]]]]]]]],[29,[[2,[[21,[96]],[78,[98,[21,[96]]]]]]]],[[18,-1],2,20],[[95,-1],2,20],[102,2],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[102,2],[[102,5],2],[[102,27],2],[-1,[[103,[-1]]],106],[-1,[[104,[-1]]],106],[-1,105,22],[[[21,[43]]],105],[[102,95],2],[[18,95],2],[[29,95],2],0,[105,4],[105,[[21,[43]]]],[[18,18],[[13,[15]]]],[[95,95],[[13,[15]]]],[[29,29],[[13,[15]]]],[[96,96],[[13,[15]]]],[[9,9],[[13,[15]]]],[106,[[12,[43,4]]]],[102,[[12,[2,9]]]],[105,[[12,[43,4]]]],[101,[[12,[43,4]]]],[[106,43],[[12,[2,4]]]],[102,[[12,[2,9]]]],[[105,43],[[12,[2,4]]]],[[101,43],[[12,[2,4]]]],[[106,43,23],[[12,[2,4]]]],[[102,23],2],[[105,43,23],[[12,[2,4]]]],[[101,43,23],[[12,[2,4]]]],[102,2],[102,2],[102,2],[[[103,[-1]],18],[[12,[-1,4]]],106],[[[104,[-1]],29],[[12,[-1,4]]],106],[102,2],[[18,-1],12,24],[[95,-1],12,24],[[29,-1],12,24],[[96,-1],12,24],[[102,42],[[12,[2,9]]]],[[102,[21,[42]]],[[12,[2,9]]]],[[102,43],2],[[102,[21,[43]]],2],[[102,96],[[12,[2,9]]]],[[18,96],[[12,[2,9]]]],[[29,96],[[12,[2,9]]]],[[102,5],2],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[102,2]],"c":[],"p":[[6,"Error",10],[1,"tuple"],[10,"AssemblyProgram",10],[5,"String",2700],[1,"usize"],[1,"bool"],[5,"Formatter",2701],[8,"Result",2701],[6,"Error",2388],[6,"CoreOp",65],[6,"StandardOp",416],[6,"Result",2702],[6,"Option",2703],[1,"str"],[6,"Ordering",2704],[5,"TypeId",2705],[5,"CoreProgram",65],[5,"CoreProgram",2388],[10,"Deserializer",2706],[10,"Hasher",2707],[5,"Vec",2708],[10,"ToString",2700],[5,"Output",1992],[10,"Serializer",2709],[6,"Location",376],[5,"Globals",348],[1,"isize"],[5,"StandardProgram",416],[5,"StandardProgram",2388],[5,"Env",2710],[6,"Expr",569],[6,"Declaration",569],[10,"Into",2711],[5,"Env",569],[6,"Type",569],[6,"ConstExpr",569],[6,"Error",569],[6,"Pattern",569],[6,"Annotation",569],[1,"slice"],[1,"char"],[1,"f64"],[1,"i64"],[10,"AssignOp",569],[10,"UnaryOp",569],[10,"BinaryOp",569],[10,"TernaryOp",569],[5,"Add",569],[5,"Negate",569],[6,"Arithmetic",569],[5,"Assign",569],[5,"BitwiseAnd",569],[5,"BitwiseNand",569],[5,"BitwiseNor",569],[5,"BitwiseNot",569],[5,"BitwiseOr",569],[5,"BitwiseXor",569],[6,"Comparison",569],[5,"Get",569],[6,"Put",569],[5,"And",569],[5,"Or",569],[5,"Not",569],[5,"New",569],[5,"Delete",569],[5,"Tag",569],[5,"Data",569],[6,"Mutability",569],[5,"CoreBuiltin",569],[5,"StandardBuiltin",569],[5,"FFIProcedure",569],[5,"Procedure",569],[5,"PolyProcedure",569],[5,"Box",2712],[10,"Compile",569],[5,"SourceCodeLocation",1929],[5,"BTreeMap",2713],[5,"HashMap",2714],[5,"HashSet",2715],[10,"GetSize",569],[10,"GetType",569],[10,"Simplify",569],[17,"Output"],[10,"Fn",2716],[10,"TypeCheck",569],[5,"FFIBinding",1964],[5,"Input",1992],[6,"Axis",1992],[6,"Direction",1992],[6,"Color",1992],[6,"InputMode",1992],[6,"OutputMode",1992],[5,"Channel",1992],[10,"CompiledTarget",2298],[6,"CoreOp",2388],[6,"StandardOp",2388],[10,"Architecture",2298],[1,"i32"],[5,"C",2325],[5,"SageLisp",2355],[5,"StandardDevice",2388],[10,"VirtualMachineProgram",2388],[5,"CoreInterpreter",2388],[5,"StandardInterpreter",2388],[5,"TestingDevice",2388],[10,"Device",2388],[15,"Compare",207],[15,"IsGreater",207],[15,"IsGreaterEqual",207],[15,"IsLess",207],[15,"IsLessEqual",207],[15,"IsEqual",207],[15,"IsNotEqual",207],[15,"GetAddress",207],[15,"Move",207],[15,"Copy",207],[15,"Index",207],[15,"Add",207],[15,"Sub",207],[15,"Mul",207],[15,"Div",207],[15,"Rem",207],[15,"DivRem",207],[15,"VecAdd",207],[15,"VecSub",207],[15,"VecMul",207],[15,"VecDiv",207],[15,"VecRem",207],[15,"And",207],[15,"Or",207],[15,"VecNot",207],[15,"VecAnd",207],[15,"VecOr",207],[15,"VecInc",207],[15,"VecDec",207],[15,"LeftShift",207],[15,"LogicalRightShift",207],[15,"ArithmeticRightShift",207],[15,"VecLeftShift",207],[15,"VecLogicalRightShift",207],[15,"VecArithmeticRightShift",207],[15,"VecGez",207],[15,"VecNeg",207],[15,"VecOffset",207],[15,"VecIndex",207],[15,"PopFrom",207],[15,"Array",207],[15,"Const",207],[15,"BitwiseNand",207],[15,"BitwiseXor",207],[15,"BitwiseOr",207],[15,"BitwiseNor",207],[15,"BitwiseAnd",207],[15,"VecBitwiseAnd",207],[15,"VecBitwiseOr",207],[15,"VecBitwiseXor",207],[15,"VecBitwiseNor",207],[15,"VecBitwiseNand",207],[15,"VecBitwiseNot",207],[15,"Global",207],[15,"PushTo",207],[15,"IsGreater",510],[15,"IsLess",510],[15,"Const",510],[15,"Pow",510],[15,"Add",510],[15,"Sub",510],[15,"Mul",510],[15,"Div",510],[15,"Rem",510],[15,"VecAdd",510],[15,"VecSub",510],[15,"VecMul",510],[15,"VecDiv",510],[15,"VecRem",510],[15,"VecNeg",510],[15,"VecPow",510],[15,"VecSin",510],[15,"VecCos",510],[15,"VecTan",510],[15,"VecASin",510],[15,"VecACos",510],[15,"VecATan",510],[15,"VecGez",510],[15,"FromImport",1917],[15,"MismatchedTypes",1919],[15,"MismatchedMutability",1919],[15,"UnexpectedConstParam",1919],[15,"NonExhaustivePatterns",1919]],"b":[[45,"impl-Display-for-Error"],[46,"impl-Debug-for-Error"],[173,"impl-Display-for-CoreProgram"],[174,"impl-Debug-for-CoreProgram"],[175,"impl-Display-for-CoreOp"],[176,"impl-Debug-for-CoreOp"],[359,"impl-Display-for-Globals"],[360,"impl-Debug-for-Globals"],[402,"impl-Debug-for-Location"],[403,"impl-Display-for-Location"],[480,"impl-Debug-for-StandardProgram"],[481,"impl-Display-for-StandardProgram"],[482,"impl-Display-for-StandardOp"],[483,"impl-Debug-for-StandardOp"],[1227,"impl-Expr"],[1228,"impl-PartialEq-for-Expr"],[1284,"impl-Debug-for-Env"],[1285,"impl-Display-for-Env"],[1286,"impl-Display-for-Error"],[1287,"impl-Debug-for-Error"],[1288,"impl-Debug-for-ConstExpr"],[1289,"impl-Display-for-ConstExpr"],[1290,"impl-Display-for-Declaration"],[1291,"impl-Debug-for-Declaration"],[1292,"impl-Display-for-Expr"],[1293,"impl-Debug-for-Expr"],[1294,"impl-Display-for-Add"],[1295,"impl-Debug-for-Add"],[1296,"impl-Display-for-Negate"],[1297,"impl-Debug-for-Negate"],[1298,"impl-Debug-for-Arithmetic"],[1299,"impl-Display-for-Arithmetic"],[1300,"impl-Debug-for-Assign"],[1301,"impl-Display-for-Assign"],[1302,"impl-Debug-for-BitwiseAnd"],[1303,"impl-Display-for-BitwiseAnd"],[1304,"impl-Display-for-BitwiseNand"],[1305,"impl-Debug-for-BitwiseNand"],[1306,"impl-Display-for-BitwiseNor"],[1307,"impl-Debug-for-BitwiseNor"],[1308,"impl-Debug-for-BitwiseNot"],[1309,"impl-Display-for-BitwiseNot"],[1310,"impl-Display-for-BitwiseOr"],[1311,"impl-Debug-for-BitwiseOr"],[1312,"impl-Display-for-BitwiseXor"],[1313,"impl-Debug-for-BitwiseXor"],[1314,"impl-Debug-for-Comparison"],[1315,"impl-Display-for-Comparison"],[1316,"impl-Display-for-Get"],[1317,"impl-Debug-for-Get"],[1318,"impl-Display-for-Put"],[1319,"impl-Debug-for-Put"],[1320,"impl-Display-for-And"],[1321,"impl-Debug-for-And"],[1322,"impl-Display-for-Or"],[1323,"impl-Debug-for-Or"],[1324,"impl-Display-for-Not"],[1325,"impl-Debug-for-Not"],[1326,"impl-Debug-for-New"],[1327,"impl-Display-for-New"],[1328,"impl-Display-for-Delete"],[1329,"impl-Debug-for-Delete"],[1330,"impl-Debug-for-Tag"],[1331,"impl-Display-for-Tag"],[1332,"impl-Display-for-Data"],[1333,"impl-Debug-for-Data"],[1334,"impl-Display-for-Pattern"],[1335,"impl-Debug-for-Pattern"],[1336,"impl-Debug-for-CoreBuiltin"],[1337,"impl-Display-for-CoreBuiltin"],[1338,"impl-Debug-for-StandardBuiltin"],[1339,"impl-Display-for-StandardBuiltin"],[1340,"impl-Display-for-FFIProcedure"],[1341,"impl-Debug-for-FFIProcedure"],[1342,"impl-Display-for-Procedure"],[1343,"impl-Debug-for-Procedure"],[1344,"impl-Display-for-PolyProcedure"],[1345,"impl-Debug-for-PolyProcedure"],[1346,"impl-Debug-for-Mutability"],[1347,"impl-Display-for-Mutability"],[1348,"impl-Debug-for-Type"],[1349,"impl-Display-for-Type"],[1355,"impl-From%3CType%3E-for-ConstExpr"],[1356,"impl-From%3CProcedure%3E-for-ConstExpr"],[1357,"impl-From%3CPolyProcedure%3E-for-ConstExpr"],[1359,"impl-From%3C(String,+PolyProcedure)%3E-for-Declaration"],[1360,"impl-From%3C(%26str,+PolyProcedure)%3E-for-Declaration"],[1361,"impl-From%3C(String,+ConstExpr)%3E-for-Declaration"],[1362,"impl-From%3C(String,+Procedure)%3E-for-Declaration"],[1363,"impl-From%3C(Pattern,+Expr)%3E-for-Declaration"],[1364,"impl-From%3C(String,+Mutability,+Type,+Expr)%3E-for-Declaration"],[1365,"impl-From%3C(String,+FFIProcedure)%3E-for-Declaration"],[1366,"impl-From%3C(String,+Type)%3E-for-Declaration"],[1367,"impl-From%3CBTreeMap%3CK,+V%3E%3E-for-Declaration"],[1368,"impl-From%3C(%26str,+Mutability,+Option%3CType%3E,+Expr)%3E-for-Declaration"],[1369,"impl-From%3C(%26str,+FFIProcedure)%3E-for-Declaration"],[1370,"impl-From%3CBox%3CDeclaration%3E%3E-for-Declaration"],[1371,"impl-From%3C(String,+Mutability,+Option%3CType%3E,+Expr)%3E-for-Declaration"],[1372,"impl-From%3CVec%3CT%3E%3E-for-Declaration"],[1373,"impl-From%3C(%26str,+ConstExpr)%3E-for-Declaration"],[1374,"impl-From%3C(%26str,+Mutability,+Type,+Expr)%3E-for-Declaration"],[1375,"impl-From%3C(String,+Expr)%3E-for-Declaration"],[1376,"impl-From%3C(%26str,+Procedure)%3E-for-Declaration"],[1377,"impl-From%3C(String,+Mutability,+Expr)%3E-for-Declaration"],[1378,"impl-From%3C(%26str,+Type)%3E-for-Declaration"],[1379,"impl-From%3C(%26str,+Mutability,+Expr)%3E-for-Declaration"],[1380,"impl-From%3C(%26str,+Expr)%3E-for-Declaration"],[1975,"impl-Display-for-FFIBinding"],[1976,"impl-Debug-for-FFIBinding"],[2180,"impl-Display-for-Axis"],[2181,"impl-Debug-for-Axis"],[2182,"impl-Debug-for-Direction"],[2183,"impl-Display-for-Direction"],[2184,"impl-Debug-for-Color"],[2185,"impl-Display-for-Color"],[2186,"impl-Debug-for-InputMode"],[2187,"impl-Display-for-InputMode"],[2188,"impl-Display-for-OutputMode"],[2189,"impl-Debug-for-OutputMode"],[2190,"impl-Debug-for-Channel"],[2191,"impl-Display-for-Channel"],[2192,"impl-Display-for-Input"],[2193,"impl-Debug-for-Input"],[2194,"impl-Debug-for-Output"],[2195,"impl-Display-for-Output"],[2562,"impl-Display-for-CoreOp"],[2563,"impl-Debug-for-CoreOp"],[2565,"impl-Debug-for-StandardOp"],[2566,"impl-Display-for-StandardOp"],[2569,"impl-Debug-for-Error"],[2570,"impl-Display-for-Error"]]}]\ +["sage",{"doc":"The Sage Programming Language","t":"SSSCCCCCCCEKEEEEEEGEEEEEEEEEPPPPPPNNNNNCMNNNNNNNNMCNNMCNMNCMNNNNNPPPPPPPPPPPPPPPPGFPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOFNNNNNNNNNNNNNNNNNNNNNNNNNNNSPSSSSSSSPPGPSSNNNNNNNNNNNNNNNNNNNNNNNNNPPPPPPPPPPPPPPPPPPPPPGFPPPPPPPPPPPPPPPPPPPNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOHHHHFPPFPPPGPPPPPPPGPPPPPPFKPKPFFFFFFPPTTPPPPGKPPPGPPPPFPPTFPPGPPFPPPPPPPPPPFPGGPFPPPPPFKKPPPPPPPPPPPPPPPPPPPPPPPPPPTPPPPPPPPPPPPPPPPPGPTFPPFPPPPPPFPPPFGPPPPPFPPPPFGPPPPPTKPPPFPPPPPPPPPPPTFPPKPPPPPGPPPKPPPTKPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOFNNNNNONNNNNONNNNNNOOOHHHHHNNNNNNCCFNNNNNNNNNNNNNNNONONONNNNNNNPPPPGPPPPPPPPPPFPPGPPPPPPPPPPGPPPPPPPPFGPPPPPPPPPPPPPPFGPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKKNNNNCMMMNMMMMNNNNNMCMMMMMFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPPPPPPPPPPPPPPPPFGPFPPPKPPPPGPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPFFGFPPPPPFPPPKPPNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOMNNNONNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNMNNONNNNNNNMNNNMNNNMNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["LOGO","LOGO_WITH_COLOR","NULL","asm","frontend","lir","parse","side_effects","targets","vm","A","AssemblyProgram","B","C","CoreOp","CoreProgram","D","E","Error","F","FP","GP","Globals","Location","REGISTERS","SP","StandardOp","StandardProgram","UndefinedGlobal","UndefinedLabel","Unexpected","Unmatched","UnsupportedInstruction","VirtualMachineError","borrow","borrow_mut","clone","clone_into","comment","core","current_instruction","deref","deref_mut","drop","eq","fmt","fmt","from","from","get_op","globals","init","into","is_defined","location","log_instructions_after","op","partial_cmp","std","std_op","to_owned","to_string","try_from","try_into","type_id","Add","And","ArithmeticRightShift","Array","BitwiseAnd","BitwiseNand","BitwiseNor","BitwiseNot","BitwiseOr","BitwiseXor","Call","CallLabel","Comment","Compare","Const","Copy","CoreOp","CoreProgram","Dec","Div","DivRem","Else","End","Fn","Get","GetAddress","Global","If","Inc","Index","IsEqual","IsGreater","IsGreaterEqual","IsLess","IsLessEqual","IsNotEqual","LeftShift","LogicalRightShift","Many","Move","Mul","Neg","Next","Not","Or","Pop","PopFrom","Prev","Push","PushAddress","PushConst","PushTo","Put","Rem","Return","Set","SetLabel","Sub","Swap","VecAdd","VecAnd","VecArithmeticRightShift","VecBitwiseAnd","VecBitwiseNand","VecBitwiseNor","VecBitwiseNot","VecBitwiseOr","VecBitwiseXor","VecDec","VecDiv","VecGez","VecInc","VecIndex","VecLeftShift","VecLogicalRightShift","VecMul","VecNeg","VecNot","VecOffset","VecOr","VecRem","VecSet","VecSub","While","assemble","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","cmp","code","current_instruction","default","deref","deref","deref_mut","deref_mut","deserialize","deserialize","drop","drop","eq","eq","fmt","fmt","fmt","fmt","from","from","get_op","hash","hash","init","init","into","into","is_defined","new","op","partial_cmp","partial_cmp","push_string","put_string","serialize","serialize","stack_alloc_string","std_op","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","a","a","a","a","a","a","a","addr","b","b","b","b","b","b","b","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","name","offset","offset","offset","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","size","sp","sp","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","src","vals","vals","Globals","add_global","borrow","borrow_mut","clone","clone_into","default","deref","deref_mut","deserialize","drop","fmt","fmt","from","get_global","get_global_location","get_global_size","get_size","init","into","new","resolve","serialize","to_owned","to_string","try_from","try_into","type_id","A","Address","B","C","D","E","F","FP","GP","Global","Indirect","Location","Offset","REGISTERS","SP","borrow","borrow_mut","clone","clone_into","cmp","deref","deref","deref_mut","deserialize","drop","eq","fmt","fmt","from","hash","init","into","offset","partial_cmp","serialize","to_owned","to_string","try_from","try_into","type_id","ACos","ASin","ATan","Add","Alloc","Call","Const","CoreOp","Cos","Div","Free","IsGreater","IsLess","Mul","Neg","Pow","PushConst","Rem","Set","Sin","Sqrt","StandardOp","StandardProgram","Sub","Tan","ToFloat","ToInt","VecACos","VecASin","VecATan","VecAdd","VecCos","VecDiv","VecGez","VecMul","VecNeg","VecPow","VecRem","VecSet","VecSin","VecSub","VecTan","assemble","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","code","current_instruction","default","deref","deref","deref_mut","deref_mut","deserialize","deserialize","drop","drop","eq","eq","fmt","fmt","fmt","fmt","from","from","from","get_op","init","init","into","into","is_defined","new","op","partial_cmp","partial_cmp","serialize","serialize","std_op","to_owned","to_owned","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","a","a","b","b","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","dst","size","size","size","size","size","size","size","size","size","size","size","size","size","size","src","src","src","src","src","src","src","src","src","src","src","src","src","vals","get_lisp_env","parse","parse_module","parse_source","Add","Add","Alt","And","Annotated","Annotated","Annotated","Annotation","Any","Any","Any","Apply","Apply","ApplyNonProc","ApplyNonTemplate","Arithmetic","Array","Array","Array","As","As","AssemblyError","Assign","AssignOp","AssignOp","BinaryOp","BinaryOp","BitwiseAnd","BitwiseNand","BitwiseNor","BitwiseNot","BitwiseOr","BitwiseXor","Bool","Bool","COMPILER_GENERATED","CONSTANT","Cell","Cell","Char","Char","Comparison","Compile","CompilePolyProc","CompilerGenerated","Const","ConstExpr","ConstExpr","ConstExpr","ConstParam","Constant","CoreBuiltin","CoreBuiltin","CouldntSimplify","DEAD_CODE","Data","DeadCode","Debug","Declaration","Declare","Declare","Delete","Deref","DerefMut","DerefNonPointer","Display","Divide","DuplicateMember","Enum","EnumUnion","EnumUnion","EnumUnion","Env","Equal","Error","Expr","ExternProc","FFIProcedure","FFIProcedure","Float","Float","FromImport","FromImportAll","Get","GetSize","GetType","GreaterThan","GreaterThanOrEqual","If","IfLet","Immutable","Impl","Index","Int","Int","InvalidAs","InvalidAssignOp","InvalidAssignOpTypes","InvalidBinaryOp","InvalidBinaryOpTypes","InvalidConstExpr","InvalidIndex","InvalidMatchExpr","InvalidMonomorphize","InvalidPatternForExpr","InvalidPatternForType","InvalidRefer","InvalidTemplateArgs","InvalidTernaryOp","InvalidTernaryOpTypes","InvalidUnaryOp","InvalidUnaryOpTypes","LIVE_CODE","LessThan","LessThanOrEqual","Let","Location","Many","Many","Many","Match","Member","Member","MemberNotFound","MismatchedMutability","MismatchedTypes","Module","ModuleRedefined","Monomorphize","Multiply","Mutability","Mutable","NONE","Negate","NegativeArrayLength","Never","New","NonExhaustivePatterns","NonIntegralConst","NonSymbol","None","None","None","Not","NotEqual","Null","Of","Or","Pattern","Pointer","Pointer","Poly","PolyProc","PolyProc","PolyProcedure","Power","Proc","Proc","Proc","Procedure","Put","RecursionDepthConst","RecursionDepthTypeEquality","Refer","Remainder","Return","SIMPLIFY_RECURSION_LIMIT","Simplify","SizeOfExpr","SizeOfTemplate","SizeOfType","StandardBuiltin","StandardBuiltin","StaticVar","Struct","Struct","Struct","Struct","Subtract","Symbol","Symbol","Symbol","SymbolNotDefined","TEMPORARY","Tag","Template","Temporary","TernaryOp","TernaryOp","Tuple","Tuple","Tuple","Tuple","Type","Type","Type","Type","TypeCheck","TypeNotDefined","TypeOf","TypeRedefined","USER_GENERATED","UnaryOp","UnaryOp","UnexpectedConstParam","UnimplementedOperator","Union","Union","Union","Unit","UnsizedType","UnsupportedOperation","UnusedExpr","Var","VarPat","Variant","VariantNotFound","When","While","Wildcard","add","add","add_assign","add_associated_const","add_monomorphized_associated_consts","alt","and","annotate","annotate","annotate","app","app","apply","are_patterns_exhaustive","args","args","as_bool","as_char","as_float","as_int","as_symbol","as_type","as_type","assign","assign_op","bitand","bitnand","bitnor","bitnot","bitor","bitor","bitor_assign","bitxor","body","body","bool","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_apply_exprs","can_cast_to","can_decay_to","can_decay_to","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_box","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile","compile_expr","compile_expr","compile_expr","compile_expr","compile_expr","compile_expr","compile_expr","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","compile_types","contains_symbol","debug","declare_let_bind","default","default","define_types","define_var","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","display","display","display","display","display","display","display","display","display","div","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equals","equals","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","eval","field","field","float","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_mono","ge","get_all_associated_consts","get_args","get_associated_const","get_bindings","get_body","get_branch_result_type","get_common_name","get_mangled_name","get_method_call_mutability","get_monomorph_template_args","get_name","get_ret","get_self_param_mutability","get_size","get_size","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_size_checked","get_template_params","get_type","get_type","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_checked","get_type_of_associated_const","get_type_params","gt","hard_with","hard_with","has_associated_const","has_element_type","has_location","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","hash","idx","if_let_pattern","if_then","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","int","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","is_atomic","is_compiler_generated","is_concrete","is_const_param","is_constant","is_dead_code","is_exhaustive","is_location","is_method_call","is_monomorph_of","is_mutable","is_none","is_poly","is_recursive","is_recursive_helper","is_self_param_reference","is_simple","is_temporary","le","let_bind","let_const","let_consts","let_proc","let_procs","let_type","let_types","let_var","let_vars","location","lt","many","match_pattern","module","monomorphize","monomorphize","mul","name","name","name","name","name","name","name","name","name","name","neg","neq","new","new","new","new","not","or","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","perform_template_applications","pointer","pow","print","println","proc","push_label","refer","rem","ret","ret","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","return_type","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","set_common_name","simplify","simplify_checked","simplify_checked","simplify_checked","simplify_until_atomic","simplify_until_concrete","simplify_until_const_param","simplify_until_has_members","simplify_until_has_variants","simplify_until_matches","simplify_until_poly","simplify_until_simple","simplify_until_type_checks","simplify_until_union","size_of","strip_template","struct_","structure","sub","substitute","substitute","substitute","substitute","substitute","substitute","substitute","substitute","substitute","substitute_types","substitute_types","sym","template","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","transform_method_call","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tup","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_check","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unop","var","var","variant_index","while_loop","wildcard","with","with","with","with","module","names","expected","expected","expr","expr","expr","expr","found","found","found","patterns","SourceCodeLocation","borrow","borrow_mut","clone","clone_into","cmp","column","deref","deref_mut","deserialize","drop","eq","filename","fmt","from","get_code","hash","init","into","length","line","offset","parse_asm","parse_frontend","parse_frontend_minimal","parse_lir","parse_vm","partial_cmp","serialize","to_owned","try_from","try_into","type_id","ffi","io","FFIBinding","borrow","borrow_mut","clone","clone_into","cmp","deref","deref_mut","deserialize","drop","eq","fmt","fmt","from","hash","init","input_cells","into","name","new","output_cells","partial_cmp","serialize","to_owned","to_string","try_from","try_into","type_id","Accelerometer","Altimeter","AnalogPin","AnalogPin","Axis","Barometer","Bell","Black","Blower","Blue","BlueLight","Brightness","Brightness","Button","Buzzer","Channel","ClearDisplay","Clock","Color","Compass","ConductivitySensor","Cooler","Custom","Custom","Cyan","DPad","DepthSensor","DigitalPin","DigitalPin","Direction","Down","Fan","FlowSensor","Green","GreenLight","Gyroscope","Heater","Humidity","Input","InputMode","JoyStick","Keyboard","Left","Magenta","Magnetometer","Microphone","MotorSpeed","MoveCursorDown","MoveCursorLeft","MoveCursorRight","MoveCursorUp","Note","Odometer","Orange","Output","OutputMode","PHSensor","Position","Pressure","PressureGauge","PrinterChar","PrinterFloat","PrinterInt","Proximity","Pump","RGB","RainGauge","Random","Red","RedLight","Right","Servo","SetCursorChar","SetCursorColumn","SetCursorPixel","SetCursorRow","Solenoid","SpeakerFrequency","SpeakerVolume","Speedometer","StderrChar","StderrFloat","StderrInt","StdinChar","StdinFloat","StdinInt","StdoutChar","StdoutFloat","StdoutInt","StepperMotor","Temperature","Thermometer","UVSensor","Up","UpdateDisplay","Valve","VolumeSensor","WeightSensor","White","WindDirection","WindSpeed","X","Y","Yellow","Z","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","channel","channel","clock","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","eq","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","hash","hash","hash","hash","hash","hash","hash","hash","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","mode","mode","new","new","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","random","serialize","serialize","serialize","serialize","serialize","serialize","serialize","serialize","stderr_char","stderr_float","stderr_int","stdin_char","stdin_float","stdin_int","stdout_char","stdout_float","stdout_int","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","Architecture","CompiledTarget","build_core","build_op","build_std","build_std_op","c","declare_proc","end","get","indentation","name","op","peek","poke","post_funs","postlude","postop","pre_funs","prelude","put","sage_lisp","std_op","supports_floats","supports_input","supports_output","version","C","borrow","borrow_mut","declare_proc","default","deref","deref_mut","drop","end","from","get","init","into","name","op","peek","poke","post_funs","postlude","postop","prelude","put","std_op","supports_floats","supports_input","supports_output","try_from","try_into","type_id","version","SageLisp","borrow","borrow_mut","build_core","build_std","declare_proc","default","deref","deref_mut","drop","end","from","get","init","into","name","new","op","peek","poke","post_funs","postlude","postop","prelude","put","std_op","supports_floats","supports_input","supports_output","try_from","try_into","type_id","version","ACos","ASin","ATan","Add","Add","Alloc","And","ArithmeticRightShift","BitwiseAnd","BitwiseNand","BitwiseNot","BitwiseOr","BitwiseXor","Call","Call","Comment","CoreInterpreter","CoreOp","CoreOp","CoreProgram","Cos","Dec","Deref","Device","Div","Div","Else","End","Error","ExpectedCore","Free","Function","Get","If","Inc","Index","IsNonNegative","IsNonNegative","LeftShift","Load","LogicalRightShift","Move","Mul","Mul","Neg","Neg","Not","Offset","Or","Peek","Poke","Pow","Put","Refer","Rem","Rem","Return","Set","Set","Sin","StandardDevice","StandardInterpreter","StandardOp","StandardProgram","Store","Sub","Sub","Swap","Tan","TestingDevice","ToFloat","ToInt","UnsupportedInstruction","VirtualMachineProgram","Where","While","add_binding","as_float","as_int","begin_else","begin_function","begin_if","begin_while","bitwise_nand","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","call","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","code","code","code","comment","default","default","default","default","default","default","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","deserialize","deserialize","deserialize","drop","drop","drop","drop","drop","drop","drop","drop","drop","end","eq","eq","eq","eq","eq","ffi","ffi_call","ffi_call","ffi_call","ffi_call","ffi_channel","flatten","flatten","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","get","get","get","get","get_functions","get_functions","get_main","get_main","get_main_and_functions","get_main_and_functions","hash","hash","index","init","init","init","init","init","init","init","init","init","input","into","into","into","into","into","into","into","into","into","is_non_negative","load_vector","move_pointer","new","new","new","new_raw","op","op","op","output","output_str","output_vals","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","peek","peek","peek","peek","poke","poke","poke","poke","put","put","put","put","refer","restore","ret","run","run","save","serialize","serialize","serialize","serialize","set_float_register","set_float_vector","set_register","set_vector","std_op","std_op","std_op","store_vector","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","where_is_pointer"],"q":[[0,"sage"],[10,"sage::asm"],[65,"sage::asm::core"],[207,"sage::asm::core::CoreOp"],[348,"sage::asm::globals"],[376,"sage::asm::location"],[416,"sage::asm::std"],[510,"sage::asm::std::StandardOp"],[565,"sage::frontend"],[569,"sage::lir"],[1919,"sage::lir::Declaration"],[1921,"sage::lir::Error"],[1931,"sage::parse"],[1964,"sage::side_effects"],[1966,"sage::side_effects::ffi"],[1994,"sage::side_effects::io"],[2300,"sage::targets"],[2327,"sage::targets::c"],[2357,"sage::targets::sage_lisp"],[2390,"sage::vm"],[2702,"alloc::string"],[2703,"core::fmt"],[2704,"core::fmt"],[2705,"core::option"],[2706,"core::cmp"],[2707,"core::any"],[2708,"serde::de"],[2709,"core::hash"],[2710,"alloc::vec"],[2711,"alloc::string"],[2712,"sage_lisp"],[2713,"core::convert"],[2714,"alloc::boxed"],[2715,"alloc::collections::btree::map"],[2716,"std::collections::hash::map"],[2717,"std::collections::hash::set"],[2718,"core::ops::function"]],"d":["The UNICODE character art for the logo of the language.","The UNICODE character art for the logo of the language, …","The value of the NULL pointer constant.","Assembly Module","","LIR (Low Intermediate Representation) Module","Parsing Module","Side Effects Module","Targets Module","Virtual Machine Module","","A frontend to both the CoreProgram and StandardProgram …","","","","","","","An error generated by assembling some assembly language …","","","","","","","","","","The given global was not defined.","The given label was not defined.","The given instruction was not expected, or cannot be used …","The given instruction did not have a matching “end”. …","Is this standard assembly operation supported by the …","An error generated by the virtual machine.","","","","","Insert a comment into the program.","Core Assembly Variant","Get the current instruction number.","","","","","","","Returns the argument unchanged.","","Get the operation at the given instruction number.","Assembly Global Variables","","Calls U::from(self).","Is the given label defined yet in the operations? I.E., …","Assembly Memory Location","Log all the instructions after the given instruction …","Insert a core operation into the program.","","Standard Assembly Variant","Attempt to insert a standard operation into the program. …","","","","","","Add an integer value from a source location to a …","Logical “and” a destination with a source value.","Arithmetic right shift a destination by a source value. …","Store a list of values at a source location. Then, store …","","","","","","","Get a value in memory and call it as a label ID.","Call a function with a given label.","","Store the comparison of “a” and “b” in a …","Write a set of values to a memory location.","Copy a number of cells from a source referenced location …","A core instruction of the assembly language. These are …","An assembly program composed of core instructions, which …","Decrement the integer value of a location.","Divide a destination location by a source value.","Divide a destination location by a source value. Store the …","Add an “else” clause to an “if the value is not zero…","Terminate a function declaration, a while loop, an if …","Declare a new label.","Get a value from the input device / interface and store it …","Get the address of a location, and store it in a …","Declare a global variable.","Begin an “if the value is not zero” statement over a …","Increment the integer value of a location.","Get the address of a location indexed by an offset stored …","Perform dst = a == b.","Perform dst = a > b.","Perform dst = a >= b.","Perform dst = a < b.","Perform dst = a <= b.","Perform dst = a != b.","Left shift a destination by a source value.","Logical right shift a destination by a source value. This …","Many instructions to execute; conveniently grouped …","Copy a value from a source location to a destination …","Multiply a destination location by a source value.","Negate an integer.","Make this pointer point to the next cell (or the nth next …","Replace a value in memory with its boolean complement.","Logical “or” a destination with a source value.","Pop a number of cells from the stack and store it in a …","Pop a number of cells from a specified stack and store it …","Make this pointer point to the previous cell (or the nth …","Push a number of cells starting at a memory location on …","Get the address of a location and push it to the stack.","Push a const to the stack.","Push a number of cells starting at a memory location onto …","Put a value from a source register to the output device / …","Store the remainder of the destination modulus the source …","Return from the current function.","Set the value of a register, or any location in memory, to …","Set the value of a register, or any location in memory, to …","Subtract a source integer value from a destination …","Swap the values of two locations.","Perform a SIMD addition over a vector of integers. This …","Perform a vector “And” operation. This will perform a …","Perform a SIMD arithmetic right shift operation over a …","","","","","","","Decrement a vector of integers.","Perform a SIMD division over a vector of integers. This …","Perform a SIMD “is >= zero” operation over a vector of …","Increment a vector of integers.","Perform a SIMD pointer index operation over a vector of …","Perform a SIMD left shift operation over a vector of …","Perform a SIMD logical right shift operation over a vector …","Perform a SIMD multiplication over a vector of integers. …","Negate a vector of integers using SIMD.","Perform a vector “Not” operation. This will replace …","Perform a SIMD pointer arithmetic operation over a vector …","Perform a vector “Or” operation. This will perform a …","Perform a SIMD remainder over a vector of integers. This …","Set the vector values of a destination.","Perform a SIMD subtraction over a vector of integers. This …","Begin a “while the value is not zero” loop over a …","Assemble a program of core assembly instructions into the …","","","","","","","","","","","The list of core assembly instructions in the program.","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","Calls U::from(self).","Calls U::from(self).","","Create a new program of core assembly instructions.","","","","Push a string literal as UTF-8 to the stack.","Put a string literal as UTF-8 to the output device.","","","Allocate a string on the stack, and store its address in a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A lookup for all the global variables in an assembly …","Add a global variable to the list of globals.","","","","","Create a new empty Globals lookup.","","","","","","","Returns the argument unchanged.","Get the location, and size of a global variable.","Get the location of a global variable.","Get the size of a global variable. This is the number of …","Get the size of the global variables. This is the number …","","Calls U::from(self).","Create a new empty Globals lookup.","Resolve the global variables in a location to produce an …","","","","","","","The “A” general purpose register.","A fixed position in the tape (a constant address known at …","The “B” general purpose register.","The “C” general purpose register.","The “D” general purpose register.","The “E” general purpose register.","The “F” general purpose register.","The frame pointer register.","The Global Pointer register. This is used to access global …","A global variable.","Use the value of a cell on the tape as an address. For …","A location in memory (on the tape of the virtual machine).","Go to a position in memory, and then move the pointer …","","The stack pointer register.","","","","","","","Get the location of the value pointed to by this location.","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","Get the location offset by a constant number of cells from …","","","","","","","","Perform inverse Cos on a cell (float) and store the result …","Perform inverse Sin on a cell (float) and store the result …","Perform inverse Tan on a cell (float) and store the result …","Add the source cell (float) to the destination cell …","Take the value in the operand cell. Allocate that number …","Call a foreign function.","Write some constant values to a location on the tape","Execute a core instruction.","Perform Cos on a cell (float) and store the result in the …","Divide the destination cell (float) by the source cell …","Free the memory allocated at the address stored in the …","Perform dst = a > b.","Perform dst = a < b.","Multiply the source cell (float) by the destination cell …","Negate the value of a cell (float) and store the result in …","Raise a cell (float) to the power of another cell (float).","Push some constant values to the stack.","Perform the modulo operation on the destination cell …","Set the value of a cell to a constant float.","Perform Sin on a cell (float) and store the result in the …","Take the square root of a cell (float).","A standard instruction of the assembly language. These are …","A program composed of standard instructions, which can be …","Subtract the source cell (float) from the destination cell …","Perform Tan on a cell (float) and store the result in the …","Take the integer value stored in a cell and store the …","Take the float value stored in a cell and store the …","Perform a SIMD floating point inverse cosine operation.","Perform a SIMD floating point inverse sine operation.","Perform a SIMD floating point inverse tangent operation.","Perform a SIMD floating point addition operation.","Perform a SIMD floating point cosine operation.","Perform a SIMD floating point division operation.","Perform a SIMD floating point greater than or equal to …","Perform a SIMD floating point multiplication operation.","Perform a SIMD floating point negation operation.","Perform a SIMD floating point power operation.","Perform a SIMD floating point remainder operation.","Set the vector values of a destination.","Perform a SIMD floating point sine operation.","Perform a SIMD floating point subtraction operation.","Perform a SIMD floating point tangent operation.","Assemble the program into a virtual machine program.","","","","","","","","","The list of standard assembly instructions in the program.","Get the current instruction number.","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get the operation at the given instruction number.","","","Calls U::from(self).","Calls U::from(self).","Is the given label defined yet in the operations?","Create a new program of core assembly instructions.","Add a core operation to the program.","","","","","Add a standard operation to the program.","","","","","","","","","","","The first cell in the comparison (left hand side).","The first cell in the comparison (left hand side).","The second cell in the comparison (right hand side).","The second cell in the comparison (right hand side).","The beginning of the constant data.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","The destination cell.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The source cell.","The source cell.","The source cell.","The source cell.","The source cell.","The source cell.","","","","","","","","The constant data.","","","","","","","","A boolean “And” operation between two values.","An error with some annotation about the source code that …","","An expression along with data about its source code …","An annotation for metadata about an LIR expression. This …","The expression equal to any other expression.","Unchecked access to a value. This is used to override …","A type reserved by the compiler. This type is equal to any …","Apply a function with some arguments.","A type that constructs a concrete type from a polymorphic …","Tried to apply a non-procedure to some arguments.","Tried to apply a non-template type to some arguments.","An arithmetic operation.","An array of constant values.","An array of expressions.","An array of a given type, with a constant size.","Cast a constant expression to another type.","Cast an expression to another type.","An error caused by trying to assemble invalid code …","An assignment operation. This is used to implement …","A trait used to implemented an assignment operation.","Perform an assignment operation on two expressions.","A trait used to implement a binary operation.","Perform a binary operation on two expressions.","A boolean “BitwiseAnd” operation between two values.","A boolean “BitwiseNand” operation between two values.","A boolean “BitwiseNor” operation between two values.","","A boolean “BitwiseOr” operation between two values.","A boolean “BitwiseXor” operation between two values.","A constant boolean value.","The type of a boolean value.","An annotation for compiler-generated code.","An annotation for a constant.","A constant integer value representing a cell on the tape.","The type of the most basic unit of memory.","A constant chararacter.","The type of a character.","A comparison operation between two values.","A trait which allows an LIR expression to be compiled to …","Tried to compile a polymorphic procedure without …","Is this expression compiler-generated?","A constant expression.","A compiletime expression.","A constant expression.","","A constant literal used in a type expression, like a …","Is this expression a constant?","A builtin pseudo-procedure implemented in the core …","A builtin implemented in handwritten core assembly.","Recursion depth exceeded when trying to confirm a type’s …","An annotation for dead code.","Get the Union data associated with a tagged union …","Is this expression dead code?","","A declaration of a variable, function, type, etc.","Bind a list of types in a constant expression.","Declare any number of variables, procedures, types, or …","","Dereference this expression (i.e. get the value it points …","Store an expression to an address (a pointer).","Tried to dereference a non-pointer.","","","Duplicate implementations of a member for a type","An enumeration of a list of possible named values. A …","A tagged union of constant values.","A tagged union: a typechecked union of different variants. …","An enumeration of a list of possible types. This is a sum …","An environment under which expressions and types are …","","An LIR compilation error.","TODO: Add variants for LetProc, LetVar, etc. to support …","A foreign function declaration.","A typed procedure which calls a foreign function. This is …","A foreign function interface binding.","A constant floating point value.","The floating-point number type.","Import an element from a module.","","","Get the size of something in memory (number of cells).","Get the type associated with a value under a given …","","","An if-then-else expression.","An if-let expression.","Immutable access to a value. This is the default way to …","Declare associated constants and procedures for a type.","Index an array or pointer with an expression that …","A constant integer value.","The integer type.","Invalid type casting expression.","Invalid assignment operation (assign, add_assign, …","Invalid assign op types (incorrect types).","Invalid binary operation (add, subtract, and, or) …","Invalid binary op types (incorrect types).","Invalid constant expression.","Invalid Index expression (incorrect types).","Tried to match over an expression that cannot be matched …","Cannot monomorphize a constant expression.","Tried to use a pattern that is not valid for the given …","Tried to use a pattern that is not valid for the given …","Invalid Refer expression. The compiler was not able to …","Invalid number of template arguments to a type.","Invalid ternary operation (if) expression (incorrect …","Invalid ternary op types (incorrect types).","Invalid unary operation (negate, not) expression …","Invalid unary op types (incorrect types).","An annotation for live code.","","","Bind a type to a name in a temporary scope.","The source code location of the expression.","Many annotations can be attached to an expression. This is …","Many declarations.","A block of expressions. The last expression in the block …","A match expression.","Get an attribute of a constant expression.","Get a field or member from a structure, union, or tuple. …","Tried to access an undefined member of a tuple, struct, or …","Mismatched mutability","Mismatched types","Declare a module","Tried to define a module that already exists.","Monomorphize a constant expression with some type …","","Mutability of a pointer. This is used to provide type …","Mutable access to a value.","A constant expression that evaluates to None. This …","","Tried to create an array with a negative length.","The type of an expression that will never return, or doesn…","","Invalid pattern for a match expression.","Got another type when expecting an integer, bool, or char.","Expected a symbol, but got something else.","No annotation.","The unit, or “void” instance.","The type of void expressions.","A boolean “Not” operation on a value.","","The null pointer constant.","A constant enum variant.","A boolean “Or” operation between two values.","A pattern which can be matched against an expression.","","A pointer to another type.","A polymorphic, parametric type. This type is used with the …","A polymorphic procedure.","A polymorphic procedure declaration.","A polymorphic procedure of LIR code which can be applied …","","A procedure.","A procedure declaration.","A procedure with a list of parameters and a return type.","A monomorphic procedure of LIR code which can be applied …","Print a value to a given output.","Recursion depth exceeded when trying to evaluate a …","Recursion depth exceeded when trying to confirm a type’s …","Reference this expression (i.e. get a pointer to it).","","Return a value from a function.","This is the maximum number of times a type will be …","Simplify an expression while maintaining structural …","Get the size of an expression’s type (in cells) as a …","Tried to get the size of a template type.","Get the size of a type (in cells) as a constant int.","A builtin pseudo-procedure implemented in the standard …","A builtin implemented in handwritten standard assembly.","A static variable declaration.","A structure of constant values.","A structure of fields to expressions.","","A tuple with named members. This is a product type.","","A named constant.","","A named type.","A symbol was used, but not defined.","An annotation for a temporary.","Get the Enum value of the tag associated with a tagged …","","Is this expression a temporary?","A trait used to implement a ternary operation.","Perform a ternary operation on three expressions.","A tuple of constant values.","A tuple of expressions.","","A heterogenous collection of types. This is a product type.","The representation of a type in the LIR type system.","A type as a constant expression.","A type declaration.","A trait object. This is internally represented as an …","A trait used to enforce type checking.","A type was used, but not defined.","Get the type of an expression. (as an array of chars)","Tried to define a type that already exists.","An annotation for user-generated code.","A trait used to implement a unary operation.","Perform a unary operation on two expressions.","An error caused by unexpectedly passing a constant …","","A union of constant values.","A union: a collection of named fields. The Type value is …","A union of a list of possible types mapped to named …","This type is identified by its name. Most types are …","Tried to instantiate a type that cannot be sized. This is …","Expression uses an operation unsupported by the target.","Unused expression returned a non-None value.","A variable declaration.","A variable declaration with a pattern.","","The variant of an enum is not defined.","A constant, compile time if-then-else expression.","Create a while loop: while the first expression evaluates …","","","Add this expression to another.","","","Add monomorphized methods for a given monomorph of a …","Construct a new pattern which binds to several alternate …","Logical and this expression with another.","Annotate an error with some metadata.","Annotate this constant expression with a source code …","An annotated expression with some metadata.","Apply this procedure or builtin to a list of expressions …","Apply this expression as a procedure to some arguments.","Apply this template type with some type arguments.","This associated function returns whether or not a set of …","The arguments of the builtin. These will be typechecked …","The arguments of the builtin. These will be typechecked …","Try to get this constant expression as a boolean value.","Try to get this constant expression as a character.","Try to get this constant expression as a float.","Try to get this constant expression as an integer.","Try to get this constant expression as a symbol (like in …","Cast an expression as another type.","Cast an expression as another type.","Perform an AssignOp on this expression.","Perform an AssignOp on this expression.","BitwiseAnd this expression with another.","BitwiseOr this expression with another.","BitwiseAnd this expression with another.","BitwiseAnd this expression with another.","","BitwiseOr this expression with another.","","Bitwise this expression with another.","The list of assembly instructions to be pasted into the …","The list of assembly instructions to be pasted into the …","Construct a new pattern which matches a constant boolean.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Checks if the operation can be applied to the given types.","Checks if the operation can be applied to the given type.","Checks if the operation can be applied to the given types.","Checks if the operation can be applied to the given types.","","","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Can this binary operation be applied to the given types?","Can this binary operation be applied to the given types?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Can this unary operation be applied to the given type?","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Checks if the operation can be applied to the given …","Can this type be cast to another type?","Can a pointer of this mutability decay to a pointer of …","Can this type decay into another type?","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Clones the operation into a boxed trait object.","Clones the operation into a boxed trait object.","Clones the operation into a boxed trait object.","Clones the operation into a boxed trait object.","","","","Clone this operation into a trait object.","Clone this binary operation into a box.","Clone this binary operation into a box.","Clone this binary operation into a box.","","Clone this binary operation into a box.","Clone this binary operation into a box.","","Clone this operation into a box.","Clone this operation into a box.","Clone this binary operation into a box.","Clone this operation into a box.","Clone this operation into a box.","Clone this operation into a box.","Clone this operation into a box.","Clone this operation into a box.","Clone this operation into a box.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Compile the expression into an assembly program.","Compile the expression into an assembly program.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expression.","Compiles the operation on the given expression.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compiles the operation on the given expressions.","Compile the assignment operation.","","","","","","","","","","Compiles the operation on the given types. (Generates the …","Compiles the operation on the given type. (Generates the …","Compiles the operation on the given types. (Generates the …","Compiles the operation on the given types. (Generates the …","","","Compile the binary operation.","Compile the assignment operation.","Compile the binary operation.","Compile the binary operation.","Compile the binary operation.","","Compile the binary operation.","Compile the binary operation.","Compile the binary operation.","Compile the unary operation.","Compile the unary operation.","Compile the binary operation.","Compile the binary operation.","Compile the unary operation.","Compile the unary operation.","Compile the unary operation.","Compile the unary operation.","Compile the unary operation.","Does this type contain a symbol with the given name? This …","","Let-bind the pattern to the given expression. This will …","","","Define multiple types with the given names under this …","Define a variable in the current scope. This will …","","","","","","Dereference this expression (i.e. get the value it points …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Dereference this expression (i.e. get the value it points …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","Formats the operation for display.","","Divide this expression by another.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Is this expression greater than another?","","","","","","","","","","","","","","","","","","","","","","","","","","","Are two types structurally equal?","Evaluates the operation on the given constant expressions.","Evaluates the operation on the given constant expression.","Evaluates the operation on the given constant expressions.","Evaluates the operation on the given constant expressions.","Evaluate this constant expression at compile time, and get …","","","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Evaluate this binary operation on the given constant …","Evaluate this binary operation on the given constant …","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Evaluate this unary operation on the given constant values.","Get a field from a structure, union, or tuple.","Get a field from a structure, union, or tuple.","Construct a new pattern which matches a constant float.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","","","Returns the argument unchanged.","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Is this expression greater than or equal to another?","","Get the arguments of the procedure.","","Get the map of new variables and their types which are …","Get the body of the procedure.","Get the type of a branch with a given expression matched …","Get the name of the procedure known to the LIR front-end.","Get the mangled name of the procedure. The procedure’s …","","Get the template arguments for the monomorph (this type) …","Get the name of this polymorphic procedure. This is not …","Get the return type of the procedure.","Get the first argument’s mutability (if it is a pointer)","Get the size of something in memory (number of cells).","Get the size of something in memory (number of cells).","Get the size of something in memory, but limit the number …","","","","","","","","","Get the template parameters for this template type.","Get the type associated with a value under a given …","Get the type associated with a value under a given …","Get the type of a value under a given environment and check","","","","","","","","Get the type of an associated constant of a type.","","Is this expression greater than another?","","","","Does this type have an element type matching the supplied …","Does this annotation have a location?","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Index an array or pointer with an expression that …","Generate an if letexpression, which matches a given expr, …","Create an if-then-else statement with this expression as …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Construct a new pattern which matches a constant integer.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Is this type an irreducible, atomic type?","Is this compiler-generated?","Is this type simplified enough to get information about …","Is this type a constant parameter?","Is this data protected against mutation?","Is this dead code?","Is this pattern exhaustive?","Is this annotation a location?","","Is this type a monomorph of a given template type?","Can this data be accessed mutably?","Is this annotation none?","Is this a polymorphic function?","","Is this type recursive?","Is first argument of function a reference?","Is this type in a simple form? A simple form is a form …","Is this a temporary?","Is this expression less than or equal to another?","Create a let-bound type.","Create a let binding for a constant expression.","Create several const bindings at onces.","Create a proc binding for a procedure.","Create several proc bindings at onces.","Create a let binding for an type.","Create several type bindings at onces.","Create a let binding for an expression.","Create a let binding for an expression, and define …","Get the location of this annotation.","Is this expression less than another?","Create a collection of declarations","Generate an expression which evaluates a match expression, …","Create a module with a given name and a list of …","","Take some type arguments and produce a monomorphized …","Multiply this expression by another.","","","","","","","","","The name of the builtin. This isn’t used in compilation, …","The name of the builtin. This isn’t used in compilation, …","Get the remainder of this expression divided by another.","Is this expression greater than or equal to another?","Create a new assignment operation.","Create a new FFI procedure.","Construct a new procedure with a given list of arguments …","Construct a new polymorphic procedure with type …","Logical not this expression.","Logical or this expression with another.","","","","","","","","","","","","","","","","","","","","","","","Perform type applications if possible.","Construct a new pattern which matches a pointer.","Get the power of this expression to another.","","","Construct a procedure.","Push this procedure’s label to the stack.","Reference this expression (i.e. get a pointer to it).","Get the remainder of this expression divided by another.","The return value the builtin will leave on the stack after …","The return value the builtin will leave on the stack after …","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expression.","Gets the type of the operation on the given expression.","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expressions.","Gets the type of the operation on the given expressions.","","","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","Get the type of the result of applying this binary …","Get the type of the result of applying this binary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","Get the type of the result of applying this unary …","","","","","","","","","","","","","This is just for debugging purposes. This sets the common …","Simplify an expression while maintaining structural …","Simplify an expression while maintaining structural …","","","","Simplify until the type is concrete.","Simplify until the type is concrete.","Simplify a type until you can get its members.","Simplify a type until you can get its variants.","Simplify an expression until it matches a given function …","Simplify until the type is a polymorphic type.","","Simplify until the type passes the type checker.","Simplify a type until it’s a union.","Get the size of an expression.","Strip the template arguments to get the inner type","Construct a new pattern which matches a struct with a …","Create a structure of fields to expressions.","Subtract an expression from this expression.","Substitute a type for a given name in the environment.","","Substitute a type in a given expression.","","","","","","Substitute all occurences of a symbol with another type. …","","","Construct a new pattern which matches a symbol with a …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Construct a new pattern which matches a tuple of patterns.","Type check the expression.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expression.","Typechecks the operation on the given expression.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expressions.","Typechecks the operation on the given expressions.","","","","Type-check a pattern match of an expression against this …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Apply a unary operation to this expression.","Evaluate a variable in the current scope.","Evaluate a variable in the current scope.","Calculate the integral value of a variant in an enum.","Create a while statement with this expression as the …","Construct a new pattern which matches any expression.","Return this expression, but with a given declaration in …","Return this expression, but with a given declaration in …","","","","","","","","","","","","","","","A struct representing a location in the source code. This …","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","","","Parse Core and Standard variants of assembly source code. …","Parse frontend sage code into an LIR expression.","","Parse LIR code as an LIR expression.","Parse Core and Standard variants of virtual machine source …","","","","","","","Foreign Function Interface","I/O Module","This is an FFI binding, which is used to call a foreign …","","","","","","","","","","","","","Returns the argument unchanged.","","","","Calls U::from(self).","","Create a new FFI binding.","","","","","","","","","Input from an accelerometer (in meters per second per …","Input from altitude sensor (in meters)","Electrical device input modes (These should typically be …","Electrical device output modes Set the voltage of a given …","The different axes an input or output might use.","Input from a barometer (pressure in atmospheres)","Ring a bell (in hertz)","Black","Set the pressure of a given blower (in atmospheres)","Blue","Blue light intensity (in lux)","Input from a light sensor (in lux)","Lighting device output modes Set the brightness of a given …","Input from a button (0=not pressed, 1=pressed)","Sound output modes Ring a given buzzer (in hertz)","The channel to use for a given I/O mode.","Clear the display","Physical sensor input modes (These should typically be …","The different output colors a program might use.","Input from a compass (degrees)","Input from a conductivity sensor (in siemens per meter)","Turn a cooler on or off (0=off, 1=on)","Custom output modes A custom input mode (for use with a …","Custom output modes A custom output mode (for use with a …","Cyan","User input modes (These should typically be used for games …","Input from depth sensor (in meters)","Input from a digital input (0=low, 1=high)","Set the state of a given digital output (0=low, 1=high)","The different directions a D-Pad a might use.","","Set the pressure of a given fan (in atmospheres)","Input from a flow sensor (in liters per second)","Green","Green light intensity (in lux)","Input from a gyroscope (in degrees per second) around a …","Turn a heater on or off (0=off, 1=on)","Input from a humidity sensor (in percent)","An input source for a program.","The different types of input modes a program might use.","Input from a JoyStick the degree of displacement in a …","Input from keyboard (ASCII character)","","Magenta","Input from a magnetometer (in teslas) in a given axis","Input from a microphone (frequency in hertz)","Set the speed of a given motor (in revolutions per minute)","Move the cursor down on the display","Move the cursor left on the display","Move the cursor right on the display","Move the cursor up on the display","Play a given note (in hertz)","Input from an odometer (in meters)","Orange","An output destination for a program.","The different types of output modes a program might use.","Input from a pH sensor (in pH)","Input from a position sensor in a given axis (x, y, z)","Set the pressure of a given vacuum/pressurizer …","Engineering / Science sensor input modes Input from a …","Alternative output modes for standard output Printer …","Printer (float)","Printer (integer)","Input from a distance sensor (in meters)","Set the pressure of a given pump (in atmospheres)","RGB ","Input from a rain gauge (in millimeters)","Special input modes A random number","Red","Environment sensor input modes (These should typically be …","","Set the position of a given servo (in radians)","Write a character to the display","Set the cursor column on the display","Set the color of a given pixel on the display","Set the cursor row on the display","Set the polarity of a solenoid (0=off, 1=on)","Set the frequency of a given speaker (in hertz)","Set the volume of a given speaker (in percent)","Navigation input modes (These should typically be …","Standard error (ASCII character)","Standard error (float)","Standard error (integer)","Standard input modes (The standard interface is typically …","Standard input (float)","Standard input (integer)","Standard output modes Standard output (ASCII character)","Standard output (float)","Standard output (integer)","Robotics device output modes Set the position of a given …","Set the temperature of a given heating/cooling device …","Input from a thermometer (degrees K)","Input from a UV sensor (in watts per square meter)","","Display output modes Update the display","Set the position of a given valve (0=closed, 1=open)","Input from a volume sensor (in liters)","Input from a weight sensor (in kilograms)","White","Input from a wind direction sensor (in degrees)","Input from a wind speed sensor (in meters per second)","","","Yellow","","","","","","","","","","","","","","","","","","The channel to use for the input.","The channel to use for the output.","The time (in seconds) since the program started","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","The mode of the input.","The mode of the output.","Create a new input source.","Create a new output destination.","","","","","","","","","A random number","","","","","","","","","Output to STDERR (ASCII character)","Output to STDERR (float)","Output to STDERR (integer)","Input from STDIN (ASCII character)","Input from STDIN (float)","Input from STDIN (integer)","Output to STDOUT (ASCII character)","Output to STDOUT (float)","Output to STDOUT (integer)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","A trait for a target architecture to be compiled to.","Implement a compiler for the given target.","Compile the core variant of the machine code (must be …","","Compile the standard variant of the machine code (should …","","C Target","Compile the declaration of a procedure.","Compile an End instruction (with the matching If or While …","Get a value from the given input stream (mode + channel).","The string used for indentation.","The name of the target architecture.","Compile a CoreOp instruction.","Peek a value from the device connected to the program.","Poke a value to the device connected to the program.","The code after the function definitions.","The code after the program ends.","The code after each instruction.","The code before the function definitions.","The code before the program starts.","Put a value to the given output stream (mode + channel).","C Target","Compile a StandardOp instruction.","Whether or not the target architecture supports floating …","Whether or not the target architecture supports the given …","Whether or not the target architecture supports the given …","The version of the target architecture.","The type for the C target which implements the Target …","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","The type for the C target which implements the Target …","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","Store the inverse-cosine of the register (as a float) into …","Store the inverse-sine of the register (as a float) into …","Store the inverse-tangent of the register (as a float) …","Add the value pointed to on the tape to the register. The …","Add the value pointed to on the tape to the register (as …","Take the value of the register, and allocate that number …","Boolean-and the register and the value pointed to on the …","Interpret the register’s value as a signed integer. …","Perform bitwise and on the cell and the value pointed to …","Perform bitwise nand on the cell and the value pointed to …","Bitwise not the register. Store the result in the register.","Perform bitwise or on the cell and the value pointed to on …","Perform a bitwise xor on the cell and the value pointed to …","Calls the nth function defined in the program, where n is …","Call a foreign function interface function.","A comment in the machine code (not in the compiled output).","The interpreter which runs the virtual machine program.","An individual core virtual machine instruction.","Execute a core instruction.","A program of only core virtual machine instructions.","Store the cosine of the register (as a float) into the …","Decrement the register.","The pointer is made equal to the value pointed to on the …","Create an input / output device for the virtual machine …","Divide the register by the value pointed to on the tape. …","Divide the register by the value pointed to on the tape …","Begin an “else” conditional.","End a conditional.","An error generated by the virtual machine.","When the virtual machine attempts to get the program as …","Free the memory pointed to by the register.","Create a new function.","Get a value from an input source and store it in the …","Begin an “if the register is not zero” conditional.","Increment the register. The argument is the size of the …","Interpret the register’s value as a pointer to a cell. …","Make the register equal to 1 if the register is …","Make the register equal to the integer 1 if the register …","Left shift the cell by the value pointed to on the tape. …","Store the value pointed to on the tape to the register.","Logical right shift the cell by the value pointed to on …","Move the pointer on the tape by a number of cells.","Multiply the register by the value pointed to on the tape. …","Multiply the register by the value pointed to on the tape …","Negate the register. The argument is the size of the …","Negate the value of the register (as a float).","Boolean-not the register (0 if the register is non-zero, 1 …","Interpret the register’s value as a pointer to a cell. …","Boolean-or the register and the value pointed to on the …","Get a value from the input interface / device and store it …","Write the value of the register to the output interface / …","Store the value of the register (as a float) to the power …","Write the value of the register to an output source.","The last “deref” operation is undone; the pointer is …","Store the remainder of the register and the value pointed …","Store the remainder of the register and the value pointed …","Return from the current function.","Set the register equal to a constant value.","Set the register equal to a constant floating point value.","Store the sine of the register (as a float) into the …","A device used for standard input and output. This simply …","The interpreter which runs the standard variant of virtual …","An individual standard virtual machine instruction.","A program of core and standard virtual machine …","Store the register to the value pointed to on the tape.","Subtract the value pointed to on the tape from the …","Subtract the value pointed to on the tape from the …","Swap the value of the register with the value pointed to …","Store the tangent of the register (as a float) into the …","A device used for testing the compiler. This simply keeps …","Convert the register from an integer to a float.","Convert the register from a float to an integer.","When an instruction is unsupported for a given …","An interface to conveniently create virtual machine …","Store the value of the pointer to the register.","Begin a “while the register is not zero” loop.","","A function to reinterpret the bits of an integer as a …","A function to reinterpret the bits of a float as an …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","FFI call to the device. This will get the FFI binding for …","","","","","Flatten a core program so that all of its functions are …","Flatten a core program so that all of its functions are …","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get the next input (from a given input source).","","","","Get the code for each function.","Get the code for each function.","Get the code outside of any functions.","Get the code outside of any functions.","Get the code outside of any functions, and the code for …","Get the code outside of any functions, and the code for …","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","Create a new testing device with some given sample input.","","","","","","Get the output of the testing device as a string (ascii).","","","","","","","Peek at the next value in the FFI buffer for the FFI …","","","","Poke a value into the FFI buffer for the FFI function …","","","","Put the given value to the given output destination.","","","","","","","Run a core program using this interpreter and its device.","Run a core program using this interpreter and its device.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,3,0,3,1,1,1,1,1,1,1,1,3,0,1,1,3,0,3,3,1,0,3,1,1,1,1,1,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,17,17,10,17,10,17,10,17,10,17,10,17,17,17,17,10,17,10,17,10,17,10,17,10,17,17,10,10,17,10,17,17,10,17,10,17,10,17,17,17,17,10,10,10,17,10,10,17,17,10,17,10,17,10,17,10,17,10,107,108,109,110,111,112,113,114,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,107,108,109,110,111,112,113,147,148,149,150,151,152,153,154,155,156,157,158,159,160,117,144,145,160,116,124,125,126,127,128,131,132,133,134,135,139,140,141,142,143,144,145,161,146,154,155,156,157,158,159,161,146,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,136,137,138,139,140,141,142,145,161,147,149,150,151,152,153,154,155,156,157,158,147,148,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,25,0,0,0,0,0,0,0,25,25,0,25,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,28,28,11,28,11,28,11,28,11,28,28,28,28,11,28,11,28,11,28,11,28,11,28,28,11,11,28,28,11,28,28,11,28,11,28,28,28,28,11,28,11,28,28,11,28,11,28,11,28,11,28,11,162,163,162,163,164,165,166,167,168,169,170,162,163,171,172,173,174,175,176,177,178,179,180,181,182,183,184,171,172,173,174,175,176,177,178,179,180,181,182,183,184,165,166,167,168,169,170,171,172,173,174,175,177,184,164,0,0,0,0,0,50,38,0,37,36,31,0,36,68,35,31,35,37,37,0,36,31,35,36,31,37,0,0,31,0,31,0,0,0,0,0,0,36,35,39,39,36,35,36,35,0,0,37,39,32,0,31,38,35,39,0,36,37,39,0,39,60,0,36,31,0,31,31,37,60,50,37,35,36,31,35,0,58,0,0,32,0,36,36,35,32,32,0,0,0,58,58,31,31,68,32,31,36,35,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,39,58,58,35,39,39,32,31,31,36,31,37,37,37,32,37,36,50,0,68,31,0,37,35,0,37,37,37,39,36,35,0,58,36,36,0,0,38,35,35,36,32,0,50,36,32,35,0,0,37,37,31,50,31,35,0,36,37,36,0,36,32,36,31,38,35,50,36,38,35,37,39,0,36,39,0,31,36,31,38,35,0,36,32,35,0,37,36,37,39,0,31,37,37,36,31,35,35,37,37,37,32,32,38,37,31,31,38,32,31,32,34,35,38,31,37,36,31,36,31,35,38,69,70,36,36,36,36,36,36,31,31,31,31,31,31,31,39,31,39,31,69,70,38,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,44,44,45,45,46,46,47,47,35,68,35,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,44,45,46,47,39,48,49,52,53,54,55,56,57,58,59,60,61,64,65,66,67,68,75,75,44,44,45,45,46,46,47,47,48,50,51,61,62,75,36,31,69,70,71,72,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,35,60,38,34,68,34,34,39,34,37,36,32,31,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,39,34,37,36,32,31,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,39,36,32,31,38,69,70,71,72,73,68,35,44,44,45,45,46,46,47,47,60,31,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,44,45,46,47,39,36,32,31,31,48,49,52,53,54,55,56,57,58,59,60,61,64,65,66,67,38,69,70,71,72,73,68,35,36,35,44,45,46,47,36,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,36,31,38,39,34,34,37,37,36,36,32,32,31,31,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63,64,64,65,65,66,66,67,67,38,38,69,69,70,70,71,71,72,72,73,73,68,68,35,35,39,39,34,37,37,36,36,36,36,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,31,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,68,35,73,31,34,72,34,38,72,38,72,72,31,35,73,72,35,80,80,80,36,31,69,70,71,72,73,35,35,81,81,81,36,31,69,70,71,72,73,34,73,31,36,31,34,35,39,39,36,32,31,48,49,52,53,54,55,56,57,58,59,60,61,64,65,66,67,38,69,70,71,72,73,68,35,31,38,31,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,38,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,35,39,35,35,68,39,38,39,31,35,68,39,35,35,35,35,35,39,31,35,31,31,31,31,31,31,31,31,39,31,32,38,32,36,73,31,44,44,45,45,46,46,47,47,69,70,31,31,51,71,72,73,31,31,44,45,46,47,39,48,49,52,53,54,55,56,57,58,59,60,61,64,65,66,67,68,35,38,31,31,31,36,72,31,31,69,70,44,44,45,45,46,46,47,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,39,36,32,31,38,69,70,71,72,73,68,35,72,82,82,36,35,35,35,35,35,35,35,35,35,35,35,31,35,38,31,31,81,36,31,69,70,71,72,73,35,81,81,38,36,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,31,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,38,85,44,44,45,45,46,46,47,47,36,32,31,38,69,70,71,72,73,35,39,34,37,36,32,31,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,38,69,70,71,72,73,68,35,31,36,31,35,31,38,36,31,72,73,185,185,186,187,188,186,187,189,188,186,187,189,0,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,0,0,0,0,0,76,76,76,76,76,76,0,0,0,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,91,91,91,92,0,91,92,90,92,90,91,91,92,91,92,0,92,91,0,91,91,92,91,92,90,91,91,91,92,0,89,92,91,90,91,91,92,91,0,0,91,91,89,90,91,91,92,92,92,92,92,92,91,90,0,0,91,91,92,91,92,92,92,91,92,90,91,91,90,91,89,92,92,92,92,92,92,92,92,91,92,92,92,91,91,91,92,92,92,92,92,91,91,89,92,92,91,91,90,91,91,88,88,90,88,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,87,23,87,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,88,89,89,90,90,91,91,92,92,93,93,87,87,23,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,87,23,87,23,88,89,90,91,92,93,87,23,87,88,89,90,91,92,93,87,23,23,23,23,87,87,87,23,23,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,88,89,90,91,92,93,87,23,0,0,94,94,94,94,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,97,97,97,97,97,0,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,0,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,96,96,96,95,96,96,95,95,95,95,95,95,95,95,96,95,0,0,96,0,96,95,95,0,95,96,95,95,0,9,96,95,95,95,95,95,95,96,95,95,95,95,95,96,95,96,95,95,95,96,96,96,95,95,95,96,95,95,96,96,0,0,0,0,95,95,96,95,96,0,96,96,9,0,95,95,101,0,0,102,102,102,102,102,103,104,18,95,29,96,105,101,9,103,104,18,95,29,96,105,101,9,102,18,95,29,96,101,9,18,95,29,96,101,9,18,95,102,18,29,102,103,104,18,29,105,101,103,104,102,18,95,29,96,105,101,9,103,104,18,95,29,96,105,101,9,18,95,29,96,103,104,18,95,29,96,105,101,9,102,18,95,29,96,9,105,106,102,105,101,105,18,29,18,95,95,29,96,96,105,101,9,9,103,104,18,95,29,29,96,105,101,9,106,102,105,101,18,29,18,29,18,29,18,95,102,103,104,18,95,29,96,105,101,9,105,103,104,18,95,29,96,105,101,9,102,102,102,103,104,105,105,102,18,29,105,105,105,18,95,29,96,9,106,102,105,101,106,102,105,101,106,102,105,101,102,102,102,103,104,102,18,95,29,96,102,102,102,102,102,18,29,102,18,95,29,96,101,9,18,95,29,96,9,103,104,18,95,29,96,105,101,9,103,104,18,95,29,96,105,101,9,103,104,18,95,29,96,105,101,9,102],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[1,1],[[-1,-2],2,[],[]],[[3,4],2],0,[3,5],[5,-1,[]],[5,-1,[]],[5,2],[[1,1],6],[[1,7],8],[[1,7],8],[-1,-1,[]],[9,1],[[3,5],[[13,[[12,[10,11]]]]]],0,[[],5],[-1,-2,[],[]],[[3,14],6],0,[[3,14,14,5],2],[[3,10],2],[[1,1],[[13,[15]]]],0,[[3,11],[[12,[2,1]]]],[-1,-2,[],[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[17,5],[[12,[18,1]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[17,17],[10,10],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[17,17],15],[[10,10],15],0,[17,5],[[],17],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[17]]],19],[-1,[[12,[10]]],19],[5,2],[5,2],[[17,17],6],[[10,10],6],[[17,7],8],[[17,7],8],[[10,7],8],[[10,7],8],[-1,-1,[]],[-1,-1,[]],[[17,5],[[13,[[12,[10,11]]]]]],[[17,-1],2,20],[[10,-1],2,20],[[],5],[[],5],[-1,-2,[],[]],[-1,-2,[],[]],[[17,14],6],[[[21,[10]]],17],[[17,10],2],[[17,17],[[13,[15]]]],[[10,10],[[13,[15]]]],[-1,10,22],[[-1,23],10,22],[[17,-1],12,24],[[10,-1],12,24],[[25,-1],10,22],[[17,11],[[12,[2,1]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[26,4,5],25],[-1,-2,[],[]],[-1,-2,[],[]],[26,26],[[-1,-2],2,[],[]],[[],26],[5,-1,[]],[5,-1,[]],[-1,[[12,[26]]],19],[5,2],[[26,7],8],[[26,7],8],[-1,-1,[]],[[26,14],[[13,[[2,[25,5,5]]]]]],[[26,14],[[13,[25]]]],[[26,14],[[13,[5]]]],[26,5],[[],5],[-1,-2,[],[]],[[],26],[[26,25],[[12,[25,1]]]],[[26,-1],12,24],[-1,-2,[],[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[25,25],[[-1,-2],2,[],[]],[[25,25],15],[5,-1,[]],[25,25],[5,-1,[]],[-1,[[12,[25]]],19],[5,2],[[25,25],6],[[25,7],8],[[25,7],8],[-1,-1,[]],[[25,-1],2,20],[[],5],[-1,-2,[],[]],[[25,27],25],[[25,25],[[13,[15]]]],[[25,-1],12,24],[-1,-2,[],[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[28,5],[[12,[29,1]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[28,28],[11,11],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],0,[28,5],[[],28],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[28]]],19],[-1,[[12,[11]]],19],[5,2],[5,2],[[28,28],6],[[11,11],6],[[28,7],8],[[28,7],8],[[11,7],8],[[11,7],8],[17,28],[-1,-1,[]],[-1,-1,[]],[[28,5],[[13,[[12,[10,11]]]]]],[[],5],[[],5],[-1,-2,[],[]],[-1,-2,[],[]],[[28,14],6],[[[21,[11]]],28],[[28,10],2],[[28,28],[[13,[15]]]],[[11,11],[[13,[15]]]],[[28,-1],12,24],[[11,-1],12,24],[[28,11],[[12,[2,1]]]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],30],[[-1,[13,[14]],6,6],[[12,[31,4]]],22],[[14,14,6],[[12,[32,4]]]],[[14,[13,[4]]],[[12,[31,4]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[32,-1],-2,[[33,[32]]],[]],[[31,-1],31,[[33,[31]]]],[[32,-1],2,[[33,[32]]]],[[34,35,-1,36],[[12,[2,37]]],22],[[35,34],[[12,[2,37]]]],[[[21,[38]]],38],[[31,-1],31,[[33,[31]]]],[[37,39],37],[[36,39],36],[[31,-1],31,[[33,[39]]]],[[36,[21,[31]]],31],[[31,[21,[31]]],31],[[35,[21,[35]]],35],[[31,[40,[38]],35,34],[[12,[6,37]]]],0,0,[[36,34],[[12,[6,37]]]],[[36,34],[[12,[41,37]]]],[[36,34],[[12,[42,37]]]],[[36,34],[[12,[43,37]]]],[[36,34],[[12,[4,37]]]],[[36,35],36],[[31,35],31],[[31,-1,-2],31,22,[[33,[31]]]],[[31,-1,-2],31,22,[[33,[31]]]],[[31,-1],31,[[33,[31]]]],[[31,-1],31,[[33,[31]]]],[[31,-1],31,[[33,[31]]]],[31,31],[[39,39],-1,[]],[[31,-1],31,[[33,[31]]]],[[39,39],2],[[31,-1],31,[[33,[31]]]],0,0,[6,38],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[[44,35,35,34],[[12,[6,37]]]],[[45,35,34],[[12,[6,37]]]],[[46,35,35,34],[[12,[6,37]]]],[[47,35,35,35,34],[[12,[6,37]]]],[[48,35,35,34],[[12,[6,37]]]],[[49,35,34],[[12,[6,37]]]],[[50,35,35,34],[[12,[6,37]]]],[[51,35,35,34],[[12,[6,37]]]],[[52,35,35,34],[[12,[6,37]]]],[[53,35,35,34],[[12,[6,37]]]],[[54,35,35,34],[[12,[6,37]]]],[[55,35,34],[[12,[6,37]]]],[[56,35,35,34],[[12,[6,37]]]],[[57,35,35,34],[[12,[6,37]]]],[[58,35,35,34],[[12,[6,37]]]],[[59,35,34],[[12,[6,37]]]],[[60,35,34],[[12,[6,37]]]],[[61,35,35,34],[[12,[6,37]]]],[[62,35,35,34],[[12,[6,37]]]],[[63,35,34],[[12,[6,37]]]],[[64,35,34],[[12,[6,37]]]],[[65,35,34],[[12,[6,37]]]],[[66,35,34],[[12,[6,37]]]],[[67,35,34],[[12,[6,37]]]],[[44,31,31,34],[[12,[6,37]]]],[[44,31,31,34],[[12,[6,37]]]],[[45,31,34],[[12,[6,37]]]],[[45,31,34],[[12,[6,37]]]],[[46,31,31,34],[[12,[6,37]]]],[[46,31,31,34],[[12,[6,37]]]],[[47,31,31,31,34],[[12,[6,37]]]],[[47,31,31,31,34],[[12,[6,37]]]],[[35,35,34],[[12,[6,37]]]],[[68,68],6],[[35,35,34],[[12,[6,37]]]],[39,39],[34,34],[37,37],[36,36],[32,32],[31,31],[48,48],[49,49],[50,50],[51,51],[52,52],[53,53],[54,54],[55,55],[56,56],[57,57],[58,58],[59,59],[60,60],[61,61],[62,62],[63,63],[64,64],[65,65],[66,66],[67,67],[38,38],[69,69],[70,70],[71,71],[72,72],[73,73],[68,68],[35,35],[44,[[74,[44]]]],[45,[[74,[45]]]],[46,[[74,[46]]]],[47,[[74,[47]]]],[48,[[74,[46]]]],[49,[[74,[45]]]],[50,[[74,[46]]]],[51,[[74,[44]]]],[52,[[74,[46]]]],[53,[[74,[46]]]],[54,[[74,[46]]]],[55,[[74,[45]]]],[56,[[74,[46]]]],[57,[[74,[46]]]],[58,[[74,[46]]]],[59,[[74,[45]]]],[60,[[74,[45]]]],[61,[[74,[46]]]],[62,[[74,[46]]]],[63,[[74,[45]]]],[64,[[74,[45]]]],[65,[[74,[45]]]],[66,[[74,[45]]]],[67,[[74,[45]]]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[44,44],15],[[45,45],15],[[46,46],15],[[47,47],15],[[39,39],15],[[48,48],15],[[49,49],15],[[52,52],15],[[53,53],15],[[54,54],15],[[55,55],15],[[56,56],15],[[57,57],15],[[58,58],15],[[59,59],15],[[60,60],15],[[61,61],15],[[64,64],15],[[65,65],15],[[66,66],15],[[67,67],15],[[68,68],15],[[75,6],[[12,[[12,[17,28]],37]]]],[[75,6],[[12,[[12,[17,28]],37]]]],[[44,31,31,34,3],[[12,[2,37]]]],[[44,31,31,34,3],[[12,[2,37]]]],[[45,31,34,3],[[12,[2,37]]]],[[45,31,34,3],[[12,[2,37]]]],[[46,31,31,34,3],[[12,[2,37]]]],[[46,31,31,34,3],[[12,[2,37]]]],[[47,31,31,31,34,3],[[12,[2,37]]]],[[47,31,31,31,34,3],[[12,[2,37]]]],[[48,31,31,34,3],[[12,[2,37]]]],[[50,31,31,34,3],[[12,[2,37]]]],[[51,31,31,34,3],[[12,[2,37]]]],[[61,31,31,34,3],[[12,[2,37]]]],[[62,31,31,34,3],[[12,[2,37]]]],[[75,34,3],[[12,[2,37]]]],[[36,34,3],[[12,[2,37]]]],[[31,34,3],[[12,[2,37]]]],[[69,34,3],[[12,[2,37]]]],[[70,34,3],[[12,[2,37]]]],[[71,34,3],[[12,[2,37]]]],[[72,34,3],[[12,[2,37]]]],[[44,35,35,34,3],[[12,[2,37]]]],[[45,35,34,3],[[12,[2,37]]]],[[46,35,35,34,3],[[12,[2,37]]]],[[47,35,35,35,34,3],[[12,[2,37]]]],[[48,35,35,34,3],[[12,[2,37]]]],[[49,35,34,3],[[12,[2,37]]]],[[50,35,35,34,3],[[12,[2,37]]]],[[51,35,35,34,3],[[12,[2,37]]]],[[52,35,35,34,3],[[12,[2,37]]]],[[53,35,35,34,3],[[12,[2,37]]]],[[54,35,35,34,3],[[12,[2,37]]]],[[55,35,34,3],[[12,[2,37]]]],[[56,35,35,34,3],[[12,[2,37]]]],[[57,35,35,34,3],[[12,[2,37]]]],[[58,35,35,34,3],[[12,[2,37]]]],[[59,35,34,3],[[12,[2,37]]]],[[60,35,34,3],[[12,[2,37]]]],[[61,35,35,34,3],[[12,[2,37]]]],[[62,35,35,34,3],[[12,[2,37]]]],[[63,35,34,3],[[12,[2,37]]]],[[64,35,34,3],[[12,[2,37]]]],[[65,35,34,3],[[12,[2,37]]]],[[66,35,34,3],[[12,[2,37]]]],[[67,35,34,3],[[12,[2,37]]]],[[35,14],6],[[25,35,34,3],[[12,[2,37]]]],[[38,31,35,34],[[12,[2,37]]]],[[],34],[[],68],[[34,[21,[[2,[4,35]]]]],2],[[34,-1,68,35,6],[[12,[27,37]]],22],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[31,31],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[[31,-1],31,[[33,[31]]]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[39]]],19],[-1,[[12,[36]]],19],[-1,[[12,[32]]],19],[-1,[[12,[31]]],19],[-1,[[12,[38]]],19],[-1,[[12,[69]]],19],[-1,[[12,[70]]],19],[-1,[[12,[71]]],19],[-1,[[12,[72]]],19],[-1,[[12,[73]]],19],[-1,[[12,[68]]],19],[-1,[[12,[35]]],19],[[44,31,31],4],[[44,31,31],4],[[45,31],4],[[45,31],4],[[46,31,31],4],[[46,31,31],4],[[47,31,31,31],4],[[47,31,31,31],4],[[25,35,34,3],[[12,[2,37]]]],[[31,-1],31,[[33,[31]]]],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[[44,44],6],[[45,45],6],[[46,46],6],[[47,47],6],[[39,39],6],[[36,36],6],[[32,32],6],[[31,-1],31,[[33,[31]]]],[[31,31],6],[[48,48],6],[[49,49],6],[[52,52],6],[[53,53],6],[[54,54],6],[[55,55],6],[[56,56],6],[[57,57],6],[[58,58],6],[[59,59],6],[[60,60],6],[[61,61],6],[[64,64],6],[[65,65],6],[[66,66],6],[[67,67],6],[[38,38],6],[[69,69],6],[[70,70],6],[[71,71],6],[[72,72],6],[[73,73],6],[[68,68],6],[[35,35],6],[[36,36,34],6],[[35,35,34],[[12,[6,37]]]],[[44,36,36,34],[[12,[36,37]]]],[[45,36,34],[[12,[36,37]]]],[[46,36,36,34],[[12,[36,37]]]],[[47,36,36,36,34],[[12,[36,37]]]],[[36,34],[[12,[36,37]]]],[[48,36,36,34],[[12,[36,37]]]],[[49,36,34],[[12,[36,37]]]],[[50,36,36,34],[[12,[36,37]]]],[[51,36,36,34],[[12,[36,37]]]],[[52,36,36,34],[[12,[36,37]]]],[[53,36,36,34],[[12,[36,37]]]],[[54,36,36,34],[[12,[36,37]]]],[[55,36,34],[[12,[36,37]]]],[[56,36,36,34],[[12,[36,37]]]],[[57,36,36,34],[[12,[36,37]]]],[[58,36,36,34],[[12,[36,37]]]],[[59,36,34],[[12,[36,37]]]],[[60,36,34],[[12,[36,37]]]],[[61,36,36,34],[[12,[36,37]]]],[[62,36,36,34],[[12,[36,37]]]],[[63,36,34],[[12,[36,37]]]],[[64,36,34],[[12,[36,37]]]],[[65,36,34],[[12,[36,37]]]],[[66,36,34],[[12,[36,37]]]],[[67,36,34],[[12,[36,37]]]],[[36,36],36],[[31,36],31],[42,38],[[39,7],8],[[34,7],8],[[34,7],8],[[37,7],8],[[37,7],8],[[36,7],8],[[36,7],8],[[32,7],8],[[32,7],8],[[31,7],8],[[31,7],8],[[48,7],8],[[48,7],8],[[49,7],8],[[49,7],8],[[50,7],8],[[50,7],8],[[51,7],8],[[51,7],8],[[52,7],8],[[52,7],8],[[53,7],8],[[53,7],8],[[54,7],8],[[54,7],8],[[55,7],8],[[55,7],8],[[56,7],8],[[56,7],8],[[57,7],8],[[57,7],8],[[58,7],8],[[58,7],8],[[59,7],8],[[59,7],8],[[60,7],8],[[60,7],8],[[61,7],8],[[61,7],8],[[62,7],8],[[62,7],8],[[63,7],8],[[63,7],8],[[64,7],8],[[64,7],8],[[65,7],8],[[65,7],8],[[66,7],8],[[66,7],8],[[67,7],8],[[67,7],8],[[38,7],8],[[38,7],8],[[69,7],8],[[69,7],8],[[70,7],8],[[70,7],8],[[71,7],8],[[71,7],8],[[72,7],8],[[72,7],8],[[73,7],8],[[73,7],8],[[68,7],8],[[68,7],8],[[35,7],8],[[35,7],8],[-1,-1,[]],[76,39],[-1,-1,[]],[-1,-1,[]],[1,37],[73,36],[35,36],[-1,-1,[]],[72,36],[[[2,[4,72]]],32],[[[2,[14,71]]],32],[[[2,[14,68,31]]],32],[[[74,[32]]],32],[[[2,[14,35]]],32],[[[2,[14,31]]],32],[[[2,[4,71]]],32],[[[2,[4,68,31]]],32],[[[2,[4,35]]],32],[[[2,[4,68,[13,[35]],31]]],32],[[[2,[4,31]]],32],[[[77,[-1,-2]]],32,[],[]],[[[2,[4,36]]],32],[[[2,[14,68,[13,[35]],31]]],32],[[[2,[4,68,35,31]]],32],[[[2,[38,31]]],32],[[[2,[14,68,35,31]]],32],[[[2,[14,73]]],32],[-1,-1,[]],[[[2,[14,72]]],32],[[[2,[4,73]]],32],[[[21,[-1]]],32,[[33,[32]]]],[[[2,[14,36]]],32],[-1,-1,[]],[36,31],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[6,68],[-1,-1,[]],[[72,[21,[[2,[4,[13,[35]]]]]]],73],[[31,-1],31,[[33,[31]]]],[[34,35],[[21,[[2,[4,36]]]]]],[72,[[40,[[2,[4,68,35]]]]]],[[34,35,14],[[13,[[2,[36,35]]]]]],[[38,31,35,34],[[12,[[78,[4,[2,[68,35]]]],37]]]],[72,31],[[38,31,31,34],[[12,[35,37]]]],[72,[[13,[14]]]],[72,14],[[31,34],[[12,[[13,[68]],37]]]],[[35,35,[78,[4,[2,[35,[13,[35]]]]]],[79,[4]],34],[[12,[2,37]]]],[73,14],[72,35],[[35,34],[[13,[68]]]],[[80,34],[[12,[5,37]]]],[[80,34],[[12,[5,37]]]],[[80,34,5],[[12,[5,37]]]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[-1,34,5],[[12,[5,37]]],[]],[[35,34,5],[[12,[5,37]]]],[[35,34],[[21,[[2,[4,[13,[35]]]]]]]],[[81,34],[[12,[35,37]]]],[[81,34],[[12,[35,37]]]],[[81,34,5],[[12,[35,37]]]],[[36,34,5],[[12,[35,37]]]],[[31,34,5],[[12,[35,37]]]],[[69,34,5],[[12,[35,37]]]],[[70,34,5],[[12,[35,37]]]],[[71,34,5],[[12,[35,37]]]],[[72,34,5],[[12,[35,37]]]],[[73,34,5],[[12,[35,37]]]],[[34,35,14],[[13,[35]]]],[73,[[21,[[2,[4,[13,[35]]]]]]]],[[31,-1],31,[[33,[31]]]],[[36,-1],36,[[33,[32]]]],[[31,-1],31,[[33,[32]]]],[[34,35,14],6],[[35,35,34],[[12,[6,37]]]],[39,6],[[39,-1],2,20],[[36,-1],2,20],[[32,-1],2,20],[[31,-1],2,20],[[48,-1],2,20],[[49,-1],2,20],[[52,-1],2,20],[[53,-1],2,20],[[54,-1],2,20],[[55,-1],2,20],[[56,-1],2,20],[[57,-1],2,20],[[58,-1],2,20],[[59,-1],2,20],[[60,-1],2,20],[[61,-1],2,20],[[64,-1],2,20],[[65,-1],2,20],[[66,-1],2,20],[[67,-1],2,20],[[38,-1],2,20],[[69,-1],2,20],[[70,-1],2,20],[[71,-1],2,20],[[72,-1],2,20],[[73,-1],2,20],[[68,-1],2,20],[[35,-1],2,20],[[31,-1],31,[[33,[31]]]],[[38,31,31,31,34],[[12,[31,37]]]],[[31,-1,-2],31,[[33,[31]]],[[33,[31]]]],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[43,38],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[35,6],[39,6],[35,6],[35,6],[68,6],[39,6],[[38,31,35,34],[[12,[6,37]]]],[39,6],[[31,34],[[12,[6,37]]]],[[35,35,34],[[12,[6,37]]]],[68,6],[39,6],[35,6],[[35,34],[[12,[6,37]]]],[[35,[79,[4]],34],[[12,[6,37]]]],[[35,34],[[12,[6,37]]]],[35,6],[39,6],[[31,-1],31,[[33,[31]]]],[[14,35,35],35],[[-1,36,-2],31,22,[[33,[31]]]],[[[21,[[2,[14,36]]]],-1],31,[[33,[31]]]],[[-1,72,-2],31,22,[[33,[31]]]],[[[77,[14,72]],-1],31,[[33,[31]]]],[[-1,35,-2],31,22,[[33,[31]]]],[[[21,[[2,[14,35]]]],-1],31,[[33,[31]]]],[[-1,-2,[13,[35]],-3,-4],31,22,[[33,[68]]],[[33,[31]]],[[33,[31]]]],[[[21,[[2,[14,68,[13,[35]],31]]]],-1],31,[[33,[31]]]],[39,[[13,[76]]]],[[31,-1],31,[[33,[31]]]],[-1,32,[[33,[[21,[32]]]]]],[[31,[40,[[2,[38,31]]]],34],[[12,[31,37]]]],[[-1,-2,6],32,22,[[33,[[21,[32]]]]]],[[36,[21,[35]]],36],[[73,[21,[35]],34],[[12,[72,37]]]],[[31,-1],31,[[33,[31]]]],[44,4],[44,4],[45,4],[45,4],[46,4],[46,4],[47,4],[47,4],0,0,[31,31],[[31,-1],31,[[33,[31]]]],[-1,51,46],[[4,[21,[35]],35],71],[[[13,[4]],[21,[[2,[4,68,35]]]],35,-1],72,[[33,[31]]]],[[4,[21,[[2,[4,[13,[35]]]]]],[21,[[2,[4,68,35]]]],35,-1],73,[[33,[31]]]],[31,31],[[31,-1],31,[[33,[31]]]],[[44,44],[[13,[15]]]],[[45,45],[[13,[15]]]],[[46,46],[[13,[15]]]],[[47,47],[[13,[15]]]],[[39,39],[[13,[15]]]],[[48,48],[[13,[15]]]],[[49,49],[[13,[15]]]],[[52,52],[[13,[15]]]],[[53,53],[[13,[15]]]],[[54,54],[[13,[15]]]],[[55,55],[[13,[15]]]],[[56,56],[[13,[15]]]],[[57,57],[[13,[15]]]],[[58,58],[[13,[15]]]],[[59,59],[[13,[15]]]],[[60,60],[[13,[15]]]],[[61,61],[[13,[15]]]],[[64,64],[[13,[15]]]],[[65,65],[[13,[15]]]],[[66,66],[[13,[15]]]],[[67,67],[[13,[15]]]],[[68,68],[[13,[15]]]],[[35,34,[78,[[2,[35,[21,[35]]]],35]],6],[[12,[35,37]]]],[38,38],[[31,-1],31,[[33,[31]]]],[31,31],[31,31],[[[13,[4]],[21,[[2,[4,68,35]]]],35,-1],36,[[33,[31]]]],[[72,3],2],[[31,-1],31,[[33,[68]]]],[[31,-1],31,[[33,[31]]]],0,0,[[44,31,31,34],[[12,[35,37]]]],[[44,31,31,34],[[12,[35,37]]]],[[45,31,34],[[12,[35,37]]]],[[45,31,34],[[12,[35,37]]]],[[46,31,31,34],[[12,[35,37]]]],[[46,31,31,34],[[12,[35,37]]]],[[47,31,31,31,34],[[12,[35,37]]]],[[47,31,31,31,34],[[12,[35,37]]]],[[48,31,31,34],[[12,[35,37]]]],[[49,31,34],[[12,[35,37]]]],[[50,31,31,34],[[12,[35,37]]]],[[51,31,31,34],[[12,[35,37]]]],[[52,31,31,34],[[12,[35,37]]]],[[53,31,31,34],[[12,[35,37]]]],[[54,31,31,34],[[12,[35,37]]]],[[55,31,34],[[12,[35,37]]]],[[56,31,31,34],[[12,[35,37]]]],[[57,31,31,34],[[12,[35,37]]]],[[58,31,31,34],[[12,[35,37]]]],[[59,31,34],[[12,[35,37]]]],[[60,31,34],[[12,[35,37]]]],[[61,31,31,34],[[12,[35,37]]]],[[62,31,31,34],[[12,[35,37]]]],[[63,31,34],[[12,[35,37]]]],[[64,31,34],[[12,[35,37]]]],[[65,31,34],[[12,[35,37]]]],[[66,31,34],[[12,[35,37]]]],[[67,31,34],[[12,[35,37]]]],[[39,-1],12,24],[[36,-1],12,24],[[32,-1],12,24],[[31,-1],12,24],[[38,-1],12,24],[[69,-1],12,24],[[70,-1],12,24],[[71,-1],12,24],[[72,-1],12,24],[[73,-1],12,24],[[68,-1],12,24],[[35,-1],12,24],[[72,-1],2,22],[[82,34],[[12,[82,37]]]],[[82,34,5],[[12,[82,37]]]],[[36,34,5],[[12,[36,37]]]],[[35,34,5],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,6],[[12,[36,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,35,-1,6],[[12,[35,37]]],[[84,[35,34],[[83,[[12,[6,37]]]]]]]],[[35,34,6],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[[35,34],[[12,[35,37]]]],[[35,34,6],[[12,[35,37]]]],[31,31],[[35,34],35],[[[77,[4,38]]],38],[[[77,[14,31]]],31],[[31,-1],31,[[33,[31]]]],[[81,14,35],2],[[36,14,35],2],[[31,14,35],2],[[69,14,35],2],[[70,14,35],2],[[71,14,35],2],[[72,14,35],2],[[73,14,35],2],[[35,14,35],35],[[81,[40,[4]],[40,[35]]],2],[[81,[40,[4]],[40,[35]]],2],[[-1,-2],38,[[33,[68]]],22],[[36,[21,[[2,[4,[13,[35]]]]]]],36],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[[31,34],[[12,[31,37]]]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[[[21,[38]]],38],[[85,34],[[12,[2,37]]]],[[44,31,31,34],[[12,[2,37]]]],[[44,31,31,34],[[12,[2,37]]]],[[45,31,34],[[12,[2,37]]]],[[45,31,34],[[12,[2,37]]]],[[46,31,31,34],[[12,[2,37]]]],[[46,31,31,34],[[12,[2,37]]]],[[47,31,31,31,34],[[12,[2,37]]]],[[47,31,31,31,34],[[12,[2,37]]]],[[36,34],[[12,[2,37]]]],[[32,34],[[12,[2,37]]]],[[31,34],[[12,[2,37]]]],[[38,31,31,34],[[12,[2,37]]]],[[69,34],[[12,[2,37]]]],[[70,34],[[12,[2,37]]]],[[71,34],[[12,[2,37]]]],[[72,34],[[12,[2,37]]]],[[73,34],[[12,[2,37]]]],[[35,34],[[12,[2,37]]]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[[31,-1],31,22],[-1,36,22],[-1,31,22],[[[40,[4]],4],[[13,[5]]]],[[31,-1],31,[[33,[31]]]],[[],38],[[36,-1],36,[[33,[32]]]],[[31,-1],31,[[33,[32]]]],[[72,-1],72,[[33,[32]]]],[[73,-1],73,[[33,[32]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[76,76],[[-1,-2],2,[],[]],[[76,76],15],0,[5,-1,[]],[5,-1,[]],[-1,[[12,[76]]],19],[5,2],[[76,76],6],0,[[76,7],8],[-1,-1,[]],[[76,14],4],[[76,-1],2,20],[[],5],[-1,-2,[],[]],0,0,0,[-1,[[12,[[12,[17,28]],4]]],22],[[-1,[13,[14]]],[[12,[31,4]]],22],[[-1,[13,[14]]],[[12,[31,4]]],22],[-1,[[12,[31,4]]],22],[-1,[[12,[[12,[18,29]],4]]],22],[[76,76],[[13,[15]]]],[[76,-1],12,24],[-1,-2,[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[86,86],[[-1,-2],2,[],[]],[[86,86],15],[5,-1,[]],[5,-1,[]],[-1,[[12,[86]]],19],[5,2],[[86,86],6],[[86,7],8],[[86,7],8],[-1,-1,[]],[[86,-1],2,20],[[],5],0,[-1,-2,[],[]],0,[[4,5,5],86],0,[[86,86],[[13,[15]]]],[[86,-1],12,24],[-1,-2,[],[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,[[],87],[88,88],[89,89],[90,90],[91,91],[92,92],[93,93],[87,87],[23,23],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[88,88],15],[[89,89],15],[[90,90],15],[[91,91],15],[[92,92],15],[[93,93],15],[[87,87],15],[[23,23],15],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[88]]],19],[-1,[[12,[89]]],19],[-1,[[12,[90]]],19],[-1,[[12,[91]]],19],[-1,[[12,[92]]],19],[-1,[[12,[93]]],19],[-1,[[12,[87]]],19],[-1,[[12,[23]]],19],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[[88,88],6],[[89,89],6],[[90,90],6],[[91,91],6],[[92,92],6],[[93,93],6],[[87,87],6],[[23,23],6],[[88,7],8],[[88,7],8],[[89,7],8],[[89,7],8],[[90,7],8],[[90,7],8],[[91,7],8],[[91,7],8],[[92,7],8],[[92,7],8],[[93,7],8],[[93,7],8],[[87,7],8],[[87,7],8],[[23,7],8],[[23,7],8],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[88,-1],2,20],[[89,-1],2,20],[[90,-1],2,20],[[91,-1],2,20],[[92,-1],2,20],[[93,-1],2,20],[[87,-1],2,20],[[23,-1],2,20],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],0,0,[[91,5],87],[[92,5],23],[[88,88],[[13,[15]]]],[[89,89],[[13,[15]]]],[[90,90],[[13,[15]]]],[[91,91],[[13,[15]]]],[[92,92],[[13,[15]]]],[[93,93],[[13,[15]]]],[[87,87],[[13,[15]]]],[[23,23],[[13,[15]]]],[[],87],[[88,-1],12,24],[[89,-1],12,24],[[90,-1],12,24],[[91,-1],12,24],[[92,-1],12,24],[[93,-1],12,24],[[87,-1],12,24],[[23,-1],12,24],[[],23],[[],23],[[],23],[[],87],[[],87],[[],87],[[],23],[[],23],[[],23],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],0,0,[[94,18],[[12,[4,4]]]],[[94,95,[21,[95]],[21,[5]],5,5],[[12,[4,4]]]],[[94,29],[[12,[4,4]]]],[[94,96,[21,[95]],[21,[5]],5,5],[[12,[4,4]]]],0,[[97,5],4],[[97,95,[13,[5]]],4],[[97,87],[[12,[4,4]]]],[97,[[13,[4]]]],[97,14],[[97,95],4],[97,[[12,[4,4]]]],[97,[[12,[4,4]]]],[[97,[21,[98]]],[[13,[4]]]],[[97,6],[[13,[4]]]],[97,[[13,[4]]]],[[97,[21,[98]]],[[13,[4]]]],[[97,6],[[13,[4]]]],[[97,23],[[12,[4,4]]]],0,[[97,96],[[12,[4,4]]]],[97,6],[[97,87],6],[[97,23],6],[97,14],0,[-1,-2,[],[]],[-1,-2,[],[]],[[99,5],4],[[],99],[5,-1,[]],[5,-1,[]],[5,2],[[99,95,[13,[5]]],4],[-1,-1,[]],[[99,87],[[12,[4,4]]]],[[],5],[-1,-2,[],[]],[99,14],[[99,95],4],[99,[[12,[4,4]]]],[99,[[12,[4,4]]]],[[99,[21,[98]]],[[13,[4]]]],[[99,6],[[13,[4]]]],[99,[[13,[4]]]],[[99,6],[[13,[4]]]],[[99,23],[[12,[4,4]]]],[[99,96],[[12,[4,4]]]],[99,6],[[99,87],6],[[99,23],6],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[99,14],0,[-1,-2,[],[]],[-1,-2,[],[]],[[100,18],[[12,[4,4]]]],[[100,29],[[12,[4,4]]]],[[100,5],4],[[],100],[5,-1,[]],[5,-1,[]],[5,2],[[100,95,[13,[5]]],4],[-1,-1,[]],[[100,87],[[12,[4,4]]]],[[],5],[-1,-2,[],[]],[100,14],[30,100],[[100,95],4],[100,[[12,[4,4]]]],[100,[[12,[4,4]]]],[[100,[21,[98]]],[[13,[4]]]],[[100,6],[[13,[4]]]],[100,[[13,[4]]]],[[100,6],[[13,[4]]]],[[100,23],[[12,[4,4]]]],[[100,96],[[12,[4,4]]]],[100,6],[[100,87],6],[[100,23],6],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[100,14],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[101,86],2],[43,42],[42,43],[102,2],[102,2],[102,2],[102,2],[102,2],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[102,2],[18,18],[95,95],[29,29],[96,96],[101,101],[9,9],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[-1,-2],2,[],[]],[[18,18],15],[[95,95],15],[102,[[12,[18,29]]]],[18,[[12,[18,29]]]],[29,[[12,[18,29]]]],[[102,14],2],[[],[[103,[101]]]],[[],[[104,[101]]]],[[],18],[[],29],[[],105],[[],101],[5,-1,[]],[5,-1,[]],[102,2],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[5,-1,[]],[-1,[[12,[18]]],19],[-1,[[12,[95]]],19],[-1,[[12,[29]]],19],[-1,[[12,[96]]],19],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[5,2],[102,2],[[18,18],6],[[95,95],6],[[29,29],6],[[96,96],6],[[9,9],6],0,[[106,86,[13,[[21,[43]]]]],[[12,[2,4]]]],[[102,86],[[12,[2,9]]]],[[105,86,[13,[[21,[43]]]]],[[12,[2,4]]]],[[101,86,[13,[[21,[43]]]]],[[12,[2,4]]]],0,[18,18],[29,29],[[18,7],8],[[95,7],8],[[95,7],8],[[29,7],8],[[96,7],8],[[96,7],8],[[105,7],8],[[101,7],8],[[9,7],8],[[9,7],8],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[18,29],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[-1,-1,[]],[[106,87],[[12,[43,4]]]],[[102,87],2],[[105,87],[[12,[43,4]]]],[[101,87],[[12,[43,4]]]],[18,[[78,[98,[21,[95]]]]]],[29,[[78,[98,[21,[96]]]]]],[18,[[21,[95]]]],[29,[[21,[96]]]],[18,[[2,[[21,[95]],[78,[98,[21,[95]]]]]]]],[29,[[2,[[21,[96]],[78,[98,[21,[96]]]]]]]],[[18,-1],2,20],[[95,-1],2,20],[102,2],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],0,[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[102,2],[[102,5],2],[[102,27],2],[-1,[[103,[-1]]],106],[-1,[[104,[-1]]],106],[-1,105,22],[[[21,[43]]],105],[[102,95],2],[[18,95],2],[[29,95],2],0,[105,4],[105,[[21,[43]]]],[[18,18],[[13,[15]]]],[[95,95],[[13,[15]]]],[[29,29],[[13,[15]]]],[[96,96],[[13,[15]]]],[[9,9],[[13,[15]]]],[106,[[12,[43,4]]]],[102,[[12,[2,9]]]],[105,[[12,[43,4]]]],[101,[[12,[43,4]]]],[[106,43],[[12,[2,4]]]],[102,[[12,[2,9]]]],[[105,43],[[12,[2,4]]]],[[101,43],[[12,[2,4]]]],[[106,43,23],[[12,[2,4]]]],[[102,23],2],[[105,43,23],[[12,[2,4]]]],[[101,43,23],[[12,[2,4]]]],[102,2],[102,2],[102,2],[[[103,[-1]],18],[[12,[-1,4]]],106],[[[104,[-1]],29],[[12,[-1,4]]],106],[102,2],[[18,-1],12,24],[[95,-1],12,24],[[29,-1],12,24],[[96,-1],12,24],[[102,42],[[12,[2,9]]]],[[102,[21,[42]]],[[12,[2,9]]]],[[102,43],2],[[102,[21,[43]]],2],[[102,96],[[12,[2,9]]]],[[18,96],[[12,[2,9]]]],[[29,96],[[12,[2,9]]]],[[102,5],2],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,-2,[],[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,4,[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,[[12,[-2]]],[],[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[-1,16,[]],[102,2]],"c":[],"p":[[6,"Error",10],[1,"tuple"],[10,"AssemblyProgram",10],[5,"String",2702],[1,"usize"],[1,"bool"],[5,"Formatter",2703],[8,"Result",2703],[6,"Error",2390],[6,"CoreOp",65],[6,"StandardOp",416],[6,"Result",2704],[6,"Option",2705],[1,"str"],[6,"Ordering",2706],[5,"TypeId",2707],[5,"CoreProgram",65],[5,"CoreProgram",2390],[10,"Deserializer",2708],[10,"Hasher",2709],[5,"Vec",2710],[10,"ToString",2702],[5,"Output",1994],[10,"Serializer",2711],[6,"Location",376],[5,"Globals",348],[1,"isize"],[5,"StandardProgram",416],[5,"StandardProgram",2390],[5,"Env",2712],[6,"Expr",569],[6,"Declaration",569],[10,"Into",2713],[5,"Env",569],[6,"Type",569],[6,"ConstExpr",569],[6,"Error",569],[6,"Pattern",569],[6,"Annotation",569],[1,"slice"],[1,"char"],[1,"f64"],[1,"i64"],[10,"AssignOp",569],[10,"UnaryOp",569],[10,"BinaryOp",569],[10,"TernaryOp",569],[5,"Add",569],[5,"Negate",569],[6,"Arithmetic",569],[5,"Assign",569],[5,"BitwiseAnd",569],[5,"BitwiseNand",569],[5,"BitwiseNor",569],[5,"BitwiseNot",569],[5,"BitwiseOr",569],[5,"BitwiseXor",569],[6,"Comparison",569],[5,"Get",569],[6,"Put",569],[5,"And",569],[5,"Or",569],[5,"Not",569],[5,"New",569],[5,"Delete",569],[5,"Tag",569],[5,"Data",569],[6,"Mutability",569],[5,"CoreBuiltin",569],[5,"StandardBuiltin",569],[5,"FFIProcedure",569],[5,"Procedure",569],[5,"PolyProcedure",569],[5,"Box",2714],[10,"Compile",569],[5,"SourceCodeLocation",1931],[5,"BTreeMap",2715],[5,"HashMap",2716],[5,"HashSet",2717],[10,"GetSize",569],[10,"GetType",569],[10,"Simplify",569],[17,"Output"],[10,"Fn",2718],[10,"TypeCheck",569],[5,"FFIBinding",1966],[5,"Input",1994],[6,"Axis",1994],[6,"Direction",1994],[6,"Color",1994],[6,"InputMode",1994],[6,"OutputMode",1994],[5,"Channel",1994],[10,"CompiledTarget",2300],[6,"CoreOp",2390],[6,"StandardOp",2390],[10,"Architecture",2300],[1,"i32"],[5,"C",2327],[5,"SageLisp",2357],[5,"StandardDevice",2390],[10,"VirtualMachineProgram",2390],[5,"CoreInterpreter",2390],[5,"StandardInterpreter",2390],[5,"TestingDevice",2390],[10,"Device",2390],[15,"Compare",207],[15,"IsGreater",207],[15,"IsGreaterEqual",207],[15,"IsLess",207],[15,"IsLessEqual",207],[15,"IsEqual",207],[15,"IsNotEqual",207],[15,"GetAddress",207],[15,"Move",207],[15,"Copy",207],[15,"Index",207],[15,"Add",207],[15,"Sub",207],[15,"Mul",207],[15,"Div",207],[15,"Rem",207],[15,"DivRem",207],[15,"VecAdd",207],[15,"VecSub",207],[15,"VecMul",207],[15,"VecDiv",207],[15,"VecRem",207],[15,"And",207],[15,"Or",207],[15,"VecNot",207],[15,"VecAnd",207],[15,"VecOr",207],[15,"VecInc",207],[15,"VecDec",207],[15,"LeftShift",207],[15,"LogicalRightShift",207],[15,"ArithmeticRightShift",207],[15,"VecLeftShift",207],[15,"VecLogicalRightShift",207],[15,"VecArithmeticRightShift",207],[15,"VecGez",207],[15,"VecNeg",207],[15,"VecOffset",207],[15,"VecIndex",207],[15,"PopFrom",207],[15,"Array",207],[15,"Const",207],[15,"BitwiseNand",207],[15,"BitwiseXor",207],[15,"BitwiseOr",207],[15,"BitwiseNor",207],[15,"BitwiseAnd",207],[15,"VecBitwiseAnd",207],[15,"VecBitwiseOr",207],[15,"VecBitwiseXor",207],[15,"VecBitwiseNor",207],[15,"VecBitwiseNand",207],[15,"VecBitwiseNot",207],[15,"Global",207],[15,"PushTo",207],[15,"IsGreater",510],[15,"IsLess",510],[15,"Const",510],[15,"Pow",510],[15,"Add",510],[15,"Sub",510],[15,"Mul",510],[15,"Div",510],[15,"Rem",510],[15,"VecAdd",510],[15,"VecSub",510],[15,"VecMul",510],[15,"VecDiv",510],[15,"VecRem",510],[15,"VecNeg",510],[15,"VecPow",510],[15,"VecSin",510],[15,"VecCos",510],[15,"VecTan",510],[15,"VecASin",510],[15,"VecACos",510],[15,"VecATan",510],[15,"VecGez",510],[15,"FromImport",1919],[15,"MismatchedTypes",1921],[15,"MismatchedMutability",1921],[15,"UnexpectedConstParam",1921],[15,"NonExhaustivePatterns",1921]],"b":[[45,"impl-Debug-for-Error"],[46,"impl-Display-for-Error"],[173,"impl-Debug-for-CoreProgram"],[174,"impl-Display-for-CoreProgram"],[175,"impl-Display-for-CoreOp"],[176,"impl-Debug-for-CoreOp"],[359,"impl-Display-for-Globals"],[360,"impl-Debug-for-Globals"],[402,"impl-Debug-for-Location"],[403,"impl-Display-for-Location"],[480,"impl-Display-for-StandardProgram"],[481,"impl-Debug-for-StandardProgram"],[482,"impl-Display-for-StandardOp"],[483,"impl-Debug-for-StandardOp"],[1228,"impl-Expr"],[1229,"impl-PartialEq-for-Expr"],[1285,"impl-Debug-for-Env"],[1286,"impl-Display-for-Env"],[1287,"impl-Display-for-Error"],[1288,"impl-Debug-for-Error"],[1289,"impl-Debug-for-ConstExpr"],[1290,"impl-Display-for-ConstExpr"],[1291,"impl-Debug-for-Declaration"],[1292,"impl-Display-for-Declaration"],[1293,"impl-Display-for-Expr"],[1294,"impl-Debug-for-Expr"],[1295,"impl-Debug-for-Add"],[1296,"impl-Display-for-Add"],[1297,"impl-Display-for-Negate"],[1298,"impl-Debug-for-Negate"],[1299,"impl-Debug-for-Arithmetic"],[1300,"impl-Display-for-Arithmetic"],[1301,"impl-Display-for-Assign"],[1302,"impl-Debug-for-Assign"],[1303,"impl-Display-for-BitwiseAnd"],[1304,"impl-Debug-for-BitwiseAnd"],[1305,"impl-Display-for-BitwiseNand"],[1306,"impl-Debug-for-BitwiseNand"],[1307,"impl-Debug-for-BitwiseNor"],[1308,"impl-Display-for-BitwiseNor"],[1309,"impl-Debug-for-BitwiseNot"],[1310,"impl-Display-for-BitwiseNot"],[1311,"impl-Display-for-BitwiseOr"],[1312,"impl-Debug-for-BitwiseOr"],[1313,"impl-Debug-for-BitwiseXor"],[1314,"impl-Display-for-BitwiseXor"],[1315,"impl-Display-for-Comparison"],[1316,"impl-Debug-for-Comparison"],[1317,"impl-Debug-for-Get"],[1318,"impl-Display-for-Get"],[1319,"impl-Display-for-Put"],[1320,"impl-Debug-for-Put"],[1321,"impl-Debug-for-And"],[1322,"impl-Display-for-And"],[1323,"impl-Debug-for-Or"],[1324,"impl-Display-for-Or"],[1325,"impl-Display-for-Not"],[1326,"impl-Debug-for-Not"],[1327,"impl-Debug-for-New"],[1328,"impl-Display-for-New"],[1329,"impl-Debug-for-Delete"],[1330,"impl-Display-for-Delete"],[1331,"impl-Debug-for-Tag"],[1332,"impl-Display-for-Tag"],[1333,"impl-Display-for-Data"],[1334,"impl-Debug-for-Data"],[1335,"impl-Debug-for-Pattern"],[1336,"impl-Display-for-Pattern"],[1337,"impl-Debug-for-CoreBuiltin"],[1338,"impl-Display-for-CoreBuiltin"],[1339,"impl-Display-for-StandardBuiltin"],[1340,"impl-Debug-for-StandardBuiltin"],[1341,"impl-Debug-for-FFIProcedure"],[1342,"impl-Display-for-FFIProcedure"],[1343,"impl-Display-for-Procedure"],[1344,"impl-Debug-for-Procedure"],[1345,"impl-Display-for-PolyProcedure"],[1346,"impl-Debug-for-PolyProcedure"],[1347,"impl-Debug-for-Mutability"],[1348,"impl-Display-for-Mutability"],[1349,"impl-Display-for-Type"],[1350,"impl-Debug-for-Type"],[1356,"impl-From%3CPolyProcedure%3E-for-ConstExpr"],[1357,"impl-From%3CType%3E-for-ConstExpr"],[1359,"impl-From%3CProcedure%3E-for-ConstExpr"],[1360,"impl-From%3C(String,+Procedure)%3E-for-Declaration"],[1361,"impl-From%3C(%26str,+FFIProcedure)%3E-for-Declaration"],[1362,"impl-From%3C(%26str,+Mutability,+Expr)%3E-for-Declaration"],[1363,"impl-From%3CBox%3CDeclaration%3E%3E-for-Declaration"],[1364,"impl-From%3C(%26str,+Type)%3E-for-Declaration"],[1365,"impl-From%3C(%26str,+Expr)%3E-for-Declaration"],[1366,"impl-From%3C(String,+FFIProcedure)%3E-for-Declaration"],[1367,"impl-From%3C(String,+Mutability,+Expr)%3E-for-Declaration"],[1368,"impl-From%3C(String,+Type)%3E-for-Declaration"],[1369,"impl-From%3C(String,+Mutability,+Option%3CType%3E,+Expr)%3E-for-Declaration"],[1370,"impl-From%3C(String,+Expr)%3E-for-Declaration"],[1371,"impl-From%3CBTreeMap%3CK,+V%3E%3E-for-Declaration"],[1372,"impl-From%3C(String,+ConstExpr)%3E-for-Declaration"],[1373,"impl-From%3C(%26str,+Mutability,+Option%3CType%3E,+Expr)%3E-for-Declaration"],[1374,"impl-From%3C(String,+Mutability,+Type,+Expr)%3E-for-Declaration"],[1375,"impl-From%3C(Pattern,+Expr)%3E-for-Declaration"],[1376,"impl-From%3C(%26str,+Mutability,+Type,+Expr)%3E-for-Declaration"],[1377,"impl-From%3C(%26str,+PolyProcedure)%3E-for-Declaration"],[1379,"impl-From%3C(%26str,+Procedure)%3E-for-Declaration"],[1380,"impl-From%3C(String,+PolyProcedure)%3E-for-Declaration"],[1381,"impl-From%3CVec%3CT%3E%3E-for-Declaration"],[1382,"impl-From%3C(%26str,+ConstExpr)%3E-for-Declaration"],[1977,"impl-Debug-for-FFIBinding"],[1978,"impl-Display-for-FFIBinding"],[2182,"impl-Display-for-Axis"],[2183,"impl-Debug-for-Axis"],[2184,"impl-Debug-for-Direction"],[2185,"impl-Display-for-Direction"],[2186,"impl-Debug-for-Color"],[2187,"impl-Display-for-Color"],[2188,"impl-Debug-for-InputMode"],[2189,"impl-Display-for-InputMode"],[2190,"impl-Display-for-OutputMode"],[2191,"impl-Debug-for-OutputMode"],[2192,"impl-Display-for-Channel"],[2193,"impl-Debug-for-Channel"],[2194,"impl-Display-for-Input"],[2195,"impl-Debug-for-Input"],[2196,"impl-Display-for-Output"],[2197,"impl-Debug-for-Output"],[2564,"impl-Debug-for-CoreOp"],[2565,"impl-Display-for-CoreOp"],[2567,"impl-Display-for-StandardOp"],[2568,"impl-Debug-for-StandardOp"],[2571,"impl-Debug-for-Error"],[2572,"impl-Display-for-Error"]]}]\ ]')); if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; else if (window.initSearch) window.initSearch(searchIndex); diff --git a/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-9dfa7c5f8eedae97/out/asm_parser.rs.html b/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-8ce25d3bec0f97a4/out/asm_parser.rs.html similarity index 99% rename from docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-9dfa7c5f8eedae97/out/asm_parser.rs.html rename to docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-8ce25d3bec0f97a4/out/asm_parser.rs.html index f986ecd5..513efc74 100644 --- a/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-9dfa7c5f8eedae97/out/asm_parser.rs.html +++ b/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-8ce25d3bec0f97a4/out/asm_parser.rs.html @@ -1,4 +1,4 @@ -asm_parser.rs - source +asm_parser.rs - source
1
 2
 3
diff --git a/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-9dfa7c5f8eedae97/out/lir_parser.rs.html b/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-8ce25d3bec0f97a4/out/lir_parser.rs.html
similarity index 99%
rename from docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-9dfa7c5f8eedae97/out/lir_parser.rs.html
rename to docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-8ce25d3bec0f97a4/out/lir_parser.rs.html
index 0cf4de1a..86a568e6 100644
--- a/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-9dfa7c5f8eedae97/out/lir_parser.rs.html
+++ b/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-8ce25d3bec0f97a4/out/lir_parser.rs.html
@@ -1,4 +1,4 @@
-lir_parser.rs - source
+lir_parser.rs - source
     
1
 2
 3
diff --git a/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-9dfa7c5f8eedae97/out/vm_parser.rs.html b/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-8ce25d3bec0f97a4/out/vm_parser.rs.html
similarity index 99%
rename from docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-9dfa7c5f8eedae97/out/vm_parser.rs.html
rename to docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-8ce25d3bec0f97a4/out/vm_parser.rs.html
index 975b683a..6238ee51 100644
--- a/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-9dfa7c5f8eedae97/out/vm_parser.rs.html
+++ b/docs/src/sage/Users/adam/Documents/rust/sage/target/debug/build/sage-8ce25d3bec0f97a4/out/vm_parser.rs.html
@@ -1,4 +1,4 @@
-vm_parser.rs - source
+vm_parser.rs - source
     
1
 2
 3
diff --git a/docs/src/sage/frontend/mod.rs.html b/docs/src/sage/frontend/mod.rs.html
index 83030417..f5ca124d 100644
--- a/docs/src/sage/frontend/mod.rs.html
+++ b/docs/src/sage/frontend/mod.rs.html
@@ -208,6 +208,9 @@
 207
 208
 209
+210
+211
+212
 
mod parse;
 use crate::lir::Expr;
 pub use parse::{parse_module, parse_source, get_lisp_env};
@@ -229,7 +232,10 @@
     let mut expr = parse_source(&without_comments(input), filename.map(|x| x.to_owned()))?;
     use crate::side_effects::Output;
     if include_std {
-        let std_lib = parse_module("std", &without_comments(include_str!("std_lib.sg")))?;
+        // let std_lib = parse_module("std", &without_comments(include_str!("std_lib.sg")), false)?;
+        // Only check the stdlib when we're in debug mode
+        let in_debug_mode = cfg!(debug_assertions);
+        let std_lib = parse_module("std", &without_comments(include_str!("std_lib.sg")), in_debug_mode)?;
         expr = expr.with(std_lib)
     }
     if include_builtins {
diff --git a/docs/src/sage/frontend/parse.rs.html b/docs/src/sage/frontend/parse.rs.html
index 2b8f5693..d137ba03 100644
--- a/docs/src/sage/frontend/parse.rs.html
+++ b/docs/src/sage/frontend/parse.rs.html
@@ -5032,6 +5032,17 @@
 5031
 5032
 5033
+5034
+5035
+5036
+5037
+5038
+5039
+5040
+5041
+5042
+5043
+5044
 
use log::{error, trace};
 use nom::{
     branch::alt,
@@ -5981,7 +5992,7 @@
             Err(e) => e,
             Ok(frontend_code) => {
                 let asm_code = frontend_code
-                    .compile()
+                    .compile(false)
                     .map_err(|e| Expr::error(format!("Invalid AST: {e}")));
                 if let Err(e) = asm_code {
                     return e;
@@ -6012,7 +6023,7 @@
             Err(e) => e,
             Ok(frontend_code) => {
                 let asm_code = frontend_code
-                    .compile()
+                    .compile(false)
                     .map_err(|e| Expr::error(format!("Invalid AST: {e}")));
                 if let Err(e) = asm_code {
                     return e;
@@ -6481,10 +6492,10 @@
     }
 }
 
-pub fn parse_module(name: &str, input: &str) -> Result<Declaration, String> {
+pub fn parse_module(name: &str, input: &str, checked: bool) -> Result<Declaration, String> {
     setup_source_code_locations(input, Some(name.to_owned()));
 
-    match parse_module_contents::<VerboseError<&str>>(name, input) {
+    match parse_module_contents::<VerboseError<&str>>(name, input, checked) {
         Err(nom::Err::Error(e)) => {
             trace!("Error: {e}");
             Err(convert_error(input, e).to_string())
@@ -7050,13 +7061,14 @@
 fn parse_module_contents<'a, E: ParseError<&'a str> + ContextError<&'a str>>(
     name: &str,
     input: &'a str,
+    checked: bool
 ) -> IResult<&'a str, Declaration, E> {
     let (input, _) = whitespace(input)?;
 
     let (input, decls) = many0(context("statement", parse_decl))(input)?;
 
     let (input, _) = whitespace(input)?;
-    Ok((input, Declaration::module(name, decls)))
+    Ok((input, Declaration::module(name, decls, checked)))
 }
 
 fn parse_module_stmt<'a, E: ParseError<&'a str> + ContextError<&'a str>>(
@@ -7071,7 +7083,7 @@
 
     let (input, _) = tag("{")(input)?;
 
-    let (input, module) = parse_module_contents(name, input)?;
+    let (input, module) = parse_module_contents(name, input, true)?;
 
     let (input, _) = cut(tag("}"))(input)?;
     let (input, _) = whitespace(input)?;
@@ -7096,7 +7108,7 @@
         save_source_code_setup();
         setup_source_code_locations(&contents.clone(), Some(name.to_string()));
         if let Ok((new_input, module)) =
-            parse_module_contents::<VerboseError<&str>>(name, &contents)
+            parse_module_contents::<VerboseError<&str>>(name, &contents, true)
         {
             if !new_input.is_empty() {
                 return Err(nom::Err::Error(E::from_error_kind(
@@ -7131,7 +7143,7 @@
         context("type", parse_type_stmt),
         context("enum", parse_enum_stmt),
         context("struct", parse_struct_stmt),
-        context("extern", parse_extern_stmt),
+        context("extern", terminated(parse_extern_stmt, tag(";"))),
         context("const", terminated(parse_const_stmt, tag(";"))),
         context("impl", parse_impl_stmt),
         context("import", parse_import_stmt),
@@ -8845,17 +8857,27 @@
     let (input, _) = whitespace(input)?;
     let (input, is_negative) = opt(tag("-"))(input)?;
 
-    let (input, result) = map(
-        pair(digit1, preceded(char('.'), digit1)),
-        |(a, b): (&str, &str)| format!("{}.{}", a, b).parse::<f64>().unwrap(),
-    )(input)?;
+    // let (input, result) = map(
+    //     pair(digit1, preceded(char('.'), digit1)),
+    //     |(a, b): (&str, &str)| format!("{}.{}", a, b).parse::<f64>().unwrap(),
+    // )(input)?;
 
-    // Peek and make sure the next character is not a symbol character
-    if let Some(c) = input.chars().next() {
-        if is_symbol_char(c) {
-            return Err(nom::Err::Error(E::from_error_kind(input, ErrorKind::Digit)));
-        }
-    }
+    // // Peek and make sure the next character is not a symbol character
+    // if let Some(c) = input.chars().next() {
+    //     if is_symbol_char(c) {
+    //         return Err(nom::Err::Error(E::from_error_kind(input, ErrorKind::Digit)));
+    //     }
+    // }
+
+    // Use builtin nom double
+    let (input, result) = nom::number::complete::recognize_float(input)?;
+    // Try to parse as an integer first
+    let result: f64 = if let Ok(_i) = result.parse::<i64>() {
+        // Fail
+        return Err(nom::Err::Error(E::from_error_kind(input, ErrorKind::Digit)));
+    } else {
+        result.parse().unwrap()
+    };
 
     if is_negative.is_some() {
         Ok((input, -result))
@@ -9304,7 +9326,7 @@
                         .without_comments(languages::rust())
                         .collect::<String>();
                     let parsed = crate::frontend::parse(&code, Some("input"), true, true)?;
-                    let asm_code = parsed.compile();
+                    let asm_code = parsed.compile(true);
                     // let asm_code = parsed.compile();
                     const CALL_STACK_SIZE: usize = 1024;
                     if let Err(ref e) = asm_code {
diff --git a/docs/src/sage/lir/compile.rs.html b/docs/src/sage/lir/compile.rs.html
index a8bd37e7..f7435356 100644
--- a/docs/src/sage/lir/compile.rs.html
+++ b/docs/src/sage/lir/compile.rs.html
@@ -1538,6 +1538,38 @@
 1537
 1538
 1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
 
//! # Compile
 //!
 //! This module contains the `Compile` trait, which allows an LIR expression to be compiled to one of the two variants of the assembly language.
@@ -1569,7 +1601,7 @@
     /// compiled core assembly program, or a fallback standard assembly program.
     ///
     /// On an error, this will return an Err value containing the error.
-    fn compile(self) -> Result<Result<CoreProgram, StandardProgram>, Error>
+    fn compile(self, core: bool) -> Result<Result<CoreProgram, StandardProgram>, Error>
     where
         Self: Sized + Clone,
     {
@@ -1581,24 +1613,33 @@
         let mut core_asm = CoreProgram::default();
 
         info!("Compiling...");
-        // If the expression cannot be compiled into a core assembly program,
-        // then compile it into a standard assembly program.
-        if let Err(err) = self
-            .clone()
-            // Compile the expression into the core assembly program.
-            .compile_expr(&mut Env::default(), &mut core_asm)
-        {
-            warn!("Failed to compile into core assembly program: {err}, falling back on standard assembly");
+        if core {
+            // If the expression cannot be compiled into a core assembly program,
+            // then compile it into a standard assembly program.
+            if let Err(err) = self
+                .clone()
+                // Compile the expression into the core assembly program.
+                .compile_expr(&mut Env::default(), &mut core_asm)
+            {
+                warn!("Failed to compile into core assembly program: {err}, falling back on standard assembly");
+                let mut std_asm = StandardProgram::default();
+                // Compile the expression into the standard assembly program.
+                self.compile_expr(&mut Env::default(), &mut std_asm)?;
+                info!("Compiled to standard assembly successfully");
+                // Return the fallback standard assembly program.
+                Ok(Err(std_asm))
+            } else {
+                info!("Compiled to core assembly successfully");
+                // Return the successfully compiled core assembly program.
+                Ok(Ok(core_asm))
+            }
+        } else {
             let mut std_asm = StandardProgram::default();
             // Compile the expression into the standard assembly program.
             self.compile_expr(&mut Env::default(), &mut std_asm)?;
             info!("Compiled to standard assembly successfully");
             // Return the fallback standard assembly program.
             Ok(Err(std_asm))
-        } else {
-            info!("Compiled to core assembly successfully");
-            // Return the successfully compiled core assembly program.
-            Ok(Ok(core_asm))
         }
     }
     // Compile a specific expression into an assembly program.
@@ -1611,13 +1652,11 @@
         let is_const = matches!(self, Self::ConstExpr(_));
         trace!("Compiling expression {self} (is_const={is_const}) {self:?} in environment {env}");
 
-        let mut debug_str = format!("{self:50}");
-        debug_str.truncate(50);
-
         // Write a little comment about what we're compiling.
         if !matches!(self, Self::ConstExpr(_)) {
             let mut comment = format!("{self}");
-            comment.truncate(70);
+            comment = comment.chars().take(70).collect();
+            output.comment(comment);
         }
 
         // Compile the expression.
@@ -2237,19 +2276,20 @@
 
             // Compile a member access operation.
             Self::Member(ref val, ref member) => {
+                debug!("Compiling non-const member access of {val} with {member} in environment {env}");
                 if let Self::Annotated(expr, metadata) = val.as_ref() {
                     return Self::Member(expr.clone(), member.clone())
                         .compile_expr(env, output)
                         .map_err(|e| e.annotate(metadata.clone()));
                 }
-
                 if let Self::ConstExpr(container) = val.as_ref() {
                     // Write more elegantly
                     if let Ok(val) = container.clone().field(member.clone()).eval(env) {
-                        return val.compile_expr(env, output);
+                        if !matches!(val, ConstExpr::Member(..)) {
+                            return val.compile_expr(env, output);
+                        }
                     }
                 }
-
                 // If the value we're getting a field from is a pointer,
                 // then dereference it and get the field from the value.
                 match val.get_type(env)? {
@@ -2406,6 +2446,13 @@
                             val.clone().compile_expr(env, output)?;
                         }
                         other => {
+                            // First try to get the associated constant
+                            if let Ok(name) = name.clone().as_symbol(env) {
+                                if let Some((constant, _)) = env.get_associated_const(&other, &name) {
+                                    return Expr::from(constant).refer(expected_mutability).compile_expr(env, output);
+                                }
+                            }
+
                             error!("Tried to get a member {name} of a non-struct, non-tuple, non-union, non-pointer type: {other} of value {val} in environment {env}");
                             return Err(Error::InvalidRefer(Expr::Member(
                                 Expr::from(*val.clone()).into(),
@@ -2608,7 +2655,8 @@
     fn compile_expr(self, env: &mut Env, output: &mut dyn AssemblyProgram) -> Result<(), Error> {
         trace!("Compiling constant expression {self} in environment {env}");
         let mut debug_str = format!("{self}");
-        debug_str.truncate(50);
+        // debug_str.truncate(50);
+        debug_str = debug_str.chars().take(50).collect();
 
         let current_instruction = output.current_instruction();
         let ty = self.get_type(env)?;
@@ -2617,7 +2665,8 @@
             Self::Any
             | Self::Template(_, _) => {
                 // Cannot compile a template expression.
-                return Err(Error::UnsizedType(ty));
+                error!("Compiled template expression {self} in environment {env}");
+                return Err(Error::UnsizedType(ty));
             }
 
             Self::Type(t) => {
@@ -2625,6 +2674,7 @@
                     let cexpr = t.simplify_until_const_param(env, false)?;
                     cexpr.compile_expr(env, output)?
                 } else {
+                    error!("Compiled type expression {t} in environment {env}");
                     return Err(Error::UnsizedType(ty));
                 }
             }
@@ -2663,6 +2713,20 @@
                         new_env.add_declaration(&bindings, true)?;
                         expr.field(field).compile_expr(&mut new_env, output)?;
                     }
+                    (Self::Symbol(name), member) => {
+                        if let Some(cexpr) = env.get_const(&name) {
+                            debug!("Found const named {name}");
+                            cexpr.clone().field(member).compile_expr(env, output)?;
+                            // env.get_const(&name).cloned().ok_or_else(|| Error::SymbolNotDefined(name))?.field(member).eval(env)?.compile_expr(env, output)?;
+                        } else {
+                            debug!("Could not get member {member} of symbol {name} in environment {env}");
+                            Expr::Member(
+                                Box::new(Expr::ConstExpr(*container.clone())),
+                                member.into(),
+                            )
+                            .compile_expr(env, output)?
+                        }
+                    }
                     (a, b) => {
                         debug!("Could not identify member access {b} on {a} in environment {env}");
                         Expr::Member(
diff --git a/docs/src/sage/lir/env.rs.html b/docs/src/sage/lir/env.rs.html
index ac602c8b..7e681d59 100644
--- a/docs/src/sage/lir/env.rs.html
+++ b/docs/src/sage/lir/env.rs.html
@@ -1298,6 +1298,22 @@
 1297
 1298
 1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
 
//! # Environment
 //!
 //! This module defines the `Env` type, which is used to store the types, constants, and procedures
@@ -1312,8 +1328,7 @@
 use core::fmt::{Debug, Display, Formatter, Result as FmtResult};
 
 use std::{
-    collections::{HashMap, HashSet},
-    sync::{Arc, RwLock},
+    collections::{HashMap, HashSet}, sync::{Arc, RwLock}
 };
 
 use log::*;
@@ -1339,6 +1354,7 @@
     procs: Arc<HashMap<String, Procedure>>,
     /// The variables defined under the environment.
     vars: Arc<HashMap<String, (Mutability, Type, isize)>>,
+    modules: Arc<HashMap<String, usize>>,
     /// The static variables defined under the environment.
     static_vars: Arc<HashMap<String, (Mutability, Type, Location)>>,
     /// A lookup for the offsets of global variables.
@@ -1459,6 +1475,7 @@
             consts: Arc::new(HashMap::new()),
             procs: Arc::new(HashMap::new()),
             vars: Arc::new(HashMap::new()),
+            modules: Arc::new(HashMap::new()),
             static_vars: Arc::new(HashMap::new()),
             globals: Arc::new(RwLock::new(Globals::new())),
             associated_constants: Arc::new(RwLock::new(HashMap::new())),
@@ -1498,6 +1515,7 @@
             consts: self.consts.clone(),
             procs: self.procs.clone(),
             static_vars: self.static_vars.clone(),
+            modules: self.modules.clone(),
             type_sizes: {
                 // Copy the data but not the lock.
                 // let type_sizes = (*self.type_sizes).clone();
@@ -1979,7 +1997,7 @@
 
     /// Add all the declarations to this environment.
     pub(super) fn add_declaration(&mut self, declaration: &Declaration, compiling: bool) -> Result<(), Error> {
-        self.add_compile_time_declaration(declaration)?;
+        self.add_compile_time_declaration(declaration, compiling)?;
         self.add_local_variable_declaration(declaration, compiling)?;
         Ok(())
     }
@@ -1990,22 +2008,37 @@
     pub(super) fn add_compile_time_declaration(
         &mut self,
         declaration: &Declaration,
+        compiling: bool,
     ) -> Result<(), Error> {
-        trace!("Adding compile-time declaration {declaration}");
+        debug!("Adding compile-time declaration {declaration}");
         match declaration {
-            Declaration::Module(module_name, decls) => {
-                if self.consts.contains_key(module_name) {
-                    return Ok(());
+            Declaration::Module(module_name, decls, checked, defined_id) => {
+                if !checked {
+                    self.save_type_checked_const(ConstExpr::Symbol(module_name.clone()));
+                }
+
+                if let Some(found_id) = self.modules.get(module_name) {
+                    // Check if the declarations are the same
+                    if *found_id == *defined_id {
+                        // If they are the same, we don't need to recompile the module
+                        return Ok(());
+                    } else {
+                        // If they are different, we need to recompile the module
+                        // Arc::make_mut(&mut self.modules).insert(module_name.clone(), *defined_id);
+                        return Err(Error::ModuleRedefined(module_name.clone()))
+                    }
+                } else {
+                    // If the module is not defined, we need to define it
+                    Arc::make_mut(&mut self.modules).insert(module_name.clone(), *defined_id);
                 }
 
-                // Get all the declaration names
-                let mut exports = vec![];
+                let mut exports = vec![];
                 for decl in Declaration::Many(decls.clone()).flatten().iter() {
                     match decl {
                         Declaration::Type(name, _) => {
                             exports.push(name.clone());
                         }
-                        Declaration::Module(name, _submodule) => {
+                        Declaration::Module(name, ..) => {
                             exports.push(name.clone());
                         }
                         Declaration::Const(name, _) => {
@@ -2039,7 +2072,7 @@
                             }
                         }
                         Declaration::Impl(_ty, _attrs) => {
-                            self.add_compile_time_declaration(decl)?;
+                            self.add_compile_time_declaration(decl, compiling)?;
                         }
                         Declaration::Many(_decls) => {
                             unreachable!()
@@ -2055,7 +2088,7 @@
                         .map(|name| (name.clone(), ConstExpr::Symbol(name)))
                         .collect(),
                 );
-
+                
                 let result = exports.with(Declaration::Many(decls.clone())).eval(self)?;
                 self.define_const(module_name, result)
             }
@@ -2068,11 +2101,10 @@
             Declaration::FromImport { module, names } => {
                 let module = module.clone().eval(self)?;
                 for (name, alias) in names {
-                    let access = module.clone().field(ConstExpr::Symbol(name.clone()));
+                    let access = module.clone().field(ConstExpr::Symbol(name.clone())).eval(self)?;
                     let name = alias.clone().unwrap_or(name.clone());
 
-                    // if !self.types.contains_key(&name) {
-                    if let Ok(Type::Type(ty)) = access.get_type(self) {
+                    if let Ok(Type::Type(ty)) = access.get_type(self) {
                         self.define_type(&name, *ty);
                     }
                     self.define_const(&name, access.clone());
@@ -2083,7 +2115,7 @@
                 let module_ty = module.get_type(self)?;
                 if let Type::Struct(fields) = module_ty {
                     for name in fields.keys() {
-                        let access = module.clone().field(ConstExpr::Symbol(name.clone()));
+                        let access = module.clone().field(ConstExpr::Symbol(name.clone())).eval(self)?;
 
                         if let Ok(Type::Type(ty)) = access.get_type(self) {
                             self.define_type(name, *ty);
@@ -2166,11 +2198,11 @@
                     // })?;
                 }
             }
-            Declaration::Var(_, _, _, _) => {}
-            Declaration::VarPat(_, _) => {}
+            Declaration::Var(..) => {}
+            Declaration::VarPat(..) => {}
             Declaration::Many(decls) => {
                 for decl in decls.iter() {
-                    self.add_compile_time_declaration(decl)?;
+                    self.add_compile_time_declaration(decl, compiling)?;
                 }
 
                 for decl in decls.iter() {
@@ -2218,7 +2250,7 @@
             Declaration::Impl(_, _) => {
                 // Implementations are not defined at runtime.
             }
-            Declaration::Module(_, _) => {
+            Declaration::Module(..) => {
                 // Modules are not defined at runtime.
             }
             Declaration::FromImport { .. } => {
diff --git a/docs/src/sage/lir/error.rs.html b/docs/src/sage/lir/error.rs.html
index 3a73f628..1fabd7ab 100644
--- a/docs/src/sage/lir/error.rs.html
+++ b/docs/src/sage/lir/error.rs.html
@@ -352,9 +352,13 @@
 351
 352
 353
+354
+355
+356
+357
+358
 
use super::{
-    Annotation, AssignOp, BinaryOp, ConstExpr, Expr, Mutability, Pattern, PolyProcedure, TernaryOp,
-    Type, UnaryOp,
+    Annotation, AssignOp, BinaryOp, ConstExpr, Expr, Mutability, Pattern, PolyProcedure, TernaryOp, Type, UnaryOp
 };
 use core::fmt::{Debug, Display, Formatter, Result as FmtResult};
 
@@ -468,6 +472,9 @@
     /// Tried to define a type that already exists.
     TypeRedefined(String),
 
+    /// Tried to define a module that already exists.
+    ModuleRedefined(String),
+
     /// Unused expression returned a non-None value.
     UnusedExpr(Expr, Type),
 
@@ -677,6 +684,9 @@
             Self::TypeRedefined(ty) => {
                 write!(f, "type {} redefined", ty)
             }
+            Self::ModuleRedefined(module) => {
+                write!(f, "module {} redefined with conflicting definitions", module)
+            }
             Self::UnusedExpr(expr, ty) => {
                 write!(f, "unused expression {} of type {}", expr, ty)
             }
diff --git a/docs/src/sage/lir/expr/const_expr.rs.html b/docs/src/sage/lir/expr/const_expr.rs.html
index 2f9c453f..ed5a0b0f 100644
--- a/docs/src/sage/lir/expr/const_expr.rs.html
+++ b/docs/src/sage/lir/expr/const_expr.rs.html
@@ -1269,6 +1269,30 @@
 1268
 1269
 1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
 
//! # Constant Expressions
 //!
 //! Constant expressions are expressions that can be evaluated at compile time.
@@ -1416,6 +1440,11 @@
         Self::Proc(Procedure::new(common_name, args, ret, body))
     }
 
+
+    pub fn hard_with(&self, older_decls: impl Into<Declaration>) -> Self {
+        Self::Declare(Box::new(older_decls.into()), self.clone().into())
+    }
+
     /// Return this expression, but with a given declaration in scope.
     pub fn with(&self, older_decls: impl Into<Declaration>) -> Self {
         match self {
@@ -1429,11 +1458,15 @@
             Self::Declare(younger_decls, expr) => {
                 // Start with the older declarations.
                 let mut result = older_decls.into();
-                // Add the younder declarations to the older declarations.
+                // if let Declaration::Module(..) = result {
+                //     self.hard_with(result)
+                // } else {
+                // Add the younder declarations to the older declarations.
                 result.append(*younger_decls.clone());
                 // Return the merged declaration.
                 Self::Declare(Box::new(result), expr.clone())
-            }
+                // }
+            }
 
             Self::Proc(proc) => Self::Proc(proc.with(older_decls)),
             Self::PolyProc(proc) => Self::PolyProc(proc.with(older_decls)),
@@ -1519,6 +1552,11 @@
                 Self::Member(container, member) => {
                     let container_ty = container.get_type_checked(env, i)?;
                     debug!("Member access on type: {container_ty:?}: {container} . {member}");
+
+                    if matches!(container_ty, Type::Pointer(..)) {
+                        return Ok(Self::Member(container, member));
+                    }
+
                     Ok(match (*container.clone(), *member.clone()) {
                         (Self::Annotated(inner, metadata), member) => {
                             Self::Member(inner, member.into())
@@ -1534,9 +1572,9 @@
                                 }
                             }
                             let mut new_env = env.clone();
-                            new_env.add_compile_time_declaration(&decls)?;
-                            access.eval_checked(&new_env, i)?.with(decls)
-                        }
+                            new_env.add_compile_time_declaration(&decls, true)?;
+                            access.eval_checked(&new_env, i)?
+                        }
 
                         (Self::Symbol(name), member) => {
                             if env.get_const(&name).is_some() {
@@ -1556,7 +1594,7 @@
                                 debug!(
                                     "Member access not implemented for: {container_ty} . {member}"
                                 );
-                                return Err(Error::MemberNotFound((*container).into(), member));
+                                return Ok(Self::Member(container.eval_checked(env, i)?.into(), member.into()));
                             }
                         }
 
@@ -1628,9 +1666,19 @@
                                 debug!("Getting associated const: {container_ty} . {member}");
                                 return constant.eval_checked(env, i);
                             }
-                            debug!("Member access not implemented for: {container_ty} . {member}");
-                            return Err(Error::MemberNotFound((*container).into(), member));
-                        }
+
+                            return container.eval_checked(env, i)?.field(member).eval_checked(env, i);
+                            // if let Ok(Some((constant, _))) = member
+                            //     .clone()
+                            //     .as_symbol(env)
+                            //     .map(|name| env.get_associated_const(&container_ty, &name))
+                            // {
+                            //     debug!("Getting associated const: {container_ty} . {member}");
+                            //     return constant.eval_checked(env, i);
+                            // }
+                            // debug!("Member access not implemented for: {container_ty} . {member}");
+                            // return Err(Error::MemberNotFound((*container).into(), member));
+                        }
                         _ => {
                             if let Ok(Some((constant, _))) = member
                                 .clone()
@@ -1672,8 +1720,8 @@
                 Self::Declare(bindings, expr) => {
                     debug!("Declaring compile time bindings: {bindings}");
                     let mut new_env = env.clone();
-                    new_env.add_compile_time_declaration(&bindings)?;
-                    Ok(expr.eval_checked(&new_env, i)?.with(bindings))
+                    new_env.add_compile_time_declaration(&bindings, true)?;
+                    expr.eval_checked(&new_env, i)
                 }
 
                 Self::Monomorphize(expr, ty_args) => {
@@ -1697,7 +1745,7 @@
                         },
                         Self::Declare(bindings, expr) => {
                             let mut new_env = env.clone();
-                            new_env.add_compile_time_declaration(&bindings)?;
+                            new_env.add_compile_time_declaration(&bindings, true)?;
                             expr.monomorphize(ty_args.clone())
                                 .eval_checked(&new_env, i)?
                                 .with(bindings)
@@ -2000,8 +2048,8 @@
 
                     // If we're accessing a member of a type that is not a tuple,
                     // struct, union, or pointer, we cannot access a member.
-                    _ => {
-                        debug!("Member access not implemented for type: {val_type} . {field}");
+                    other => {
+                        debug!("Member access not implemented for type: {other} . {field}");
                         return ConstExpr::Member(ConstExpr::Type(val_type.clone()).into(), field.clone())
                             .get_type(env)
                             .or_else(|e| {
@@ -2031,7 +2079,7 @@
 
             Self::Declare(bindings, expr) => expr.get_type_checked(env, i).or_else(|_| {
                 let mut new_env = env.clone();
-                new_env.add_compile_time_declaration(&bindings)?;
+                new_env.add_compile_time_declaration(&bindings, true)?;
                 expr.get_type_checked(&new_env, i)
             })?,
 
@@ -2046,7 +2094,7 @@
                     }
                     Self::Declare(bindings, expr) => {
                         let mut new_env = env.clone();
-                        new_env.add_compile_time_declaration(&bindings)?;
+                        new_env.add_compile_time_declaration(&bindings, true)?;
                         return expr
                             .monomorphize(ty_args)
                             .get_type_checked(&new_env, i)?
diff --git a/docs/src/sage/lir/expr/declaration.rs.html b/docs/src/sage/lir/expr/declaration.rs.html
index 7414f5d4..74d7c616 100644
--- a/docs/src/sage/lir/expr/declaration.rs.html
+++ b/docs/src/sage/lir/expr/declaration.rs.html
@@ -1001,6 +1001,34 @@
 1000
 1001
 1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
 
use super::{PolyProcedure, Procedure};
 use crate::{
     asm::{AssemblyProgram, CoreOp, Location, SP},
@@ -1016,7 +1044,7 @@
 use log::*;
 use rayon::prelude::*;
 use serde_derive::{Deserialize, Serialize};
-use std::collections::BTreeMap;
+use std::collections::{BTreeMap, HashSet};
 use std::hash::{Hash, Hasher};
 use std::sync::Arc;
 
@@ -1049,7 +1077,7 @@
     /// use the `Declaration::module` method.
     /// This will redistribute the declarations to make sure
     /// everything is in-order internally to be imported/exported.
-    Module(String, Arc<Vec<Declaration>>),
+    Module(String, Arc<Vec<Declaration>>, bool, usize),
     /// Import an element from a module.
     FromImport {
         module: ConstExpr,
@@ -1073,10 +1101,22 @@
         Self::Many(Arc::new(decls.into()))
     }
 
-    /// Create a module with a given name and a list of declarations
-    pub fn module(name: impl ToString, decls: impl Into<Vec<Self>>) -> Self {
+    /// Create a module with a given name and a list of declarations, and whether or not it is checked.
+    pub fn module(name: impl ToString, decls: impl Into<Vec<Self>>, checked: bool) -> Self {
+        lazy_static::lazy_static! {
+            static ref MODULE_COUNT: std::sync::Mutex<usize> = std::sync::Mutex::new(0);
+        }
+        let module_count = {
+            let mut count = MODULE_COUNT.lock().unwrap();
+            *count += 1;
+            *count
+        };
+
         let mut decls = decls.into();
         let mut import = Self::many(decls.clone());
+        if !checked {
+            import.mark_no_checking();
+        }
         import.filter(&|decl| {
             decl.is_compile_time_declaration() && !matches!(decl, Declaration::Impl(..))
         });
@@ -1085,7 +1125,28 @@
             decl.distribute_decls(&import.clone());
         }
 
-        Self::Module(name.to_string(), Arc::new(decls))
+        let mut result = Self::Module(name.to_string(), Arc::new(decls), checked, module_count);
+        if !checked {
+            result.mark_no_checking();
+        }
+        result
+    }
+
+    fn mark_no_checking(&mut self) {
+        match self {
+            Self::Module(_, decls, checked, ..) => {
+                *checked = false;
+                for decl in Arc::make_mut(decls).iter_mut() {
+                    decl.mark_no_checking();
+                }
+            }
+            Self::Many(decls) => {
+                for decl in Arc::make_mut(decls).iter_mut() {
+                    decl.mark_no_checking();
+                }
+            }
+            _ => {}
+        }
     }
 
     /// Filter all the subdeclarations to satisfy some condition.
@@ -1096,7 +1157,7 @@
                 decls.retain(|decl| f(decl));
                 decls.iter_mut().for_each(|decl| decl.filter(f));
             }
-            Self::Module(_name, decls) => {
+            Self::Module(_name, decls, ..) => {
                 let decls = Arc::make_mut(decls);
                 decls.retain(|decl| f(decl));
                 decls.iter_mut().for_each(|decl| decl.filter(f));
@@ -1121,7 +1182,7 @@
                     decl.distribute_decls(distributed);
                 }
             }
-            Self::Module(_name, decls) => {
+            Self::Module(_name, decls, ..) => {
                 let decls = Arc::make_mut(decls);
                 for decl in decls.iter_mut() {
                     decl.distribute_decls(distributed);
@@ -1214,7 +1275,7 @@
     ) -> Result<usize, Error> {
         // Add all the compile time declarations to the environment so that they can be used
         // in these declarations.
-        env.add_compile_time_declaration(self)?;
+        env.add_compile_time_declaration(self, true)?;
         // The size of the variables declared.
         // This is used to pop the stack when we're done.
         let mut var_size = 0;
@@ -1327,6 +1388,25 @@
         Ok(var_size)
     }
 
+    /// Detect duplicate modules
+    fn detect_duplicate_modules(&self, modules: &mut HashSet<String>) -> Result<(), Error> {
+        match self {
+            Self::Module(name, _decls, ..) => {
+                if modules.contains(name) {
+                    return Err(Error::ModuleRedefined(name.clone()));
+                }
+                modules.insert(name.clone());
+            }
+            Self::Many(decls) => {
+                for decl in decls.iter() {
+                    decl.detect_duplicate_modules(modules)?;
+                }
+            }
+            _ => {}
+        }
+        Ok(())
+    }
+
     /// Merge two declarations into one, while preserving the order of the declarations.
     /// This will not mutate the declaration, but will return a new declaration.
     pub(crate) fn join(&self, other: impl Into<Self>) -> Self {
@@ -1373,7 +1453,7 @@
             Self::PolyProc(_name, proc) => {
                 proc.substitute(substitution_name, substitution_ty);
             }
-            Self::Type(_name, ty) => {
+            Self::Type(_name , ty) => {
                 *ty = ty.substitute(substitution_name, substitution_ty);
             }
             Self::Const(_name, expr) => {
@@ -1401,7 +1481,7 @@
                     decl.substitute(substitution_name, substitution_ty);
                 });
             }
-            Self::Module(_name, decls) => {
+            Self::Module(_name, decls, ..) => {
                 Arc::make_mut(decls).par_iter_mut().for_each(|decl| {
                     decl.substitute(substitution_name, substitution_ty);
                 });
@@ -1534,7 +1614,7 @@
             Self::Impl(ty, impls) => {
                 let mut new_env = env.clone();
                 // Add all the compile-time declarations to the environment.
-                new_env.add_compile_time_declaration(&self.clone())?;
+                new_env.add_compile_time_declaration(&self.clone(), false)?;
 
                 if let Type::Apply(template, supplied_params) = ty {
                     // If this is an implementation for a template type, we need to
@@ -1601,10 +1681,16 @@
             // Typecheck a multi-declaration.
             Self::Many(decls) => {
                 let mut new_env = env.clone();
+
                 // Add all the compile-time declarations to the environment.
-                new_env.add_declaration(&self.clone(), false)?;
+                self.detect_duplicate_modules(&mut HashSet::new())?;
+                new_env.add_declaration(&self.clone(), false)?;
 
                 // Get all the compile time declarations so we can type check them in parallel.
+                // let (comp_time_decls, run_time_decls): (Vec<_>, Vec<_>) = self.clone()
+                //     .flatten()
+                //     .into_iter()
+                //     .partition(|decl| decl.is_compile_time_declaration());
                 let (comp_time_decls, run_time_decls): (Vec<_>, Vec<_>) = decls
                     .iter()
                     .partition(|decl| decl.is_compile_time_declaration());
@@ -1614,7 +1700,8 @@
                     comp_time_decls.par_iter().try_for_each(|decl| {
                         debug!("Typechecking decl: {decl}");
                         decl.type_check(&new_env)
-                    })?;
+                        // Ok::<(), Error>(())
+                    })?;
                 }
 
                 run_time_decls
@@ -1624,62 +1711,28 @@
                         decl.type_check(&new_env)?;
                         new_env.add_declaration(decl, false)
                     })?;
+            }
 
-                /*
-                lazy_static! {
-                    // Use this to limit recursive parallelism.
-                    static ref PARALLEL_RECURSION_DEPTH: RwLock<usize> = RwLock::new(0);
-                }
-
-                const PARALLEL_RECURSION_LIMIT: usize = 16;
-
-                // Get the current recursion depth.
-                let depth = *PARALLEL_RECURSION_DEPTH.read().unwrap();
-
-                if depth < PARALLEL_RECURSION_LIMIT && comp_time_decls.len() > 2 {
-                    // Increment the recursion depth.
-                    *PARALLEL_RECURSION_DEPTH.write().unwrap() += 1;
-
-                    // Type check all the compile time declarations in parallel.
-                    // for chunk in comp_time_decls.chunks(2) {
-                    //     info!("Typechecking {} declarations in parallel", chunk.len());
-
-                    //     chunk.par_iter().try_for_each(|decl| {
-                    //         decl.type_check(&new_env)
-                    //     })?;
-                    // }
-                    debug!("Typechecking {} declarations in parallel", comp_time_decls.len());
-                    comp_time_decls.par_iter().try_for_each(|decl| {
-                        decl.type_check(&new_env)
-                    })?;
-                    // for decl in comp_time_decls {
-                    //     decl.type_check(&new_env)?;
-                    // }
-                } else {
-                    // Type check all the compile time declarations sequentially.
-                    for decl in comp_time_decls {
-                        decl.type_check(&new_env)?;
+            Self::Module(name, decls, checked, ..) => {
+                Self::Many(decls.clone()).detect_duplicate_modules(&mut HashSet::new())?;
+                if *checked {
+                    let mut new_env = env.clone();
+                    // Add all the compile-time declarations to the environment.
+                    new_env.add_declaration(&Self::Many(decls.clone()), false)?;
+                    trace!("Typechecking module {}", name);
+                    // Get all the compile time declarations so we can type check them in parallel.
+                    let (comp_time_decls, _run_time_decls): (Vec<_>, Vec<_>) = decls
+                        .iter()
+                        .partition(|decl| decl.is_compile_time_declaration());
+    
+                    if !comp_time_decls.is_empty() {
+                        // Type check all the compile time declarations in parallel.
+                        comp_time_decls
+                            .par_iter()
+                            .try_for_each(|decl| decl.type_check(&new_env))?;
                     }
-                }
-                 */
-            }
-
-            Self::Module(name, decls) => {
-                let mut new_env = env.clone();
-
-                // Add all the compile-time declarations to the environment.
-                new_env.add_declaration(&Self::Many(decls.clone()), false)?;
-                trace!("Typechecking module {}", name);
-                // Get all the compile time declarations so we can type check them in parallel.
-                let (comp_time_decls, _run_time_decls): (Vec<_>, Vec<_>) = decls
-                    .iter()
-                    .partition(|decl| decl.is_compile_time_declaration());
-
-                if !comp_time_decls.is_empty() {
-                    // Type check all the compile time declarations in parallel.
-                    comp_time_decls
-                        .par_iter()
-                        .try_for_each(|decl| decl.type_check(&new_env))?;
+                } else {
+                    env.save_type_checked_const(ConstExpr::Symbol(name.clone()))
                 }
             }
 
@@ -1690,7 +1743,9 @@
                     access.type_check(env)?;
                 }
             }
-            Self::FromImportAll(module) => module.type_check(env)?,
+            Self::FromImportAll(module) => {
+                module.type_check(env)?;
+            },
         }
         Ok(())
     }
@@ -1743,7 +1798,7 @@
                     writeln!(f, "{}", decl)?;
                 }
             }
-            Self::Module(name, _decls) => {
+            Self::Module(name, _decls, ..) => {
                 write!(f, "module {} {{..}}", name)?;
             }
             Self::FromImport { module, names } => {
@@ -1986,10 +2041,11 @@
                 state.write_u8(9);
                 decls.hash(state);
             }
-            Self::Module(name, decls) => {
+            Self::Module(name, decls, _checked, id) => {
                 state.write_u8(10);
                 name.hash(state);
                 decls.hash(state);
+                id.hash(state);
             }
             Self::FromImport { module, names } => {
                 state.write_u8(11);
diff --git a/docs/src/sage/lir/expr/expression.rs.html b/docs/src/sage/lir/expr/expression.rs.html
index 7497d158..3db54e55 100644
--- a/docs/src/sage/lir/expr/expression.rs.html
+++ b/docs/src/sage/lir/expr/expression.rs.html
@@ -1150,8 +1150,6 @@
 1149
 1150
 1151
-1152
-1153
 
//! # Expression
 //!
 //! An expression is a runtime value.
@@ -1633,15 +1631,13 @@
             Self::Declare(younger_decls, expr) => {
                 // Start with the older declarations.
                 let mut result = older_decls.into();
-
                 if let Declaration::Module(..) = result {
-                    self.hard_with(result)
-                } else {
-                    // Add the younder declarations to the older declarations.
-                    result.append(*younger_decls.clone());
-                    // Return the merged declaration.
-                    Self::Declare(Box::new(result), expr.clone())
+                    return self.hard_with(result);
                 }
+                // Add the younder declarations to the older declarations.
+                result.append(*younger_decls.clone());
+                // Return the merged declaration.
+                Self::Declare(Box::new(result), expr.clone())
             }
 
             // Return the expression with the declaration in scope.
diff --git a/docs/src/sage/lir/expr/pattern.rs.html b/docs/src/sage/lir/expr/pattern.rs.html
index 6d599560..4a387273 100644
--- a/docs/src/sage/lir/expr/pattern.rs.html
+++ b/docs/src/sage/lir/expr/pattern.rs.html
@@ -1092,6 +1092,8 @@
 1091
 1092
 1093
+1094
+1095
 
use crate::lir::*;
 use core::fmt::{Debug, Display, Formatter, Result as FmtResult};
 use std::collections::{BTreeMap, HashMap};
@@ -1304,6 +1306,7 @@
                                     found[index] = true;
                                 }
                             } else {
+                                error!("In pattern matching, the type of the expression does not match the type of the enum.");
                                 // If the types don't match (the pattern doesn't match the matched expression's type), return an error.
                                 return Err(Error::MismatchedTypes {
                                     expected: matching_expr_ty.clone(),
@@ -1536,7 +1539,8 @@
         // It should be the same as the type of the branch.
         if !expected.can_decay_to(&found, env)? {
             // If not, return an error.
-            return Err(Error::MismatchedTypes {
+            error!("Result of match expression {} does not match expected type {} in expr {matching_expr} for branch {branch} ({result_expr})", found, expected);
+            return Err(Error::MismatchedTypes {
                 expected,
                 found,
                 expr: matching_expr.clone(),
diff --git a/docs/src/sage/lir/types/check.rs.html b/docs/src/sage/lir/types/check.rs.html
index 2a960030..b2e7693c 100644
--- a/docs/src/sage/lir/types/check.rs.html
+++ b/docs/src/sage/lir/types/check.rs.html
@@ -2357,7 +2357,7 @@
                     return Err(Error::InvalidConstExpr(self.clone()));
                 }
                 // Add all the bindings to the environment.
-                new_env.add_compile_time_declaration(bindings)?;
+                new_env.add_compile_time_declaration(bindings, false)?;
                 // Typecheck the bindings
                 bindings.type_check(&new_env)?;
                 // Typecheck the expression with the bindings defined.
diff --git a/docs/src/sage/lir/types/inference.rs.html b/docs/src/sage/lir/types/inference.rs.html
index 2d668ba7..dab079c1 100644
--- a/docs/src/sage/lir/types/inference.rs.html
+++ b/docs/src/sage/lir/types/inference.rs.html
@@ -551,12 +551,6 @@
 550
 551
 552
-553
-554
-555
-556
-557
-558
 
//! # Type Inference
 //!
 //! This module contains the type inference algorithm for the language.
@@ -607,12 +601,6 @@
             }
 
             Self::Declare(declaration, body) => {
-                if let Ok(ty) = body.get_type_checked(env, i) {
-                    // If the body returns a value, then the declaration
-                    // returns the type of the body.
-                    return Ok(ty);
-                }
-
                 // Create a new environment with the declarations.
                 let mut new_env = env.clone();
                 // Add the declarations to the environment.
diff --git a/docs/trait.impl/core/clone/trait.Clone.js b/docs/trait.impl/core/clone/trait.Clone.js
index 1f3c7b26..0d4b85a0 100644
--- a/docs/trait.impl/core/clone/trait.Clone.js
+++ b/docs/trait.impl/core/clone/trait.Clone.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"sage":[["impl Clone for BitwiseNor"],["impl Clone for StandardProgram"],["impl Clone for Box<dyn AssignOp>"],["impl Clone for Globals"],["impl Clone for Declaration"],["impl Clone for Delete"],["impl Clone for CoreProgram"],["impl Clone for StandardOp"],["impl Clone for Pattern"],["impl Clone for Output"],["impl Clone for OutputMode"],["impl Clone for FFIBinding"],["impl Clone for Annotation"],["impl Clone for Tag"],["impl Clone for Box<dyn UnaryOp>"],["impl Clone for CoreOp"],["impl Clone for Put"],["impl Clone for Location"],["impl Clone for Not"],["impl Clone for BitwiseXor"],["impl Clone for Channel"],["impl Clone for Box<dyn TernaryOp>"],["impl Clone for StandardProgram"],["impl Clone for FFIProcedure"],["impl Clone for BitwiseOr"],["impl Clone for BitwiseAnd"],["impl Clone for ConstExpr"],["impl Clone for Expr"],["impl Clone for Negate"],["impl Clone for Type"],["impl Clone for Get"],["impl Clone for And"],["impl Clone for CoreBuiltin"],["impl Clone for Data"],["impl Clone for Assign"],["impl Clone for SourceCodeLocation"],["impl Clone for CoreOp"],["impl Clone for StandardOp"],["impl Clone for Direction"],["impl Clone for BitwiseNot"],["impl Clone for StandardDevice"],["impl Clone for PolyProcedure"],["impl Clone for Or"],["impl Clone for Add"],["impl Clone for Error"],["impl Clone for Mutability"],["impl Clone for Env"],["impl Clone for Error"],["impl Clone for Axis"],["impl Clone for StandardBuiltin"],["impl Clone for Comparison"],["impl Clone for Color"],["impl Clone for Error"],["impl Clone for Input"],["impl Clone for Procedure"],["impl Clone for Arithmetic"],["impl Clone for BitwiseNand"],["impl Clone for InputMode"],["impl Clone for New"],["impl Clone for CoreProgram"],["impl Clone for Box<dyn BinaryOp>"]]
+"sage":[["impl Clone for Mutability"],["impl Clone for Output"],["impl Clone for BitwiseNand"],["impl Clone for Box<dyn BinaryOp>"],["impl Clone for Box<dyn UnaryOp>"],["impl Clone for Put"],["impl Clone for InputMode"],["impl Clone for CoreProgram"],["impl Clone for Error"],["impl Clone for Not"],["impl Clone for FFIBinding"],["impl Clone for CoreBuiltin"],["impl Clone for Tag"],["impl Clone for StandardDevice"],["impl Clone for Pattern"],["impl Clone for Color"],["impl Clone for Add"],["impl Clone for Box<dyn TernaryOp>"],["impl Clone for Channel"],["impl Clone for Or"],["impl Clone for Type"],["impl Clone for Axis"],["impl Clone for StandardProgram"],["impl Clone for BitwiseNot"],["impl Clone for SourceCodeLocation"],["impl Clone for StandardOp"],["impl Clone for Get"],["impl Clone for FFIProcedure"],["impl Clone for StandardOp"],["impl Clone for Error"],["impl Clone for Arithmetic"],["impl Clone for BitwiseNor"],["impl Clone for Globals"],["impl Clone for Annotation"],["impl Clone for StandardProgram"],["impl Clone for Negate"],["impl Clone for New"],["impl Clone for Procedure"],["impl Clone for ConstExpr"],["impl Clone for Env"],["impl Clone for Comparison"],["impl Clone for And"],["impl Clone for Box<dyn AssignOp>"],["impl Clone for CoreOp"],["impl Clone for BitwiseOr"],["impl Clone for Data"],["impl Clone for OutputMode"],["impl Clone for StandardBuiltin"],["impl Clone for Direction"],["impl Clone for CoreProgram"],["impl Clone for Declaration"],["impl Clone for PolyProcedure"],["impl Clone for CoreOp"],["impl Clone for Assign"],["impl Clone for Location"],["impl Clone for BitwiseAnd"],["impl Clone for BitwiseXor"],["impl Clone for Input"],["impl Clone for Delete"],["impl Clone for Error"],["impl Clone for Expr"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/trait.impl/core/cmp/trait.Eq.js b/docs/trait.impl/core/cmp/trait.Eq.js
index 57c5ad41..18509ea6 100644
--- a/docs/trait.impl/core/cmp/trait.Eq.js
+++ b/docs/trait.impl/core/cmp/trait.Eq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"sage":[["impl Eq for InputMode"],["impl Eq for Color"],["impl Eq for CoreOp"],["impl Eq for Data"],["impl Eq for CoreBuiltin"],["impl Eq for Output"],["impl Eq for Procedure"],["impl Eq for CoreProgram"],["impl Eq for dyn TernaryOp"],["impl Eq for FFIBinding"],["impl Eq for BitwiseNot"],["impl Eq for dyn AssignOp"],["impl Eq for CoreOp"],["impl Eq for Channel"],["impl Eq for BitwiseNand"],["impl Eq for BitwiseXor"],["impl Eq for Input"],["impl Eq for Pattern"],["impl Eq for Tag"],["impl Eq for Comparison"],["impl Eq for Direction"],["impl Eq for CoreProgram"],["impl Eq for Add"],["impl Eq for Negate"],["impl Eq for StandardBuiltin"],["impl Eq for New"],["impl Eq for Delete"],["impl Eq for Get"],["impl Eq for OutputMode"],["impl Eq for Mutability"],["impl Eq for BitwiseNor"],["impl Eq for BitwiseOr"],["impl Eq for Put"],["impl Eq for dyn UnaryOp"],["impl Eq for And"],["impl Eq for PolyProcedure"],["impl Eq for Annotation"],["impl Eq for Axis"],["impl Eq for Location"],["impl Eq for dyn BinaryOp"],["impl Eq for SourceCodeLocation"],["impl Eq for Type"],["impl Eq for FFIProcedure"],["impl Eq for BitwiseAnd"],["impl Eq for ConstExpr"]]
+"sage":[["impl Eq for Tag"],["impl Eq for SourceCodeLocation"],["impl Eq for Delete"],["impl Eq for Add"],["impl Eq for Direction"],["impl Eq for CoreProgram"],["impl Eq for ConstExpr"],["impl Eq for Comparison"],["impl Eq for FFIProcedure"],["impl Eq for OutputMode"],["impl Eq for Put"],["impl Eq for New"],["impl Eq for Axis"],["impl Eq for dyn TernaryOp"],["impl Eq for BitwiseNor"],["impl Eq for Color"],["impl Eq for StandardBuiltin"],["impl Eq for CoreOp"],["impl Eq for Get"],["impl Eq for Negate"],["impl Eq for Mutability"],["impl Eq for BitwiseNot"],["impl Eq for And"],["impl Eq for Data"],["impl Eq for Pattern"],["impl Eq for CoreProgram"],["impl Eq for FFIBinding"],["impl Eq for CoreBuiltin"],["impl Eq for Input"],["impl Eq for BitwiseOr"],["impl Eq for BitwiseAnd"],["impl Eq for Output"],["impl Eq for BitwiseXor"],["impl Eq for Type"],["impl Eq for BitwiseNand"],["impl Eq for CoreOp"],["impl Eq for Channel"],["impl Eq for dyn AssignOp"],["impl Eq for Annotation"],["impl Eq for dyn UnaryOp"],["impl Eq for Procedure"],["impl Eq for PolyProcedure"],["impl Eq for Location"],["impl Eq for dyn BinaryOp"],["impl Eq for InputMode"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/trait.impl/core/cmp/trait.Ord.js b/docs/trait.impl/core/cmp/trait.Ord.js
index f675806f..16437b0c 100644
--- a/docs/trait.impl/core/cmp/trait.Ord.js
+++ b/docs/trait.impl/core/cmp/trait.Ord.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"sage":[["impl Ord for Output"],["impl Ord for BitwiseNor"],["impl Ord for Mutability"],["impl Ord for Get"],["impl Ord for Axis"],["impl Ord for Data"],["impl Ord for Direction"],["impl Ord for dyn AssignOp"],["impl Ord for SourceCodeLocation"],["impl Ord for CoreOp"],["impl Ord for Color"],["impl Ord for BitwiseOr"],["impl Ord for Negate"],["impl Ord for Tag"],["impl Ord for FFIBinding"],["impl Ord for OutputMode"],["impl Ord for CoreProgram"],["impl Ord for Delete"],["impl Ord for Put"],["impl Ord for dyn TernaryOp"],["impl Ord for Add"],["impl Ord for New"],["impl Ord for BitwiseXor"],["impl Ord for And"],["impl Ord for CoreOp"],["impl Ord for CoreProgram"],["impl Ord for BitwiseNot"],["impl Ord for dyn BinaryOp"],["impl Ord for InputMode"],["impl Ord for Comparison"],["impl Ord for BitwiseNand"],["impl Ord for BitwiseAnd"],["impl Ord for Location"],["impl Ord for Channel"],["impl Ord for Input"],["impl Ord for Annotation"],["impl Ord for dyn UnaryOp"]]
+"sage":[["impl Ord for Negate"],["impl Ord for Color"],["impl Ord for SourceCodeLocation"],["impl Ord for Output"],["impl Ord for Get"],["impl Ord for dyn TernaryOp"],["impl Ord for New"],["impl Ord for Channel"],["impl Ord for Location"],["impl Ord for BitwiseNot"],["impl Ord for Annotation"],["impl Ord for FFIBinding"],["impl Ord for And"],["impl Ord for BitwiseNor"],["impl Ord for Delete"],["impl Ord for CoreOp"],["impl Ord for Comparison"],["impl Ord for Tag"],["impl Ord for OutputMode"],["impl Ord for dyn BinaryOp"],["impl Ord for BitwiseAnd"],["impl Ord for Add"],["impl Ord for BitwiseXor"],["impl Ord for Data"],["impl Ord for BitwiseOr"],["impl Ord for dyn UnaryOp"],["impl Ord for CoreOp"],["impl Ord for Axis"],["impl Ord for InputMode"],["impl Ord for Put"],["impl Ord for CoreProgram"],["impl Ord for Mutability"],["impl Ord for dyn AssignOp"],["impl Ord for BitwiseNand"],["impl Ord for Direction"],["impl Ord for CoreProgram"],["impl Ord for Input"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/trait.impl/core/cmp/trait.PartialEq.js b/docs/trait.impl/core/cmp/trait.PartialEq.js
index b52139ec..ae127cc4 100644
--- a/docs/trait.impl/core/cmp/trait.PartialEq.js
+++ b/docs/trait.impl/core/cmp/trait.PartialEq.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"sage":[["impl PartialEq for OutputMode"],["impl PartialEq for ConstExpr"],["impl PartialEq for dyn UnaryOp"],["impl PartialEq for FFIProcedure"],["impl PartialEq for Tag"],["impl PartialEq for Input"],["impl PartialEq for Negate"],["impl PartialEq for Error"],["impl PartialEq for Add"],["impl PartialEq for StandardProgram"],["impl PartialEq for Channel"],["impl PartialEq for Direction"],["impl PartialEq for StandardOp"],["impl PartialEq for CoreProgram"],["impl PartialEq for BitwiseNot"],["impl PartialEq for Type"],["impl PartialEq for dyn BinaryOp"],["impl PartialEq for dyn TernaryOp"],["impl PartialEq for Procedure"],["impl PartialEq for Annotation"],["impl PartialEq for BitwiseOr"],["impl PartialEq for Comparison"],["impl PartialEq for Declaration"],["impl PartialEq for Get"],["impl PartialEq for Pattern"],["impl PartialEq for BitwiseNor"],["impl PartialEq for Put"],["impl PartialEq for SourceCodeLocation"],["impl PartialEq for Mutability"],["impl PartialEq for Axis"],["impl PartialEq for StandardOp"],["impl PartialEq for New"],["impl PartialEq for Output"],["impl PartialEq for And"],["impl PartialEq for Data"],["impl PartialEq for PolyProcedure"],["impl PartialEq for Color"],["impl PartialEq for CoreOp"],["impl PartialEq for BitwiseXor"],["impl PartialEq for CoreProgram"],["impl PartialEq for CoreOp"],["impl PartialEq for Delete"],["impl PartialEq for Error"],["impl PartialEq for BitwiseAnd"],["impl PartialEq for StandardProgram"],["impl PartialEq for dyn AssignOp"],["impl PartialEq for FFIBinding"],["impl PartialEq for CoreBuiltin"],["impl PartialEq for Location"],["impl PartialEq for Expr"],["impl PartialEq for InputMode"],["impl PartialEq for StandardBuiltin"],["impl PartialEq for BitwiseNand"]]
+"sage":[["impl PartialEq for dyn TernaryOp"],["impl PartialEq for Negate"],["impl PartialEq for InputMode"],["impl PartialEq for FFIProcedure"],["impl PartialEq for StandardOp"],["impl PartialEq for Direction"],["impl PartialEq for Location"],["impl PartialEq for CoreOp"],["impl PartialEq for Data"],["impl PartialEq for BitwiseOr"],["impl PartialEq for BitwiseNot"],["impl PartialEq for Get"],["impl PartialEq for OutputMode"],["impl PartialEq for CoreBuiltin"],["impl PartialEq for Delete"],["impl PartialEq for BitwiseXor"],["impl PartialEq for StandardOp"],["impl PartialEq for StandardProgram"],["impl PartialEq for Input"],["impl PartialEq for Tag"],["impl PartialEq for Color"],["impl PartialEq for Mutability"],["impl PartialEq for Type"],["impl PartialEq for FFIBinding"],["impl PartialEq for StandardProgram"],["impl PartialEq for Comparison"],["impl PartialEq for Add"],["impl PartialEq for PolyProcedure"],["impl PartialEq for Declaration"],["impl PartialEq for SourceCodeLocation"],["impl PartialEq for dyn UnaryOp"],["impl PartialEq for Error"],["impl PartialEq for Expr"],["impl PartialEq for Pattern"],["impl PartialEq for Axis"],["impl PartialEq for CoreProgram"],["impl PartialEq for Annotation"],["impl PartialEq for BitwiseNor"],["impl PartialEq for And"],["impl PartialEq for dyn BinaryOp"],["impl PartialEq for Channel"],["impl PartialEq for Put"],["impl PartialEq for Error"],["impl PartialEq for CoreProgram"],["impl PartialEq for BitwiseAnd"],["impl PartialEq for New"],["impl PartialEq for Procedure"],["impl PartialEq for Output"],["impl PartialEq for CoreOp"],["impl PartialEq for BitwiseNand"],["impl PartialEq for StandardBuiltin"],["impl PartialEq for dyn AssignOp"],["impl PartialEq for ConstExpr"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/trait.impl/core/cmp/trait.PartialOrd.js b/docs/trait.impl/core/cmp/trait.PartialOrd.js
index 55fb80ec..ac66be0c 100644
--- a/docs/trait.impl/core/cmp/trait.PartialOrd.js
+++ b/docs/trait.impl/core/cmp/trait.PartialOrd.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"sage":[["impl PartialOrd for dyn AssignOp"],["impl PartialOrd for CoreProgram"],["impl PartialOrd for SourceCodeLocation"],["impl PartialOrd for Comparison"],["impl PartialOrd for dyn TernaryOp"],["impl PartialOrd for Channel"],["impl PartialOrd for StandardOp"],["impl PartialOrd for dyn BinaryOp"],["impl PartialOrd for dyn UnaryOp"],["impl PartialOrd for Color"],["impl PartialOrd for BitwiseNot"],["impl PartialOrd for BitwiseXor"],["impl PartialOrd for InputMode"],["impl PartialOrd for Put"],["impl PartialOrd for BitwiseAnd"],["impl PartialOrd for StandardProgram"],["impl PartialOrd for Error"],["impl PartialOrd for Output"],["impl PartialOrd for Tag"],["impl PartialOrd for Error"],["impl PartialOrd for Location"],["impl PartialOrd for Get"],["impl PartialOrd for BitwiseNor"],["impl PartialOrd for StandardProgram"],["impl PartialOrd for CoreProgram"],["impl PartialOrd for CoreOp"],["impl PartialOrd for Data"],["impl PartialOrd for BitwiseNand"],["impl PartialOrd for Add"],["impl PartialOrd for CoreOp"],["impl PartialOrd for StandardOp"],["impl PartialOrd for Axis"],["impl PartialOrd for Annotation"],["impl PartialOrd for BitwiseOr"],["impl PartialOrd for Mutability"],["impl PartialOrd for OutputMode"],["impl PartialOrd for Delete"],["impl PartialOrd for Negate"],["impl PartialOrd for Input"],["impl PartialOrd for New"],["impl PartialOrd for And"],["impl PartialOrd for Direction"],["impl PartialOrd for FFIBinding"]]
+"sage":[["impl PartialOrd for dyn AssignOp"],["impl PartialOrd for Mutability"],["impl PartialOrd for dyn TernaryOp"],["impl PartialOrd for BitwiseNand"],["impl PartialOrd for StandardOp"],["impl PartialOrd for Axis"],["impl PartialOrd for Add"],["impl PartialOrd for Delete"],["impl PartialOrd for Tag"],["impl PartialOrd for Color"],["impl PartialOrd for BitwiseNot"],["impl PartialOrd for CoreOp"],["impl PartialOrd for dyn UnaryOp"],["impl PartialOrd for Output"],["impl PartialOrd for And"],["impl PartialOrd for Channel"],["impl PartialOrd for BitwiseOr"],["impl PartialOrd for BitwiseXor"],["impl PartialOrd for CoreProgram"],["impl PartialOrd for Direction"],["impl PartialOrd for CoreOp"],["impl PartialOrd for SourceCodeLocation"],["impl PartialOrd for New"],["impl PartialOrd for Comparison"],["impl PartialOrd for Negate"],["impl PartialOrd for Error"],["impl PartialOrd for Location"],["impl PartialOrd for Data"],["impl PartialOrd for Error"],["impl PartialOrd for Put"],["impl PartialOrd for StandardProgram"],["impl PartialOrd for FFIBinding"],["impl PartialOrd for BitwiseNor"],["impl PartialOrd for InputMode"],["impl PartialOrd for StandardOp"],["impl PartialOrd for dyn BinaryOp"],["impl PartialOrd for OutputMode"],["impl PartialOrd for Get"],["impl PartialOrd for StandardProgram"],["impl PartialOrd for Input"],["impl PartialOrd for Annotation"],["impl PartialOrd for CoreProgram"],["impl PartialOrd for BitwiseAnd"]]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/trait.impl/core/convert/trait.From.js b/docs/trait.impl/core/convert/trait.From.js
index 236a8300..a56c31d0 100644
--- a/docs/trait.impl/core/convert/trait.From.js
+++ b/docs/trait.impl/core/convert/trait.From.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"sage":[["impl From<Type> for ConstExpr"],["impl From<(Pattern, Expr)> for Declaration"],["impl From<(String, FFIProcedure)> for Declaration"],["impl From<(&str, PolyProcedure)> for Declaration"],["impl From<(&str, Mutability, Option<Type>, Expr)> for Declaration"],["impl From<(String, Expr)> for Declaration"],["impl From<(&str, Expr)> for Declaration"],["impl From<(String, Mutability, Expr)> for Declaration"],["impl From<(String, Procedure)> for Declaration"],["impl From<(String, ConstExpr)> for Declaration"],["impl From<Box<Declaration>> for Declaration"],["impl From<Mutability> for bool"],["impl From<CoreProgram> for StandardProgram"],["impl From<CoreProgram> for StandardProgram"],["impl<T> From<Vec<T>> for Declaration
where\n T: Into<Declaration>,
"],["impl From<(&str, Mutability, Expr)> for Declaration"],["impl From<(&str, FFIProcedure)> for Declaration"],["impl From<(&str, Procedure)> for Declaration"],["impl From<(String, Mutability, Option<Type>, Expr)> for Declaration"],["impl From<(&str, ConstExpr)> for Declaration"],["impl From<(String, PolyProcedure)> for Declaration"],["impl From<ConstExpr> for Expr"],["impl From<(&str, Mutability, Type, Expr)> for Declaration"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<SourceCodeLocation> for Annotation"],["impl From<Procedure> for ConstExpr"],["impl From<(&str, Type)> for Declaration"],["impl From<(String, Mutability, Type, Expr)> for Declaration"],["impl From<bool> for Mutability"],["impl<K, V> From<BTreeMap<K, V>> for Declaration"],["impl From<PolyProcedure> for ConstExpr"],["impl From<(String, Type)> for Declaration"]] +"sage":[["impl From<(String, Mutability, Option<Type>, Expr)> for Declaration"],["impl From<(String, Type)> for Declaration"],["impl<T> From<Vec<T>> for Declaration
where\n T: Into<Declaration>,
"],["impl From<CoreProgram> for StandardProgram"],["impl From<Procedure> for ConstExpr"],["impl From<(String, Mutability, Type, Expr)> for Declaration"],["impl From<(&str, Type)> for Declaration"],["impl From<(String, Procedure)> for Declaration"],["impl From<Type> for ConstExpr"],["impl From<PolyProcedure> for ConstExpr"],["impl From<(&str, ConstExpr)> for Declaration"],["impl From<(String, PolyProcedure)> for Declaration"],["impl<K, V> From<BTreeMap<K, V>> for Declaration"],["impl From<(&str, Mutability, Type, Expr)> for Declaration"],["impl From<Error> for Error"],["impl From<(String, ConstExpr)> for Declaration"],["impl From<(&str, FFIProcedure)> for Declaration"],["impl From<(String, Expr)> for Declaration"],["impl From<(&str, PolyProcedure)> for Declaration"],["impl From<(Pattern, Expr)> for Declaration"],["impl From<CoreProgram> for StandardProgram"],["impl From<bool> for Mutability"],["impl From<Box<Declaration>> for Declaration"],["impl From<Error> for Error"],["impl From<(&str, Mutability, Option<Type>, Expr)> for Declaration"],["impl From<(String, FFIProcedure)> for Declaration"],["impl From<(&str, Expr)> for Declaration"],["impl From<(&str, Procedure)> for Declaration"],["impl From<(&str, Mutability, Expr)> for Declaration"],["impl From<(String, Mutability, Expr)> for Declaration"],["impl From<SourceCodeLocation> for Annotation"],["impl From<Mutability> for bool"],["impl From<ConstExpr> for Expr"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/trait.impl/core/default/trait.Default.js b/docs/trait.impl/core/default/trait.Default.js index 7bb4d2e7..290596a7 100644 --- a/docs/trait.impl/core/default/trait.Default.js +++ b/docs/trait.impl/core/default/trait.Default.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sage":[["impl Default for SageLisp"],["impl Default for StandardInterpreter<StandardDevice>"],["impl Default for Globals"],["impl Default for CoreProgram"],["impl Default for Mutability"],["impl Default for StandardDevice"],["impl Default for C"],["impl Default for CoreInterpreter<StandardDevice>"],["impl Default for CoreProgram"],["impl Default for Env"],["impl Default for StandardProgram"],["impl Default for StandardProgram"],["impl Default for TestingDevice"]] +"sage":[["impl Default for Globals"],["impl Default for Mutability"],["impl Default for TestingDevice"],["impl Default for StandardDevice"],["impl Default for CoreProgram"],["impl Default for SageLisp"],["impl Default for C"],["impl Default for CoreInterpreter<StandardDevice>"],["impl Default for StandardProgram"],["impl Default for StandardInterpreter<StandardDevice>"],["impl Default for Env"],["impl Default for StandardProgram"],["impl Default for CoreProgram"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/trait.impl/core/fmt/trait.Debug.js b/docs/trait.impl/core/fmt/trait.Debug.js index 6bb9c83d..259ea017 100644 --- a/docs/trait.impl/core/fmt/trait.Debug.js +++ b/docs/trait.impl/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sage":[["impl Debug for Assign"],["impl Debug for Axis"],["impl Debug for And"],["impl Debug for Negate"],["impl Debug for PolyProcedure"],["impl Debug for StandardOp"],["impl Debug for Error"],["impl Debug for TestingDevice"],["impl Debug for Globals"],["impl Debug for Delete"],["impl Debug for Put"],["impl Debug for Location"],["impl Debug for BitwiseNot"],["impl Debug for Color"],["impl Debug for StandardProgram"],["impl Debug for BitwiseAnd"],["impl Debug for Mutability"],["impl Debug for Tag"],["impl Debug for Output"],["impl Debug for Error"],["impl Debug for StandardDevice"],["impl Debug for Channel"],["impl Debug for CoreBuiltin"],["impl Debug for BitwiseOr"],["impl Debug for Get"],["impl Debug for Add"],["impl Debug for BitwiseNor"],["impl Debug for StandardBuiltin"],["impl Debug for InputMode"],["impl Debug for Expr"],["impl Debug for Declaration"],["impl Debug for Env"],["impl Debug for SourceCodeLocation"],["impl Debug for Not"],["impl Debug for Comparison"],["impl Debug for Arithmetic"],["impl Debug for CoreOp"],["impl Debug for Pattern"],["impl Debug for Type"],["impl Debug for ConstExpr"],["impl Debug for New"],["impl Debug for BitwiseXor"],["impl Debug for Data"],["impl Debug for Or"],["impl Debug for OutputMode"],["impl Debug for Annotation"],["impl Debug for FFIProcedure"],["impl Debug for BitwiseNand"],["impl Debug for Procedure"],["impl Debug for CoreOp"],["impl Debug for Direction"],["impl Debug for FFIBinding"],["impl Debug for Error"],["impl Debug for StandardOp"],["impl Debug for Input"],["impl Debug for CoreProgram"]] +"sage":[["impl Debug for Assign"],["impl Debug for Declaration"],["impl Debug for Location"],["impl Debug for Output"],["impl Debug for New"],["impl Debug for Annotation"],["impl Debug for Mutability"],["impl Debug for Pattern"],["impl Debug for Color"],["impl Debug for SourceCodeLocation"],["impl Debug for CoreProgram"],["impl Debug for Data"],["impl Debug for Not"],["impl Debug for StandardProgram"],["impl Debug for And"],["impl Debug for Get"],["impl Debug for Arithmetic"],["impl Debug for Add"],["impl Debug for Error"],["impl Debug for Tag"],["impl Debug for BitwiseNand"],["impl Debug for Type"],["impl Debug for Negate"],["impl Debug for FFIBinding"],["impl Debug for StandardBuiltin"],["impl Debug for FFIProcedure"],["impl Debug for Error"],["impl Debug for Input"],["impl Debug for CoreBuiltin"],["impl Debug for Env"],["impl Debug for PolyProcedure"],["impl Debug for StandardDevice"],["impl Debug for BitwiseOr"],["impl Debug for Error"],["impl Debug for CoreOp"],["impl Debug for StandardOp"],["impl Debug for Direction"],["impl Debug for InputMode"],["impl Debug for Put"],["impl Debug for Delete"],["impl Debug for BitwiseNot"],["impl Debug for BitwiseAnd"],["impl Debug for Comparison"],["impl Debug for CoreOp"],["impl Debug for Or"],["impl Debug for Axis"],["impl Debug for TestingDevice"],["impl Debug for ConstExpr"],["impl Debug for Channel"],["impl Debug for Globals"],["impl Debug for Procedure"],["impl Debug for BitwiseNor"],["impl Debug for StandardOp"],["impl Debug for OutputMode"],["impl Debug for Expr"],["impl Debug for BitwiseXor"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/trait.impl/core/fmt/trait.Display.js b/docs/trait.impl/core/fmt/trait.Display.js index 5f0260bf..141f6a48 100644 --- a/docs/trait.impl/core/fmt/trait.Display.js +++ b/docs/trait.impl/core/fmt/trait.Display.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sage":[["impl Display for BitwiseAnd"],["impl Display for Expr"],["impl Display for Declaration"],["impl Display for PolyProcedure"],["impl Display for CoreProgram"],["impl Display for InputMode"],["impl Display for BitwiseNand"],["impl Display for Output"],["impl Display for Direction"],["impl Display for Data"],["impl Display for Arithmetic"],["impl Display for Input"],["impl Display for Globals"],["impl Display for Mutability"],["impl Display for BitwiseXor"],["impl Display for BitwiseNot"],["impl Display for Comparison"],["impl Display for Delete"],["impl Display for Procedure"],["impl Display for Type"],["impl Display for Negate"],["impl Display for Env"],["impl Display for Put"],["impl Display for OutputMode"],["impl Display for BitwiseNor"],["impl Display for StandardBuiltin"],["impl Display for ConstExpr"],["impl Display for New"],["impl Display for BitwiseOr"],["impl Display for Pattern"],["impl Display for Not"],["impl Display for CoreProgram"],["impl Display for Location"],["impl Display for Channel"],["impl Display for Error"],["impl Display for And"],["impl Display for Get"],["impl Display for Or"],["impl Display for StandardProgram"],["impl Display for Add"],["impl Display for Axis"],["impl Display for CoreOp"],["impl Display for Assign"],["impl Display for CoreBuiltin"],["impl Display for Error"],["impl Display for StandardOp"],["impl Display for Tag"],["impl Display for StandardOp"],["impl Display for StandardProgram"],["impl Display for Color"],["impl Display for CoreOp"],["impl Display for Error"],["impl Display for FFIProcedure"],["impl Display for FFIBinding"]] +"sage":[["impl Display for Procedure"],["impl Display for Assign"],["impl Display for StandardBuiltin"],["impl Display for BitwiseNor"],["impl Display for FFIProcedure"],["impl Display for Axis"],["impl Display for Direction"],["impl Display for FFIBinding"],["impl Display for CoreProgram"],["impl Display for Delete"],["impl Display for Color"],["impl Display for Put"],["impl Display for Pattern"],["impl Display for Error"],["impl Display for Get"],["impl Display for ConstExpr"],["impl Display for BitwiseNot"],["impl Display for BitwiseXor"],["impl Display for BitwiseNand"],["impl Display for Not"],["impl Display for Type"],["impl Display for And"],["impl Display for BitwiseOr"],["impl Display for Input"],["impl Display for Location"],["impl Display for BitwiseAnd"],["impl Display for Output"],["impl Display for Env"],["impl Display for InputMode"],["impl Display for Comparison"],["impl Display for PolyProcedure"],["impl Display for Error"],["impl Display for Channel"],["impl Display for StandardProgram"],["impl Display for Data"],["impl Display for CoreOp"],["impl Display for StandardOp"],["impl Display for Mutability"],["impl Display for OutputMode"],["impl Display for Add"],["impl Display for Error"],["impl Display for Arithmetic"],["impl Display for CoreBuiltin"],["impl Display for Expr"],["impl Display for CoreOp"],["impl Display for Globals"],["impl Display for Negate"],["impl Display for New"],["impl Display for Or"],["impl Display for StandardOp"],["impl Display for Declaration"],["impl Display for StandardProgram"],["impl Display for CoreProgram"],["impl Display for Tag"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/trait.impl/core/hash/trait.Hash.js b/docs/trait.impl/core/hash/trait.Hash.js index 6d2eaf4d..2f21c490 100644 --- a/docs/trait.impl/core/hash/trait.Hash.js +++ b/docs/trait.impl/core/hash/trait.Hash.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sage":[["impl Hash for BitwiseNor"],["impl Hash for Pattern"],["impl Hash for Channel"],["impl Hash for Delete"],["impl Hash for Declaration"],["impl Hash for CoreOp"],["impl Hash for ConstExpr"],["impl Hash for CoreOp"],["impl Hash for Type"],["impl Hash for BitwiseNand"],["impl Hash for Direction"],["impl Hash for Get"],["impl Hash for StandardBuiltin"],["impl Hash for Output"],["impl Hash for Negate"],["impl Hash for Location"],["impl Hash for CoreBuiltin"],["impl Hash for BitwiseXor"],["impl Hash for Add"],["impl Hash for CoreProgram"],["impl Hash for Data"],["impl Hash for Expr"],["impl Hash for Mutability"],["impl Hash for FFIBinding"],["impl Hash for Comparison"],["impl Hash for InputMode"],["impl Hash for BitwiseOr"],["impl Hash for BitwiseNot"],["impl Hash for FFIProcedure"],["impl Hash for Tag"],["impl Hash for Input"],["impl Hash for And"],["impl Hash for Put"],["impl Hash for PolyProcedure"],["impl Hash for Axis"],["impl Hash for Color"],["impl Hash for Annotation"],["impl Hash for BitwiseAnd"],["impl Hash for Procedure"],["impl Hash for CoreProgram"],["impl Hash for OutputMode"],["impl Hash for New"],["impl Hash for SourceCodeLocation"]] +"sage":[["impl Hash for BitwiseNot"],["impl Hash for BitwiseNor"],["impl Hash for Mutability"],["impl Hash for And"],["impl Hash for Annotation"],["impl Hash for Location"],["impl Hash for CoreBuiltin"],["impl Hash for OutputMode"],["impl Hash for New"],["impl Hash for Type"],["impl Hash for InputMode"],["impl Hash for BitwiseNand"],["impl Hash for Declaration"],["impl Hash for CoreOp"],["impl Hash for PolyProcedure"],["impl Hash for Input"],["impl Hash for Output"],["impl Hash for Tag"],["impl Hash for CoreProgram"],["impl Hash for Data"],["impl Hash for ConstExpr"],["impl Hash for Axis"],["impl Hash for BitwiseOr"],["impl Hash for Expr"],["impl Hash for Delete"],["impl Hash for FFIBinding"],["impl Hash for Put"],["impl Hash for Color"],["impl Hash for BitwiseXor"],["impl Hash for Comparison"],["impl Hash for Add"],["impl Hash for SourceCodeLocation"],["impl Hash for Direction"],["impl Hash for Negate"],["impl Hash for Pattern"],["impl Hash for CoreProgram"],["impl Hash for Channel"],["impl Hash for CoreOp"],["impl Hash for BitwiseAnd"],["impl Hash for FFIProcedure"],["impl Hash for StandardBuiltin"],["impl Hash for Get"],["impl Hash for Procedure"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/trait.impl/core/marker/trait.Copy.js b/docs/trait.impl/core/marker/trait.Copy.js index 3980940c..a0c15480 100644 --- a/docs/trait.impl/core/marker/trait.Copy.js +++ b/docs/trait.impl/core/marker/trait.Copy.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sage":[["impl Copy for BitwiseNot"],["impl Copy for BitwiseXor"],["impl Copy for Comparison"],["impl Copy for BitwiseOr"],["impl Copy for Axis"],["impl Copy for BitwiseNor"],["impl Copy for New"],["impl Copy for Not"],["impl Copy for Arithmetic"],["impl Copy for Channel"],["impl Copy for Negate"],["impl Copy for Put"],["impl Copy for And"],["impl Copy for Get"],["impl Copy for Data"],["impl Copy for Delete"],["impl Copy for Tag"],["impl Copy for Direction"],["impl Copy for Or"],["impl Copy for BitwiseNand"],["impl Copy for Mutability"],["impl Copy for Color"],["impl Copy for BitwiseAnd"],["impl Copy for Add"]] +"sage":[["impl Copy for Data"],["impl Copy for BitwiseNot"],["impl Copy for Tag"],["impl Copy for Channel"],["impl Copy for Delete"],["impl Copy for Or"],["impl Copy for Negate"],["impl Copy for BitwiseXor"],["impl Copy for BitwiseNand"],["impl Copy for Direction"],["impl Copy for BitwiseOr"],["impl Copy for Add"],["impl Copy for Comparison"],["impl Copy for Put"],["impl Copy for Arithmetic"],["impl Copy for Color"],["impl Copy for BitwiseNor"],["impl Copy for New"],["impl Copy for Not"],["impl Copy for BitwiseAnd"],["impl Copy for And"],["impl Copy for Axis"],["impl Copy for Get"],["impl Copy for Mutability"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/trait.impl/core/marker/trait.StructuralEq.js b/docs/trait.impl/core/marker/trait.StructuralEq.js index 695e10e4..1e477a1d 100644 --- a/docs/trait.impl/core/marker/trait.StructuralEq.js +++ b/docs/trait.impl/core/marker/trait.StructuralEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sage":[["impl StructuralEq for Pattern"],["impl StructuralEq for Channel"],["impl StructuralEq for CoreProgram"],["impl StructuralEq for Tag"],["impl StructuralEq for BitwiseXor"],["impl StructuralEq for FFIBinding"],["impl StructuralEq for Location"],["impl StructuralEq for Color"],["impl StructuralEq for CoreOp"],["impl StructuralEq for New"],["impl StructuralEq for CoreOp"],["impl StructuralEq for Negate"],["impl StructuralEq for BitwiseOr"],["impl StructuralEq for FFIProcedure"],["impl StructuralEq for Annotation"],["impl StructuralEq for Add"],["impl StructuralEq for Comparison"],["impl StructuralEq for OutputMode"],["impl StructuralEq for CoreProgram"],["impl StructuralEq for InputMode"],["impl StructuralEq for Output"],["impl StructuralEq for Data"],["impl StructuralEq for Put"],["impl StructuralEq for And"],["impl StructuralEq for SourceCodeLocation"],["impl StructuralEq for BitwiseNor"],["impl StructuralEq for Get"],["impl StructuralEq for Axis"],["impl StructuralEq for BitwiseNand"],["impl StructuralEq for BitwiseAnd"],["impl StructuralEq for BitwiseNot"],["impl StructuralEq for Mutability"],["impl StructuralEq for Input"],["impl StructuralEq for Delete"],["impl StructuralEq for Direction"]] +"sage":[["impl StructuralEq for BitwiseNand"],["impl StructuralEq for Delete"],["impl StructuralEq for Axis"],["impl StructuralEq for InputMode"],["impl StructuralEq for Output"],["impl StructuralEq for New"],["impl StructuralEq for Negate"],["impl StructuralEq for CoreProgram"],["impl StructuralEq for Location"],["impl StructuralEq for Input"],["impl StructuralEq for Get"],["impl StructuralEq for Annotation"],["impl StructuralEq for BitwiseXor"],["impl StructuralEq for BitwiseNor"],["impl StructuralEq for Channel"],["impl StructuralEq for Direction"],["impl StructuralEq for Data"],["impl StructuralEq for CoreOp"],["impl StructuralEq for Tag"],["impl StructuralEq for CoreProgram"],["impl StructuralEq for Color"],["impl StructuralEq for Put"],["impl StructuralEq for SourceCodeLocation"],["impl StructuralEq for CoreOp"],["impl StructuralEq for BitwiseNot"],["impl StructuralEq for BitwiseAnd"],["impl StructuralEq for FFIBinding"],["impl StructuralEq for OutputMode"],["impl StructuralEq for Comparison"],["impl StructuralEq for Add"],["impl StructuralEq for Pattern"],["impl StructuralEq for And"],["impl StructuralEq for BitwiseOr"],["impl StructuralEq for Mutability"],["impl StructuralEq for FFIProcedure"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/trait.impl/core/marker/trait.StructuralPartialEq.js b/docs/trait.impl/core/marker/trait.StructuralPartialEq.js index 4d3faaee..d0d7a34f 100644 --- a/docs/trait.impl/core/marker/trait.StructuralPartialEq.js +++ b/docs/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sage":[["impl StructuralPartialEq for Pattern"],["impl StructuralPartialEq for Put"],["impl StructuralPartialEq for And"],["impl StructuralPartialEq for CoreOp"],["impl StructuralPartialEq for Delete"],["impl StructuralPartialEq for StandardOp"],["impl StructuralPartialEq for Get"],["impl StructuralPartialEq for Type"],["impl StructuralPartialEq for BitwiseNor"],["impl StructuralPartialEq for Error"],["impl StructuralPartialEq for StandardOp"],["impl StructuralPartialEq for Tag"],["impl StructuralPartialEq for Color"],["impl StructuralPartialEq for Comparison"],["impl StructuralPartialEq for SourceCodeLocation"],["impl StructuralPartialEq for Output"],["impl StructuralPartialEq for Error"],["impl StructuralPartialEq for BitwiseOr"],["impl StructuralPartialEq for StandardBuiltin"],["impl StructuralPartialEq for CoreOp"],["impl StructuralPartialEq for Declaration"],["impl StructuralPartialEq for Annotation"],["impl StructuralPartialEq for FFIProcedure"],["impl StructuralPartialEq for Negate"],["impl StructuralPartialEq for BitwiseNot"],["impl StructuralPartialEq for StandardProgram"],["impl StructuralPartialEq for ConstExpr"],["impl StructuralPartialEq for Add"],["impl StructuralPartialEq for Location"],["impl StructuralPartialEq for OutputMode"],["impl StructuralPartialEq for BitwiseXor"],["impl StructuralPartialEq for Channel"],["impl StructuralPartialEq for BitwiseNand"],["impl StructuralPartialEq for FFIBinding"],["impl StructuralPartialEq for New"],["impl StructuralPartialEq for CoreProgram"],["impl StructuralPartialEq for Axis"],["impl StructuralPartialEq for StandardProgram"],["impl StructuralPartialEq for BitwiseAnd"],["impl StructuralPartialEq for Input"],["impl StructuralPartialEq for InputMode"],["impl StructuralPartialEq for Direction"],["impl StructuralPartialEq for Data"],["impl StructuralPartialEq for CoreProgram"],["impl StructuralPartialEq for CoreBuiltin"]] +"sage":[["impl StructuralPartialEq for Negate"],["impl StructuralPartialEq for CoreProgram"],["impl StructuralPartialEq for Tag"],["impl StructuralPartialEq for Comparison"],["impl StructuralPartialEq for Input"],["impl StructuralPartialEq for Type"],["impl StructuralPartialEq for Add"],["impl StructuralPartialEq for SourceCodeLocation"],["impl StructuralPartialEq for New"],["impl StructuralPartialEq for StandardBuiltin"],["impl StructuralPartialEq for StandardOp"],["impl StructuralPartialEq for CoreProgram"],["impl StructuralPartialEq for Put"],["impl StructuralPartialEq for Output"],["impl StructuralPartialEq for BitwiseNot"],["impl StructuralPartialEq for Annotation"],["impl StructuralPartialEq for BitwiseOr"],["impl StructuralPartialEq for Delete"],["impl StructuralPartialEq for Error"],["impl StructuralPartialEq for InputMode"],["impl StructuralPartialEq for Location"],["impl StructuralPartialEq for StandardProgram"],["impl StructuralPartialEq for Data"],["impl StructuralPartialEq for Axis"],["impl StructuralPartialEq for StandardOp"],["impl StructuralPartialEq for Error"],["impl StructuralPartialEq for CoreOp"],["impl StructuralPartialEq for ConstExpr"],["impl StructuralPartialEq for BitwiseXor"],["impl StructuralPartialEq for Pattern"],["impl StructuralPartialEq for BitwiseNand"],["impl StructuralPartialEq for Declaration"],["impl StructuralPartialEq for FFIProcedure"],["impl StructuralPartialEq for BitwiseAnd"],["impl StructuralPartialEq for CoreBuiltin"],["impl StructuralPartialEq for OutputMode"],["impl StructuralPartialEq for StandardProgram"],["impl StructuralPartialEq for Direction"],["impl StructuralPartialEq for Channel"],["impl StructuralPartialEq for And"],["impl StructuralPartialEq for FFIBinding"],["impl StructuralPartialEq for CoreOp"],["impl StructuralPartialEq for Color"],["impl StructuralPartialEq for BitwiseNor"],["impl StructuralPartialEq for Get"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/trait.impl/serde/de/trait.Deserialize.js b/docs/trait.impl/serde/de/trait.Deserialize.js index 87a5eae6..79a58eea 100644 --- a/docs/trait.impl/serde/de/trait.Deserialize.js +++ b/docs/trait.impl/serde/de/trait.Deserialize.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sage":[["impl<'de> Deserialize<'de> for StandardBuiltin"],["impl<'de> Deserialize<'de> for StandardOp"],["impl<'de> Deserialize<'de> for Input"],["impl<'de> Deserialize<'de> for CoreProgram"],["impl<'de> Deserialize<'de> for CoreOp"],["impl<'de> Deserialize<'de> for Direction"],["impl<'de> Deserialize<'de> for StandardProgram"],["impl<'de> Deserialize<'de> for CoreOp"],["impl<'de> Deserialize<'de> for FFIProcedure"],["impl<'de> Deserialize<'de> for CoreProgram"],["impl<'de> Deserialize<'de> for Channel"],["impl<'de> Deserialize<'de> for Annotation"],["impl<'de> Deserialize<'de> for Mutability"],["impl<'de> Deserialize<'de> for FFIBinding"],["impl<'de> Deserialize<'de> for StandardProgram"],["impl<'de> Deserialize<'de> for Expr"],["impl<'de> Deserialize<'de> for Output"],["impl<'de> Deserialize<'de> for Location"],["impl<'de> Deserialize<'de> for Procedure"],["impl<'de> Deserialize<'de> for Axis"],["impl<'de> Deserialize<'de> for InputMode"],["impl<'de> Deserialize<'de> for PolyProcedure"],["impl<'de> Deserialize<'de> for ConstExpr"],["impl<'de> Deserialize<'de> for StandardOp"],["impl<'de> Deserialize<'de> for SourceCodeLocation"],["impl<'de> Deserialize<'de> for OutputMode"],["impl<'de> Deserialize<'de> for CoreBuiltin"],["impl<'de> Deserialize<'de> for Pattern"],["impl<'de> Deserialize<'de> for Globals"],["impl<'de> Deserialize<'de> for Type"],["impl<'de> Deserialize<'de> for Declaration"],["impl<'de> Deserialize<'de> for Color"]] +"sage":[["impl<'de> Deserialize<'de> for StandardProgram"],["impl<'de> Deserialize<'de> for CoreBuiltin"],["impl<'de> Deserialize<'de> for StandardOp"],["impl<'de> Deserialize<'de> for FFIBinding"],["impl<'de> Deserialize<'de> for Location"],["impl<'de> Deserialize<'de> for Pattern"],["impl<'de> Deserialize<'de> for Procedure"],["impl<'de> Deserialize<'de> for StandardProgram"],["impl<'de> Deserialize<'de> for Declaration"],["impl<'de> Deserialize<'de> for StandardOp"],["impl<'de> Deserialize<'de> for CoreProgram"],["impl<'de> Deserialize<'de> for CoreProgram"],["impl<'de> Deserialize<'de> for OutputMode"],["impl<'de> Deserialize<'de> for Globals"],["impl<'de> Deserialize<'de> for Channel"],["impl<'de> Deserialize<'de> for FFIProcedure"],["impl<'de> Deserialize<'de> for Output"],["impl<'de> Deserialize<'de> for Axis"],["impl<'de> Deserialize<'de> for Color"],["impl<'de> Deserialize<'de> for Mutability"],["impl<'de> Deserialize<'de> for Direction"],["impl<'de> Deserialize<'de> for CoreOp"],["impl<'de> Deserialize<'de> for ConstExpr"],["impl<'de> Deserialize<'de> for SourceCodeLocation"],["impl<'de> Deserialize<'de> for CoreOp"],["impl<'de> Deserialize<'de> for Expr"],["impl<'de> Deserialize<'de> for Type"],["impl<'de> Deserialize<'de> for Input"],["impl<'de> Deserialize<'de> for InputMode"],["impl<'de> Deserialize<'de> for StandardBuiltin"],["impl<'de> Deserialize<'de> for PolyProcedure"],["impl<'de> Deserialize<'de> for Annotation"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/trait.impl/serde/ser/trait.Serialize.js b/docs/trait.impl/serde/ser/trait.Serialize.js index 1b7a0904..f0e039aa 100644 --- a/docs/trait.impl/serde/ser/trait.Serialize.js +++ b/docs/trait.impl/serde/ser/trait.Serialize.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"sage":[["impl Serialize for Procedure"],["impl Serialize for OutputMode"],["impl Serialize for Pattern"],["impl Serialize for Location"],["impl Serialize for Output"],["impl Serialize for Channel"],["impl Serialize for Annotation"],["impl Serialize for FFIBinding"],["impl Serialize for Axis"],["impl Serialize for PolyProcedure"],["impl Serialize for SourceCodeLocation"],["impl Serialize for CoreOp"],["impl Serialize for Globals"],["impl Serialize for Direction"],["impl Serialize for InputMode"],["impl Serialize for Mutability"],["impl Serialize for CoreOp"],["impl Serialize for ConstExpr"],["impl Serialize for Expr"],["impl Serialize for StandardOp"],["impl Serialize for StandardBuiltin"],["impl Serialize for CoreProgram"],["impl Serialize for Input"],["impl Serialize for Color"],["impl Serialize for StandardOp"],["impl Serialize for StandardProgram"],["impl Serialize for CoreBuiltin"],["impl Serialize for Declaration"],["impl Serialize for Type"],["impl Serialize for CoreProgram"],["impl Serialize for FFIProcedure"],["impl Serialize for StandardProgram"]] +"sage":[["impl Serialize for Direction"],["impl Serialize for ConstExpr"],["impl Serialize for Declaration"],["impl Serialize for CoreProgram"],["impl Serialize for Procedure"],["impl Serialize for Mutability"],["impl Serialize for CoreBuiltin"],["impl Serialize for Axis"],["impl Serialize for FFIBinding"],["impl Serialize for Output"],["impl Serialize for Channel"],["impl Serialize for FFIProcedure"],["impl Serialize for OutputMode"],["impl Serialize for SourceCodeLocation"],["impl Serialize for Type"],["impl Serialize for StandardProgram"],["impl Serialize for StandardProgram"],["impl Serialize for CoreOp"],["impl Serialize for Color"],["impl Serialize for CoreOp"],["impl Serialize for Location"],["impl Serialize for Input"],["impl Serialize for Annotation"],["impl Serialize for Pattern"],["impl Serialize for CoreProgram"],["impl Serialize for Globals"],["impl Serialize for PolyProcedure"],["impl Serialize for StandardBuiltin"],["impl Serialize for StandardOp"],["impl Serialize for Expr"],["impl Serialize for InputMode"],["impl Serialize for StandardOp"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/examples/frontend/test-math-library.sg b/examples/frontend/test-math-library.sg new file mode 100644 index 00000000..3a4e358d --- /dev/null +++ b/examples/frontend/test-math-library.sg @@ -0,0 +1,33 @@ +from std.math import asin, acos, atan2, ln, sqrt; + +// Test asin, acos, atan2 +println("Asin of 0.0: ", asin(0.0)); +println("Asin of 0.3: ", asin(0.3)); +println("Asin of 0.5: ", asin(0.5)); +println("Asin of 0.7: ", asin(0.7)); +println("Asin of 1.0: ", asin(0.99)); + +println("Acos of 0.0: ", acos(0.01)); +println("Acos of 0.3: ", acos(0.3)); +println("Acos of 0.5: ", acos(0.5)); +println("Acos of 0.7: ", acos(0.7)); +println("Acos of 1.0: ", acos(1.0)); + +println("Atan2 of 0.0, 0.0: ", atan2(0.0, 0.0)); +println("Atan2 of 0.0, 1.0: ", atan2(0.0, 1.0)); +println("Atan2 of 1.0, 0.0: ", atan2(1.0, 0.0)); +println("Atan2 of 1.0, 1.0: ", atan2(1.0, 1.0)); + +// Test ln, sqrt, abs +println("Natural log of 1.0: ", ln(1.0)); +println("Natural log of 2.0: ", ln(2.0)); +println("Natural log of 3.0: ", ln(3.0)); + +println("Square root of one: ", sqrt(1.0)); +println("Square root of two: ", sqrt(2.0)); +println("Square root of three: ", sqrt(3.0)); +println("Square root of five: ", sqrt(5.0)); + +println("Absolute value of -1.0: ", (-1.0).abs()); +println("Absolute value of 0.0: ", 0.0.abs()); +println("Absolute value of 1.0: ", Float.abs(1.0)); \ No newline at end of file diff --git a/examples/frontend/test_modules1.sg b/examples/frontend/test_modules1.sg index 6b5b2ca5..7fca31d6 100644 --- a/examples/frontend/test_modules1.sg +++ b/examples/frontend/test_modules1.sg @@ -1,112 +1,17 @@ - -/* -mod std { - mod io { - fun putln(x: T) { - print(x); - print('\n'); - } - - fun putchar(c: Char) { - print(c); - } - - fun getchar(): Char { - let mut ch = ' '; - input(&mut ch); - return ch; - } - - impl Char { - fun put(&self) { - putchar(*self); - } - - fun get(): Char { - return getchar(); - } - } - } - - mod testing { - from io import putln; - - const TESTING = 5; - - struct Point { - x: Float, - y: Float, - } - - impl Point { - fun new(x: Float, y: Float): Point { - return {x=x, y=y}; - } - - fun move(&mut self, dx: Float, dy: Float) { - self.x += dx; - self.y += dy; - } - } - - fun test() { - println(TESTING); - } - } - - mod math { - from testing import TESTING, test; - - fun cos(x: Float): Float { - println(TESTING, " from math"); - test(); - return 1.0 - x * x / 2.0 + x * x * x * x / 24.0; - } - - fun sin(x: Float): Float { - return x - x * x * x / 6.0 + x * x * x * x * x / 120.0; - } - - fun tan(x: Float): Float { - return x + x * x * x / 3.0 + 2.0 * x * x * x * x * x / 15.0; - } - } - -} - -from std.io import putln as p; -from std.testing import Point, test; - -fun main() { - test(); - - p('!'); - let mut x = Point.new(5.0, 6.0); - p(x); - x.move(1.0, 2.0); - - p(x); - - test(); -} - -main(); -*/ - -mod std { +mod std2 { mod math { // Calculate the greatest common divisor of two numbers using Euclid's algorithm - fun gcd(a: Int, b: Int): Int { + fun gcd_x(a: Int, b: Int): Int { if b == 0 { return a; } - return gcd(b, a % b); + return gcd_x(b, a % b); } } mod io { // Import from math just to test - from math import gcd; + from math import gcd_x; // Print a character to the screen fun putln(x: T) { @@ -214,10 +119,10 @@ mod std { } } -from std.math import gcd; -from std.fallible import Option, Result; +from std2.math import gcd_x; +from std2.fallible import Option, Result; -println("GCD of 12 and 15 = ", gcd(12, 15)); +println("GCD of 12 and 15 = ", gcd_x(12, 15)); enum Error { DivideByZero { numerator: Int }, diff --git a/examples/frontend/test_std_physics.sg b/examples/frontend/test_std_physics.sg new file mode 100644 index 00000000..1b358c64 --- /dev/null +++ b/examples/frontend/test_std_physics.sg @@ -0,0 +1,39 @@ +from std.time import Instant, Date; +from std.physics import Point3D; +from std.physics.astronomy import Planet; + + +fun main() { + let d = Date.date(2024, 9, 18); + print("On "); + d.print(); + println(); + + let instant = Instant.from_date(d); + + for let mut i=0; i<8; i+=1; { + let planet = Planet.PLANETS[i]; + print("Planet: "); + match planet { + of Mercury => println("Mercury"), + of Venus => println("Venus"), + of Earth => println("Earth"), + of Mars => println("Mars"), + of Jupiter => println("Jupiter"), + of Saturn => println("Saturn"), + of Uranus => println("Uranus"), + of Neptune => println("Neptune") + } + + println( + "Position (meters, Sun relative): ", + convert_to_int(planet.position_at_instant(instant)) + ); + } +} + +fun convert_to_int(x: Point3D): {x: Int, y: Int, z: Int} { + {x=x.x as Int, y=x.y as Int, z=x.z as Int} +} + +main(); \ No newline at end of file diff --git a/examples/frontend/test_std_physics2.sg b/examples/frontend/test_std_physics2.sg new file mode 100644 index 00000000..2dc8420e --- /dev/null +++ b/examples/frontend/test_std_physics2.sg @@ -0,0 +1,56 @@ +from std.time import Date, Weekday; +from std.physics.astronomy import MoonPhase; + +fun main() { + lunar_calendar(10, 2024); +} + +fun lunar_calendar(month: Int, year: Int) { + let d = Date.date(year, month, 1); + let start_weekday = d.weekday(); + + let days_in_month = d.days_in_month(); + + let mut day = 1; + let mut weekday = Weekday of Sunday; + println(" Lunar Calendar "); + print(" "); d.print(); println(); + println("---------------------------------"); + println("Sun Mon Tue Wed Thu Fri Sat"); + let mut is_first_week = True; + while day <= days_in_month { + for let mut i=0; i<7; i+=1; { + if is_first_week && weekday.is_before(start_weekday) { + print(" "); + } else { + if day <= days_in_month { + if day < 10 { + print(" "); + } else { + print(""); + } + print(day); + MoonPhase.from_date(Date.date(year, month, day)).print(); + print(" "); + } + day += 1; + } + weekday = weekday.next(); + } + is_first_week = False; + println(); + } + + println("---------------------------------\n"); + println("Legend:"); + println("N: New Moon"); + println("W: Waxing Crescent"); + println("Q: First Quarter"); + println("G: Waxing Gibbous"); + println("F: Full Moon"); + println("g: Waning Gibbous"); + println("q: Last Quarter"); + println("w: Waning Crescent"); +} + +main(); \ No newline at end of file diff --git a/examples/test-output/test_std_physics.txt b/examples/test-output/test_std_physics.txt new file mode 100644 index 00000000..3e3457c5 --- /dev/null +++ b/examples/test-output/test_std_physics.txt @@ -0,0 +1,17 @@ +On 2024-9-18 +Planet: Mercury +Position (meters, Sun relative): {x=33383204033, y=35761196060, z=17482615609} +Planet: Venus +Position (meters, Sun relative): {x=11027909171, y=108447650387, z=818212376} +Planet: Earth +Position (meters, Sun relative): {x=135085714027, y=-4079248623, z=57523897417} +Planet: Mars +Position (meters, Sun relative): {x=-183253301950, y=87942739441, z=-89682031118} +Planet: Jupiter +Position (meters, Sun relative): {x=365041661741, y=-617809226669, z=198651062155} +Planet: Saturn +Position (meters, Sun relative): {x=-779145757340, y=-1201641044586, z=-261550590693} +Planet: Uranus +Position (meters, Sun relative): {x=1645995896811, y=-2256125631718, z=896288551314} +Planet: Neptune +Position (meters, Sun relative): {x=-1192938488445, y=-4305878018189, z=-196045534921} diff --git a/examples/test-output/test_std_physics2.txt b/examples/test-output/test_std_physics2.txt new file mode 100644 index 00000000..8f4efeb0 --- /dev/null +++ b/examples/test-output/test_std_physics2.txt @@ -0,0 +1,20 @@ + Lunar Calendar + 2024-10-1 +--------------------------------- +Sun Mon Tue Wed Thu Fri Sat + 1w 2w 3N 4N 5N + 6W 7W 8W 9W 10Q 11Q 12Q +13Q 14G 15G 16G 17G 18F 19F +20F 21g 22g 23g 24g 25q 26q +27q 28q 29w 30w 31w +--------------------------------- + +Legend: +N: New Moon +W: Waxing Crescent +Q: First Quarter +G: Waxing Gibbous +F: Full Moon +g: Waning Gibbous +q: Last Quarter +w: Waning Crescent diff --git a/examples/web/index.html b/examples/web/index.html index d6649037..e578c2f9 100644 --- a/examples/web/index.html +++ b/examples/web/index.html @@ -271,6 +271,94 @@ main();`); break; + case "planets": + source.setValue(`from std.time import Instant, Date; +from std.physics import Point3D; +from std.physics.astronomy import Planet; + +fun main() { + let d = Date.date(2024, 9, 18); + print("On "); + d.print(); + println(); + + let instant = Instant.from_date(d); + + println("Position units are AU, with Sun at origin:"); + for let mut i=0; i<8; i+=1; { + let planet = Planet.PLANETS[i]; + planet.print(); + println(": ", planet.position_at_instant(instant) + .convert(m_to_au)); + } +} + +fun m_to_au(m: Float): Float { + return m / 149597870700.0; +} + +main();`); + break; + case "lunar": + source.setValue(`from std.time import Date, Weekday; +from std.physics.astronomy import MoonPhase; + +fun main() { + lunar_calendar(10, 2024); +} + +fun lunar_calendar(month: Int, year: Int) { + let d = Date.date(year, month, 1); + let start_weekday = d.weekday(); + + let days_in_month = d.days_in_month(); + + let mut day = 1; + let mut weekday = Weekday of Sunday; + println(" Lunar Calendar "); + print(" "); + d.print(); + println("\\n---------------------------------"); + println("Sun Mon Tue Wed Thu Fri Sat"); + let mut is_first_week = True; + while day <= days_in_month { + for let mut i=0; i<7; i+=1; { + if is_first_week && weekday.is_before(start_weekday) { + print(" "); + } else { + if day <= days_in_month { + if day < 10 { + print(" "); + } else { + print(""); + } + print(day); + MoonPhase.from_date(Date.date(year, month, day)).print(); + print(" "); + } + day += 1; + } + weekday = weekday.next(); + } + is_first_week = False; + println(); + } + + println("---------------------------------\n"); + println("Legend:"); + println("N: New Moon"); + println("W: Waxing Crescent"); + println("Q: First Quarter"); + println("G: Waxing Gibbous"); + println("F: Full Moon"); + println("g: Waning Gibbous"); + println("q: Last Quarter"); + println("w: Waning Crescent"); +} + +main();`); + break; + case "const-generics": source.setValue(`fun main() { // Create an array struct @@ -2348,27 +2436,39 @@
diff --git a/examples/web/src/lib.rs b/examples/web/src/lib.rs index 6f4047e0..4627eb1f 100644 --- a/examples/web/src/lib.rs +++ b/examples/web/src/lib.rs @@ -203,7 +203,7 @@ pub fn compile_and_run() -> Result<(), JsValue> { Ok(lir_code) => { match lir_code .clone() - .compile() + .compile(false) .map_err(BetterError::LirError) .map_err(|e| e.annotate_with_source(&source_code)) { diff --git a/src/cli.rs b/src/cli.rs index 72b243c1..677e3d66 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -230,6 +230,7 @@ fn compile_source_to_vm( src: String, src_type: SourceType, call_stack_size: usize, + default_to_core: bool, ) -> Result, Error> { match src_type { SourceType::StdVM => { @@ -277,7 +278,7 @@ fn compile_source_to_vm( // Parse the lower intermediate representation code. match parse_lir(src) .map_err(Error::Parse)? - .compile() + .compile(true) .map_err(Error::LirError)? { // If we got back a valid program, assemble it and return the result. @@ -292,7 +293,7 @@ fn compile_source_to_vm( SourceType::Sage => { match parse_frontend(&src, filename) .map_err(Error::Parse)? - .compile() + .compile(default_to_core) .map_err(Error::LirError) .map_err(|e| e.annotate_with_source(&src))? { @@ -328,13 +329,13 @@ fn compile_source_to_asm( // If the source language is LIR, parse it and compile it to assembly code. SourceType::LowIR => parse_lir(src) .map_err(Error::Parse)? - .compile() + .compile(true) .map_err(Error::LirError), // If the source language is Sage, parse it and compile it to assembly code. SourceType::Sage => parse_frontend(&src, filename) .map_err(Error::Parse)? - .compile() + .compile(true) .map_err(Error::LirError) .map_err(|e| e.annotate_with_source(&src)), // If the source language is a virtual machine program, @@ -357,7 +358,7 @@ fn compile( ) -> Result<(), Error> { match target { // If the target is `Run`, then compile the code and execute it with the interpreter. - TargetType::Run => match compile_source_to_vm(filename, src, src_type, call_stack_size)? { + TargetType::Run => match compile_source_to_vm(filename, src, src_type, call_stack_size, false)? { // If the code is core variant virtual machine code Ok(vm_code) => { CoreInterpreter::new(StandardDevice::default()) @@ -376,7 +377,7 @@ fn compile( // and then use the C target implementation to build the output source code. TargetType::C => write_file( format!("{output}.c"), - match compile_source_to_vm(filename, src, src_type, call_stack_size)? { + match compile_source_to_vm(filename, src, src_type, call_stack_size, false)? { Ok(vm_code) => targets::C.build_core(&vm_code.flatten()), Err(vm_code) => targets::C.build_std(&vm_code.flatten()), } @@ -387,7 +388,7 @@ fn compile( // and then use the C target implementation to build the output source code. TargetType::SageLisp => { - write_file(format!("output.txt"), match compile_source_to_vm(filename, src, src_type, call_stack_size)? { + write_file(format!("output.txt"), match compile_source_to_vm(filename, src, src_type, call_stack_size, false)? { Ok(vm_code) => targets::SageLisp::new(sage::frontend::get_lisp_env()).build_core(&vm_code.flatten()), Err(vm_code) => targets::SageLisp::new(sage::frontend::get_lisp_env()).build_std(&vm_code.flatten()), }.map_err(Error::BuildError)?)? @@ -399,7 +400,7 @@ fn compile( // If the target is core virtual machine code, then try to compile the source to the core variant. // If not possible, throw an error. - TargetType::CoreVM => match compile_source_to_vm(filename, src, src_type, call_stack_size)? + TargetType::CoreVM => match compile_source_to_vm(filename, src, src_type, call_stack_size, true)? { Ok(vm_code) if debug => write_file( format!("{output}.vm.sg"), @@ -414,7 +415,7 @@ fn compile( // If the result is core variant, we don't care. Just return the generated code. TargetType::StdVM => write_file( format!("{output}.vm.sg"), - match compile_source_to_vm(filename, src, src_type, call_stack_size)? { + match compile_source_to_vm(filename, src, src_type, call_stack_size, false)? { Ok(vm_code) if debug => format!("{:#}", vm_code.flatten()), Err(vm_code) if debug => format!("{:#}", vm_code.flatten()), Ok(vm_code) => vm_code.flatten().to_string(), diff --git a/src/frontend/mod.rs b/src/frontend/mod.rs index c6e223c3..52498890 100644 --- a/src/frontend/mod.rs +++ b/src/frontend/mod.rs @@ -19,7 +19,9 @@ pub fn parse( let mut expr = parse_source(&without_comments(input), filename.map(|x| x.to_owned()))?; use crate::side_effects::Output; if include_std { - let std_lib = parse_module("std", &without_comments(include_str!("std_lib.sg")))?; + // Only check the stdlib when we're in debug mode + let in_debug_mode = cfg!(debug_assertions); + let std_lib = parse_module("std", &without_comments(include_str!("std_lib.sg")), in_debug_mode)?; expr = expr.with(std_lib) } if include_builtins { diff --git a/src/frontend/parse.rs b/src/frontend/parse.rs index ca70c4b5..0b800a36 100644 --- a/src/frontend/parse.rs +++ b/src/frontend/parse.rs @@ -947,7 +947,7 @@ fn make_env() -> sage_lisp::Env { Err(e) => e, Ok(frontend_code) => { let asm_code = frontend_code - .compile() + .compile(false) .map_err(|e| Expr::error(format!("Invalid AST: {e}"))); if let Err(e) = asm_code { return e; @@ -978,7 +978,7 @@ fn make_env() -> sage_lisp::Env { Err(e) => e, Ok(frontend_code) => { let asm_code = frontend_code - .compile() + .compile(false) .map_err(|e| Expr::error(format!("Invalid AST: {e}"))); if let Err(e) = asm_code { return e; @@ -1447,10 +1447,10 @@ pub fn parse_source(input: &str, filename: Option) -> Result Result { +pub fn parse_module(name: &str, input: &str, checked: bool) -> Result { setup_source_code_locations(input, Some(name.to_owned())); - match parse_module_contents::>(name, input) { + match parse_module_contents::>(name, input, checked) { Err(nom::Err::Error(e)) => { trace!("Error: {e}"); Err(convert_error(input, e).to_string()) @@ -2016,13 +2016,14 @@ fn parse_import_decl<'a, E: ParseError<&'a str> + ContextError<&'a str>>( fn parse_module_contents<'a, E: ParseError<&'a str> + ContextError<&'a str>>( name: &str, input: &'a str, + checked: bool ) -> IResult<&'a str, Declaration, E> { let (input, _) = whitespace(input)?; let (input, decls) = many0(context("statement", parse_decl))(input)?; let (input, _) = whitespace(input)?; - Ok((input, Declaration::module(name, decls))) + Ok((input, Declaration::module(name, decls, checked))) } fn parse_module_stmt<'a, E: ParseError<&'a str> + ContextError<&'a str>>( @@ -2037,7 +2038,7 @@ fn parse_module_stmt<'a, E: ParseError<&'a str> + ContextError<&'a str>>( let (input, _) = tag("{")(input)?; - let (input, module) = parse_module_contents(name, input)?; + let (input, module) = parse_module_contents(name, input, true)?; let (input, _) = cut(tag("}"))(input)?; let (input, _) = whitespace(input)?; @@ -2062,7 +2063,7 @@ fn parse_module_file_stmt<'a, E: ParseError<&'a str> + ContextError<&'a str>>( save_source_code_setup(); setup_source_code_locations(&contents.clone(), Some(name.to_string())); if let Ok((new_input, module)) = - parse_module_contents::>(name, &contents) + parse_module_contents::>(name, &contents, true) { if !new_input.is_empty() { return Err(nom::Err::Error(E::from_error_kind( @@ -2097,7 +2098,7 @@ fn parse_decl<'a, E: ParseError<&'a str> + ContextError<&'a str>>( context("type", parse_type_stmt), context("enum", parse_enum_stmt), context("struct", parse_struct_stmt), - context("extern", parse_extern_stmt), + context("extern", terminated(parse_extern_stmt, tag(";"))), context("const", terminated(parse_const_stmt, tag(";"))), context("impl", parse_impl_stmt), context("import", parse_import_stmt), @@ -3811,17 +3812,27 @@ fn parse_float_literal<'a, E: ParseError<&'a str> + ContextError<&'a str>>( let (input, _) = whitespace(input)?; let (input, is_negative) = opt(tag("-"))(input)?; - let (input, result) = map( - pair(digit1, preceded(char('.'), digit1)), - |(a, b): (&str, &str)| format!("{}.{}", a, b).parse::().unwrap(), - )(input)?; + // let (input, result) = map( + // pair(digit1, preceded(char('.'), digit1)), + // |(a, b): (&str, &str)| format!("{}.{}", a, b).parse::().unwrap(), + // )(input)?; - // Peek and make sure the next character is not a symbol character - if let Some(c) = input.chars().next() { - if is_symbol_char(c) { - return Err(nom::Err::Error(E::from_error_kind(input, ErrorKind::Digit))); - } - } + // // Peek and make sure the next character is not a symbol character + // if let Some(c) = input.chars().next() { + // if is_symbol_char(c) { + // return Err(nom::Err::Error(E::from_error_kind(input, ErrorKind::Digit))); + // } + // } + + // Use builtin nom double + let (input, result) = nom::number::complete::recognize_float(input)?; + // Try to parse as an integer first + let result: f64 = if let Ok(_i) = result.parse::() { + // Fail + return Err(nom::Err::Error(E::from_error_kind(input, ErrorKind::Digit))); + } else { + result.parse().unwrap() + }; if is_negative.is_some() { Ok((input, -result)) @@ -4270,7 +4281,7 @@ mod tests { .without_comments(languages::rust()) .collect::(); let parsed = crate::frontend::parse(&code, Some("input"), true, true)?; - let asm_code = parsed.compile(); + let asm_code = parsed.compile(true); // let asm_code = parsed.compile(); const CALL_STACK_SIZE: usize = 1024; if let Err(ref e) = asm_code { diff --git a/src/frontend/std_lib.sg b/src/frontend/std_lib.sg index 1c78b187..1ce2cb4f 100644 --- a/src/frontend/std_lib.sg +++ b/src/frontend/std_lib.sg @@ -1,4 +1,63 @@ mod math { + const PI = 3.14159265358979323846; + const TAU = 6.28318530717958647693; + const EPSILON = 0.000001; + const MAX_TRIG_ITERATIONS = 100; + const MAX_SQRT_ITERATIONS = 20; + const MAX_LOG_ITERATIONS = 200; + + fun factorial(n: Int): Int { + if n <= 0 { + return 1; + } + return n * factorial(n - 1); + } + + impl Float { + fun abs(self): Float { + if self < 0.0 { + return -self; + } + return self; + } + + fun round(self): Int { + if self < 0.0 { + return (self - 0.5) as Int; + } + return (self + 0.5) as Int; + } + + fun round_to(self, n: Int): Float { + let mut factor = 1.0; + for let mut i=0; i i { + return i + 1; + } + return i; + } + } + + impl Int { + fun abs(self): Int { + if self < 0 { + return -self; + } + return self; + } + } + // Calculate the greatest common divisor of two numbers using Euclid's algorithm fun gcd(a: Int, b: Int): Int { if b == 0 { @@ -6,6 +65,191 @@ mod math { } return gcd(b, a % b); } + + // Taylor series approximation of sine + fun sin(mut x: Float): Float { + x %= PI * 2; + let mut result = 0.0; + let mut term = x; + let mut i = 1; + while i < MAX_TRIG_ITERATIONS { + result += term; + term *= -x * x / (2 * i + 1) / (2 * i); + i += 1; + } + return result; + } + + // Taylor series approximation of cosine + fun cos(x: Float): Float { + return sin(x + PI / 2); + } + + // Taylor series approximation of tangent + fun tan(x: Float): Float { + return sin(x) / cos(x); + } + + fun asin(x: Float): Float { + // Taylor series approximation of arcsine + fun asin_approx(x: Float): Float { + + let x2 = x * x; // x^2 + let x4 = x2 * x2; // x^4 + let x6 = x4 * x2; // x^6 + let x8 = x6 * x2; // x^8 + let x10 = x8 * x2; // x^10 + let x12 = x10 * x2; // x^12 + + return x * (1.0 + + (1.0 / 6.0) * x2 + + (3.0 / 40.0) * x4 + + (5.0 / 112.0) * x6 + + (35.0 / 1152.0) * x8 + + (63.0 / 2816.0) * x10 + + (231.0 / 13312.0) * x12); + } + + // As x approaches 1, the series converges more slowly + // add a condition to speed up the calculation + if x.abs() > 0.9 { + let complement = sqrt(1.0 - x * x); + let result = PI / 2 - asin_approx(complement); + if x < 0 { + return -result; + } + return result; + } + + return asin_approx(x); + } + + // Taylor series approximation of arccosine + fun acos(x: Float): Float { + return PI / 2 - asin(x); + } + + // Calculate the arctangent of a number + fun atan(x: Float): Float { + let x2 = x * x; // x^2 + let x3 = x2 * x; // x^3 + let x5 = x3 * x2; // x^5 + let x7 = x5 * x2; // x^7 + let x9 = x7 * x2; // x^9 + let x11 = x9 * x2; // x^11 + let x13 = x11 * x2; // x^13 + + return x * (1.0 + - (1.0 / 3.0) * x2 + + (1.0 / 5.0) * x3 + - (1.0 / 7.0) * x5 + + (1.0 / 9.0) * x7 + - (1.0 / 11.0) * x9 + + (1.0 / 13.0) * x11 + - (1.0 / 15.0) * x13); + } + + // Calculate the arctangent of a fraction + fun atan2(y: Float, x: Float): Float { + if x.abs() < EPSILON { + if y > 0 { + return PI / 2; + } else if y < 0 { + return -PI / 2; + } else { + return 0.0; + } + } + if x > 0 { + return atan(y / x); + } + if y > 0 { + return atan(y / x) + PI; + } + return atan(y / x) - PI; + } + + // Calculate the square root of a number using Newton's method + fun sqrt(x: Float): Float { + let mut result = x; + let mut i = 0; + while i < MAX_SQRT_ITERATIONS && result > EPSILON { + result = (result + x / result) / 2; + i += 1; + } + return result; + } + + // Calculate the natural logarithm of a number + fun ln(x: Float): Float { + let mut result = 0.0; + let mut term = (x - 1) / (x + 1); + let mut i = 1; + while i < MAX_LOG_ITERATIONS { + result += term / i; + term *= (x - 1) * (x - 1) / (x + 1) / (x + 1); + i += 2; + } + return 2 * result; + } + + // Calculate the base 10 logarithm of a number + fun log10(x: Float): Float { + return ln(x) / ln(10.0); + } + + // Calculate the exponential of a number + fun exp(x: Float): Float { + let mut result = 1.0; + let mut term = 1.0; + let mut i = 1; + while i < MAX_TRIG_ITERATIONS { + term *= x / i; + result += term; + i += 1; + } + return result; + } + + // Calculate the power of a number + fun pow(x: Float, y: Float): Float { + return exp(y * ln(x)); + } + + // Calculate the hyperbolic sine of a number + fun sinh(x: Float): Float { + return (exp(x) - exp(-x)) / 2; + } + + // Calculate the hyperbolic cosine of a number + fun cosh(x: Float): Float { + return (exp(x) + exp(-x)) / 2; + } + + // Calculate the hyperbolic tangent of a number + fun tanh(x: Float): Float { + return sinh(x) / cosh(x); + } + + // Calculate the hyperbolic arcsine of a number + fun asinh(x: Float): Float { + return ln(x + sqrt(x * x + 1)); + } + + // Calculate the hyperbolic arccosine of a number + fun acosh(x: Float): Float { + return ln(x + sqrt(x * x - 1)); + } + + // Calculate the hyperbolic arctangent of a number + fun atanh(x: Float): Float { + return ln((1 + x) / (1 - x)) / 2; + } + + // Calculate the hyperbolic arctangent of a fraction + fun atanh2(y: Float, x: Float): Float { + return atanh(y / x); + } } mod mem { @@ -173,7 +417,7 @@ mod int { mod collections { from fallible import panic, Option; from mem import malloc; - + enum List { Cons(T, &List), Nil @@ -519,14 +763,451 @@ mod collections { } } -// A mod just to test imports some more -mod testing { - // Import from a mod which imports from another mod - from io import getchar; +mod time { + from fallible import Option; + + const SECONDS_PER_YEAR = 31556926; + const SECONDS_PER_DAY = 86400; + const SECONDS_PER_HOUR = 3600; + + + struct Duration { + us: Int, + start: Option, + end: Option + } + + impl Duration { + fun from_us(micros: Int): Duration { + return { us=micros, start=Option of Nothing, end=Option of Nothing }; + } + + fun from_ms(millis: Int): Duration { + return Duration.from_us(millis * 1000); + } + + fun from_secs(seconds: Int): Duration { + return Duration.from_us(seconds * 1000000); + } + + fun from_mins(minutes: Int): Duration { + return Duration.from_secs(minutes * 60); + } + + fun from_hours(hours: Int): Duration { + return Duration.from_mins(hours * 60); + } + + fun as_secs(self): Int { + return self.us / 1000000; + } + + fun as_years(self): Float { + return self.us as Float / 1000000.0 / SECONDS_PER_YEAR as Float; + } + } + + struct Instant { + us: Int + } + + // Get the time since the Unix epoch in microseconds + extern fun microseconds_since_epoch(): Int; + + impl Instant { + // Get the current time + fun now(): Instant { + return { us=microseconds_since_epoch() }; + } + + fun epoch(): Instant { + return { us=0 }; + } + + fun as_secs(self): Int { + return self.us / 1000000; + } + + fun from_us_since_epoch(micros: Int): Instant { + return { us=micros }; + } + + fun time_since_epoch(self): Duration { + return Duration.from_us(self.us); + } - fun test() { - let ch = getchar(); - // Use a method defined in another mod - ch.put(); + fun elapsed(self): Duration { + let now = Instant.now(); + return { + us=now.us - self.us, + start=Option of Some(self), + end=Option of Some(now) + }; + } + + fun add(mut self, duration: Duration): Instant { + self.us += duration.us; + return self; + } + + fun from_date(self: Date): Instant { + let days = self.days_since_epoch(); + + return Instant.from_us_since_epoch(days * SECONDS_PER_DAY * 1000000) + .add(Duration.from_hours(self.hour)) + .add(Duration.from_mins(self.minute)) + .add(Duration.from_secs(self.second)); + } + } + + enum Weekday { + Sunday, + Monday, + Tuesday, + Wednesday, + Thursday, + Friday, + Saturday + } + + impl Weekday { + fun next(self): Weekday { + match self { + of Sunday => Weekday of Monday, + of Monday => Weekday of Tuesday, + of Tuesday => Weekday of Wednesday, + of Wednesday => Weekday of Thursday, + of Thursday => Weekday of Friday, + of Friday => Weekday of Saturday, + of Saturday => Weekday of Sunday + } + } + + fun to_int(self): Int { + match self { + of Sunday => 0, + of Monday => 1, + of Tuesday => 2, + of Wednesday => 3, + of Thursday => 4, + of Friday => 5, + of Saturday => 6 + } + } + + fun is_before(self, other: Weekday): Bool { + self.to_int() < other.to_int() + } + } + + struct Date { + year: Int, + month: Int, + day: Int, + hour: Int, + minute: Int, + second: Int + } + + impl Date { + fun date(year: Int, month: Int, day: Int): Date { + return { year=year, month=month, day=day, hour=0, minute=0, second=0 }; + } + + fun weekday(self): Weekday { + match self.days_since_epoch() % 7 { + 0 => Weekday of Thursday, + 1 => Weekday of Friday, + 2 => Weekday of Saturday, + 3 => Weekday of Sunday, + 4 => Weekday of Monday, + 5 => Weekday of Tuesday, + 6 => Weekday of Wednesday, + _ => Weekday of Sunday + } + } + + fun days_since_epoch(self): Int { + let mut days = 0; + for let mut y=1970; y Float): Point3D { + return Point3D.new(f(self.x), f(self.y), f(self.z)); + } + } + + + const G_CONSTANT = 0.000000000066743; + mod kinematics { + // Calculate the gravitational force between two objects + fun gravitational_force(m1: Float, m2: Float, r: Float): Float { + return gravitational_acceleration(m1, r) * m2; + } + + // Calculate the acceleration of an object due to gravity + fun gravitational_acceleration(m: Float, r: Float): Float { + return G_CONSTANT * m / (r * r); + } + + // Calculate the escape velocity of an object + fun escape_velocity(m: Float, r: Float): Float { + return math.sqrt(2 * gravitational_acceleration(m, r) * r); + } + + // Calculate the period of a satellite in orbit + fun orbital_period(m: Float, r: Float): Float { + return 2 * math.PI * math.sqrt(r * r * r / (G_CONSTANT * m)); + } + + // Calculate the angular velocity of a satellite in orbit + fun orbital_angular_velocity(m: Float, r: Float): Float { + return 2 * math.PI / orbital_period(m, r); + } + + // Calculate the centripetal force of a satellite in orbit + fun centripetal_force(m: Float, r: Float, v: Float): Float { + return m * v * v / r; + } + + // Calculate the centripetal acceleration of a satellite in orbit + fun centripetal_acceleration(r: Float, v: Float): Float { + return v * v / r; + } + + // Calculate the tangential velocity of a satellite in orbit + fun tangential_velocity(r: Float, v: Float): Float { + return math.sqrt(v * v - centripetal_acceleration(r, v) * r); + } + } + + mod astronomy { + from fallible import Option; + + // A module for astronomical calculations + fun light_years_to_meters(light_years: Float): Float { + return light_years * 9461000000000000.0; + } + + // Calculate the apparent magnitude of a star + fun apparent_magnitude(luminosity: Float, distance: Float): Float { + return -2.5 * math.ln(luminosity / (4 * math.PI * distance * distance)); + } + + // Calculate the absolute magnitude of a star + fun absolute_magnitude(apparent_magnitude: Float, distance: Float): Float { + return apparent_magnitude - 5 * math.ln(distance / 10); + } + + + enum MoonPhase { + New, + WaxingCrescent, + FirstQuarter, + WaxingGibbous, + Full, + WaningGibbous, + LastQuarter, + WaningCrescent + } + + impl MoonPhase { + const SYNODIC_MONTH = 29.53058868; + const EPOCH_FULL_MOON_OFFSET = 22; + fun from_date(date: Date): MoonPhase { + let phase_days = (date.days_since_epoch() + MoonPhase.EPOCH_FULL_MOON_OFFSET + 1.5) % MoonPhase.SYNODIC_MONTH; + let phase_index = ((phase_days / MoonPhase.SYNODIC_MONTH) * 8.0).floor() % 8; + match phase_index { + 0 => MoonPhase of New, + 1 => MoonPhase of WaxingCrescent, + 2 => MoonPhase of FirstQuarter, + 3 => MoonPhase of WaxingGibbous, + 4 => MoonPhase of Full, + 5 => MoonPhase of WaningGibbous, + 6 => MoonPhase of LastQuarter, + 7 => MoonPhase of WaningCrescent, + _ => MoonPhase of New + } + } + + fun print(self) { + match self { + of New => print("N"), + of WaxingCrescent => print("W"), + of FirstQuarter => print("Q"), + of WaxingGibbous => print("G"), + of Full => print("F"), + of WaningGibbous => print("g"), + of LastQuarter => print("q"), + of WaningCrescent => print("w") + } + } + } + + enum Planet { + Mercury, + Venus, + Earth, + Mars, + Jupiter, + Saturn, + Uranus, + Neptune, + } + + impl Planet { + const ORBITAL_RADII = [ + 0.39, + 0.72, + 1.0, + 1.52, + 5.2, + 9.58, + 19.22, + 30.05 + ]; + + const PLANETS = [ + Planet of Mercury, + Planet of Venus, + Planet of Earth, + Planet of Mars, + Planet of Jupiter, + Planet of Saturn, + Planet of Uranus, + Planet of Neptune + ]; + + const ORBITAL_PERIODS = [ + 0.24, + 0.62, + 1.0, + 1.88, + 11.86, + 29.46, + 84.01, + 164.8 + ]; + + const POSITION_AT_EPOCH = [ + (-42278675812.454315, 24613309950.918446, 17482615609.45234), + (-108190381646.73073, -13317243499.344467, 818212376.0610391), + (-26004940524.516987, 132621768469.43376, 57523897417.362076), + (-45075950705.15841, -198201555907.44907, -89682031118.63554), + (521378228062.63275, 493060238375.3027, 198651062155.9376), + (1344601806306.465, -493006383015.7458, -261550590693.13828), + (1834521958762.2458, 2105690989019.717, 896288551314.5364), + (4463253980773.344, -207488910186.74722, -196045534921.0069) + ]; + + fun orbital_radius(self): Float { + return Planet.ORBITAL_RADII[self.order_from_sun()]; + } + + fun orbital_period(self): Float { + return Planet.ORBITAL_PERIODS[self.order_from_sun()]; + } + + fun position_at_epoch(self): (Float, Float, Float) { + return Planet.POSITION_AT_EPOCH[self.order_from_sun()]; + } + + fun order_from_sun(self): Int { + match self { + of Mercury => 0, + of Venus => 1, + of Earth => 2, + of Mars => 3, + of Jupiter => 4, + of Saturn => 5, + of Uranus => 6, + of Neptune => 7 + } + } + + fun position_at_instant(self, now: Instant): Point3D { + let (x0, y0, z0) = self.position_at_epoch(); + + let t = time.SECONDS_PER_YEAR; + + let omega = 2 * math.PI / t; + + let theta = omega * now.as_secs() as Float; + + let cos_theta = math.cos(theta); + let sin_theta = math.sin(theta); + + return { + x=x0 * cos_theta - y0 * sin_theta, + y=x0 * sin_theta + y0 * cos_theta, + z=z0 + }; + } + + fun print(self) { + match self { + of Mercury => print("Mercury"), + of Venus => print("Venus"), + of Earth => print("Earth"), + of Mars => print("Mars"), + of Jupiter => print("Jupiter"), + of Saturn => print("Saturn"), + of Uranus => print("Uranus"), + of Neptune => print("Neptune") + } + } + } } } \ No newline at end of file diff --git a/src/lir/compile.rs b/src/lir/compile.rs index bdcca80d..49e99879 100644 --- a/src/lir/compile.rs +++ b/src/lir/compile.rs @@ -29,7 +29,7 @@ pub trait Compile: TypeCheck + std::fmt::Debug + std::fmt::Display { /// compiled core assembly program, or a fallback standard assembly program. /// /// On an error, this will return an Err value containing the error. - fn compile(self) -> Result, Error> + fn compile(self, core: bool) -> Result, Error> where Self: Sized + Clone, { @@ -41,24 +41,33 @@ pub trait Compile: TypeCheck + std::fmt::Debug + std::fmt::Display { let mut core_asm = CoreProgram::default(); info!("Compiling..."); - // If the expression cannot be compiled into a core assembly program, - // then compile it into a standard assembly program. - if let Err(err) = self - .clone() - // Compile the expression into the core assembly program. - .compile_expr(&mut Env::default(), &mut core_asm) - { - warn!("Failed to compile into core assembly program: {err}, falling back on standard assembly"); + if core { + // If the expression cannot be compiled into a core assembly program, + // then compile it into a standard assembly program. + if let Err(err) = self + .clone() + // Compile the expression into the core assembly program. + .compile_expr(&mut Env::default(), &mut core_asm) + { + warn!("Failed to compile into core assembly program: {err}, falling back on standard assembly"); + let mut std_asm = StandardProgram::default(); + // Compile the expression into the standard assembly program. + self.compile_expr(&mut Env::default(), &mut std_asm)?; + info!("Compiled to standard assembly successfully"); + // Return the fallback standard assembly program. + Ok(Err(std_asm)) + } else { + info!("Compiled to core assembly successfully"); + // Return the successfully compiled core assembly program. + Ok(Ok(core_asm)) + } + } else { let mut std_asm = StandardProgram::default(); // Compile the expression into the standard assembly program. self.compile_expr(&mut Env::default(), &mut std_asm)?; info!("Compiled to standard assembly successfully"); // Return the fallback standard assembly program. Ok(Err(std_asm)) - } else { - info!("Compiled to core assembly successfully"); - // Return the successfully compiled core assembly program. - Ok(Ok(core_asm)) } } // Compile a specific expression into an assembly program. @@ -71,13 +80,11 @@ impl Compile for Expr { let is_const = matches!(self, Self::ConstExpr(_)); trace!("Compiling expression {self} (is_const={is_const}) {self:?} in environment {env}"); - let mut debug_str = format!("{self:50}"); - debug_str.truncate(50); - // Write a little comment about what we're compiling. if !matches!(self, Self::ConstExpr(_)) { let mut comment = format!("{self}"); - comment.truncate(70); + comment = comment.chars().take(70).collect(); + output.comment(comment); } // Compile the expression. @@ -697,19 +704,20 @@ impl Compile for Expr { // Compile a member access operation. Self::Member(ref val, ref member) => { + debug!("Compiling non-const member access of {val} with {member} in environment {env}"); if let Self::Annotated(expr, metadata) = val.as_ref() { return Self::Member(expr.clone(), member.clone()) .compile_expr(env, output) .map_err(|e| e.annotate(metadata.clone())); } - if let Self::ConstExpr(container) = val.as_ref() { // Write more elegantly if let Ok(val) = container.clone().field(member.clone()).eval(env) { - return val.compile_expr(env, output); + if !matches!(val, ConstExpr::Member(..)) { + return val.compile_expr(env, output); + } } } - // If the value we're getting a field from is a pointer, // then dereference it and get the field from the value. match val.get_type(env)? { @@ -866,6 +874,13 @@ impl Compile for Expr { val.clone().compile_expr(env, output)?; } other => { + // First try to get the associated constant + if let Ok(name) = name.clone().as_symbol(env) { + if let Some((constant, _)) = env.get_associated_const(&other, &name) { + return Expr::from(constant).refer(expected_mutability).compile_expr(env, output); + } + } + error!("Tried to get a member {name} of a non-struct, non-tuple, non-union, non-pointer type: {other} of value {val} in environment {env}"); return Err(Error::InvalidRefer(Expr::Member( Expr::from(*val.clone()).into(), @@ -1068,7 +1083,8 @@ impl Compile for ConstExpr { fn compile_expr(self, env: &mut Env, output: &mut dyn AssemblyProgram) -> Result<(), Error> { trace!("Compiling constant expression {self} in environment {env}"); let mut debug_str = format!("{self}"); - debug_str.truncate(50); + // debug_str.truncate(50); + debug_str = debug_str.chars().take(50).collect(); let current_instruction = output.current_instruction(); let ty = self.get_type(env)?; @@ -1077,6 +1093,7 @@ impl Compile for ConstExpr { Self::Any | Self::Template(_, _) => { // Cannot compile a template expression. + error!("Compiled template expression {self} in environment {env}"); return Err(Error::UnsizedType(ty)); } @@ -1085,6 +1102,7 @@ impl Compile for ConstExpr { let cexpr = t.simplify_until_const_param(env, false)?; cexpr.compile_expr(env, output)? } else { + error!("Compiled type expression {t} in environment {env}"); return Err(Error::UnsizedType(ty)); } } @@ -1123,6 +1141,20 @@ impl Compile for ConstExpr { new_env.add_declaration(&bindings, true)?; expr.field(field).compile_expr(&mut new_env, output)?; } + (Self::Symbol(name), member) => { + if let Some(cexpr) = env.get_const(&name) { + debug!("Found const named {name}"); + cexpr.clone().field(member).compile_expr(env, output)?; + // env.get_const(&name).cloned().ok_or_else(|| Error::SymbolNotDefined(name))?.field(member).eval(env)?.compile_expr(env, output)?; + } else { + debug!("Could not get member {member} of symbol {name} in environment {env}"); + Expr::Member( + Box::new(Expr::ConstExpr(*container.clone())), + member.into(), + ) + .compile_expr(env, output)? + } + } (a, b) => { debug!("Could not identify member access {b} on {a} in environment {env}"); Expr::Member( diff --git a/src/lir/env.rs b/src/lir/env.rs index f120fcf4..3a287f31 100644 --- a/src/lir/env.rs +++ b/src/lir/env.rs @@ -12,8 +12,7 @@ use crate::asm::{AssemblyProgram, Globals, Location}; use core::fmt::{Debug, Display, Formatter, Result as FmtResult}; use std::{ - collections::{HashMap, HashSet}, - sync::{Arc, RwLock}, + collections::{HashMap, HashSet}, sync::{Arc, RwLock} }; use log::*; @@ -39,6 +38,7 @@ pub struct Env { procs: Arc>, /// The variables defined under the environment. vars: Arc>, + modules: Arc>, /// The static variables defined under the environment. static_vars: Arc>, /// A lookup for the offsets of global variables. @@ -159,6 +159,7 @@ impl Default for Env { consts: Arc::new(HashMap::new()), procs: Arc::new(HashMap::new()), vars: Arc::new(HashMap::new()), + modules: Arc::new(HashMap::new()), static_vars: Arc::new(HashMap::new()), globals: Arc::new(RwLock::new(Globals::new())), associated_constants: Arc::new(RwLock::new(HashMap::new())), @@ -198,6 +199,7 @@ impl Env { consts: self.consts.clone(), procs: self.procs.clone(), static_vars: self.static_vars.clone(), + modules: self.modules.clone(), type_sizes: { // Copy the data but not the lock. // let type_sizes = (*self.type_sizes).clone(); @@ -679,7 +681,7 @@ impl Env { /// Add all the declarations to this environment. pub(super) fn add_declaration(&mut self, declaration: &Declaration, compiling: bool) -> Result<(), Error> { - self.add_compile_time_declaration(declaration)?; + self.add_compile_time_declaration(declaration, compiling)?; self.add_local_variable_declaration(declaration, compiling)?; Ok(()) } @@ -690,22 +692,37 @@ impl Env { pub(super) fn add_compile_time_declaration( &mut self, declaration: &Declaration, + compiling: bool, ) -> Result<(), Error> { - trace!("Adding compile-time declaration {declaration}"); + debug!("Adding compile-time declaration {declaration}"); match declaration { - Declaration::Module(module_name, decls) => { - if self.consts.contains_key(module_name) { - return Ok(()); + Declaration::Module(module_name, decls, checked, defined_id) => { + if !checked { + self.save_type_checked_const(ConstExpr::Symbol(module_name.clone())); + } + + if let Some(found_id) = self.modules.get(module_name) { + // Check if the declarations are the same + if *found_id == *defined_id { + // If they are the same, we don't need to recompile the module + return Ok(()); + } else { + // If they are different, we need to recompile the module + // Arc::make_mut(&mut self.modules).insert(module_name.clone(), *defined_id); + return Err(Error::ModuleRedefined(module_name.clone())) + } + } else { + // If the module is not defined, we need to define it + Arc::make_mut(&mut self.modules).insert(module_name.clone(), *defined_id); } - // Get all the declaration names let mut exports = vec![]; for decl in Declaration::Many(decls.clone()).flatten().iter() { match decl { Declaration::Type(name, _) => { exports.push(name.clone()); } - Declaration::Module(name, _submodule) => { + Declaration::Module(name, ..) => { exports.push(name.clone()); } Declaration::Const(name, _) => { @@ -739,7 +756,7 @@ impl Env { } } Declaration::Impl(_ty, _attrs) => { - self.add_compile_time_declaration(decl)?; + self.add_compile_time_declaration(decl, compiling)?; } Declaration::Many(_decls) => { unreachable!() @@ -755,7 +772,7 @@ impl Env { .map(|name| (name.clone(), ConstExpr::Symbol(name))) .collect(), ); - + let result = exports.with(Declaration::Many(decls.clone())).eval(self)?; self.define_const(module_name, result) } @@ -768,10 +785,9 @@ impl Env { Declaration::FromImport { module, names } => { let module = module.clone().eval(self)?; for (name, alias) in names { - let access = module.clone().field(ConstExpr::Symbol(name.clone())); + let access = module.clone().field(ConstExpr::Symbol(name.clone())).eval(self)?; let name = alias.clone().unwrap_or(name.clone()); - // if !self.types.contains_key(&name) { if let Ok(Type::Type(ty)) = access.get_type(self) { self.define_type(&name, *ty); } @@ -783,7 +799,7 @@ impl Env { let module_ty = module.get_type(self)?; if let Type::Struct(fields) = module_ty { for name in fields.keys() { - let access = module.clone().field(ConstExpr::Symbol(name.clone())); + let access = module.clone().field(ConstExpr::Symbol(name.clone())).eval(self)?; if let Ok(Type::Type(ty)) = access.get_type(self) { self.define_type(name, *ty); @@ -866,11 +882,11 @@ impl Env { // })?; } } - Declaration::Var(_, _, _, _) => {} - Declaration::VarPat(_, _) => {} + Declaration::Var(..) => {} + Declaration::VarPat(..) => {} Declaration::Many(decls) => { for decl in decls.iter() { - self.add_compile_time_declaration(decl)?; + self.add_compile_time_declaration(decl, compiling)?; } for decl in decls.iter() { @@ -918,7 +934,7 @@ impl Env { Declaration::Impl(_, _) => { // Implementations are not defined at runtime. } - Declaration::Module(_, _) => { + Declaration::Module(..) => { // Modules are not defined at runtime. } Declaration::FromImport { .. } => { diff --git a/src/lir/error.rs b/src/lir/error.rs index 37b028de..4543ab8b 100644 --- a/src/lir/error.rs +++ b/src/lir/error.rs @@ -1,6 +1,5 @@ use super::{ - Annotation, AssignOp, BinaryOp, ConstExpr, Expr, Mutability, Pattern, PolyProcedure, TernaryOp, - Type, UnaryOp, + Annotation, AssignOp, BinaryOp, ConstExpr, Expr, Mutability, Pattern, PolyProcedure, TernaryOp, Type, UnaryOp }; use core::fmt::{Debug, Display, Formatter, Result as FmtResult}; @@ -114,6 +113,9 @@ pub enum Error { /// Tried to define a type that already exists. TypeRedefined(String), + /// Tried to define a module that already exists. + ModuleRedefined(String), + /// Unused expression returned a non-None value. UnusedExpr(Expr, Type), @@ -323,6 +325,9 @@ impl Display for Error { Self::TypeRedefined(ty) => { write!(f, "type {} redefined", ty) } + Self::ModuleRedefined(module) => { + write!(f, "module {} redefined with conflicting definitions", module) + } Self::UnusedExpr(expr, ty) => { write!(f, "unused expression {} of type {}", expr, ty) } diff --git a/src/lir/expr/const_expr.rs b/src/lir/expr/const_expr.rs index 6b68fc2c..8caacbc8 100644 --- a/src/lir/expr/const_expr.rs +++ b/src/lir/expr/const_expr.rs @@ -145,6 +145,11 @@ impl ConstExpr { Self::Proc(Procedure::new(common_name, args, ret, body)) } + + pub fn hard_with(&self, older_decls: impl Into) -> Self { + Self::Declare(Box::new(older_decls.into()), self.clone().into()) + } + /// Return this expression, but with a given declaration in scope. pub fn with(&self, older_decls: impl Into) -> Self { match self { @@ -248,6 +253,11 @@ impl ConstExpr { Self::Member(container, member) => { let container_ty = container.get_type_checked(env, i)?; debug!("Member access on type: {container_ty:?}: {container} . {member}"); + + if matches!(container_ty, Type::Pointer(..)) { + return Ok(Self::Member(container, member)); + } + Ok(match (*container.clone(), *member.clone()) { (Self::Annotated(inner, metadata), member) => { Self::Member(inner, member.into()) @@ -263,8 +273,8 @@ impl ConstExpr { } } let mut new_env = env.clone(); - new_env.add_compile_time_declaration(&decls)?; - access.eval_checked(&new_env, i)?.with(decls) + new_env.add_compile_time_declaration(&decls, true)?; + access.eval_checked(&new_env, i)? } (Self::Symbol(name), member) => { @@ -285,7 +295,7 @@ impl ConstExpr { debug!( "Member access not implemented for: {container_ty} . {member}" ); - return Err(Error::MemberNotFound((*container).into(), member)); + return Ok(Self::Member(container.eval_checked(env, i)?.into(), member.into())); } } @@ -357,8 +367,18 @@ impl ConstExpr { debug!("Getting associated const: {container_ty} . {member}"); return constant.eval_checked(env, i); } - debug!("Member access not implemented for: {container_ty} . {member}"); - return Err(Error::MemberNotFound((*container).into(), member)); + + return container.eval_checked(env, i)?.field(member).eval_checked(env, i); + // if let Ok(Some((constant, _))) = member + // .clone() + // .as_symbol(env) + // .map(|name| env.get_associated_const(&container_ty, &name)) + // { + // debug!("Getting associated const: {container_ty} . {member}"); + // return constant.eval_checked(env, i); + // } + // debug!("Member access not implemented for: {container_ty} . {member}"); + // return Err(Error::MemberNotFound((*container).into(), member)); } _ => { if let Ok(Some((constant, _))) = member @@ -401,12 +421,11 @@ impl ConstExpr { Self::Declare(bindings, expr) => { debug!("Declaring compile time bindings: {bindings}"); let mut new_env = env.clone(); - new_env.add_compile_time_declaration(&bindings)?; - Ok(expr.eval_checked(&new_env, i)?.with(bindings)) + new_env.add_compile_time_declaration(&bindings, true)?; + expr.eval_checked(&new_env, i) } Self::Monomorphize(expr, ty_args) => { - // let ty_args = ty_args.into_iter().map(|t| t.simplify(env)).collect::, _>>()?; debug!("Monomorphizing {expr} with ty_args {ty_args:?}"); Ok(match expr.clone().eval(env)? { @@ -426,7 +445,7 @@ impl ConstExpr { }, Self::Declare(bindings, expr) => { let mut new_env = env.clone(); - new_env.add_compile_time_declaration(&bindings)?; + new_env.add_compile_time_declaration(&bindings, true)?; expr.monomorphize(ty_args.clone()) .eval_checked(&new_env, i)? .with(bindings) @@ -729,8 +748,8 @@ impl GetType for ConstExpr { // If we're accessing a member of a type that is not a tuple, // struct, union, or pointer, we cannot access a member. - _ => { - debug!("Member access not implemented for type: {val_type} . {field}"); + other => { + debug!("Member access not implemented for type: {other} . {field}"); return ConstExpr::Member(ConstExpr::Type(val_type.clone()).into(), field.clone()) .get_type(env) .or_else(|e| { @@ -760,7 +779,7 @@ impl GetType for ConstExpr { Self::Declare(bindings, expr) => expr.get_type_checked(env, i).or_else(|_| { let mut new_env = env.clone(); - new_env.add_compile_time_declaration(&bindings)?; + new_env.add_compile_time_declaration(&bindings, true)?; expr.get_type_checked(&new_env, i) })?, @@ -775,7 +794,7 @@ impl GetType for ConstExpr { } Self::Declare(bindings, expr) => { let mut new_env = env.clone(); - new_env.add_compile_time_declaration(&bindings)?; + new_env.add_compile_time_declaration(&bindings, true)?; return expr .monomorphize(ty_args) .get_type_checked(&new_env, i)? diff --git a/src/lir/expr/declaration.rs b/src/lir/expr/declaration.rs index 7753c0dc..7a2dcd65 100644 --- a/src/lir/expr/declaration.rs +++ b/src/lir/expr/declaration.rs @@ -13,7 +13,7 @@ use core::{ use log::*; use rayon::prelude::*; use serde_derive::{Deserialize, Serialize}; -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashSet}; use std::hash::{Hash, Hasher}; use std::sync::Arc; @@ -46,7 +46,7 @@ pub enum Declaration { /// use the `Declaration::module` method. /// This will redistribute the declarations to make sure /// everything is in-order internally to be imported/exported. - Module(String, Arc>), + Module(String, Arc>, bool, usize), /// Import an element from a module. FromImport { module: ConstExpr, @@ -70,10 +70,22 @@ impl Declaration { Self::Many(Arc::new(decls.into())) } - /// Create a module with a given name and a list of declarations - pub fn module(name: impl ToString, decls: impl Into>) -> Self { + /// Create a module with a given name and a list of declarations, and whether or not it is checked. + pub fn module(name: impl ToString, decls: impl Into>, checked: bool) -> Self { + lazy_static::lazy_static! { + static ref MODULE_COUNT: std::sync::Mutex = std::sync::Mutex::new(0); + } + let module_count = { + let mut count = MODULE_COUNT.lock().unwrap(); + *count += 1; + *count + }; + let mut decls = decls.into(); let mut import = Self::many(decls.clone()); + if !checked { + import.mark_no_checking(); + } import.filter(&|decl| { decl.is_compile_time_declaration() && !matches!(decl, Declaration::Impl(..)) }); @@ -82,7 +94,28 @@ impl Declaration { decl.distribute_decls(&import.clone()); } - Self::Module(name.to_string(), Arc::new(decls)) + let mut result = Self::Module(name.to_string(), Arc::new(decls), checked, module_count); + if !checked { + result.mark_no_checking(); + } + result + } + + fn mark_no_checking(&mut self) { + match self { + Self::Module(_, decls, checked, ..) => { + *checked = false; + for decl in Arc::make_mut(decls).iter_mut() { + decl.mark_no_checking(); + } + } + Self::Many(decls) => { + for decl in Arc::make_mut(decls).iter_mut() { + decl.mark_no_checking(); + } + } + _ => {} + } } /// Filter all the subdeclarations to satisfy some condition. @@ -93,7 +126,7 @@ impl Declaration { decls.retain(|decl| f(decl)); decls.iter_mut().for_each(|decl| decl.filter(f)); } - Self::Module(_name, decls) => { + Self::Module(_name, decls, ..) => { let decls = Arc::make_mut(decls); decls.retain(|decl| f(decl)); decls.iter_mut().for_each(|decl| decl.filter(f)); @@ -118,7 +151,7 @@ impl Declaration { decl.distribute_decls(distributed); } } - Self::Module(_name, decls) => { + Self::Module(_name, decls, ..) => { let decls = Arc::make_mut(decls); for decl in decls.iter_mut() { decl.distribute_decls(distributed); @@ -211,7 +244,7 @@ impl Declaration { ) -> Result { // Add all the compile time declarations to the environment so that they can be used // in these declarations. - env.add_compile_time_declaration(self)?; + env.add_compile_time_declaration(self, true)?; // The size of the variables declared. // This is used to pop the stack when we're done. let mut var_size = 0; @@ -324,6 +357,25 @@ impl Declaration { Ok(var_size) } + /// Detect duplicate modules + fn detect_duplicate_modules(&self, modules: &mut HashSet) -> Result<(), Error> { + match self { + Self::Module(name, _decls, ..) => { + if modules.contains(name) { + return Err(Error::ModuleRedefined(name.clone())); + } + modules.insert(name.clone()); + } + Self::Many(decls) => { + for decl in decls.iter() { + decl.detect_duplicate_modules(modules)?; + } + } + _ => {} + } + Ok(()) + } + /// Merge two declarations into one, while preserving the order of the declarations. /// This will not mutate the declaration, but will return a new declaration. pub(crate) fn join(&self, other: impl Into) -> Self { @@ -370,7 +422,7 @@ impl Declaration { Self::PolyProc(_name, proc) => { proc.substitute(substitution_name, substitution_ty); } - Self::Type(_name, ty) => { + Self::Type(_name , ty) => { *ty = ty.substitute(substitution_name, substitution_ty); } Self::Const(_name, expr) => { @@ -398,7 +450,7 @@ impl Declaration { decl.substitute(substitution_name, substitution_ty); }); } - Self::Module(_name, decls) => { + Self::Module(_name, decls, ..) => { Arc::make_mut(decls).par_iter_mut().for_each(|decl| { decl.substitute(substitution_name, substitution_ty); }); @@ -531,7 +583,7 @@ impl TypeCheck for Declaration { Self::Impl(ty, impls) => { let mut new_env = env.clone(); // Add all the compile-time declarations to the environment. - new_env.add_compile_time_declaration(&self.clone())?; + new_env.add_compile_time_declaration(&self.clone(), false)?; if let Type::Apply(template, supplied_params) = ty { // If this is an implementation for a template type, we need to @@ -598,10 +650,16 @@ impl TypeCheck for Declaration { // Typecheck a multi-declaration. Self::Many(decls) => { let mut new_env = env.clone(); + // Add all the compile-time declarations to the environment. + self.detect_duplicate_modules(&mut HashSet::new())?; new_env.add_declaration(&self.clone(), false)?; // Get all the compile time declarations so we can type check them in parallel. + // let (comp_time_decls, run_time_decls): (Vec<_>, Vec<_>) = self.clone() + // .flatten() + // .into_iter() + // .partition(|decl| decl.is_compile_time_declaration()); let (comp_time_decls, run_time_decls): (Vec<_>, Vec<_>) = decls .iter() .partition(|decl| decl.is_compile_time_declaration()); @@ -611,6 +669,7 @@ impl TypeCheck for Declaration { comp_time_decls.par_iter().try_for_each(|decl| { debug!("Typechecking decl: {decl}"); decl.type_check(&new_env) + // Ok::<(), Error>(()) })?; } @@ -621,62 +680,28 @@ impl TypeCheck for Declaration { decl.type_check(&new_env)?; new_env.add_declaration(decl, false) })?; - - /* - lazy_static! { - // Use this to limit recursive parallelism. - static ref PARALLEL_RECURSION_DEPTH: RwLock = RwLock::new(0); - } - - const PARALLEL_RECURSION_LIMIT: usize = 16; - - // Get the current recursion depth. - let depth = *PARALLEL_RECURSION_DEPTH.read().unwrap(); - - if depth < PARALLEL_RECURSION_LIMIT && comp_time_decls.len() > 2 { - // Increment the recursion depth. - *PARALLEL_RECURSION_DEPTH.write().unwrap() += 1; - - // Type check all the compile time declarations in parallel. - // for chunk in comp_time_decls.chunks(2) { - // info!("Typechecking {} declarations in parallel", chunk.len()); - - // chunk.par_iter().try_for_each(|decl| { - // decl.type_check(&new_env) - // })?; - // } - debug!("Typechecking {} declarations in parallel", comp_time_decls.len()); - comp_time_decls.par_iter().try_for_each(|decl| { - decl.type_check(&new_env) - })?; - // for decl in comp_time_decls { - // decl.type_check(&new_env)?; - // } - } else { - // Type check all the compile time declarations sequentially. - for decl in comp_time_decls { - decl.type_check(&new_env)?; - } - } - */ } - Self::Module(name, decls) => { - let mut new_env = env.clone(); - - // Add all the compile-time declarations to the environment. - new_env.add_declaration(&Self::Many(decls.clone()), false)?; - trace!("Typechecking module {}", name); - // Get all the compile time declarations so we can type check them in parallel. - let (comp_time_decls, _run_time_decls): (Vec<_>, Vec<_>) = decls - .iter() - .partition(|decl| decl.is_compile_time_declaration()); - - if !comp_time_decls.is_empty() { - // Type check all the compile time declarations in parallel. - comp_time_decls - .par_iter() - .try_for_each(|decl| decl.type_check(&new_env))?; + Self::Module(name, decls, checked, ..) => { + Self::Many(decls.clone()).detect_duplicate_modules(&mut HashSet::new())?; + if *checked { + let mut new_env = env.clone(); + // Add all the compile-time declarations to the environment. + new_env.add_declaration(&Self::Many(decls.clone()), false)?; + trace!("Typechecking module {}", name); + // Get all the compile time declarations so we can type check them in parallel. + let (comp_time_decls, _run_time_decls): (Vec<_>, Vec<_>) = decls + .iter() + .partition(|decl| decl.is_compile_time_declaration()); + + if !comp_time_decls.is_empty() { + // Type check all the compile time declarations in parallel. + comp_time_decls + .par_iter() + .try_for_each(|decl| decl.type_check(&new_env))?; + } + } else { + env.save_type_checked_const(ConstExpr::Symbol(name.clone())) } } @@ -687,7 +712,9 @@ impl TypeCheck for Declaration { access.type_check(env)?; } } - Self::FromImportAll(module) => module.type_check(env)?, + Self::FromImportAll(module) => { + module.type_check(env)?; + }, } Ok(()) } @@ -740,7 +767,7 @@ impl Display for Declaration { writeln!(f, "{}", decl)?; } } - Self::Module(name, _decls) => { + Self::Module(name, _decls, ..) => { write!(f, "module {} {{..}}", name)?; } Self::FromImport { module, names } => { @@ -983,10 +1010,11 @@ impl Hash for Declaration { state.write_u8(9); decls.hash(state); } - Self::Module(name, decls) => { + Self::Module(name, decls, _checked, id) => { state.write_u8(10); name.hash(state); decls.hash(state); + id.hash(state); } Self::FromImport { module, names } => { state.write_u8(11); diff --git a/src/lir/expr/expression.rs b/src/lir/expr/expression.rs index 7c5f1010..5c937b38 100644 --- a/src/lir/expr/expression.rs +++ b/src/lir/expr/expression.rs @@ -479,15 +479,13 @@ impl Expr { Self::Declare(younger_decls, expr) => { // Start with the older declarations. let mut result = older_decls.into(); - if let Declaration::Module(..) = result { - self.hard_with(result) - } else { - // Add the younder declarations to the older declarations. - result.append(*younger_decls.clone()); - // Return the merged declaration. - Self::Declare(Box::new(result), expr.clone()) + return self.hard_with(result); } + // Add the younder declarations to the older declarations. + result.append(*younger_decls.clone()); + // Return the merged declaration. + Self::Declare(Box::new(result), expr.clone()) } // Return the expression with the declaration in scope. diff --git a/src/lir/expr/pattern.rs b/src/lir/expr/pattern.rs index 5afb23bc..1368e310 100644 --- a/src/lir/expr/pattern.rs +++ b/src/lir/expr/pattern.rs @@ -210,6 +210,7 @@ impl Pattern { found[index] = true; } } else { + error!("In pattern matching, the type of the expression does not match the type of the enum."); // If the types don't match (the pattern doesn't match the matched expression's type), return an error. return Err(Error::MismatchedTypes { expected: matching_expr_ty.clone(), @@ -442,6 +443,7 @@ impl Pattern { // It should be the same as the type of the branch. if !expected.can_decay_to(&found, env)? { // If not, return an error. + error!("Result of match expression {} does not match expected type {} in expr {matching_expr} for branch {branch} ({result_expr})", found, expected); return Err(Error::MismatchedTypes { expected, found, diff --git a/src/lir/types/check.rs b/src/lir/types/check.rs index 2ecb844e..0075cb56 100644 --- a/src/lir/types/check.rs +++ b/src/lir/types/check.rs @@ -1019,7 +1019,7 @@ impl TypeCheck for ConstExpr { return Err(Error::InvalidConstExpr(self.clone())); } // Add all the bindings to the environment. - new_env.add_compile_time_declaration(bindings)?; + new_env.add_compile_time_declaration(bindings, false)?; // Typecheck the bindings bindings.type_check(&new_env)?; // Typecheck the expression with the bindings defined. diff --git a/src/lir/types/inference.rs b/src/lir/types/inference.rs index b0770002..39ccf2b0 100644 --- a/src/lir/types/inference.rs +++ b/src/lir/types/inference.rs @@ -48,12 +48,6 @@ impl GetType for Expr { } Self::Declare(declaration, body) => { - if let Ok(ty) = body.get_type_checked(env, i) { - // If the body returns a value, then the declaration - // returns the type of the body. - return Ok(ty); - } - // Create a new environment with the declarations. let mut new_env = env.clone(); // Add the declarations to the environment. diff --git a/tests/c_target.rs b/tests/c_target.rs index ca823697..88f0d758 100644 --- a/tests/c_target.rs +++ b/tests/c_target.rs @@ -93,7 +93,7 @@ fn test_c_target_frontend_examples_helper() { let frontend_code = parse_frontend(&frontend_src, path.to_str()) .unwrap_or_else(|_| panic!("Could not parse `{path:?}`")); drop(frontend_src); - let asm_code = frontend_code.compile(); + let asm_code = frontend_code.compile(false); if let Err(ref e) = asm_code { if let Some(correct_error) = correct_error { diff --git a/tests/examples.rs b/tests/examples.rs index a158d4a3..33bdf721 100644 --- a/tests/examples.rs +++ b/tests/examples.rs @@ -81,7 +81,7 @@ fn test_frontend_examples_helper() { let frontend_code = parse_frontend(&frontend_src, path.to_str()) .unwrap_or_else(|_| panic!("Could not parse `{path:?}`")); - let asm_code = frontend_code.compile().unwrap(); + let asm_code = frontend_code.compile(false).unwrap(); let _vm_code = match asm_code { Ok(core_asm_code) => core_asm_code.assemble(CALL_STACK_SIZE).map(Ok), Err(std_asm_code) => std_asm_code.assemble(CALL_STACK_SIZE).map(Err), @@ -103,7 +103,7 @@ fn test_frontend_examples_helper() { let frontend_code = parse_frontend(&frontend_src, path.to_str()) .unwrap_or_else(|e| panic!("Could not parse `{path:?}`: {e}")); drop(frontend_src); - let asm_code = frontend_code.compile(); + let asm_code = frontend_code.compile(false); if let Err(ref e) = asm_code { if let Some(correct_error) = correct_error { @@ -231,7 +231,7 @@ fn test_lir_examples_helper() { let lir_code = parse_lir(&lir_src).unwrap_or_else(|_| panic!("Could not parse `{path:?}`")); drop(lir_src); - let asm_code = lir_code.compile(); + let asm_code = lir_code.compile(false); if let Err(ref e) = asm_code { let text = e.to_string();