diff --git a/bindings/pascocoa/parser/ObjCParserTypes.pas b/bindings/pascocoa/parser/ObjCParserTypes.pas index 49fc92cb9..0faed67f1 100755 --- a/bindings/pascocoa/parser/ObjCParserTypes.pas +++ b/bindings/pascocoa/parser/ObjCParserTypes.pas @@ -252,7 +252,7 @@ type function DoParse(AParser: TTextParser): Boolean; override; end; - TFunctionTypeDef = class(TEntity) + TFunctionTypeDef = class(TEntity) // Parses only Parameters list (starting with Bracket "(") protected function DoParse(APArser: TTextParser): Boolean; override; public @@ -331,8 +331,6 @@ type _TypeName : AnsiString; end; - { TStructTypeDef } - //C token: struct TEntityStruct = class(TEntity) {update} @@ -1481,7 +1479,7 @@ end; function ParseFunctionOrVar(Owner: TEntity; AParser: TTextParser): Boolean; var - ctype : TTypeDef; + ctype : TEntity; _name : AnsiString; isfunc : Boolean; tt : TTokenType; @@ -1513,9 +1511,15 @@ begin AParser.Index := AParser.TokenPos; - ctype := TTypeDef.Create(nil); +{ if s = 'struct' then + TTy + ctype :=} + + + ctype := ParseTypeDef(nil, AParser); + { TTypeDef.Create(nil); Result := ctype.Parse(AParser); - if not Result then Exit; + if not Result then Exit;} // expecting name of Variable or Function name if not AParser.FindNextToken(_name, tt) or (tt <> tt_Ident) then begin @@ -2038,6 +2042,7 @@ function TTypeNameDef.DoParse(AParser: TTextParser): Boolean; var s : AnsiString; tt : TTokenType; + fntype : TFunctionTypeDef; begin Result := false; AParser.FindNextToken(s, tt); @@ -2045,19 +2050,38 @@ begin AParser.SetError( ErrExpectStr('typedef', s)); Exit; end; - + _Type := ParseTypeDef(Self, AParser); if not Assigned(_Type) then Exit; - Items.Add(_Type); Result := AParser.FindNextToken(_TypeName, tt); - if not Result then begin - AParser.SetError( ErrExpectStr('Type name identifier', _TypeName) ); - Exit; - end; - _inherited := GetTypeNameFromEntity( _Type ); - AParser.FindNextToken(s, tt); // skip last ';'; + if (tt = tt_Symbol) and (_TypeName = '(') then begin + fntype := TFunctionTypeDef.Create(Self); + fnType._ResultType := _Type; + _Type.Owner := fntype; + _Type:=fntype; + // function-type + Result := AParser.FindNextToken(s, tt); + if (tt<>tt_Symbol) and (s <>'*') then AParser.SetError( ErrExpectStr('*', s) ); + AParser.FindNextToken(_TypeName, tt); + AParser.FindNextToken(s, tt); + if not Result then Exit; + if (tt<>tt_Symbol)and (s <> ')') then AParser.SetError( ErrExpectStr(')', s) ); + + Result := fnType.Parse(AParser); + if not Result then Exit; + AParser.FindNextToken(s, tt); // skip last ';'; + + end else begin + if not Result then begin + AParser.SetError( ErrExpectStr('Type name identifier', _TypeName) ); + Exit; + end; + _inherited := GetTypeNameFromEntity( _Type ); + AParser.FindNextToken(s, tt); // skip last ';'; + end; + if Assigned(_Type) then Items.Add(_Type); Result := true; end; @@ -3014,8 +3038,6 @@ begin _RawText := Copy(APArser.Buf, idx, AParser.Index - idx); end; - - initialization finalization diff --git a/bindings/pascocoa/parser/ObjCParserUtils.pas b/bindings/pascocoa/parser/ObjCParserUtils.pas index 8e6c857e2..f7bf07180 100755 --- a/bindings/pascocoa/parser/ObjCParserUtils.pas +++ b/bindings/pascocoa/parser/ObjCParserUtils.pas @@ -864,7 +864,13 @@ begin fntype := TTypeDef(f._ResultType)._Name; end else begin isptr := false; - fntype := '{todo: not implemented... see .h file for type}'; + s := 'see .h file for proper type'; + if f._ResultType is TEntityStruct then begin + s := 'struct ' + TEntityStruct(f._ResultType)._Name; + if TEntityStruct(f._ResultType)._isPointer then s := s + '*' + else s := s + '{...}'; + end; + fntype := '? {'+s+'}'; end; restype := ObjCToDelphiType(fntype, isptr); @@ -1123,6 +1129,10 @@ begin WriteOutTypeDefRecord(typedef._Type as TEntityStruct, ' ', 'packed ', subs); ConvertSettings.StructTypes.Add(typedef._TypeName); end; + end else if typedef._Type is TFunctionTypeDef then begin + subs.Add('type'); + tmp := Format(' %s = %s', [typedef._TypeName, CToDelphiFuncType(TFunctionTypeDef(typedef._Type))]); + Subs.Add(tmp); end; subs.Add(''); @@ -1971,7 +1981,7 @@ begin st.Add('(*' + cmt._Comment + '*)'); cmt.Free; hdr.Items.Delete(0); - end; + end; WriteOutHeaderSection(hdr, st); diff --git a/bindings/pascocoa/parser/default.ini b/bindings/pascocoa/parser/default.ini index b96bccb77..980bc4ae6 100755 --- a/bindings/pascocoa/parser/default.ini +++ b/bindings/pascocoa/parser/default.ini @@ -232,9 +232,39 @@ NSXMLNode=objcclass NSXMLParser=objcclass [TokenReplace] -DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER="" -DEPRECATED_IN_MAC_OS_X_VERSION_10_4_AND_LATER="" -AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER="" -AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER="" -AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER="" -AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER="" +APPKIT_EXTERN= +AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4= +AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5= +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED= +DEPRECATED_IN_MAC_OS_X_VERSION_10_0_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED= +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_1= +DEPRECATED_IN_MAC_OS_X_VERSION_10_1_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED= +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_2= +AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_2= +DEPRECATED_IN_MAC_OS_X_VERSION_10_2_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER_BUT_DEPRECATED= +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3= +AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3= +AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3= +DEPRECATED_IN_MAC_OS_X_VERSION_10_3_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER_BUT_DEPRECATED= +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4= +AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4= +AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4= +AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4= +DEPRECATED_IN_MAC_OS_X_VERSION_10_4_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER= +AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER_BUT_DEPRECATED= +AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5= +AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5= +AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5= +AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5= +AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5= +DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER=