-- Demonstrates parameter mode errors -- Modes represent a contract procedure mode_error is -- In mode parameters are constants -- Out mode parameters are uninitialized on entering the procedure: -- Out mode parameters must be given a value procedure foo1(i: in Integer; o, p: out Integer) is j: Integer := o + 1; -- compiles, but erroneous begin -- i := 3; -- error null; end foo1; -- Out mode parameters must have variables as actual parameters -- See the calls in foo5 procedure foo4(o: out Integer) is begin o := 3; end foo4; procedure foo5(i: in Integer) is c: constant Integer := 5; v: Integer; begin foo4(v); -- okay -- foo4(2); -- compilation error -- foo4(c); -- compilation error -- foo4(i); -- compilation error end foo5; begin null; end mode_error;