Browse Source

* Generate code for JSClassName

Michaël Van Canneyt 1 year ago
parent
commit
4b8808bfb2
2 changed files with 176 additions and 2 deletions
  1. 13 1
      packages/webidl/src/webidltowasmjob.pp
  2. 163 1
      packages/webidl/tests/tcwebidl2wasmjob.pas

+ 13 - 1
packages/webidl/src/webidltowasmjob.pp

@@ -577,6 +577,7 @@ var
 begin
   Result:=0;
   aPasIntfName:=GetPasIntfName(Intf);
+  AddLn('class function JSClassName: UnicodeString; override;');
   AddLn('class function Cast(const Intf: IJSObject): '+aPasIntfName+';');
 end;
 
@@ -2020,12 +2021,23 @@ end;
 procedure TWebIDLToPasWasmJob.WriteUtilityMethodImplementations(aDef : TIDLStructuredDefinition; ML : TIDLDefinitionList);
 
 var
-  aClassName, aPasIntfName: TIDLString;
+  aJSClassName,aClassName, aPasIntfName: TIDLString;
 
 begin
   if (ML=Nil) then ; // Silence compiler warning
   aClassName:=GetPasName(aDef);
   aPasIntfName:=GetPasIntfName(aDef);
+  if aDef.StructuredType=sdDictionary then
+    aJSClassName:='Object'
+  else
+    aJSClassName:=aDef.Name;
+  AddLn('class function %s.JSClassName: UnicodeString;',[aClassName]);
+  AddLn('begin');
+  Indent;
+  AddLn('Result:=''%s'';',[aJSClassName]);
+  Undent;
+  AddLn('end;');
+  AddLn('');
   AddLn('class function %s.Cast(const Intf: IJSObject): %s;',[aClassName,aPasIntfName]);
   AddLn('begin');
   Indent;

+ 163 - 1
packages/webidl/tests/tcwebidl2wasmjob.pas

@@ -421,7 +421,7 @@ begin
   writeln('TCustomTestWebIDL2WasmJob.TestWebIDL ActualPascal: END------------');
   {$ENDIF}
 
-  CheckDiff('TCustomTestWebIDL2WasmJob.TestWebIDL',ExpectedSrc,OutputSrc);
+  CheckDiff('Source Differs',ExpectedSrc,OutputSrc);
 end;
 
 procedure TCustomTestWebIDL2WasmJob.CheckDiff(Msg, Expected, Actual: string);
@@ -521,6 +521,7 @@ begin
   '    function _GetaBoolean: Boolean;',
   '    procedure _SetaBoolean(const aValue: Boolean);',
   '  Public',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '    property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
   '  end;',
@@ -537,6 +538,11 @@ begin
   '  WriteJSPropertyBoolean(''aBoolean'',aValue);',
   'end;',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Object'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -573,6 +579,7 @@ begin
   '    function _GetaBoolean: Boolean;',
   '    procedure _SetaBoolean(const aValue: Boolean);',
   '  Public',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '    property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
   '  end;',
@@ -589,6 +596,11 @@ begin
   '  WriteJSPropertyBoolean(''aBoolean'',aValue);',
   'end;',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Attr'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -620,11 +632,17 @@ begin
   '  TJSAttr = class(TJSObject,IJSAttr)',
   '  Private',
   '  Public',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '',
   'implementation',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Attr'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -661,6 +679,7 @@ begin
     '  Private',
     '    function _Getsignature: IJSArrayBuffer;',
     '  Public',
+    '    class function JSClassName: UnicodeString; override;',
     '    class function Cast(const Intf: IJSObject): IJSAttr;',
     '    property signature: IJSArrayBuffer read _Getsignature;',
     '  end;',
@@ -672,6 +691,11 @@ begin
     '  Result:=ReadJSPropertyObject(''signature'',TJSArrayBuffer) as IJSArrayBuffer;',
     'end;',
     '',
+    'class function TJSAttr.JSClassName: UnicodeString;',
+    'begin',
+    '  Result:=''Attr'';',
+    'end;',
+    '',
     'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
     'begin',
     '  Result:=TJSAttr.JOBCast(Intf);',
@@ -710,6 +734,7 @@ begin
     '  Private',
     '    function _Getsignature: IJSArrayBufferView;',
     '  Public',
+    '    class function JSClassName: UnicodeString; override;',
     '    class function Cast(const Intf: IJSObject): IJSAttr;',
     '    property signature: IJSArrayBufferView read _Getsignature;',
     '  end;',
