def resolve(self, s): from pysonarsq.java.Analyzer import Analyzer type1 = None type2 = None self.resolveExpr(self.test, s) s1 = s.copy() s2 = s.copy() if self.body is not None and not self.body.isEmpty(): type1 = self.resolveExpr(self.body, s1) else: type1 = Analyzer.self.builtins.Cont if self.orelse is not None and not self.orelse.isEmpty(): type2 = self.resolveExpr(self.orelse, s2) else: type2 = Analyzer.self.builtins.Cont cont1 = UnionType.contains(type1, Analyzer.self.builtins.Cont) cont2 = UnionType.contains(type2, Analyzer.self.builtins.Cont) if cont1 and cont2: s.overwrite(Scope.merge(s1, s2)) elif cont1: s.overwrite(s1) elif cont2: s.overwrite(s2) return UnionType.union(type1, type2)
def resolve(self, scope): from pysonarsq.java.Analyzer import Analyzer from pysonarsq.java.Scope import Scope # find global names and mark them for n in self.seq: if n.isGlobal(): for name in n.asGlobal().getNames(): scope.addGlobalName(name.id) nb = scope.lookup(name.id) if nb is not None: Analyzer.self.putRef(name, nb) returned = False retType = Analyzer.self.builtins.unknown for n in self.seq: t = self.resolveExpr(n, scope) if not returned: retType = UnionType.union(retType, t) if not UnionType.contains(t, Analyzer.self.builtins.Cont): returned = True retType = UnionType.remove(retType, Analyzer.self.builtins.Cont) elif scope.getScopeType( ) != Scope.ScopeType.GLOBAL and scope.getScopeType( ) != Scope.ScopeType.MODULE: Analyzer.self.putProblem(n, "unreachable code") return retType
def resolve(self, scope): from pysonarsq.java.Analyzer import Analyzer from pysonarsq.java.Scope import Scope # find global names and mark them for n in self.seq: if n.isGlobal(): for name in n.asGlobal().getNames(): scope.addGlobalName(name.id) nb = scope.lookup(name.id); if nb is not None: Analyzer.self.putRef(name, nb) returned = False retType = Analyzer.self.builtins.unknown for n in self.seq: t = self.resolveExpr(n, scope); if not returned: retType = UnionType.union(retType, t) if not UnionType.contains(t, Analyzer.self.builtins.Cont): returned = True retType = UnionType.remove(retType, Analyzer.self.builtins.Cont) elif scope.getScopeType() != Scope.ScopeType.GLOBAL and scope.getScopeType() != Scope.ScopeType.MODULE: Analyzer.self.putProblem(n, "unreachable code") return retType