<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-1"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Courier New";
        mso-fareast-language:EN-US;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Courier New";}
span.EmailStyle20
        {mso-style-type:personal-compose;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE-CH link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>In my point of view Appendix A for Oberon-07 would look like this.<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>Joerg<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>Appendix A: Definition of terms<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Integer types</span></font></b><span lang=EN-US>  <font color=red><span style='color:red'>BYTE</span></font>, INTEGER<font color="#70ad47"><span style='color:#70AD47'>, LONGINT (not official but compiler allows as if LONGINT = INTEGER) </span></font><o:p></o:p></span></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Real types </span></font></b><span lang=EN-US>    REAL<s><font color=red><span style='color:red'>, LONGREAL</span></font></s><o:p></o:p></span></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Numeric types</span></font></b><span lang=EN-US>  integer types, real types<o:p></o:p></span></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Same types<o:p></o:p></span></font></b></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>Two variables a and b with types Ta and Tb are of the same type if<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>1.  Ta and Tb are both denoted by the same type identifier, or<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>2.  Ta is declared to equal Tb in a type declaration of the form Ta = Tb, or<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>3.  a and b appear in the same identifier list in a variable, record field, or formal parameter declaration and are not open arrays.<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Equal types<o:p></o:p></span></font></b></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>Two types Ta and Tb are equal if<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>1.  Ta and Tb are the same type,  or<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>2.  Ta and Tb are open array types with equal element types, or<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>3.  Ta and Tb are procedure types whose formal parameter lists match.<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoNormal><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";font-weight:bold'>Type inclusion<o:p></o:p></span></font></b></p><p class=MsoNormal><font size=2 color=red face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";color:red'>Integer </span></font><font face="Courier New"><span lang=EN-US style='font-family:"Courier New"'>types include (the values of) smaller numeric types according to the following hierarchy:<o:p></o:p></span></font></p><p class=MsoNormal><s><font size=2 color=red face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-family:"Courier New";color:red'>LONGREAL >= REAL >=</span></font></s><font color=red face="Courier New"><span lang=EN-US style='font-family:"Courier New";color:red'> </span></font><font color="#70ad47" face="Courier New"><span lang=EN-US style='font-family:"Courier New";color:#70AD47'>LONGINT = </span></font><font face="Courier New"><span lang=EN-US style='font-family:"Courier New"'>INTEGER >= <font color=red><span style='color:red'>BYTE</span></font><o:p></o:p></span></font></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'><o:p> </o:p></span></font></b></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Type extension </span></font></b><span lang=EN-US>(base type)<o:p></o:p></span></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>Given a type declaration Tb = RECORD (Ta) ... END, Tb is a direct extension of Ta, and Ta is a direct base type of Tb. A type Tb is an extension of a type Ta (Ta is a base type of Tb) if<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>1.  Ta and Tb are the same types, or<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>2.  Tb is a direct extension of an extension of Ta<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>If Pa = POINTER TO Ta and Pb = POINTER TO Tb, Pb is an extension of Pa (Pa is a base type of Pb) if Tb is an extension of Ta.<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Assignment compatible<o:p></o:p></span></font></b></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>An expression e of type Te is assignment compatible with a variable v of type Tv if one of the following conditions hold:<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>1.  Te and Tv are the same type;<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>2.  Te and Tv are <font color=red><span style='color:red'>integer</span></font> types <s><font color=red><span style='color:red'>and Tv includes Te</span></font></s>;<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>3.  Te and Tv are record types and Te is an extension of Tv and the dynamic type of v is Tv ;<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>4.  Te and Tv are pointer types and Te is an extension of Tv;<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>5.  Tv is a pointer or a procedure type and e is NIL;<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>6.  Tv is ARRAY n OF CHAR, e is a string constant with m characters, and m < n;<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>7.  Tv is a procedure type and e is the name of a procedure whose formal parameters match those of Tv.<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Array compatible<o:p></o:p></span></font></b></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>An actual parameter a of type Ta is array compatible with a formal parameter f of type Tf if<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>1.  Tf and Ta are the same type, or<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>2.  Tf is an open array, Ta is any array, and their element types are array compatible, or<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>3.  Tf is ARRAY OF CHAR and a is a string.<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 color=red face="Courier New"><span lang=EN-US style='font-size:11.0pt;color:red'>4.  Tf is ARRAY n OF BYTE and Ta has length n.<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Expression compatible<o:p></o:p></span></font></b></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>For a given operator, the types of its operands are expression compatible if they conform to the following table (which shows  also  the  result  type  of  the  expression).  Character  arrays  that  are  to  be  compared  must  contain  0X  as a terminator. Type T1 must be an extension of type T0:<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>operator      1st op                     2nd op                     result type<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>+ – *         numeric type               numeric type               <font color=red><span style='color:red'>numeric type</span></font><o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>/             <font color=red><span style='color:red'>real type</span></font>                  <font color=red><span style='color:red'>real type</span></font>                  <font color=red><span style='color:red'>real type</span></font><o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>+ – * /       SET                        SET                        SET<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span style='font-size:11.0pt'>DIV MOD       integer type               integer type               <font color=red><span style='color:red'>integer type</span></font><o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>OR & ~        BOOLEAN                    BOOLEAN                    BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>= # < <= > >= numeric                    numeric                    BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>              CHAR                       CHAR                       BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>              character array, string    character array, string    BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>= #           BOOLEAN                    BOOLEAN                    BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>              SET                        SET                        BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>              NIL, pointer type T0 or T1 NIL, pointer type T0 or T1 BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>              procedure type T, NIL      procedure type T, NIL      BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>IN            integer type               SET                        BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>IS            type T0                    type T1                    BOOLEAN<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p><p class=MsoPlainText><b><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt;font-weight:bold'>Matching formal parameter lists<o:p></o:p></span></font></b></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>Two formal parameter lists match if<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>1.  they have the same number of parameters, and<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>2.  they have either the same function result type or none, and<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>3.  parameters at corresponding positions have equal types, and<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'>4.  parameters at corresponding positions are both either value or variable parameters.<o:p></o:p></span></font></p><p class=MsoPlainText><font size=2 face="Courier New"><span lang=EN-US style='font-size:11.0pt'><o:p> </o:p></span></font></p></div></body></html>