Skip to content

Commit 3abb129

Browse files
committed
Uses synedit in rhodusIDE
1 parent 97faa53 commit 3abb129

File tree

8 files changed

+251
-72
lines changed

8 files changed

+251
-72
lines changed

RhodusIDE/ufMain.dfm

Lines changed: 143 additions & 47 deletions
Large diffs are not rendered by default.

RhodusIDE/ufMain.pas

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ interface
55
uses
66
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
77
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ulibTypes,
8-
Vcl.ExtCtrls, Vcl.FileCtrl, Vcl.ComCtrls,
9-
uExamples, Vcl.Menus, SyncObjs;
8+
Vcl.ExtCtrls, Vcl.FileCtrl, Vcl.ComCtrls, Vcl.Themes,
9+
uExamples, Vcl.Menus, SyncObjs, SynEdit, SynEditHighlighter, SynEditCodeFolding, SynHighlighterPython, SynHighlighterGeneral,
10+
SynEditMiscClasses, SynEditSearch, StrUtils;
1011

1112
const RHODUS_VERSION = 0.5;
1213

@@ -26,7 +27,6 @@ TfrmMain = class(TForm)
2627
Panel3: TPanel;
2728
moutput: TMemo;
2829
Splitter1: TSplitter;
29-
editor: TMemo;
3030
btnLoad: TButton;
3131
OpenDialog: TOpenDialog;
3232
lblVersion: TLabel;
@@ -51,6 +51,9 @@ TfrmMain = class(TForm)
5151
mnuNew: TMenuItem;
5252
pnlImage: TPanel;
5353
pnlDrawing: TImage;
54+
editor: TSynEdit;
55+
SynGeneralSyn1: TSynGeneralSyn;
56+
SynEditSearch1: TSynEditSearch;
5457
procedure btnRunClick(Sender: TObject);
5558
procedure FormCreate(Sender: TObject);
5659
procedure btnLoadClick(Sender: TObject);
@@ -344,8 +347,7 @@ procedure TfrmMain.btnRunClick(Sender: TObject);
344347

345348
procedure TfrmMain.cboExamplesChange(Sender: TObject);
346349
begin
347-
editor.Lines.Text :=
348-
(cboExamples.items.Objects[cboExamples.ItemIndex] as TExample).src;
350+
editor.Lines.Text := (cboExamples.items.Objects[cboExamples.ItemIndex] as TExample).src;
349351
end;
350352

351353
procedure TfrmMain.DirectoryListBox1Change(Sender: TObject);
@@ -420,6 +422,11 @@ procedure TfrmMain.FormCreate(Sender: TObject);
420422
for i := 0 to Bmp.Height - 1 do
421423
line[i] := Bmp.ScanLine [i];
422424
gClear;
425+
editor.Color := $614326;
426+
editor.Font.Color := $F0FBFF;
427+
editor.Gutter.Color := $614326;
428+
editor.Gutter.Font.Color := $838383;
429+
SynGeneralSyn1.KeyAttri.Foreground := $0099FF;
423430
except
424431
on e: exception do
425432
showmessage ('Error in FormCreate: ' + e.message);
@@ -457,4 +464,6 @@ procedure TfrmMain.Quit1Click(Sender: TObject);
457464
loadScript;
458465
end;
459466

467+
initialization
468+
TStyleManager.Engine.RegisterStyleHook(TSynEdit, TScrollBoxStyleHook);
460469
end.

Rhodus_Version_3/RhodusVersionThreeProject.dpr

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ uses
9494
uBuiltInMatrix in 'uBuiltInMatrix.pas',
9595
uMath in 'uMath.pas',
9696
uBuiltInGraphics in 'uBuiltInGraphics.pas',
97-
ulibTypes in '..\librhodus\ulibTypes.pas';
97+
ulibTypes in '..\librhodus\ulibTypes.pas',
98+
uIntStack in '..\VirtualMachine\uIntStack.pas';
9899

99100
begin
100101
ReportMemoryLeaksOnShutdown := True;

Rhodus_Version_3/RhodusVersionThreeProject.dproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@
225225
<DCCReference Include="uMath.pas"/>
226226
<DCCReference Include="uBuiltInGraphics.pas"/>
227227
<DCCReference Include="..\librhodus\ulibTypes.pas"/>
228+
<DCCReference Include="..\VirtualMachine\uIntStack.pas"/>
228229
<BuildConfiguration Include="Base">
229230
<Key>Base</Key>
230231
</BuildConfiguration>

Rhodus_Version_3/uRepl.pas

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
unit uRepl;
22

3+
// This source is distributed under Apache 2.0
4+
5+
// Copyright (C) 2019-2021 Herbert M Sauro
6+
7+
// Author Contact Information:
8+
// email: hsauro@gmail.com
9+
10+
311
interface
412

513
Uses SysUtils, uTerminal, uRhodusEngine;

Rhodus_Version_3/uTerminal.pas

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
unit uTerminal;
22

3-
43
// This source is distributed under Apache 2.0
54

65
// Copyright (C) 2019-2021 Herbert M Sauro

