timowest/scalagen

bad _ value in case of assignment by an if block

Closed this issue · 4 comments

The Java source (line 439 ) :

    boolean success;
    ArrayList<Term> list = t1.cloneComponents();
    if (t1.getClass() == t2.getClass()) {
        success = list.addAll(((CompoundTerm) t2).getComponents());
    } else {
        success = list.add(t2);
    }

https://open-nars.googlecode.com/svn/trunk/nars/language/CompoundTerm.java

The generated Scala :

    var success: Boolean = _
    val list = t1.cloneComponents()
    success = if (t1.getClass == t2.getClass) list.addAll(t2.asInstanceOf[CompoundTerm].getComponents) else list.add(t2)

COMMENT: moving up the val list declaration would be ideal solution, but maybe hard to implement ; maybe instead initialization to a neutral value like false for a Boolean and "" for a String will do . But NOTE : maybe this is intentional, because fixing like this would not be safe .

generated Scala, hand edited :
https://open-nars.googlecode.com/svn/trunk/nars_core/src/main/scala/nars/language/CompoundTerm.scala

For that the pattern matching would need to be quite invasive. We would need to ensure that success is not assigned anything after the if/else block.

It's not clear whether you write about the first , or the second fix I suggested.
Anyway I don't see problem with assignments further down.

The fix I applied manually is :

val list = t1.cloneComponents()
var success =
    if (t1.getClass == t2.getClass) list.addAll(t2.asInstanceOf[CompoundTerm].getComponents)
        else list.add(t2)
(if (success) make(t1, list, memory) else null)

The corresponding Java is line 439 :
https://open-nars.googlecode.com/svn/trunk/nars/language/CompoundTerm.java

Sorry, I was unclear. The default values for primitives have been fixed now. I might give the if/else merging a try later, but you can also try, if you are comfortable with that.

Released in 0.2.2