 @c+
 module test12_7 -- Semantic Checking for arrays.
 -- test of arrays (2 dimension ) and typedef
 private
  typedef integer index;
  index i;
  const max = 3;
  const lmax = 6;
  typedef integer range [1..max] bounds;
  typedef integer array [bounds][bounds] matrix;
  typedef integer array [bounds] vector;
  typedef Boolean array [bounds] bvector;

  typedef integer range [1..lmax] big_bounds;
  typedef integer array [big_bounds] lvector;
  
  typedef integer range[0..1] ib;
  typedef Boolean range[false..true] bb;
  
  integer array [ib] ibvec;
  integer array [bb] bbvec;
 
  matrix a;
  vector v;
  bvector b;
  lvector long;
 
  begin
  i := 1;
  do i <= max -> read a[i][1]; i := i+1; od; 
  a[2] := a[1]; -- ok
  a[3] := a[2]; -- ok
  v := a[1]; -- ok
  b := v; -- illegal
  v := a; -- illegal
  a := v; -- illegal
  ibvec := bbvec; -- illegal;
  long := v; -- illegal
  long[1] := v[2]; -- ok
  i := v; -- illegal
  v := i; -- illegal
  v := a[1] + a[2]; -- illegal
  v := a[1] * a[2]; -- illegal
  v := - a[1]; -- illegal
  if i -> skip; fi; -- illegal
  if b[1] -> skip; fi; -- ok
  if b -> skip; fi; -- illegal
  i :=  ibvec[true]; -- illegal
  i := bbvec[0]; -- illegal
  -- output
  -- none
  end. -- 14 errors. 
