Ast ternary expr replaced by cond expr
This commit is contained in:
@@ -34,7 +34,7 @@ type
|
||||
function VisitRecordField(const Node: IRecordFieldNode): TDataValue; virtual;
|
||||
|
||||
function VisitIfExpression(const Node: IIfExpressionNode): TDataValue; virtual;
|
||||
function VisitTernaryExpression(const Node: ITernaryExpressionNode): TDataValue; virtual;
|
||||
function VisitCondExpression(const Node: ICondExpressionNode): TDataValue; virtual; // Replaces Ternary
|
||||
function VisitLambdaExpression(const Node: ILambdaExpressionNode): TDataValue; virtual;
|
||||
function VisitMacroDefinition(const Node: IMacroDefinitionNode): TDataValue; virtual;
|
||||
function VisitQuasiquote(const Node: IQuasiquoteNode): TDataValue; virtual;
|
||||
@@ -590,12 +590,20 @@ begin
|
||||
Result := TDataValue.Void;
|
||||
end;
|
||||
|
||||
function TEvaluatorVisitor.VisitTernaryExpression(const Node: ITernaryExpressionNode): TDataValue;
|
||||
function TEvaluatorVisitor.VisitCondExpression(const Node: ICondExpressionNode): TDataValue;
|
||||
var
|
||||
pair: TCondPair;
|
||||
begin
|
||||
if IsTruthy(Node.Condition.Accept(Self)) then
|
||||
Result := Node.ThenBranch.Accept(Self)
|
||||
else
|
||||
Result := Node.ElseBranch.Accept(Self);
|
||||
for pair in Node.Pairs do
|
||||
begin
|
||||
if IsTruthy(pair.Condition.Accept(Self)) then
|
||||
begin
|
||||
Result := pair.Branch.Accept(Self);
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
// Else branch is mandatory in AST (though can be Nop/Void in source if omitted and normalized)
|
||||
Result := Node.ElseBranch.Accept(Self);
|
||||
end;
|
||||
|
||||
function TEvaluatorVisitor.VisitBlockExpression(const Node: IBlockExpressionNode): TDataValue;
|
||||
|
||||
Reference in New Issue
Block a user