Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: layering on nonexistent objects #1560

Merged
merged 1 commit into from Jul 17, 2023
Merged

fix: layering on nonexistent objects #1560

merged 1 commit into from Jul 17, 2023

Conversation

liangyiliang
Copy link
Contributor

@liangyiliang liangyiliang commented Jul 17, 2023

Description

Resolves #1557 .

This PR fixes the bug of uncaught error when a layer directive is applied to nonexistent objects. As an example,

canvas {
    height = 800
    width = 700

    layer a above b
}

The compiler doesn't check that a and b actually exist, nor does it confirm that indeed, a and b are shapes.

Implementation strategy and design decisions

When translating layer statements, the compiler now resolves each expression and ensures that each object exists and are of Shape type. If not, it reports an error.

Examples with steps to reproduce them

The Style code used in the example now properly reports an error when necessary.

Checklist

  • I have commented my code, particularly in hard-to-understand areas
  • I have reviewed any generated registry diagram changes

@cloudflare-pages
Copy link

Deploying with  Cloudflare Pages  Cloudflare Pages

Latest commit: fcbb02d
Status: ✅  Deploy successful!
Preview URL: https://69404d96.penrose-72l.pages.dev
Branch Preview URL: https://badlayer.penrose-72l.pages.dev

View logs

@github-actions
Copy link

± Registry diff

📊 Performance

Key

Note that each bar component rounds up to the nearest 100ms, so each full bar is an overestimate by up to 400ms.

     0s   1s   2s   3s   4s   5s   6s
     |    |    |    |    |    |    |
name ▝▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▞▀▀▀▀▀▀▀▀▀▘
      compiling optimizing rendering

If a row has only one bar instead of four, that means it's not a trio and the bar just shows the total time spent for that example, again rounded up to the nearest 100ms.

Data

                                                          0s   1s   2s   3s   4s   5s   6s
                                                          |    |    |    |    |    |    |
