mirror of
https://github.com/encounter/decomp-toolkit.git
synced 2025-12-16 08:27:02 +00:00
Add & use ObjSymbolFlagSet helper functions
This commit is contained in:
@@ -31,6 +31,32 @@ flags! {
|
||||
#[derive(Debug, Copy, Clone, Default, Eq, PartialEq, Serialize, Deserialize)]
|
||||
pub struct ObjSymbolFlagSet(pub FlagSet<ObjSymbolFlags>);
|
||||
|
||||
impl ObjSymbolFlagSet {
|
||||
#[inline]
|
||||
pub fn is_local(&self) -> bool { self.0.contains(ObjSymbolFlags::Local) }
|
||||
|
||||
#[inline]
|
||||
pub fn is_global(&self) -> bool { !self.is_local() }
|
||||
|
||||
#[inline]
|
||||
pub fn is_common(&self) -> bool { self.0.contains(ObjSymbolFlags::Common) }
|
||||
|
||||
#[inline]
|
||||
pub fn is_weak(&self) -> bool { self.0.contains(ObjSymbolFlags::Weak) }
|
||||
|
||||
#[inline]
|
||||
pub fn is_hidden(&self) -> bool { self.0.contains(ObjSymbolFlags::Hidden) }
|
||||
|
||||
#[inline]
|
||||
pub fn is_force_active(&self) -> bool { self.0.contains(ObjSymbolFlags::ForceActive) }
|
||||
|
||||
#[inline]
|
||||
pub fn set_global(&mut self) {
|
||||
self.0 =
|
||||
(self.0 & !(ObjSymbolFlags::Local | ObjSymbolFlags::Weak)) | ObjSymbolFlags::Global;
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(clippy::derived_hash_with_manual_eq)]
|
||||
impl Hash for ObjSymbolFlagSet {
|
||||
fn hash<H: Hasher>(&self, state: &mut H) { self.0.bits().hash(state) }
|
||||
|
||||
@@ -637,7 +637,7 @@ pub fn split_obj(obj: &ObjInfo) -> Result<Vec<ObjInfo>> {
|
||||
|
||||
// If the symbol is local, we'll upgrade the scope to global
|
||||
// and rename it to avoid conflicts
|
||||
if target_sym.flags.0.contains(ObjSymbolFlags::Local) {
|
||||
if target_sym.flags.is_local() {
|
||||
let address_str = format!("{:08X}", target_sym.address);
|
||||
let new_name = if target_sym.name.ends_with(&address_str) {
|
||||
target_sym.name.clone()
|
||||
@@ -694,10 +694,9 @@ pub fn split_obj(obj: &ObjInfo) -> Result<Vec<ObjInfo>> {
|
||||
if let Some(symbol_idx) = symbol_map[*globalize_idx] {
|
||||
let mut symbol = obj.symbols.at(symbol_idx).clone();
|
||||
symbol.name = new_name.clone();
|
||||
if symbol.flags.0.contains(ObjSymbolFlags::Local) {
|
||||
if symbol.flags.is_local() {
|
||||
log::debug!("Globalizing {} in {}", symbol.name, obj.name);
|
||||
symbol.flags.0 &= !ObjSymbolFlags::Local;
|
||||
symbol.flags.0 |= ObjSymbolFlags::Global;
|
||||
symbol.flags.set_global();
|
||||
}
|
||||
obj.symbols.replace(symbol_idx, symbol)?;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user