fixed bugs

fak4bug

function fakultaet(x);
begin
  if (x=0) then begin
    fakultaet:=1
  end else begin
    fakultaet:=(x*fakultaet((x-1)))
  end
end

plic it, ploc it, ramsim it.
x      fakultaet
0      1
1      1
2      2
3      6
4      0 !
5      0 !
10     0 !
20     0 !
50     0 !
80     probably never terminates because lasting
       overproportionally long.

forbug

erik@vulcain:~/fakult/source > cat forbug.pli 
function func();
begin
  for x:=1 to 5 do begin
    a:=4444
  end;
  func:=55555
end

erik@vulcain:~/fakult/source > plic forbug.pli forbug.plo 
first pass started
second pass started
third pass started
creating program...
.. [ok]
creating program...
.. [ok]
creating program...
.. [ok]
Compilation finished at Tue Nov 16 08:40:41 1999
erik@vulcain:~/fakult/source > ploc forbug.plo forbug.ram
At line 48: parse error
                  t325 := ;
                         *^*
Compilation exited abnormally at Tue Nov 16 08:40:46 1999
erik@vulcain:~/fakult/source > 

prodbug

erik@vulcain:~/fakult > cat bb.pli
function prod (start, ende);
begin
  while (start <= ende) do begin
    start := (start + 1)
  end;
  prod := 8
end

erik@vulcain:~/fakult > plic bb.pli bb.plo
first pass started
second pass started
third pass started
creating program...
.. [ok]
creating program...
.. [ok]
creating program...
.. [ok]
Compilation finished at Sat Nov  6 09:44:27 1999
Speicherzugriffsfehler (core dumped)
^^^^^^ MUST BE FIXED
erik@vulcain:~/fakult > ploc bb.plo bb.ram
File wird generiert
Compilation finished at Sat Nov  6 09:44:31 1999
erik@vulcain:~/fakult > 
ramsim. run. endless loop.

memleakbug

erik@vulcain:~/fakult > cat add.plo
function add(x,y);
begin
  add:=(x+y)
end
erik@vulcain:~/fakult > ploc add.plo d.ram
File wird generiert
Compilation finished at Fri Oct 29 16:48:42 1999
erik@vulcain:~/fakult > ploc add.plo dsdfjksdhf.ram
File wird generiert
Speicherzugriffsfehler (core dumped)
erik@vulcain:~/fakult >

(es hat nichts damit zu tun dass d.ram schon existiert oder so.)
dieser bug scheint nur bei erik aufzutreten.
der memleakbug ist schwer zu reproduzieren wenn das system nicht
genau so oder aehnlich wie bei erik ist. (zufall)
sobald groessere programme compilierbar sind, wird dieser bug
sicher noch staerker auftreten und leichter zu fixen sein.

pistar-bug

erik@vulcain:~/fakult > cat pistar.pli
function factorize(x);
begin
  for i:=1 to x do begin
    if (((x/i)*i)=x) then factor:=i
  end;
  factorize:=afactor
end
erik@vulcain:~/fakult > plic pistar.pli pistar.plo
Speicherzugriffsfehler (core dumped)
erik@vulcain:~/fakult >

SIGILL bug

on erikyyy computer:
erik@vulcain:~/fakult/BUGS/adder > cat adder.pli
function adder(x);
begin
  for x:=0 to 10000 do begin

    a:=3
end;
adder:=34
end
erik@vulcain:~/fakult/BUGS/adder > plic adder.pli adder.plo
first pass started
second pass started
third pass started
creating program...
.. [ok]
creating program...
.. [ok]
creating program...
.. [ok]
Compilation finished at Tue Nov  2 15:13:31 1999
Speicherzugriffsfehler (core dumped)
erik@vulcain:~/fakult/BUGS/adder > 
on tagetes compilation would have worked WITHOUT segmentation fault.
BUT
the resulting program is not a correct .plo program in both cases !
just try to ploc it !

