- Pascal-FC for UNIX - 
- Compiler Version P5.2

G L Davies  &  A Burns, University of Bradford

Compiler listing

    1     0 program gardens5;
    2     0 (* 
    3     0 ada-style solution to Ornamental Gardens 
    4     0 Second Version
    5     0 *)
    6     0 
    7     0 
    8     0 const
    9     0    gates = 2;
   10     0 
   11     0 process counter;
   12     0    entry inc;
   13     0    entry examine(var n: integer);
   14     0 var
   15     0    count: integer;
   16     0 begin
   17     0    count := 0;
   18     3    repeat
   19     3       select
   20     3          accept inc do
   21     4             count := count + 1;
   22    20       or
   23    21          accept examine(var n: integer) do
   24    21             n := count;
   25    35       or
   26    36          terminate
   27    36       end
   28    37    forever
   29    38 end;  (* counter *)
   30    39 
   31    39 
   32    39 process shutdown;
   33    39    entry notify(proc: integer);
   34    39 var
   35    39    active: integer;
   36    39    running: array[1..gates] of boolean;
   37    39    index: integer;
   38    39    finalvalue: integer;
   39    39 
   40    39 begin
   41    39    for index := 1 to gates do
   42    43       running[index] := true;
   43    49    active := gates;
   44    52    repeat
   45    52       accept notify(proc: integer) do
   46    52          if running[proc] then
   47    59             begin
   48    59             active := active - 1;
   49    64             running[proc] := false
   50    67             end
   51    69    until active = 0;
   52    75    counter.examine(finalvalue);
   53    79    writeln('Final value: ',finalvalue)
   54    83 end;   (* shutdown *)
   55    85 
   56    85 
   57    85 
   58    85 process type turntype(i: integer);
   59    85 var
   60    85    local: integer;
   61    85 begin
   62    85    for local := 1 to 20 do
   63    89       counter.inc;
   64    93    shutdown.notify(i)
   65    96 end;  (* turntype *)
   66    98 
   67    98 var
   68    98    turnstile: array[1..gates] of turntype;
   69    98    ploop: integer;
   70    98 
   71    98 begin
   72    98    cobegin
   73    99       counter;
   74   103       for ploop := 1 to gates do
   75   107          turnstile[ploop](ploop);
   76   115       shutdown
   77   115    coend
   78   119 end.



Symbol table

    name       link      object       type         ref      nrm  lev  adr  aux

 45 _main        44     procedure   notyp           2      TRUE    0   98    0
 46 any           0     variable    synch           0      TRUE    1    5    0
 47 gates        46     constant    integer         0     FALSE    1    2    0
 48 counter      47     variable    process         3      TRUE    1    5    0
 49 $            48     type id     process         3      TRUE    1    0    0
 50 inc           0     variable    entry           4      TRUE    2    5    0
 51 examine      50     variable    entry           5      TRUE    2    8    0
 52 n             0     variable    integer         0     FALSE    2   11    0
 53 count        51     variable    integer         0      TRUE    2   12    0
 54 shutdown     49     variable    process         6      TRUE    1    6    0
 55 $            54     type id     process         6      TRUE    1   39    0
 56 notify        0     variable    entry           7      TRUE    2    5    0
 57 proc          0     variable    integer         0      TRUE    2    8    0
 58 active       56     variable    integer         0      TRUE    2    9    0
 59 running      58     variable    array           1      TRUE    2   10    0
 60 index        59     variable    integer         0      TRUE    2   12    0
 61 finalvalue   60     variable    integer         0      TRUE    2   13    0
 62 turntype     55     type id     process         8      TRUE    1   85    0
 63 i             0     variable    integer         0      TRUE    2    5    0
 64 local        63     variable    integer         0      TRUE    2    6    0
 65 turnstile    62     variable    array           2      TRUE    1    7    0
 66 ploop        65     variable    integer         0      TRUE    1    9    0

