Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364package core
import ( "git.urbach.dev/cli/q/src/errors" "git.urbach.dev/cli/q/src/ssa" "git.urbach.dev/cli/q/src/token")
// removeDeadValue checks if the value is dead and removes it.func (f *Function) removeDeadValue(block *ssa.Block, i int, value ssa.Value, folded map[ssa.Value]struct{}) error { if f.hasLiveUser(value) { return nil }
_, isFolded := folded[value]
if isFolded { block.RemoveAt(i) return nil }
if !value.IsPure() { return nil }
_, isPhi := value.(*ssa.Phi)
if isPhi { block.RemoveAt(i) return nil }
structure, isFieldOfStruct := f.valueToStruct[value]
if isFieldOfStruct { partiallyUnused := false
for _, field := range structure.Arguments { if len(field.Users()) > 0 { partiallyUnused = true break } }
if partiallyUnused { block.RemoveAt(i) return nil } }
source := value.(errors.Source)
if !f.Env.Build.LintDeadCode || source.Start() == 0 || source.End() == 0 { copy, isCopy := value.(*ssa.Copy)
if !isCopy || copy.Read { block.RemoveAt(i) }
return nil }
return errors.New(&UnusedValue{Value: source.StringFrom(f.File.Bytes)}, f.File, token.NewSource(source.Start(), source.End()))}