Browse Source

* Fix tests

Michaël Van Canneyt 2 years ago
parent
commit
6cfff900e8

+ 35 - 35
packages/fcl-passrc/src/pasresolver.pp

@@ -43,7 +43,7 @@ Works:
   - fail to write a loop var inside the loop
 - spot duplicates
 - type cast base types
-- AnsiChar
+- char
   - ord(), chr()
 - record
   - variants
@@ -101,7 +101,7 @@ Works:
   - cast integer to enum, enum to integer
   - $ScopedEnums
 - sets - TPasSetType
-  - set of AnsiChar
+  - set of char
   - set of integer
   - set of boolean
   - set of enum
@@ -120,7 +120,7 @@ Works:
 - procedure inc/dec(var ordinal; decr: ordinal = 1)
 - function Assigned(Pointer or Class or Class-Of): boolean
 - arrays TPasArrayType
-  - TPasEnumType, AnsiChar, integer, range
+  - TPasEnumType, char, integer, range
   - low, high, length, setlength, assigned
   - function concat(array1,array2,...): array
   - function copy(array): array, copy(a,start), copy(a,start,end)
@@ -132,7 +132,7 @@ Works:
   - open array, override, pass array literal, pass var
   - type cast array to arrays with same dimensions and compatible element type
   - static array range checking
-  - const array of AnsiChar = string
+  - const array of char = string
   - a:=[...]   // assignation using constant array
   - a:=[[...],[...]]
   - a:=[...]+[...]  a+[]  []+a   modeswitch arrayoperators
@@ -176,7 +176,7 @@ Works:
   - integer ranges
   - boolean ranges
   - enum ranges
-  - AnsiChar ranges
+  - char ranges
   - +, -, *, div, mod, /, shl, shr, or, and, xor, in, ^^, ><
   - =, <>, <, <=, >, >=
   - ord(), low(), high(), pred(), succ(), length()
@@ -190,9 +190,9 @@ Works:
     rg:=rg, rg1:=rg2, rg:=enum, =, <>, in
     array[rg], low(array), high(array)
 - for..in..do :
-  - type boolean, AnsiChar, byte, shortint, word, smallint, longword, longint
-  - type enum range, AnsiChar range, integer range
-  - type/var set of: enum, enum range, integer, integer range, AnsiChar, AnsiChar range
+  - type boolean, char, byte, shortint, word, smallint, longword, longint
+  - type enum range, char range, integer range
+  - type/var set of: enum, enum range, integer, integer range, char, char range
   - array var
   - function: enumerator
   - class
@@ -255,7 +255,7 @@ ToDo:
    - operator enumerator
    - binaryexpr
    - advanced records
-- Include/Exclude for set of int/AnsiChar/bool
+- Include/Exclude for set of int/char/bool
 - error if property method resolution is not used
 - $H-hintpos$H+
 - $pop, $push
@@ -340,7 +340,7 @@ type
     btContext,     // any source declared type with LoTypeEl/HiTypeEl
     btModule,
     btUntyped,     // TPasArgument without ArgType
-    btChar,        // AnsiChar
+    btChar,        // char
     {$ifdef FPC_HAS_CPSTRING}
     btAnsiChar,    // ansichar
     {$endif}
@@ -476,7 +476,7 @@ const
     'Context',
     'Module',
     'Untyped',
-    'AnsiChar',
+    'Char',
     {$ifdef FPC_HAS_CPSTRING}
     'AnsiChar',
     {$endif}
@@ -6248,7 +6248,7 @@ begin
       BaseTypeData:=TResElDataBaseType(EnumType.CustomData);
       if BaseTypeData.BaseType in (btAllChars+[btBoolean,btByte]) then
         exit;
-      RaiseXExpectedButYFound(20170216151553,'AnsiChar or boolean',
+      RaiseXExpectedButYFound(20170216151553,'Char or boolean',
         GetElementTypeName(EnumType),GetEnumTypePosEl);
       end;
     end;
@@ -6596,7 +6596,7 @@ begin
         RaiseXExpectedButYFound(20171009193514,'range',GetElementTypeName(RangeResolved.IdentEl),Expr);
       end
     else if RangeResolved.BaseType in btArrayRangeTypes then
-      // full range, e.g. array[AnsiChar]
+      // full range, e.g. array[char]
     else if (RangeResolved.BaseType=btContext) and (RangeResolved.LoTypeEl is TPasEnumType) then
       // e.g. array[enumtype]
     else if (RangeResolved.BaseType=btContext) and (RangeResolved.LoTypeEl is TPasGenericTemplateType) then
@@ -7727,7 +7727,7 @@ begin
                       GetResolverResultDescription(VarResolved,true),loop.VariableName);
                 revskChar:
                   if VarRangeInt.ElKind<>revskChar then