Generated P-code

    0     ldadr        2        12          ;16
    1     ldcon.i      0         0          ;17
    2     store.i      0         0          ;17
    3     sel1         0         0          ;18
    4     ldadr        2         5          ;20
    5     ldcon.i      0         0          ;20
    6     sel1         3         3          ;20
    7     sel1         4         0          ;20
    8     sel1         5        11          ;20
    9     ldcon.i      0         0          ;20
   10     jmpuc        0        21          ;20
   11     ldadr        2         5          ;20
   12     acpt1        0         0          ;20
   13     ldadr        2        12          ;20
   14     ldval.i      2        12          ;21
   15     ldcon.i      0         1          ;21
   16     addop.i      0         0          ;21
   17     store.i      0         0          ;21
   18     ldadr        2         5          ;21
   19     acpt2        0         0          ;21
   20     jmpuc        0        37          ;21
   21     ldadr        2         8          ;23
   22     ldcon.i      0         0          ;23
   23     sel1         3         3          ;23
   24     sel1         4         1          ;23
   25     sel1         5        28          ;23
   26     ldcon.i      0         0          ;23
   27     jmpuc        0        36          ;23
   28     ldadr        2         8          ;23
   29     acpt1        0         1          ;23
   30     ldval.adr    2        11          ;23
   31     ldval.i      2        12          ;24
   32     store.i      0         0          ;24
   33     ldadr        2         8          ;24
   34     acpt2        0         1          ;24
   35     jmpuc        0        37          ;24
   36     sel0         0         1          ;25
   37     jmpuc        0         3          ;26
   38     rproc        1         0          ;28
   39     ldadr        2        12          ;40
   40     ldcon.i      0         1          ;41
   41     ldcon.i      0         2          ;41
   42     for1u.i      0        49          ;41
   43     ldadr        2        10          ;41
   44     ldval.i      2        12          ;42
   45     ixary.i      0         1          ;42
   46     ldcon.b      0         1          ;42
   47     store.b      0         0          ;42
   48     for2u.i      0        43          ;42
   49     ldadr        2         9          ;42
   50     ldcon.i      0         2          ;43
   51     store.i      0         0          ;43
   52     ldadr        2         5          ;45
   53     acpt1        0         1          ;45
   54     ldadr        2        10          ;46
   55     ldval.i      2         8          ;46
   56     ixary.i      0         1          ;46
   57     rpadr.b      0         0          ;46
   58     jmpiz        0        69          ;46
   59     ldadr        2         9          ;47
   60     ldval.i      2         9          ;48
   61     ldcon.i      0         1          ;48
   62     subop.i      0         0          ;48
   63     store.i      0         0          ;48
   64     ldadr        2        10          ;48
   65     ldval.i      2         8          ;49
   66     ixary.i      0         1          ;49
   67     ldcon.b      0         0          ;49
   68     store.b      0         0          ;49
   69     ldadr        2         5          ;49
   70     acpt2        0         1          ;49
   71     ldval.i      2         9          ;51
   72     ldcon.i      0         0          ;51
   73     releq.i      0         0          ;51
   74     jmpiz        0        52          ;51
   75     ldadr        1         5          ;51
   76     ldcon.adr    0         8          ;52
   77     ldadr        2        13          ;52
   78     ecall        0         1          ;52
   79     ldcon.i      0        13          ;53
   80     wrstr        0         0          ;53
   81     ldval.i      2        13          ;53
   82     wrval.i      0         0          ;53
   83     wrlin        0         0          ;53
   84     rproc        1         0          ;53
   85     ldadr        2         6          ;61
   86     ldcon.i      0         1          ;62
   87     ldcon.i      0        20          ;62
   88     for1u.i      0        93          ;62
   89     ldadr        1         5          ;62
   90     ldcon.adr    0         5          ;63
   91     ecall        0         0          ;63
   92     for2u.i      0        89          ;63
   93     ldadr        1         6          ;63
   94     ldcon.adr    0         5          ;64
   95     ldval.i      2         5          ;64
   96     ecall        0         1          ;64
   97     rproc        1         0          ;64
   98     cobeg        0         0          ;69
   99     mkstk        1        49          ;72
  100     ldadr        1         5          ;72
  101     procv        0         0          ;72
  102     calls        1         4          ;72
  103     ldadr        1         9          ;73
  104     ldcon.i      0         1          ;74
  105     ldcon.i      0         2          ;74
  106     for1u.i      0       115          ;74
  107     mkstk        1        62          ;74
  108     ldadr        1         7          ;74
  109     ldval.i      1         9          ;75
  110     ixary.i      0         2          ;75
  111     procv        0         0          ;75
  112     ldval.i      1         9          ;75
  113     calls        1         5          ;75
  114     for2u.i      0       107          ;75
  115     mkstk        1        55          ;75
  116     ldadr        1         6          ;75
  117     procv        0         0          ;75
  118     calls        1         4          ;75
  119     coend        0         0          ;76
  120     stopx        0         0          ;77
