diff --git a/krakenGrammer.kgm b/krakenGrammer.kgm index 8c143ab..e22add0 100644 --- a/krakenGrammer.kgm +++ b/krakenGrammer.kgm @@ -26,7 +26,7 @@ WS = actual_white | WS comment WS | WS comment | ; # cpp_comment lets us do stuff like ending a statement with a cpp comment - c comments already work as they don't eat the return maybe_line_white = "( | )+" | ; -line_end = maybe_line_white ";" | maybe_line_white line_break | maybe_line_white cpp_comment ; +line_end = maybe_line_white ";" | maybe_line_white line_break | maybe_line_white cpp_comment | WS c_comment line_end ; # line_end = "( | )+" ";" | "( | )+" line_break | "( | )+" cpp_comment | ";" | line_break | cpp_comment ; # line_end = WS ";" | WS line_break | WS cpp_comment ; diff --git a/src/ASTTransformation.cpp b/src/ASTTransformation.cpp index 087690e..30f8346 100644 --- a/src/ASTTransformation.cpp +++ b/src/ASTTransformation.cpp @@ -580,7 +580,12 @@ NodeTree* ASTTransformation::transform(NodeTree* from, NodeTree // NodeTree* newIdentifier = transform(children[1], scope); //Transform the identifier // newIdentifier->getDataRef()->valueType = Type(concatSymbolTree(children[0]));//set the type of the identifier std::string newIdentifierStr = concatSymbolTree(children[0]); - Type* identifierType = typeFromTypeNode(children[2], scope, templateTypeReplacements); + Type* identifierType; + if (children.size() > 1 && concatSymbolTree(children[1]) == ".") + identifierType = typeFromTypeNode(children.back(), scope, templateTypeReplacements); + else + identifierType = typeFromTypeNode(children[2], scope, templateTypeReplacements); + std::cout << "Declaring an identifier " << newIdentifierStr << " to be of type " << identifierType->toString() << std::endl; NodeTree* newIdentifier = new NodeTree("identifier", ASTData(identifier, Symbol(newIdentifierStr, true), identifierType)); addToScope(newIdentifierStr, newIdentifier, scope); @@ -588,20 +593,20 @@ NodeTree* ASTTransformation::transform(NodeTree* from, NodeTree addToScope("~enclosing_scope", newNode, newIdentifier); newNode->addChild(newIdentifier); - if (children.size() > 2 && concatSymbolTree(children[2]) == ".") { + if (children.size() > 1 && concatSymbolTree(children[1]) == ".") { //A bit of a special case for declarations - if there's anything after just the normal 1 node declaration, it's either //an expression that is assigned to the declaration (int a = 4;) or a member call (Object a.constructAThing()) //This code is a simplified version of the code in function_call with respect to access_operation. //Note that in this case, what is lhs there is our newIdentifier here (the declaration of the left side of the access operation) - auto sliced = slice(children, 4, -1); + auto sliced = slice(children, 3, -3); std::vector*> initPositionFuncParams = transformChildren(sliced, std::set(), scope, types, templateTypeReplacements); - NodeTree* rhs = transform(children[3], identifierType->typeDefinition, mapNodesToTypes(initPositionFuncParams), templateTypeReplacements); //If an access operation, then the right side will be in the lhs's type's scope + NodeTree* rhs = transform(children[2], identifierType->typeDefinition, mapNodesToTypes(initPositionFuncParams), templateTypeReplacements); //If an access operation, then the right side will be in the lhs's type's scope std::vector*> transformedChildren; transformedChildren.push_back(newIdentifier); transformedChildren.push_back(rhs); NodeTree* accessFuncCall = doFunction(scope, ".", transformedChildren, templateTypeReplacements); accessFuncCall->getDataRef()->valueType = rhs->getDataRef()->valueType; //Now we borrow a bit of code from function_call below to actually use our new accessFuncCall to setup a "initPosition" function call //that will follow the identifier in this declaration node - std::string initPosFuncName = newIdentifierStr + "." + concatSymbolTree(children[3]); + std::string initPosFuncName = newIdentifierStr + "." + concatSymbolTree(children[2]); NodeTree* initPositionFuncCall = new NodeTree(initPosFuncName, ASTData(function_call, Symbol(initPosFuncName, true))); initPositionFuncCall->addChild(accessFuncCall); initPositionFuncCall->getDataRef()->valueType = accessFuncCall->getDataRef()->valueType; @@ -998,7 +1003,7 @@ NodeTree* ASTTransformation::templateFunctionLookup(NodeTree* if (!traitsEqual) continue; - std::vector*> functionParameters = slice(templateSyntaxTree->getChildren(), 2, -3, 2); //skip name, intervening commas, return type, and the code block + std::vector*> functionParameters = slice(templateSyntaxTree->getChildren(), 2, -4, 2); //skip name, intervening commas, return type, and the code block std::cout << functionParameters.size() << " " << types.size() << std::endl; if (functionParameters.size() != types.size()) continue; diff --git a/stdlib/io.krak b/stdlib/io.krak index 0fc8a3e..c41a819 100644 --- a/stdlib/io.krak +++ b/stdlib/io.krak @@ -4,11 +4,11 @@ __if_comp__ __C__ simple_passthrough """ #include """ -|void| println() { +fun println() : void { print("\n"); } -|void| print(|char*| toPrint) { +fun print(toPrint: char*) : void { __if_comp__ __C__ { simple_passthrough(toPrint = toPrint::) """ printf(toPrint); @@ -17,20 +17,20 @@ __if_comp__ __C__ simple_passthrough """ return; } -|void| println(|char*| toPrint) { +fun println(toPrint: char*) : void { print(toPrint); println(); } -|void| print(|string| toPrint) { +fun print(toPrint: string) : void { print(toPrint.toCharArray()); } -|void| println(|string| toPrint) { +fun println(toPrint: string): void { println(toPrint.toCharArray()); } -|void| print(|int| toPrint) { +fun print(toPrint: int): void { __if_comp__ __C__ { simple_passthrough(toPrint = toPrint::) """ printf("%d", toPrint); @@ -39,12 +39,12 @@ __if_comp__ __C__ simple_passthrough """ return; } -|void| println(|int| toPrint) { +fun println(toPrint: int): void { print(toPrint); println(); } -|void| print(|float| toPrint) { +fun print(toPrint: float): void { __if_comp__ __C__ { simple_passthrough(toPrint = toPrint::) """ printf("%f", toPrint); @@ -53,7 +53,7 @@ __if_comp__ __C__ simple_passthrough """ return; } -|void| print(|double| toPrint) { +fun print(toPrint: double) : void{ __if_comp__ __C__ { simple_passthrough(toPrint = toPrint::) """ printf("%f", toPrint); @@ -62,20 +62,15 @@ __if_comp__ __C__ simple_passthrough """ return; } -|void| println(|float| toPrint) { +fun println(toPrint: float): void { print(toPrint); println(); } -|void| println(|double| toPrint){ +fun println(toPrint: double): void { print(toPrint); println(); } - - - - - diff --git a/stdlib/math.krak b/stdlib/math.krak index 5f0b315..578c091 100644 --- a/stdlib/math.krak +++ b/stdlib/math.krak @@ -2,7 +2,7 @@ __if_comp__ __C__ simple_passthrough(::"-lm") """ #include """ -|int| fibanacci(|int| num) { +fun fibanacci(num: int): int { if (num < 2) return 1; return fibanacci(num-1) + fibanacci(num-2); @@ -12,9 +12,9 @@ __if_comp__ __C__ simple_passthrough(::"-lm") """ * Trig Functions ********************/ -|double| atan(|double| arg) +fun atan(arg: double): double { - |double| ans = 0; + var ans: double = 0; __if_comp__ __C__{ simple_passthrough(arg = arg, ans = ans : ans = ans :) """ ans = atan(arg); @@ -24,9 +24,9 @@ __if_comp__ __C__ simple_passthrough(::"-lm") """ return ans; }//end atan function -|double| atan2(|double| x, |double| y) +fun atan2(x: double, y: double): double { - |double| ans = 0; + var ans: double = 0; __if_comp__ __C__{ simple_passthrough(x = x, y = y, ans = ans : ans = ans :) """ ans = atan2(x,y); @@ -36,9 +36,9 @@ __if_comp__ __C__ simple_passthrough(::"-lm") """ return ans; }//end atan2 function -|double| acos(|double| arg) +fun acos(arg: double): double { - |double| ans = 0; + var ans: double = 0; __if_comp__ __C__{ simple_passthrough(arg = arg, ans = ans : ans = ans :) """ ans = acos(arg); @@ -48,9 +48,9 @@ __if_comp__ __C__ simple_passthrough(::"-lm") """ return ans; }//end acos function -|double| asin(|double| arg) +fun asin(arg: double): double { - |double| ans = 0; + var ans: double = 0; __if_comp__ __C__{ simple_passthrough(arg = arg, ans = ans : ans = ans :) """ ans = asin(arg); @@ -60,9 +60,9 @@ __if_comp__ __C__ simple_passthrough(::"-lm") """ return ans; }//end asin function -|double| tan(|double| arg) +fun tan(arg: double): double { - |double| ans = 0; + var ans: double = 0; __if_comp__ __C__{ simple_passthrough(arg = arg, ans = ans : ans = ans :) """ ans = tan(arg); @@ -72,9 +72,9 @@ __if_comp__ __C__ simple_passthrough(::"-lm") """ return ans; }//end tan function -|double| cos(|double| arg) +fun cos(arg: double): double { - |double| ans = 0; + var ans: double = 0; __if_comp__ __C__{ simple_passthrough(arg = arg, ans = ans : ans = ans :) """ ans = cos(arg); @@ -84,9 +84,9 @@ __if_comp__ __C__ simple_passthrough(::"-lm") """ return ans; }//end cos function -|double| sin(|double| arg) +fun sin(arg: double): double { - |double| ans = 0; + var ans: double = 0; __if_comp__ __C__{ simple_passthrough(arg = arg, ans = ans : ans = ans :) """ ans = sin(arg); @@ -99,11 +99,3 @@ __if_comp__ __C__ simple_passthrough(::"-lm") """ //|int| NotPi = 3; //|double| STD_PI = 4*atan(1); - - - - - - - - diff --git a/stdlib/mem.krak b/stdlib/mem.krak index a799bb2..2fd6fba 100644 --- a/stdlib/mem.krak +++ b/stdlib/mem.krak @@ -4,8 +4,8 @@ __if_comp__ __C__ simple_passthrough """ /* we have a template versions so we don't have to cast (because we don't have that yet) */ -template |T*| malloc(|int| size) { - |T*| memPtr; +fun malloc(size: int): T* { + var memPtr: T*; __if_comp__ __C__ { simple_passthrough( size = size, memPtr = memPtr : memPtr = memPtr :) """ memPtr = malloc(size); @@ -14,7 +14,7 @@ template |T*| malloc(|int| size) { return memPtr; } -template |void| free(|T*| memPtr) { +fun free(memPtr: T*): void { __if_comp__ __C__ { simple_passthrough(memPtr = memPtr ::) """ free(memPtr); @@ -22,9 +22,9 @@ template |void| free(|T*| memPtr) { } } -template |int| sizeof() { - |T| testObj; - |int| result; +fun sizeof(): int { + var testObj: T; + var result: int; __if_comp__ __C__ { simple_passthrough(testObj = testObj : result = result:) """ int result = sizeof(testObj); @@ -33,32 +33,32 @@ template |int| sizeof() { return result; } -template |T*| new(|int| count) { +fun new(count: int): T* { return malloc( sizeof() * count ); } -template |T*| new() { +fun new(): T* { return new(1); } /* We specilize on the trait Destructable to decide on whether or not the destructor should be called */ -template |void| delete(|T*| toDelete, |int| itemCount) { +fun delete(toDelete: T*, itemCount: int): void { delete(toDelete); } /* Calling this with itemCount = 0 allows you to delete destructable objects without calling their destructors. */ -template |void| delete(|T*| toDelete, |int| itemCount) { - for (|int| i = 0; i < itemCount; i++;) +fun delete(toDelete: T*, itemCount: int): void { + for (var i: int = 0; i < itemCount; i++;) toDelete[i].destruct(); delete(toDelete); } /* We specilize on the trait Destructable to decide on whether or not the destructor should be called */ -template |void| delete(|T*| toDelete) { +fun delete(toDelete: T*): void { free(toDelete); } -template |void| delete(|T*| toDelete) { +fun delete(toDelete: T*): void { toDelete->destruct(); free(toDelete); } diff --git a/stdlib/string.krak b/stdlib/string.krak index 50432e3..f9bef1e 100644 --- a/stdlib/string.krak +++ b/stdlib/string.krak @@ -2,12 +2,12 @@ import vector; import mem; typedef string (Destructable) { - |vector::vector| data; - |string*| construct() { + var data: vector::vector; + fun construct(): string* { data.construct(); return this; } - |string*| construct(|char*| str) { + fun construct(str: char*): string* { data.construct(); while(*str) { data.addEnd(*str); @@ -16,9 +16,9 @@ typedef string (Destructable) { return this; } - |char*| toCharArray() { - |char*| out = mem::new(data.size); - for (|int| i = 0; i < data.size; i++;) + fun toCharArray(): char* { + var out: char* = mem::new(data.size); + for (var i: int = 0; i < data.size; i++;) out[i] = data.get(i); return out; } diff --git a/stdlib/trivial_container.krak b/stdlib/trivial_container.krak index 4b70141..9d87def 100644 --- a/stdlib/trivial_container.krak +++ b/stdlib/trivial_container.krak @@ -1,8 +1,8 @@ import io; -typedef template trivialContainer { - |T| data; - |void| print() { +typedef trivialContainer { + var data: T; + fun print(): void { io::print(data); } }; diff --git a/stdlib/util.krak b/stdlib/util.krak index 70e605c..a46f852 100644 --- a/stdlib/util.krak +++ b/stdlib/util.krak @@ -1,11 +1,11 @@ -template |T| greater(|T| a, |T| b) { +fun greater(a: T, b: T): T { if (a > b) return a; return b; } -template |T| lesser(|T| a, |T| b) { +fun lesser(a: T, b: T): T { if (a > b) return b; return a; diff --git a/stdlib/vector.krak b/stdlib/vector.krak index 512a0f6..0b9ec23 100644 --- a/stdlib/vector.krak +++ b/stdlib/vector.krak @@ -2,27 +2,27 @@ import mem:*; import util:*; import io:*; -typedef template vector (Destructable) { - |T*| data; - |int| size; - |int| available; +typedef vector (Destructable) { + var data: T*; + var size: int; + var available: int; - |vector*| construct() { + fun construct(): vector* { size = 0; available = 8; data = new(8); return this; } - |void| destruct() { + fun destruct(): void { delete(data); } - |bool| resize(|int| newSize) { - |T*| newData = new(newSize); + fun resize(newSize: int): bool { + var newData: T* = new(newSize); if (!newData) return false; - for (|int| i = 0; i < lesser(size, newSize); i++;) + for (var i: int = 0; i < lesser(size, newSize); i++;) newData[i] = data[i]; delete(data, 0); data = newData; @@ -30,11 +30,11 @@ typedef template vector (Destructable) { return true; } - |T| at(|int| index) { + fun at(index: int): T { return get(index); } - |T| get(|int| index) { + fun get(index: int): T { if (index < 0 || index >= size) { println("Vector access out of bounds! Retuning 0th element as sanest option"); print("Vector tried to access element: "); @@ -44,17 +44,18 @@ typedef template vector (Destructable) { return data[index]; } - |T*| getBackingMemory() { return data; } + fun getBackingMemory(): T* { return data; } - |void| set(|int| index, |T| dataIn) { + fun set(index: int, dataIn: T): void { if (index < 0 || index >= size) return; data[index] = dataIn; } - |void| addEnd(|T| dataIn) { + fun addEnd(dataIn: T): void { size++; if (size >= available) resize(size*2); data[size-1] = dataIn; } }; + diff --git a/tests/c_passthrough_diff.krak b/tests/c_passthrough_diff.krak index 394d730..2b78e6b 100644 --- a/tests/c_passthrough_diff.krak +++ b/tests/c_passthrough_diff.krak @@ -4,13 +4,13 @@ __if_comp__ __C__ simple_passthrough """ int diff = 7; """ -|void| print_it() { +fun print_it(): void { __if_comp__ __C__ simple_passthrough """ printf("diff_file: %d\n", diff); """ } -|void| print_it(|int| i) { +fun print_it(i: int): void { __if_comp__ __C__ simple_passthrough(i = i::) """ printf("diff_file: %d\n", i); """ diff --git a/tests/sameNameOne.krak b/tests/sameNameOne.krak index 192552f..e32e838 100644 --- a/tests/sameNameOne.krak +++ b/tests/sameNameOne.krak @@ -1,7 +1,7 @@ -|int| sameVar; -|int| sameFun() { return 5; } +var sameVar: int; +fun sameFun(): int { return 5; } typedef classTester { - |int| method() { return 8; } + fun method(): int { return 8; } } diff --git a/tests/sameNameTwo.krak b/tests/sameNameTwo.krak index 0b0d15c..50e7172 100644 --- a/tests/sameNameTwo.krak +++ b/tests/sameNameTwo.krak @@ -1,6 +1,6 @@ -|int| sameVar; -|int| sameFun() { return 6; } +var sameVar: int; +fun sameFun(): int { return 6; } typedef classTester { - |int| method() { return 9; } + fun method(): int { return 9; } } diff --git a/tests/scopeQualified.krak b/tests/scopeQualified.krak index c862136..dd94944 100644 --- a/tests/scopeQualified.krak +++ b/tests/scopeQualified.krak @@ -1,27 +1,27 @@ -|int| qualified_variable = 7; -|int| qualified_func() { return 9; } +var qualified_variable: int = 7; +fun qualified_func(): int { return 9; } typedef qualified_class { - |int| number; - |qualified_class*| construct(|int| num) { + var number: int; + fun construct(num: int): qualified_class* { number = num; return this; } - |int| get() { + fun get(): int { return number; } }; -typedef template qualified_container { - |T| data; - |qualified_container*| construct(|T| dataIn) { +typedef qualified_container { + var data: T; + fun construct(dataIn: T): qualified_container* { data = dataIn; } - |T| get() { + fun get(): T { return data; } }; -template |T| qualified_id(|T| it) { +fun qualified_id(it: T): T { return it; } diff --git a/tests/scopeUnqualified.krak b/tests/scopeUnqualified.krak index f540dbf..e35da56 100644 --- a/tests/scopeUnqualified.krak +++ b/tests/scopeUnqualified.krak @@ -1,27 +1,27 @@ -|int| unqualifed_variable = 8; -|int| unqualified_func() { return 10; } +var unqualifed_variable: int = 8; +fun unqualified_func(): int { return 10; } typedef unqualified_class { - |int| number; - |unqualified_class*| construct(|int| num) { + var number: int; + fun construct(num: int): unqualified_class* { number = num; return this; } - |int| get() { + fun get(): int { return number; } }; -typedef template unqualified_container { - |T| data; - |unqualified_container*| construct(|T| dataIn) { +typedef unqualified_container { + var data: T; + fun construct(dataIn: T): unqualified_container* { data = dataIn; } - |T| get() { + fun get(): T { return data; } }; -template |T| unqualified_id(|T| it) { +fun unqualified_id(it: T): T { return it; } diff --git a/tests/test_OperatorOverloadTest.krak b/tests/test_OperatorOverloadTest.krak index 4218ba2..81683b4 100644 --- a/tests/test_OperatorOverloadTest.krak +++ b/tests/test_OperatorOverloadTest.krak @@ -1,44 +1,44 @@ import io:*; typedef Vec2 { - |int| x; - |int| y; + var x: int; + var y: int; - |void| print() { + fun print(): void { print(x); print(" "); print(y); } - |Vec2| add(|Vec2| other) { - |Vec2| toReturn; + fun add(other: Vec2): Vec2 { + var toReturn: Vec2; toReturn.x = x + other.x; toReturn.y = y + other.y; print(); return toReturn; } - |Vec2| subtract(|Vec2| other) { - |Vec2| toReturn; + fun subtract(other: Vec2): Vec2 { + var toReturn: Vec2; toReturn.x = x - other.x; toReturn.y = y - other.y; print(); return toReturn; } - |Vec2| operator+(|Vec2| other) { + fun operator+(other: Vec2): Vec2 { return add(other); } }; -|Vec2| operator-(|Vec2| lhs, |Vec2| rhs) { +fun operator-(lhs: Vec2, rhs: Vec2): Vec2 { return lhs.subtract(rhs); } -|int| main() { - |Vec2| vector1; - |Vec2| vector2; +fun main(): int { + var vector1: Vec2; + var vector2: Vec2; vector1.x = 3; vector1.y = 9; vector2 = vector1; @@ -48,13 +48,13 @@ typedef Vec2 { vector3.y = vector1.y + vector2.y; vector2.print(); */ - |Vec2| addition = vector1 + vector2; + var addition: Vec2 = vector1 + vector2; print("\n"); addition.print(); print("\nSubtraction\n"); vector2.x = 100; vector2.y = 70; - |Vec2| subtraction = vector1 - vector2; + var subtraction: Vec2 = vector1 - vector2; print("\n"); print(subtraction.x); print(" "); print(subtraction.y); diff --git a/tests/test_RecursiveTest.krak b/tests/test_RecursiveTest.krak index 87deed8..04fbe40 100644 --- a/tests/test_RecursiveTest.krak +++ b/tests/test_RecursiveTest.krak @@ -1,12 +1,12 @@ import io:*; -|int| fibanacci(|int| num) { +fun fibanacci(num: int): int { if (num < 2) return 1; return fibanacci(num-1) + fibanacci(num-2); } -|int| main() { +fun main(): int { print(fibanacci(4)); print("\n"); return 0; diff --git a/tests/test_badMath.krak b/tests/test_badMath.krak index 5fdf244..570cd1e 100644 --- a/tests/test_badMath.krak +++ b/tests/test_badMath.krak @@ -1,18 +1,18 @@ import io; -|int| main() { +fun main(): void { io::println("Spam"); - |int| x = 4; + var x: int = 4; x += 3; x++; - |int| y = 6; - |int| z = x + y; - |int| q = z+z; - |int| q2 = z*3; - |int| q3 = y + y; + var y :int = 6; + var z :int = x + y; + var q :int = z+z; + var q2:int = z*3; + var q3:int = y + y; io::println(q3); io::println(z); io::println(q); - for (|int| i = 0; i < 20; i++;) z++; + for (var i:int = 0; i < 20; i++;) z++; if (z > 20) io::println("We'll find out."); io::println(z); } diff --git a/tests/test_c_passthrough.krak b/tests/test_c_passthrough.krak index b79a748..20fa633 100644 --- a/tests/test_c_passthrough.krak +++ b/tests/test_c_passthrough.krak @@ -6,15 +6,15 @@ __if_comp__ __C__ simple_passthrough """ int same = 5; """ -|int| main() { +fun main(): int { __if_comp__ __C__ simple_passthrough """ printf("same_file: %d\n", same); """ c_passthrough_diff::print_it(); - |int| i = 7; - |int| j = 6; + var i: int = 7; + var j: int = 6; __if_comp__ __C__ simple_passthrough(i = i, j = j : j = j:) """ j = i + j; """ diff --git a/tests/test_chainedIndirectTemplates.krak b/tests/test_chainedIndirectTemplates.krak index a84ace0..ebe5e57 100644 --- a/tests/test_chainedIndirectTemplates.krak +++ b/tests/test_chainedIndirectTemplates.krak @@ -1,12 +1,12 @@ import vector:*; import io:*; -template |T| test(|vector| a) { +fun test(a: vector): T { return a.at(0); } -|int| main() { - |vector| a.construct(); +fun main(): int { + var a.construct(): vector; a.addEnd(2); println(test(a)); return 0; diff --git a/tests/test_commentFirstTest.krak b/tests/test_commentFirstTest.krak index 41d83f7..bbe6b4c 100644 --- a/tests/test_commentFirstTest.krak +++ b/tests/test_commentFirstTest.krak @@ -1,7 +1,7 @@ /* Comment first! */ import io:*; -|int| main() { +fun main(): int { println(1337) /*how bout now*/ println(42) //or now return 0; diff --git a/tests/test_declarationsTest.krak b/tests/test_declarationsTest.krak index 84e8ee3..e635560 100644 --- a/tests/test_declarationsTest.krak +++ b/tests/test_declarationsTest.krak @@ -2,24 +2,24 @@ import io:*; import mem:*; typedef ClassWithConstructor { - |int| data; - |ClassWithConstructor*| construct(|int| inData) { + var data: int; + fun construct(inData: int): ClassWithConstructor* { data = inData; return this; } - |void| printData() { + fun printData(): void { println(data); } }; -|int| main() { - |ClassWithConstructor| object.construct(4); +fun main(): int { + var object.construct(4): ClassWithConstructor; //ClassWithConstructor object; //object.construct(4); object.printData(); - |int| a = 8; + var a: int = 8; println(a); - |ClassWithConstructor*| objPtr = new()->construct(11); + var objPtr: ClassWithConstructor* = new()->construct(11); objPtr->printData(); delete(objPtr); return 0; diff --git a/tests/test_destructorTest.krak b/tests/test_destructorTest.krak index 65223f1..e303d9b 100644 --- a/tests/test_destructorTest.krak +++ b/tests/test_destructorTest.krak @@ -1,27 +1,27 @@ import io:*; typedef DestructorPrint { - |char*| myStr; - |DestructorPrint*| construct(|char*| str) { + var myStr: char*; + fun construct(str: char*): DestructorPrint* { myStr = str; return this; } - |void| destruct() { + fun destruct(): void { println(myStr); } }; typedef NoDistruction { - |int| a; - |void| dummyFunc() {} + var a: int; + fun dummyFunc(): void {} }; -|void| indirPrint() { - |DestructorPrint| testObj.construct("Hello Destructors!"); - |NoDistruction| dummy; +fun indirPrint(): void { + var testObj.construct("Hello Destructors!"): DestructorPrint; + var dummy: NoDistruction; } -|int| main() { +fun main(): int { indirPrint(); return 0; } diff --git a/tests/test_else.krak b/tests/test_else.krak index a9dd61e..e150e06 100644 --- a/tests/test_else.krak +++ b/tests/test_else.krak @@ -1,7 +1,7 @@ import io:*; -|int| main() { +fun main(): int { if (1>2) { println("Wrong"); } else { diff --git a/tests/test_emptyBracesFunction.krak b/tests/test_emptyBracesFunction.krak index 1413c75..be178b7 100644 --- a/tests/test_emptyBracesFunction.krak +++ b/tests/test_emptyBracesFunction.krak @@ -1,8 +1,8 @@ import io; -|void| nothing() {} +fun nothing(): void {} -|int| main() { +fun main(): int { nothing(); io::println("It was nothing"); return 0; diff --git a/tests/test_functionMultipleTemplateTest.krak b/tests/test_functionMultipleTemplateTest.krak index e6ff2dc..c496e49 100644 --- a/tests/test_functionMultipleTemplateTest.krak +++ b/tests/test_functionMultipleTemplateTest.krak @@ -1,10 +1,10 @@ import io:*; -template |void| addAndPrint(|T| a, |J| b) { +fun addAndPrint(a: T, b: J): void { print(a+b); } -|int| main() { +fun main(): int { addAndPrint(10,12.14159); print("\n"); diff --git a/tests/test_functionOrderingTest.krak b/tests/test_functionOrderingTest.krak index 9c89e95..8ac6732 100644 --- a/tests/test_functionOrderingTest.krak +++ b/tests/test_functionOrderingTest.krak @@ -1,17 +1,17 @@ import io:*; -|int| ret1() { +fun ret1(): int { return ret2() / 2; } -|int| main() { +fun main(): int { print(ret1()); print(ret2()); print("\n"); return 0; } -|int| ret2() { +fun ret2(): int { return 2; } diff --git a/tests/test_functionTemplateTest.krak b/tests/test_functionTemplateTest.krak index e104d20..af7bb2d 100644 --- a/tests/test_functionTemplateTest.krak +++ b/tests/test_functionTemplateTest.krak @@ -1,11 +1,11 @@ import io; -template |T| addAndPrint(|T| a, |T| b) { +fun addAndPrint(a: T, b: T): T { io::print(a+b); return a+b; } -|int| main() { +fun main(): int { addAndPrint(10,12); io::print("\n"); diff --git a/tests/test_memTest.krak b/tests/test_memTest.krak index b9a2c41..5a49ffe 100644 --- a/tests/test_memTest.krak +++ b/tests/test_memTest.krak @@ -2,11 +2,11 @@ import mem:*; import io:*; typedef AnObject { - |int| a; - |int| b; - |char*| c; + var a: int; + var b: int; + var c: char*; - |void| print() { + fun print(): void { print(a+b); print("\n"); print(c); @@ -15,8 +15,8 @@ typedef AnObject { }; -|int| main() { - |AnObject*| ptr = new(); +fun main(): int { + var ptr: AnObject* = new(); ptr->a = 4; ptr->b = 7; ptr->c = "Hello decent memory! Quite a nice feeling\n"; diff --git a/tests/test_moreComplexObjectTest.krak b/tests/test_moreComplexObjectTest.krak index 59fe0df..07999a3 100644 --- a/tests/test_moreComplexObjectTest.krak +++ b/tests/test_moreComplexObjectTest.krak @@ -1,25 +1,25 @@ import io:*; typedef firstObject { - |int| objectNum; - |int| other; - |void| print() { + var objectNum: int; + var other: int; + fun print(): void { print(other); } - |void| printInd() { + fun printInd(): void { print(); } }; typedef Int int; -|Int| aliasNum; +var aliasNum: Int; -|int| main() { - |firstObject| wooObject; +fun main(): int { + var wooObject: firstObject; wooObject.objectNum = 7; print(wooObject.objectNum); - |firstObject*| objPtr = &wooObject; + var objPtr: firstObject* = &wooObject; objPtr->objectNum = 42; print(objPtr->objectNum); print("\n"); diff --git a/tests/test_moreObjectTemplateTest.krak b/tests/test_moreObjectTemplateTest.krak index e4be5b2..f7a47f8 100644 --- a/tests/test_moreObjectTemplateTest.krak +++ b/tests/test_moreObjectTemplateTest.krak @@ -2,30 +2,30 @@ import io:*; import trivial_container:*; typedef RegularObject { - |int| num; - |trivialContainer| innerContainer; - |void| set(|char*| message, |int| number) { + var num: int; + var innerContainer: trivialContainer; + fun set(message: char*, number: int): void { innerContainer.data = message; num = number; } - |char*| get() { + fun get(): char* { return innerContainer.data; } - |void| print() { + fun print(): void { print(num); innerContainer.print(); } }; typedef MyIntContainer trivialContainer; -|MyIntContainer| roundabout; -|RegularObject| outsideDec; +var roundabout: MyIntContainer; +var outsideDec: RegularObject; -|void| print(|trivialContainer| toPrint) { +fun print(toPrint: trivialContainer): void { print(toPrint.data); } -|int| main() { +fun main(): int { roundabout.data = 4; outsideDec.set("Hello!", 5); roundabout.print(); diff --git a/tests/test_nequals.krak b/tests/test_nequals.krak index 98eb56f..9a5b103 100644 --- a/tests/test_nequals.krak +++ b/tests/test_nequals.krak @@ -1,7 +1,7 @@ import io:*; -|int| main() { +fun main(): int { if (1 != 2) println("Correct"); } diff --git a/tests/test_newScoping.krak b/tests/test_newScoping.krak index 9a081af..d1100a5 100644 --- a/tests/test_newScoping.krak +++ b/tests/test_newScoping.krak @@ -2,16 +2,16 @@ import io; import scopeQualified; import scopeUnqualified : * ; -|int| main() { +fun main(): int { io::println("Qualified io!"); // Defined in scopeQualified io::println(scopeQualified::qualified_variable); io::println(scopeQualified::qualified_func()); - |scopeQualified::qualified_class| qClass.construct(11); + var qClass.construct(11): scopeQualified::qualified_class; io::println(qClass.get()); - |scopeQualified::qualified_container| sayQualified.construct("Qualified Container!"); + var sayQualified.construct("Qualified Container!"): scopeQualified::qualified_container; io::println(sayQualified.get()); io::println(scopeQualified::qualified_id("Even template functions qualified!")); @@ -21,10 +21,10 @@ import scopeUnqualified : * ; // Defined in scopeUnqualified io::println(unqualifed_variable); io::println(unqualified_func()); - |unqualified_class| uqClass.construct(12); + var uqClass.construct(12): unqualified_class; io::println(uqClass.get()); - |unqualified_container| sayUnqualified.construct("Unqualified Container!"); + var sayUnqualified.construct("Unqualified Container!"): unqualified_container; io::println(sayUnqualified.get()); io::println(unqualified_id("Even template functions unqualified!")); diff --git a/tests/test_nosemicolon.krak b/tests/test_nosemicolon.krak index 5ca5de9..7953bf9 100644 --- a/tests/test_nosemicolon.krak +++ b/tests/test_nosemicolon.krak @@ -1,6 +1,6 @@ import io:* -|int| main() { +fun main(): int { println("no semicolons!") if (1 < 2) println("still no!") println("and again") diff --git a/tests/test_objectOrderingTest.krak b/tests/test_objectOrderingTest.krak index 7fb978f..bc2d74b 100644 --- a/tests/test_objectOrderingTest.krak +++ b/tests/test_objectOrderingTest.krak @@ -1,24 +1,24 @@ import io:*; typedef objectA { - |int| a; + var a: int; }; typedef BigObject { - |objectA| a; - |objectB| b; - |int| add() { + var a: objectA; + var b: objectB; + fun add(): int { return a.a + b.b; } }; typedef objectB { - |int| b; + var b: int; }; -|int| main() { - |BigObject| c; +fun main(): int { + var c: BigObject; c.a.a = 4; c.b.b = 8; print(c.add()); diff --git a/tests/test_sameName.krak b/tests/test_sameName.krak index a75470e..c5b9ed1 100644 --- a/tests/test_sameName.krak +++ b/tests/test_sameName.krak @@ -2,23 +2,23 @@ import io:* import sameNameOne import sameNameTwo -|int| sameVar; -|int| sameFun() { return 4; } +var sameVar: int; +fun sameFun(): int { return 4; } typedef classTester { - |int| method() { + fun method(): int { return 7 } } -|int| main() { +fun main(): int { sameVar = 1 sameNameOne::sameVar = 2 sameNameTwo::sameVar = 3 - |classTester| class1; - |sameNameOne::classTester| class2; - |sameNameTwo::classTester| class3; + var class1: classTester; + var class2: sameNameOne::classTester; + var class3: sameNameTwo::classTester; println(sameVar) println(sameNameOne::sameVar) diff --git a/tests/test_simpleFunctionTest.krak b/tests/test_simpleFunctionTest.krak index 146e497..ff6c6b9 100644 --- a/tests/test_simpleFunctionTest.krak +++ b/tests/test_simpleFunctionTest.krak @@ -1,11 +1,11 @@ import io:*; -|int| addAndPrintInt(|int| a, |int| b) { +fun addAndPrintInt(a: int, b: int): int { print(a+b); return a+b; } -|int| main() { +fun main(): int { print(addAndPrintInt(7,12)); print("\n"); diff --git a/tests/test_simpleObjectMultipleTemplateTest.krak b/tests/test_simpleObjectMultipleTemplateTest.krak index c67136f..3d55db3 100644 --- a/tests/test_simpleObjectMultipleTemplateTest.krak +++ b/tests/test_simpleObjectMultipleTemplateTest.krak @@ -1,10 +1,10 @@ import io; -typedef template TemplateTest { - |T| a; - |J| b; - |void| print() { +typedef TemplateTest { + var a: T; + var b: J; + fun print(): void { io::print("a: "); io::print(a); io::print("\n"); @@ -14,10 +14,10 @@ typedef template TemplateTest { } }; -|int| main() { +fun main(): int { - |TemplateTest| test; - |TemplateTest| test2; + var test: TemplateTest; + var test2: TemplateTest; test.a = 24; test.b = "Hello World"; test2.a = "Pi incoming"; diff --git a/tests/test_simpleObjectTemplateTest.krak b/tests/test_simpleObjectTemplateTest.krak index 396e6ff..b84f9b0 100644 --- a/tests/test_simpleObjectTemplateTest.krak +++ b/tests/test_simpleObjectTemplateTest.krak @@ -1,10 +1,10 @@ import io; -typedef template TemplateTest { - |int| a; - |T| b; - |void| print() { +typedef TemplateTest { + var a: int; + var b: T; + fun print(): void { io::print("a: "); io::print(a); io::print("\n"); @@ -14,10 +14,10 @@ typedef template TemplateTest { } }; -|int| main() { +fun main(): int { - |TemplateTest| test; - |TemplateTest| test2; + var test: TemplateTest; + var test2: TemplateTest; test.a = 5; test.b = 7; test2.a = 9; diff --git a/tests/test_simpleObjectTest.krak b/tests/test_simpleObjectTest.krak index a06ed8a..e44f061 100644 --- a/tests/test_simpleObjectTest.krak +++ b/tests/test_simpleObjectTest.krak @@ -1,15 +1,15 @@ import io; typedef FirstObject { - |int| objectNum; - |void| PrintSelf(|int| a) { + var objectNum: int; + fun PrintSelf(a: int): void { io::print(objectNum); io::print(a); } }; -|int| main() { - |FirstObject| wooObject; +fun main(): int { + var wooObject: FirstObject; wooObject.objectNum = 5; wooObject.PrintSelf(7); io::print("\n"); diff --git a/tests/test_string.krak b/tests/test_string.krak index 01b69db..6988fd6 100644 --- a/tests/test_string.krak +++ b/tests/test_string.krak @@ -2,8 +2,8 @@ import io; import string; -|int| main() { - |string::string| str.construct("hello strings"); +fun main(): int { + var str.construct("hello strings"): string::string; io::println(str); return 0; } diff --git a/tests/test_templateTest.krak b/tests/test_templateTest.krak index 91b4fef..24c3d97 100644 --- a/tests/test_templateTest.krak +++ b/tests/test_templateTest.krak @@ -1,11 +1,11 @@ import io:*; import trivial_container:*; -typedef template TemplateTest { - |int| a; - |T| b; - |trivialContainer| c; - |void| print() { +typedef TemplateTest { + var a: int; + var b: T; + var c: trivialContainer; + fun print(): void { print("a: "); print(a); print("\n"); @@ -19,17 +19,17 @@ typedef template TemplateTest { typedef MyInt int; -|MyInt| c; +var c: MyInt; -template |T| addAndPrint(|T| a, |T| b) { +fun addAndPrint(a: T, b: T): T { print(a+b); return a+b; } -|int| main() { - |TemplateTest| test; - |TemplateTest| test2; +fun main(): int { + var test: TemplateTest; + var test2: TemplateTest; test.a = 5; test.b = 7; test.c.data = 1337; @@ -40,7 +40,7 @@ template |T| addAndPrint(|T| a, |T| b) { test.print(); test2.print(); - |trivialContainer| testImport; + var testImport: trivialContainer; testImport.data = "From another file! Whoh!"; testImport.print(); print("\n"); diff --git a/tests/test_testArrayNotation.krak b/tests/test_testArrayNotation.krak index 02402f3..9e3f6ac 100644 --- a/tests/test_testArrayNotation.krak +++ b/tests/test_testArrayNotation.krak @@ -1,9 +1,9 @@ import io:*; import mem:*; -|int| main() { - |int| b; - |int*| a = &b; +fun main(): int { + var b: int; + var a: int* = &b; a [ 0 ] = 7; print(a [ 0 ] ); print(*a); diff --git a/tests/test_topLevelVarInit.krak b/tests/test_topLevelVarInit.krak index 9f8aa92..9a0eeb8 100644 --- a/tests/test_topLevelVarInit.krak +++ b/tests/test_topLevelVarInit.krak @@ -1,8 +1,8 @@ import io; -|int| a = 42; +var a: int = 42; -|int| main() { +fun main(): int { io::println(a); return 0; } diff --git a/tests/test_traitsTest.krak b/tests/test_traitsTest.krak index b9b55b0..d586ff8 100644 --- a/tests/test_traitsTest.krak +++ b/tests/test_traitsTest.krak @@ -7,19 +7,19 @@ typedef Trait2 (SecondTrait) {}; typedef TwoTrait (FirstTrait, SecondTrait) {}; typedef AlreadySpecilized (FirstTrait, SecondTrait) {}; -template |void| OneTwoFunc(|T| obj) { +fun OneTwoFunc(obj: T): void { println("No Traits"); } -template |void| OneTwoFunc(|T| obj) { +fun OneTwoFunc(obj: T): void { println("First Trait"); } -template |void| OneTwoFunc(|T| obj) { +fun OneTwoFunc(obj: T): void { println("Second Trait"); } -template |void| OneTwoFunc(|T| obj) { +fun OneTwoFunc(obj: T): void { println("Both Traits"); } /* @@ -30,10 +30,10 @@ template |void| OneTwoFunc(|AlreadySpecilized| obj) { //This should work for objects too! //To test, we cycle the mapping of traits -typedef template OneTwoObj (FirstTrait) {}; -typedef template OneTwoObj (SecondTrait) {}; -typedef template OneTwoObj (FirstTrait, SecondTrait) {}; -typedef template OneTwoObj {}; +typedef OneTwoObj (FirstTrait) {}; +typedef OneTwoObj (SecondTrait) {}; +typedef OneTwoObj (FirstTrait, SecondTrait) {}; +typedef OneTwoObj {}; /* *typedef template OneTwoObj { * void proveSpecilized() { @@ -42,12 +42,12 @@ typedef template OneTwoObj {}; *}; */ -|int| main() { - |NoTraits| a; - |Trait1| b; - |Trait2| c; - |TwoTrait| d; - |AlreadySpecilized| e; +fun main(): int { + var a: NoTraits; + var b: Trait1; + var c: Trait2; + var d: TwoTrait; + var e: AlreadySpecilized; OneTwoFunc(a); OneTwoFunc(b); @@ -57,10 +57,10 @@ typedef template OneTwoObj {}; println(); - |OneTwoObj| alpha; - |OneTwoObj| beta; - |OneTwoObj| gamma; - |OneTwoObj| delta; + var alpha: OneTwoObj; + var beta: OneTwoObj; + var gamma: OneTwoObj; + var delta: OneTwoObj; // |OneTwoObj| epsilon; OneTwoFunc>(alpha); diff --git a/tests/test_trigTest.krak b/tests/test_trigTest.krak index 51811c8..b66fbdc 100644 --- a/tests/test_trigTest.krak +++ b/tests/test_trigTest.krak @@ -1,10 +1,10 @@ import io:*; import math:*; -|int| main() +fun main(): int { - |double| ans; - |double| STD_PI = 4.0*atan(1.0); + var ans: double; + var STD_PI: double = 4.0*atan(1.0); println(STD_PI); /* diff --git a/tests/test_typeExpr.krak b/tests/test_typeExpr.krak index 4b2db33..fce2d2d 100644 --- a/tests/test_typeExpr.krak +++ b/tests/test_typeExpr.krak @@ -1,20 +1,20 @@ import io; typedef ClassWithConstructor { - |int| data; - |ClassWithConstructor*| construct(|int| inData) { + var data: int; + fun construct(inData: int): ClassWithConstructor* { data = inData; return this; } - |void| printData() { + fun printData(): void { io::println(data); } }; -|int| main() { - |ClassWithConstructor| object.construct(4); +fun main(): int { + var object.construct(4): ClassWithConstructor; object.printData(); - |int| a = 8; + var a :int = 8; io::println(a); return 0; } diff --git a/tests/test_vectorTest.krak b/tests/test_vectorTest.krak index 3c25ee3..30fe3a4 100644 --- a/tests/test_vectorTest.krak +++ b/tests/test_vectorTest.krak @@ -3,25 +3,25 @@ import mem:*; import vector:*; typedef AbleToBeDestroyed (Destructable) { - |void| destruct() { + fun destruct(): void { println("Destroyed!"); } }; -|int| main() { - |vector| intVec.construct(); +fun main(): int { + var intVec.construct(): vector; intVec.addEnd(1); intVec.addEnd(3); intVec.addEnd(3); intVec.addEnd(7); println(intVec.size); - for (|int| i = 0; i < intVec.size; i++;) + for (var i: int = 0; i < intVec.size; i++;) print(intVec.at(i)); println(); - |vector*| desVec = new>()->construct(); - |AbleToBeDestroyed| testDestruct; + var desVec: vector* = new>()->construct(); + var testDestruct: AbleToBeDestroyed; desVec->addEnd(testDestruct); delete>(desVec);