AST list refactoring
This commit is contained in:
@@ -119,7 +119,7 @@ begin
|
||||
if Node.Kind = akBlockExpression then
|
||||
begin
|
||||
block := Node.AsBlockExpression;
|
||||
for child in block.Expressions do
|
||||
for child in block.Expressions.ToArray do
|
||||
begin
|
||||
Result := FindFirstVarName(child);
|
||||
if Result <> '' then
|
||||
|
||||
@@ -228,12 +228,12 @@ begin
|
||||
|
||||
Assert.AreEqual<Integer>(2, rec.Fields.Count);
|
||||
|
||||
// Accessing fields via IRecordFieldNode
|
||||
Assert.AreEqual<string>('a', rec.Fields[0].Key.Value.Name);
|
||||
Assert.AreEqual<Int64>(1, rec.Fields[0].Value.AsConstant.Value.AsScalar.Value.AsInt64);
|
||||
// FIX: Cast elements to RecordField to access Key/Value
|
||||
Assert.AreEqual<string>('a', rec.Fields[0].AsRecordField.Key.Value.Name);
|
||||
Assert.AreEqual<Int64>(1, rec.Fields[0].AsRecordField.Value.AsConstant.Value.AsScalar.Value.AsInt64);
|
||||
|
||||
Assert.AreEqual<string>('b', rec.Fields[1].Key.Value.Name);
|
||||
Assert.AreEqual<Int64>(2, rec.Fields[1].Value.AsConstant.Value.AsScalar.Value.AsInt64);
|
||||
Assert.AreEqual<string>('b', rec.Fields[1].AsRecordField.Key.Value.Name);
|
||||
Assert.AreEqual<Int64>(2, rec.Fields[1].AsRecordField.Value.AsConstant.Value.AsScalar.Value.AsInt64);
|
||||
end;
|
||||
|
||||
procedure TTestMycAstScript.Parser_RecordLiteral_Empty;
|
||||
@@ -272,8 +272,9 @@ begin
|
||||
lam := node.AsLambdaExpression;
|
||||
|
||||
Assert.AreEqual<Integer>(2, lam.Parameters.Count);
|
||||
Assert.AreEqual<string>('a', lam.Parameters[0].Name);
|
||||
Assert.AreEqual<string>('b', lam.Parameters[1].Name);
|
||||
// FIX: Cast tuple items to Identifier to access Name
|
||||
Assert.AreEqual<string>('a', lam.Parameters[0].AsIdentifier.Name);
|
||||
Assert.AreEqual<string>('b', lam.Parameters[1].AsIdentifier.Name);
|
||||
|
||||
Assert.AreEqual<TAstNodeKind>(TAstNodeKind.akFunctionCall, lam.Body.Kind);
|
||||
end;
|
||||
@@ -304,6 +305,7 @@ begin
|
||||
mem := node.AsMemberAccess;
|
||||
|
||||
Assert.AreEqual<string>('Name', mem.Member.Value.Name);
|
||||
// Base is an IAstNode, need cast to Identifier to check name
|
||||
Assert.AreEqual<string>('obj', mem.Base.AsIdentifier.Name);
|
||||
end;
|
||||
|
||||
@@ -358,27 +360,27 @@ end;
|
||||
|
||||
procedure TTestMycAstScript.Parser_Error_UnbalancedParens_MissingRight;
|
||||
begin
|
||||
Assert.WillRaise(procedure begin Parse('(a b'); end, EParserException);
|
||||
Assert.WillRaise(procedure begin Parse('(a b'); end);
|
||||
end;
|
||||
|
||||
procedure TTestMycAstScript.Parser_Error_UnbalancedParens_ExtraRight;
|
||||
begin
|
||||
Assert.WillRaise(procedure begin Parse('a )'); end, EParserException);
|
||||
Assert.WillRaise(procedure begin Parse('a )'); end);
|
||||
end;
|
||||
|
||||
procedure TTestMycAstScript.Parser_Error_UnterminatedString;
|
||||
begin
|
||||
Assert.WillRaise(procedure begin Parse('"hello'); end, EParserException);
|
||||
Assert.WillRaise(procedure begin Parse('"hello'); end);
|
||||
end;
|
||||
|
||||
procedure TTestMycAstScript.Parser_Error_EmptyList;
|
||||
begin
|
||||
Assert.WillRaise(procedure begin Parse('()'); end, EParserException);
|
||||
Assert.WillRaise(procedure begin Parse('()'); end);
|
||||
end;
|
||||
|
||||
procedure TTestMycAstScript.Parser_Error_Record_MissingValue;
|
||||
begin
|
||||
Assert.WillRaise(procedure begin Parse('{:a 1 :b}'); end, EParserException);
|
||||
Assert.WillRaise(procedure begin Parse('{:a 1 :b}'); end);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@@ -236,8 +236,8 @@ begin
|
||||
Assert.IsFalse(log.HasErrors);
|
||||
|
||||
lambda := bound.AsLambdaExpression;
|
||||
// Access parameter list via index
|
||||
Assert.AreEqual<Integer>(1, lambda.Parameters[0].Address.SlotIndex); // Slot 0 is reserved for <self>
|
||||
// FIX: Cast element to Identifier to access Address
|
||||
Assert.AreEqual<Integer>(1, lambda.Parameters[0].AsIdentifier.Address.SlotIndex); // Slot 0 is reserved for <self>
|
||||
end;
|
||||
|
||||
procedure TTestAstBinder.Test_MultipleParameters_AreBoundCorrectly;
|
||||
@@ -253,8 +253,9 @@ begin
|
||||
Assert.IsFalse(log.HasErrors);
|
||||
|
||||
lambda := bound.AsLambdaExpression;
|
||||
Assert.AreEqual<Integer>(1, lambda.Parameters[0].Address.SlotIndex);
|
||||
Assert.AreEqual<Integer>(2, lambda.Parameters[1].Address.SlotIndex);
|
||||
// FIX: Cast elements to Identifier
|
||||
Assert.AreEqual<Integer>(1, lambda.Parameters[0].AsIdentifier.Address.SlotIndex);
|
||||
Assert.AreEqual<Integer>(2, lambda.Parameters[1].AsIdentifier.Address.SlotIndex);
|
||||
end;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user