@@ -721,6 +746,11 @@ begin
     '  Result:=ReadJSPropertyObject(''signature'',TJSArrayBufferView) as IJSArrayBufferView;',
     'end;',
     '',
+    'class function TJSAttr.JSClassName: UnicodeString;',
+    'begin',
+    '  Result:=''Attr'';',
+    'end;',
+    '',
     'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
     'begin',
     '  Result:=TJSAttr.JOBCast(Intf);',
@@ -755,11 +785,17 @@ begin
     '  TJSAttr = class(TJSObject,IJSAttr)',
     '  Private',
     '  Public',
+    '    class function JSClassName: UnicodeString; override;',
     '    class function Cast(const Intf: IJSObject): IJSAttr;',
     '  end;',
     '',
     'implementation',
     '',
+    'class function TJSAttr.JSClassName: UnicodeString;',
+    'begin',
+    '  Result:=''Attr'';',
+    'end;',
+    '',
     'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
     'begin',
     '  Result:=TJSAttr.JOBCast(Intf);',
@@ -875,6 +911,7 @@ begin
   '  Private',
   '  Public',
   '    procedure append(aNode: IJSAttr);',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '',
@@ -885,6 +922,11 @@ begin
   '  InvokeJSNoResult(''append'',[aNode]);',
   'end;',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Attr'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -925,6 +967,7 @@ begin
   '  Private',
   '  Public',
   '    procedure setEventHandler(const aHandler: TEventHandler);',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '',
@@ -950,6 +993,11 @@ begin
   '  end;',
   'end;',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Attr'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -990,6 +1038,7 @@ begin
   '    function exitFullscreen: IJSPromise; // Promise<void>',
   '    function addCertException(aIsTemporary: Boolean): IJSPromise; // Promise<any>',
   '    function fly: IJSPromise; // Promise<Attr>',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '',
@@ -1010,6 +1059,11 @@ begin
   '  Result:=InvokeJSObjectResult(''fly'',[],TJSPromise) as IJSPromise;',
   'end;',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Attr'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1043,6 +1097,7 @@ begin
   '  Private',
   '  Public',
   '    procedure append(const aNode: Variant);',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '',
@@ -1053,6 +1108,11 @@ begin
   '  InvokeJSNoResult(''append'',[aNode]);',
   'end;',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Attr'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1090,6 +1150,7 @@ begin
     '  Private',
     '  Public',
     '    function get(aA: LongInt) : TE;',
+    '    class function JSClassName: UnicodeString; override;',
     '    class function Cast(const Intf: IJSObject): IJSIE;',
     '  end;',
     '',
@@ -1100,6 +1161,11 @@ begin
     '  Result:=InvokeJSUnicodeStringResult(''get'',[aA]);',
     'end;',
     '',
+    'class function TJSIE.JSClassName: UnicodeString;',
+    'begin',
+    '  Result:=''IE'';',
+    'end;',
+    '',
     'class function TJSIE.Cast(const Intf: IJSObject): IJSIE;',
     'begin',
     '  Result:=TJSIE.JOBCast(Intf);',
@@ -1138,6 +1204,7 @@ begin
    '  Private',
    '  Public',
    '     function vibrate(const aPattern: TLongIntDynArray): Boolean;',
+   '     class function JSClassName: UnicodeString; override;',
    '     class function Cast(const Intf: IJSObject): IJSAttr;',
    '  end;',
    '',
@@ -1148,6 +1215,11 @@ begin
    '  Result:=InvokeJSBooleanResult(''vibrate'',[aPattern]);',
    'end;',
    '',
+   'class function TJSAttr.JSClassName: UnicodeString;',
+   'begin',
+   '  Result:=''Attr'';',
+   'end;',
+   '',
    'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
    'begin',
    '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1189,6 +1261,7 @@ begin
    '  Public',
    '     function vibrate(const aPattern: TLongIntDynArray): Boolean;',
    '     function beep(const aPattern: TLongIntDynArray): Boolean;',
+   '     class function JSClassName: UnicodeString; override;',
    '     class function Cast(const Intf: IJSObject): IJSAttr;',
    '  end;',
    '',
@@ -1204,6 +1277,11 @@ begin
    '  Result:=InvokeJSBooleanResult(''beep'',[aPattern]);',
    'end;',
    '',
+   'class function TJSAttr.JSClassName: UnicodeString;',
+   'begin',
+   '  Result:=''Attr'';',
+   'end;',
+   '',
    'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
    'begin',
    '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1236,6 +1314,7 @@ begin
   '  Private',
   '  Public',
   '    constructor Create(aOptions: LongInt);',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '',
