+ 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;
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);
@ -2048,16 +2053,35 @@ begin
_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

View File

@ -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('');

View File

@ -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=