temperlang / temper

3 stars 0 forks source link

Large temper files "Not generating code". #102

Open ShawSumma opened 6 months ago

ShawSumma commented 6 months ago

Over the weekend I was doing some exploratory programming with generating temper code and compiling it.

The folder had Three Files in it... Note that you must rename .temper.txt to .temper because github does not support .temper files :(. config.temper.md parser.temper trees.temper

The build fails with a stacktrace and then tells me it wont generate code.

-work//parser.temper
  lang.temper.value.Abort
        at lang.temper.value.Abort.<clinit>(Abort.kt)
        at lang.temper.interp.Interpreter.visitEdge(Interpreter.kt:215)
        at lang.temper.interp.Interpreter.interpretEdge$interp(Interpreter.kt:186)
        at lang.temper.interp.Interpreter.partiallyEvaluateDeclParts(Interpreter.kt:946)
        at lang.temper.interp.Interpreter.interpretDecl(Interpreter.kt:1024)
        at lang.temper.interp.Interpreter.interpretTreeNotSpammy(Interpreter.kt:254)
        at lang.temper.interp.Interpreter.interpretTree(Interpreter.kt:235)
        at lang.temper.interp.Interpreter.interpretTree$default(Interpreter.kt:220)
        at lang.temper.interp.Interpreter.interpretEdge$interp(Interpreter.kt:187)
        at lang.temper.interp.Interpreter.interpretBlock(Interpreter.kt:371)
        at lang.temper.interp.Interpreter.interpretBlock$default(Interpreter.kt:317)
        at lang.temper.interp.Interpreter.interpretTreeNotSpammy(Interpreter.kt:252)
        at lang.temper.interp.Interpreter.interpretTree(Interpreter.kt:235)
        at lang.temper.interp.Interpreter.interpretTree$default(Interpreter.kt:220)
        at lang.temper.interp.Interpreter.interpretEdge$interp(Interpreter.kt:187)
        at lang.temper.interp.Interpreter$maybeVisitChildren$1.invoke(Interpreter.kt:1722)
        at lang.temper.interp.Interpreter$maybeVisitChildren$1.invoke(Interpreter.kt:1721)
        at lang.temper.interp.InterpreterKt.forEachChildMacroSensitively(Interpreter.kt:2156)
        at lang.temper.interp.InterpreterKt.access$forEachChildMacroSensitively(Interpreter.kt:1)
        at lang.temper.interp.Interpreter.maybeVisitChildren(Interpreter.kt:1721)
        at lang.temper.interp.Interpreter.interpretFun(Interpreter.kt:1144)
        at lang.temper.interp.Interpreter.interpretTreeNotSpammy(Interpreter.kt:256)
        at lang.temper.interp.Interpreter.interpretTree(Interpreter.kt:235)
        at lang.temper.interp.Interpreter.interpretTree$default(Interpreter.kt:220)
        at lang.temper.interp.Interpreter.interpretEdge$interp(Interpreter.kt:187)
        at lang.temper.interp.LazyActualsList.interpret(LazyActualsList.kt:112)
        at lang.temper.interp.LazyActualsList.evaluate(LazyActualsList.kt:102)
        at lang.temper.builtin.SetLocalFn.invoke(SetLocalFn.kt:121)
        at lang.temper.interp.Interpreter$dispatchCall$result$1.invoke(Interpreter.kt:741)
        at lang.temper.interp.Interpreter$dispatchCall$result$1.invoke(Interpreter.kt:740)
        at lang.temper.interp.Interpreter.withMacroEnvironment(Interpreter.kt:1955)
        at lang.temper.interp.Interpreter.dispatchCall(Interpreter.kt:740)
        at lang.temper.interp.Interpreter.interpretCall(Interpreter.kt:806)
        at lang.temper.interp.Interpreter.interpretTreeNotSpammy(Interpreter.kt:253)
        at lang.temper.interp.Interpreter.interpretTree(Interpreter.kt:235)
        at lang.temper.interp.Interpreter.interpretTree$default(Interpreter.kt:220)
        at lang.temper.interp.Interpreter.interpretEdge$interp(Interpreter.kt:187)
        at lang.temper.interp.Interpreter.interpretBlock(Interpreter.kt:371)
        at lang.temper.interp.Interpreter.interpretBlock$default(Interpreter.kt:317)
        at lang.temper.interp.Interpreter.interpretTreeNotSpammy(Interpreter.kt:252)
        at lang.temper.interp.Interpreter.interpretTree(Interpreter.kt:235)
        at lang.temper.interp.Interpreter.interpretReuseEnvironment(Interpreter.kt:175)
        at lang.temper.frontend.InterpretiveDanceStageKt.interpretiveDanceStage(InterpretiveDanceStage.kt:104)
        at lang.temper.frontend.export.ExportStage.process(ExportStage.kt:27)
        at lang.temper.frontend.Module$advance$1.invoke(Module.kt:555)
        at lang.temper.frontend.Module$advance$1.invoke(Module.kt:429)
        at lang.temper.frontend.TopLevelBindings.whileSynchronized(TopLevelBindings.kt:93)
        at lang.temper.frontend.Module.advance(Module.kt:429)
        at lang.temper.compile.handlers.ModuleBuilder.stepAdvance(ModuleBuilder.kt:1078)
        at lang.temper.compile.handlers.ModuleBuilder.access$stepAdvance(ModuleBuilder.kt:64)
        at lang.temper.compile.handlers.ModuleBuilder$checkNextSteps$2$2.invoke(ModuleBuilder.kt:771)
        at lang.temper.compile.handlers.ModuleBuilder$checkNextSteps$2$2.invoke(ModuleBuilder.kt:770)
        at lang.temper.common.currents.Currents$TaskImpl.run(Currents.kt:259)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)

Not generating code for -work//parser.temper
Build failed

I don't know if we want this to work, but the error should specify that this is either a bug in temper (it happens) or not able to be done in temper (which would be sad to me).

tjpalmer commented 6 months ago

Maybe we could both give a better message and make the max interp time configurable.