Browse Source

* PChar -> PAnsiChar

Michaël Van Canneyt 2 years ago
parent
commit
0c7d351c8f

+ 103 - 80
packages/webidl/src/webidlscanner.pp

@@ -23,6 +23,12 @@ uses SysUtils, Classes;
 
 
 
 
 type
 type
+{$IF SIZEOF(CHAR)=2}
+  TIDLString = String;
+{$ELSE}
+  TIDLString = UT8String;
+{$ENDIF}
+
   EWebIDLError = class(Exception);
   EWebIDLError = class(Exception);
 
 
   TWebIDLVersion = (v1,v2);
   TWebIDLVersion = (v1,v2);
@@ -38,7 +44,7 @@ type
     );
     );
   TMessageTypes = set of TMessageType;
   TMessageTypes = set of TMessageType;
 
 
-  TMessageArgs = array of string;
+  TMessageArgs = array of TIDLString;
   TIDLToken = (
   TIDLToken = (
     tkEOF,
     tkEOF,
     tkUnknown ,
     tkUnknown ,
@@ -114,7 +120,7 @@ type
     tkvoid,
     tkvoid,
     tkShort,
     tkShort,
     tkSequence,
     tkSequence,
-    //tkStringToken, Mattias: there is no string token in webidl
+    //tkStringToken, Mattias: there is no TIDLString token in webidl
     tkMixin,
     tkMixin,
     tkIncludes,
     tkIncludes,
     tkMapLike,
     tkMapLike,
@@ -142,8 +148,8 @@ Type
   TMaxFloat = double;
   TMaxFloat = double;
 
 
   TDirectiveEvaluator = class;
   TDirectiveEvaluator = class;
-  TDirectiveEvalVarEvent = function(Sender: TDirectiveEvaluator; Name: String; out Value: string): boolean of object;
-  TDirectiveEvalFunctionEvent = function(Sender: TDirectiveEvaluator; Name, Param: String; out Value: string): boolean of object;
+  TDirectiveEvalVarEvent = function(Sender: TDirectiveEvaluator; Name: TIDLString; out Value: TIDLString): boolean of object;
+  TDirectiveEvalFunctionEvent = function(Sender: TDirectiveEvaluator; Name, Param: TIDLString; out Value: TIDLString): boolean of object;
   TDirectiveEvalLogEvent = procedure(Sender: TDirectiveEvaluator; Args : Array of const) of object;
   TDirectiveEvalLogEvent = procedure(Sender: TDirectiveEvaluator; Args : Array of const) of object;
 
 
   { TDirectiveEvaluator }
   { TDirectiveEvaluator }
@@ -178,15 +184,15 @@ Type
       TStackItem = record
       TStackItem = record
         Level: TPrecedenceLevel;
         Level: TPrecedenceLevel;
         Operathor: TDirectiveToken;
         Operathor: TDirectiveToken;
-        Operand: String;
+        Operand: TIDLString;
         OperandPos: PChar;
         OperandPos: PChar;
       end;
       end;
     const
     const
-      BoolValues: array[boolean] of string = (
+      BoolValues: array[boolean] of TIDLString = (
         '0', // false
         '0', // false
         '1'  // true  Note: True is <>'0'
         '1'  // true  Note: True is <>'0'
         );
         );
-      dtNames: array[TDirectiveToken] of string = (
+      dtNames: array[TDirectiveToken] of TIDLString = (
         'EOF',
         'EOF',
         'Identifier',
         'Identifier',
         'Integer',
         'Integer',
@@ -207,27 +213,27 @@ Type
     FTokenEnd: PChar;
     FTokenEnd: PChar;
     FStack: array of TStackItem;
     FStack: array of TStackItem;
     FStackTop: Integer;
     FStackTop: Integer;
-    function IsFalse(const Value: String): boolean;
-    function IsTrue(const Value: String): boolean;
-    function IsInteger(const Value: String; out i: TMaxPrecInt): boolean;
-    function IsFloat(const Value: String; out e: TMaxFloat): boolean;
+    function IsFalse(const Value: TIDLString): boolean;
+    function IsTrue(const Value: TIDLString): boolean;
+    function IsInteger(const Value: TIDLString; out i: TMaxPrecInt): boolean;
+    function IsFloat(const Value: TIDLString; out e: TMaxFloat): boolean;
     procedure NextToken;
     procedure NextToken;
     procedure Log(aMsgType: TMessageType; aMsgNumber: integer;
     procedure Log(aMsgType: TMessageType; aMsgNumber: integer;
       const aMsgFmt: String; const Args: array of const; MsgPos: PChar = nil);
       const aMsgFmt: String; const Args: array of const; MsgPos: PChar = nil);
-    procedure LogXExpectedButTokenFound(const X: String; ErrorPos: PChar = nil);
+    procedure LogXExpectedButTokenFound(const X: TIDLString; ErrorPos: PChar = nil);
     procedure ReadOperand(Skip: boolean = false); // unary operators plus one operand
     procedure ReadOperand(Skip: boolean = false); // unary operators plus one operand
     procedure ReadExpression; // binary operators
     procedure ReadExpression; // binary operators
     procedure ResolveStack(MinStackLvl: integer; Level: TPrecedenceLevel;
     procedure ResolveStack(MinStackLvl: integer; Level: TPrecedenceLevel;
       NewOperator: TDirectiveToken);
       NewOperator: TDirectiveToken);
-    function GetTokenString: String;
-    function GetStringLiteralValue: String; // read value of tkString
-    procedure Push(const AnOperand: String; OperandPosition: PChar);
+    function GetTokenString: TIDLString;
+    function GetStringLiteralValue: TIDLString; // read value of tkString
+    procedure Push(const AnOperand: TIDLString; OperandPosition: PChar);
   public
   public
     MsgLineNumber : Integer;
     MsgLineNumber : Integer;
     MsgPos: integer;
     MsgPos: integer;
     MsgNumber: integer;
     MsgNumber: integer;
     MsgType: TMessageType;
     MsgType: TMessageType;
-    MsgPattern: String; // Format parameter
+    MsgPattern: TIDLString; // Format parameter
     constructor Create;
     constructor Create;
     destructor Destroy; override;
     destructor Destroy; override;
     function Eval(const Expr: PChar; aLineNumber: integer): boolean;
     function Eval(const Expr: PChar; aLineNumber: integer): boolean;
@@ -242,13 +248,13 @@ Type
 
 
   TWebIDLScanner = class
   TWebIDLScanner = class
   private
   private
-    FCurFile: UTF8String;
+    FCurFile: TIDLString;
     FEvaluator: TDirectiveEvaluator;
     FEvaluator: TDirectiveEvaluator;
     FSource : TStringList;
     FSource : TStringList;
     FCurRow: Integer;
     FCurRow: Integer;
     FCurToken: TIDLToken;
     FCurToken: TIDLToken;
-    FCurTokenString: UTF8string;
-    FCurLine: UTF8string;
+    FCurTokenString: TIDLString;
+    FCurLine: TIDLString;
     FVersion: TWebIDLVersion;
     FVersion: TWebIDLVersion;
     TokenStr: PChar;
     TokenStr: PChar;
     // Preprocessor #IFxxx skipping data
     // Preprocessor #IFxxx skipping data
@@ -261,19 +267,19 @@ Type
     function DetermineToken2: TIDLToken;
     function DetermineToken2: TIDLToken;
     function FetchLine: Boolean;
     function FetchLine: Boolean;
     function GetCurColumn: Integer;
     function GetCurColumn: Integer;
-    function OnEvalFunction(Sender: TDirectiveEvaluator; Name, Param: String;
-      out Value: string): boolean;
+    function OnEvalFunction(Sender: TDirectiveEvaluator; Name, Param: TIDLString;
+      out Value: TIDLString): boolean;
     procedure OnEvalLog(Sender: TDirectiveEvaluator; Args: array of const);
     procedure OnEvalLog(Sender: TDirectiveEvaluator; Args: array of const);
-    function OnEvalVar(Sender: TDirectiveEvaluator; Name: String; out
-      Value: string): boolean;
-    function ReadComment: UTF8String;
-    function ReadIdent: UTF8String;
-    function ReadNumber(var S: UTF8String): TIDLToken;
+    function OnEvalVar(Sender: TDirectiveEvaluator; Name: TIDLString; out
+      Value: TIDLString): boolean;
+    function ReadComment: TIDLString;
+    function ReadIdent: TIDLString;
+    function ReadNumber(var S: TIDLString): TIDLToken;
   protected
   protected
-    Function GetErrorPos : String;
-    procedure Error(const Msg: string);overload;
-    procedure Error(const Msg: string; Const Args: array of Const);overload;
-    function ReadString: UTF8String; virtual;
+    Function GetErrorPos : TIDLString;
+    procedure Error(const Msg: String);overload;
+    procedure Error(const Msg: String; Const Args: array of Const);overload;
+    function ReadString: TIDLString; virtual;
     function DoFetchToken: TIDLToken;
     function DoFetchToken: TIDLToken;
     procedure HandleDirective; virtual;
     procedure HandleDirective; virtual;
     procedure HandleIfDef; virtual;
     procedure HandleIfDef; virtual;
@@ -282,31 +288,31 @@ Type
     procedure HandleElse; virtual;
     procedure HandleElse; virtual;
     procedure HandleEndIf; virtual;
     procedure HandleEndIf; virtual;
     procedure PushSkipMode; virtual;
     procedure PushSkipMode; virtual;
-    function IsDefined(const aName: string): boolean; virtual;
+    function IsDefined(const aName: TIDLString): boolean; virtual;
     procedure SkipWhitespace;
     procedure SkipWhitespace;
     procedure SkipLineBreak;
     procedure SkipLineBreak;
     procedure Init; virtual;
     procedure Init; virtual;
   public
   public
     constructor Create(Source: TStream); overload;
     constructor Create(Source: TStream); overload;
-    constructor Create(const Source: UTF8String); overload;
-    constructor CreateFile(const aFileName: UTF8String);
+    constructor Create(const Source: TIDLString); overload;
+    constructor CreateFile(const aFileName: TIDLString);
     destructor Destroy; override;
     destructor Destroy; override;
     function FetchToken: TIDLToken;
     function FetchToken: TIDLToken;
 
 
-    property CurLine: UTF8String read FCurLine;
+    property CurLine: TIDLString read FCurLine;
     property CurRow: Integer read FCurRow;
     property CurRow: Integer read FCurRow;
     property CurColumn: Integer read GetCurColumn;
     property CurColumn: Integer read GetCurColumn;
-    property CurFile: UTF8String read FCurFile write FCurFile;
+    property CurFile: TIDLString read FCurFile write FCurFile;
 
 
     property CurToken: TIDLToken read FCurToken;
     property CurToken: TIDLToken read FCurToken;
-    property CurTokenString: UTF8String read FCurTokenString;
+    property CurTokenString: TIDLString read FCurTokenString;
     property Version : TWebIDLVersion Read FVersion Write FVersion;
     property Version : TWebIDLVersion Read FVersion Write FVersion;
 
 
     property Evaluator: TDirectiveEvaluator read FEvaluator;
     property Evaluator: TDirectiveEvaluator read FEvaluator;
   end;
   end;
 
 
 const
 const
-  TokenInfos: array[TIDLToken] of string = (
+  TokenInfos: array[TIDLToken] of TIDLString = (
   '',
   '',
   '',
   '',
   '',
   '',
@@ -381,7 +387,7 @@ const
   'void',
   'void',
   'short',
   'short',
   'sequence',
   'sequence',
-  //'string',
+  //'TIDLString',
   'mixin',
   'mixin',
   'includes',
   'includes',
   'maplike',
   'maplike',
@@ -402,7 +408,7 @@ Resourcestring
   SErrUnknownTerminator = 'Unknown terminator: "%s"';
   SErrUnknownTerminator = 'Unknown terminator: "%s"';
   SErrInvalidCharacter = 'Invalid character at line %d, pos %d: ''%s''';
   SErrInvalidCharacter = 'Invalid character at line %d, pos %d: ''%s''';
   SUnterminatedComment = 'Unterminated comment at line %d, pos %d: ''%s''';
   SUnterminatedComment = 'Unterminated comment at line %d, pos %d: ''%s''';
-  SErrOpenString = 'string exceeds end of line';
+  SErrOpenString = 'TIDLString exceeds end of line';
   SErrInvalidEllipsis = 'Invalid ellipsis token';
   SErrInvalidEllipsis = 'Invalid ellipsis token';
   SErrUnknownToken = 'Unknown token, expected number or minus : "%s"';
   SErrUnknownToken = 'Unknown token, expected number or minus : "%s"';
   SErrXExpectedButYFound = '"%s" expected, but "%s" found';
   SErrXExpectedButYFound = '"%s" expected, but "%s" found';
@@ -412,6 +418,15 @@ Resourcestring
   SErrInvalidCharacterX = 'Invalid character ''%s''';
   SErrInvalidCharacterX = 'Invalid character ''%s''';
   SErrUnknownDirectiveX = 'Unknown directive ''%s''';
   SErrUnknownDirectiveX = 'Unknown directive ''%s''';
 
 
+Function MakeString(P : PChar; Len : Integer) : TIDLString; inline;
+
+begin
+  Result:='';
+  SetLength(Result,Len);
+  Move(P^,Result[1],Len*Sizeof(Char));
+end;
+
+
 Function GetTokenName(aToken : TIDLToken) : String;
 Function GetTokenName(aToken : TIDLToken) : String;
 
 
 begin
 begin
@@ -440,17 +455,17 @@ end;
 
 
 { TDirectiveEvaluator }
 { TDirectiveEvaluator }
 
 
-function TDirectiveEvaluator.IsFalse(const Value: String): boolean;
+function TDirectiveEvaluator.IsFalse(const Value: TIDLString): boolean;
 begin
 begin
   Result:=Value=BoolValues[false];
   Result:=Value=BoolValues[false];
 end;
 end;
 
 
-function TDirectiveEvaluator.IsTrue(const Value: String): boolean;
+function TDirectiveEvaluator.IsTrue(const Value: TIDLString): boolean;
 begin
 begin
   Result:=Value<>BoolValues[false];
   Result:=Value<>BoolValues[false];
 end;
 end;
 
 
-function TDirectiveEvaluator.IsInteger(const Value: String; out i: TMaxPrecInt
+function TDirectiveEvaluator.IsInteger(const Value: TIDLString; out i: TMaxPrecInt
   ): boolean;
   ): boolean;
 var
 var
   Code: integer;
   Code: integer;
@@ -459,7 +474,7 @@ begin
   Result:=Code=0;
   Result:=Code=0;
 end;
 end;
 
 
-function TDirectiveEvaluator.IsFloat(const Value: String; out e: TMaxFloat
+function TDirectiveEvaluator.IsFloat(const Value: TIDLString; out e: TMaxFloat
   ): boolean;
   ): boolean;
 var
 var
   Code: integer;
   Code: integer;
@@ -615,7 +630,7 @@ begin
 end;
 end;
 
 
 procedure TDirectiveEvaluator.Log(aMsgType: TMessageType; aMsgNumber: integer;
 procedure TDirectiveEvaluator.Log(aMsgType: TMessageType; aMsgNumber: integer;
-  const aMsgFmt: String; const Args: array of const; MsgPos: PChar);
+  const aMsgFmt: TIDLString; const Args: array of const; MsgPos: PChar);
 begin
 begin
   if MsgPos=nil then
   if MsgPos=nil then
     MsgPos:=FTokenEnd;
     MsgPos:=FTokenEnd;
@@ -630,7 +645,7 @@ begin
   raise EWebIDLError.CreateFmt(MsgPattern+' at pos '+IntToStr(PtrInt(MsgPos-FExpr))+' line '+IntToStr(MsgLineNumber),Args);
   raise EWebIDLError.CreateFmt(MsgPattern+' at pos '+IntToStr(PtrInt(MsgPos-FExpr))+' line '+IntToStr(MsgLineNumber),Args);
 end;
 end;
 
 
-procedure TDirectiveEvaluator.LogXExpectedButTokenFound(const X: String;
+procedure TDirectiveEvaluator.LogXExpectedButTokenFound(const X: TIDLString;
   ErrorPos: PChar);
   ErrorPos: PChar);
 begin
 begin
   Log(mtError,nErrXExpectedButYFound,SErrXExpectedButYFound,
   Log(mtError,nErrXExpectedButYFound,SErrXExpectedButYFound,
@@ -651,7 +666,7 @@ procedure TDirectiveEvaluator.ReadOperand(Skip: boolean);
 var
 var
   i: TMaxPrecInt;
   i: TMaxPrecInt;
   e: TMaxFloat;
   e: TMaxFloat;
-  S, aName, Param: String;
+  S, aName, Param: TIDLString;
   Code: integer;
   Code: integer;
   p, NameStartP: PChar;
   p, NameStartP: PChar;
   Lvl: integer;
   Lvl: integer;
@@ -721,7 +736,7 @@ begin
       end;
       end;
     //tkString:
     //tkString:
     //  begin
     //  begin
-    //  // string literal
+    //  // TIDLString literal
     //  if not Skip then
     //  if not Skip then
     //    Push(GetStringLiteralValue,FTokenStart{$ifdef UsePChar}-PChar(Expression)+1{$endif});
     //    Push(GetStringLiteralValue,FTokenStart{$ifdef UsePChar}-PChar(Expression)+1{$endif});
     //  NextToken;
     //  NextToken;
@@ -899,7 +914,7 @@ end;
 procedure TDirectiveEvaluator.ResolveStack(MinStackLvl: integer;
 procedure TDirectiveEvaluator.ResolveStack(MinStackLvl: integer;
   Level: TPrecedenceLevel; NewOperator: TDirectiveToken);
   Level: TPrecedenceLevel; NewOperator: TDirectiveToken);
 var
 var
-  A, B, R: String;
+  A, B, R: TIDLString;
   Op: TDirectiveToken;
   Op: TDirectiveToken;
   AInt, BInt: TMaxPrecInt;
   AInt, BInt: TMaxPrecInt;
   AFloat, BFloat: TMaxFloat;
   AFloat, BFloat: TMaxFloat;
@@ -1047,16 +1062,20 @@ begin
   FStack[FStackTop].Level:=Level;
   FStack[FStackTop].Level:=Level;
 end;
 end;
 
 
-function TDirectiveEvaluator.GetTokenString: String;
+function TDirectiveEvaluator.GetTokenString: TIDLString;
+
 begin
 begin
-  SetString(Result,FTokenStart,FTokenEnd-FTokenStart);
+  Result:=MakeString(FTokenStart,FTokenEnd-FTokenStart);
 end;
 end;
 
 
-function TDirectiveEvaluator.GetStringLiteralValue: String;
+function TDirectiveEvaluator.GetStringLiteralValue: TIDLString;
 var
 var
   p, StartP: PChar;
   p, StartP: PChar;
-  s: string;
+  s: TIDLString;
+  len : Integer;
+
 begin
 begin
+  S:='';
   Result:='';
   Result:='';
   p:=FTokenStart;
   p:=FTokenStart;
   repeat
   repeat
@@ -1074,7 +1093,7 @@ begin
       until false;
       until false;
       if p>StartP then
       if p>StartP then
         begin
         begin
-        SetString(s,StartP,p-StartP);
+        S:=MakeString(StartP,p-StartP);
         Result:=Result+s;
         Result:=Result+s;
         end;
         end;
       inc(p);
       inc(p);
@@ -1085,7 +1104,7 @@ begin
   until false;
   until false;
 end;
 end;
 
 
-procedure TDirectiveEvaluator.Push(const AnOperand: String;
+procedure TDirectiveEvaluator.Push(const AnOperand: TIDLString;
   OperandPosition: PChar);
   OperandPosition: PChar);
 begin
 begin
   inc(FStackTop);
   inc(FStackTop);
@@ -1134,13 +1153,13 @@ begin
   FSource.LoadFromStream(Source);
   FSource.LoadFromStream(Source);
 end;
 end;
 
 
-constructor TWebIDLScanner.Create(const Source: UTF8String);
+constructor TWebIDLScanner.Create(const Source: TIDLString);
 begin
 begin
   Init;
   Init;
   FSource.Text:=Source;
   FSource.Text:=Source;
 end;
 end;
 
 
-constructor TWebIDLScanner.CreateFile(const aFileName: UTF8String);
+constructor TWebIDLScanner.CreateFile(const aFileName: TIDLString);
 begin
 begin
   Init;
   Init;
   FSource.LoadFromFile(aFileName);
   FSource.LoadFromFile(aFileName);
@@ -1160,22 +1179,22 @@ begin
   Result:=DoFetchToken;
   Result:=DoFetchToken;
 end;
 end;
 
 
-procedure TWebIDLScanner.Error(const Msg: string);
+procedure TWebIDLScanner.Error(const Msg: String);
 begin
 begin
   raise EWebIDLScanner.Create(GetErrorPos+Msg);
   raise EWebIDLScanner.Create(GetErrorPos+Msg);
 end;
 end;
 
 
-procedure TWebIDLScanner.Error(const Msg: string; const Args: array of const);
+procedure TWebIDLScanner.Error(const Msg: String; const Args: array of const);
 begin
 begin
   raise EWebIDLScanner.Create(GetErrorPos+Format(Msg, Args));
   raise EWebIDLScanner.Create(GetErrorPos+Format(Msg, Args));
 end;
 end;
 
 
-function TWebIDLScanner.ReadString : UTF8String;
+function TWebIDLScanner.ReadString : TIDLString;
 
 
 Var
 Var
   C : Char;
   C : Char;
   I, OldLength, SectionLength: Integer;
   I, OldLength, SectionLength: Integer;
-  S : UTF8String;
+  S : TIDLString;
   TokenStart: PChar;
   TokenStart: PChar;
 begin
 begin
   C:=TokenStr[0];
   C:=TokenStr[0];
@@ -1214,7 +1233,11 @@ begin
                 end;
                 end;
                 end;
                 end;
               // WideChar takes care of conversion...
               // WideChar takes care of conversion...
-              S:=Utf8Encode(WideString(WideChar(StrToInt('$'+S))))
+{$IF SIZEOF(CHAR)=1}
+              S:=Utf8Encode(WideString(WideChar(StrToInt('$'+S))));
+{$ELSE}
+              S:=WideChar(StrToInt('$'+S));
+{$ENDIF}
               end;
               end;
         #0  : Error(SErrOpenString);
         #0  : Error(SErrOpenString);
       else
       else
@@ -1222,8 +1245,8 @@ begin
       end;
       end;
       SetLength(Result, OldLength + SectionLength+1+Length(S));
       SetLength(Result, OldLength + SectionLength+1+Length(S));
       if SectionLength > 0 then
       if SectionLength > 0 then
-        Move(TokenStart^, Result[OldLength + 1], SectionLength);
-      Move(S[1],Result[OldLength + SectionLength+1],Length(S));
+        Move(TokenStart^, Result[OldLength + 1], SectionLength*SizeOf(Char));
+      Move(S[1],Result[OldLength + SectionLength+1],Length(S)*SizeOf(char));
       Inc(OldLength, SectionLength+Length(S));
       Inc(OldLength, SectionLength+Length(S));
       // Next char
       // Next char
       // Inc(TokenStr);
       // Inc(TokenStr);
@@ -1238,11 +1261,11 @@ begin
   SectionLength := TokenStr - TokenStart;
   SectionLength := TokenStr - TokenStart;
   SetLength(Result, OldLength + SectionLength);
   SetLength(Result, OldLength + SectionLength);
   if SectionLength > 0 then
   if SectionLength > 0 then
-    Move(TokenStart^, Result[OldLength + 1], SectionLength);
+    Move(TokenStart^, Result[OldLength + 1], SectionLength*SizeOf(Char));
   Inc(TokenStr);
   Inc(TokenStr);
 end;
 end;
 
 
-function TWebIDLScanner.ReadIdent: UTF8String;
+function TWebIDLScanner.ReadIdent: TIDLString;
 
 
 Var
 Var
   TokenStart : PChar;
   TokenStart : PChar;
@@ -1259,6 +1282,7 @@ begin
     Inc(TokenStr);
     Inc(TokenStr);
   until not (TokenStr[0] in ['A'..'Z', 'a'..'z', '0'..'9', '_']);
   until not (TokenStr[0] in ['A'..'Z', 'a'..'z', '0'..'9', '_']);
   SectionLength := TokenStr - TokenStart;
   SectionLength := TokenStr - TokenStart;
+
   SetString(Result, TokenStart, SectionLength);
   SetString(Result, TokenStart, SectionLength);
 end;
 end;
 
 
@@ -1279,7 +1303,7 @@ begin
     end;
     end;
 end;
 end;
 
 
-function TWebIDLScanner.ReadNumber(var S : UTF8String) : TIDLToken;
+function TWebIDLScanner.ReadNumber(var S : TIDLString) : TIDLToken;
 
 
 Var
 Var
   TokenStart : PChar;
   TokenStart : PChar;
@@ -1304,7 +1328,7 @@ begin
       repeat
       repeat
         Inc(TokenStr);
         Inc(TokenStr);
       until not (TokenStr[0] in ['i','n','f','t','y']);
       until not (TokenStr[0] in ['i','n','f','t','y']);
-      Result:=tkNegInfinity; // We'll check at the end if the string is actually correct
+      Result:=tkNegInfinity; // We'll check at the end if the TIDLString is actually correct
       break;
       break;
       end;
       end;
     '.':
     '.':
@@ -1347,27 +1371,26 @@ begin
     end;
     end;
     end;
     end;
   SectionLength := TokenStr - TokenStart;
   SectionLength := TokenStr - TokenStart;
-  S:='';
-  SetString(S, TokenStart, SectionLength);
+  S:=MakeString(TokenStart,SectionLength);
   if (Result=tkNegInfinity) and (S<>'-Infinity') then
   if (Result=tkNegInfinity) and (S<>'-Infinity') then
     Error(SErrUnknownToken,[S]);
     Error(SErrUnknownToken,[S]);
   if (Result=tkMinus) and (S<>'-') then
   if (Result=tkMinus) and (S<>'-') then
     Error(SErrUnknownTerminator,[s]);
     Error(SErrUnknownTerminator,[s]);
 end;
 end;
 
 
-function TWebIDLScanner.GetErrorPos: String;
+function TWebIDLScanner.GetErrorPos: TIDLString;
 begin
 begin
   Result:=CurFile+'('+IntToStr(CurRow)+','+IntToStr(CurColumn)+')';
   Result:=CurFile+'('+IntToStr(CurRow)+','+IntToStr(CurColumn)+')';
   Result:=Format('Scanner error at %s: ',[Result]);
   Result:=Format('Scanner error at %s: ',[Result]);
 end;
 end;
 
 
-function TWebIDLScanner.ReadComment : UTF8String;
+function TWebIDLScanner.ReadComment : TIDLString;
 
 
 Var
 Var
   TokenStart : PChar;
   TokenStart : PChar;
   SectionLength : Integer;
   SectionLength : Integer;
   EOC,IsStar : Boolean;
   EOC,IsStar : Boolean;
-  S : String;
+  S : TIDLString;
 
 
 begin
 begin
   Result:='';
   Result:='';
@@ -1554,7 +1577,7 @@ end;
 procedure TWebIDLScanner.HandleDirective;
 procedure TWebIDLScanner.HandleDirective;
 var
 var
   p: PChar;
   p: PChar;
-  aDirective: string;
+  aDirective: TIDLString;
 begin
 begin
   inc(TokenStr);
   inc(TokenStr);
   p:=TokenStr;
   p:=TokenStr;
@@ -1577,7 +1600,7 @@ end;
 procedure TWebIDLScanner.HandleIfDef;
 procedure TWebIDLScanner.HandleIfDef;
 var
 var
   StartP: PChar;
   StartP: PChar;
-  aName: string;
+  aName: TIDLString;
 begin
 begin
   PushSkipMode;
   PushSkipMode;
   if FIsSkipping then
   if FIsSkipping then
@@ -1606,7 +1629,7 @@ end;
 procedure TWebIDLScanner.HandleIfNDef;
 procedure TWebIDLScanner.HandleIfNDef;
 var
 var
   StartP: PChar;
   StartP: PChar;
-  aName: string;
+  aName: TIDLString;
 begin
 begin
   PushSkipMode;
   PushSkipMode;
   if FIsSkipping then
   if FIsSkipping then
@@ -1687,7 +1710,7 @@ begin
   Inc(FSkipStackIndex);
   Inc(FSkipStackIndex);
 end;
 end;
 
 
-function TWebIDLScanner.IsDefined(const aName: string): boolean;
+function TWebIDLScanner.IsDefined(const aName: TIDLString): boolean;
 begin
 begin
   Result:=false;
   Result:=false;
   if aName='' then ;
   if aName='' then ;
@@ -1727,7 +1750,7 @@ begin
 end;
 end;
 
 
 function TWebIDLScanner.OnEvalFunction(Sender: TDirectiveEvaluator; Name,
 function TWebIDLScanner.OnEvalFunction(Sender: TDirectiveEvaluator; Name,
-  Param: String; out Value: string): boolean;
+  Param: TIDLString; out Value: TIDLString): boolean;
 begin
 begin
   Result:=true;
   Result:=true;
   if Name='defined' then
   if Name='defined' then
@@ -1739,7 +1762,7 @@ end;
 procedure TWebIDLScanner.OnEvalLog(Sender: TDirectiveEvaluator;
 procedure TWebIDLScanner.OnEvalLog(Sender: TDirectiveEvaluator;
   Args: array of const);
   Args: array of const);
 var
 var
-  Msg: String;
+  Msg: TIDLString;
 begin
 begin
   if Sender.MsgType<=mtError then
   if Sender.MsgType<=mtError then
     begin
     begin
@@ -1752,8 +1775,8 @@ begin
     ; //DoLog(Sender.MsgType,Sender.MsgNumber,Sender.MsgPattern,Args,true);
     ; //DoLog(Sender.MsgType,Sender.MsgNumber,Sender.MsgPattern,Args,true);
 end;
 end;
 
 
-function TWebIDLScanner.OnEvalVar(Sender: TDirectiveEvaluator; Name: String;
-  out Value: string): boolean;
+function TWebIDLScanner.OnEvalVar(Sender: TDirectiveEvaluator; Name: TIDLString;
+  out Value: TIDLString): boolean;
 begin
 begin
   Result:=true;
   Result:=true;
   Value:='';
   Value:='';

+ 49 - 49
packages/webidl/src/webidltowasmjob.pp

@@ -19,7 +19,7 @@ unit webidltowasmjob;
 interface
 interface
 
 
 uses
 uses
-  Classes, SysUtils, webidldefs, webidltopas, webidlparser, Contnrs;
+  Classes, SysUtils, webidldefs, webidltopas, webidlscanner, webidlparser, Contnrs;
 
 
 type
 type
   TJOB_JSValueKind = (
   TJOB_JSValueKind = (
@@ -35,17 +35,17 @@ type
   TJOB_JSValueKinds = set of TJOB_JSValueKind;
   TJOB_JSValueKinds = set of TJOB_JSValueKind;
 
 
 const
 const
-  JOB_JSValueKindNames: array[TJOB_JSValueKind] of string = (
+  JOB_JSValueKindNames: array[TJOB_JSValueKind] of TIDLString = (
     'Undefined',
     'Undefined',
     'Boolean',
     'Boolean',
     'Double',
     'Double',
-    'String',
+    'TIDLString',
     'Object',
     'Object',
     'Method',
     'Method',
     'Dictionary',
     'Dictionary',
     'Array'
     'Array'
     );
     );
-  JOB_JSValueTypeNames: array[TJOB_JSValueKind] of string = (
+  JOB_JSValueTypeNames: array[TJOB_JSValueKind] of TIDLString = (
     'TJOB_JSValue',
     'TJOB_JSValue',
     'TJOB_Boolean',
     'TJOB_Boolean',
     'TJOB_Double',
     'TJOB_Double',
@@ -64,26 +64,26 @@ type
 
 
   TWebIDLToPasWasmJob = class(TBaseWebIDLToPas)
   TWebIDLToPasWasmJob = class(TBaseWebIDLToPas)
   private
   private
-    FPasInterfacePrefix: String;
-    FPasInterfaceSuffix: String;
+    FPasInterfacePrefix: TIDLString;
+    FPasInterfaceSuffix: TIDLString;
   Protected
   Protected
     FWritingPasInterface: boolean;
     FWritingPasInterface: boolean;
-    function BaseUnits: String; override;
+    function BaseUnits: TIDLString; override;
     // Auxiliary routines
     // Auxiliary routines
-    function GetPasClassName(const aName: string): string; overload; // convert to PasInterfacePrefix+X+FPasInterfaceSuffix
+    function GetPasClassName(const aName: TIDLString): TIDLString; overload; // convert to PasInterfacePrefix+X+FPasInterfaceSuffix
       override;
       override;
-    function IntfToPasClassName(const aName: string): string; virtual;
-    function ComputeGUID(const Prefix: string; aList: TIDLDefinitionList): string; virtual;
+    function IntfToPasClassName(const aName: TIDLString): TIDLString; virtual;
+    function ComputeGUID(const Prefix: TIDLString; aList: TIDLDefinitionList): TIDLString; virtual;
     procedure GetOptions(L: TStrings; Full: boolean); override;
     procedure GetOptions(L: TStrings; Full: boolean); override;
-    function GetTypeName(const aTypeName: String; ForTypeDef: Boolean=False
-      ): String; override;
-    function GetPasIntfName(Intf: TIDLDefinition): string;
+    function GetTypeName(const aTypeName: TIDLString; ForTypeDef: Boolean=False
+      ): TIDLString; override;
+    function GetPasIntfName(Intf: TIDLDefinition): TIDLString;
     function GetResolvedType(aDef: TIDLTypeDefDefinition; out aTypeName,
     function GetResolvedType(aDef: TIDLTypeDefDefinition; out aTypeName,
-      aResolvedTypename: string): TIDLDefinition; overload; override;
-    function GetInterfaceDefHead(Intf: TIDLInterfaceDefinition): String;
+      aResolvedTypename: TIDLString): TIDLDefinition; overload; override;
+    function GetInterfaceDefHead(Intf: TIDLInterfaceDefinition): TIDLString;
       override;
       override;
-    function GetDictionaryDefHead(const CurClassName: string;
-      Dict: TIDLDictionaryDefinition): String; override;
+    function GetDictionaryDefHead(const CurClassName: TIDLString;
+      Dict: TIDLDictionaryDefinition): TIDLString; override;
     function WriteOtherImplicitTypes(Intf: TIDLInterfaceDefinition; aMemberList: TIDLDefinitionList): Integer;
     function WriteOtherImplicitTypes(Intf: TIDLInterfaceDefinition; aMemberList: TIDLDefinitionList): Integer;
       override;
       override;
     // Code generation routines. Return the number of actually written defs.
     // Code generation routines. Return the number of actually written defs.
@@ -112,13 +112,13 @@ type
     procedure WriteImplementation; override;
     procedure WriteImplementation; override;
   Public
   Public
     constructor Create(ThOwner: TComponent); override;
     constructor Create(ThOwner: TComponent); override;
-    function SplitGlobalVar(Line: string; out PasVarName, JSClassName, JOBRegisterName: string): boolean; virtual;
+    function SplitGlobalVar(Line: TIDLString; out PasVarName, JSClassName, JOBRegisterName: TIDLString): boolean; virtual;
   Published
   Published
     Property BaseOptions;
     Property BaseOptions;
     Property ClassPrefix;
     Property ClassPrefix;
     Property ClassSuffix;
     Property ClassSuffix;
-    Property PasInterfacePrefix: String read FPasInterfacePrefix write FPasInterfacePrefix;
-    Property PasInterfaceSuffix: String read FPasInterfaceSuffix write FPasInterfaceSuffix;
+    Property PasInterfacePrefix: TIDLString read FPasInterfacePrefix write FPasInterfacePrefix;
+    Property PasInterfaceSuffix: TIDLString read FPasInterfaceSuffix write FPasInterfaceSuffix;
     Property DictionaryClassParent;
     Property DictionaryClassParent;
     Property FieldPrefix;
     Property FieldPrefix;
     Property GetterPrefix;
     Property GetterPrefix;
@@ -136,12 +136,12 @@ implementation
 
 
 { TWebIDLToPasWasmJob }
 { TWebIDLToPasWasmJob }
 
 
-function TWebIDLToPasWasmJob.BaseUnits: String;
+function TWebIDLToPasWasmJob.BaseUnits: TIDLString;
 begin
 begin
   Result:='SysUtils, JOB_JS';
   Result:='SysUtils, JOB_JS';
 end;
 end;
 
 
-function TWebIDLToPasWasmJob.GetPasClassName(const aName: string): string;
+function TWebIDLToPasWasmJob.GetPasClassName(const aName: TIDLString): TIDLString;
 begin
 begin
   Result:=aName;
   Result:=aName;
   if (LeftStr(Result,length(ClassPrefix))=ClassPrefix)
   if (LeftStr(Result,length(ClassPrefix))=ClassPrefix)
@@ -153,7 +153,7 @@ begin
   Result:=PasInterfacePrefix+Result+PasInterfaceSuffix;
   Result:=PasInterfacePrefix+Result+PasInterfaceSuffix;
 end;
 end;
 
 
-function TWebIDLToPasWasmJob.IntfToPasClassName(const aName: string): string;
+function TWebIDLToPasWasmJob.IntfToPasClassName(const aName: TIDLString): TIDLString;
 begin
 begin
   Result:=aName;
   Result:=aName;
   if (LeftStr(Result,length(PasInterfacePrefix))=PasInterfacePrefix)
   if (LeftStr(Result,length(PasInterfacePrefix))=PasInterfacePrefix)
@@ -165,15 +165,15 @@ begin
   Result:=ClassPrefix+Result+ClassSuffix;
   Result:=ClassPrefix+Result+ClassSuffix;
 end;
 end;
 
 
-function TWebIDLToPasWasmJob.ComputeGUID(const Prefix: string;
-  aList: TIDLDefinitionList): string;
+function TWebIDLToPasWasmJob.ComputeGUID(const Prefix: TIDLString;
+  aList: TIDLDefinitionList): TIDLString;
 var
 var
   List: TStringList;
   List: TStringList;
   D: TIDLDefinition;
   D: TIDLDefinition;
   Attr: TIDLAttributeDefinition;
   Attr: TIDLAttributeDefinition;
   i, BytePos, BitPos, v: Integer;
   i, BytePos, BitPos, v: Integer;
   Bytes: array[0..15] of byte;
   Bytes: array[0..15] of byte;
-  GUIDSrc, aTypeName: String;
+  GUIDSrc, aTypeName: TIDLString;
 begin
 begin
   List:=TStringList.Create;
   List:=TStringList.Create;
   for D in aList do
   for D in aList do
@@ -239,8 +239,8 @@ begin
   inherited GetOptions(L, Full);
   inherited GetOptions(L, Full);
 end;
 end;
 
 
-function TWebIDLToPasWasmJob.GetTypeName(const aTypeName: String;
-  ForTypeDef: Boolean): String;
+function TWebIDLToPasWasmJob.GetTypeName(const aTypeName: TIDLString;
+  ForTypeDef: Boolean): TIDLString;
 begin
 begin
   Case aTypeName of
   Case aTypeName of
     'union',
     'union',
@@ -261,7 +261,7 @@ begin
   end;
   end;
 end;
 end;
 
 
-function TWebIDLToPasWasmJob.GetPasIntfName(Intf: TIDLDefinition): string;
+function TWebIDLToPasWasmJob.GetPasIntfName(Intf: TIDLDefinition): TIDLString;
 begin
 begin
   Result:=GetName(Intf);
   Result:=GetName(Intf);
   if Result='' then
   if Result='' then
@@ -270,7 +270,7 @@ begin
 end;
 end;
 
 
 function TWebIDLToPasWasmJob.GetResolvedType(aDef: TIDLTypeDefDefinition; out
 function TWebIDLToPasWasmJob.GetResolvedType(aDef: TIDLTypeDefDefinition; out
-  aTypeName, aResolvedTypename: string): TIDLDefinition;
+  aTypeName, aResolvedTypename: TIDLString): TIDLDefinition;
 begin
 begin
   Result:=inherited GetResolvedType(aDef, aTypeName, aResolvedTypename);
   Result:=inherited GetResolvedType(aDef, aTypeName, aResolvedTypename);
   if Result is TIDLInterfaceDefinition then
   if Result is TIDLInterfaceDefinition then
@@ -280,9 +280,9 @@ begin
 end;
 end;
 
 
 function TWebIDLToPasWasmJob.GetInterfaceDefHead(Intf: TIDLInterfaceDefinition
 function TWebIDLToPasWasmJob.GetInterfaceDefHead(Intf: TIDLInterfaceDefinition
-  ): String;
+  ): TIDLString;
 var
 var
-  aParentName, aPasIntfName: String;
+  aParentName, aPasIntfName: TIDLString;
 begin
 begin
   Result:='class(';
   Result:='class(';
   if Assigned(Intf.ParentInterface) then
   if Assigned(Intf.ParentInterface) then
@@ -297,8 +297,8 @@ begin
   Result:=Result+','+aPasIntfName+')';
   Result:=Result+','+aPasIntfName+')';
 end;
 end;
 
 
-function TWebIDLToPasWasmJob.GetDictionaryDefHead(const CurClassName: string;
-  Dict: TIDLDictionaryDefinition): String;
+function TWebIDLToPasWasmJob.GetDictionaryDefHead(const CurClassName: TIDLString;
+  Dict: TIDLDictionaryDefinition): TIDLString;
 begin
 begin
   Result:=CurClassName+'Rec = record';
   Result:=CurClassName+'Rec = record';
   if Dict=nil then ;
   if Dict=nil then ;
@@ -307,7 +307,7 @@ end;
 function TWebIDLToPasWasmJob.WriteOtherImplicitTypes(
 function TWebIDLToPasWasmJob.WriteOtherImplicitTypes(
   Intf: TIDLInterfaceDefinition; aMemberList: TIDLDefinitionList): Integer;
   Intf: TIDLInterfaceDefinition; aMemberList: TIDLDefinitionList): Integer;
 var
 var
-  aPasIntfName, Decl, ParentName: String;
+  aPasIntfName, Decl, ParentName: TIDLString;
 begin
 begin
   Result:=1;
   Result:=1;
 
 
@@ -388,7 +388,7 @@ end;
 function TWebIDLToPasWasmJob.WriteUtilityMethods(Intf: TIDLInterfaceDefinition
 function TWebIDLToPasWasmJob.WriteUtilityMethods(Intf: TIDLInterfaceDefinition
   ): Integer;
   ): Integer;
 var
 var
-  aClassName, aPasIntfName, Code: String;
+  aClassName, aPasIntfName, Code: TIDLString;
 begin
 begin
   Result:=0;
   Result:=0;
   aClassName:=GetName(Intf);
   aClassName:=GetName(Intf);
@@ -411,7 +411,7 @@ function TWebIDLToPasWasmJob.WriteDictionaryField(
   aDict: TIDLDictionaryDefinition; aField: TIDLDictionaryMemberDefinition
   aDict: TIDLDictionaryDefinition; aField: TIDLDictionaryMemberDefinition
   ): Boolean;
   ): Boolean;
 var
 var
-  N, TN: String;
+  N, TN: TIDLString;
 begin
 begin
   if aDict<>nil then ;
   if aDict<>nil then ;
   Result:=True;
   Result:=True;
@@ -440,7 +440,7 @@ function TWebIDLToPasWasmJob.WriteFunctionDefinition(
 var
 var
   ArgNames: TStringList;
   ArgNames: TStringList;
 
 
-  function CreateLocal(aName: string): string;
+  function CreateLocal(aName: TIDLString): TIDLString;
   var
   var
     i: Integer;
     i: Integer;
   begin
   begin
@@ -459,7 +459,7 @@ Var
   FuncName, Suff, Args, ProcKind, Sig, aClassName, Code, InvokeName,
   FuncName, Suff, Args, ProcKind, Sig, aClassName, Code, InvokeName,
     InvokeCode, TryCode, VarSection, FinallyCode, LocalName, WrapperFn,
     InvokeCode, TryCode, VarSection, FinallyCode, LocalName, WrapperFn,
     ArgName, ArgTypeName, ReturnTypeName, ResolvedReturnTypeName,
     ArgName, ArgTypeName, ReturnTypeName, ResolvedReturnTypeName,
-    InvokeClassName, ArgResolvedTypeName: String;
+    InvokeClassName, ArgResolvedTypeName: TIDLString;
   Overloads: TFPObjectList;
   Overloads: TFPObjectList;
   I: Integer;
   I: Integer;
   AddFuncBody: Boolean;
   AddFuncBody: Boolean;
@@ -638,9 +638,9 @@ end;
 function TWebIDLToPasWasmJob.WriteFunctionTypeDefinition(
 function TWebIDLToPasWasmJob.WriteFunctionTypeDefinition(
   aDef: TIDLFunctionDefinition): Boolean;
   aDef: TIDLFunctionDefinition): Boolean;
 var
 var
-  FuncName, ReturnTypeName, ResolvedReturnTypeName: String;
-  ArgName, ArgTypeName, ArgResolvedTypename: String;
-  VarSection, FetchArgs, Params, Call, Code, GetFunc: String;
+  FuncName, ReturnTypeName, ResolvedReturnTypeName: TIDLString;
+  ArgName, ArgTypeName, ArgResolvedTypename: TIDLString;
+  VarSection, FetchArgs, Params, Call, Code, GetFunc: TIDLString;
   Args: TIDLDefinitionList;
   Args: TIDLDefinitionList;
   ArgDef: TIDLArgumentDefinition;
   ArgDef: TIDLArgumentDefinition;
   ArgNames: TStringList;
   ArgNames: TStringList;
@@ -785,7 +785,7 @@ function TWebIDLToPasWasmJob.WritePrivateGetter(
   aParent: TIDLStructuredDefinition; Attr: TIDLAttributeDefinition): boolean;
   aParent: TIDLStructuredDefinition; Attr: TIDLAttributeDefinition): boolean;
 var
 var
   FuncName, aClassName, Code, ReadFuncName, Call,
   FuncName, aClassName, Code, ReadFuncName, Call,
-    AttrTypeName, AttrResolvedTypeName, ObjClassName: String;
+    AttrTypeName, AttrResolvedTypeName, ObjClassName: TIDLString;
   AttrType: TIDLDefinition;
   AttrType: TIDLDefinition;
 begin
 begin
   Result:=true;
   Result:=true;
@@ -854,7 +854,7 @@ function TWebIDLToPasWasmJob.WritePrivateSetter(
   aParent: TIDLStructuredDefinition; Attr: TIDLAttributeDefinition): boolean;
   aParent: TIDLStructuredDefinition; Attr: TIDLAttributeDefinition): boolean;
 var
 var
   FuncName, aClassName, WriteFuncName, Code, Call,
   FuncName, aClassName, WriteFuncName, Code, Call,
-    AttrTypeName, AttrResolvedTypeName: String;
+    AttrTypeName, AttrResolvedTypeName: TIDLString;
   AttrType: TIDLDefinition;
   AttrType: TIDLDefinition;
 begin
 begin
   if aoReadOnly in Attr.Options then
   if aoReadOnly in Attr.Options then
@@ -913,7 +913,7 @@ end;
 function TWebIDLToPasWasmJob.WriteProperty(aParent: TIDLDefinition;
 function TWebIDLToPasWasmJob.WriteProperty(aParent: TIDLDefinition;
   Attr: TIDLAttributeDefinition): boolean;
   Attr: TIDLAttributeDefinition): boolean;
 var
 var
-  PropName, Code, AttrTypeName, AttrResolvedTypeName: String;
+  PropName, Code, AttrTypeName, AttrResolvedTypeName: TIDLString;
   AttrType: TIDLDefinition;
   AttrType: TIDLDefinition;
 begin
 begin
   if aParent=nil then ;
   if aParent=nil then ;
@@ -952,7 +952,7 @@ end;
 procedure TWebIDLToPasWasmJob.WriteGlobalVars;
 procedure TWebIDLToPasWasmJob.WriteGlobalVars;
 var
 var
   i: Integer;
   i: Integer;
-  PasVarName, JSClassName, JOBRegisterName: String;
+  PasVarName, JSClassName, JOBRegisterName: TIDLString;
   aDef: TIDLDefinition;
   aDef: TIDLDefinition;
 begin
 begin
   if GlobalVars.Count=0 then exit;
   if GlobalVars.Count=0 then exit;
@@ -975,7 +975,7 @@ procedure TWebIDLToPasWasmJob.WriteImplementation;
 var
 var
   i: Integer;
   i: Integer;
   aDef: TIDLDefinition;
   aDef: TIDLDefinition;
-  PasVarName, JSClassName, JOBRegisterName: string;
+  PasVarName, JSClassName, JOBRegisterName: TIDLString;
 begin
 begin
   inherited WriteImplementation;
   inherited WriteImplementation;
   if GlobalVars.Count>0 then
   if GlobalVars.Count>0 then
@@ -1014,8 +1014,8 @@ begin
   BaseOptions:=BaseOptions+[coExpandUnionTypeArgs,coDictionaryAsClass];
   BaseOptions:=BaseOptions+[coExpandUnionTypeArgs,coDictionaryAsClass];
 end;
 end;
 
 
-function TWebIDLToPasWasmJob.SplitGlobalVar(Line: string; out PasVarName,
-  JSClassName, JOBRegisterName: string): boolean;
+function TWebIDLToPasWasmJob.SplitGlobalVar(Line: TIDLString; out PasVarName,
+  JSClassName, JOBRegisterName: TIDLString): boolean;
 var
 var
   p: SizeInt;
   p: SizeInt;
 begin
 begin

+ 45 - 32
packages/webidl/tests/tcwebidl2wasmjob.pas

@@ -5,7 +5,7 @@ unit tcwebidl2wasmjob;
 interface
 interface
 
 
 uses
 uses
-  Classes, SysUtils, fpcunit, testregistry, webidltowasmjob, pascodegen;
+  Classes, SysUtils, fpcunit, testregistry, webidlscanner, webidltowasmjob, pascodegen;
 
 
 type
 type
 
 
@@ -13,7 +13,7 @@ type
 
 
   TCustomTestWebIDL2WasmJob = Class(TTestCase)
   TCustomTestWebIDL2WasmJob = Class(TTestCase)
   private
   private
-    FHeaderSrc: String;
+    FHeaderSrc: TIDLString;
     FWebIDLToPas: TWebIDLToPasWasmJob;
     FWebIDLToPas: TWebIDLToPasWasmJob;
     procedure OnLog(Sender: TObject; LogType: TCodegenLogType; const Msg: String
     procedure OnLog(Sender: TObject; LogType: TCodegenLogType; const Msg: String
       );
       );
@@ -53,23 +53,43 @@ function CheckSrcDiff(Expected, Actual: string; out Msg: string): boolean;
 
 
 implementation
 implementation
 
 
-function LinesToStr(Args: array of const): string;
+
+function LinesToStr(Args: array of const): TIDLString;
 var
 var
-  s: String;
+  s,a: TIDLString;
+  U : UnicodeString;
   i: Integer;
   i: Integer;
 begin
 begin
   s:='';
   s:='';
   for i:=Low(Args) to High(Args) do
   for i:=Low(Args) to High(Args) do
+    begin
     case Args[i].VType of
     case Args[i].VType of
-      vtChar:         s += Args[i].VChar+LineEnding;
-      vtString:       s += Args[i].VString^+LineEnding;
-      vtPChar:        s += Args[i].VPChar+LineEnding;
-      vtWideChar:     s += AnsiString(Args[i].VWideChar)+LineEnding;
-      vtPWideChar:    s += AnsiString(Args[i].VPWideChar)+LineEnding;
-      vtAnsiString:   s += AnsiString(Args[i].VAnsiString)+LineEnding;
-      vtWidestring:   s += AnsiString(WideString(Args[i].VWideString))+LineEnding;
-      vtUnicodeString:s += AnsiString(UnicodeString(Args[i].VUnicodeString))+LineEnding;
+      vtChar:         A:=Args[i].VChar;
+      vtString:       A:=Args[i].VString^;
+      vtPChar:        A:=Args[i].VPChar;
+      vtWideChar:     begin
+                      U:=Args[i].VWideChar;
+                      A:=U;
+                      end;
+      vtPWideChar:    begin
+                      U:=Args[i].VPWideChar;
+                      A:=U;
+                      end;
+      vtAnsiString:   begin
+                      A:=AnsiString(Args[i].VAnsiString);
+                      end;
+      vtWidestring:   begin
+                      U:=WideString(Args[i].VWideString);
+                      A:=U;
+                      end;
+      vtUnicodeString: begin
+                       U:=UnicodeString(Args[i].VUnicodeString);
+                       A:=U;
+                       end;
+    end;
+    S:=S+A+LineEnding;
     end;
     end;
+//  Writeln('LinesToStr : ',S);
   Result:=s;
   Result:=s;
 end;
 end;
 
 
@@ -286,7 +306,6 @@ begin
   FWebIDLToPas:=TWebIDLToPasWasmJob.Create(nil);
   FWebIDLToPas:=TWebIDLToPasWasmJob.Create(nil);
   WebIDLToPas.OnLog:=@OnLog;
   WebIDLToPas.OnLog:=@OnLog;
   WebIDLToPas.InputFileName:='test1.webidl';
   WebIDLToPas.InputFileName:='test1.webidl';
-  WebIDLToPas.InputStream:=TMemoryStream.Create;
   WebIDLToPas.OutputFileName:='test1.pas';
   WebIDLToPas.OutputFileName:='test1.pas';
   WebIDLToPas.OutputStream:=TMemoryStream.Create;
   WebIDLToPas.OutputStream:=TMemoryStream.Create;
   HeaderSrc:=LinesToStr([
   HeaderSrc:=LinesToStr([
@@ -320,17 +339,16 @@ begin
   {$IFDEF VerboseWebidl2WasmJob}
   {$IFDEF VerboseWebidl2WasmJob}
   writeln('TCustomTestWebIDL2WasmJob.TestWebIDL WebIDL:----------------------');
   writeln('TCustomTestWebIDL2WasmJob.TestWebIDL WebIDL:----------------------');
   {$ENDIF}
   {$ENDIF}
-  InputMS:=WebIDLToPas.InputStream as TMemoryStream;
+  InputSrc:='';
   for i:=0 to high(WebIDLSrc) do
   for i:=0 to high(WebIDLSrc) do
     begin
     begin
     Line:=WebIDLSrc[i]+sLineBreak;
     Line:=WebIDLSrc[i]+sLineBreak;
-    InputMS.Write(Line[1],length(Line));
+    InputSrc:=InputSrc+Line;
     {$IFDEF VerboseWebidl2WasmJob}
     {$IFDEF VerboseWebidl2WasmJob}
     write(Line);
     write(Line);
     {$ENDIF}
     {$ENDIF}
     end;
     end;
-  InputMS.Position:=0;
-
+  WebIDLToPas.InputStream:=TStringStream.Create(InputSrc);
   {$IFDEF VerboseWebidl2WasmJob}
   {$IFDEF VerboseWebidl2WasmJob}
   writeln('TCustomTestWebIDL2WasmJob.TestWebIDL ExpectedPascal: BEGIN--------');
   writeln('TCustomTestWebIDL2WasmJob.TestWebIDL ExpectedPascal: BEGIN--------');
   {$ENDIF}
   {$ENDIF}
@@ -343,11 +361,6 @@ begin
   {$ENDIF}
   {$ENDIF}
 
 
   WebIDLToPas.Execute;
   WebIDLToPas.Execute;
-
-  SetLength(InputSrc{%H-},InputMS.Size);
-  if length(InputSrc)>0 then
-    Move(InputMS.Memory^,InputSrc[1],length(InputSrc));
-
   OutputSrc:=WebIDLToPas.Source.Text;
   OutputSrc:=WebIDLToPas.Source.Text;
   {$IFDEF VerboseWebidl2WasmJob}
   {$IFDEF VerboseWebidl2WasmJob}
   writeln('TCustomTestWebIDL2WasmJob.TestWebIDL ActualPascal: BEGIN----------');
   writeln('TCustomTestWebIDL2WasmJob.TestWebIDL ActualPascal: BEGIN----------');
@@ -435,7 +448,7 @@ begin
   '    function _GetaBoolean: Boolean;',
   '    function _GetaBoolean: Boolean;',
   '    procedure _SetaBoolean(const aValue: Boolean);',
   '    procedure _SetaBoolean(const aValue: Boolean);',
   '  Public',
   '  Public',
-  '    class function Cast(Intf: IJSObject): IJSAttr;',
+  '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '    property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
   '    property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
   '  end;',
   '  end;',
   '',
   '',
@@ -451,7 +464,7 @@ begin
   '  WriteJSPropertyBoolean(''aBoolean'',aValue);',
   '  WriteJSPropertyBoolean(''aBoolean'',aValue);',
   'end;',
   'end;',
   '',
   '',
-  'class function TJSAttr.Cast(Intf: IJSObject): IJSAttr;',
+  'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
   '  Result:=TJSAttr.JOBCast(Intf);',
   'end;',
   'end;',
@@ -484,7 +497,7 @@ begin
   '  Private',
   '  Private',
   '  Public',
   '  Public',
   '    procedure append(aNode: IJSAttr);',
   '    procedure append(aNode: IJSAttr);',
-  '    class function Cast(Intf: IJSObject): IJSAttr;',
+  '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '  end;',
   '',
   '',
   'implementation',
   'implementation',
@@ -494,7 +507,7 @@ begin
   '  InvokeJSNoResult(''append'',[aNode]);',
   '  InvokeJSNoResult(''append'',[aNode]);',
   'end;',
   'end;',
   '',
   '',
-  'class function TJSAttr.Cast(Intf: IJSObject): IJSAttr;',
+  'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
   '  Result:=TJSAttr.JOBCast(Intf);',
   'end;',
   'end;',
@@ -534,7 +547,7 @@ begin
   '  Private',
   '  Private',
   '  Public',
   '  Public',
   '    procedure setEventHandler(const aHandler: TEventHandler);',
   '    procedure setEventHandler(const aHandler: TEventHandler);',
-  '    class function Cast(Intf: IJSObject): IJSAttr;',
+  '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '  end;',
   '',
   '',
   'implementation',
   'implementation',
@@ -559,7 +572,7 @@ begin
   '  end;',
   '  end;',
   'end;',
   'end;',
   '',
   '',
-  'class function TJSAttr.Cast(Intf: IJSObject): IJSAttr;',
+  'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
   '  Result:=TJSAttr.JOBCast(Intf);',
   'end;',
   'end;',
@@ -599,7 +612,7 @@ begin
   '    function exitFullscreen: IJSPromise; // Promise<void>',
   '    function exitFullscreen: IJSPromise; // Promise<void>',
   '    function addCertException(aIsTemporary: Boolean): IJSPromise; // Promise<any>',
   '    function addCertException(aIsTemporary: Boolean): IJSPromise; // Promise<any>',
   '    function fly: IJSPromise; // Promise<Attr>',
   '    function fly: IJSPromise; // Promise<Attr>',
-  '    class function Cast(Intf: IJSObject): IJSAttr;',
+  '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '  end;',
   '',
   '',
   'implementation',
   'implementation',
@@ -619,7 +632,7 @@ begin
   '  Result:=InvokeJSObjectResult(''fly'',[],TJSPromise) as IJSPromise;',
   '  Result:=InvokeJSObjectResult(''fly'',[],TJSPromise) as IJSPromise;',
   'end;',
   'end;',
   '',
   '',
-  'class function TJSAttr.Cast(Intf: IJSObject): IJSAttr;',
+  'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
   '  Result:=TJSAttr.JOBCast(Intf);',
   'end;',
   'end;',
@@ -652,7 +665,7 @@ begin
   '  Private',
   '  Private',
   '  Public',
   '  Public',
   '    procedure append(const aNode: Variant);',
   '    procedure append(const aNode: Variant);',
-  '    class function Cast(Intf: IJSObject): IJSAttr;',
+  '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '  end;',
   '',
   '',
   'implementation',
   'implementation',
@@ -662,7 +675,7 @@ begin
   '  InvokeJSNoResult(''append'',[aNode]);',
   '  InvokeJSNoResult(''append'',[aNode]);',
   'end;',
   'end;',
   '',
   '',
-  'class function TJSAttr.Cast(Intf: IJSObject): IJSAttr;',
+  'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
   '  Result:=TJSAttr.JOBCast(Intf);',
   'end;',
   'end;',

+ 3 - 0
packages/webidl/tests/testidl.lpi

@@ -97,6 +97,9 @@
         </Win32>
         </Win32>
       </Options>
       </Options>
     </Linking>
     </Linking>
+    <Other>
+      <CustomOptions Value="-tunicodertl"/>
+    </Other>
   </CompilerOptions>
   </CompilerOptions>
   <Debugging>
   <Debugging>
     <Exceptions Count="3">
     <Exceptions Count="3">

+ 3 - 0
packages/webidl/tests/testidl.pas

@@ -4,6 +4,9 @@ program testidl;
 {$H+}
 {$H+}
 
 
 uses
 uses
+  {$ifdef unix}
+  cwstring,
+  {$endif}
   consoletestrunner, webidlscanner, tcidlscanner, webidlparser, webidldefs,
   consoletestrunner, webidlscanner, tcidlscanner, webidlparser, webidldefs,
   tcidlparser, tcwebidldefs, tcwebidl2wasmjob;
   tcidlparser, tcwebidldefs, tcwebidl2wasmjob;