set-theory-domain/tree-venn                               ▝▀▚▘
set-theory-domain/tree-tree                               ▝▀▞
group-theory/quaternion-multiplication-table              ▝▀▀▚▀▘
walk-on-spheres/SignedAngleOutside                        ▝▀▀▚▀
spectral-graphs/examples/hypercube                        ▝▀▚▘
group-theory/quaternion-cayley-graph                      ▝▀▞
set-theory-domain/tree-venn-3d                            ▝▚▘
atoms-and-bonds/one-water-molecule                        ▝▞
structural-formula/molecules/caffeine                     ▝▀▀▀▚▄▀▘
walk-on-spheres/walk-on-stars                             ▝▀▀▀▚▀▀
set-theory-domain/continuousmap                           ▝▚▘
mobius/mobius                                             ▝▞
linear-algebra-domain/two-vectors-perp                    ▝▞
tutorials/tutorial1                                       ▝▞
tutorials/tutorial2                                       ▝▞
tutorials/tutorial3                                       ▝▞
molecules/nitricacid-lewis                                ▝▀▀▞
exterior-algebra/vector-wedge                             ▝▚▘
shape-spec/all-shapes                                     ▝▚▀▀▀▀
shape-spec/arrowheads                                     ▝▞
graph-domain/textbook/sec1/fig1                           ▝▀▀▄▘
graph-domain/textbook/sec1/fig2                           ▝▀▀▚▄▘
graph-domain/textbook/sec1/fig3                           ▝▀▀▀▄▄▘
graph-domain/textbook/sec1/fig4                           ▝▀▀▚▄▞
spectral-graphs/examples/hexagonal-lattice                ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▞▀▘
graph-domain/textbook/sec1/fig5                           ▝▀▀▀▚▄▄▞
graph-domain/textbook/sec1/fig6                           ▝▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▘
graph-domain/textbook/sec1/fig7                           ▝▀▚▘
graph-domain/textbook/sec1/fig8a                          ▝▀▀▀▚▄▞
graph-domain/textbook/sec1/fig8b                          ▝▀▀▚▄▞
graph-domain/textbook/sec1/fig9                           ▝▀▀▚▞▘
graph-domain/textbook/sec1/fig10                          ▝▀▚▀
graph-domain/textbook/sec1/fig11                          ▝▀▀▚▞▘
graph-domain/textbook/sec1/fig12                          ▝▀▀▀▚▄▞▘
graph-domain/textbook/sec1/fig13                          ▝▀▀▚▄▞
graph-domain/textbook/sec2/fig3                           ▝▀▀▀▀▀▄▄▄▄▘
graph-domain/textbook/sec2/fig4                           ▝▀▀▀▚▄▄▘
graph-domain/textbook/sec2/fig5                           ▝▀▀▀▀▀▚▄▄▄▞
graph-domain/textbook/sec2/fig6                           ▝▀▀▀▀▀▚▄▄▄▞
graph-domain/textbook/sec2/fig9                           ▝▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▘
graph-domain/textbook/sec2/fig10a                         ▝▀▚▄▘
graph-domain/textbook/sec2/fig10b                         ▝▀▚▞
graph-domain/textbook/sec2/fig11a                         ▝▀▞
graph-domain/textbook/sec2/fig11b                         ▝▀▞
graph-domain/textbook/sec2/fig11c                         ▝▀▞
graph-domain/textbook/sec2/fig12                          ▝▀▞
graph-domain/textbook/sec2/fig13                          ▝▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▘
graph-domain/textbook/sec2/fig14                          ▝▀▀▄▞
graph-domain/textbook/sec2/fig16b                         ▝▀▚▄▘
geometry-domain/textbook_problems/c05p13                  ▝▀▚▘
geometry-domain/textbook_problems/c01p01                  ▝▀▚▘
geometry-domain/textbook_problems/c03p01                  ▝▀▚▘
geometry-domain/textbook_problems/c05p01                  ▝▀▞
geometry-domain/textbook_problems/ex                      ▝▀▀▄▘
triangle-mesh-3d/two-triangles                            ▝▚▘
random-sampling/test                                      ▝▀▀▞
geometry-domain/textbook_problems/c11p12                  ▝▀▚▘
curve-examples/catmull-rom/catmull-rom                    ▝▚▘
word-cloud/example                                        ▝▀▄▘
geometry-domain/siggraph-teaser                           ▝▀▚▘
minkowski-tests/maze/non-convex                           ▝▚▘
lagrange-bases/lagrange-bases                             ▝▚▘
hypergraph/hypergraph                                     ▝▀▀▀▚▄▄▄▄▄▄▞
persistent-homology/persistent-homology                   ▝▀▚▄▄▞▘
walk-on-spheres/laplace-estimator                         ▝▀▚▘
walk-on-spheres/poisson-estimator                         ▝▀▚▘
walk-on-spheres/nested-estimator                          ▝▀▀▞
walk-on-spheres/offcenter-estimator                       ▝▀▚▘
shape-distance/points-around-star                         ▝▀▀▞
shape-distance/points-around-polyline                     ▝▀▚▘
shape-distance/points-around-line                         ▝▀▞
shape-distance/lines-around-rect                          ▝▚▘
fake-3d-linear-algebra/projection                         ▝▞
animation/center-shrink-circle                            ▝▞
graph-domain/other-examples/hamiltonian-cycle             ▝▀▀▀▄▀
structural-formula/reactions/methane-combustion           ▝▀▀▄▄▄▘
molecules/glutamine                                       ▝▀▞
matrix-ops/tests/matrix-matrix-addition                   ▝▚▘
matrix-ops/tests/matrix-matrix-division-elementwise       ▝▚▘
matrix-ops/tests/matrix-matrix-multiplication-elementwise ▝▚▘
matrix-ops/tests/matrix-matrix-multiplication             ▝▚▘
matrix-ops/tests/matrix-matrix-subtraction                ▝▚▘
matrix-ops/tests/matrix-transpose                         ▝▚▘
matrix-ops/tests/matrix-vector-left-multiplication        ▝▚▘
matrix-ops/tests/matrix-vector-right-multiplication       ▝▚▘
matrix-ops/tests/scalar-vector-division                   ▝▚▘
matrix-ops/tests/scalar-vector-left-multiplication        ▝▚▘
matrix-ops/tests/scalar-vector-right-multiplication       ▝▚▘
matrix-ops/tests/vector-vector-addition                   ▝▚▘
matrix-ops/tests/vector-vector-division-elementwise       ▝▚▘
matrix-ops/tests/vector-vector-multiplication-elementwise ▝▚▘
matrix-ops/tests/vector-vector-outerproduct               ▝▚▘
matrix-ops/tests/vector-vector-subtraction                ▝▚▘
logic-circuit-domain/half-adder                           ▝▚▘
curve-examples/cubic-bezier                               ▝▚▞
triangle-mesh-2d/diagrams/cotan-formula                   ▝▀▚▘
triangle-mesh-2d/diagrams/concyclic-pair                  ▝▀▞
triangle-mesh-2d/diagrams/halfedge-mesh                   ▝▀▞
triangle-mesh-2d/diagrams/relative-orientation            ▝▚▘
triangle-mesh-2d/diagrams/triangle-centers                ▝▚▘
triangle-mesh-2d/diagrams/angle-equivalence               ▝▀▚▄▘
timeline/penrose                                          ▝▀▀▚▀
graph-domain/textbook/sec5/ex32                           ▝▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▘
curve-examples/open-elastic-curve                         ▝▀▚▞
curve-examples/closed-elastic-curve                       ▝▀▄▘
graph-domain/other-examples/arpanet                       ▝▀▀▀▀▀▚▄▄▄▄▄▄▄▘
graph-domain/other-examples/nyc-subway                    ▝▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▞
fancy-text/fancy-text                                     ▝▀▄▘
curve-examples/blobs                                      ▝▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▘
curve-examples/space-curves                               ▝▀▀▀▀▀▄▄▘
geometric-queries/ray-intersect/test-group                ▝▀▀▀▀▀▀▞▘
ray-tracing/path-trace                                    ▝▀▚▘
ray-tracing/bidirectional                                 ▝▀▚▘
ray-tracing/next-event-estimation                         ▝▀▚▘
geometric-queries/test                                    ▝▀▞
geometric-queries/closest-point/test-group                ▝▚▘
geometric-queries/closest-point/test                      ▝▚▘
geometric-queries/closest-silhouette-point/test           ▝▚▘
geometric-queries/ray-intersect/test                      ▝▀▀▀▀▀▚▀▘
box-arrow-diagram/computer-architecture                   ▝▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▘
stochastic-process/stochastic-process                     ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▚▀▀▀
stochastic-process/epsilon-shell/AbsorbingBoundary        ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▞▀▀▀▀▀▀▘
solid/eigenspace                                          ▐█▌
solid/triangles                                           ▐█
solid/vectors                                             ▐▌
tsne/tsne                                                 ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▘
spectral-graphs/examples/4x4-sudoku-graph                 ▝▀▀▚▀
spectral-graphs/examples/dodecahedral-graph               ▝▀▞
atoms-and-bonds/wet-floor                                 ▝▚▘
curve-examples/offset                                     ▝▚▞
curve-examples/frenet-frame                               ▝▚▘
curve-examples/osculating-circle                          ▝▞
curve-examples/evolute-of-cardioid                        ▝▀▀▞

@liangyiliang liangyiliang marked this pull request as ready for review July 17, 2023 18:09
Copy link
Member

@wodeni wodeni left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for catching this bug and fixing it quickly!

@liangyiliang liangyiliang merged commit 0bbe47c into main Jul 17, 2023
11 checks passed
@liangyiliang liangyiliang deleted the badlayer branch July 17, 2023 18:22
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.

Uncaught error when layer directives refer to nonexistent shapes
2 participants