Function getBase [src]

Prototype

pub fn getBase(self: Constant, builder: *const Builder) Global.Index

Parameters

self: Constantbuilder: *const Builder

Source

pub fn getBase(self: Constant, builder: *const Builder) Global.Index { var cur = self; while (true) switch (cur.unwrap()) { .constant => |constant| { const item = builder.constant_items.get(constant); switch (item.tag) { .ptrtoint, .inttoptr, .bitcast, => cur = builder.constantExtraData(Cast, item.data).val, .getelementptr => cur = builder.constantExtraData(GetElementPtr, item.data).base, .add => { const extra = builder.constantExtraData(Binary, item.data); const lhs_base = extra.lhs.getBase(builder); const rhs_base = extra.rhs.getBase(builder); return if (lhs_base != .none and rhs_base != .none) .none else if (lhs_base != .none) lhs_base else rhs_base; }, .sub => { const extra = builder.constantExtraData(Binary, item.data); if (extra.rhs.getBase(builder) != .none) return .none; cur = extra.lhs; }, else => return .none, } }, .global => |global| switch (global.ptrConst(builder).kind) { .alias => |alias| cur = alias.ptrConst(builder).aliasee, .variable, .function => return global, .replaced => unreachable, }, }; }