From c0e741ebadd56747685c4380020a639030bb6cc3 Mon Sep 17 00:00:00 2001 From: Dhruvan Date: Wed, 2 Oct 2024 21:06:16 -0400 Subject: [PATCH] feat(tests): add new test functions and classes with generics support --- tests/ast_test.json | 1252 ++++++++++++++++++++++++++++++++++++++----- tests/main.hlx | 32 +- 2 files changed, 1145 insertions(+), 139 deletions(-) diff --git a/tests/ast_test.json b/tests/ast_test.json index a412594..1ec3d95 100644 --- a/tests/ast_test.json +++ b/tests/ast_test.json @@ -2,186 +2,1166 @@ "ast": { "Decls": [ { - "StructDecl": { + "FuncDecl": { "body": { "SuiteState": { - "body": { - "BlockState": { - "body": [ - { - "ExprState": { - "expr": { - "FunctionCallExpr": { - "args": { - "ArgumentListExpr": { - "args": [ - { - "ArgumentExpr": { - "type": 0, - "value": { - "LiteralExpr": { - "type": 0, - "value": { - "kind": "/* string */", - "length": 15, - "loc": { - "column_number": 10, - "filename": "tests/main.hlx", - "line_number": 2, - "offset": 85 - }, - "value": "\"Hello, World!\"" - } - } - } - } + "BlockState": [ + { + "ExprState": { + "FunctionCallExpr": { + "args": { + "ArgumentListExpr": [ + { + "ArgumentExpr": { + "type": 0, + "value": { + "LiteralExpr": { + "type": 0, + "value": { + "kind": "/* string */", + "length": 16, + "loc": { + "column_number": 10, + "filename": "tests/main.hlx", + "line_number": 2, + "offset": 37 + }, + "value": "\"THIS IS A TEST\"" } - ] + } } - }, - "path": { - "PathExpr": { - "path": { - "IdentExpr": { - "name": { + } + } + ] + }, + "generics": {}, + "path": { + "PathExpr": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 5, + "loc": { + "column_number": 4, + "filename": "tests/main.hlx", + "line_number": 2, + "offset": 20 + }, + "value": "print" + } + }, + "type": 2 + } + } + } + } + } + ] + } + }, + "generics": {}, + "modifiers": { + "modifiers": {} + }, + "name": { + "PathExpr": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 4, + "loc": { + "column_number": 3, + "filename": "tests/main.hlx", + "line_number": 1, + "offset": 7 + }, + "value": "main" + } + }, + "type": 2 + } + }, + "params": {}, + "qualifiers": { + "modifiers": {} + }, + "returns": {} + } + }, + { + "FuncDecl": { + "body": { + "SuiteState": { + "BlockState": [ + { + "ReturnState": { + "LiteralExpr": { + "type": 0, + "value": { + "kind": "/* int */", + "length": 1, + "loc": { + "column_number": 11, + "filename": "tests/main.hlx", + "line_number": 6, + "offset": 73 + }, + "value": "0" + } + } + } + } + ] + } + }, + "generics": {}, + "modifiers": { + "modifiers": {} + }, + "name": { + "PathExpr": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 7, + "loc": { + "column_number": 3, + "filename": "tests/main.hlx", + "line_number": 5, + "offset": 50 + }, + "value": "test_fn" + } + }, + "type": 2 + } + }, + "params": {}, + "qualifiers": { + "modifiers": {} + }, + "returns": { + "Type": { + "generics": {}, + "specifiers": { + "modifiers": {} + }, + "value": { + "IdentExpr": { + "kind": "i32", + "length": 3, + "loc": { + "column_number": 16, + "filename": "tests/main.hlx", + "line_number": 5, + "offset": 59 + }, + "value": "i32" + } + } + } + } + } + }, + { + "ClassDecl": { + "body": { + "SuiteState": { + "BlockState": [ + { + "LetDecl": { + "modifiers": { + "modifiers": {} + }, + "vars": [ + { + "VarDecl": { + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 8, + "filename": "tests/main.hlx", + "line_number": 10, + "offset": 117 + }, + "value": "x" + } + }, + "type": { + "Type": { + "generics": {}, + "specifiers": { + "modifiers": {} + }, + "value": { + "IdentExpr": { "kind": "_", - "length": 5, + "length": 1, "loc": { - "column_number": 4, + "column_number": 11, "filename": "tests/main.hlx", - "line_number": 2, - "offset": 69 + "line_number": 10, + "offset": 120 }, - "value": "print" + "value": "T" } } - }, - "type": 2 + } } } } } } + ], + "vis": { + "modifiers": {} } - ] - } - } - } - }, - "derives": { - "UDTDeriveDecl": { - "derives": [ + } + }, { - "Type": { - "type": 0, - "value": { - "IdentExpr": { - "name": { - "kind": "_", - "length": 4, - "loc": { - "column_number": 20, - "filename": "tests/main.hlx", - "line_number": 1, - "offset": 24 + "LetDecl": { + "modifiers": { + "modifiers": [ + { + "marker": { + "kind": "static", + "length": 6, + "loc": { + "column_number": 8, + "filename": "tests/main.hlx", + "line_number": 11, + "offset": 135 + }, + "value": "static" }, - "value": "Base" + "type": 2 + } + ] + }, + "vars": [ + { + "VarDecl": { + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 15, + "filename": "tests/main.hlx", + "line_number": 11, + "offset": 137 + }, + "value": "y" + } + }, + "type": { + "Type": { + "generics": {}, + "specifiers": { + "modifiers": {} + }, + "value": { + "IdentExpr": { + "kind": "i32", + "length": 3, + "loc": { + "column_number": 18, + "filename": "tests/main.hlx", + "line_number": 11, + "offset": 142 + }, + "value": "i32" + } + } + } + } + } + } } } + ], + "vis": { + "modifiers": {} } } }, { - "marker": { - "kind": "pub", - "length": 3, - "loc": { - "column_number": 0, - "filename": "HZL_CMPILER_INL.ACCESS_SPECIFIER__.tmp", - "line_number": 0, - "offset": 0 - }, - "value": "pub" - }, - "type": 0 + "FuncDecl": { + "body": { + "SuiteState": { + "BlockState": [ + { + "ExprState": { + "DotPathExpr": { + "lhs": { + "IdentExpr": { + "kind": "_", + "length": 4, + "loc": { + "column_number": 8, + "filename": "tests/main.hlx", + "line_number": 14, + "offset": 182 + }, + "value": "self" + } + }, + "rhs": { + "BinaryExpr": { + "lhs": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 13, + "filename": "tests/main.hlx", + "line_number": 14, + "offset": 184 + }, + "value": "x" + } + }, + "op": { + "kind": "=", + "length": 1, + "loc": { + "column_number": 15, + "filename": "tests/main.hlx", + "line_number": 14, + "offset": 186 + }, + "value": "=" + }, + "rhs": { + "LiteralExpr": { + "type": 0, + "value": { + "kind": "/* int */", + "length": 1, + "loc": { + "column_number": 17, + "filename": "tests/main.hlx", + "line_number": 14, + "offset": 188 + }, + "value": "0" + } + } + } + } + } + } + } + }, + { + "ExprState": { + "ScopePathExpr": { + "lhs": { + "IdentExpr": { + "kind": "_", + "length": 12, + "loc": { + "column_number": 8, + "filename": "tests/main.hlx", + "line_number": 15, + "offset": 209 + }, + "value": "WithGenerics" + } + }, + "rhs": { + "BinaryExpr": { + "lhs": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 22, + "filename": "tests/main.hlx", + "line_number": 15, + "offset": 212 + }, + "value": "y" + } + }, + "op": { + "kind": "=", + "length": 1, + "loc": { + "column_number": 24, + "filename": "tests/main.hlx", + "line_number": 15, + "offset": 214 + }, + "value": "=" + }, + "rhs": { + "LiteralExpr": { + "type": 0, + "value": { + "kind": "/* int */", + "length": 1, + "loc": { + "column_number": 26, + "filename": "tests/main.hlx", + "line_number": 15, + "offset": 216 + }, + "value": "0" + } + } + } + } + } + } + } + } + ] + } + }, + "generics": {}, + "modifiers": { + "modifiers": {} + }, + "name": { + "PathExpr": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 12, + "loc": { + "column_number": 7, + "filename": "tests/main.hlx", + "line_number": 13, + "offset": 162 + }, + "value": "WithGenerics" + } + }, + "type": 2 + } + }, + "params": [ + { + "VarDecl": { + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 4, + "loc": { + "column_number": 20, + "filename": "tests/main.hlx", + "line_number": 13, + "offset": 167 + }, + "value": "self" + } + }, + "type": {} + } + } + } + } + ], + "qualifiers": { + "modifiers": {} + }, + "returns": {} + } } ] } }, + "derives": {}, "generics": { "RequiresDecl": { - "bounds": { - "TypeBoundList": { - "bounds": [ - { - "InstOfExpr": { - "op": 0, - "type": { - "IdentExpr": { - "name": { - "kind": "_", - "length": 10, - "loc": { - "column_number": 47, - "filename": "tests/main.hlx", - "line_number": 1, - "offset": 57 - }, - "value": "Arithmetic" - } - } - }, - "value": { - "IdentExpr": { - "name": { + "bounds": {}, + "params": { + "RequiresParamList": [ + { + "RequiresParamDecl": { + "is_const": "false", + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { "kind": "_", "length": 1, "loc": { - "column_number": 41, + "column_number": 29, "filename": "tests/main.hlx", - "line_number": 1, - "offset": 42 + "line_number": 9, + "offset": 105 }, "value": "T" } - } + }, + "type": {} } } } - ] - } + } + ] + } + } + }, + "modifiers": { + "modifiers": {} + }, + "name": { + "IdentExpr": { + "kind": "_", + "length": 12, + "loc": { + "column_number": 6, + "filename": "tests/main.hlx", + "line_number": 9, + "offset": 93 }, - "params": { - "RequiresParamList": { - "params": [ - { - "RequiresParamDecl": { - "is_const": "false", - "value": {}, - "var": { - "NamedVarSpecifier": { - "path": { - "IdentExpr": { - "name": { + "value": "WithGenerics" + } + } + } + }, + { + "ClassDecl": { + "body": { + "SuiteState": { + "BlockState": [ + { + "LetDecl": { + "modifiers": { + "modifiers": {} + }, + "vars": [ + { + "VarDecl": { + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { "kind": "_", "length": 1, "loc": { - "column_number": 35, + "column_number": 12, "filename": "tests/main.hlx", - "line_number": 1, - "offset": 36 + "line_number": 20, + "offset": 290 + }, + "value": "x" + } + }, + "type": { + "Type": { + "generics": {}, + "specifiers": { + "modifiers": {} }, - "value": "T" + "value": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 15, + "filename": "tests/main.hlx", + "line_number": 20, + "offset": 293 + }, + "value": "T" + } + } } } + } + } + } + } + ], + "vis": { + "modifiers": [ + { + "marker": { + "kind": "pub", + "length": 3, + "loc": { + "column_number": 4, + "filename": "tests/main.hlx", + "line_number": 20, + "offset": 284 }, - "type": {} + "value": "pub" + }, + "type": 0 + } + ] + } + } + }, + { + "LetDecl": { + "modifiers": { + "modifiers": {} + }, + "vars": [ + { + "VarDecl": { + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 12, + "filename": "tests/main.hlx", + "line_number": 21, + "offset": 307 + }, + "value": "y" + } + }, + "type": { + "Type": { + "generics": {}, + "specifiers": { + "modifiers": {} + }, + "value": { + "IdentExpr": { + "kind": "i32", + "length": 3, + "loc": { + "column_number": 15, + "filename": "tests/main.hlx", + "line_number": 21, + "offset": 312 + }, + "value": "i32" + } + } + } + } + } } } } + ], + "vis": { + "modifiers": [ + { + "marker": { + "kind": "pub", + "length": 3, + "loc": { + "column_number": 4, + "filename": "tests/main.hlx", + "line_number": 21, + "offset": 301 + }, + "value": "pub" + }, + "type": 0 + } + ] } - ] + } + }, + { + "FuncDecl": { + "body": { + "SuiteState": { + "BlockState": [ + { + "ExprState": { + "DotPathExpr": { + "lhs": { + "IdentExpr": { + "kind": "_", + "length": 4, + "loc": { + "column_number": 8, + "filename": "tests/main.hlx", + "line_number": 24, + "offset": 357 + }, + "value": "self" + } + }, + "rhs": { + "BinaryExpr": { + "lhs": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 13, + "filename": "tests/main.hlx", + "line_number": 24, + "offset": 359 + }, + "value": "x" + } + }, + "op": { + "kind": "=", + "length": 1, + "loc": { + "column_number": 15, + "filename": "tests/main.hlx", + "line_number": 24, + "offset": 361 + }, + "value": "=" + }, + "rhs": { + "LiteralExpr": { + "type": 0, + "value": { + "kind": "/* int */", + "length": 1, + "loc": { + "column_number": 17, + "filename": "tests/main.hlx", + "line_number": 24, + "offset": 363 + }, + "value": "0" + } + } + } + } + } + } + } + }, + { + "ExprState": { + "ScopePathExpr": { + "lhs": { + "IdentExpr": { + "kind": "_", + "length": 17, + "loc": { + "column_number": 8, + "filename": "tests/main.hlx", + "line_number": 25, + "offset": 389 + }, + "value": "WithGenericsBound" + } + }, + "rhs": { + "BinaryExpr": { + "lhs": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 27, + "filename": "tests/main.hlx", + "line_number": 25, + "offset": 392 + }, + "value": "y" + } + }, + "op": { + "kind": "=", + "length": 1, + "loc": { + "column_number": 29, + "filename": "tests/main.hlx", + "line_number": 25, + "offset": 394 + }, + "value": "=" + }, + "rhs": { + "LiteralExpr": { + "type": 0, + "value": { + "kind": "/* int */", + "length": 1, + "loc": { + "column_number": 31, + "filename": "tests/main.hlx", + "line_number": 25, + "offset": 396 + }, + "value": "0" + } + } + } + } + } + } + } + } + ] + } + }, + "generics": {}, + "modifiers": { + "modifiers": {} + }, + "name": { + "PathExpr": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 17, + "loc": { + "column_number": 7, + "filename": "tests/main.hlx", + "line_number": 23, + "offset": 337 + }, + "value": "WithGenericsBound" + } + }, + "type": 2 + } + }, + "params": [ + { + "VarDecl": { + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 4, + "loc": { + "column_number": 25, + "filename": "tests/main.hlx", + "line_number": 23, + "offset": 342 + }, + "value": "self" + } + }, + "type": {} + } + } + } + } + ], + "qualifiers": { + "modifiers": {} + }, + "returns": {} + } + }, + { + "FuncDecl": { + "body": { + "SuiteState": { + "BlockState": [ + { + "ExprState": { + "FunctionCallExpr": { + "args": { + "ArgumentListExpr": [ + { + "ArgumentExpr": { + "type": 0, + "value": { + "LiteralExpr": { + "type": 0, + "value": { + "kind": "/* string */", + "length": 15, + "loc": { + "column_number": 14, + "filename": "tests/main.hlx", + "line_number": 29, + "offset": 485 + }, + "value": "\"Hello, World!\"" + } + } + } + } + } + ] + }, + "generics": {}, + "path": { + "PathExpr": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 5, + "loc": { + "column_number": 8, + "filename": "tests/main.hlx", + "line_number": 29, + "offset": 469 + }, + "value": "print" + } + }, + "type": 2 + } + } + } + } + } + ] + } + }, + "generics": {}, + "modifiers": { + "modifiers": [ + { + "marker": { + "kind": "pub", + "length": 3, + "loc": { + "column_number": 4, + "filename": "tests/main.hlx", + "line_number": 28, + "offset": 409 + }, + "value": "pub" + }, + "type": 0 + } + ] + }, + "name": { + "PathExpr": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 9, + "loc": { + "column_number": 11, + "filename": "tests/main.hlx", + "line_number": 28, + "offset": 422 + }, + "value": "something" + } + }, + "type": 2 + } + }, + "params": [ + { + "VarDecl": { + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 4, + "loc": { + "column_number": 21, + "filename": "tests/main.hlx", + "line_number": 28, + "offset": 427 + }, + "value": "self" + } + }, + "type": {} + } + } + } + }, + { + "VarDecl": { + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 27, + "filename": "tests/main.hlx", + "line_number": 28, + "offset": 430 + }, + "value": "a" + } + }, + "type": { + "Type": { + "generics": {}, + "specifiers": { + "modifiers": {} + }, + "value": { + "IdentExpr": { + "kind": "_", + "length": 3, + "loc": { + "column_number": 30, + "filename": "tests/main.hlx", + "line_number": 28, + "offset": 435 + }, + "value": "int" + } + } + } + } + } + } + } + }, + { + "VarDecl": { + "value": { + "LiteralExpr": { + "type": 0, + "value": { + "kind": "/* float */", + "length": 5, + "loc": { + "column_number": 46, + "filename": "tests/main.hlx", + "line_number": 28, + "offset": 453 + }, + "value": "19.21" + } + } + }, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 35, + "filename": "tests/main.hlx", + "line_number": 28, + "offset": 438 + }, + "value": "y" + } + }, + "type": { + "Type": { + "generics": {}, + "specifiers": { + "modifiers": {} + }, + "value": { + "IdentExpr": { + "kind": "_", + "length": 5, + "loc": { + "column_number": 38, + "filename": "tests/main.hlx", + "line_number": 28, + "offset": 445 + }, + "value": "float" + } + } + } + } + } + } + } + } + ], + "qualifiers": { + "modifiers": {} + }, + "returns": {} + } } + ] + } + }, + "derives": {}, + "generics": { + "RequiresDecl": { + "bounds": { + "TypeBoundList": [ + { + "InstOfExpr": { + "op": 0, + "type": { + "IdentExpr": { + "kind": "_", + "length": 6, + "loc": { + "column_number": 46, + "filename": "tests/main.hlx", + "line_number": 19, + "offset": 275 + }, + "value": "Number" + } + }, + "value": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 40, + "filename": "tests/main.hlx", + "line_number": 19, + "offset": 264 + }, + "value": "T" + } + } + } + } + ] + }, + "params": { + "RequiresParamList": [ + { + "RequiresParamDecl": { + "is_const": "false", + "value": {}, + "var": { + "NamedVarSpecifier": { + "path": { + "IdentExpr": { + "kind": "_", + "length": 1, + "loc": { + "column_number": 34, + "filename": "tests/main.hlx", + "line_number": 19, + "offset": 258 + }, + "value": "T" + } + }, + "type": {} + } + } + } + } + ] } } }, @@ -190,17 +1170,15 @@ }, "name": { "IdentExpr": { - "name": { - "kind": "_", - "length": 4, - "loc": { - "column_number": 7, - "filename": "tests/main.hlx", - "line_number": 1, - "offset": 11 - }, - "value": "Woah" - } + "kind": "_", + "length": 17, + "loc": { + "column_number": 6, + "filename": "tests/main.hlx", + "line_number": 19, + "offset": 246 + }, + "value": "WithGenericsBound" } } } diff --git a/tests/main.hlx b/tests/main.hlx index 1e3bf86..3dacc9c 100644 --- a/tests/main.hlx +++ b/tests/main.hlx @@ -1,3 +1,31 @@ -struct Woah derives priv Base requires if T has Arithmetic { - print("Hello, World!"); +fn main() { + print("THIS IS A TEST"); +} + +fn test_fn() -> i32 { + return 0; +} + +class WithGenerics requires { + let x: T; + let static y: i32; + + fn WithGenerics(self) { + self.x = 0; + WithGenerics::y = 0; + } +} + +class WithGenericsBound requires if T has Number { + pub let x: T; + pub let y: i32; + + fn WithGenericsBound(self) { + self.x = 0; + WithGenericsBound::y = 0; + } + + pub fn something(self, a: int, y: float = 19.21) { + print("Hello, World!"); + } } \ No newline at end of file