Fixed up function template inference to handle pointer to template types

This commit is contained in:
Nathan Braswell
2015-05-23 23:40:55 -04:00
parent eebffb404e
commit 7448a88f66
3 changed files with 24 additions and 0 deletions

View File

@@ -1022,11 +1022,22 @@ void ASTTransformation::unifyType(NodeTree<Symbol> *syntaxType, Type type, std::
// doesn't matter b/c it'll get filterd out in unifyTemplateFunction
// b) instantiated with a template type type (i.e. vector<T>)
// this will be a bit of a pain too
// 4) This is a pointer type, go down a pointer level
auto children = syntaxType->getChildren();
if (children.size() == 1) {
(*templateTypeMap)[concatSymbolTree(children.back())] = type;
} else {
// go down one in our pointer
if (children.back()->getDataRef()->getValue() == "*") {
// gotta be a better way to do this
Type* clonedType = type.clone();
clonedType->decreaseIndirection();
unifyType(children.front(), *clonedType, templateTypeMap);
delete clonedType;
return;
}
if (type.typeDefinition) {
// ok, what happens here is that we get the origional type from our type. This is
// the same as the type we have now but it still has extra data from when it was instantiated

View File

@@ -0,0 +1 @@
8

View File

@@ -0,0 +1,12 @@
import io:*
fun ptrFn<T>(ptr: T*):void {
println(*ptr)
}
fun main():int {
var a = 8
ptrFn(&a)
return 0
}