support argument as lvalue

This commit is contained in:
2024-08-23 04:10:35 +00:00
parent 52785c5435
commit 1f9e7acade
6 changed files with 200 additions and 33 deletions

View File

@ -81,6 +81,7 @@ class BRAction : public JMPActionItem {
};
class UNConditionJMPAction : public JMPActionItem {
friend class IRBuilder;
friend class FunctionDefItem;
std::string label_full;
public:
@ -89,6 +90,7 @@ class UNConditionJMPAction : public JMPActionItem {
};
class RETAction : public JMPActionItem {
friend class IRBuilder;
friend class FunctionDefItem;
LLVMType type;
std::string value;
@ -244,6 +246,7 @@ class ICMPAction : public ActionItem {
};
class BlockItem : public LLVMIRItemBase {
friend class IRBuilder;
friend class FunctionDefItem;
std::string label_full;
std::vector<std::shared_ptr<ActionItem>> actions;
std::shared_ptr<JMPActionItem> exit_action;
@ -366,6 +369,7 @@ class FunctionDefItem : public LLVMIRItemBase {
std::string func_name_raw;
std::vector<LLVMType> args;
std::vector<std::string> args_full_name;
std::shared_ptr<BlockItem> init_block;
std::vector<std::shared_ptr<BlockItem>> basic_blocks;
public:
@ -398,6 +402,7 @@ class FunctionDefItem : public LLVMIRItemBase {
}
}
os << ")\n{\n";
if (init_block) init_block->RecursivePrint(os);
for (auto &item : basic_blocks) {
item->RecursivePrint(os);
}