mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-06 06:58:45 +00:00
some fixes, going to fix function_call_expression typeclass argument types search bug
This commit is contained in:
parent
f2192b5331
commit
0290b5604a
9 changed files with 307 additions and 111 deletions
|
|
@ -31,62 +31,11 @@ enum class PartitionModifier { Exec = 0, Test = 1 };
|
|||
|
||||
enum class ValueType { Const = 0, Var = 1, Tmp = 2 };
|
||||
|
||||
inline ValueType IsConstModifierToValueType(IsConstModifier modifier) {
|
||||
switch (modifier) {
|
||||
case IsConstModifier::Const:
|
||||
return ValueType::Const;
|
||||
case IsConstModifier::Var:
|
||||
return ValueType::Var;
|
||||
}
|
||||
ValueType IsConstModifierToValueType(IsConstModifier modifier);
|
||||
|
||||
exit(1); // unreachable
|
||||
}
|
||||
ValueType ClassInternalsModifierToValueType(ClassInternalsModifier modifier);
|
||||
|
||||
inline ValueType ClassInternalsModifierToValueType(ClassInternalsModifier modifier) {
|
||||
switch (modifier) {
|
||||
case ClassInternalsModifier::Const:
|
||||
return ValueType::Const;
|
||||
case ClassInternalsModifier::Var:
|
||||
return ValueType::Var;
|
||||
case ClassInternalsModifier::Static:
|
||||
throw std::bad_cast(); // ??
|
||||
}
|
||||
|
||||
exit(1); // unreachable
|
||||
}
|
||||
|
||||
inline bool IsBuiltinFunction(const std::string& name) { // optimize ??
|
||||
std::unordered_set<std::string> builtin_functions;
|
||||
|
||||
builtin_functions.insert("=");
|
||||
builtin_functions.insert("<-");
|
||||
builtin_functions.insert("==");
|
||||
builtin_functions.insert("!=");
|
||||
builtin_functions.insert("<");
|
||||
builtin_functions.insert(">");
|
||||
builtin_functions.insert("<=");
|
||||
builtin_functions.insert(">=");
|
||||
builtin_functions.insert("+=");
|
||||
builtin_functions.insert("-=");
|
||||
builtin_functions.insert("*=");
|
||||
builtin_functions.insert("div");
|
||||
builtin_functions.insert("mod");
|
||||
builtin_functions.insert("/=");
|
||||
// builtin_functions.insert("+");
|
||||
// builtin_functions.insert("-");
|
||||
// builtin_functions.insert("*");
|
||||
// builtin_functions.insert("/");
|
||||
builtin_functions.insert("&&");
|
||||
builtin_functions.insert("||");
|
||||
builtin_functions.insert("size");
|
||||
builtin_functions.insert("random");
|
||||
builtin_functions.insert("print");
|
||||
builtin_functions.insert("scan");
|
||||
builtin_functions.insert("zero");
|
||||
builtin_functions.insert("one");
|
||||
|
||||
return builtin_functions.count(name) != 0;
|
||||
}
|
||||
bool IsBuiltinFunction(const std::string& name);
|
||||
|
||||
template<typename T>
|
||||
class Storage {
|
||||
|
|
@ -265,34 +214,12 @@ private:
|
|||
std::vector<size_t> ranks_;
|
||||
};
|
||||
|
||||
// move to .cpp ??
|
||||
inline void BackVisitDfs(size_t id,
|
||||
std::vector<size_t>& verticles,
|
||||
std::vector<size_t>& marks,
|
||||
const std::vector<std::vector<size_t>>& edges,
|
||||
size_t mark) {
|
||||
if (marks[id] != 0) {
|
||||
return;
|
||||
}
|
||||
void BackVisitDfs(size_t id,
|
||||
std::vector<size_t>& verticles,
|
||||
std::vector<size_t>& marks,
|
||||
const std::vector<std::vector<size_t>>& edges,
|
||||
size_t mark);
|
||||
|
||||
marks[id] = mark;
|
||||
verticles.push_back(id);
|
||||
|
||||
for (size_t i = 0; i < edges[id].size(); ++i) {
|
||||
BackVisitDfs(id, verticles, marks, edges, mark);
|
||||
}
|
||||
}
|
||||
|
||||
// move to .cpp ??
|
||||
inline std::vector<size_t> BackTopSort(const std::vector<std::vector<size_t>>& edges_) {
|
||||
std::vector<size_t> sorted_verticles;
|
||||
std::vector<size_t> marks(edges_.size(), 0);
|
||||
|
||||
for (size_t i = 0; i < marks.size(); ++i) {
|
||||
BackVisitDfs(i, sorted_verticles, marks, edges_, 1);
|
||||
}
|
||||
|
||||
return sorted_verticles;
|
||||
}
|
||||
std::vector<size_t> BackTopSort(const std::vector<std::vector<size_t>>& edges_);
|
||||
|
||||
} // namespace utils
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue