Skip to main content

Global

Struct Global 

Source
pub struct Global {
    pub name: String,
    pub ty: Option<usize>,
    pub decl: Option<Place>,
    pub external: bool,
}
Expand description

One variable the unit defines at file scope.

Not the same problem as a local, and that is the whole reason this is here and a local is not. A file-scope variable is at one address for the whole of the program, so its location is the address of its own symbol and the linker fills it in, the same way it fills in a function’s. A local’s location is wherever the code happens to be keeping it at the program counter the debugger stopped at, which is a list rather than an expression, and that is the rest of tamnd/rucc#9.

Fields§

§name: String

Its name, as the C program spelled it, which is what the relocation asks the linker for.

§ty: Option<usize>

Which of the unit’s types it is, and None when this compiler cannot yet say.

A variable with nothing here still gets an entry, which is the one place the rule for a function is turned around. A DW_TAG_variable with no DW_AT_type does not say void, because nothing in C is a variable of type void, so a reader takes it as a variable whose type was not recorded. The name and the address are worth having on their own: they are what lets a debugger resolve the name at all, and a program that knows what it is looking at can cast.

§decl: Option<Place>

Where it was declared, and nothing when that is not known.

§external: bool

Whether anything outside this unit can see it, which is the opposite of static.

Trait Implementations§

Source§

impl Clone for Global

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Global

Source§

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

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

impl Default for Global

Source§

fn default() -> Self

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

impl Eq for Global

Source§

impl PartialEq for Global

Source§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Global

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

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

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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.