Notice, the original problem is fixed.
but now this happens while ploc:
> At line 64: Array used as variable before!
>                   t330 := One[CurrentInc];
>                                        *^*
> Compilation exited abnormally at Wed Nov  3 20:06:07 1999
so the bug is not closed yet.

divbug

erik@vulcain:~/fakult > cat diver.pli 
function aha(a, b);
begin
  aha := (a / b)
end
erik@vulcain:~/fakult > plic ...
erik@vulcain:~/fakult > ploc ...
erik@vulcain:~/fakult > ramsim
setze R0 auf 50
setze R1 auf 2
Run
R0 = 24 anstelle von den richtigen 25.

notice the original problem MIGHT be fixed, but now this happens:
> [GEN0005] Index out of range <../common/ctlist.h,73>
> Compilation exited abnormally at Wed Nov  3 20:00:24 1999
so the bug stays open.
FIX:
compiles and works :-)

lollipop

create lollipop.pli:
--- snip
function a();
begin
  while (b#0) do
  begin
    c:=23
  end;
  a:=2
end
--- snap
plic...
ploc...
ramsim
run
R0 will we 3 and not 2.
FIX:
R0 is now 2 as it should be.

achimfakultaet

Create file achimfakultaet.pli:
--- snip
function fakultaet(a);
begin
fakultaet:=(a*fakultaet((a-1)))
end
--- snap
i forgot what the problem was.
please achim tell me, so that i can write it here.
FIX:
now the program behaves the way it should, i.e. it never terminates ;)

bla1-bug

Create file bla1.pli:
--- snip
function one(a,b,c);
begin
  a:=10;
  b:=2;
  one := (a-b)
end
--- snap
plic it, ploc it, ramsim it
R0 will be 0 instead of 8 !!!
FIX:
R0 is now 8

line numbers in ploc compiler

it is very difficult to manipulate a ram program
because you cannot find line numbers between 1,2,3,4
if line numbers of 10,20,30,40 would be used in ploc,
one could easily add lines 15,25 etc.
i think this is very important and easy to program.
FIX:
this is not allowed in the language definition. since the package is not of practical use,...

erik-bug

Create file erik.pli:
--- snip
function a();
begin
a:=5
end
--- snap
plic, ploc, ramsim
R0 will be 0 instead of 5.
might be same problem than bla1-bug
FIX:
R0 is now 5

theosim buffer list corruption

start theosim
open a correct pli file
plic it
ploc it
change the buffer of the pli file to produce a syntax error
plic it (will get syntax error, and plo buffer will be gone)
change the buffer of the pli file back to original
plic it
-- now the buffer list in the menubar will be corrupted.
   the .ram file will be in the middle and will be the same
   than the .plo file.
   perhaps the plo buffer wasn't correctly closed ...
FIX:
phenomenon doesn't happen anymore. code fixed.

funbug

Shamelessly converted into the lollipop bug.

parametercountmismatch

Take the following source.pli

function multi(y,z);
begin
  i := 0;
  while ( i < 20 ) do
  begin
    i := (i+1);
    if (test(i,y,z)=1) then multi := i
  end
end

function test(x,y,z);
  if ((x*y)=z) then test := 1 else test := 0

then do

plic source.pli source.plo

and get

Number of parameters in call to function test does not match declaration!!!

which is of course nonsense.

whilerbug

source.pli:

function multi(y,z,w);
begin
  i := 0;
  while ( i < 20 ) do
  begin
    i := (i+1);
    if (test(i,y,z)=1) then multi := i
  end
end

function test(x,y,z);
  if ((x*y)=z) then test := 1 else test := 0

this program works correctly. set R0 <- 3, R1 <- 12
then run the program and you get R0 = 4

now write the following source2.pli
which should do exactly the same thing than source.pli:

function multi(y,z,w);
begin
  for i := 1 to 20 do
    if (test(i,y,z)=1) then multi := i
end

function test(x,y,z);
  if ((x*y)=z) then test := 1 else test := 0

set R0 <- 3, R1 <- 12 (as above!)
and get R0 = 0 which is of course not correct.



Back to the theosim main page