You've already forked lazarus-ccr
+ 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:
@ -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 not Result then begin
|
if (tt = tt_Symbol) and (_TypeName = '(') then begin
|
||||||
AParser.SetError( ErrExpectStr('Type name identifier', _TypeName) );
|
fntype := TFunctionTypeDef.Create(Self);
|
||||||
Exit;
|
fnType._ResultType := _Type;
|
||||||
end;
|
_Type.Owner := fntype;
|
||||||
_inherited := GetTypeNameFromEntity( _Type );
|
_Type:=fntype;
|
||||||
AParser.FindNextToken(s, tt); // skip last ';';
|
|
||||||
|
|
||||||
|
// 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;
|
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
|
||||||
|
@ -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('');
|
||||||
|
@ -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=
|
||||||
|
Reference in New Issue
Block a user