Skip to content

Change Block.block_env to circular attribute#175

Open
amir734jj wants to merge 1 commit into
boyland:masterfrom
amir734jj:patch-50
Open

Change Block.block_env to circular attribute#175
amir734jj wants to merge 1 commit into
boyland:masterfrom
amir734jj:patch-50

Conversation

@amir734jj
Copy link
Copy Markdown
Contributor

@amir734jj amir734jj commented May 16, 2026

Make block_env in nested-ubd.aps circular, otherwise getting circular attribute error.

amir@pop-os:~/workspace/synth-functions-pr-final/examples/scala$ make EVALUATOR=DYNAMIC ARGS="/home/amir/workspace/random-farrow-ubd-program/10.program" NestedUbdDriver.run
../../bin/aps2scala -p ..:../../base -G nested-ubd-tree
../../bin/aps2scala -p ..:../../base -G nested-ubd
scalac -cp .:../../lib/aps-library.jar nested-ubd-tree.scala nested-ubd.scala
warning: 19 deprecations (since 2.13.3); re-run with -deprecation for details
1 warning
scalac -cp .:../../lib/aps-library.jar NestedUbdParserBase.scala
scalac -cp .:../../lib/aps-library.jar NestedUbdParser.scala
warning: 24 deprecations (since 2.13.3); re-run with -deprecation for details
1 warning
scalac -cp .:../../lib/aps-library.jar nested-ubd-driver.scala
warning: 1 feature warning; re-run with -feature for details
1 warning
scala -cp .:../../lib/aps-library.jar NestedUbdDriver /home/amir/workspace/random-farrow-ubd-program/10.program
Evaluation$CyclicAttributeException: cyclic attribute: scope(decls_add(decls_append(#,#),scope(#))).block_env
        at Evaluation.setInCycle(aps-impl.scala:240)
        at CircularEvaluation.$anonfun$markPending$1(aps-impl.scala:488)
        at CircularEvaluation.$anonfun$markPending$1$adapted(aps-impl.scala:481)
        at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:619)
        at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:617)
        at Evaluation$Stack.foreach(aps-impl.scala:203)
        at CircularEvaluation.markPending(aps-impl.scala:481)
        at CircularEvaluation.markPending$(aps-impl.scala:479)
        at M_NESTED_UBD$E_decls_env.markPending(nested-ubd.scala:174)
        at CircularEvaluation.detectedCycle(aps-impl.scala:475)
        at CircularEvaluation.detectedCycle$(aps-impl.scala:468)
        at M_NESTED_UBD$E_decls_env.detectedCycle(nested-ubd.scala:174)
        at Evaluation.doEvaluate(aps-impl.scala:245)
        at Evaluation.get(aps-impl.scala:265)
        at M_NESTED_UBD$E_decls_env.CollectionEvaluation$$super$get(nested-ubd.scala:174)
        at CollectionEvaluation.get(aps-impl.scala:381)
        at CollectionEvaluation.get$(aps-impl.scala:379)
        at M_NESTED_UBD$E_decls_env.get(nested-ubd.scala:174)
        at Attribute.get(aps-impl.scala:355)
        at M_NESTED_UBD.$anonfun$v_decls_env$1(nested-ubd.scala:184)
        at M_NESTED_UBD.c_block_env(nested-ubd.scala:490)
        at M_NESTED_UBD$E_block_env.compute(nested-ubd.scala:195)
        at M_NESTED_UBD$E_block_env.compute(nested-ubd.scala:194)
        at Evaluation.doEvaluate(aps-impl.scala:249)
        at Evaluation.get(aps-impl.scala:265)
        at Attribute.get(aps-impl.scala:355)
        at M_NESTED_UBD.$anonfun$v_block_env$1(nested-ubd.scala:200)
        at M_NESTED_UBD.$anonfun$c_decls_env$2(nested-ubd.scala:429)
        at M_NESTED_UBD.$anonfun$c_decls_env$2$adapted(nested-ubd.scala:427)

@boyland
Copy link
Copy Markdown
Owner

boyland commented May 16, 2026

Hmm. I wonder if this is because of the way dynamic scheduling cannot cope well with collection circular attributes? Because I think the dependencies are not actually circular?

@amir734jj
Copy link
Copy Markdown
Contributor Author

amir734jj commented May 16, 2026

That's true. Something is wrong with how dynamic scheduling handles circular collection attributes. Once we fix that ^^^ APS issue .. we get StackOverflowError exception.

amir@pop-os:~/workspace/synth-functions-pr-final/examples/scala$ make EVALUATOR=DYNAMIC ARGS="/home/amir/workspace/random-farrow-ubd-program/20.program" NestedUbdDriver.run
../../bin/aps2scala -p ..:../../base -G nested-ubd
scalac -cp .:../../lib/aps-library.jar nested-ubd-tree.scala nested-ubd.scala
warning: 19 deprecations (since 2.13.3); re-run with -deprecation for details
1 warning
scalac -cp .:../../lib/aps-library.jar NestedUbdParserBase.scala
scalac -cp .:../../lib/aps-library.jar NestedUbdParser.scala
warning: 24 deprecations (since 2.13.3); re-run with -deprecation for details
1 warning
scalac -cp .:../../lib/aps-library.jar nested-ubd-driver.scala
warning: 1 feature warning; re-run with -feature for details
1 warning
scala -cp .:../../lib/aps-library.jar NestedUbdDriver /home/amir/workspace/random-farrow-ubd-program/20.program
Exception in thread "main" java.lang.StackOverflowError
        at Debug$.with_level(aps-impl.scala:51)
        at M_NESTED_UBD_TREE$c_expr_term.toString(nested-ubd-tree.scala:155)
        at java.base/java.lang.String.valueOf(String.java:4454)
        at java.base/java.lang.StringBuilder.append(StringBuilder.java:173)
        at M_NESTED_UBD_TREE$c_expr_apply.$anonfun$toString$11(nested-ubd-tree.scala:220)
        at Debug$.with_level(aps-impl.scala:51)
        at M_NESTED_UBD_TREE$c_expr_apply.toString(nested-ubd-tree.scala:220)
        at java.base/java.lang.String.valueOf(String.java:4454)
        at java.base/java.lang.StringBuilder.append(StringBuilder.java:173)
        at M_NESTED_UBD_TREE$c_decl_assign.$anonfun$toString$2(nested-ubd-tree.scala:103)
        at Debug$.with_level(aps-impl.scala:51)
        at M_NESTED_UBD_TREE$c_decl_assign.toString(nested-ubd-tree.scala:103)
        at M_NESTED_UBD$E_decl_env.<init>(nested-ubd.scala:142)
        at M_NESTED_UBD$a_decl_env$.createEvaluation(nested-ubd.scala:150)
        at Attribute.checkNode(aps-impl.scala:345)
        at Attribute.get(aps-impl.scala:355)
        at M_NESTED_UBD.$anonfun$v_decl_env$1(nested-ubd.scala:152)
        at M_NESTED_UBD.$anonfun$c_expr_env$2(nested-ubd.scala:535)
        at M_NESTED_UBD.$anonfun$c_expr_env$2$adapted(nested-ubd.scala:533)
        at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:619)
        at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:617)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:935)
        at scala.collection.IterableOps$WithFilter.foreach(Iterable.scala:905)
        at M_NESTED_UBD.c_expr_env(nested-ubd.scala:533)
        at M_NESTED_UBD$E_expr_env.compute(nested-ubd.scala:227)
        at M_NESTED_UBD$E_expr_env.compute(nested-ubd.scala:222)
        at Evaluation.doEvaluate(aps-impl.scala:249)
        at Evaluation.get(aps-impl.scala:265)
        at M_NESTED_UBD$E_expr_env.CollectionEvaluation$$super$get(nested-ubd.scala:222)
        at CollectionEvaluation.get(aps-impl.scala:381)
        at CollectionEvaluation.get$(aps-impl.scala:379)
        at M_NESTED_UBD$E_expr_env.get(nested-ubd.scala:222)
        at Attribute.get(aps-impl.scala:355)
        at M_NESTED_UBD.$anonfun$v_expr_env$1(nested-ubd.scala:232)
        at M_NESTED_UBD.$anonfun$c_expr_env$4(nested-ubd.scala:541)
        at M_NESTED_UBD.$anonfun$c_expr_env$4$adapted(nested-ubd.scala:539)
        at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:619)
        at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:617)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:935)
        at scala.collection.IterableOps$WithFilter.foreach(Iterable.scala:905)
        at M_NESTED_UBD.c_expr_env(nested-ubd.scala:539)
        at M_NESTED_UBD$E_expr_env.compute(nested-ubd.scala:227)
        at M_NESTED_UBD$E_expr_env.compute(nested-ubd.scala:222)
        at Evaluation.doEvaluate(aps-impl.scala:249)
        at Evaluation.get(aps-impl.scala:265)
        at M_NESTED_UBD$E_expr_env.CollectionEvaluation$$super$get(nested-ubd.scala:222)
        at CollectionEvaluation.get(aps-impl.scala:381)
        at CollectionEvaluation.get$(aps-impl.scala:379)
        at M_NESTED_UBD$E_expr_env.get(nested-ubd.scala:222)
        at Attribute.get(aps-impl.scala:355)
        at M_NESTED_UBD.$anonfun$v_expr_env$1(nested-ubd.scala:232)
        at M_NESTED_UBD.$anonfun$c_term_env$2(nested-ubd.scala:584)
        at M_NESTED_UBD.$anonfun$c_term_env$2$adapted(nested-ubd.scala:582)
        at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:619)
        at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:617)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:935)
        at scala.collection.IterableOps$WithFilter.foreach(Iterable.scala:905)
        at M_NESTED_UBD.c_term_env(nested-ubd.scala:582)
        at M_NESTED_UBD$E_term_env.compute(nested-ubd.scala:257)
        at M_NESTED_UBD$E_term_env.compute(nested-ubd.scala:252)

And to solve that StackOverFlow exception, I think we need something like this (left=current, right=with the fix)

image

Sample program where we get a StackOverflow exception.
20.program.txt

we can test it via make EVALUATOR=DYNAMIC ARGS="20.program.txt" NestedUbdDriver.run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants