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