diff --git a/doc/notes.rst b/doc/notes.rst new file mode 100644 index 00000000..c27ffcbb --- /dev/null +++ b/doc/notes.rst @@ -0,0 +1,16 @@ +Random notes. + +Type inference. + +Expressions represent parsed abstract syntax trees. +We use the same data structure to represent syntax trees both before and after +type inference. + +We record each Expression's type using a type_ref instance. +A type_ref does two things: +1. gives the expression's type a unique name +2. records expression's concrete type once type infrerence has completed. + +Type inference resolves each Expression's type to a concrete TypeDescr. +An Expression tree can't be compiled unless all reachable Expression nodes +are resolved to concrete types, i.e. type inference has completed successfully. diff --git a/include/xo/expression/typeinf/type_ref.hpp b/include/xo/expression/typeinf/type_ref.hpp new file mode 100644 index 00000000..4f65ce98 --- /dev/null +++ b/include/xo/expression/typeinf/type_ref.hpp @@ -0,0 +1,21 @@ +/** @file type_ref.hpp **/ + +#pragma once + +namespace xo { + namespace scm { + using type_var = xo::flatstring<11>; + + /** @class type_ref + * @brief name and eventual resolution for type associated with an expression. + * + * + **/ + struct type_ref { + + + }; + } /*namespace scm*/ +} /*namespace xo*/ + +/** end type_ref.hpp **/