Refactoring node to be immutable
This commit is contained in:
@@ -128,7 +128,7 @@ begin
|
||||
newArgs[i] := Accept(Node.Arguments[i]);
|
||||
|
||||
// 2. Create new node with inferred type
|
||||
Result := TRecurNode.Create(newArgs, TTypes.Void);
|
||||
Result := TAst.Recur(newArgs, TTypes.Void);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitVariableDeclaration(const Node: IVariableDeclarationNode): IAstNode;
|
||||
@@ -201,7 +201,7 @@ begin
|
||||
end;
|
||||
|
||||
// 5. Create the new Assignment node
|
||||
Result := TAssignmentNode.Create(newIdent.AsIdentifier, newValue, targetType);
|
||||
Result := TAst.Assign(newIdent.AsIdentifier, newValue, targetType);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitLambdaExpression(const Node: ILambdaExpressionNode): IAstNode;
|
||||
@@ -325,7 +325,7 @@ begin
|
||||
blockType := TTypes.Void;
|
||||
|
||||
// 3. Create new node
|
||||
Result := TBlockExpressionNode.Create(newExprs, blockType);
|
||||
Result := TAst.Block(newExprs, blockType);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitIfExpression(const Node: IIfExpressionNode): IAstNode;
|
||||
@@ -352,7 +352,7 @@ begin
|
||||
resultType := TTypeRules.Promote(thenType, elseType);
|
||||
|
||||
// 4. Create new node
|
||||
Result := TIfExpressionNode.Create(newCond, newThen, newElse, resultType);
|
||||
Result := TAst.IfExpr(newCond, newThen, newElse, resultType);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitTernaryExpression(const Node: ITernaryExpressionNode): IAstNode;
|
||||
@@ -377,7 +377,7 @@ begin
|
||||
resultType := TTypeRules.Promote(thenType, elseType);
|
||||
|
||||
// 4. Create new node
|
||||
Result := TTernaryExpressionNode.Create(newCond, newThen, newElse, resultType);
|
||||
Result := TAst.TernaryExpr(newCond, newThen, newElse, resultType);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitBinaryExpression(const Node: IBinaryExpressionNode): IAstNode;
|
||||
@@ -397,7 +397,7 @@ begin
|
||||
resultType := TTypeRules.ResolveBinaryOp(Node.Operator, leftType, rightType);
|
||||
|
||||
// 4. Create new node
|
||||
Result := TBinaryExpressionNode.Create(newLeft, Node.Operator, newRight, resultType);
|
||||
Result := TAst.BinaryExpr(newLeft, Node.Operator, newRight, resultType);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitUnaryExpression(const Node: IUnaryExpressionNode): IAstNode;
|
||||
@@ -415,7 +415,7 @@ begin
|
||||
resultType := TTypeRules.ResolveUnaryOp(Node.Operator, rightType);
|
||||
|
||||
// 4. Create new node
|
||||
Result := TUnaryExpressionNode.Create(Node.Operator, newRight, resultType);
|
||||
Result := TAst.UnaryExpr(Node.Operator, newRight, resultType);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitMemberAccess(const Node: IMemberAccessNode): IAstNode;
|
||||
@@ -463,7 +463,7 @@ begin
|
||||
end;
|
||||
|
||||
// 4. Create new node
|
||||
Result := TMemberAccessNode.Create(newBase, newMember.AsKeyword, elemType);
|
||||
Result := TAst.MemberAccess(newBase, newMember.AsKeyword, elemType);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitIndexer(const Node: IIndexerNode): IAstNode;
|
||||
@@ -496,7 +496,7 @@ begin
|
||||
end;
|
||||
|
||||
// 4. Create new node
|
||||
Result := TIndexerNode.Create(newBase, newIndex, elemType);
|
||||
Result := TAst.Indexer(newBase, newIndex, elemType);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitRecordLiteral(const Node: IRecordLiteralNode): IAstNode;
|
||||
@@ -582,7 +582,7 @@ begin
|
||||
end;
|
||||
|
||||
// Create new node
|
||||
Result := TCreateSeriesNode.Create(Node.Definition, TTypes.CreateSeries(elemType));
|
||||
Result := TAst.CreateSeries(Node.Definition, TTypes.CreateSeries(elemType));
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitAddSeriesItem(const Node: IAddSeriesItemNode): IAstNode;
|
||||
@@ -618,7 +618,7 @@ begin
|
||||
end;
|
||||
|
||||
// 4. Create new node
|
||||
Result := TAddSeriesItemNode.Create(newSeries.AsIdentifier, newValue, newLookback, TTypes.Void);
|
||||
Result := TAst.AddSeriesItem(newSeries.AsIdentifier, newValue, newLookback, TTypes.Void);
|
||||
end;
|
||||
|
||||
function TTypeChecker.VisitSeriesLength(const Node: ISeriesLengthNode): IAstNode;
|
||||
@@ -639,7 +639,7 @@ begin
|
||||
raise ETypeException.CreateFmt('"length" requires a series, but got %s', [seriesType.ToString]);
|
||||
|
||||
// 4. Create new node
|
||||
Result := TSeriesLengthNode.Create(newSeries.AsIdentifier, TTypes.Ordinal);
|
||||
Result := TAst.SeriesLength(newSeries.AsIdentifier, TTypes.Ordinal);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user