Some bugfixes, allow overloading of [] and add that to vector and string, work on regex. Need closures before that finishes....
This commit is contained in:
@@ -972,7 +972,8 @@ NodeTree<ASTData>* ASTTransformation::templateClassLookup(NodeTree<ASTData>* sco
|
||||
int typeIndex = 0;
|
||||
int currentTraitsSatisfied = 0;
|
||||
for (auto j : nameTraitsPairs) {
|
||||
if (!subset(j.second, templateInstantiationTypes[typeIndex]->traits)) {
|
||||
// error out if not subset, or if we're a pointer but should have traits
|
||||
if (!subset(j.second, templateInstantiationTypes[typeIndex]->traits) || (templateInstantiationTypes[typeIndex]->getIndirection() && j.second.size())) {
|
||||
traitsEqual = false;
|
||||
std::cout << "Traits not subset for " << j.first << " and " << templateInstantiationTypes[typeIndex]->toString() << ": ";
|
||||
//std::cout << baseType << " " << indirection << " " << typeDefinition << " " << templateDefinition << " " << traits << ;
|
||||
@@ -1137,7 +1138,8 @@ NodeTree<ASTData>* ASTTransformation::templateFunctionLookup(NodeTree<ASTData>*
|
||||
int typeIndex = 0;
|
||||
int currentTraitsSatisfied = 0;
|
||||
for (auto j : nameTraitsPairs) {
|
||||
if (!subset(j.second, templateInstantiationTypesPerFunction[i][typeIndex]->traits)) {
|
||||
// error out if not subset, or if we're a pointer but should have traits
|
||||
if (!subset(j.second, templateInstantiationTypesPerFunction[i][typeIndex]->traits) || (templateInstantiationTypesPerFunction[i][typeIndex]->getIndirection() && j.second.size())) {
|
||||
traitsEqual = false;
|
||||
std::cout << "Traits not a subset for " << j.first << " and " << templateInstantiationTypesPerFunction[i][typeIndex]->toString() << ": |";
|
||||
std::copy(j.second.begin(), j.second.end(), std::ostream_iterator<std::string>(std::cout, " "));
|
||||
|
||||
@@ -359,7 +359,7 @@ CCodeTriple CGenerator::generate(NodeTree<ASTData>* from, NodeTree<ASTData>* enc
|
||||
return tabs() + stat.preValue + stat.value + ";\n" + stat.postValue ;
|
||||
}
|
||||
case if_statement:
|
||||
output += "if (" + generate(children[0], enclosingObject, true).oneString() + ")\n\t";
|
||||
output += "if (" + generate(children[0], enclosingObject, true) + ")\n\t";
|
||||
// We have to see if the then statement is a regular single statement or a block.
|
||||
// If it's a block, because it's also a statement a semicolon will be emitted even though
|
||||
// we don't want it to be, as if (a) {b}; else {c}; is not legal C, but if (a) {b} else {c}; is.
|
||||
@@ -798,16 +798,16 @@ std::string CGenerator::CifyName(std::string name) {
|
||||
"&", "amprsd",
|
||||
"|", "pipe",
|
||||
"~", "tilde",
|
||||
"!", "exclamationpt",
|
||||
"!", "exlmtnpt",
|
||||
",", "comma",
|
||||
"=", "equals",
|
||||
"++", "doubleplus",
|
||||
"--", "doubleminus",
|
||||
"<<", "doubleleft",
|
||||
">>", "doubleright",
|
||||
"=", "eq",
|
||||
"++", "dbplus",
|
||||
"--", "dbminus",
|
||||
"<<", "dbleft",
|
||||
">>", "dbright",
|
||||
"::", "scopeop",
|
||||
":", "colon",
|
||||
"==", "doubleequals",
|
||||
"==", "dbq",
|
||||
"!=", "notequals",
|
||||
"&&", "doubleamprsnd",
|
||||
"||", "doublepipe",
|
||||
@@ -820,13 +820,13 @@ std::string CGenerator::CifyName(std::string name) {
|
||||
"|=", "pipeequals",
|
||||
"*=", "starequals",
|
||||
"<<=", "doublerightequals",
|
||||
"<", "lessthan",
|
||||
">", "greaterthan",
|
||||
"<", "lt",
|
||||
">", "gt",
|
||||
">>=", "doubleleftequals",
|
||||
"(", "openparen",
|
||||
")", "closeparen",
|
||||
"[", "openbracket",
|
||||
"]", "closebracket",
|
||||
"[", "obk",
|
||||
"]", "cbk",
|
||||
" ", "space",
|
||||
".", "dot",
|
||||
"->", "arrow" };
|
||||
|
||||
@@ -70,7 +70,7 @@ RegExState* RegEx::construct(std::vector<RegExState*>* ending, std::string patte
|
||||
int perenEnd = findPerenEnd(pattern, i);
|
||||
RegExState* innerBegin = construct(&innerEnds, strSlice(pattern, i+1, perenEnd));
|
||||
i = perenEnd;
|
||||
std::vector<RegExState*> innerBegins = *(innerBegin->getNextStates());
|
||||
std::vector<RegExState*> innerBegins = innerBegin->getNextStates();
|
||||
if (alternating) {
|
||||
for (std::vector<RegExState*>::size_type j = 0; j < previousStatesEnd.size(); j++)
|
||||
for (std::vector<RegExState*>::size_type k = 0; k < innerBegins.size(); k++)
|
||||
|
||||
@@ -1,17 +1,11 @@
|
||||
#include "RegExState.h"
|
||||
|
||||
RegExState::RegExState(RegExState* inInnerState) {
|
||||
inner = inInnerState;
|
||||
}
|
||||
|
||||
RegExState::RegExState(char inCharacter) {
|
||||
character = inCharacter;
|
||||
inner = NULL;
|
||||
}
|
||||
|
||||
RegExState::RegExState() {
|
||||
character = 0;
|
||||
inner = NULL;
|
||||
}
|
||||
|
||||
RegExState::~RegExState() {
|
||||
@@ -29,22 +23,17 @@ bool RegExState::characterIs(char inCharacter) {
|
||||
std::vector<RegExState*>* RegExState::advance(char advanceCharacter) {
|
||||
std::vector<RegExState*>* advanceStates = new std::vector<RegExState*>();
|
||||
for (std::vector<RegExState*>::size_type i = 0; i < nextStates.size(); i++) {
|
||||
if (nextStates[i] != NULL && nextStates[i]->characterIs(advanceCharacter))
|
||||
if (nextStates[i] != NULL && nextStates[i]->characterIs(advanceCharacter))
|
||||
advanceStates->push_back(nextStates[i]);
|
||||
}
|
||||
return advanceStates;
|
||||
}
|
||||
|
||||
RegExState* RegExState::getInner() {
|
||||
return inner;
|
||||
}
|
||||
|
||||
std::vector<RegExState*>* RegExState::getNextStates() {
|
||||
return &nextStates;
|
||||
std::vector<RegExState*> RegExState::getNextStates() {
|
||||
return nextStates;
|
||||
}
|
||||
|
||||
bool RegExState::isGoal() {
|
||||
//return inner == NULL && nextStates.size() == 0;
|
||||
for (std::vector<RegExState*>::size_type i = 0; i < nextStates.size(); i++)
|
||||
if (nextStates[i] == NULL)
|
||||
return true;
|
||||
@@ -66,11 +55,6 @@ std::string RegExState::toString(std::vector<RegExState*>* avoid) {
|
||||
avoid->push_back(this);
|
||||
std::string string = "";
|
||||
string += std::string("\"") + character + "\"";
|
||||
if (inner != NULL) {
|
||||
string += "inner: ";
|
||||
string += inner->toString(avoid);
|
||||
string += " end inner ";
|
||||
}
|
||||
for (std::vector<RegExState*>::size_type i = 0; i < nextStates.size(); i++) {
|
||||
bool inAvoid = false;
|
||||
for (std::vector<RegExState*>::size_type j = 0; j < avoid->size(); j++) {
|
||||
@@ -90,7 +74,6 @@ std::string RegExState::toString(std::vector<RegExState*>* avoid) {
|
||||
else
|
||||
string += "->this";
|
||||
}
|
||||
//std::cout << "inner = " << inner << " nextStates size = " << nextStates.size() <<std::endl;
|
||||
return string;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user