Skip to content

Commit 69b5c13

Browse files
committed
Refactored dynamic arrays + initial JIT x86-64 support
Array indices upgraded from Integer to NativeInt
1 parent dbaeaf3 commit 69b5c13

21 files changed

+1875
-1079
lines changed

Source/SourceUtils/dwsCaseNormalizer.pas

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ TSymbolLocation = class (TRefCountedObject)
5252
end;
5353

5454
TSymbolLocations = class(TObjectList<TSymbolLocation>)
55-
function CompareLocations(a, b : Integer) : Integer;
56-
procedure Swap(a, b : Integer);
55+
function CompareLocations(a, b : NativeInt) : Integer;
56+
procedure Swap(a, b : NativeInt);
5757
end;
5858

5959
// CompareLocations
6060
//
61-
function TSymbolLocations.CompareLocations(a, b : Integer) : Integer;
61+
function TSymbolLocations.CompareLocations(a, b : NativeInt) : Integer;
6262
var
6363
locA, locB : TSymbolLocation;
6464
begin
@@ -71,7 +71,7 @@ function TSymbolLocations.CompareLocations(a, b : Integer) : Integer;
7171

7272
// Swap
7373
//
74-
procedure TSymbolLocations.Swap(a, b : Integer);
74+
procedure TSymbolLocations.Swap(a, b : NativeInt);
7575
var
7676
tmp : TSymbolLocation;
7777
begin

Source/dwsArrayElementContext.pas

Lines changed: 62 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -28,54 +28,54 @@ interface
2828
TArrayElementDataContext = class (TInterfacedObject, IDataContext)
2929
private
3030
FArray : IScriptDynArray;
31-
FIndex : Integer;
31+
FIndex : NativeInt;
3232
FElementSize : Integer;
33-
FBase : Integer;
33+
FBase : NativeInt;
3434

3535
protected
3636
function GetSelf : TObject;
3737

38-
function ComputeAddr(addr : Integer) : Integer; inline;
38+
function ComputeAddr(addr : NativeInt) : NativeInt; inline;
3939

40-
function GetAsVariant(addr : Integer) : Variant;
41-
procedure SetAsVariant(addr : Integer; const value : Variant);
42-
function GetAsInteger(addr : Integer) : Int64;
43-
procedure SetAsInteger(addr : Integer; const value : Int64);
44-
function GetAsFloat(addr : Integer) : Double;
45-
procedure SetAsFloat(addr : Integer; const value : Double);
46-
function GetAsBoolean(addr : Integer) : Boolean;
47-
procedure SetAsBoolean(addr : Integer; const value : Boolean);
48-
function GetAsString(addr : Integer) : String;
49-
procedure SetAsString(addr : Integer; const value : String);
50-
function GetAsInterface(addr : Integer) : IUnknown;
51-
procedure SetAsInterface(addr : Integer; const value : IUnknown);
40+
function GetAsVariant(addr : NativeInt) : Variant;
41+
procedure SetAsVariant(addr : NativeInt; const value : Variant);
42+
function GetAsInteger(addr : NativeInt) : Int64;
43+
procedure SetAsInteger(addr : NativeInt; const value : Int64);
44+
function GetAsFloat(addr : NativeInt) : Double;
45+
procedure SetAsFloat(addr : NativeInt; const value : Double);
46+
function GetAsBoolean(addr : NativeInt) : Boolean;
47+
procedure SetAsBoolean(addr : NativeInt; const value : Boolean);
48+
function GetAsString(addr : NativeInt) : String;
49+
procedure SetAsString(addr : NativeInt; const value : String);
50+
function GetAsInterface(addr : NativeInt) : IUnknown;
51+
procedure SetAsInterface(addr : NativeInt; const value : IUnknown);
5252

53-
function Addr : Integer;
54-
function DataLength : Integer;
53+
function Addr : NativeInt;
54+
function DataLength : NativeInt;
5555

5656
function AsPData : PData;
5757

58-
procedure CreateOffset(offset : Integer; var result : IDataContext);
58+
procedure CreateOffset(offset : NativeInt; var result : IDataContext);
5959

