Adds handling for generic AST nodes in PrintNode and SyntaxKindString
parent
d641f713de
commit
d48995716e
|
@ -0,0 +1,13 @@
|
|||
struct Foo {
|
||||
static Func<T>(t: T): T {
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
||||
struct Program {
|
||||
static main(): int {
|
||||
x: int = 4;
|
||||
y: int = Foo.Func(x);
|
||||
return x;
|
||||
}
|
||||
}
|
19
src/ast.c
19
src/ast.c
|
@ -39,6 +39,10 @@ const char *SyntaxKindString(SyntaxKind syntaxKind)
|
|||
return "FunctionSignature";
|
||||
case FunctionSignatureArguments:
|
||||
return "FunctionSignatureArguments";
|
||||
case GenericArgument:
|
||||
return "GenericArgument";
|
||||
case GenericArguments:
|
||||
return "GenericArguments";
|
||||
case Identifier:
|
||||
return "Identifier";
|
||||
case IfStatement:
|
||||
|
@ -599,6 +603,7 @@ void PrintNode(Node *node, uint32_t tabCount)
|
|||
case FunctionSignature:
|
||||
printf("\n");
|
||||
PrintNode(node->functionSignature.identifier, tabCount + 1);
|
||||
PrintNode(node->functionSignature.genericArguments, tabCount + 1);
|
||||
PrintNode(node->functionSignature.arguments, tabCount + 1);
|
||||
PrintNode(node->functionSignature.type, tabCount + 1);
|
||||
PrintNode(node->functionSignature.modifiers, tabCount + 1);
|
||||
|
@ -614,6 +619,20 @@ void PrintNode(Node *node, uint32_t tabCount)
|
|||
}
|
||||
return;
|
||||
|
||||
case GenericArgument:
|
||||
printf("\n");
|
||||
PrintNode(node->genericArgument.identifier, tabCount + 1);
|
||||
/* Constraint nodes are not implemented. */
|
||||
/* PrintNode(node->genericArgument.constraint, tabCount + 1); */
|
||||
return;
|
||||
|
||||
case GenericArguments:
|
||||
printf("\n");
|
||||
for (i = 0; i < node->genericArguments.count; i += 1) {
|
||||
PrintNode(node->genericArguments.arguments[i], tabCount + 1);
|
||||
}
|
||||
return;
|
||||
|
||||
case Identifier:
|
||||
if (node->typeTag == NULL)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue