Basic structures work, prep work for function pointers and other stuff,a couple of bugs fixed.

This commit is contained in:
Nathan Braswell
2014-01-19 18:20:52 -05:00
parent b59fd26d4a
commit 62933af8f8
12 changed files with 95 additions and 25 deletions

View File

@@ -87,7 +87,15 @@ std::string CGenerator::generate(NodeTree<ASTData>* from) {
case identifier:
return data.symbol.getName();
case type_def:
return "typedef " + ValueTypeToCType(data.valueType) + " " + data.symbol.getName() + ";";
if (children.size() == 0) {
return "typedef " + ValueTypeToCType(data.valueType) + " " + data.symbol.getName() + ";";
} else {
std::string objectString = "typedef struct __struct_dummy_" + data.symbol.getName() + "__ {\n";
for (int i = 0; i < children.size(); i++)
objectString += generate(children[i]) + "\n";
objectString += "} " + data.symbol.getName() + ";";
return objectString;
}
case function:
output += "\n" + ValueTypeToCType(data.valueType) + " " + data.symbol.getName() + "(";
for (int i = 0; i < children.size()-1; i++) {
@@ -155,10 +163,10 @@ std::string CGenerator::generate(NodeTree<ASTData>* from) {
return "*(" + generate(children[1]) + ")";
if (name == "+" || name == "-" || name == "*" || name == "/" || name == "==" || name == ">=" || name == "<=" || name == "!="
|| name == "<" || name == ">" || name == "%" || name == "+=" || name == "-=" || name == "*=" || name == "/=" || name == "||"
|| name == "&&" || name == "!" ) {
|| name == "&&" || name == "!" )
return "((" + generate(children[1]) + ")" + name + "(" + generate(children[2]) + "))";
}
else if (name == "." || name == "->")
return "((" + generate(children[1]) + ")" + name + generate(children[2]) + ")";
output += data.symbol.getName() + "(";
for (int i = 1; i < children.size(); i++) //children[0] is the declaration
if (i < children.size()-1)