60-
procedure EvalAsVariant(addr : Integer; var result : Variant);
61-
procedure EvalAsString(addr : Integer; var result : String);
62-
procedure EvalAsInterface(addr : Integer; var result : IUnknown);
60+
procedure EvalAsVariant(addr : NativeInt; var result : Variant);
61+
procedure EvalAsString(addr : NativeInt; var result : String);
62+
procedure EvalAsInterface(addr : NativeInt; var result : IUnknown);
6363

64-
function IsEmpty(addr : Integer) : Boolean;
65-
function VarType(addr : Integer) : TVarType;
64+
function IsEmpty(addr : NativeInt) : Boolean;
65+
function VarType(addr : NativeInt) : TVarType;
6666

67-
procedure CopyData(const destData : TData; destAddr, size : Integer);
68-
procedure WriteData(const src : IDataContext; size : Integer); overload;
69-
procedure WriteData(destAddr : Integer; const src : IDataContext; size : Integer); overload;
70-
procedure WriteData(const srcData : TData; srcAddr, size : Integer); overload;
71-
function SameData(addr : Integer; const otherData : TData; otherAddr, size : Integer) : Boolean;
67+
procedure CopyData(const destData : TData; destAddr, size : NativeInt);
68+
procedure WriteData(const src : IDataContext; size : NativeInt); overload;
69+
procedure WriteData(destAddr : NativeInt; const src : IDataContext; size : NativeInt); overload;
70+
procedure WriteData(const srcData : TData; srcAddr, size : NativeInt); overload;
71+
function SameData(addr : NativeInt; const otherData : TData; otherAddr, size : NativeInt) : Boolean;
7272

73-
function IncInteger(addr : Integer; delta : Int64) : Int64;
73+
function IncInteger(addr : NativeInt; delta : Int64) : Int64;
7474

75-
function HashCode(size : Integer) : Cardinal;
75+
function HashCode(size : NativeInt) : Cardinal;
7676

7777
public
78-
constructor Create(const anArray : IScriptDynArray; anIndex : Integer);
78+
constructor Create(const anArray : IScriptDynArray; anIndex : NativeInt);
7979

8080
end;
8181

@@ -88,7 +88,7 @@ implementation
8888

8989
// Create
9090
//
91-
constructor TArrayElementDataContext.Create(const anArray : IScriptDynArray; anIndex : Integer);
91+
constructor TArrayElementDataContext.Create(const anArray : IScriptDynArray; anIndex : NativeInt);
9292
begin
9393
inherited Create;
9494
if FIndex < 0 then
@@ -108,7 +108,7 @@ function TArrayElementDataContext.GetSelf : TObject;
108108

109109
// ComputeAddr
110110
//
111-
function TArrayElementDataContext.ComputeAddr(addr : Integer) : Integer;
111+
function TArrayElementDataContext.ComputeAddr(addr : NativeInt) : NativeInt;
112112
begin
113113
Assert(Cardinal(addr) < Cardinal(FElementSize));
114114
if FIndex >= FArray.ArrayLength then
@@ -118,98 +118,98 @@ function TArrayElementDataContext.ComputeAddr(addr : Integer) : Integer;
118118

119119
// GetAsVariant
120120
//
121-
function TArrayElementDataContext.GetAsVariant(addr : Integer) : Variant;
121+
function TArrayElementDataContext.GetAsVariant(addr : NativeInt) : Variant;
122122
begin
123123
FArray.EvalAsVariant(ComputeAddr(addr), Result);
124124
end;
125125

126126
// SetAsVariant
127127
//
128-
procedure TArrayElementDataContext.SetAsVariant(addr : Integer; const value : Variant);
128+
procedure TArrayElementDataContext.SetAsVariant(addr : NativeInt; const value : Variant);
129129
begin
130130
FArray.SetAsVariant(ComputeAddr(addr), value);
131131
end;
132132

133133
// GetAsInteger
134134
//
135-
function TArrayElementDataContext.GetAsInteger(addr : Integer) : Int64;
135+
function TArrayElementDataContext.GetAsInteger(addr : NativeInt) : Int64;
136136
begin
137137
Result := FArray.AsInteger[ComputeAddr(addr)];
138138
end;
139139

140140
// SetAsInteger
141141
//
142-
procedure TArrayElementDataContext.SetAsInteger(addr : Integer; const value : Int64);
142+
procedure TArrayElementDataContext.SetAsInteger(addr : NativeInt; const value : Int64);
143143
begin
144144
FArray.AsInteger[ComputeAddr(addr)] := value;
145145
end;
146146