VirtualMachine/uIntStack.pas

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
unit uIntStack;
2+
3+
// This source is distributed under Apache 2.0
4+
5+
// Copyright (C) 2019-2021 Herbert M Sauro
6+
7+
// Author Contact Information:
8+
// email: hsauro@gmail.com
9+
10+
// This is a lighweight integer stack. Implemented to ensure that
11+
// the code can be used with Delphi versions that dodn't have
12+
// generics
13+
14+
interface
15+
16+
Uses Classes, SysUtils;
17+
18+
const
19+
MAX_ENTRIES = 100;
20+
21+
type
22+
TStack = record
23+
data : array of integer;
24+
stackPtr : integer;
25+
maxSize : integer;
26+
end;
27+
28+
procedure create (stack : TStack; n : integer);
29+
procedure push (stack : TStack; value : integer);
30+
function pop (stack : TStack) : integer;
31+
function peek (stack : TStack) : integer;
32+
33+
implementation
34+
35+
procedure create (stack : TStack; n : integer);
36+
begin
37+
stack.maxSize := n;
38+
setLength (stack.data, n);
39+
end;
40+
41+
procedure push (stack : TStack; value : integer);
42+
begin
43+
if stack.stackPtr = stack.maxSize then
44+
raise Exception.Create('Integer stack overflow error.');
45+
inc (stack.stackPtr);
46+
stack.data[stack.stackPtr] := value;
47+
end;
48+
49+
function pop (stack : TStack) : integer;
50+
begin
51+
if stack.stackPtr = -1 then
52+
raise Exception.Create('Integer stack underflow error.');
53+
result := stack.data[stack.stackPtr];
54+
dec (stack.stackPtr);
55+
end;
56+
57+
function peek (stack : TStack) : integer;
58+
begin
59+
result := stack.data[stack.stackPtr];
60+
end;
61+
62+
63+
end.

VirtualMachine/uVM.pas

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ interface
1616
Uses System.SysUtils, System.Diagnostics, System.TimeSpan, uUtils,
1717
uMachineStack, System.generics.Collections, uListObject, uStringObject,
1818
uArrayObject, uSymbolTable, uConstantTable, uProgramCode, uMemoryManager,
19-
uObjectSupport;
19+
uObjectSupport, uIntStack;
2020

2121
const
2222
MAX_STACK_SIZE = 40000; // Maximum depth of operand stack
@@ -65,7 +65,7 @@ TVM = class(TObject)
6565

6666
symbolTable : TSymbolTable;
6767
VMStateStack : TStack<TVMState>;
68-
subscriptStack : TStack<integer>;
68+
subscriptStack : uIntStack.TStack; // lightweight integer stack
6969

7070
frameStackTop: integer;
7171
frameStack: TFrameStack;
@@ -247,7 +247,8 @@ constructor TVM.Create;
247247
createStack(MAX_STACK_SIZE);
248248
createFrameStack(recursionLimit);
249249
VMStateStack := TStack<TVMState>.Create;
250-
subscriptStack := TStack<integer>.Create;
250+
//subscriptStack := TStack<integer>.Create;
251+
uIntStack.create (subscriptStack, uIntStack.MAX_ENTRIES);
251252

252253
callbackPtr := nil;
253254
printCallbackPtr := nil;
@@ -262,7 +263,7 @@ destructor TVM.Destroy;
262263
freeStack;
263264
freeFrameStack;
264265
VMStateStack.Free;
265-
subscriptStack.Free;
266+
//subscriptStack.Free;
266267
inherited;
267268
end;
268269

@@ -2054,22 +2055,23 @@ procedure TVM.storeIndexableArray(variable: PMachineStackRecord; index: integer;
20542055
if variable.stackType <> stArray then
20552056
raise ERuntimeException.Create('left-hand side must be a array');
20562057

2057-
if subscriptStack.Count + 1 < nSubscripts then
2058+
//if subscriptStack.Count + 1 < nSubscripts then
2059+
if subscriptStack.stackPtr + 1 < nSubscripts then
20582060
begin
2059-
subscriptStack.Push(index);
2061+
uIntStack.Push(subscriptStack, index);
20602062
push (variable);
20612063
end
20622064
else
20632065
begin
2064-
subscriptStack.Push(index);
2065-
setLength (idx, subscriptStack.Count);
2066+
uIntStack.Push(subscriptStack, index);
2067+
setLength (idx, subscriptStack.stackPtr);
20662068
// Index backwards since the stack entries are backwards
2067-
for i := subscriptStack.Count - 1 downto 0 do
2068-
idx[i] := subscriptStack.Pop();
2069+
for i := subscriptStack.stackPtr - 1 downto 0 do
2070+
idx[i] := uIntStack.Pop(subscriptStack);
20692071

20702072
variable.aValue.setValue (idx, value);
20712073

2072-
subscriptStack.Clear;
2074+
subscriptStack.stackPtr := -1; // Clear
20732075
end;
20742076
end;
20752077

@@ -2270,9 +2272,9 @@ procedure TVM.loadIndexableArray(st: PMachineStackRecord; index: integer; nSubsc
22702272
i : integer;
22712273
begin
22722274
// For an n dimensional array we will collect the subscripts.
2273-
if subscriptStack.Count + 1 < nSubscripts then
2275+
if subscriptStack.StackPtr + 1 < nSubscripts then
22742276
begin
2275-
subscriptStack.Push(index);
2277+
uIntStack.Push(subscriptStack, index);
22762278
push (st);
22772279
end
22782280
else
@@ -2286,14 +2288,14 @@ procedure TVM.loadIndexableArray(st: PMachineStackRecord; index: integer; nSubsc
22862288
exit;
22872289
end;
22882290

2289-
subscriptStack.Push(index);
2290-
setLength (idx, subscriptStack.Count);
2291+
uIntStack.Push(subscriptStack, index);
2292+
setLength (idx, subscriptStack.stackPtr);
22912293
// Index backwards since the stack entries are backwards
2292-
for i := subscriptStack.Count - 1 downto 0 do
2293-
idx[i] := subscriptStack.Pop();
2294+
for i := subscriptStack.stackPtr - 1 downto 0 do
2295+
idx[i] := uIntStack.Pop(subscriptStack);
22942296

22952297
push (st.aValue.getValue (idx));
2296-
subscriptStack.Clear;
2298+
subscriptStack.stackPtr := -1; //Clear;
22972299
end;
22982300
end;
22992301

0 commit comments

Comments
 (0)