-                    RaiseXExpectedButYFound(20171109200753,'AnsiChar',
+                    RaiseXExpectedButYFound(20171109200753,'char',
                       GetResolverResultDescription(VarResolved,true),loop.VariableName);
                 revskBool:
                   if VarRangeInt.ElKind<>revskBool then
@@ -13321,7 +13321,7 @@ begin
           if (Bin.Kind=pekRange) and (LeftResolved.BaseType in btAllChars) then
             begin
             if not (RightResolved.BaseType in btAllChars) then
-              RaiseXExpectedButYFound(20170216152603,'AnsiChar',BaseTypeNames[RightResolved.BaseType],Bin.Right);
+              RaiseXExpectedButYFound(20170216152603,'char',BaseTypeNames[RightResolved.BaseType],Bin.Right);
             SetResolverValueExpr(ResolvedEl,btRange,
               FBaseTypes[LeftResolved.BaseType],FBaseTypes[LeftResolved.BaseType],
               Bin,[rrfReadable]);
@@ -14045,7 +14045,7 @@ begin
   {$ENDIF}
   if ResolvedEl.BaseType in btAllStrings then
     begin
-    // stringvar[] => AnsiChar
+    // stringvar[] => char
     case GetActualBaseType(ResolvedEl.BaseType) of
     {$ifdef FPC_HAS_CPSTRING}
     btAnsiString,btRawByteString,btShortString:
@@ -14749,7 +14749,7 @@ begin
     begin
     if RBT in btAllChars then
       exit;
-    RaiseXExpectedButYFound(20170216152702,'AnsiChar',BaseTypeNames[RHS.BaseType],Right);
+    RaiseXExpectedButYFound(20170216152702,'char',BaseTypeNames[RHS.BaseType],Right);
     end
   else if LBT=btContext then
     begin
@@ -14834,7 +14834,7 @@ begin
         LHS.BaseType:=GetCombinedChar(LHS,RHS,Right);
         exit;
         end;
-      RaiseXExpectedButYFound(20170420093024,'AnsiChar',BaseTypeNames[RHS.BaseType],Right);
+      RaiseXExpectedButYFound(20170420093024,'char',BaseTypeNames[RHS.BaseType],Right);
       end
     else if LBT in btAllStrings then
       begin
@@ -14967,7 +14967,7 @@ function TPasResolver.IsCharLiteral(const Value: string; ErrorPos: TPasElement
 {$ENDIF}
 {$ENDIF}
 
-// returns true if Value is a Pascal AnsiChar literal
+// returns true if Value is a Pascal char literal
 // btAnsiChar: #65, #$50, ^G, 'a'
 // btWideChar: #10000, 'ä'
 var
@@ -16028,7 +16028,7 @@ begin
         begin
         // ansichar(ansistring)
         if fExprEvaluator.StringToOrd(Value,nil)>$ffff then
-          RaiseXExpectedButYFound(20181005141025,'AnsiChar','string',Params);
+          RaiseXExpectedButYFound(20181005141025,'char','string',Params);
         Result:=Value;
         Value:=nil;
         end
@@ -16041,7 +16041,7 @@ begin
           Value:=nil;
           end
         else
-          RaiseXExpectedButYFound(20181005141058,'AnsiChar','string',Params);
+          RaiseXExpectedButYFound(20181005141058,'char','string',Params);
         end
       else if (bt=btAnsiString) or ((bt=btString) and (BaseTypeString=btAnsiString)) then
         begin
@@ -19428,7 +19428,7 @@ begin
       end;
     end;
   if Result=cIncompatible then
-    exit(CheckRaiseTypeArgNo(20170216152334,1,Param,ParamResolved,'enum or AnsiChar',RaiseOnError));
+    exit(CheckRaiseTypeArgNo(20170216152334,1,Param,ParamResolved,'enum or char',RaiseOnError));
 
   Result:=CheckBuiltInMaxParamCount(Proc,Params,1,RaiseOnError);
 end;
@@ -19482,13 +19482,13 @@ begin
     exit(cIncompatible);
   Params:=TParamsExpr(Expr);
 
-  // first param: enumtype, range, built-in ordinal type (AnsiChar, longint, ...)
+  // first param: enumtype, range, built-in ordinal type (char, longint, ...)
   Param:=Params.Params[0];
   ComputeElement(Param,ParamResolved,[]);
   Result:=cIncompatible;
   bt:=ParamResolved.BaseType;
   if bt in btAllRanges then
-    // e.g. high(AnsiChar)
+    // e.g. high(char)
     Result:=cExact
   else if bt=btSet then
     Result:=cExact
@@ -19791,7 +19791,7 @@ begin
     exit(cIncompatible);
   Params:=TParamsExpr(Expr);
 
-  // first param: enum, range, set, AnsiChar or integer
+  // first param: enum, range, set, char or integer
   Param:=Params.Params[0];
   ComputeElement(Param,ParamResolved,[]);
   Result:=cIncompatible;
@@ -20274,7 +20274,7 @@ begin
 
   for i:=0 to length(Params.Params)-1 do
     begin
-    // all params: AnsiChar or string
+    // all params: char or string
     Param:=Params.Params[i];
     ComputeElement(Param,ParamResolved,[]);
     if not (rrfReadable in ParamResolved.Flags)
@@ -20297,7 +20297,7 @@ begin
   ParamsArr:=Params.Params;
   for i:=0 to length(ParamsArr)-1 do
     begin
-    // all params: AnsiChar or string
+    // all params: char or string
     Param:=ParamsArr[i];
     ComputeElement(Param,ParamResolved,[]);
     if i=0 then
@@ -20325,7 +20325,7 @@ begin
   try
     for i:=0 to length(Params.Params)-1 do
       begin
-      // all params: AnsiChar or string
+      // all params: char or string
       Param:=Params.Params[i];
       Value:=Eval(Param,Flags);
       if Value=nil then
@@ -22362,11 +22362,11 @@ begin
         @BI_Assigned_OnGetCallCompatibility,@BI_Assigned_OnGetCallResult,
         nil,@BI_Assigned_OnFinishParamsExpr,bfAssigned);
   if bfChr in TheBaseProcs then
-    AddBuiltInProc('Chr','function Chr(const Integer): AnsiChar',
+    AddBuiltInProc('Chr','function Chr(const Integer): char',
         @BI_Chr_OnGetCallCompatibility,@BI_Chr_OnGetCallResult,
         @BI_Chr_OnEval,nil,bfChr);
   if bfOrd in TheBaseProcs then
-    AddBuiltInProc('Ord','function Ord(const Enum or AnsiChar): integer',
+    AddBuiltInProc('Ord','function Ord(const Enum or char): integer',
         @BI_Ord_OnGetCallCompatibility,@BI_Ord_OnGetCallResult,
         @BI_Ord_OnEval,nil,bfOrd);
   if bfLow in TheBaseProcs then
@@ -26615,7 +26615,7 @@ function TPasResolver.CheckAssignCompatibilityArrayType(const LHS,
   procedure Check_ArrayOfChar_String(ArrType: TPasArrayType;
     ArrLength: integer; const ElTypeResolved: TPasResolverResult;
     Expr: TPasExpr; ErrorEl: TPasElement);
-  // check if assigning a string to an array of AnsiChar fits
+  // check if assigning a string to an array of char fits
   var
     Value: TResEvalValue;
     ElBT: TResolverBaseType;
@@ -26629,7 +26629,7 @@ function TPasResolver.CheckAssignCompatibilityArrayType(const LHS,
     ElBT:=GetActualBaseType(ElTypeResolved.BaseType);
     if length(ArrType.Ranges)=0 then
       begin
-      // dynamic array of AnsiChar can hold any string
+      // dynamic array of char can hold any string
       // ToDo: check if value can be converted without loss
       Result:=cExact;
       exit;
@@ -26987,7 +26987,7 @@ function TPasResolver.CheckAssignCompatibilityArrayType(const LHS,
       if (ElTypeResolved.BaseType in btAllChars) then
         if (Values.BaseType in btAllStrings) then
           begin
-          // e.g. array of AnsiChar = ''
+          // e.g. array of char = ''
           Check_ArrayOfChar_String(ArrType,ExpectedCount,ElTypeResolved,Expr,ErrorEl);
           exit;
           end
@@ -27283,7 +27283,7 @@ begin
             begin
             FromTypeEl:=FromResolved.LoTypeEl;
             if FromTypeEl.ClassType=TPasEnumType then
-              // e.g. AnsiChar(TEnum)
+              // e.g. Char(TEnum)
               Result:=cCompatible;
             end;
           end
@@ -30465,7 +30465,7 @@ function TPasResolver.CheckClassIsClass(SrcType, DestType: TPasType): integer;
 // check if Src is equal or descends from Dest
 // Generics: TBird<T> is both directions a TBird<word>
 //       and TBird<TMap<T>> is both directions a TBird<TMap<word>>
-//       but a TBird<word> is not a TBird<AnsiChar>
+//       but a TBird<word> is not a TBird<char>
 
   function CheckSpecialized(SrcScope, DestScope: TPasGenericScope): boolean;
   var

+ 2 - 2
packages/fcl-passrc/src/pparser.pp

@@ -1727,10 +1727,10 @@ Function IsSimpleTypeToken(Var AName : String) : Boolean;
 Const
    SimpleTypeCount = 15;
    SimpleTypeNames : Array[1..SimpleTypeCount] of string =
-     ('byte','boolean','AnsiChar','integer','int64','longint','longword','double',
+     ('byte','boolean','char','integer','int64','longint','longword','double',
       'shortint','smallint','string','word','qword','cardinal','widechar');
    SimpleTypeCaseNames : Array[1..SimpleTypeCount] of string =
-     ('Byte','Boolean','AnsiChar','Integer','Int64','LongInt','LongWord','Double',
+     ('Byte','Boolean','char','Integer','Int64','LongInt','LongWord','Double',
      'ShortInt','SmallInt','String','Word','QWord','Cardinal','WideChar');
 
 Var

+ 1 - 1
packages/fcl-passrc/src/pscanner.pp

@@ -716,7 +716,7 @@ type
   TPScannerFormatPathEvent = function(const aPath: String): String of object;
   TPScannerWarnEvent = procedure(Sender: TObject; Identifier: TPasScannerString; State: TWarnMsgState; var Handled: boolean) of object;
   TPScannerModeDirective = procedure(Sender: TObject; NewMode: TModeSwitch; Before: boolean; var Handled: boolean) of object;
-  TPScannerLinkLibEvent = procedure(Sender: TObject; Const aLibName,aLibAlias,aLibOptions : String; var Handled: boolean) of object;
+  TPScannerLinkLibEvent = procedure(Sender: TObject; Const aLibName,aLibAlias,aLibOptions : TPasScannerString; var Handled: boolean) of object;
 
   // aFileName: full filename (search is already done) aOptions: list of name:value pairs.
   TResourceHandler = Procedure (Sender : TObject; const aFileName : String; aOptions : TStrings) of object;

+ 28 - 28
packages/pastojs/src/fppas2js.pp

@@ -47,17 +47,17 @@ Works:
   - FuncName:=, auto rename lower lvl Result variables
   - var modifier 'absolute' for local vars
 - assign statements
-- AnsiChar
+- char
   - literals
-  - ord(AnsiChar)  ->  AnsiChar.charCodeAt()
+  - ord(AnsiChar)  ->  char.charCodeAt()
   - chr(integer)  -> String.fromCharCode(integer)
 - string
   - literals
   - setlength(s,newlen) -> s = rtl.strSetLength(s,newlen)
-  - read and write AnsiChar aString[]
+  - read and write char aString[]
   - allow only String, no ShortString, AnsiString, UnicodeString,...
   - allow type casting string to external class name 'String'
-- for int/enum do, for AnsiChar do, for bool do
+- for int/enum do, for char do, for bool do
 - repeat..until
 - while..do
 - try..finally
@@ -159,7 +159,7 @@ Works:
   - a := Concat([1,2,3],[4,5,6]);
   - copy, concat for static arrays, creating dynamic arrays
 - static arrays
-  - range: enumtype, boolean, int, AnsiChar, custom int
+  - range: enumtype, boolean, int, char, custom int
   - init as arr = rtl.arraySetLength(null,value,dim1,dim2,...)
   - init with expression
   - length(1-dim array)
@@ -185,7 +185,7 @@ Works:
   - low(), high()
   - when passing as argument set state referenced
   - set of (enum,enum2)  - anonymous enumtype
-  - set of AnsiChar, boolean, integer range, AnsiChar range, enum range
+  - set of char, boolean, integer range, char range, enum range
 - with-do  using local var
   - with record do i:=v;
   - with classinstance do begin create; i:=v; f(); i:=a[]; end;
@@ -245,14 +245,14 @@ Works:
   - nested classes
 - jsvalue
   - init as undefined
-  - assign to jsvalue := integer, string, boolean, double, AnsiChar
+  - assign to jsvalue := integer, string, boolean, double, char
   - type cast base types to jsvalue
   - type cast jsvalue to base type
      integer: Math.floor(jsvalue)   may return NaN
      boolean: !(jsvalue == false)   works for numbers too 0==false
      double: rtl.getNumber(jsvalue)    typeof(n)=="number"?n:NaN;
      string: ""+jsvalue
-     AnsiChar: rtl.getChar(jsvalue)   ((typeof(c)!="string") && (c.length==1)) ? c : ""
+     char: rtl.getChar(jsvalue)   ((typeof(c)!="string") && (c.length==1)) ? c : ""
   - enums: assign to jsvalue, typecast jsvalue to enum
   - class instance: assign to jsvalue, typecast jsvalue to a class
   - class of: assign to jsvalue, typecast jsvalue to a class-of
@@ -304,7 +304,7 @@ Works:
 - enumeration  for..in..do
   - enum, enum range, set of enum, set of enum range
   - int, int range, set of int, set of int range
-  - AnsiChar, AnsiChar range, set of AnsiChar, set of AnsiChar range
+  - char, char range, set of char, set of char range
   - array
   - class
   - for key in JSObject do
@@ -318,8 +318,8 @@ Works:
 - Range checks:
   - compile time: warnings to errors
   - assign int:=, int+=, enum:=, enum+=, intrange:=, intrange+=,
-      enumrange:=, enumrange+=, AnsiChar:=, AnsiChar+=, charrange:=, charrange+=
-  - procedure argument int, enum, intrange, enumrange, AnsiChar, charrange
+      enumrange:=, enumrange+=, char:=, char+=, charrange:=, charrange+=
+  - procedure argument int, enum, intrange, enumrange, vhar, charrange
   - array[index1,index2,...]  read and assign
   - string[index]  read and assign
 - Interfaces:
@@ -10761,13 +10761,13 @@ function TPasToJSConverter.ConvertCharToInt(Arg: TJSElement;
 begin
   if (Arg is TJSLiteral) and (TJSLiteral(Arg).Value.ValueType=jstString) then
     begin
-    // convert AnsiChar literal to int
+    // convert char literal to int
     ConvertCharLiteralToInt(TJSLiteral(Arg),PosEl,ArgContext);
     Result:=Arg;
     end
   else
     begin
-    // convert AnsiChar to int  ->  Arg.charCodeAt(0)
+    // convert char to int  ->  Arg.charCodeAt(0)
     Result:=CreateCallCharCodeAt(Arg,0,PosEl);
     end;
 end;
@@ -11369,7 +11369,7 @@ var
                   if ArgContext.Resolver.ExprEvaluator.GetWideChar(TResEvalString(LowRg).S,w) then
                     Int:=ord(w)
                   else
-                    ArgContext.Resolver.RaiseXExpectedButYFound(20170910213203,'AnsiChar','string',Param);
+                    ArgContext.Resolver.RaiseXExpectedButYFound(20170910213203,'char','string',Param);
                   end
                 else
                   Int:=ord(TResEvalString(LowRg).S[1]);
@@ -11379,7 +11379,7 @@ var
               revkUnicodeString:
                 begin
                 if length(TResEvalUTF16(LowRg).S)<>1 then
-                  ArgContext.Resolver.RaiseXExpectedButYFound(20170910213247,'AnsiChar','string',Param)
+                  ArgContext.Resolver.RaiseXExpectedButYFound(20170910213247,'char','string',Param)
                 else
                   Int:=ord(TResEvalUTF16(LowRg).S[1]);
                 Arg:=ConvertCharToInt(Arg,Param,ArgContext);
@@ -12784,7 +12784,7 @@ begin
       end
     else if from_bt in btAllJSChars then
       begin
-      // AnsiChar to integer
+      // char to integer
       Result:=ConvertExpression(Param,AContext);
       Result:=ConvertCharToInt(Result,El,AContext);
       Result:=ConvertIntToInt(Result,btWord,to_bt,El,AContext);
@@ -12889,7 +12889,7 @@ begin
     begin
     if from_bt in btAllJSStringAndChars then
       begin
-      // string or AnsiChar to string -> value
+      // string or char to string -> value
       Result:=ConvertExpression(Param,AContext);
       exit;
       end
@@ -12918,7 +12918,7 @@ begin
     begin
     if from_bt in [btChar,btWideChar] then
       begin
-      // AnsiChar to AnsiChar
+      // char to char
       Result:=ConvertExpression(Param,AContext);
       exit;
       end
@@ -12937,7 +12937,7 @@ begin
         end
       else
         begin
-        // AnsiChar(integer) -> String.fromCharCode(integer)
+        // char(integer) -> String.fromCharCode(integer)
         Result:=CreateCallFromCharCode(Result,El);
         end;
       exit;
@@ -12945,7 +12945,7 @@ begin
     else if (from_bt in (btArrayRangeTypes+[btRange]))
         or (IsParamPas2JSBaseType and (JSBaseType=pbtJSValue)) then
       begin
-      // convert value to AnsiChar -> rtl.getChar(value)
+      // convert value to char -> rtl.getChar(value)
       // Note: convert value first in case it raises an exception
       Result:=ConvertExpression(Param,AContext);
       if IsLiteralInteger(Result,Int) then
@@ -12957,13 +12957,13 @@ begin
           end
         else
           begin
-          // AnsiChar(integer) -> String.fromCharCode(integer)
+          // char(integer) -> String.fromCharCode(integer)
           Result:=CreateCallFromCharCode(Result,El);
           end;
         end
       else
         begin
-        // convert value to AnsiChar -> rtl.getChar(value)
+        // convert value to char -> rtl.getChar(value)
         Call:=CreateCallExpression(El);
         Call.Expr:=CreateMemberExpression([GetBIName(pbivnRTL),GetBIName(pbifnGetChar)]);
         Call.AddArg(Result);
@@ -23500,7 +23500,7 @@ var
         exit;
       jstString:
         begin
-        // convert AnsiChar literal to int
+        // convert char literal to int
         ConvertCharLiteralToInt(TJSLiteral(Result),Expr,AContext);
         exit;
         end;
@@ -23514,7 +23514,7 @@ var
       if (ResolvedEl.BaseType in btAllChars)
           or ((ResolvedEl.BaseType=btRange) and (ResolvedEl.SubType in btAllChars)) then
         begin
-        // convert AnsiChar variable to int: append  .charCodeAt()
+        // convertchar variable to int: append  .charCodeAt()
         Result:=CreateCallCharCodeAt(Result,0,Expr);
         end
       else if (ResolvedEl.BaseType in btAllJSBooleans)
@@ -24084,7 +24084,7 @@ begin
         else if (VarResolved.BaseType in btAllChars)
             or ((VarResolved.BaseType=btRange) and (VarResolved.SubType in btAllChars)) then
           begin
-          // convert int to AnsiChar
+          // convert int to char
           SimpleAss.Expr:=CreateCallFromCharCode(SimpleAss.Expr,PosEl);
           end
         else if (VarResolved.BaseType in btAllJSBooleans)
@@ -24992,7 +24992,7 @@ begin
       else if (CompareText(T.Name,'boolean')=0) then
         Lit.Value.AsBoolean:=false
       else if (CompareText(T.Name,'string')=0)
-           or (CompareText(T.Name,'AnsiChar')=0)
+           or (CompareText(T.Name,'char')=0)
       then
         Lit.Value.AsString:=''
       else
@@ -25158,7 +25158,7 @@ begin
         WS:=LitVal.AsString;
         Result.Free;
         if length(WS)<>1 then
-          DoError(20170415193254,nXExpectedButYFound,sXExpectedButYFound,['AnsiChar','string'],Expr);
+          DoError(20170415193254,nXExpectedButYFound,sXExpectedButYFound,['char','string'],Expr);
         Result:=CreateLiteralNumber(Expr,ord(WS[1]));
         exit;
         end;
@@ -28094,7 +28094,7 @@ begin
         begin
         // anonymous type -> prepend '$a'
         // for example:
-        //   "var AnArray: array of array of AnsiChar;" becomes AnArray$a$a
+        //   "var AnArray: array of array of char;" becomes AnArray$a$a
         Result:=GetBIName(pbitnAnonymousPostfix)+Result;
         end;
       CurEl:=CurEl.Parent;

+ 2 - 2
packages/pastojs/src/pas2jscompiler.pp

@@ -615,7 +615,7 @@ type
     procedure WriteHelpLine(S: String);
     function LoadFile(Filename: string; Binary: boolean = false): TPas2jsFile;
     // Override these for PCU format
-    procedure HandleLinkLibStatement(Sender: TObject; const aLibName, aLibAlias, aLibOptions: String; var Handled: boolean);
+    procedure HandleLinkLibStatement(Sender: TObject; const aLibName, aLibAlias, aLibOptions: TPasScannerString; var Handled: boolean);
     function CreateCompilerFile(const PasFileName, PCUFilename: String): TPas2jsCompilerFile; virtual;
     // Command-line option handling
     procedure HandleOptionPCUFormat(aValue: String); virtual;
@@ -2393,7 +2393,7 @@ begin
   end;
 end;
 
-procedure TPas2jsCompiler.HandleLinkLibStatement(Sender: TObject; const aLibName, aLibAlias, aLibOptions: String;
+procedure TPas2jsCompiler.HandleLinkLibStatement(Sender: TObject; const aLibName, aLibAlias, aLibOptions: TPasScannerString;
   var Handled: boolean);
 Var
   Imp : TJSImportStatement;

+ 1 - 1
packages/pastojs/src/pas2jsfiler.pp

@@ -393,7 +393,7 @@ const
     'None',
     'Enum',
     'Int',
-    'AnsiChar',
+    'Char',
     'Bool'
     );
 

+ 8 - 8
packages/pastojs/tests/tcfiler.pas

@@ -50,7 +50,7 @@ type
     FPCUWriter: TPCUWriter;
     FRestAnalyzer: TPas2JSAnalyzer;
     FCheckedElements: TPasAnalyzerKeySet; // keyset of TPCCheckedElementPair, key is Orig
-    procedure OnFilerGetSrc(Sender: TObject; aFilename: string; out p: PAnsiChar;
+    procedure OnFilerGetSrc(Sender: TObject; aFilename: string; out p: PChar;
       out Count: integer);
     function OnConverterIsElementUsed(Sender: TObject; El: TPasElement): boolean;
     function OnConverterIsTypeInfoUsed(Sender: TObject; El: TPasElement): boolean;
@@ -275,7 +275,7 @@ end;
 { TCustomTestPrecompile }
 
 procedure TCustomTestPrecompile.OnFilerGetSrc(Sender: TObject;
-  aFilename: string; out p: PAnsiChar; out Count: integer);
+  aFilename: string; out p: PChar; out Count: integer);
 var
   i: Integer;
   aModule: TTestEnginePasResolver;
@@ -286,7 +286,7 @@ begin
     aModule:=Resolvers[i];
     if aModule.Filename<>aFilename then continue;
     Src:=aModule.Source;
-    p:=PAnsiChar(Src);
+    p:=PChar(Src);
     Count:=length(Src);
     end;
 end;
@@ -2269,7 +2269,7 @@ begin
   '  FloatA = -31.678E-012;', // float lit
   '  HighInt = High(longint);', // func params, built-in function
   '  s = ''abc'';', // string lit
-  '  c: AnsiChar = s[1];', // array params
+  '  c: char = s[1];', // array params
   '  a: array[1..2] of longint = (3,4);', // anonymous array, range, array values
   '  PI: Double; external name ''Math.PI'';',
   'resourcestring',
@@ -2506,7 +2506,7 @@ begin
   'interface',
   '  function Abs(d: double): double; external name ''Math.Abs'';',
   '  function GetIt(d: double): double;',
-  '  procedure DoArgs(const a; var b: array of AnsiChar; out c: jsvalue); inline;',
+  '  procedure DoArgs(const a; var b: array of char; out c: jsvalue); inline;',
   '  procedure DoMulti(a,b: byte);',
   'implementation',
   'var k: double;',
@@ -2516,7 +2516,7 @@ begin
   '  j:=Abs(d+k);',
   '  Result:=j;',
   'end;',
-  'procedure DoArgs(const a; var b: array of AnsiChar; out c: jsvalue); inline;',
+  'procedure DoArgs(const a; var b: array of char; out c: jsvalue); inline;',
   'begin',
   'end;',
   'procedure DoMulti(a,b: byte);',
@@ -3108,12 +3108,12 @@ begin
   'implementation',
   'generic function Run<T>(a: T): T;',
   'var i,j,k,l: word;',
-  '  c: AnsiChar;',
+  '  c: char;',
   'begin',
   '  for i:=1 to 3 do ;',
   '  for j:=1+4 to 3*7 do ;',
   '  for k:=-1 to 2 do l:=l;',
-  '  for c in AnsiChar do ;',
+  '  for c in char do ;',
   'end;',
   '']);
   WriteReadUnit;

+ 7 - 7
packages/pastojs/tests/tcgenerics.pas

@@ -928,7 +928,7 @@ begin
   '  TObject = class end;',
   '  TBird<T> = class F: T; end;',
   '  TBirdWord = TBird<Word>;',
-  '  TBirdChar = TBird<AnsiChar>;',
+  '  TBirdChar = TBird<Char>;',
   'var',
   '  w: TBirdWord;',
   '  c: TBirdChar;',
@@ -955,14 +955,14 @@ begin
     '    $mod.TObject.$init.call(this);',
     '    this.F = "";',
     '  };',
-    '}, "TBird<System.AnsiChar>");',
+    '}, "TBird<System.Char>");',
     'this.w = null;',
     'this.c = null;',
     '']),
     LinesToStr([ // $mod.$main
     '$mod.w = $mod.c;',
     '']));
-  CheckHint(mtWarning,nClassTypesAreNotRelatedXY,'Class types "TBird<System.AnsiChar>" and "TBird<System.Word>" are not related');
+  CheckHint(mtWarning,nClassTypesAreNotRelatedXY,'Class types "TBird<System.Char>" and "TBird<System.Word>" are not related');
   CheckResolverUnexpectedHints();
 end;
 
@@ -2942,11 +2942,11 @@ begin
   '  TProc<S,T> = procedure(a: S; b: T);',
   'var',
   '  p: TProc<word>;',
-  '  q: TProc<AnsiChar,boolean>;',
+  '  q: TProc<char,boolean>;',
   'procedure Run(x,y: word);',
   'begin',
   'end;',
-  'procedure Fly(x: AnsiChar; y: boolean);',
+  'procedure Fly(x: char; y: boolean);',
   'begin',
   'end;',
   'begin',
@@ -2960,8 +2960,8 @@ begin
     '  procsig: rtl.newTIProcSig([["a", rtl.word], ["b", rtl.word]])',
     '});',
     'this.p = null;',
-    'this.$rtti.$ProcVar("TProc<System.AnsiChar,System.Boolean>", {',
-    '  procsig: rtl.newTIProcSig([["a", rtl.AnsiChar], ["b", rtl.boolean]])',
+    'this.$rtti.$ProcVar("TProc<System.Char,System.Boolean>", {',
+    '  procsig: rtl.newTIProcSig([["a", rtl.char], ["b", rtl.boolean]])',
     '});',
     'this.q = null;',
     'this.Run = function (x, y) {',

+ 103 - 109
packages/pastojs/tests/tcmodules.pas

@@ -40,7 +40,7 @@ type
     mkDirectReference
     );
 const
-  SrcMarker: array[TSrcMarkerKind] of AnsiChar = (
+  SrcMarker: array[TSrcMarkerKind] of char = (
     '#', // mkLabel
     '@', // mkResolverReference
     '='  // mkDirectReference
@@ -1041,21 +1041,21 @@ function CheckSrcDiff(Expected, Actual: string; out Msg: string): boolean;
 const
   SpaceChars = [#9,#10,#13,' '];
 var
-  ExpectedP, ActualP: PAnsiChar;
+  ExpectedP, ActualP: PChar;
 
-  function FindLineEnd(p: PAnsiChar): PAnsiChar;
+  function FindLineEnd(p: PChar): PChar;
   begin
     Result:=p;
     while not (Result^ in [#0,#10,#13]) do inc(Result);
   end;
 
-  function FindLineStart(p, MinP: PAnsiChar): PAnsiChar;
+  function FindLineStart(p, MinP: PChar): PChar;
   begin
     while (p>MinP) and not (p[-1] in [#10,#13]) do dec(p);
     Result:=p;
   end;
 
-  procedure SkipLineEnd(var p: PAnsiChar);
+  procedure SkipLineEnd(var p: PChar);
   begin
     if p^ in [#10,#13] then
     begin
@@ -1090,19 +1090,19 @@ var
 
   procedure DiffFound;
   var
-    ActLineStartP, ActLineEndP, p, StartPos: PAnsiChar;
+    ActLineStartP, ActLineEndP, p, StartPos: PChar;
     ExpLine, ActLine: String;
     i, LineNo, DiffLineNo: Integer;
   begin
     writeln('Diff found "',Msg,'". Lines:');
     // write correct lines
-    p:=PAnsiChar(Expected);
+    p:=PChar(Expected);
     LineNo:=0;
     DiffLineNo:=0;
     repeat
       StartPos:=p;
       while not (p^ in [#0,#10,#13]) do inc(p);
-      ExpLine:=copy(Expected,StartPos-PAnsiChar(Expected)+1,p-StartPos);
+      ExpLine:=copy(Expected,StartPos-PChar(Expected)+1,p-StartPos);
       SkipLineEnd(p);
       inc(LineNo);
       if (p<=ExpectedP) and (p^<>#0) then
@@ -1112,9 +1112,9 @@ var
         // diff line
         if DiffLineNo=0 then DiffLineNo:=LineNo;
         // write actual line
-        ActLineStartP:=FindLineStart(ActualP,PAnsiChar(Actual));
+        ActLineStartP:=FindLineStart(ActualP,PChar(Actual));
         ActLineEndP:=FindLineEnd(ActualP);
-        ActLine:=copy(Actual,ActLineStartP-PAnsiChar(Actual)+1,ActLineEndP-ActLineStartP);
+        ActLine:=copy(Actual,ActLineStartP-PChar(Actual)+1,ActLineEndP-ActLineStartP);
         writeln('- ',ActLine);
         if HasSpecialChar(ActLine) then
           writeln('- ',HashSpecialChars(ActLine));
@@ -1133,7 +1133,7 @@ var
           SkipLineEnd(ActLineStartP);
           if ActLineStartP^=#0 then break;
           ActLineEndP:=FindLineEnd(ActLineStartP);
-          ActLine:=copy(Actual,ActLineStartP-PAnsiChar(Actual)+1,ActLineEndP-ActLineStartP);
+          ActLine:=copy(Actual,ActLineStartP-PChar(Actual)+1,ActLineEndP-ActLineStartP);
           writeln('~ ',ActLine);
         end;
         exit;
@@ -1151,14 +1151,14 @@ var
 
 var
   IsSpaceNeeded: Boolean;
-  LastChar, Quote: AnsiChar;
+  LastChar, Quote: Char;
 begin
   Result:=true;
   Msg:='';
   if Expected='' then Expected:=' ';
   if Actual='' then Actual:=' ';
-  ExpectedP:=PAnsiChar(Expected);
-  ActualP:=PAnsiChar(Actual);
+  ExpectedP:=PChar(Expected);
+  ActualP:=PChar(Actual);
   repeat
     //writeln('TTestModule.CheckDiff Exp="',ExpectedP^,'" Act="',ActualP^,'"');
     case ExpectedP^ of
@@ -1177,7 +1177,7 @@ begin
       begin
       // skip space in Expected
       IsSpaceNeeded:=false;
-      if ExpectedP>PAnsiChar(Expected) then
+      if ExpectedP>PChar(Expected) then
         LastChar:=ExpectedP[-1]
       else
         LastChar:=#0;
@@ -1881,8 +1881,8 @@ begin
     //'  LineEnding = #10;',
     //'  DirectorySeparator = ''/'';',
     //'  DriveSeparator = '''';',
-    //'  AllowDirectorySeparators : set of AnsiChar = [''\'',''/''];',
-    //'  AllowDriveSeparators : set of AnsiChar = [];',
+    //'  AllowDirectorySeparators : set of char = [''\'',''/''];',
+    //'  AllowDriveSeparators : set of char = [];',
   if supTObject in Parts then
     Intf.AddStrings([
     'type',
@@ -2475,7 +2475,7 @@ var
     while p^ in ['a'..'z','A'..'Z','_','0'..'9'] do inc(p);
     Result:='';
     SetLength(Result,p-StartP);
-    Move(StartP^,Result[1],length(Result)*sizeof(char));
+    Move(StartP^,Result[1],length(Result));
   end;
 
   procedure AddLabel;
@@ -2515,7 +2515,7 @@ var
 
   procedure ParseCode(SrcLines: TStringList; aFilename: string);
   var
-    p,pstart,pend: PChar;
+    p: PChar;
     IsDirective: Boolean;
   begin
     //writeln('TCustomTestModule.CheckReferenceDirectives.ParseCode File=',aFilename);
@@ -2528,13 +2528,10 @@ var
       SrcLine:=SrcLines[LineNumber-1];
       if SrcLine='' then continue;
       //writeln('TCustomTestModule.CheckReferenceDirectives Line=',SrcLine);
-      pstart:=PChar(SrcLine);
-      pend:=pstart;
-      inc(PEnd,length(SrcLine));
-      p:=pstart;
+      p:=PChar(SrcLine);
       repeat
         case p^ of
-          #0: if (p>=pend) then break;
+          #0: if (p-PChar(SrcLine)=length(SrcLine)) then break;
           '{':
             begin
             CommentStartP:=p;
@@ -2545,7 +2542,7 @@ var
             repeat
               case p^ of
               #0:
-                if (p>=pend) then
+                if (p-PChar(SrcLine)=length(SrcLine)) then
                   begin
                   // multi line comment
                   if IsDirective then
@@ -2556,10 +2553,7 @@ var
                     SrcLine:=SrcLines[LineNumber-1];
                     //writeln('TCustomTestModule.CheckReferenceDirectives Comment Line=',SrcLine);
                   until SrcLine<>'';
-                  pstart:=PChar(SrcLine);
-                  pend:=pstart;
-                  inc(PEnd,length(SrcLine));
-                  p:=pstart;
+                  p:=PChar(SrcLine);
                   continue;
                   end;
               '}':
@@ -3452,12 +3446,12 @@ begin
   Add('var');
   Add('  i: longint;');
   Add('  s: string;');
-  Add('  c: AnsiChar;');
+  Add('  c: char;');
   Add('  b: boolean;');
   Add('  d: double;');
   Add('  i2: longint = 3;');
   Add('  s2: string = ''foo'';');
-  Add('  c2: AnsiChar = ''4'';');
+  Add('  c2: char = ''4'';');
   Add('  b2: boolean = true;');
   Add('  d2: double = 5.6;');
   Add('  i3: longint = $707;');
@@ -3518,7 +3512,7 @@ begin
   Add('const');
   Add('  i: longint = 3;');
   Add('  s: string = ''foo'';');
-  Add('  c: AnsiChar = ''4'';');
+  Add('  c: char = ''4'';');
   Add('  b: boolean = true;');
   Add('  d: double = 5.6;');
   Add('  e = low(word);');
@@ -3568,7 +3562,7 @@ begin
   '  b: boolean;',
   '  d: double;',
   '  s: string;',
-  '  c: AnsiChar;',
+  '  c: char;',
   'begin',
   '  i:=longint(i);',
   '  i:=longint(b);',
@@ -3578,11 +3572,11 @@ begin
   '  d:=double(i);',
   '  s:=string(s);',
   '  s:=string(c);',
-  '  c:=AnsiChar(c);',
-  '  c:=AnsiChar(i);',
-  '  c:=AnsiChar(65);',
-  '  c:=AnsiChar(#10);',
-  '  c:=AnsiChar(#$E000);',
+  '  c:=char(c);',
+  '  c:=char(i);',
+  '  c:=char(65);',
+  '  c:=char(#10);',
+  '  c:=char(#$E000);',
   '']);
   ConvertProgram;
   CheckSource('TestAliasTypeRef',
@@ -3618,7 +3612,7 @@ begin
   Add('  TYesNo = boolean;');
   Add('  TFloat = double;');
   Add('  TCaption = string;');
-  Add('  TChar = AnsiChar;');
+  Add('  TChar = char;');
   Add('var');
   Add('  i: integer;');
   Add('  b: TYesNo;');
@@ -5011,7 +5005,7 @@ begin
   StartProgram(false);
   Add(['type TCaption = string;',
   'procedure DoIt(vA: TCaption; var vB: TCaption; out vC: TCaption);',
-  'var c: AnsiChar;',
+  'var c: char;',
   'begin',
   '  va[1]:=c;',
   '  vb[2]:=c;',
@@ -7321,7 +7315,7 @@ begin
   '  TAtoZ = ''A''..''Z'';',
   '  TSetOfAZ = set of TAtoZ;',
   'var',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  a: TAtoZ;',
   '  s: TSetOfAZ = [''P'',''A''];',
   '  i: longint;',
@@ -7405,7 +7399,7 @@ begin
   '  Chars = LowChars+[''A''..''Z''];',
   '  sc = [''А'', ''Я''];',
   'var',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  s: string;',
   'begin',
   '  if c in lowchars then ;',
@@ -8595,7 +8589,7 @@ begin
   Add([
   'const',
   '  a = #$00F3;',
-  '  c: AnsiChar = ''1'';',
+  '  c: char = ''1'';',
   '  wc: widechar = ''ä'';',
   'begin',
   '  c:=#0;',
@@ -8611,7 +8605,7 @@ begin
   '  c:=#$0b;',
   '  c:=^A;',
   '  c:=''"'';',
-  '  c:=default(AnsiChar);',
+  '  c:=default(char);',
   '  c:=#$00E4;', // ä
   '  c:=''ä'';',
   '  c:=#$E4;', // ä
@@ -8658,7 +8652,7 @@ procedure TTestModule.TestChar_Compare;
 begin
   StartProgram(false);
   Add('var');
-  Add('  c: AnsiChar;');
+  Add('  c: char;');
   Add('  b: boolean;');
   Add('begin');
   Add('  b:=c=''1'';');
@@ -8702,7 +8696,7 @@ begin
   StartProgram(false);
   Add([
   'var',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  i: longint;',
   '  s: string;',
   'begin',
@@ -8817,7 +8811,7 @@ begin
   StartProgram(false);
   Add([
   'const',
-  '  a: AnsiChar = #$D87E;',
+  '  a: char = #$D87E;',
   '  b: string = #$D87E;',
   '  c: string = #$D87E#43;',
   'begin',
@@ -8993,7 +8987,7 @@ begin
   Add([
   'var',
   '  s: string;',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  b: boolean;',
   'begin',
   '  b:= s[1] = c;',
@@ -9146,7 +9140,7 @@ begin
   'const',
   '  crg: TCharRg = ''b'';',
   'var',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  crg2: TCharRg2;',
   '  s: TSetOfCharRg;',
   'begin',
@@ -9185,14 +9179,14 @@ procedure TTestModule.TestWideChar;
 begin
   StartProgram(false);
   Add([
-  'procedure Fly(var c: AnsiChar);',
+  'procedure Fly(var c: char);',
   'begin',
   'end;',
   'procedure Run(var c: widechar);',
   'begin',
   'end;',
   'var',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  wc: widechar;',
   '  w: word;',
   'begin',
@@ -9241,7 +9235,7 @@ procedure TTestModule.TestForCharDo;
 begin
   StartProgram(false);
   Add([
-  'var c: AnsiChar;',
+  'var c: char;',
   'begin',
   '  for c:=''a'' to ''c'' do ;',
   '  for c:=c downto ''a'' do ;',
@@ -9263,22 +9257,22 @@ begin
   StartProgram(false);
   Add([
   'type',
-  '  TSetOfChar = set of AnsiChar;',
+  '  TSetOfChar = set of char;',
   '  TCharRg = ''a''..''z'';',
   '  TSetOfCharRg = set of TCharRg;',
   'const Foo = ''foo'';',
   'var',
-  '  c,c2: AnsiChar;',
+  '  c,c2: char;',
   '  s: string;',
-  '  a1: array of AnsiChar;',
-  '  a2: array[1..3] of AnsiChar;',
+  '  a1: array of char;',
+  '  a2: array[1..3] of char;',
   '  soc: TSetOfChar;',
   '  socr: TSetOfCharRg;',
   '  cr: TCharRg;',
   'begin',
   '  for c in foo do ;',
   '  for c in s do ;',
-  '  for c in AnsiChar do ;',
+  '  for c in char do ;',
   '  for c in a1 do ;',
   '  for c in a2 do ;',
   '  for c in [''1''..''3''] do ;',
@@ -9349,7 +9343,7 @@ begin
   Add('procedure p1(i: longint = 1);');
   Add('begin');
   Add('end;');
-  Add('procedure p2(i: longint = 1; c: AnsiChar = ''a'');');
+  Add('procedure p2(i: longint = 1; c: char = ''a'');');
   Add('begin');
   Add('end;');
   Add('procedure p3(d: double = 1.0; b: boolean = false; s: string = ''abc'');');
@@ -10041,7 +10035,7 @@ procedure TTestModule.TestCaseOfChar;
 begin
   StartProgram(false);
   Add([
-  'var s,h: AnsiChar;',
+  'var s,h: char;',
   'begin',
   '  case s of',
   '  ''a''..''z'': h:=s;',
@@ -10398,16 +10392,16 @@ begin
   StartProgram(false);
   Add([
   'type',
-  '  TChars = array[AnsiChar] of AnsiChar;',
-  '  TChars2 = array[''a''..''z''] of AnsiChar;',
+  '  TChars = array[char] of char;',
+  '  TChars2 = array[''a''..''z''] of char;',
   'var',
   '  Arr: TChars;',
   '  Arr2: TChars2;',
-  '  Arr3: array[2..4] of AnsiChar = (''p'',''a'',''s'');',
-  '  Arr4: array[11..13] of AnsiChar = ''pas'';',
-  '  Arr5: array[21..22] of AnsiChar = ''äö'';',
-  '  Arr6: array[31..32] of AnsiChar = ''ä''+''ö'';',
-  '  c: AnsiChar;',
+  '  Arr3: array[2..4] of char = (''p'',''a'',''s'');',
+  '  Arr4: array[11..13] of char = ''pas'';',
+  '  Arr5: array[21..22] of char = ''äö'';',
+  '  Arr6: array[31..32] of char = ''ä''+''ö'';',
+  '  c: char;',
   '  b: boolean;',
   'begin',
   '  c:=low(arr);',
@@ -11262,12 +11256,12 @@ procedure TTestModule.TestArray_ArrayOfCharAssignString;
 begin
   StartProgram(false);
   Add([
-  'type TArr = array of AnsiChar;',
+  'type TArr = array of char;',
   'var',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  s: string;',
   '  a: TArr;',
-  'procedure Run(const a: array of AnsiChar);',
+  'procedure Run(const a: array of char);',
   'begin',
   '  Run(c);',
   '  Run(s);',
@@ -11802,7 +11796,7 @@ begin
   '  Aliases: TarrStr = (''foo'',''b'');',
   '  OneInt: TArrInt = (7);',
   '  OneStr: array of integer = (7);',
-  '  Chars: array of AnsiChar = ''aoc'';',
+  '  Chars: array of char = ''aoc'';',
   '  Names: array of string = (''a'',''foo'');',
   '  NameCount = low(Names)+high(Names)+length(Names);',
   'var i: integer;',
@@ -11859,7 +11853,7 @@ begin
   '  Aliases: TarrStr = [''foo'',''b''];',
   '  OneInt: TArrInt = [7];',
   '  OneStr: array of integer = [7]+[8];',
-  '  Chars: array of AnsiChar = ''aoc'';',
+  '  Chars: array of char = ''aoc'';',
   '  Names: array of string = [''a'',''a''];',
   '  NameCount = low(Names)+high(Names)+length(Names);',
   'begin',
@@ -14779,7 +14773,7 @@ begin
   Add('  end;');
   Add('  TA = class');
   Add('    constructor Create; override;');
-  Add('    constructor CreateWithC(c: AnsiChar);');
+  Add('    constructor CreateWithC(c: char);');
   Add('    procedure DoIt;');
   Add('    class function DoSome: TObject;');
   Add('  end;');
@@ -14798,7 +14792,7 @@ begin
   Add('  inherited create; // normal call TObject.Create');
   Add('  inherited createwithb(false); // normal call TObject.CreateWithB');
   Add('end;');
-  Add('constructor ta.createwithc(c: AnsiChar);');
+  Add('constructor ta.createwithc(c: char);');
   Add('begin');
   Add('  inherited create; // call TObject.Create');
   Add('  inherited createwithb(true); // call TObject.CreateWithB');
@@ -27297,7 +27291,7 @@ begin
   '  TStringHelper = type helper for string',
   '    procedure DoIt(e: byte = 123);',
   '  end;',
-  '  TCharHelper = type helper for AnsiChar',
+  '  TCharHelper = type helper for char',
   '    procedure Fly;',
   '  end;',
   'procedure TStringHelper.DoIt(e: byte);',
@@ -29847,14 +29841,14 @@ begin
   Add('  TYesNo = boolean;');
   Add('  TFloat = double;');
   Add('  TCaption = string;');
-  Add('  TChar = AnsiChar;');
+  Add('  TChar = char;');
   Add('var');
   Add('  v: jsvalue;');
   Add('  i: integer;');
   Add('  s: TCaption;');
   Add('  b: TYesNo;');
   Add('  d: TFloat;');
-  Add('  c: AnsiChar;');
+  Add('  c: char;');
   Add('begin');
   Add('  i:=longint(v);');
   Add('  i:=integer(v);');
@@ -29864,7 +29858,7 @@ begin
   Add('  b:=TYesNo(v);');
   Add('  d:=double(v);');
   Add('  d:=TFloat(v);');
-  Add('  c:=AnsiChar(v);');
+  Add('  c:=char(v);');
   Add('  c:=TChar(v);');
   ConvertProgram;
   CheckSource('TestJSValue_TypeCastToBaseType',
@@ -29942,7 +29936,7 @@ begin
   Add('  TYesNo = boolean;');
   Add('  TFloat = double;');
   Add('  TCaption = string;');
-  Add('  TChar = AnsiChar;');
+  Add('  TChar = char;');
   Add('  TMulti = JSValue;');
   Add('var');
   Add('  v: jsvalue;');
@@ -29950,7 +29944,7 @@ begin
   Add('  s: TCaption;');
   Add('  b: TYesNo;');
   Add('  d: TFloat;');
-  Add('  c: AnsiChar;');
+  Add('  c: char;');
   Add('  m: TMulti;');
   Add('begin');
   Add('  b:=v=v;');
@@ -30325,7 +30319,7 @@ begin
   Add('  TYesNo = boolean;');
   Add('  TFloat = double;');
   Add('  TCaption = string;');
-  Add('  TChar = AnsiChar;');
+  Add('  TChar = char;');
   Add('function DoIt(a: jsvalue; const b: jsvalue; var c: jsvalue; out d: jsvalue): jsvalue;');
   Add('var');
   Add('  l: jsvalue;');
@@ -30919,12 +30913,12 @@ begin
   Add([
   'type',
   '  uni = string;',
-  '  WChar = AnsiChar;',
+  '  WChar = char;',
   'procedure DoIt(s: string); begin end;',
   'procedure DoIt(v: jsvalue); begin end;',
   'var',
   '  s: string;',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  u: uni;',
   'begin',
   '  DoIt(s);',
@@ -30955,12 +30949,12 @@ begin
   Add([
   'type',
   '  uni = string;',
-  '  WChar = AnsiChar;',
-  'procedure DoIt(c: AnsiChar); begin end;',
+  '  WChar = char;',
+  'procedure DoIt(c: char); begin end;',
   'procedure DoIt(v: jsvalue); begin end;',
   'var',
   '  s: string;',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  u: uni;',
   'begin',
   '  DoIt(s);',
@@ -31115,7 +31109,7 @@ begin
   Add('  TProcA = procedure;');
   Add('  TMethodB = procedure of object;');
   Add('  TProcC = procedure; varargs;');
-  Add('  TProcD = procedure(i: longint; const j: string; var c: AnsiChar; out d: double);');
+  Add('  TProcD = procedure(i: longint; const j: string; var c: char; out d: double);');
   Add('  TProcE = function: nativeint;');
   Add('  TProcF = function(const p: TProcA): nativeuint;');
   Add('var p: pointer;');
@@ -31135,7 +31129,7 @@ begin
     '  procsig: rtl.newTIProcSig([], null, 2)',
     '});',
     'this.$rtti.$ProcVar("TProcD", {',
-    '  procsig: rtl.newTIProcSig([["i", rtl.longint], ["j", rtl.string, 2], ["c", rtl.AnsiChar, 1], ["d", rtl.double, 4]])',
+    '  procsig: rtl.newTIProcSig([["i", rtl.longint], ["j", rtl.string, 2], ["c", rtl.char, 1], ["d", rtl.double, 4]])',
     '});',
     'this.$rtti.$ProcVar("TProcE", {',
     '  procsig: rtl.newTIProcSig([], rtl.nativeint)',
@@ -31200,7 +31194,7 @@ begin
   '  ProcA: procedure;',
   '  MethodB: procedure of object;',
   '  ProcC: procedure; varargs;',
-  '  ProcD: procedure(i: longint; const j: string; var c: AnsiChar; out d: double);',
+  '  ProcD: procedure(i: longint; const j: string; var c: char; out d: double);',
   '  ProcE: function: nativeint;',
   '  p: pointer;',
   'begin',
@@ -31222,7 +31216,7 @@ begin
     '});',
     'this.ProcC = null;',
     'this.$rtti.$ProcVar("ProcD$a", {',
-    '  procsig: rtl.newTIProcSig([["i", rtl.longint], ["j", rtl.string, 2], ["c", rtl.AnsiChar, 1], ["d", rtl.double, 4]])',
+    '  procsig: rtl.newTIProcSig([["i", rtl.longint], ["j", rtl.string, 2], ["c", rtl.char, 1], ["d", rtl.double, 4]])',
     '});',
     'this.ProcD = null;',
     'this.$rtti.$ProcVar("ProcE$a", {',
@@ -31578,7 +31572,7 @@ begin
   Add('    FPropA: string;');
   Add('  published');
   Add('    VarLI: longint;');
-  Add('    VarC: AnsiChar;');
+  Add('    VarC: char;');
   Add('    VarS: string;');
   Add('    VarD: double;');
   Add('    VarB: boolean;');
@@ -31621,7 +31615,7 @@ begin
     '  };',
     '  var $r = this.$rtti;',
     '  $r.addField("VarLI", rtl.longint);',
-    '  $r.addField("VarC", rtl.AnsiChar);',
+    '  $r.addField("VarC", rtl.char);',
     '  $r.addField("VarS", rtl.string);',
     '  $r.addField("VarD", rtl.double);',
     '  $r.addField("VarB", rtl.boolean);',
@@ -31804,11 +31798,11 @@ begin
   Add('  private');
   Add('    function GetItems(i: integer): tobject; virtual; abstract;');
   Add('    procedure SetItems(i: integer; value: tobject); virtual; abstract;');
-  Add('    function GetValues(const i: integer; var b: boolean): AnsiChar; virtual; abstract;');
-  Add('    procedure SetValues(const i: integer; var b: boolean; value: AnsiChar); virtual; abstract;');
+  Add('    function GetValues(const i: integer; var b: boolean): char; virtual; abstract;');
+  Add('    procedure SetValues(const i: integer; var b: boolean; value: char); virtual; abstract;');
   Add('  published');
   Add('    property Items[Index: integer]: tobject read getitems write setitems;');
-  Add('    property Values[const keya: integer; var keyb: boolean]: AnsiChar read getvalues write setvalues;');
+  Add('    property Values[const keya: integer; var keyb: boolean]: char read getvalues write setvalues;');
   Add('  end;');
   Add('begin');
   ConvertProgram;
@@ -31821,7 +31815,7 @@ begin
     '  };',
     '  var $r = this.$rtti;',
     '  $r.addProperty("Items", 3, $r, "GetItems", "SetItems");',
-    '  $r.addProperty("Values", 3, rtl.AnsiChar, "GetValues", "SetValues");',
+    '  $r.addProperty("Values", 3, rtl.char, "GetValues", "SetValues");',
     '});',
     '']),
     LinesToStr([ // $mod.$main
@@ -32693,7 +32687,7 @@ begin
   StartProgram(false);
   Add('type');
   Add('  TFloatRec = record');
-  Add('    c,d: array of AnsiChar;');
+  Add('    c,d: array of char;');
   // Add('    i: array of array of longint;');
   Add('  end;');
   Add('var p: pointer;');
@@ -32722,7 +32716,7 @@ begin
     '  };',
     '  var $r = $mod.$rtti.$Record("TFloatRec", {});',
     '  $mod.$rtti.$DynArray("TFloatRec.d$a", {',
-    '    eltype: rtl.AnsiChar',
+    '    eltype: rtl.char',
     '  });',
     '  $r.addField("c", $mod.$rtti["TFloatRec.d$a"]);',
     '  $r.addField("d", $mod.$rtti["TFloatRec.d$a"]);',
@@ -32818,7 +32812,7 @@ begin
   'type',
   '  TCaption = string;',
   '  TYesNo = boolean;',
-  '  TLetter = AnsiChar;',
+  '  TLetter = char;',
   '  TFloat = double;',
   '  TPtr = pointer;',
   '  TShortInt = shortint;',
@@ -32834,7 +32828,7 @@ begin
   '  p:=typeinfo(tcaption);',
   '  p:=typeinfo(boolean);',
   '  p:=typeinfo(tyesno);',
-  '  p:=typeinfo(AnsiChar);',
+  '  p:=typeinfo(char);',
   '  p:=typeinfo(tletter);',
   '  p:=typeinfo(double);',
   '  p:=typeinfo(tfloat);',
@@ -32863,8 +32857,8 @@ begin
     '$mod.p = rtl.string;',
     '$mod.p = rtl.boolean;',
     '$mod.p = rtl.boolean;',
-    '$mod.p = rtl.AnsiChar;',
-    '$mod.p = rtl.AnsiChar;',
+    '$mod.p = rtl.char;',
+    '$mod.p = rtl.char;',
     '$mod.p = rtl.double;',
     '$mod.p = rtl.double;',
     '$mod.p = rtl.pointer;',
@@ -32892,7 +32886,7 @@ begin
   'type',
   '  TCaption = type string;',
   '  TYesNo = type boolean;',
-  '  TLetter = type AnsiChar;',
+  '  TLetter = type char;',
   '  TFloat = type double;',
   '  TPtr = type pointer;',
   '  TShortInt = type shortint;',
@@ -32926,7 +32920,7 @@ begin
     LinesToStr([ // statements
     'this.$rtti.$inherited("TCaption", rtl.string, {});',
     'this.$rtti.$inherited("TYesNo", rtl.boolean, {});',
-    'this.$rtti.$inherited("TLetter", rtl.AnsiChar, {});',
+    'this.$rtti.$inherited("TLetter", rtl.char, {});',
     'this.$rtti.$inherited("TFloat", rtl.double, {});',
     'this.$rtti.$inherited("TPtr", rtl.pointer, {});',
     'this.$rtti.$inherited("TShortInt", rtl.shortint, {});',
@@ -32993,7 +32987,7 @@ begin
   'begin',
   '  ti:=typeinfo(string);',
   '  ti:=typeinfo(boolean);',
-  '  ti:=typeinfo(AnsiChar);',
+  '  ti:=typeinfo(char);',
   '  ti:=typeinfo(double);',
   '  tiInt:=typeinfo(shortint);',
   '  tiInt:=typeinfo(byte);',
@@ -33030,7 +33024,7 @@ begin
     LinesToStr([ // $mod.$main
     '$mod.ti = rtl.string;',
     '$mod.ti = rtl.boolean;',
-    '$mod.ti = rtl.AnsiChar;',
+    '$mod.ti = rtl.char;',
     '$mod.ti = rtl.double;',
     '$mod.tiInt = rtl.shortint;',
     '$mod.tiInt = rtl.byte;',
@@ -33621,7 +33615,7 @@ begin
   '  Red = ''red'';',
   '  Foobar = ''fOo''+bar;',
   'var s: string;',
-  '  c: AnsiChar;',
+  '  c: char;',
   'begin',
   '  s:=red;',
   '  s:=test1.red;',
@@ -34403,7 +34397,7 @@ begin
   Add([
   '{$R+}',
   'type',
-  '  TLetter = AnsiChar;',
+  '  TLetter = char;',
   'var',
   '  b: TLetter = ''2'';',
   '  w: TLetter = ''3'';',
@@ -34509,7 +34503,7 @@ begin
   '  ArrChar: TArrChar;',
   '  ArrByteChar: TArrByteChar;',
   '  i: Ten;',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  o: tobject;',
   'begin',
   '  i:=Arr[1];',
@@ -34643,7 +34637,7 @@ begin
   'var',
   '  s: string;',
   '  i: longint;',
-  '  c: AnsiChar;',
+  '  c: char;',
   '  o: tobject;',
   'begin',
   '  c:=s[1];',

+ 2 - 2
packages/pastojs/tests/tcoptimizations.pas

@@ -2535,7 +2535,7 @@ begin
   StartProgram(true);
   Add([
   'type',
-  '  TArrA = array of AnsiChar;',
+  '  TArrA = array of char;',
   '  TArrB = array of string;',
   '  TObject = class',
   '  public',
@@ -2586,7 +2586,7 @@ begin
   WithTypeInfo:=true;
   StartProgram(true);
   Add('type');
-  Add('  TArrA = array of AnsiChar;');
+  Add('  TArrA = array of char;');
   Add('  TArrB = array of string;');
   Add('var');
   Add('  A: TArrA;');

+ 11 - 11
packages/pastojs/tests/tcsrcmap.pas

@@ -153,7 +153,7 @@ var
 var
   i, j, ColMin, ColMax: integer;
   Line, aName, SegFile, ActLine: String;
-  p, StartP, ActP: PAnsiChar;
+  p, StartP, ActP: PChar;
   m: PMarker;
   aSeg: TSourceMapSegment;
 begin
@@ -184,26 +184,26 @@ begin
     for i:=1 to PasSrc.Count do
       begin
       Line:=PasSrc[i-1];
-      p:=PAnsiChar(Line);
+      p:=PChar(Line);
       repeat
         case p^ of
         #0: break;
         '(':
           if (p[1]='*') and (p[2] in ['a'..'z','A'..'Z','_']) then
             begin
-            ColMin:=p-PAnsiChar(Line);
+            ColMin:=p-PChar(Line);
             inc(p,2);
             StartP:=p;
             while p^ in ['a'..'z','A'..'Z','0'..'9','_'] do inc(p);
-            aName:=copy(Line,StartP-PAnsiChar(Line)+1,p-StartP);
+            aName:=copy(Line,StartP-PChar(Line)+1,p-StartP);
             if (p^<>'*') or (p[1]<>')') then
               begin
               for j:=1 to i do
                 writeln(PasSrc[j-1]);
-              Fail('missing closing bracket of Pascal marker at '+IntToStr(i)+','+IntToStr(p-PAnsiChar(Line)));
+              Fail('missing closing bracket of Pascal marker at '+IntToStr(i)+','+IntToStr(p-PChar(Line)));
               end;
             inc(p,2);
-            ColMax:=p-PAnsiChar(Line);
+            ColMax:=p-PChar(Line);
             AddMarker(aName,i,ColMin,ColMax);
             continue;
             end;
@@ -221,20 +221,20 @@ begin
         writeln('TCustomTestSrcMap.CheckSrcMap unexpected JS line ',i,': ',ActLine);
         Fail('created JS has more lines than expected JS');
         end;
-      ActP:=PAnsiChar(ActLine);
+      ActP:=PChar(ActLine);
       Line:=JSLines[i-1];
-      p:=PAnsiChar(Line);
+      p:=PChar(Line);
       repeat
         case p^ of
         #0: break;
         '(':
           if (p[1]='*') and (p[2] in ['a'..'z','A'..'Z','_']) then
             begin
-            ColMin:=ActP-PAnsiChar(ActLine);
+            ColMin:=ActP-PChar(ActLine);
             inc(p,2);
             StartP:=p;
             while p^ in ['a'..'z','A'..'Z','0'..'9','_'] do inc(p);
-            aName:=copy(Line,StartP-PAnsiChar(Line)+1,p-StartP);
+            aName:=copy(Line,StartP-PChar(Line)+1,p-StartP);
             if (p^<>'*') or (p[1]<>')') then
               begin
               for j:=1 to i do
@@ -265,7 +265,7 @@ begin
           writeln('JavaScript: ');
           for j:=0 to i-1 do
             writeln(JSSource[j]);
-          for j:=1 to P-PAnsiChar(Line) do write('-');
+          for j:=1 to P-PChar(Line) do write('-');
           writeln('^');
           writeln('Expected JS:<',Line,'>');
           AssertEquals('Expected JavaScript differs',p^,ActP^);

+ 12 - 2
packages/pastojs/tests/testpas2js.lpi

@@ -29,6 +29,14 @@
         <Mode0 Name="default"/>
       </Modes>
     </RunParams>
+    <RequiredPackages Count="2">
+      <Item1>
+        <PackageName Value="FPCUnitConsoleRunner"/>
+      </Item1>
+      <Item2>
+        <PackageName Value="FCL"/>
+      </Item2>
+    </RequiredPackages>
     <Units Count="14">
       <Unit0>
         <Filename Value="testpas2js.pp"/>
@@ -120,8 +128,10 @@
       <VerifyObjMethodCallValidity Value="True"/>
     </CodeGeneration>
     <Other>
-      <CustomOptions Value="-dVerbosePas2JS 
--tunicodertl"/>
+      <CustomOptions Value="-dVerbosePas2JS"/>
+      <OtherDefines Count="1">
+        <Define0 Value="VerbosePas2JS"/>
+      </OtherDefines>
     </Other>
   </CompilerOptions>
   <Debugging>

+ 0 - 3
packages/pastojs/tests/testpas2js.pp

@@ -18,9 +18,6 @@ program testpas2js;
 {$mode objfpc}{$H+}
 
 uses
-  {$ifdef unix}
-  cwstring,
-  {$endif}
   {$IFDEF EnableMemCheck}
   MemCheck,
   {$ENDIF}