147147
// GetAsFloat
148148
//
149-
function TArrayElementDataContext.GetAsFloat(addr : Integer) : Double;
149+
function TArrayElementDataContext.GetAsFloat(addr : NativeInt) : Double;
150150
begin
151151
Result := FArray.AsFloat[ComputeAddr(addr)];
152152
end;
153153

154154
// SetAsFloat
155155
//
156-
procedure TArrayElementDataContext.SetAsFloat(addr : Integer; const value : Double);
156+
procedure TArrayElementDataContext.SetAsFloat(addr : NativeInt; const value : Double);
157157
begin
158158
FArray.AsFloat[ComputeAddr(addr)] := value;
159159
end;
160160

161161
// GetAsBoolean
162162
//
163-
function TArrayElementDataContext.GetAsBoolean(addr : Integer) : Boolean;
163+
function TArrayElementDataContext.GetAsBoolean(addr : NativeInt) : Boolean;
164164
begin
165165
Result := FArray.AsBoolean[FIndex];
166166
end;
167167

168168
// SetAsBoolean
169169
//
170-
procedure TArrayElementDataContext.SetAsBoolean(addr : Integer; const value : Boolean);
170+
procedure TArrayElementDataContext.SetAsBoolean(addr : NativeInt; const value : Boolean);
171171
begin
172172
FArray.AsBoolean[ComputeAddr(addr)] := value;
173173
end;
174174

175175
// GetAsString
176176
//
177-
function TArrayElementDataContext.GetAsString(addr : Integer) : String;
177+
function TArrayElementDataContext.GetAsString(addr : NativeInt) : String;
178178
begin
179179
FArray.EvalAsString(ComputeAddr(addr), Result);
180180
end;
181181

182182
// SetAsString
183183
//
184-
procedure TArrayElementDataContext.SetAsString(addr : Integer; const value : String);
184+
procedure TArrayElementDataContext.SetAsString(addr : NativeInt; const value : String);
185185
begin
186186
FArray.SetAsString(ComputeAddr(addr), value);
187187
end;
188188

189189
// GetAsInterface
190190
//
191-
function TArrayElementDataContext.GetAsInterface(addr : Integer) : IUnknown;
191+
function TArrayElementDataContext.GetAsInterface(addr : NativeInt) : IUnknown;
192192
begin
193193
FArray.EvalAsInterface(ComputeAddr(addr), Result);
194194
end;
195195

196196
// SetAsInterface
197197
//
198-
procedure TArrayElementDataContext.SetAsInterface(addr : Integer; const value : IUnknown);
198+
procedure TArrayElementDataContext.SetAsInterface(addr : NativeInt; const value : IUnknown);
199199
begin
200200
FArray.SetAsInterface(ComputeAddr(addr), value);
201201
end;
202202

203203
// Addr
204204
//
205-
function TArrayElementDataContext.Addr : Integer;
205+
function TArrayElementDataContext.Addr : NativeInt;
206206
begin
207207
Result := 0;
208208
end;
209209

210210
// DataLength
211211
//
212-
function TArrayElementDataContext.DataLength : Integer;
212+
function TArrayElementDataContext.DataLength : NativeInt;
213213
begin
214214
Result := FElementSize;
215215
end;
@@ -223,7 +223,7 @@ function TArrayElementDataContext.AsPData : PData;
223223

