tarray2.pp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. {$mode objfpc}
  2. Program tarray2;
  3. {$ifdef cpujvm}
  4. uses
  5. jdk15;
  6. {$macro on}
  7. {$define writeln:=jlsystem.fout.println}
  8. {$define write:=jlsystem.fout.print}
  9. {$else}
  10. uses
  11. SysUtils;
  12. {$endif}
  13. { Program to test array of const }
  14. { All elements of the following record must be tested :
  15. Elements not yet tested are commented out.
  16. Type
  17. PVarRec = ^TVarRec;
  18. TVarRec = record
  19. case vType: Byte of
  20. vtInteger : (VInteger: Integer; VType:Longint);
  21. vtBoolean : (VBoolean: Boolean);
  22. vtChar : (VChar: Char);
  23. vtExtended : (VExtended: PExtended);
  24. vtString : (VString: PShortString);
  25. vtPointer : (VPointer: Pointer);
  26. vtPChar : (VPChar: PChar);
  27. vtObject : (VObject: TObject);
  28. vtClass : (VClass: TClass);
  29. // vtWideChar : (VWideChar: WideChar);
  30. // vtPWideChar : (VPWideChar: PWideChar);
  31. vtAnsiString : (VAnsiString: Pointer);
  32. // vtCurrency : (VCurrency: PCurrency);
  33. // vtVariant : (VVariant: PVariant);
  34. // vtInterface : (VInterface: Pointer);
  35. // vtWideString : (VWideString: Pointer);
  36. vtInt64 : (VInt64: PInt64);
  37. vtQWord : (VQWord: PQWord);
  38. end;
  39. }
  40. procedure testit2 (args: array of byte);
  41. begin
  42. end;
  43. Procedure Testit (Args: Array of const);
  44. Var I : longint;
  45. begin
  46. If High(Args)<0 then
  47. begin
  48. Writeln ('No aguments');
  49. exit;
  50. end;
  51. Write ('Got '); Write (High(Args)+1); Writeln(' arguments :');
  52. For i:=0 to High(Args) do
  53. begin
  54. write ('Argument '); write(i); write(' has type ');
  55. case Args[i].vtype of
  56. vtinteger : begin Write ('Integer, Value :'); Writeln(args[i].vinteger); end;
  57. vtboolean : begin Write ('Boolean, Value :'); Writeln(args[i].vboolean); end;
  58. vtchar : begin Write ('Char, value : '); Writeln(args[i].vchar); end;
  59. vtextended : begin Write ('Extended, value : '); Writeln(args[i].VExtended^); end;
  60. vtString : begin Write ('ShortString, value :'); Writeln(unicodestring(args[i].VString^)); end;
  61. vtPointer : begin Write ('Pointer, toString : '); if assigned(Args[i].VPointer) then Writeln(JLString(JLObject(Args[i].VPointer).toString)) else writeln('nil') end;
  62. vtPChar : begin Write ('PCHar, value : '); Writeln(unicodestring(Ansistring(Args[i].VPChar))); end;
  63. vtObject : begin Write ('Object, toString : '); if assigned(Args[i].VObject) then Writeln(JLString(Args[i].VObject.toString)) else writeln('nil') end;
  64. vtClass : begin Write ('Class reference, toString : '); Writeln(JLString(JLClass(Args[i].VClass).toString)); end;
  65. vtAnsiString : begin Write ('AnsiString, value :'); Writeln(unicodestring(AnsiString(Args[I].VAnsiString))); end;
  66. {
  67. vtWideChar : (VWideChar: WideChar);
  68. vtPWideChar : (VPWideChar: PWideChar);
  69. vtCurrency : (VCurrency: PCurrency);
  70. vtVariant : (VVariant: PVariant);
  71. vtInterface : (VInterface: Pointer);
  72. vtWideString : (VWideString: Pointer);
  73. }
  74. vtInt64 : begin Write ('Int64, value : '); Writeln(args[i].VInt64^); end;
  75. vtQWord : begin Write ('QWord, value : '); Writeln(int64(args[i].VQWord^)); end;
  76. else
  77. begin Write ('(Unknown) : '); Writeln(args[i].vtype); end;
  78. end;
  79. end;
  80. end;
  81. Const P1 : Pchar = 'Eerste Pchar';
  82. p2 : Pchar = 'Tweede pchar';
  83. Var ObjA,ObjB : TObject;
  84. ACLass,BClass : TClass;
  85. S,T : AnsiString;
  86. begin
  87. ObjA:=TObject.Create;
  88. ObjB:=TObject.Create;
  89. AClass:=TObject;
  90. S:='Ansistring 1';
  91. T:='AnsiString 2';
  92. Write ('Size of VarRec : '); Writeln(Sizeof(TVarRec));
  93. Testit ([]);
  94. Testit ([1,2]);
  95. Testit (['A','B']);
  96. Testit ([TRUE,FALSE,TRUE]);
  97. Testit (['String','Another string']);
  98. Testit ([S,T]) ;
  99. Testit ([P1,P2]);
  100. Testit ([@testit,Nil]);
  101. Testit ([ObjA,ObjB]);
  102. Testit ([1.234,1.234]);
  103. TestIt ([AClass]);
  104. TestIt ([QWord(1234)]);
  105. TestIt ([Int64(1234)]);
  106. TestIt ([Int64(12341234)*1000000000+Int64(12341234)]);
  107. TestIt2 ([]);
  108. TestIt2 ([1,2]);
  109. end.