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;
|
||||
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
|
||||
|
@ -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);
|
||||
|
@ -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=
|
||||
|
Reference in New Issue
Block a user