fix:修改对递归函数的procedureCall类型检查,在父符号表中寻找id (#66)
Reviewed-on: PostGuard/Canon#66 Co-authored-by: ichirinko <1621543655@qq.com> Co-committed-by: ichirinko <1621543655@qq.com>
This commit is contained in:
@@ -426,7 +426,7 @@ public class TypeCheckVisitorTests(ITestOutputHelper testOutputHelper)
|
||||
end;
|
||||
|
||||
begin
|
||||
findMin(a, b, c,error);
|
||||
findmin(a, b, c,error);
|
||||
(* Procedure call *)
|
||||
end.
|
||||
""";
|
||||
@@ -436,6 +436,32 @@ public class TypeCheckVisitorTests(ITestOutputHelper testOutputHelper)
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void RecursionProcedureCallTest()
|
||||
{
|
||||
const string program = """
|
||||
program main;
|
||||
var a, b:integer; c:real;
|
||||
function Test0(var a1:integer; b1:integer; c1:real):integer;
|
||||
begin
|
||||
test0(a1,b1,c1+0.5);
|
||||
end;
|
||||
function Test1(var a1:integer; b1:integer; c1:real):integer;
|
||||
begin
|
||||
test0(1,1,1.0);
|
||||
end;
|
||||
|
||||
begin
|
||||
teSt1(a,b,1.02);
|
||||
test(a, b, c);
|
||||
end.
|
||||
""";
|
||||
|
||||
TypeCheckVisitor visitor = CheckType(program);
|
||||
Assert.True(visitor.IsError);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ArrayAssignIndexTest()
|
||||
{
|
||||
@@ -506,6 +532,23 @@ public class TypeCheckVisitorTests(ITestOutputHelper testOutputHelper)
|
||||
CheckType(program);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BooleanOperatorTest()
|
||||
{
|
||||
const string program = """
|
||||
program main;
|
||||
var flag, tag : boolean;
|
||||
error:integer;
|
||||
begin
|
||||
tag := flag or tag;
|
||||
flag := flag and error;
|
||||
end.
|
||||
""";
|
||||
|
||||
TypeCheckVisitor visitor = CheckType(program);
|
||||
Assert.True(visitor.IsError);
|
||||
}
|
||||
|
||||
private TypeCheckVisitor CheckType(string program)
|
||||
{
|
||||
ProgramStruct root = CompilerHelpers.Analyse(program);
|
||||
|
Reference in New Issue
Block a user