From 8aeae09e74b46ca52866f22b48f55fecdf27b849 Mon Sep 17 00:00:00 2001 From: Patrick Schönberger Date: Mon, 2 Aug 2021 14:43:11 +0200 Subject: type modifiers, parenthesized expressions, chained access expressions --- src/check.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/check.h (limited to 'src/check.h') diff --git a/src/check.h b/src/check.h new file mode 100644 index 0000000..9e6797f --- /dev/null +++ b/src/check.h @@ -0,0 +1,49 @@ +#pragma once + +#include "repr.h" + +bool checkStmt( + const Stmt & s, + std::vector structs, + std::vector funcs, + std::vector vars) +{ + // switch (s.type) { + // case StmtType::Assign: + // if (!checkVar(s._assign.)) + // } + return true; +} + +bool checkFunction( + const Function & f, + std::vector structs, + std::vector funcs, + std::vector vars) +{ + vars.insert(vars.end(), f.parameters.begin(), f.parameters.end()); + vars.insert(vars.end(), f.body.variables.begin(), f.body.variables.end()); + for (auto s : f.body.statements) { + if (!checkStmt(s, structs, funcs, vars)) + return false; + } + return true; +} + +bool checkProgram(const Program & p) +{ + for (auto f : p.functions) { + if (!checkFunction(f, p.structs, p.functions, p.variables)) + return false; + } + for (auto s : p.structs) { + std::vector vars = p.variables; + for (auto v : s.members) + vars.push_back(v); + for (auto f : s.methods) { + if (!checkFunction(f, p.structs, p.functions, vars)) + return false; + } + } + return true; +} \ No newline at end of file -- cgit v1.2.3