From: <ou...@us...> - 2010-02-22 18:40:11
|
Revision: 3201 http://jcl.svn.sourceforge.net/jcl/?rev=3201&view=rev Author: outchy Date: 2010-02-22 18:40:02 +0000 (Mon, 22 Feb 2010) Log Message: ----------- Add support for $JPPSETSTRVALUE, $JPPSETBOOLVALUE, $JPPSETINTVALUE directives. Minor changes in JppState.pas. Modified Paths: -------------- trunk/jcl/devtools/jpp/JppLexer.pas trunk/jcl/devtools/jpp/JppParser.pas trunk/jcl/devtools/jpp/JppState.pas Modified: trunk/jcl/devtools/jpp/JppLexer.pas =================================================================== --- trunk/jcl/devtools/jpp/JppLexer.pas 2010-02-22 18:36:33 UTC (rev 3200) +++ trunk/jcl/devtools/jpp/JppLexer.pas 2010-02-22 18:40:02 UTC (rev 3201) @@ -63,7 +63,8 @@ TJppToken = (ptEof, ptComment, ptText, ptEol, ptDefine, ptUndef, ptIfdef, ptIfndef, ptIfopt, ptElse, ptEndif, ptInclude, ptJppDefineMacro, ptJppExpandMacro, ptJppUndefMacro, - ptJppStrValue, ptJppIntValue, ptJppBoolValue, ptJppLoop); + ptJppGetStrValue, ptJppGetIntValue, ptJppGetBoolValue, + ptJppSetStrValue, ptJppSetIntValue, ptJppSetBoolValue, ptJppLoop); EJppLexerError = class(Exception); @@ -134,9 +135,15 @@ AddToken('jppdefinemacro', ptjppDefineMacro); AddToken('jppexpandmacro', ptJppExpandMacro); AddToken('jppundefmacro', ptJppUndefMacro); - AddToken('jppstrvalue', ptJppStrValue); - AddToken('jppintvalue', ptJppIntValue); - AddToken('jppboolvalue', ptJppBoolValue); + AddToken('jppstrvalue', ptJppGetStrValue); // backward compatibility + AddToken('jppintvalue', ptJppGetIntValue); // backward compatibility + AddToken('jppboolvalue', ptJppGetBoolValue); // backward compatibility + AddToken('jppgetstrvalue', ptJppGetStrValue); + AddToken('jppgetintvalue', ptJppGetIntValue); + AddToken('jppgetboolvalue', ptJppGetBoolValue); + AddToken('jppsetstrvalue', ptJppSetStrValue); + AddToken('jppsetintvalue', ptJppSetIntValue); + AddToken('jppsetboolvalue', ptJppSetBoolValue); AddToken('jpploop', ptJppLoop); FBuf := ABuffer; @@ -210,9 +217,12 @@ ptUndef, ptIfdef, ptIfndef, - ptJppStrValue, - ptJppIntValue, - ptJppBoolValue: + ptJppGetStrValue, + ptJppGetIntValue, + ptJppGetBoolValue, + ptJppSetStrValue, + ptJppSetIntValue, + ptJppSetBoolValue: begin BPos := APos; StrSkipChars(BPos, CharIsWhiteSpace); Modified: trunk/jcl/devtools/jpp/JppParser.pas =================================================================== --- trunk/jcl/devtools/jpp/JppParser.pas 2010-02-22 18:36:33 UTC (rev 3200) +++ trunk/jcl/devtools/jpp/JppParser.pas 2010-02-22 18:40:02 UTC (rev 3201) @@ -85,10 +85,13 @@ procedure ParseExpandMacro; procedure ParseUndefMacro; - procedure ParseBoolValue; - procedure ParseIntValue; + procedure ParseGetBoolValue; + procedure ParseGetIntValue; + procedure ParseGetStrValue; procedure ParseLoop; - procedure ParseStrValue; + procedure ParseSetBoolValue; + procedure ParseSetIntValue; + procedure ParseSetStrValue; // same as ParseText, but throws result away procedure Skip; @@ -116,7 +119,7 @@ implementation uses - JclBase, JclStrings, JclStreams; + JclBase, JclStrings, JclStreams, JclSysUtils; {$IFDEF MSWINDOWS} const @@ -296,9 +299,12 @@ ptJppDefineMacro, ptJppExpandMacro, ptJppUndefMacro, - ptJppStrValue, - ptJppIntValue, - ptJppBoolValue, + ptJppGetStrValue, + ptJppGetIntValue, + ptJppGetBoolValue, + ptJppSetStrValue, + ptJppSetIntValue, + ptJppSetBoolValue, ptJppLoop: begin Recurse := True; @@ -432,9 +438,12 @@ ptJppDefineMacro, ptJppExpandMacro, ptJppUndefMacro, - ptJppStrValue, - ptJppIntValue, - ptJppBoolValue, + ptJppGetStrValue, + ptJppGetIntValue, + ptJppGetBoolValue, + ptJppSetStrValue, + ptJppSetIntValue, + ptJppSetBoolValue, ptJppLoop: FAllWhiteSpaceIn := False; ptInclude: @@ -621,7 +630,7 @@ NextToken; end; -procedure TJppParser.ParseStrValue; +procedure TJppParser.ParseGetStrValue; var Name: string; begin @@ -630,7 +639,7 @@ NextToken; end; -procedure TJppParser.ParseIntValue; +procedure TJppParser.ParseGetIntValue; var Name: string; begin @@ -639,7 +648,7 @@ NextToken; end; -procedure TJppParser.ParseBoolValue; +procedure TJppParser.ParseGetBoolValue; var Name: string; begin @@ -683,6 +692,81 @@ NextToken; end; +procedure TJppParser.ParseSetStrValue; +var + I, J: Integer; + Text, Name, Value: string; +begin + I := 1; + Text := Lexer.RawComment; + while (I <= Length(Text)) and not CharIsWhiteSpace(Text[I]) do + Inc(I); + while (I <= Length(Text)) and CharIsWhiteSpace(Text[I]) do + Inc(I); + J := I; + while (J <= Length(Text)) and CharIsValidIdentifierLetter(Text[J]) do + Inc(J); + Name := Copy(Text, I, J - I); + while (J <= Length(Text)) and CharIsWhiteSpace(Text[J]) do + Inc(J); + I := Length(Text); + if Text[I] = ')' then + Dec(I); + Value := Copy(Text, J, I - J); + State.StringValues[Name] := Value; + NextToken; +end; + +procedure TJppParser.ParseSetIntValue; +var + I, J: Integer; + Text, Name, Value: string; +begin + I := 1; + Text := Lexer.RawComment; + while (I <= Length(Text)) and not CharIsWhiteSpace(Text[I]) do + Inc(I); + while (I <= Length(Text)) and CharIsWhiteSpace(Text[I]) do + Inc(I); + J := I; + while (J <= Length(Text)) and CharIsValidIdentifierLetter(Text[J]) do + Inc(J); + Name := Copy(Text, I, J - I); + while (J <= Length(Text)) and CharIsWhiteSpace(Text[J]) do + Inc(J); + I := Length(Text); + if Text[I] = ')' then + Dec(I); + Value := Copy(Text, J, I - J); + State.IntegerValues[Name] := StrToInt(Value); + NextToken; +end; + +procedure TJppParser.ParseSetBoolValue; +var + I, J: Integer; + Text, Name, Value: string; +begin + I := 1; + Text := Lexer.RawComment; + while (I <= Length(Text)) and not CharIsWhiteSpace(Text[I]) do + Inc(I); + while (I <= Length(Text)) and CharIsWhiteSpace(Text[I]) do + Inc(I); + J := I; + while (J <= Length(Text)) and CharIsValidIdentifierLetter(Text[J]) do + Inc(J); + Name := Copy(Text, I, J - I); + while (J <= Length(Text)) and CharIsWhiteSpace(Text[J]) do + Inc(J); + I := Length(Text); + if Text[I] = ')' then + Dec(I); + Value := Copy(Text, J, I - J); + State.BoolValues[Name] := StrToBoolean(Value); + NextToken; +end; + procedure TJppParser.ParseText; procedure AddRawComment; @@ -749,15 +833,27 @@ else AddRawComment; - ptJppStrValue, ptJppIntValue, ptJppBoolValue, ptJppLoop: + ptJppGetStrValue, + ptJppGetIntValue, + ptJppGetBoolValue, + ptJppSetStrValue, + ptJppSetIntValue, + ptJppSetBoolValue, + ptJppLoop: if poProcessValues in State.Options then case Lexer.CurrTok of - ptJppStrValue: - ParseStrValue; - ptJppIntValue: - ParseIntValue; - ptJppBoolValue: - ParseBoolValue; + ptJppGetStrValue: + ParseGetStrValue; + ptJppGetIntValue: + ParseGetIntValue; + ptJppGetBoolValue: + ParseGetBoolValue; + ptJppSetStrValue: + ParseSetStrValue; + ptJppSetIntValue: + ParseSetIntValue; + ptJppSetBoolValue: + ParseSetBoolValue; ptJppLoop: ParseLoop; end Modified: trunk/jcl/devtools/jpp/JppState.pas =================================================================== --- trunk/jcl/devtools/jpp/JppState.pas 2010-02-22 18:36:33 UTC (rev 3200) +++ trunk/jcl/devtools/jpp/JppState.pas 2010-02-22 18:40:02 UTC (rev 3201) @@ -355,7 +355,7 @@ PI := GetPropInfo(Self, ASymbol); if Assigned(PI) then begin - PV := GetPropValue(Self, ASymbol); + PV := GetPropValue(Self, PI); if Boolean(PV) then Result := ttDefined else @@ -392,8 +392,8 @@ Result := (FStateStack.Peek as TSimplePppStateItem).SearchPath; end; -procedure TPppState.InternalPushState(const ExcludedFiles, - SearchPath: IJclStrList; const Macros: IJclStrIntfMap; const Defines: IJclStrMap); +procedure TPppState.InternalPushState(const ExcludedFiles, SearchPath: IJclStrList; + const Macros: IJclStrIntfMap; const Defines: IJclStrMap); var AStateItem: TSimplePppStateItem; begin @@ -462,10 +462,8 @@ var ADefines: IJclStrMap; ASymbolNames: IJclStrIterator; - Found: Boolean; PI: PPropInfo; begin - Found := False; ADefines := InternalPeekDefines; ASymbolNames := ADefines.KeySet.First; while ASymbolNames.HasNext do @@ -473,11 +471,10 @@ if JclStrings.StrSame(ASymbolNames.Next, ASymbol) then begin ADefines.Items[ASymbolNames.GetString] := TObject(Value); - Found := True; - Break; + Exit; end; end; - if (not Found) and (Value <> ttUnknown) then + if Value <> ttUnknown then begin PI := GetPropInfo(Self, ASymbol); if Assigned(PI) then @@ -486,10 +483,10 @@ SetPropValue(Self, PI, True) else SetPropValue(Self, PI, False); + Exit; end; end; - if not Found then - ADefines.Items[ASymbol] := TObject(Value); + ADefines.Items[ASymbol] := TObject(Value); end; procedure TPppState.SetIntegerValue(const Name: string; Value: Integer); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |