Ast development
This commit is contained in:
@@ -128,6 +128,7 @@ type
|
||||
function VisitVariableDeclaration(const Node: IVariableDeclarationNode): TAstValue;
|
||||
function VisitAssignment(const Node: IAssignmentNode): TAstValue;
|
||||
function VisitIndexer(const Node: IIndexerNode): TAstValue;
|
||||
function VisitMemberAccess(const Node: IMemberAccessNode): TAstValue;
|
||||
end;
|
||||
|
||||
TAuraWorkspace = class(TStyledControl)
|
||||
@@ -200,6 +201,7 @@ type
|
||||
function VisitVariableDeclaration(const Node: IVariableDeclarationNode): TAstValue;
|
||||
function VisitAssignment(const Node: IAssignmentNode): TAstValue;
|
||||
function VisitIndexer(const Node: IIndexerNode): TAstValue;
|
||||
function VisitMemberAccess(const Node: IMemberAccessNode): TAstValue;
|
||||
end;
|
||||
|
||||
constructor TAstToTextVisitor.Create;
|
||||
@@ -300,6 +302,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TAstToTextVisitor.VisitMemberAccess(const Node: IMemberAccessNode): TAstValue;
|
||||
var
|
||||
baseStr: string;
|
||||
begin
|
||||
baseStr := Node.Base.Accept(Self).AsText;
|
||||
Result := TAstValue.FromText(Format('%s.%s', [baseStr, Node.Member.Name]));
|
||||
end;
|
||||
|
||||
function TAstToTextVisitor.VisitTernaryExpression(const Node: ITernaryExpressionNode): TAstValue;
|
||||
begin
|
||||
var condStr := Node.Condition.Accept(Self).AsText;
|
||||
@@ -1032,6 +1042,43 @@ begin
|
||||
Result := TAstValue.Void;
|
||||
end;
|
||||
|
||||
function TAstToAuraNodeVisitor.VisitMemberAccess(const Node: IMemberAccessNode): TAstValue;
|
||||
var
|
||||
details: String;
|
||||
begin
|
||||
// Implements the visualization for member access (e.g., series.field).
|
||||
if (FMode = vmControlFlow) and TryGetDescr(Node, details) then
|
||||
begin
|
||||
var memberNode := CreateNodeControl('Expression', details);
|
||||
FLastResult.OutputPin := CreateOutput(memberNode);
|
||||
FinalizeNodeLayout(memberNode);
|
||||
end
|
||||
else
|
||||
begin
|
||||
VisitOperatorNode(
|
||||
[Node.Base],
|
||||
function(const InputResults: TAuraNodeResultList): TAuraNodeResult
|
||||
var
|
||||
memberAccessNode: TAuraNode;
|
||||
basePin, outPin: TControl;
|
||||
begin
|
||||
memberAccessNode := BuildNodeControl('Get ' + Node.Member.Name, '');
|
||||
|
||||
basePin := CreateInput(memberAccessNode, 'Base');
|
||||
outPin := CreateOutput(memberAccessNode);
|
||||
|
||||
if Assigned(InputResults[0].OutputPin) then
|
||||
FConnections.Add(TPinConnection.Create(InputResults[0].OutputPin, basePin));
|
||||
|
||||
FinalizeNodeLayout(memberAccessNode);
|
||||
Result.LayoutNode := memberAccessNode;
|
||||
Result.OutputPin := outPin;
|
||||
end
|
||||
);
|
||||
end;
|
||||
Result := TAstValue.Void;
|
||||
end;
|
||||
|
||||
function TAstToAuraNodeVisitor.VisitOperatorNode(
|
||||
const InputExpressions: TArray<IExpressionNode>;
|
||||
const CreateParentProc: TCreateParentNodeProc;
|
||||
|
||||
Reference in New Issue
Block a user