Browse Source

webidl: parse getter/setter with default name

mattias 3 years ago
parent
commit
a0f572892e
2 changed files with 25 additions and 3 deletions
  1. 16 3
      packages/webidl/src/webidlparser.pp
  2. 9 0
      packages/webidl/tests/tcidlparser.pp

+ 16 - 3
packages/webidl/src/webidlparser.pp

@@ -446,6 +446,8 @@ function TWebIDLParser.ParseOperation(aParent: TIDLBaseObject): TIDLFunctionDefi
 
 Const
   Specials = [tkGetter, tkSetter, tkDeleter, tkLegacyCaller, tkConstructor];
+  OnlyGetter = [foGetter];
+  OnlySetter = [foSetter];
 
 Var
   Opts : TFunctionOptions;
@@ -474,9 +476,20 @@ begin
     else
       begin
       Result.ReturnType:=ParseType(Result,False,True);
-      CheckCurrentToken(tkIdentifier);
-      Result.Name:=CurrentTokenString;
-      GetToken;
+      case CurrentToken of
+      tkIdentifier:
+        begin
+        Result.Name:=CurrentTokenString;
+        GetToken;
+        end;
+      tkBracketOpen:
+        if (Opts=OnlyGetter) or (Opts=OnlySetter) then
+          // using default name getProperty/setProperty
+        else
+          CheckCurrentToken(tkIdentifier);
+      else
+        CheckCurrentToken(tkIdentifier);
+      end;
       end;
     ParseArguments(Result.Arguments);
     Result.Options:=Result.Options+Opts;

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

@@ -225,6 +225,7 @@ Type
   Published
     Procedure TestSimpleFunction;
     Procedure TestSimpleGetterFunction;
+    Procedure TestSimpleGetterFunctionNoName;
     Procedure TestSimpleSetterFunction;
     Procedure TestSimpleLegacyCallerFunction;
     Procedure TestSimpleDeleterFunction;
@@ -463,6 +464,14 @@ begin
   AssertEquals('Options',[foGetter],ParseFunction('getter short A()','A','short',[]).Options);
 end;
 
+procedure TTestOperationInterfaceParser.TestSimpleGetterFunctionNoName;
+var
+  F: TIDLFunctionDefinition;
+begin
+  F:=ParseFunction('getter double (unsigned long index)','','double',['unsigned long','index']);
+  AssertEquals('Options',[foGetter],F.Options);
+end;
+
 procedure TTestOperationInterfaceParser.TestSimpleSetterFunction;
 begin
   AssertEquals('Options',[foSetter],ParseFunction('setter short A()','A','short',[]).Options);