224224
// CreateOffset
225225
//
226-
procedure TArrayElementDataContext.CreateOffset(offset : Integer; var result : IDataContext);
226+
procedure TArrayElementDataContext.CreateOffset(offset : NativeInt; var result : IDataContext);
227227
var
228228
dc : TArrayElementDataContext;
229229
begin
@@ -237,54 +237,54 @@ procedure TArrayElementDataContext.CreateOffset(offset : Integer; var result : I
237237

238238
// EvalAsVariant
239239
//
240-
procedure TArrayElementDataContext.EvalAsVariant(addr : Integer; var result : Variant);
240+
procedure TArrayElementDataContext.EvalAsVariant(addr : NativeInt; var result : Variant);
241241
begin
242242
FArray.EvalAsVariant(ComputeAddr(addr), result);
243243
end;
244244

245245
// EvalAsString
246246
//
247-
procedure TArrayElementDataContext.EvalAsString(addr : Integer; var result : String);
247+
procedure TArrayElementDataContext.EvalAsString(addr : NativeInt; var result : String);
248248
begin
249249
FArray.EvalAsString(ComputeAddr(addr), result);
250250
end;
251251

252252
// EvalAsInterface
253253
//
254-
procedure TArrayElementDataContext.EvalAsInterface(addr : Integer; var result : IUnknown);
254+
procedure TArrayElementDataContext.EvalAsInterface(addr : NativeInt; var result : IUnknown);
255255
begin
256256
FArray.EvalAsInterface(ComputeAddr(addr), result);
257257
end;
258258

259259
// IsEmpty
260260
//
261-
function TArrayElementDataContext.IsEmpty(addr : Integer) : Boolean;
261+
function TArrayElementDataContext.IsEmpty(addr : NativeInt) : Boolean;
262262
begin
263263
Result := FArray.IsEmpty(ComputeAddr(addr));
264264
end;
265265

266266
// VarType
267267
//
268-
function TArrayElementDataContext.VarType(addr : Integer) : TVarType;
268+
function TArrayElementDataContext.VarType(addr : NativeInt) : TVarType;
269269
begin
270270
Result := FArray.VarType(ComputeAddr(addr));
271271
end;
272272

273273
// CopyData
274274
//
275-
procedure TArrayElementDataContext.CopyData(const destData : TData; destAddr, size : Integer);
275+
procedure TArrayElementDataContext.CopyData(const destData : TData; destAddr, size : NativeInt);
276276
var
277-
i : Integer;
277+
i : NativeInt;
278278
begin
279279
for i := 0 to size-1 do
280280
FArray.EvalAsVariant(ComputeAddr(i), destData[destAddr+i]);
281281
end;
282282

283283
// WriteData
284284
//
285-
procedure TArrayElementDataContext.WriteData(const src : IDataContext; size : Integer);
285+
procedure TArrayElementDataContext.WriteData(const src : IDataContext; size : NativeInt);
286286
var
287-
p, i : Integer;
287+
p, i : NativeInt;
288288
v : Variant;
289289
begin
290290
p := ComputeAddr(0);
@@ -296,28 +296,28 @@ procedure TArrayElementDataContext.WriteData(const src : IDataContext; size : In
296296

297297
// WriteData
298298
//
299-
procedure TArrayElementDataContext.WriteData(destAddr : Integer; const src : IDataContext; size : Integer);
299+
procedure TArrayElementDataContext.WriteData(destAddr : NativeInt; const src : IDataContext; size : NativeInt);
300300
begin
301301
raise Exception.Create('TArrayElementDataContext.WriteData(2) not implemented');
302302
end;
303303

304304
// WriteData
305305
//
306-
procedure TArrayElementDataContext.WriteData(const srcData : TData; srcAddr, size : Integer);
306+
procedure TArrayElementDataContext.WriteData(const srcData : TData; srcAddr, size : NativeInt);
307307
begin
308308
raise Exception.Create('TArrayElementDataContext.WriteData(3) not implemented');
309309
end;
310310

311311
// SameData
312312
//
313-
function TArrayElementDataContext.SameData(addr : Integer; const otherData : TData; otherAddr, size : Integer) : Boolean;
313+
function TArrayElementDataContext.SameData(addr : NativeInt; const otherData : TData; otherAddr, size : NativeInt) : Boolean;
314314
begin
315315
raise Exception.Create('TArrayElementDataContext.SameData not implemented');
316316
end;
317317

318318
// IncInteger
319319
//
320-
function TArrayElementDataContext.IncInteger(addr : Integer; delta : Int64) : Int64;
320+
function TArrayElementDataContext.IncInteger(addr : NativeInt; delta : Int64) : Int64;
321321
begin
322322
addr := ComputeAddr(addr);
323323
Result := FArray.AsInteger[addr] + delta;
@@ -326,7 +326,7 @@ function TArrayElementDataContext.IncInteger(addr : Integer; delta : Int64) : In
326326

327327
// HashCode
328328
//
329-
function TArrayElementDataContext.HashCode(size : Integer) : Cardinal;
329+
function TArrayElementDataContext.HashCode(size : NativeInt) : Cardinal;
330330
begin
331331
Result := FArray.HashCode(ComputeAddr(0), size);
332332
end;

0 commit comments

Comments
 (0)