# Doing
-* Fix array access in structs
+* Implement symbol file generation and import
# Up Next
-* Implement symbol file generation and import
-* Implement module scoped identifiers
-* Implement an SSA backend
-* Implement pointers
- * Ownership semantics: Ownership you can count on
- * Concurrency: Biased reference counting
+* Linearize the AST expression nodes
+* Split the AST into basic blocks ala CFG representation
+* Convert the CFG representation to SSA form
# Backlog
-* Cleanup the lexer
+* Implement pointers
+ * Ownership semantics: Ownership you can count on
+ * Concurrency: Biased reference counting
* Implement record extension
* Implement logical operators: and, or, not
* Implement string types
* Track uninitialized variables/globals
* Nested procedure definitions
* check that module name matches filename
+* Cleanup the lexer (and cruft in the rest of the code base)
# Order of Operations for Implementing Memory Management
/* TODO: module names should be shadowable but are not */
+/* Symbol Table Management
+ *****************************************************************************/
+
static int sym_matches(Parser* p, int class, size_t module, char* name, Symbol* sym)
{
int mod_match = (sym->module == module);
(void)path;
for (size_t i = 0; i < p->ntypes; i++)
{
- printf("t %d %c\n", i, TypeIdents[p->types[i]->form]);
+ printf("t %ld %c\n", i, TypeIdents[p->types[i]->form]);
}
for (size_t i = 0; i < p->nsyms; i++)
if (!sym->export) continue;
printf("%c %s ", SymTypes[sym->class], sym->name);
fflush(stdout);
- printf("%d\n", typeid(p, sym->type));
+ printf("%ld\n", typeid(p, sym->type));
}
}