Browse Source

* Fix [EnforceRange] long

Michaël Van Canneyt 1 year ago
parent
commit
af8f1167f0
2 changed files with 15 additions and 4 deletions
  1. 9 4
      packages/webidl/src/webidlparser.pp
  2. 6 0
      packages/webidl/tests/tcidlparser.pp

+ 9 - 4
packages/webidl/src/webidlparser.pp

@@ -1353,7 +1353,7 @@ Const
   LegacyDOMString = 'LegacyNullToEmptyString';
   LegacyDOMString = 'LegacyNullToEmptyString';
 
 
 Var
 Var
-  isNull , ok: Boolean;
+  isNull,isUnsigned, ok: Boolean;
   typeName: UTF8String;
   typeName: UTF8String;
   Allowed : TIDLTokens;
   Allowed : TIDLTokens;
   tk : TIDLToken;
   tk : TIDLToken;
@@ -1375,10 +1375,15 @@ begin
         begin
         begin
         // special: [EnforceRange] unsigned long
         // special: [EnforceRange] unsigned long
         ExpectToken(tkSquaredBraceClose);
         ExpectToken(tkSquaredBraceClose);
-        ExpectToken(tkunsigned);
-        ExpectToken(tklong);
+        tk:=GetToken;
+        isUnsigned:=(tk=tkUnsigned);
+        if IsUnSigned then
+          tk:=GetToken;
+        CheckCurrentToken(tkLong);
         Result:=TIDLTypeDefDefinition(AddDefinition(aParent,TIDLTypeDefDefinition,''));
         Result:=TIDLTypeDefDefinition(AddDefinition(aParent,TIDLTypeDefDefinition,''));
-        Result.TypeName:='unsigned long';
+        Result.TypeName:='long';
+        if IsUnsigned then
+          Result.Name:='unsigned '+Result.Name;
         Result.Attributes.Add(EnforceRange);
         Result.Attributes.Add(EnforceRange);
         end;
         end;
       LegacyDOMString:
       LegacyDOMString:

+ 6 - 0
packages/webidl/tests/tcidlparser.pp

@@ -67,6 +67,7 @@ Type
     Procedure TestSimpleInt;
     Procedure TestSimpleInt;
     procedure TestSimpleIntNull;
     procedure TestSimpleIntNull;
     Procedure TestSimpleLongint;
     Procedure TestSimpleLongint;
+    Procedure TestSimpleAttrLong;
     procedure TestSimpleLongintNull;
     procedure TestSimpleLongintNull;
     Procedure TestSimpleLongLongint;
     Procedure TestSimpleLongLongint;
     Procedure TestSimpleLongLongintNull;
     Procedure TestSimpleLongLongintNull;
@@ -1073,6 +1074,11 @@ begin
   TestTypeDef('long A','A','long');
   TestTypeDef('long A','A','long');
 end;
 end;
 
 
+procedure TTestTypeDefParser.TestSimpleAttrLong;
+begin
+  TestTypeDef('typedef [EnforceRange] long A','A','long')
+end;
+
 procedure TTestTypeDefParser.TestSimpleLongintNull;
 procedure TTestTypeDefParser.TestSimpleLongintNull;
 begin
 begin
   AssertTrue('AllowNull',TestTypeDef('long ? A','A','long').AllowNull);
   AssertTrue('AllowNull',TestTypeDef('long ? A','A','long').AllowNull);