1
0
mirror of https://github.com/catseye/SixtyPical.git synced 2024-06-11 18:29:33 +00:00
SixtyPical/tests/SixtyPical Callgraph.md

122 lines
2.8 KiB
Markdown
Raw Normal View History

2019-10-21 16:29:38 +00:00
SixtyPical Callgraph
====================
This is a test suite, written in [Falderal][] format, for the ability of
a SixtyPical analyzer to construct a callgraph of which routines call which
other routines, and its ability to discover which routines will never be
called.
[Falderal]: http://catseye.tc/node/Falderal
-> Tests for functionality "Dump callgraph info for SixtyPical program"
2019-10-21 20:35:28 +00:00
The `main` routine is always called. The thing that it will
be called by is the system, but the callgraph analyzer will
simply consider it to be "marked as called".
2019-10-21 16:29:38 +00:00
| define main routine
| {
| }
2019-10-21 20:23:14 +00:00
= {
= "main": {
2019-10-21 20:35:28 +00:00
= "potentially-called-by": [
= "*marked*"
= ],
= "potentially-calls": []
= }
= }
If a routine is called by another routine, this fact will be noted.
| define main routine
| {
| call other
| }
|
| define other routine
| {
| }
= {
= "main": {
= "potentially-called-by": [
= "*marked*"
= ],
= "potentially-calls": [
= "other"
= ]
= },
= "other": {
= "potentially-called-by": [
= "main"
= ],
= "potentially-calls": []
= }
= }
If a routine is not called by another routine, and it is not `main`
and it is not explicitly marked as preserved, this absence will be
noted, and a compiler or linker will be permitted to omit it from
the final executable.
| define main routine
| {
| }
|
| define other routine
| {
| }
= {
= "main": {
= "potentially-called-by": [
= "*marked*"
= ],
= "potentially-calls": []
= },
= "other": {
2019-10-21 20:23:14 +00:00
= "potentially-called-by": [],
= "potentially-calls": []
= }
= }
2019-10-21 20:35:28 +00:00
If two routines potentially call each other, this will be noted,
even if nothing else potentially calls either of those routines.
This may change in the future.
| define main routine
| {
| }
|
| define other1 routine
| {
| call other2
| }
|
| define other2 routine
| {
| call other1
| }
= {
= "main": {
= "potentially-called-by": [
= "*marked*"
= ],
= "potentially-calls": []
= },
= "other1": {
= "potentially-called-by": [
= "other2"
= ],
= "potentially-calls": [
= "other2"
= ]
= },
= "other2": {
= "potentially-called-by": [
= "other1"
= ],
= "potentially-calls": [
= "other1"
= ]
= }
= }