[Oberon] Dynamically sized allocation with NEW()

Andreas Pirklbauer andreas_pirklbauer at yahoo.com
Mon Jan 14 22:34:03 CET 2019


  >> Am 02.08.2018 um 20:10 schrieb Tomas Kral <thomas.kral at email.cz>: 
  >> 
  >> FontDesc = RECORD 
  >>   raster: ARRAY 2000 OF BYTE 
  >> END; 
  >> LargeFontDesc = RECORD (FontDesc) 
  >>   extRaster: ARRAY 1000 OF BYTE 
  >> END; 
  >> VAR F: = ; LF: LargeFont; 
  >> IF len<2000 THEN NEW (F) ELSE NEW(LF); F := LF END; 
  >> 
  >> Rather clever, the below two pointers are needed, correct? 
  >> 
  >> Font = POINTER TO FontDesc; 
  >> LargeFont = POINTER TO LargeFontDesc; 
  >>

Just as an FYI: In EO this is (now) done as follows:

  TYPE Raster = POINTER TO RasterArray;
    RasterArray = ARRAY OF BYTE;
    Font* = POINTER TO FontDesc;
    FontDesc* = RECORD
      ...
      raster: Raster             (*dynamic open array*)
    END ;

  PROCEDURE This*(name: ARRAY OF CHAR): Font;
    VAR F: Font;
      ...
  BEGIN
    ...
    NEW(F); NEW(F.raster, NofBytes);
    ...
  END This;

i.e. using dynamically allocated open *arrays* for the font raster
and therefore without the need for LargeFont and LargeFontDesc.




More information about the Oberon mailing list