Browse Source

+ added proper support of type = type <type>; for simple types

florian 22 years ago
parent
commit
07110d20f9
8 changed files with 221 additions and 155 deletions
  1. 7 1
      compiler/defcmp.pas
  2. 3 0
      compiler/msg/errore.msg
  3. 3 2
      compiler/msgidx.inc
  4. 145 146
      compiler/msgtxt.inc
  5. 10 1
      compiler/pdecl.pas
  6. 5 2
      compiler/ptype.pas
  7. 7 2
      compiler/symconst.pas
  8. 41 1
      compiler/symdef.pas

+ 7 - 1
compiler/defcmp.pas

@@ -1055,6 +1055,9 @@ implementation
          while (assigned(def1)) and (assigned(def2)) do
            begin
              eq:=te_incompatible;
+             if (df_unique in def1.paratype.def.defoptions) or (df_unique in def2.paratype.def.defoptions) then
+               exit;
+
              case acp of
                cp_value_equal_const :
                  begin
@@ -1178,7 +1181,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.14  2003-01-03 17:16:04  peter
+  Revision 1.15  2003-01-05 15:54:15  florian
+    + added proper support of type = type <type>; for simple types
+
+  Revision 1.14  2003/01/03 17:16:04  peter
     * fixed assignment operator checking for typecast
 
   Revision 1.13  2002/12/29 18:15:19  peter

+ 3 - 0
compiler/msg/errore.msg

@@ -1243,6 +1243,9 @@ sym_w_non_implemented_symbol=05055_W_Symbol "$1" is not implemented
 % This means that a symbol (a variable, routine, etc...) which is
 % declared as \var{unimplemented} is used. This symbol is defined,
 % but is not yet implemented on this specific platform.
+sym_e_cant_create_unique_type=05056_E_Can't create unique type from this type
+% Only simple types like ordinal, float and string types are supported when
+% redefining a type with \var{type newtype = type oldtype;}.
 % \end{description}
 #
 # Codegenerator

+ 3 - 2
compiler/msgidx.inc

@@ -342,6 +342,7 @@ const
   sym_w_deprecated_symbol=05043;
   sym_w_non_portable_symbol=05044;
   sym_w_non_implemented_symbol=05055;
+  sym_e_cant_create_unique_type=05056;
   cg_e_break_not_allowed=06000;
   cg_e_continue_not_allowed=06001;
   cg_e_too_complex_expr=06002;
@@ -606,9 +607,9 @@ const
   option_info=11024;
   option_help_pages=11025;
 
-  MsgTxtSize = 34204;
+  MsgTxtSize = 34252;
 
   MsgIdxMax : array[1..20] of longint=(
-    17,62,194,50,56,44,98,19,35,43,
+    17,62,194,50,57,44,98,19,35,43,
     40,1,1,1,1,1,1,1,1,1
   );

+ 145 - 146
compiler/msgtxt.inc

