Added mem::safe_recursive_clone, and while it works for regex, it's actually slower then remaking it. Hmmmm, maybe because some of the stdlib is inefficent

This commit is contained in:
Nathan Braswell
2015-07-07 00:46:00 -04:00
parent 92f5c63c9a
commit f3cdea068e
9 changed files with 68 additions and 26 deletions

View File

@@ -692,21 +692,23 @@ NodeTree<ASTData>* ASTTransformation::transform(NodeTree<Symbol>* from, NodeTree
return newNode;
}
auto boolExp = getNode("boolean_expression", children);
NodeTree<ASTData>* toAssign = boolExp ? transform(boolExp, scope, types, limitToFunction, templateTypeReplacements) : nullptr;
// for type inferencing
if (!identifierType) {
if (toAssign)
identifierType = toAssign->getDataRef()->valueType;
else
throw "have to inference but no expression";
}
NodeTree<ASTData>* newIdentifier = new NodeTree<ASTData>("identifier", ASTData(identifier, Symbol(newIdentifierStr, true), identifierType));
addToScope(newIdentifierStr, newIdentifier, scope);
addToScope("~enclosing_scope", scope, newNode);
addToScope("~enclosing_scope", newNode, newIdentifier);
auto boolExp = getNode("boolean_expression", children);
NodeTree<ASTData>* toAssign = boolExp ? transform(boolExp, scope, types, limitToFunction, templateTypeReplacements) : nullptr;
// for type inferencing
if (!identifierType) {
if (toAssign) {
identifierType = toAssign->getDataRef()->valueType;
newIdentifier->getDataRef()->valueType = identifierType;
} else
throw "have to inference but no expression";
}
newNode->addChild(newIdentifier);
if (toAssign)
newNode->addChild(toAssign);
@@ -791,7 +793,7 @@ NodeTree<ASTData>* ASTTransformation::transform(NodeTree<Symbol>* from, NodeTree
throw "Ambigious parse!";
} else {
// Should get rid of this eventually. Right now it handles cases like sign, alpha, a comma, etc
std::cout << "Unhandled syntax node: " << name << std::endl;
//std::cout << "Unhandled syntax node: " << name << std::endl;
return new NodeTree<ASTData>();
}