+ fixed function-type parsing and pascal code generation. Added some macroses from AvailabilityMacros.h to default.ini

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@750 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
skalogryz
2009-03-24 22:13:48 +00:00
parent d131f23d62
commit 1d04d5aab3
3 changed files with 86 additions and 24 deletions

View File

@ -252,7 +252,7 @@ type
function DoParse(AParser: TTextParser): Boolean; override; function DoParse(AParser: TTextParser): Boolean; override;
end; end;
TFunctionTypeDef = class(TEntity) TFunctionTypeDef = class(TEntity) // Parses only Parameters list (starting with Bracket "(")
protected protected
function DoParse(APArser: TTextParser): Boolean; override; function DoParse(APArser: TTextParser): Boolean; override;
public public
@ -331,8 +331,6 @@ type
_TypeName : AnsiString; _TypeName : AnsiString;
end; end;
{ TStructTypeDef }
//C token: struct //C token: struct
TEntityStruct = class(TEntity) TEntityStruct = class(TEntity)
{update} {update}
@ -1481,7 +1479,7 @@ end;
function ParseFunctionOrVar(Owner: TEntity; AParser: TTextParser): Boolean; function ParseFunctionOrVar(Owner: TEntity; AParser: TTextParser): Boolean;
var var
ctype : TTypeDef; ctype : TEntity;
_name : AnsiString; _name : AnsiString;
isfunc : Boolean; isfunc : Boolean;
tt : TTokenType; tt : TTokenType;
@ -1513,9 +1511,15 @@ begin
AParser.Index := AParser.TokenPos; 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); Result := ctype.Parse(AParser);
if not Result then Exit; if not Result then Exit;}
// expecting name of Variable or Function name // expecting name of Variable or Function name
if not AParser.FindNextToken(_name, tt) or (tt <> tt_Ident) then begin if not AParser.FindNextToken(_name, tt) or (tt <> tt_Ident) then begin
@ -2038,6 +2042,7 @@ function TTypeNameDef.DoParse(AParser: TTextParser): Boolean;
var var
s : AnsiString; s : AnsiString;
tt : TTokenType; tt : TTokenType;
fntype : TFunctionTypeDef;
begin begin
Result := false; Result := false;
AParser.FindNextToken(s, tt); AParser.FindNextToken(s, tt);
@ -2048,16 +2053,35 @@ begin
_Type := ParseTypeDef(Self, AParser); _Type := ParseTypeDef(Self, AParser);
if not Assigned(_Type) then Exit; if not Assigned(_Type) then Exit;
Items.Add(_Type);
Result := AParser.FindNextToken(_TypeName, tt); Result := AParser.FindNextToken(_TypeName, tt);
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 if not Result then begin
AParser.SetError( ErrExpectStr('Type name identifier', _TypeName) ); AParser.SetError( ErrExpectStr('Type name identifier', _TypeName) );
Exit; Exit;
end; end;
_inherited := GetTypeNameFromEntity( _Type ); _inherited := GetTypeNameFromEntity( _Type );
AParser.FindNextToken(s, tt); // skip last ';'; AParser.FindNextToken(s, tt); // skip last ';';
end;
if Assigned(_Type) then Items.Add(_Type);
Result := true; Result := true;
end; end;
@ -3014,8 +3038,6 @@ begin
_RawText := Copy(APArser.Buf, idx, AParser.Index - idx); _RawText := Copy(APArser.Buf, idx, AParser.Index - idx);
end; end;
initialization initialization
finalization finalization

View File

@ -864,7 +864,13 @@ begin
fntype := TTypeDef(f._ResultType)._Name; fntype := TTypeDef(f._ResultType)._Name;
end else begin end else begin
isptr := false; 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; end;
restype := ObjCToDelphiType(fntype, isptr); restype := ObjCToDelphiType(fntype, isptr);
@ -1123,6 +1129,10 @@ begin
WriteOutTypeDefRecord(typedef._Type as TEntityStruct, ' ', 'packed ', subs); WriteOutTypeDefRecord(typedef._Type as TEntityStruct, ' ', 'packed ', subs);
ConvertSettings.StructTypes.Add(typedef._TypeName); ConvertSettings.StructTypes.Add(typedef._TypeName);
end; 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; end;
subs.Add(''); subs.Add('');

View File

@ -232,9 +232,39 @@ NSXMLNode=objcclass
NSXMLParser=objcclass NSXMLParser=objcclass
[TokenReplace] [TokenReplace]
DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER="" APPKIT_EXTERN=
DEPRECATED_IN_MAC_OS_X_VERSION_10_4_AND_LATER="" AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_4=
AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER="" AVAILABLE_MAC_OS_X_VERSION_10_1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5=
AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER="" AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER=
AVAILABLE_MAC_OS_X_VERSION_10_3_AND_LATER="" AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED=
AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER="" 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=