@@ -1246,6 +1325,11 @@ begin
   '  JOBCreate(''Attr'',[aOptions]);',
   'end;',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Attr'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1279,6 +1363,7 @@ begin
     '  Private',
     '  Public',
     '    procedure appendBuffer(aData: IJSArrayBuffer);',
+    '    class function JSClassName: UnicodeString; override;',
     '    class function Cast(const Intf: IJSObject): IJSAttr;',
     '  end;',
     '',
@@ -1289,6 +1374,11 @@ begin
     '  InvokeJSNoResult(''appendBuffer'',[aData]);',
     'end;',
     '',
+    'class function TJSAttr.JSClassName: UnicodeString;',
+    'begin',
+    '  Result:=''Attr'';',
+    'end;',
+    '',
     'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
     'begin',
     '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1323,6 +1413,7 @@ begin
     '  Private',
     '  Public',
     '    procedure appendBuffer(aData: IJSArrayBufferView);',
+    '    class function JSClassName: UnicodeString; override;',
     '    class function Cast(const Intf: IJSObject): IJSAttr;',
     '  end;',
     '',
@@ -1333,6 +1424,11 @@ begin
     '  InvokeJSNoResult(''appendBuffer'',[aData]);',
     'end;',
     '',
+    'class function TJSAttr.JSClassName: UnicodeString;',
+    'begin',
+    '  Result:=''Attr'';',
+    'end;',
+    '',
     'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
     'begin',
     '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1371,6 +1467,7 @@ begin
    '  Private',
    '  Public',
    '    function vibrate: TLongIntDynArray;',
+   '    class function JSClassName: UnicodeString; override;',
    '    class function Cast(const Intf: IJSObject): IJSAttr;',
    '  end;',
    '',
@@ -1381,6 +1478,11 @@ begin
    '  Result:=InvokeJSObjectResult(''vibrate'',[],TJSArray) as TLongIntDynArray;',
    'end;',
    '',
+   'class function TJSAttr.JSClassName: UnicodeString;',
+   'begin',
+   '  Result:=''Attr'';',
+   'end;',
+   '',
    'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
    'begin',
    '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1419,6 +1521,7 @@ begin
    '  Private',
    '  Public',
    '    function vibrate: TLongSeqDynArray;',
+   '    class function JSClassName: UnicodeString; override;',
    '    class function Cast(const Intf: IJSObject): IJSAttr;',
    '  end;',
    '',
@@ -1429,6 +1532,11 @@ begin
    '  Result:=InvokeJSObjectResult(''vibrate'',[],TJSArray) as TLongSeqDynArray;',
    'end;',
    '',
+   'class function TJSAttr.JSClassName: UnicodeString;',
+   'begin',
+   '  Result:=''Attr'';',
+   'end;',
+   '',
    'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
    'begin',
    '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1462,11 +1570,17 @@ begin
     '  TJSAttr = class(TJSObject,IJSAttr)',
     '  Private',
     '  Public',
+    '    class function JSClassName: UnicodeString; override;',
     '    class function Cast(const Intf: IJSObject): IJSAttr;',
     '  end;',
     '',
     'implementation',
     '',
+    'class function TJSAttr.JSClassName: UnicodeString;',
+    'begin',
+    '  Result:=''Attr'';',
+    'end;',
+    '',
     'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
     'begin',
     '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1502,11 +1616,17 @@ begin
       '  TJSAttr = class(TJSObject,IJSAttr)',
       '  Private',
       '  Public',
+      '    class function JSClassName: UnicodeString; override;',
       '    class function Cast(const Intf: IJSObject): IJSAttr;',
       '  end;',
       '',
       'implementation',
       '',
+      'class function TJSAttr.JSClassName: UnicodeString;',
+      'begin',
+      '  Result:=''Attr'';',
+      'end;',
+      '',
       'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
       'begin',
       '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1555,6 +1675,7 @@ begin
    '    function _Geta: LongInt;',
    '    procedure _Seta(const aValue: LongInt);',
    '  Public',
+   '    class function JSClassName: UnicodeString; override;',
    '    class function Cast(const Intf: IJSObject): IJSMyDict;',
    '    property a: LongInt read _Geta write _Seta;',
    '  end;',
@@ -1573,6 +1694,7 @@ begin
    '  Private',
    '  Public',
    '    function get: TJSMyDict;',
+   '    class function JSClassName: UnicodeString; override;',
    '    class function Cast(const Intf: IJSObject): IJSAttr;',
    '  end;',
    '',
@@ -1588,6 +1710,11 @@ begin
    '  WriteJSPropertyLongInt(''a'',aValue);',
    'end;',
    '',
+   'class function TJSMyDict.JSClassName: UnicodeString;',
+   'begin',
+   '  Result:=''Object'';',
+   'end;',
+   '',
    'class function TJSMyDict.Cast(const Intf: IJSObject): IJSMyDict;',
    'begin',
    '  Result:=TJSMyDict.JOBCast(Intf);',
@@ -1598,6 +1725,11 @@ begin
    '  Result:=InvokeJSObjectResult(''get'',[],TJSMyDict) as TJSMyDict;',
    'end;',
    '',
+   'class function TJSAttr.JSClassName: UnicodeString;',
+   'begin',
+   '  Result:=''Attr'';',
+   'end;',
+   '',
    'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
    'begin',
    '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1636,6 +1768,7 @@ begin
  '  Private',
  '  Public',
  '    function vibrate: IJSFloat32Array;',
+ '    class function JSClassName: UnicodeString; override;',
  '    class function Cast(const Intf: IJSObject): IJSAttr;',
  '  end;',
  '',
@@ -1646,6 +1779,11 @@ begin
  '  Result:=InvokeJSObjectResult(''vibrate'',[],TJSArray) as IJSFloat32Array;',
  'end;',
  '',
+ 'class function TJSAttr.JSClassName: UnicodeString;',
+ 'begin',
+ '  Result:=''Attr'';',
+ 'end;',
+ '',
  'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
  'begin',
  '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1687,6 +1825,7 @@ begin
  '  Public',
  '    function roundRect(aRadii: Double): LongInt; overload;',
  '    function roundRect(const aRadii: TunionDynArray): LongInt; overload;',
+ '    class function JSClassName: UnicodeString; override;',
  '    class function Cast(const Intf: IJSObject): IJSAttr;',
  '  end;',
  '',
@@ -1702,6 +1841,11 @@ begin
  '  Result:=InvokeJSLongIntResult(''roundRect'',[aRadii]);',
  'end;',
  '',
+ 'class function TJSAttr.JSClassName: UnicodeString;',
+ 'begin',
+ '  Result:=''Attr'';',
+ 'end;',
+ '',
  'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
  'begin',
  '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1745,6 +1889,7 @@ begin
   '    procedure roundRect(const aA: TUnicodeStringDynArray; aB: LongInt); overload;',
   '    procedure roundRect(const aA: TUnicodeStringDynArray); overload;',
   '    procedure roundRect(const aA: UnicodeString); overload;',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '  end;',
   '',
@@ -1770,6 +1915,11 @@ begin
   '  InvokeJSNoResult(''roundRect'',[aA]);',
   'end;',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Attr'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1805,6 +1955,7 @@ begin
   '  Private',
   '    function _GetaBoolean: Boolean;',
   '  Public',
+  '    class function JSClassName: UnicodeString; override;',
   '    class function Cast(const Intf: IJSObject): IJSAttr;',
   '    property aBoolean: Boolean read _GetaBoolean;',
   '  end;',
@@ -1819,6 +1970,11 @@ begin
   '  Result:=ReadJSPropertyBoolean(''aBoolean'');',
   'end;',
   '',
+  'class function TJSAttr.JSClassName: UnicodeString;',
+  'begin',
+  '  Result:=''Attr'';',
+  'end;',
+  '',
   'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
   'begin',
   '  Result:=TJSAttr.JOBCast(Intf);',
@@ -1870,6 +2026,7 @@ begin
     '    function entries : IJSIterator;',
     '    function keys : IJSIterator;',
     '    function values : IJSIterator;',
+    '    class function JSClassName: UnicodeString; override;',
     '    class function Cast(const Intf: IJSObject): IJSPM;',
     '    property size : LongInt read _Getsize;',
     '  end;',
@@ -1906,6 +2063,11 @@ begin
     '  Result:=InvokeJSObjectResult(''values'',[],TJSIterator) as IJSIterator;',
     'end;',
     '',
+    'class function TJSPM.JSClassName: UnicodeString;',
+    'begin',
+    '  Result:=''PM'';',
+    'end;',
+    '',
     'class function TJSPM.Cast(const Intf: IJSObject): IJSPM;',
     'begin',
     '  Result:=TJSPM.JOBCast(Intf);',