41 lines
1.5 KiB
C#
41 lines
1.5 KiB
C#
|
using meowlang.parser;
|
||
|
|
||
|
namespace meowlang.typechecker;
|
||
|
|
||
|
public static class TypeChecker
|
||
|
{
|
||
|
public static void CheckAndInferTypes(Model model)
|
||
|
{
|
||
|
var typeRegistry = new TypeRegistry();
|
||
|
var topLevelScope = new Scope(typeRegistry);
|
||
|
InitialiseTopLevelScope(topLevelScope);
|
||
|
|
||
|
new CollectTypesVisitor(topLevelScope).Visit(model);
|
||
|
|
||
|
Console.Write(topLevelScope.AutoToString());
|
||
|
Console.Write(typeRegistry.AutoToString());
|
||
|
return;
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
private static void InitialiseTopLevelScope(Scope scope)
|
||
|
{
|
||
|
scope.AddNamedType("s8", 0, new PrimitiveTypeDescription());
|
||
|
scope.AddNamedType("s16", 0, new PrimitiveTypeDescription());
|
||
|
scope.AddNamedType("s32", 0, new PrimitiveTypeDescription());
|
||
|
scope.AddNamedType("s64", 0, new PrimitiveTypeDescription());
|
||
|
scope.AddNamedType("s128", 0, new PrimitiveTypeDescription());
|
||
|
|
||
|
scope.AddNamedType("u8", 0, new PrimitiveTypeDescription());
|
||
|
scope.AddNamedType("u16", 0, new PrimitiveTypeDescription());
|
||
|
scope.AddNamedType("u32", 0, new PrimitiveTypeDescription());
|
||
|
scope.AddNamedType("u64", 0, new PrimitiveTypeDescription());
|
||
|
scope.AddNamedType("u128", 0, new PrimitiveTypeDescription());
|
||
|
|
||
|
scope.AddNamedType("f32", 0, new PrimitiveTypeDescription());
|
||
|
scope.AddNamedType("f64", 0, new PrimitiveTypeDescription());
|
||
|
|
||
|
scope.AddNamedType("bool", 0, new PrimitiveTypeDescription());
|
||
|
}
|
||
|
}
|