meowlang/typechecker/TypeChecker.cs
Gwendolyn d6bdd08002 loooots of stuff
the typechecker project can collect all the top level types from a file, which is pretty cool I think
(except for pointers, those aren't implemented yet...)
2022-02-13 02:41:16 +01:00

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());
}
}