Ticket #144 (new task)

Opened 3 months ago

importing two generic functions causes phase order problem

Reported by: jon Assigned to: dr2chase
Priority: major Milestone:
Component: interpreter Version:
Keywords: Cc:

Description

component x
import List.{...}
import Set.{...}
export Executable

run(args:String...) = do
    singleton[\String\]("1")
end

end

Both List and Set have a singleton[\E\](x:E) method. The output is:

x.fss:7:4-24: No matches for instantiation of overloaded {
         PENDING BELOW
*       singleton[\E\](e:E):List[\E\]/home/kazzmir/fortress/trunk/Library/List.fss:490:0-494:5
*       singleton[\E\](x:E):Set[\E\]/home/kazzmir/fortress/trunk/Library/Set.fss:75:0-78:3}:OverloadedFunction with (String)

If the type parameter is left off, a slightly different error message is produced:

component x
import List.{...}
import Set.{...}
export Executable

run(args:String...) = do
    singleton("1")
end

end

Output:

/home/kazzmir/fortress/trunk/tmp/x.fss:7:4-18: Failed to find any matching overload, args = ("1"), overload = {
         PENDING BELOW
*       singleton[\E\](e:E):List[\E\]/home/kazzmir/fortress/trunk/Library/List.fss:490:0-494:5
*       singleton[\E\](x:E):Set[\E\]/home/kazzmir/fortress/trunk/Library/Set.fss:75:0-78:3}:OverloadedFunction

The java stack trace for the first program above is:

at com.sun.fortress.exceptions.ProgramError.error(ProgramError.java:99)
        at com.sun.fortress.interpreter.evaluator.values.OverloadedFunction$Factory.make(OverloadedFunction.java:942)
        at com.sun.fortress.interpreter.evaluator.values.OverloadedFunction$Factory.make(OverloadedFunction.java:904)
        at com.sun.fortress.useful.Memo1P.make(Memo1P.java:39)
        at com.sun.fortress.interpreter.evaluator.values.OverloadedFunction.make(OverloadedFunction.java:951)
        at com.sun.fortress.interpreter.evaluator.values.OverloadedFunction.typeApply(OverloadedFunction.java:989)
        at com.sun.fortress.interpreter.evaluator.values.OverloadedFunction.typeApply(OverloadedFunction.java:974)
        at com.sun.fortress.interpreter.evaluator.Evaluator.applyToActualStaticArgs(Evaluator.java:1709)
        at com.sun.fortress.interpreter.evaluator.Evaluator.applyToStaticArgs(Evaluator.java:1700)
        at com.sun.fortress.interpreter.evaluator.Evaluator.for_RewriteFnRef(Evaluator.java:1693)
        at com.sun.fortress.interpreter.evaluator.Evaluator.for_RewriteFnRef(Evaluator.java:178)
        at com.sun.fortress.nodes._RewriteFnRef.accept(_RewriteFnRef.java:142)
        at com.sun.fortress.interpreter.evaluator.Evaluator.forTightJuxt(Evaluator.java:1423)
        at com.sun.fortress.interpreter.evaluator.Evaluator.forTightJuxt(Evaluator.java:1367)
        at com.sun.fortress.interpreter.evaluator.Evaluator.forTightJuxt(Evaluator.java:178)
        at com.sun.fortress.nodes.TightJuxt.accept(TightJuxt.java:192)
        at com.sun.fortress.interpreter.evaluator.Evaluator.evalExprList(Evaluator.java:472)
        at com.sun.fortress.interpreter.evaluator.Evaluator.evalExprList(Evaluator.java:454)
        at com.sun.fortress.interpreter.evaluator.Evaluator.forBlock(Evaluator.java:422)
        at com.sun.fortress.interpreter.evaluator.Evaluator.forBlock(Evaluator.java:178)
        at com.sun.fortress.nodes.Block.accept(Block.java:58)
        at com.sun.fortress.interpreter.evaluator.Evaluator.forDo(Evaluator.java:382)
        at com.sun.fortress.interpreter.evaluator.Evaluator.forDo(Evaluator.java:178)
        at com.sun.fortress.nodes.Do.accept(Do.java:58)
        at com.sun.fortress.interpreter.evaluator.Evaluator.eval(Evaluator.java:183)
        at com.sun.fortress.interpreter.evaluator.values.Closure.applyInner(Closure.java:206)
        at com.sun.fortress.interpreter.evaluator.values.Fcn.apply(Fcn.java:98)
        at com.sun.fortress.interpreter.Driver.runProgramTask(Driver.java:1048)
        at com.sun.fortress.interpreter.evaluator.tasks.EvaluatorTask.compute(EvaluatorTask.java:61)
        at jsr166y.forkjoin.RecursiveAction.forkJoin(RecursiveAction.java:234)
        at jsr166y.forkjoin.RecursiveAction.forkJoin(RecursiveAction.java:119)
        at jsr166y.forkjoin.Submission.compute(Submission.java:97)
        at jsr166y.forkjoin.Submission.exec(Submission.java:201)
        at jsr166y.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:285)