@@ -379,279 +379,278 @@ const msgtxt : array[0..000142,1..240] of char=(
   '05043_W_Symbol "$1" is deprecated'#000+
   '05044_W_Symbol "$1" is not portable'#000+
   '05055_W_Symbol "$1" is not implemente','d'#000+
+  '05056_E_Can'#039't create unique type from this type'#000+
   '06000_E_BREAK not allowed'#000+
   '06001_E_CONTINUE not allowed'#000+
   '06002_E_Expression too complicated - FPU stack overflow'#000+
   '06003_E_Illegal expression'#000+
   '06004_E_Invalid integer expression'#000+
-  '06005_E_Illegal qualifier'#000+
-  '06006_E_High range limit < low range li','mit'#000+
+  '06005_E_Illegal q','ualifier'#000+
+  '06006_E_High range limit < low range limit'#000+
   '06007_E_Illegal counter variable'#000+
   '06008_E_Can'#039't determine which overloaded function to call'#000+
   '06009_E_Parameter list size exceeds 65535 bytes'#000+
   '06010_E_Illegal type conversion'#000+
-  '06011_H_Conversion between ordinals and pointers are not portable',#000+
+  '06011_H_Conversio','n between ordinals and pointers are not portable'#000+
   '06012_E_File types must be var parameters'#000+
   '06013_E_The use of a far pointer isn'#039't allowed there'#000+
   '06014_E_illegal call by reference parameters'#000+
   '06015_E_EXPORT declared functions can'#039't be called'#000+
-  '06016_W_Possible illegal call of constructor or d','estructor'#000+
+  '0','6016_W_Possible illegal call of constructor or destructor'#000+
   '06017_N_Inefficient code'#000+
   '06018_W_unreachable code'#000+
   '06020_E_Abstract methods can'#039't be called directly'#000+
   '06027_D_Register $1 weight $2 $3'#000+
   '06029_D_Stack frame is omitted'#000+
-  '06031_E_Object or class methods can'#039't be inline.'#000+
-  '06032_E_Procvar c','alls cannot be inline.'#000+
+  '06031_E_Object or ','class methods can'#039't be inline.'#000+
+  '06032_E_Procvar calls cannot be inline.'#000+
   '06033_E_No code for inline procedure stored'#000+
   '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+
   'sed, use (set)length instead'#000+
-  '06037_E_Constructors or destructors can not be called inside a '#039'wi'+
-  'th'#039' clause'#000+
-  '0','6038_E_Cannot call message handler methods directly'#000+
+  '06037_E_Constructors or destru','ctors can not be called inside a '#039'w'+
+  'ith'#039' clause'#000+
+  '06038_E_Cannot call message handler methods directly'#000+
   '06039_E_Jump in or outside of an exception block'#000+
   '06040_E_Control flow statements aren'#039't allowed in a finally block'#000+
-  '06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+
-  '06042_W_Local var','iable size exceed limit for certain cpu'#039's'#000+
+  '06041_W_Parameters size e','xceeds limit for certain cpu'#039's'#000+
+  '06042_W_Local variable size exceed limit for certain cpu'#039's'#000+
   '06043_E_Local variables size exceeds supported limit'#000+
   '07000_D_Starting $1 styled assembler parsing'#000+
   '07001_D_Finished $1 styled assembler parsing'#000+
-  '07002_E_Non-label pattern contains @'#000+
-  '07004_E_Error buil','ding record offset'#000+
+  '07002_E','_Non-label pattern contains @'#000+
+  '07004_E_Error building record offset'#000+
   '07005_E_OFFSET used without identifier'#000+
   '07006_E_TYPE used without identifier'#000+
   '07007_E_Cannot use local variable or parameters here'#000+
   '07008_E_need to use OFFSET here'#000+
-  '07009_E_need to use $ here'#000+
-  '07010_E_Cannot use multiple reloc','atable symbols'#000+
+  '07009_E_need',' to use $ here'#000+
+  '07010_E_Cannot use multiple relocatable symbols'#000+
   '07011_E_Relocatable symbol can only be added'#000+
   '07012_E_Invalid constant expression'#000+
   '07013_E_Relocatable symbol is not allowed'#000+
   '07014_E_Invalid reference syntax'#000+
-  '07015_E_You can not reach $1 from that code'#000+
-  '07016_E_Local symbols/lab','els aren'#039't allowed as references'#000+
+  '07015_E_You can not r','each $1 from that code'#000+
+  '07016_E_Local symbols/labels aren'#039't allowed as references'#000+
   '07017_E_Invalid base and index register usage'#000+
   '07018_W_Possible error in object field handling'#000+
   '07019_E_Wrong scale factor specified'#000+
-  '07020_E_Multiple index register usage'#000+
+  '07020_E_Multiple index regis','ter usage'#000+
   '07021_E_Invalid operand type'#000+
-  '07022_E_I','nvalid string as opcode operand: $1'#000+
+  '07022_E_Invalid string as opcode operand: $1'#000+
   '07023_W_@CODE and @DATA not supported'#000+
   '07024_E_Null label references are not allowed'#000+
   '07025_E_Divide by zero in asm evaluator'#000+
   '07026_E_Illegal expression'#000+
-  '07027_E_escape sequence ignored: $1'#000+
-  '07028_E_Invalid s','ymbol reference'#000+
+  '07027','_E_escape sequence ignored: $1'#000+
+  '07028_E_Invalid symbol reference'#000+
   '07029_W_Fwait can cause emulation problems with emu387'#000+
   '07030_W_$1 without operand translated into $1P'#000+
   '07031_W_ENTER instruction is not supported by Linux kernel'#000+
-  '07032_W_Calling an overload function in assembler'#000+
-  '07033_E_Unsup','ported symbol type for operand'#000+
+  '07032_W_Calling',' an overload function in assembler'#000+
+  '07033_E_Unsupported symbol type for operand'#000+
   '07034_E_Constant value out of bounds'#000+
   '07035_E_Error converting decimal $1'#000+
   '07036_E_Error converting octal $1'#000+
   '07037_E_Error converting binary $1'#000+
-  '07038_E_Error converting hexadecimal $1'#000+
-  '07039_H_$1 translated to $2',#000+
+  '07038_E_Error conve','rting hexadecimal $1'#000+
+  '07039_H_$1 translated to $2'#000+
   '07040_W_$1 is associated to an overloaded function'#000+
   '07041_E_Cannot use SELF outside a method'#000+
   '07042_E_Cannot use OLDEBP outside a nested procedure'#000+
-  '07043_W_Procedures can'#039't return any value in asm code'#000+
+  '07043_W_Procedures can'#039't return any value in a','sm code'#000+
   '07044_E_SEG not supported'#000+
-  '07045_E_Size s','uffix and destination or source size do not match'#000+
+  '07045_E_Size suffix and destination or source size do not match'#000+
   '07046_W_Size suffix and destination or source size do not match'#000+
   '07047_E_Assembler syntax error'#000+
-  '07048_E_Invalid combination of opcode and operands'#000+
+  '07048_E_Invalid combination of opcode and opera','nds'#000+
   '07049_E_Assembler syntax error in operand'#000+
-  '07','050_E_Assembler syntax error in constant'#000+
+  '07050_E_Assembler syntax error in constant'#000+
   '07051_E_Invalid String expression'#000+
   '07052_W_constant with symbol $1 for address which is not on a pointer'#000+
   '07053_E_Unrecognized opcode $1'#000+
-  '07054_E_Invalid or missing opcode'#000+
-  '07055_E_Invalid combination of',' prefix and opcode: $1'#000+
+  '07054_E_Invalid ','or missing opcode'#000+
+  '07055_E_Invalid combination of prefix and opcode: $1'#000+
   '07056_E_Invalid combination of override and opcode: $1'#000+
   '07057_E_Too many operands on line'#000+
   '07058_W_NEAR ignored'#000+
   '07059_W_FAR ignored'#000+
   '07060_E_Duplicate local symbol $1'#000+
-  '07061_E_Undefined local symbol $1'#000+
-  '07062_E_Unknown lab','el identifier $1'#000+
+  '07061','_E_Undefined local symbol $1'#000+
+  '07062_E_Unknown label identifier $1'#000+
   '07063_E_Invalid register name'#000+
   '07064_E_Invalid floating point register name'#000+
   '07066_W_Modulo not supported'#000+
   '07067_E_Invalid floating point constant $1'#000+
-  '07068_E_Invalid floating point expression'#000+
+  '07068_E_Invalid floating poi','nt expression'#000+
   '07069_E_Wrong symbol type'#000+
-  '07070_E_','Cannot index a local var or parameter with a register'#000+
+  '07070_E_Cannot index a local var or parameter with a register'#000+
   '07071_E_Invalid segment override expression'#000+
   '07072_W_Identifier $1 supposed external'#000+
   '07073_E_Strings not allowed as constants'#000+
-  '07074_No type of variable specified'#000+
-  '07075_E_assembler code no','t returned to text section'#000+
+  '07074_No type',' of variable specified'#000+
+  '07075_E_assembler code not returned to text section'#000+
   '07076_E_Not a directive or local symbol $1'#000+
   '07077_E_Using a defined name as a local label'#000+
   '07078_E_Dollar token is used without an identifier'#000+
-  '07079_W_32bit constant created for address'#000+
-  '07080_N_.align is target speci','fic, use .balign or .p2align'#000+
+  '07079_W_32bit constant cr','eated for address'#000+
+  '07080_N_.align is target specific, use .balign or .p2align'#000+
   '07081_E_Can'#039't access fields directly for parameters'#000+
   '07082_E_Can'#039't access fields of objects/classes directly'#000+
-  '07083_E_No size specified and unable to determine the size of the oper'+
-  'ands'#000+
-  '07084_E_Cannot use RESULT in',' this function'#000+
+  '07083_E_No size specified and unable to determine the s','ize of the op'+
+  'erands'#000+
+  '07084_E_Cannot use RESULT in this function'#000+
   '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
   '07087_W_"$1 %st(n)" translated into "$1 %st,%st(n)"'#000+
   '07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
-  '07089_E_Char < not allowed here'#000+
-  '07090_E_Char > not allowed h','ere'#000+
+  '07089_E_Char',' < not allowed here'#000+
+  '07090_E_Char > not allowed here'#000+
   '07093_W_ALIGN not supported'#000+
   '07094_E_Inc and Dec cannot be together'#000+
   '07095_E_Invalid reglist for movem'#000+
   '07096_E_Reglist invalid for opcode'#000+
   '07097_E_Higher cpu mode required ($1)'#000+
-  '08000_F_Too many assembler files'#000+
-  '08001_F_Selected assembler ou','tput not supported'#000+
+  '08000_F_Too ma','ny assembler files'#000+
+  '08001_F_Selected assembler output not supported'#000+
   '08002_F_Comp not supported'#000+
   '08003_F_Direct not support for binary writers'#000+
   '08004_E_Allocating of data is only allowed in bss section'#000+
   '08005_F_No binary writer selected'#000+
-  '08006_E_Asm: Opcode $1 not in table'#000+
-  '08007_E_Asm: $1 inva','lid combination of opcode and operands'#000+
+  '08006_E_','Asm: Opcode $1 not in table'#000+
+  '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
   '08008_E_Asm: 16 Bit references not supported'#000+
   '08009_E_Asm: Invalid effective address'#000+
   '08010_E_Asm: Immediate or reference expected'#000+
-  '08011_E_Asm: $1 value exceeds bounds $2'#000+
-  '08012_E_Asm: Short jump is out o','f range $1'#000+
+  '08011_E_Asm: $1 value ex','ceeds bounds $2'#000+
+  '08012_E_Asm: Short jump is out of range $1'#000+
   '08013_E_Asm: Undefined label $1'#000+
   '08014_E_Asm: Comp type not supported for this target'#000+
   '08015_E_Asm: Extended type not supported for this target'#000+
   '08016_E_Asm: Duplicate label $1'#000+
-  '08017_E_Asm: Redefined label $1'#000+
-  '08018_E_Asm: First defi','ned here'#000+
+  '08017_E','_Asm: Redefined label $1'#000+
+  '08018_E_Asm: First defined here'#000+
   '09000_W_Source operating system redefined'#000+
   '09001_I_Assembling (pipe) $1'#000+
   '09002_E_Can'#039't create assember file: $1'#000+
   '09003_E_Can'#039't create object file: $1'#000+
-  '09004_E_Can'#039't create archive file: $1'#000+
-  '09005_E_Assembler $1 not found, switching to e','xternal assembling'#000+
+  '09004_E_Can'#039't create archive file: $','1'#000+
+  '09005_E_Assembler $1 not found, switching to external assembling'#000+
   '09006_T_Using assembler: $1'#000+
   '09007_E_Error while assembling exitcode $1'#000+
   '09008_E_Can'#039't call the assembler, error $1 switching to external a'+
   'ssembling'#000+
   '09009_I_Assembling $1'#000+
-  '09010_I_Assembling with smartlinking $1'#000+
-  '09011_W_Obje','ct $1 not found, Linking may fail !'#000+
+  '0901','0_I_Assembling with smartlinking $1'#000+
+  '09011_W_Object $1 not found, Linking may fail !'#000+
   '09012_W_Library $1 not found, Linking may fail !'#000+
   '09013_E_Error while linking'#000+
   '09014_E_Can'#039't call the linker, switching to external linking'#000+
-  '09015_I_Linking $1'#000+
-  '09016_E_Util $1 not found, switching to externa','l linking'#000+
+  '09015_I_Linking $1',#000+
+  '09016_E_Util $1 not found, switching to external linking'#000+
   '09017_T_Using util $1'#000+
   '09018_E_Creation of Executables not supported'#000+
   '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
   '09020_I_Closing script $1'#000+
-  '09021_E_resource compiler not found, switching to external mode'#000+
-  '09022_I_Compi','ling resource $1'#000+
+  '09021_E_resource compiler not',' found, switching to external mode'#000+
+  '09022_I_Compiling resource $1'#000+
   '09023_T_unit $1 can'#039't be statically linked, switching to smart lin'+
   'king'#000+
   '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+
   #000+
-  '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+
-  'g'#000+
-  '09026_E_unit $1 c','an'#039't be smart or static linked'#000+
+  '09025_T_unit $1 can'#039't be shared linke','d, switching to static link'+
+  'ing'#000+
+  '09026_E_unit $1 can'#039't be smart or static linked'#000+
   '09027_E_unit $1 can'#039't be shared or static linked'#000+
   '09028_F_Can'#039't post process executable $1'#000+
   '09029_F_Can'#039't open executable $1'#000+
   '09030_X_Size of Code: $1 bytes'#000+
-  '09031_X_Size of initialized data: $1 bytes'#000+
-  '09032_X_Size',' of uninitialized data: $1 bytes'#000+
+  '09031_X','_Size of initialized data: $1 bytes'#000+
+  '09032_X_Size of uninitialized data: $1 bytes'#000+
   '09033_X_Stack space reserved: $1 bytes'#000+
   '09034_X_Stack space commited: $1 bytes'#000+
   '10000_T_Unitsearch: $1'#000+
   '10001_T_PPU Loading $1'#000+
   '10002_U_PPU Name: $1'#000+
-  '10003_U_PPU Flags: $1'#000+
+  '10003_U_PPU Fl','ags: $1'#000+
   '10004_U_PPU Crc: $1'#000+
-  '10005_U_PPU Time: $1',#000+
+  '10005_U_PPU Time: $1'#000+
   '10006_U_PPU File too short'#000+
   '10007_U_PPU Invalid Header (no PPU at the begin)'#000+
   '10008_U_PPU Invalid Version $1'#000+
   '10009_U_PPU is compiled for another processor'#000+
-  '10010_U_PPU is compiled for an other target'#000+
+  '10010_U_PPU is compiled for an other t','arget'#000+
   '10011_U_PPU Source: $1'#000+
-  '10012_U_Writing $1'#000,
+  '10012_U_Writing $1'#000+
   '10013_F_Can'#039't Write PPU-File'#000+
   '10014_F_Error reading PPU-File'#000+
   '10015_F_unexpected end of PPU-File'#000+
   '10016_F_Invalid PPU-File entry: $1'#000+
   '10017_F_PPU Dbx count problem'#000+
   '10018_E_Illegal unit name: $1'#000+
-  '10019_F_Too much units'#000+
-  '10020_F_Circular unit refer','ence between $1 and $2'#000+
+  '10','019_F_Too much units'#000+
+  '10020_F_Circular unit reference between $1 and $2'#000+
   '10021_F_Can'#039't compile unit $1, no sources available'#000+
   '10022_F_Can'#039't find unit $1'#000+
   '10023_W_Unit $1 was not found but $2 exists'#000+
   '10024_F_Unit $1 searched but $2 found'#000+
-  '10025_W_Compiling the system unit requires the -Us switc','h'#000+
+  '10025_W_','Compiling the system unit requires the -Us switch'#000+
   '10026_F_There were $1 errors compiling module, stopping'#000+
   '10027_U_Load from $1 ($2) unit $3'#000+
   '10028_U_Recompiling $1, checksum changed for $2'#000+
   '10029_U_Recompiling $1, source found only'#000+
-  '10030_U_Recompiling unit, static lib is older than ppufile',#000+
+  '10030_U_Re','compiling unit, static lib is older than ppufile'#000+
   '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
   '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
   '10033_U_Recompiling unit, obj is older than asm'#000+
-  '10034_U_Parsing interface of $1'#000+
+  '10034_U_Parsing interfa','ce of $1'#000+
   '10035_U_Parsing implementation of $1'#000+
-  '10','036_U_Second load for unit $1'#000+
+  '10036_U_Second load for unit $1'#000+
   '10037_U_PPU Check file $1 time $2'#000+
   '10038_H_Conditional $1 was not set at startup in last compilation of $'+
   '2'#000+
-  '10039_H_Conditional $1 was set at startup in last compilation of $2'#000+
-  '10040_W_Can'#039't recompile unit $1, but',' found modifed include files'+
-  #000+
+  '10039_H_Conditional $1 was set at startup in last compil','ation of $2'#000+
+  '10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
   '10041_H_File $1 is newer than Release PPU file $2'#000+
   '10042_U_Using a unit which was not compiled with correct FPU mode'#000+
   '11000_$1 [options] <inputfile> [options]'#000+
-  '11001_W_Only one source file supported'#000+
-  '11002_W_DEF fil','e can be created only for OS/2'#000+
+  '11001_','W_Only one source file supported'#000+
+  '11002_W_DEF file can be created only for OS/2'#000+
   '11003_E_nested response files are not supported'#000+
   '11004_F_No source file name in command line'#000+
   '11005_N_No option inside $1 config file'#000+
-  '11006_E_Illegal parameter: $1'#000+
+  '11006_E_Illegal parameter: $1',#000+
   '11007_H_-? writes help pages'#000+
-  '11008_F_Too many c','onfig files nested'#000+
+  '11008_F_Too many config files nested'#000+
   '11009_F_Unable to open file $1'#000+
   '11010_D_Reading further options from $1'#000+
   '11011_W_Target is already set to: $1'#000+
-  '11012_W_Shared libs not supported on DOS platform, reverting to static'+
-  #000+
+  '11012_W_Shared libs not supported on DOS platform, reverting to s','tat'+
+  'ic'#000+
   '11013_F_too many IF(N)DEFs'#000+
-  '11014_F_too man','y ENDIFs'#000+
+  '11014_F_too many ENDIFs'#000+
   '11015_F_open conditional at the end of the file'#000+
   '11016_W_Debug information generation is not supported by this executab'+
   'le'#000+
   '11017_H_Try recompiling with -dGDB'#000+
-  '11018_E_You are using the obsolete switch $1'#000+
-  '11019_E_You are using the obso','lete switch $1, please use $2'#000+
+  '11018_E_You are using the o','bsolete switch $1'#000+
+  '11019_E_You are using the obsolete switch $1, please use $2'#000+
   '11020_N_Switching assembler to default source writing assembler'#000+
   '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
-  '11022_W_"$1" assembler use forced'#000+
+  '11022_W_"$1" assembler use forc','ed'#000+
   '11026_T_Reading options from file $1'#000+
-  '11027_T_','Reading options from environment $1'#000+
+  '11027_T_Reading options from environment $1'#000+
   '11028_D_Handling option "$1"'#000+
   '11029__*** press enter ***'#000+
   '11030_H_Start of reading config file $1'#000+
   '11031_H_End of reading config file $1'#000+
-  '11032_D_interpreting option "$1"'#000+
-  '11036_D_interpreting firstpass option',' "$1"'#000+
+  '11032_D_interpreting o','ption "$1"'#000+
+  '11036_D_interpreting firstpass option "$1"'#000+
   '11033_D_interpreting file option "$1"'#000+
   '11034_D_Reading config file "$1"'#000+
   '11035_D_found source file name "$1"'#000+
   '11037_D_Defining symbol $1'#000+
   '11038_D_Undefining symbol $1'#000+
-  '11039_E_Unknown code page'#000+
-  '11023_Free Pascal Compiler version $FPCVER [$','FPCDATE] for $FPCTARGET'+
-  #010+
+  '11039_E_Unknown code pa','ge'#000+
+  '11023_Free Pascal Compiler version $FPCVER [$FPCDATE] for $FPCTARGET'#010+
   'Copyright (c) 1993-2002 by Florian Klaempfl'#000+
   '11024_Free Pascal Compiler version $FPCVER'#010+
   #010+
@@ -659,172 +658,172 @@ const msgtxt : array[0..000142,1..240] of char=(
   'Compiler Target: $FPCTARGET'#010+
   #010+
   'Supported targets:'#010+
-  '  $OSTARGETS'#010+
+  '  $OST','ARGETS'#010+
   #010+
-  'This program comes under the GNU General',' Public Licence'#010+
+  'This program comes under the GNU General Public Licence'#010+
   'For more information read COPYING.FPC'#010+
   #010+
   'Report bugs,suggestions etc to:'#010+
   '                 [email protected]'#000+
-  '11025_**0*_put + after a boolean switch option to enable it, - to disa'+
-  'ble it'#010+
-  '**1a_the compiler doesn'#039't delete the ','generated assembler file'#010+
+  '11025_**0*_put + after a boolean switch option to enable it, - to ','di'+
+  'sable it'#010+
+  '**1a_the compiler doesn'#039't delete the generated assembler file'#010+
   '**2al_list sourcecode lines in assembler file'#010+
   '**2ar_list register allocation/release info in assembler file'#010+
   '**2at_list temp allocation/release info in assembler file'#010+
-  '**1b_generate browser info'#010+
-  '**2bl_generate local s','ymbol info'#010+
+  '*','*1b_generate browser info'#010+
+  '**2bl_generate local symbol info'#010+
   '**1B_build all modules'#010+
   '**1C<x>_code generation options:'#010+
   '**2CD_create also dynamic library (not supported)'#010+
   '**2Ce_Compilation with emulated floating point opcodes'#010+
-  '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
-  '**2Ci_IO-checkin','g'#010+
+  '**2Ch<n>_<n> bytes h','eap (between 1023 and 67107840)'#010+
+  '**2Ci_IO-checking'#010+
   '**2Cn_omit linking stage'#010+
   '**2Co_check overflow of integer operations'#010+
   '**2Cr_range checking'#010+
   '**2CR_verify object method call validity'#010+
   '**2Cs<n>_set stack size to <n>'#010+
   '**2Ct_stack checking'#010+
-  '**2CX_create also smartlinked library'#010+
-  '**1d<x>_defines th','e symbol <x>'#010+
+  '**2CX_cr','eate also smartlinked library'#010+
+  '**1d<x>_defines the symbol <x>'#010+
   '*O1D_generate a DEF file'#010+
   '*O2Dd<x>_set description to <x>'#010+
   '*O2Dw_PM application'#010+
   '**1e<x>_set path to executable'#010+
   '**1E_same as -Cn'#010+
   '**1F<x>_set file names and paths:'#010+
-  '**2FD<x>_sets the directory where to search for compiler utilities'#010,
+  '**2FD<x>_sets the d','irectory where to search for compiler utilities'#010+
   '**2Fe<x>_redirect error output to <x>'#010+
   '**2FE<x>_set exe/unit output path to <x>'#010+
   '**2Fi<x>_adds <x> to include path'#010+
   '**2Fl<x>_adds <x> to library path'#010+
   '*L2FL<x>_uses <x> as dynamic linker'#010+
-  '**2Fo<x>_adds <x> to object path'#010+
-  '**2Fr<x>_load error mess','age file <x>'#010+
+  '**2Fo<x>_','adds <x> to object path'#010+
+  '**2Fr<x>_load error message file <x>'#010+
   '**2Fu<x>_adds <x> to unit path'#010+
   '**2FU<x>_set unit output path to <x>, overrides -FE'#010+
   '*g1g_generate debugger information:'#010+
   '*g2gg_use gsym'#010+
   '*g2gd_use dbx'#010+
-  '*g2gh_use heap trace unit (for memory leak debugging)'#010+
-  '*g2gl_use line info unit ','to show more info for backtraces'#010+
+  '*g2gh_use heap trace unit (for ','memory leak debugging)'#010+
+  '*g2gl_use line info unit to show more info for backtraces'#010+
   '*g2gc_generate checks for pointers'#010+
   '**1i_information'#010+
   '**2iD_return compiler date'#010+
   '**2iV_return compiler version'#010+
   '**2iSO_return compiler OS'#010+
-  '**2iSP_return compiler processor'#010+
+  '**2iSP_return compiler p','rocessor'#010+
   '**2iTO_return target OS'#010+
-  '**2iTP_return t','arget processor'#010+
+  '**2iTP_return target processor'#010+
   '**1I<x>_adds <x> to include path'#010+
   '**1k<x>_Pass <x> to the linker'#010+
   '**1l_write logo'#010+
   '**1n_don'#039't read the default config file'#010+
-  '**1o<x>_change the name of the executable produced to <x>'#010+
-  '**1pg_generate profile code for gprof (defines',' FPC_PROFILE)'#010+
+  '**1o<x>_change the name of the executable produced to <x','>'#010+
+  '**1pg_generate profile code for gprof (defines FPC_PROFILE)'#010+
   '*L1P_use pipes instead of creating temporary assembler files'#010+
   '**1S<x>_syntax options:'#010+
   '**2S2_switch some Delphi 2 extensions on'#010+
   '**2Sc_supports operators like C (*=,+=,/= and -=)'#010+
-  '**2Sa_include assertion code.'#010+
-  '**2Sd_tries to be De','lphi compatible'#010+
+  '**','2Sa_include assertion code.'#010+
+  '**2Sd_tries to be Delphi compatible'#010+
   '**2Se<x>_compiler stops after the <x> errors (default is 1)'#010+
   '**2Sg_allow LABEL and GOTO'#010+
   '**2Sh_Use ansistrings'#010+
   '**2Si_support C++ styled INLINE'#010+
-  '**2Sm_support macros like C (global)'#010+
+  '**2Sm_support macros like C (global',')'#010+
   '**2So_tries to be TP/BP 7.0 compatible'#010+
-  '**2Sp_t','ries to be gpc compatible'#010+
+  '**2Sp_tries to be gpc compatible'#010+
   '**2Ss_constructor name must be init (destructor must be done)'#010+
   '**2St_allow static keyword in objects'#010+
   '**1s_don'#039't call assembler and linker (only with -a)'#010+
-  '**2st_Generate script to link on target'#010+
-  '**2sh_Generate script ','to link on host'#010+
+  '**2st_Generate',' script to link on target'#010+
+  '**2sh_Generate script to link on host'#010+
   '**1u<x>_undefines the symbol <x>'#010+
   '**1U_unit options:'#010+
   '**2Un_don'#039't check the unit name'#010+
   '**2Ur_generate release unit files'#010+
   '**2Us_compile a system unit'#010+
-  '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
-  '**2*_e : Sh','ow errors (default)       d : Show debug info'#010+
+  '**1v<x>_Be verbose. <x> is a c','ombination of the following letters:'#010+
+  '**2*_e : Show errors (default)       d : Show debug info'#010+
   '**2*_w : Show warnings               u : Show unit info'#010+
   '**2*_n : Show notes                  t : Show tried/used files'#010+
-  '**2*_h : Show hints                  m : Show defined macros'#010+
-  '**2*_i : Show ','general info           p : Show compiled procedures'#010+
+  '**2*_h : Show hints        ','          m : Show defined macros'#010+
+  '**2*_i : Show general info           p : Show compiled procedures'#010+
   '**2*_l : Show linenumbers            c : Show conditionals'#010+
   '**2*_a : Show everything             0 : Show nothing (except errors)'#010+
-  '**2*_b : Show all procedure          r : Rhide/GCC compatib','ility mod'+
+  '**2*_b : Sh','ow all procedure          r : Rhide/GCC compatibility mod'+
   'e'#010+
   '**2*_    declarations if an error    x : Executable info (Win32 only)'#010+
   '**2*_    occurs'#010+
   '**1V_write fpcdebug.txt file with lots of debugging info'#010+
   '**1X_executable options:'#010+
-  '*L2Xc_link with the c library'#010+
-  '**2Xs_strip all symbols from ex','ecutable'#010+
+  '*L2Xc_link wi','th the c library'#010+
+  '**2Xs_strip all symbols from executable'#010+
   '**2XD_try to link dynamic          (defines FPC_LINK_DYNAMIC)'#010+
   '**2XS_try to link static (default) (defines FPC_LINK_STATIC)'#010+
-  '**2XX_try to link smart            (defines FPC_LINK_SMART)'#010+
+  '**2XX_try to link smart            (defines FPC_LINK_SMART)'#010,
   '**0*_Processor specific options:'#010+
-  '3*1A<x>_output ','format:'#010+
+  '3*1A<x>_output format:'#010+
   '3*2Aas_assemble using GNU AS'#010+
   '3*2Anasmcoff_coff (Go32v2) file using Nasm'#010+
   '3*2Anasmelf_elf32 (Linux) file using Nasm'#010+
   '3*2Anasmobj_obj file using Nasm'#010+
-  '3*2Amasm_obj file using Masm (Microsoft)'#010+
+  '3*2Amasm_obj file using Masm (Microsof','t)'#010+
   '3*2Atasm_obj file using Tasm (Borland)'#010+
-  '3*2Aco','ff_coff (Go32v2) using internal writer'#010+
+  '3*2Acoff_coff (Go32v2) using internal writer'#010+
   '3*2Apecoff_pecoff (Win32) using internal writer'#010+
   '3*1R<x>_assembler reading style:'#010+
   '3*2Ratt_read AT&T style assembler'#010+
   '3*2Rintel_read Intel style assembler'#010+
-  '3*2Rdirect_copy assembler text directly to assemb','ler file'#010+
+  '3','*2Rdirect_copy assembler text directly to assembler file'#010+
   '3*1O<x>_optimizations:'#010+
   '3*2Og_generate smaller code'#010+
   '3*2OG_generate faster code (default)'#010+
   '3*2Or_keep certain variables in registers'#010+
   '3*2Ou_enable uncertain optimizations (see docs)'#010+
-  '3*2O1_level 1 optimizations (quick optimizations)'#010+
-  '3*2','O2_level 2 optimizations (-O1 + slower optimizations)'#010+
+  '3*2O1','_level 1 optimizations (quick optimizations)'#010+
+  '3*2O2_level 2 optimizations (-O1 + slower optimizations)'#010+
   '3*2O3_level 3 optimizations (-O2 repeatedly, max 5 times)'#010+
   '3*2Op<x>_target processor:'#010+
   '3*3Op1_set target processor to 386/486'#010+
-  '3*3Op2_set target processor to Pentium/PentiumMMX (tm)'#010+
-  '3*3Op3_','set target processor to PPro/PII/c6x86/K6 (tm)'#010+
+  '3*3Op2_set tar','get processor to Pentium/PentiumMMX (tm)'#010+
+  '3*3Op3_set target processor to PPro/PII/c6x86/K6 (tm)'#010+
   '3*1T<x>_Target operating system:'#010+
   '3*2TGO32V2_version 2 of DJ Delorie DOS extender'#010+
   '3*2TWDOSX DOS 32 Bit Extender'#010+
   '3*2TLINUX_Linux'#010+
-  '3*2Tnetware_Novell Netware Module (experimental)'#010+
-  '3*2TOS2_OS/2 2.x'#010,
+  '3*2Tnetware_Novell',' Netware Module (experimental)'#010+
+  '3*2TOS2_OS/2 2.x'#010+
   '3*2TSUNOS_SunOS/Solaris'#010+
   '3*2TWin32_Windows 32 Bit'#010+
   '3*1W<x>_Win32 target options'#010+
   '3*2WB<x>_Set Image base to Hexadecimal <x> value'#010+
   '3*2WC_Specify console type application'#010+
-  '3*2WD_Use DEFFILE to export functions of DLL or EXE'#010+
-  '3*2WF_Specify full-scr','een type application (OS/2 only)'#010+
+  '3*2WD_Use DEFFILE to expor','t functions of DLL or EXE'#010+
+  '3*2WF_Specify full-screen type application (OS/2 only)'#010+
   '3*2WG_Specify graphic type application'#010+
   '3*2WN_Do not generate relocation code (necessary for debugging)'#010+
   '3*2WR_Generate relocation code'#010+
   '6*1A<x>_output format'#010+
-  '6*2Aas_Unix o-file using GNU AS'#010+
-  '6*2Agas_GNU Motorol','a assembler'#010+
+  '6*2','Aas_Unix o-file using GNU AS'#010+
+  '6*2Agas_GNU Motorola assembler'#010+
   '6*2Amit_MIT Syntax (old GAS)'#010+
   '6*2Amot_Standard Motorola assembler'#010+
   '6*1O_optimizations:'#010+
   '6*2Oa_turn on the optimizer'#010+
   '6*2Og_generate smaller code'#010+
   '6*2OG_generate faster code (default)'#010+
-  '6*2Ox_optimize maximum (still BUGGY!!!)'#010+
-  '6*2O0_set ','target processor to a MC68000'#010+
+  '6*','2Ox_optimize maximum (still BUGGY!!!)'#010+
+  '6*2O0_set target processor to a MC68000'#010+
   '6*2O2_set target processor to a MC68020+ (default)'#010+
   '6*1R<x>_assembler reading style:'#010+
   '6*2RMOT_read motorola style assembler'#010+
   '6*1T<x>_Target operating system:'#010+
-  '6*2TAMIGA_Commodore Amiga'#010+
+  '6*2TAMI','GA_Commodore Amiga'#010+
   '6*2TATARI_Atari ST/STe/TT'#010+
-  '6*2','TMACOS_Macintosh m68k'#010+
+  '6*2TMACOS_Macintosh m68k'#010+
   '6*2TLINUX_Linux-68k'#010+
   '6*2TPALMOS_PalmOS'#010+
   '**1*_'#010+

+ 10 - 1
compiler/pdecl.pas

@@ -455,6 +455,12 @@ implementation
                 istyperenaming:=true
               else
                 tt.sym:=newtype;
+              if unique and assigned(tt.def) then
+                begin
+                   tt.setdef(tstoreddef(tt.def).getcopy);
+                   include(tt.def.defoptions,df_unique);
+                   newtype.restype.def:=tt.def;
+                end;
               if assigned(tt.def) and not assigned(tt.def.typesym) then
                 tt.def.typesym:=newtype;
               { KAZ: handle TGUID declaration in system unit }
@@ -627,7 +633,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.63  2002-12-29 14:57:50  peter
+  Revision 1.64  2003-01-05 15:54:15  florian
+    + added proper support of type = type <type>; for simple types
+
+  Revision 1.63  2002/12/29 14:57:50  peter
     * unit loading changed to first register units and load them
       afterwards. This is needed to support uses xxx in yyy correctly
     * unit dependency check fixed

+ 5 - 2
compiler/ptype.pas

@@ -158,7 +158,7 @@ implementation
             tt:=generrortype;
             exit;
           end;
-         { Use the definitions for current unit, becuase
+         { Use the definitions for current unit, because
            they can be refered from the parameters and symbols are not
            loaded at that time. Only write the definition when the
            symbol is the real owner of the definition (not a redefine) }
@@ -629,7 +629,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.49  2003-01-03 23:50:41  peter
+  Revision 1.50  2003-01-05 15:54:15  florian
+    + added proper support of type = type <type>; for simple types
+
+  Revision 1.49  2003/01/03 23:50:41  peter
     * also allow = in fpc mode to assign enums
 
   Revision 1.48  2003/01/02 19:49:00  peter

+ 7 - 2
compiler/symconst.pas

@@ -126,7 +126,9 @@ type
     { init data has been generated }
     df_has_inittable,
     { rtti data has been generated }
-    df_has_rttitable
+    df_has_rttitable,
+    { type is unique, i.e. declared with type = type <tdef>; }
+    df_unique
   );
   tdefoptions=set of tdefoption;
 
@@ -340,7 +342,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.42  2003-01-05 13:36:53  florian
+  Revision 1.43  2003-01-05 15:54:15  florian
+    + added proper support of type = type <type>; for simple types
+
+  Revision 1.42  2003/01/05 13:36:53  florian
     * x86-64 compiles
     + very basic support for float128 type (x86-64 only)
 

+ 41 - 1
compiler/symdef.pas

@@ -68,6 +68,7 @@ interface
           constructor create;
           constructor ppuloaddef(ppufile:tcompilerppufile);
           destructor  destroy;override;
+          function getcopy : tstoreddef;virtual;
           procedure ppuwritedef(ppufile:tcompilerppufile);
           procedure ppuwrite(ppufile:tcompilerppufile);virtual;abstract;
           procedure deref;override;
@@ -384,6 +385,7 @@ interface
           typ      : tbasetype;
           constructor create(t : tbasetype;v,b : TConstExprInt);
           constructor ppuload(ppufile:tcompilerppufile);
+          function getcopy : tstoreddef;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
           function  is_publishable : boolean;override;
           function  gettypename:string;override;
@@ -400,6 +402,7 @@ interface
           typ : tfloattype;
           constructor create(t : tfloattype);
           constructor ppuload(ppufile:tcompilerppufile);
+          function getcopy : tstoreddef;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
           function  gettypename:string;override;
           function  is_publishable : boolean;override;
@@ -557,6 +560,7 @@ interface
           constructor loadansi(ppufile:tcompilerppufile);
           constructor createwide(l : longint);
           constructor loadwide(ppufile:tcompilerppufile);
+          function getcopy : tstoreddef;override;
           function  stringtypname:string;
           function  size : longint;override;
           procedure ppuwrite(ppufile:tcompilerppufile);override;
@@ -895,6 +899,10 @@ implementation
          nextglobal:=nil;
       end;
 
+    function tstoreddef.getcopy : tstoreddef;
+      begin
+         Message(sym_e_cant_create_unique_type);
+      end;
 
     procedure tstoreddef.ppuwritedef(ppufile:tcompilerppufile);
       begin
@@ -1263,6 +1271,16 @@ implementation
       end;
 
 
+    function tstringdef.getcopy : tstoreddef;
+      begin
+         result:=tstringdef.create;
+         result.deftype:=stringdef;
+         tstringdef(result).string_typ:=string_typ;
+         tstringdef(result).len:=len;
+         tstringdef(result).savesize:=savesize;
+      end;
+
+
     function tstringdef.stringtypname:string;
       const
         typname:array[tstringtype] of string[8]=('',
@@ -1684,6 +1702,17 @@ implementation
       end;
 
 
+    function torddef.getcopy : tstoreddef;
+      begin
+         result:=torddef.create(typ,low,high);
+         result.deftype:=orddef;
+         torddef(result).low:=low;
+         torddef(result).high:=high;
+         torddef(result).typ:=typ;
+         torddef(result).savesize:=savesize;
+      end;
+
+
     procedure torddef.setsize;
       begin
          case typ of
@@ -1872,6 +1901,14 @@ implementation
       end;
 
 
+    function tfloatdef.getcopy : tstoreddef;
+      begin
+         result:=tfloatdef.create(typ);
+         result.deftype:=floatdef;
+         tfloatdef(result).savesize:=savesize;
+      end;
+
+
     procedure tfloatdef.setsize;
       begin
          case typ of
@@ -5560,7 +5597,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.121  2003-01-05 13:36:53  florian
+  Revision 1.122  2003-01-05 15:54:15  florian
+    + added proper support of type = type <type>; for simple types
+
+  Revision 1.121  2003/01/05 13:36:53  florian
     * x86-64 compiles
     + very basic support for float128 type (x86-64 only)