This commit is contained in:
Michael Schimmel
2025-10-30 20:27:44 +01:00
parent 798aa08f02
commit 0526ec8a24
17 changed files with 193 additions and 137 deletions
+2 -1
View File
@@ -694,6 +694,7 @@ begin
result := ExecuteAst(root, fibScope);
sw.Stop;
Memo1.Lines.Add(Format('Result: fib(25) %s (calculated in %d ms)', [result.ToString, sw.ElapsedMilliseconds]));
UpdateScript;
end;
@@ -920,7 +921,7 @@ begin
[
TAst.VarDecl(
TAst.Identifier('closeSeries'),
TAst.MemberAccess(TAst.Identifier('ohlcv'), TAst.Identifier('Close'))
TAst.MemberAccess(TAst.Identifier('ohlcv'), TAst.Keyword('Close'))
),
TAst.VarDecl(
TAst.Identifier('currentClose'),
+9 -11
View File
@@ -18,6 +18,7 @@ uses
FMX.StdCtrls,
Myc.Data.Scalar,
Myc.Data.Value,
Myc.Data.Keyword,
Myc.Ast.Nodes,
Myc.Ast.Visitor,
Myc.Ast,
@@ -478,7 +479,7 @@ type
TAuraRecordLiteralNode = class(TAuraNode)
private
FNode: IRecordLiteralNode;
FFieldNodes: TDictionary<string, TAuraNode>; // Map KeyName -> ValueNode
FFieldNodes: TDictionary<IKeyword, TAuraNode>; // Map KeyName -> ValueNode
protected
procedure SetupNode; override;
public
@@ -525,9 +526,6 @@ type
implementation
uses
Myc.Data.Keyword;
{ TAstVisualizer }
constructor TAstVisualizer.Create(AWorkspace: TAuraWorkspace; AParentControl: TControl; AExprDepth: Integer);
@@ -2032,7 +2030,7 @@ end;
function TAuraMemberAccessNode.CreateAst: IAstNode;
begin
// Re-create identifier from FNode
Result := TAst.MemberAccess(FBaseNode.CreateAst, TAst.Identifier(FNode.Member.Name));
Result := TAst.MemberAccess(FBaseNode.CreateAst, TAst.Keyword(FNode.Member.Value.Name));
end;
procedure TAuraMemberAccessNode.SetupNode;
@@ -2049,7 +2047,7 @@ begin
AddLabel(Self, '.');
// Add member name as a label
AddLabel(Self, FNode.Member.Name);
AddLabel(Self, FNode.Member.Value.Name);
finally
EndUpdate;
end;
@@ -2061,7 +2059,7 @@ constructor TAuraRecordLiteralNode.Create(const AVisualizer: IAstVisualizer; con
begin
inherited Create(AVisualizer);
FNode := ANode;
FFieldNodes := TDictionary<string, TAuraNode>.Create;
FFieldNodes := TDictionary<IKeyword, TAuraNode>.Create;
end;
destructor TAuraRecordLiteralNode.Destroy;
@@ -2075,7 +2073,7 @@ var
fields: TArray<TRecordFieldLiteral>;
i: Integer;
valueNode: TAuraNode;
pair: TPair<string, TAuraNode>;
pair: TPair<IKeyword, TAuraNode>;
begin
SetLength(fields, FFieldNodes.Count);
i := 0;
@@ -2084,7 +2082,7 @@ begin
for pair in FFieldNodes do
begin
valueNode := pair.Value;
fields[i] := TRecordFieldLiteral.Create(pair.Key, valueNode.CreateAst);
fields[i] := TRecordFieldLiteral.Create(TKeywordNode.Create(pair.Key), valueNode.CreateAst);
inc(i);
end;
Result := TAst.RecordLiteral(fields);
@@ -2115,7 +2113,7 @@ begin
fieldContainer := AddContainer(Self, loHorizontal, laCenter);
// Key label
keyLabel := AddLabel(fieldContainer, ':' + field.Name);
keyLabel := AddLabel(fieldContainer, ':' + field.Key.Value.Name);
keyLabel.Font.Style := keyLabel.Font.Style + [TFontStyle.fsBold];
keyLabel.StyledSettings := keyLabel.StyledSettings - [TStyledSetting.FontColor];
keyLabel.FontColor := TAlphaColors.Mediumvioletred;
@@ -2124,7 +2122,7 @@ begin
valueNode := FVisualizer.Clone(fieldContainer, FVisualizer.ExprDepth + 1).CallAccept(field.Value);
// Store for CreateAst
FFieldNodes.Add(field.Name, valueNode);
FFieldNodes.Add(field.Key.Value, valueNode);
end;
end;
finally
+1 -1
View File
@@ -209,7 +209,7 @@ var
baseStr: string;
begin
baseStr := Node.Base.Accept(Self).AsText;
Result := Format('%s.%s', [baseStr, Node.Member.Name]);
Result := Format('%s.%s', [baseStr, Node.Member.Value.Name]);
end;
function TAstToTextVisitor.VisitQuasiquote(const Node: IQuasiquoteNode): TDataValue;