File tree Expand file tree Collapse file tree 7 files changed +81
-3
lines changed
Expand file tree Collapse file tree 7 files changed +81
-3
lines changed Original file line number Diff line number Diff line change @@ -153,7 +153,8 @@ interface
153153 anReintroduce,
154154 anOverload,
155155 anAbstract,
156- anInline
156+ anInline,
157+ anAlign
157158 );
158159
159160const
@@ -307,7 +308,8 @@ interface
307308 ' reintroduce' ,
308309 ' overload' ,
309310 ' abstract' ,
310- ' inline'
311+ ' inline' ,
312+ ' align'
311313 );
312314
313315implementation
Original file line number Diff line number Diff line change @@ -177,6 +177,7 @@ TPasSyntaxTreeBuilder = class(TmwSimplePasParEx)
177177 procedure PropertyName ; override;
178178 procedure PropertyParameterList ; override;
179179 procedure RaiseStatement ; override;
180+ procedure RecordAlignValue ; override;
180181 procedure RecordConstraint ; override;
181182 procedure RecordFieldConstant ; override;
182183 procedure RecordType ; override;
@@ -993,6 +994,12 @@ procedure TPasSyntaxTreeBuilder.RecordConstraint;
993994 end ;
994995end ;
995996
997+ procedure TPasSyntaxTreeBuilder.RecordAlignValue ;
998+ begin
999+ FStack.Peek.SetAttribute(anAlign, Lexer.Token);
1000+ inherited ;
1001+ end ;
1002+
9961003procedure TPasSyntaxTreeBuilder.ConstSection ;
9971004var
9981005 ConstSect, Temp: TSyntaxNode;
Original file line number Diff line number Diff line change @@ -54,6 +54,7 @@ interface
5454 ptAbstract,
5555 ptAdd,
5656 ptAddressOp,
57+ ptAlign,
5758 ptAmpersand,
5859 ptAnd,
5960 ptAnsiComment,
Original file line number Diff line number Diff line change @@ -757,7 +757,8 @@ function TmwBasePasLex.Func43: TptTokenKind;
757757begin
758758 Result := ptIdentifier;
759759 if KeyComp(' Int64' ) then FExID := ptInt64
760- else if KeyComp(' local' ) then FExID := ptLocal;
760+ else if KeyComp(' local' ) then FExID := ptLocal
761+ else if KeyComp(' align' ) then Result := ptAlign;
761762end ;
762763
763764function TmwBasePasLex.Func44 : TptTokenKind;
Original file line number Diff line number Diff line change @@ -437,6 +437,8 @@ TmwSimplePasPar = class(TObject)
437437 procedure ReadAccessIdentifier ; virtual ;
438438 procedure RealIdentifier ; virtual ;
439439 procedure RealType ; virtual ;
440+ procedure RecordAlign ; virtual ;
441+ procedure RecordAlignValue ; virtual ;
440442 procedure RecordConstant ; virtual ;
441443 procedure RecordConstraint ; virtual ;
442444 procedure RecordFieldConstant ; virtual ;
@@ -3304,6 +3306,7 @@ procedure TmwSimplePasPar.RecordType;
33043306 Expected(ptEnd);
33053307
33063308 ClassTypeEnd;
3309+ RecordAlign;
33073310end ;
33083311
33093312procedure TmwSimplePasPar.FileType ;
@@ -4311,6 +4314,20 @@ procedure TmwSimplePasPar.SimpleType;
43114314 end ;
43124315end ;
43134316
4317+ procedure TmwSimplePasPar.RecordAlign ;
4318+ begin
4319+ if TokenID = ptAlign then
4320+ begin
4321+ Expected(ptAlign);
4322+ RecordAlignValue;
4323+ end ;
4324+ end ;
4325+
4326+ procedure TmwSimplePasPar.RecordAlignValue ;
4327+ begin
4328+ Expected(ptIntegerConst);
4329+ end ;
4330+
43144331procedure TmwSimplePasPar.RecordFieldConstant ;
43154332begin
43164333 Expected(ptIdentifier);
Original file line number Diff line number Diff line change 1+ unit managedrecords;
2+
3+ interface
4+
5+ type
6+ TMyRecord = record
7+ Value : Integer;
8+ class operator Initialize (out Dest: TMyRecord);
9+ class operator Finalize(var Dest: TMyRecord);
10+ end align 8 ;
11+
12+ implementation
13+
14+ class operator TMyRecord.Initialize (out Dest: TMyRecord);
15+ begin
16+ Dest.Value := 10 ;
17+ Log(' created' + IntToHex (Integer(Pointer(@Dest))));
18+ end ;
19+
20+ class operator TMyRecord.Finalize(var Dest: TMyRecord);
21+ begin
22+ Log(' destroyed' + IntToHex (Integer(Pointer(@Dest))));
23+ end ;
24+
25+ end .
Original file line number Diff line number Diff line change 1+ unit managedrecords;
2+
3+ interface
4+
5+ type
6+ TMyRecord = record
7+ Value : Integer;
8+ class operator Initialize (out Dest: TMyRecord);
9+ class operator Finalize(var Dest: TMyRecord);
10+ end ;
11+
12+ implementation
13+
14+ class operator TMyRecord.Initialize (out Dest: TMyRecord);
15+ begin
16+ Dest.Value := 10 ;
17+ Log(' created' + IntToHex (Integer(Pointer(@Dest))));
18+ end ;
19+
20+ class operator TMyRecord.Finalize(var Dest: TMyRecord);
21+ begin
22+ Log(' destroyed' + IntToHex (Integer(Pointer(@Dest))));
23+ end ;
24+
25+ end .
You can’t perform that action at this time.
0 commit comments