Skip to content

Commit

Permalink
sema: fix and improve cycle messages of use declarations
Browse files Browse the repository at this point in the history
  • Loading branch information
mertcandav committed Jan 7, 2025
1 parent 28c8010 commit c5d59ec
Showing 1 changed file with 6 additions and 21 deletions.
27 changes: 6 additions & 21 deletions std/jule/sema/sym.jule
Original file line number Diff line number Diff line change
Expand Up @@ -534,34 +534,26 @@ impl symBuilder {
build::LogMsg.RefersTo,
self.getAsLinkPath(sb.table.File.Dir()),
self.getAsLinkPath(path))
m := message.Str()
message.WriteStr(strings::Repeat(" ", Padding))!
message.WriteStr(refersTo)!
message.WriteByte('\n')!
message.WriteStr(m)!
}

fn pushCrossCycleError(mut &self, &target: &symBuilder, &imp: &ImportInfo, &errorToken: &token::Token) {
mut message := strings::Builder{}
message.Grow(1 << 5)

self.pushCycleError(self, imp.Path, message)

mut owner := self.owner
mut old := self

for owner.owner != nil {
self.pushCycleError(old.owner, old.table.File.Dir(), message)

if owner.owner == target {
self.pushCycleError(target, owner.table.File.Dir(), message)
break
}

old = owner
owner = owner.owner
}

self.pushErr(errorToken, build::LogMsg.PkgIllegalCrossCycle, message.Str())
}

Expand All @@ -570,23 +562,16 @@ impl symBuilder {
self.pushErr(decl.Token, build::LogMsg.PkgIllegalCycleRefersItself, self.getAsLinkPath(imp.Path))
ret false
}

if self.owner == nil {
ret true
}

mut owner := self.owner
iter:
if owner.table.File.Dir() == imp.Path {
self.pushCrossCycleError(owner, imp, decl.Token)
ret false
}

if owner.owner != nil {
owner = owner.owner
goto iter
mut owner := self
for owner != nil; owner = owner.owner {
if owner.table.File.Dir() == imp.Path {
self.pushCrossCycleError(owner, imp, decl.Token)
ret false
}
}

ret true
}

Expand Down

0 comments on commit c5d59ec

Please sign in to comment.