diff --git a/krakenGrammer.kgm b/krakenGrammer.kgm index 799c1ab..a9af015 100644 --- a/krakenGrammer.kgm +++ b/krakenGrammer.kgm @@ -3,6 +3,7 @@ translation_unit = interpreter_directive WS unorderd_list_part WS ; unorderd_list_part = import WS unorderd_list_part | function WS unorderd_list_part | type_def WS ";" WS unorderd_list_part | if_comp WS unorderd_list_part | simple_passthrough WS unorderd_list_part | declaration_statement WS ";" WS unorderd_list_part | import | function | type_def WS ";" | if_comp | simple_passthrough | declaration_statement WS ";" ; type = type WS "\*" | "void" | "int" | "float" | "double" | "char" | identifier | identifier WS template_inst ; +dec_type = "\|" WS type WS "\|" ; template_inst = "<" WS type_list WS ">" ; type_list = type_list WS "," WS type | type ; @@ -41,11 +42,11 @@ identifier = alpha | alpha alphanumeric ; right_shift = ">" ">" ; overloadable_operator = "\+" | "-" | "\*" | "/" | "%" | "^" | "&" | "\|" | "~" | "!" | "," | "=" | "\+\+" | "--" | "<<" | right_shift | "==" | "!=" | "&&" | "\|\|" | "\+=" | "-=" | "/=" | "%=" | "^=" | "&=" | "\|=" | "\*=" | "<<=" | ">>=" | "->" ; func_identifier = identifier | identifier overloadable_operator ; -function = template_dec WS type WS func_identifier WS "\(" WS opt_typed_parameter_list WS "\)" WS code_block | type WS func_identifier WS "\(" WS opt_typed_parameter_list WS "\)" WS code_block ; +function = template_dec WS dec_type WS func_identifier WS "\(" WS opt_typed_parameter_list WS "\)" WS code_block | dec_type WS func_identifier WS "\(" WS opt_typed_parameter_list WS "\)" WS code_block ; opt_typed_parameter_list = typed_parameter_list | ; typed_parameter_list = typed_parameter_list WS "," WS typed_parameter | typed_parameter ; -typed_parameter = type WS identifier ; +typed_parameter = dec_type WS identifier ; opt_parameter_list = parameter_list | ; parameter_list = parameter_list WS "," WS parameter | parameter ; @@ -91,7 +92,7 @@ number = integer | floating_literal ; access_operation = unarad "." identifier | unarad "->" identifier ; assignment_statement = factor WS "=" WS boolean_expression | factor WS "\+=" WS boolean_expression | factor WS "-=" WS boolean_expression | factor WS "\*=" WS boolean_expression | factor WS "/=" WS boolean_expression ; -declaration_statement = type WS identifier WS "=" WS boolean_expression | type WS identifier | type WS identifier WS "." WS identifier WS "\(" WS opt_parameter_list WS "\)" ; +declaration_statement = dec_type WS identifier WS "=" WS boolean_expression | dec_type WS identifier | dec_type WS identifier WS "." WS identifier WS "\(" WS opt_parameter_list WS "\)" ; alphanumeric = alphanumeric numeric | alphanumeric alpha | numeric | alpha ; hexadecimal = "0x(1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)+" ; diff --git a/src/Importer.cpp b/src/Importer.cpp index b5758f6..7d6ac37 100644 --- a/src/Importer.cpp +++ b/src/Importer.cpp @@ -24,6 +24,7 @@ Importer::Importer(Parser* parserIn, std::vector includePaths) { removeSymbols.push_back(Symbol("comp_simple_passthrough", true)); removeSymbols.push_back(Symbol("typedef", true)); removeSymbols.push_back(Symbol("template", true)); + removeSymbols.push_back(Symbol("\\|", true)); collapseSymbols.push_back(Symbol("opt_typed_parameter_list", false)); collapseSymbols.push_back(Symbol("opt_parameter_list", false)); @@ -38,6 +39,7 @@ Importer::Importer(Parser* parserIn, std::vector includePaths) { collapseSymbols.push_back(Symbol("type_list", false)); collapseSymbols.push_back(Symbol("template_param_list", false)); collapseSymbols.push_back(Symbol("trait_list", false)); + collapseSymbols.push_back(Symbol("dec_type", false)); } Importer::~Importer() { diff --git a/stdlib/io.krak b/stdlib/io.krak index 60b9118..552ec4d 100644 --- a/stdlib/io.krak +++ b/stdlib/io.krak @@ -2,11 +2,11 @@ __if_comp__ __C__ __simple_passthrough__ """ #include """ -void println() { +|void| println() { print("\n"); } -void print(char* toPrint) { +|void| print(|char*| toPrint) { __if_comp__ __C__ { __simple_passthrough__ """ printf(toPrint); @@ -15,12 +15,12 @@ void print(char* toPrint) { return; } -void println(char* toPrint) { +|void| println(|char*| toPrint) { print(toPrint); println(); } -void print(int toPrint) { +|void| print(|int| toPrint) { __if_comp__ __C__ { __simple_passthrough__ """ printf("%d", toPrint); @@ -29,12 +29,12 @@ void print(int toPrint) { return; } -void println(int toPrint) { +|void| println(|int| toPrint) { print(toPrint); println(); } -void print(float toPrint) { +|void| print(|float| toPrint) { __if_comp__ __C__ { __simple_passthrough__ """ printf("%f", toPrint); @@ -43,7 +43,7 @@ void print(float toPrint) { return; } -void print(double toPrint) { +|void| print(|double| toPrint) { __if_comp__ __C__ { __simple_passthrough__ """ printf("%f", toPrint); @@ -52,7 +52,7 @@ void print(double toPrint) { return; } -void println(float toPrint) { +|void| println(|float| toPrint) { print(toPrint); println(); } diff --git a/stdlib/math.krak b/stdlib/math.krak index 5b245ab..0652e47 100644 --- a/stdlib/math.krak +++ b/stdlib/math.krak @@ -1,9 +1,9 @@ -int NotPi = 3; -float Pi = 3.141592654; +|int| NotPi = 3; +|float| Pi = 3.141592654; -int fibanacci(int num) { +|int| fibanacci(|int| num) { if (num < 2) return 1; return fibanacci(num-1) + fibanacci(num-2); -} \ No newline at end of file +} diff --git a/stdlib/mem.krak b/stdlib/mem.krak index b011463..406592a 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 = 0; +template |T*| malloc(|int| size) { + |T*| memPtr = 0; __if_comp__ __C__ { __simple_passthrough__ """ memPtr = malloc(size); @@ -14,7 +14,7 @@ template T* malloc(int size) { return memPtr; } -template void free(T* memPtr) { +template |void| free(|T*| memPtr) { __if_comp__ __C__ { __simple_passthrough__ """ free(memPtr); @@ -22,9 +22,9 @@ template void free(T* memPtr) { } } -template int sizeof() { - int result = 0; - T testObj; +template |int| sizeof() { + |int| result = 0; + |T| testObj; __if_comp__ __C__ { __simple_passthrough__ """ result = sizeof(testObj); @@ -33,32 +33,32 @@ template int sizeof() { return result; } -template T* new(int count) { +template |T*| new(|int| count) { return malloc( sizeof() * count ); } -template T* new() { +template |T*| new() { 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) { +template |void| delete(|T*| toDelete, |int| itemCount) { 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++;) +template |void| delete(|T*| toDelete, |int| itemCount) { + for (|int| i = 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) { +template |void| delete(|T*| toDelete) { free(toDelete); } -template void delete(T* toDelete) { +template |void| delete(|T*| toDelete) { toDelete->destruct(); free(toDelete); } diff --git a/stdlib/trivial_container.krak b/stdlib/trivial_container.krak index 341c4d2..80bebeb 100644 --- a/stdlib/trivial_container.krak +++ b/stdlib/trivial_container.krak @@ -1,8 +1,8 @@ import io; typedef template trivialContainer { - T data; - void print() { + |T| data; + |void| print() { print(data); } }; diff --git a/stdlib/util.krak b/stdlib/util.krak index 02416d6..70e605c 100644 --- a/stdlib/util.krak +++ b/stdlib/util.krak @@ -1,11 +1,11 @@ -template T greater(T a, T b) { +template |T| greater(|T| a, |T| b) { if (a > b) return a; return b; } -template T lesser(T a, T b) { +template |T| lesser(|T| a, |T| b) { if (a > b) return b; return a; diff --git a/stdlib/vector.krak b/stdlib/vector.krak index ab320c2..0cf12df 100644 --- a/stdlib/vector.krak +++ b/stdlib/vector.krak @@ -3,36 +3,36 @@ import util; import io; typedef template vector (Destructable) { - T *data; - int size; - int available; + |T*| data; + |int| size; + |int| available; - vector* construct() { + |vector*| construct() { size = 0; available = 8; data = new(8); return this; } - void destruct() { + |void| destruct() { delete(data); } - bool resize(int newSize) { - T* newData = new(newSize); + |bool| resize(|int| newSize) { + |T*| newData = new(newSize); if (!newData) return false; - for (int i = 0; i < lesser(size, newSize); i++;) + for (|int| i = 0; i < lesser(size, newSize); i++;) newData[i] = data[i]; delete(data, 0); return true; } - T at(int index) { + |T| at(|int| index) { return get(index); } - T get(int index) { + |T| get(|int| index) { if (index < 0 || index >= size) { println("Vector access out of bounds! Retuning 0th element as sanest option"); return data[0]; @@ -40,12 +40,12 @@ typedef template vector (Destructable) { return data[index]; } - void set(int index, T dataIn) { + |void| set(|int| index, |T| dataIn) { if (index < 0 || index >= size) return; data[index] = dataIn; } - void addEnd(T dataIn) { + |void| addEnd(|T| dataIn) { if (size < available) size++; else diff --git a/tests/OperatorOverloadTest.krak b/tests/OperatorOverloadTest.krak index 2362187..bcc1d78 100644 --- a/tests/OperatorOverloadTest.krak +++ b/tests/OperatorOverloadTest.krak @@ -1,64 +1,64 @@ import io; typedef Vec2 { - int x; - int y; + |int| x; + |int| y; - void print() { + |void| print() { print(x); print(" "); print(y); } - Vec2 add(Vec2 other) { - Vec2 toReturn; + |Vec2| add(|Vec2| other) { + |Vec2| toReturn; toReturn.x = x + other.x; toReturn.y = y + other.y; print(); return toReturn; } - Vec2 subtract(Vec2 other) { - Vec2 toReturn; + |Vec2| subtract(|Vec2| other) { + |Vec2| toReturn; toReturn.x = x - other.x; toReturn.y = y - other.y; print(); return toReturn; } - Vec2 operator+(Vec2 other) { + |Vec2| operator+(|Vec2| other) { return add(other); } }; -Vec2 operator-(Vec2 lhs, Vec2 rhs) { +|Vec2| operator-(|Vec2| lhs, |Vec2| rhs) { return lhs.subtract(rhs); } -int main() { - Vec2 vector1; - Vec2 vector2; +|int| main() { + |Vec2| vector1; + |Vec2| vector2; vector1.x = 3; vector1.y = 9; vector2 = vector1; /* NOTE COMMENT - Vec2 vector3; + |Vec2| vector3; vector3.x = vector1.x + vector2.x; vector3.y = vector1.y + vector2.y; vector2.print(); */ - Vec2 addition = vector1 + vector2; + |Vec2| addition = vector1 + vector2; print("\n"); addition.print(); print("\nSubtraction\n"); vector2.x = 100; vector2.y = 70; - Vec2 subtraction = vector1 - vector2; + |Vec2| subtraction = vector1 - vector2; print("\n"); print(subtraction.x); print(" "); print(subtraction.y); print("\n"); - + return 0; } diff --git a/tests/RecursiveTest.krak b/tests/RecursiveTest.krak index 4e61ccc..03c8b9f 100644 --- a/tests/RecursiveTest.krak +++ b/tests/RecursiveTest.krak @@ -1,12 +1,12 @@ import io; -int fibanacci(int num) { +|int| fibanacci(|int| num) { if (num < 2) return 1; return fibanacci(num-1) + fibanacci(num-2); } -int main() { +|int| main() { print(fibanacci(4)); print("\n"); return 0; diff --git a/tests/commentFirstTest.krak b/tests/commentFirstTest.krak index 4464897..0cd8f27 100644 --- a/tests/commentFirstTest.krak +++ b/tests/commentFirstTest.krak @@ -1,7 +1,7 @@ /* Comment first! */ import io; -int main() { +|int| main() { println(1337); return 0; } diff --git a/tests/declarationsTest.krak b/tests/declarationsTest.krak index 9bfe547..4e29cc4 100644 --- a/tests/declarationsTest.krak +++ b/tests/declarationsTest.krak @@ -2,24 +2,24 @@ import io; import mem; typedef ClassWithConstructor { - int data; - ClassWithConstructor* construct(int inData) { + |int| data; + |ClassWithConstructor*| construct(|int| inData) { data = inData; return this; } - void printData() { + |void| printData() { println(data); } }; -int main() { - ClassWithConstructor object.construct(4); +|int| main() { + |ClassWithConstructor| object.construct(4); //ClassWithConstructor object; //object.construct(4); object.printData(); - int a = 8; + |int| a = 8; println(a); - ClassWithConstructor* objPtr = new()->construct(11); + |ClassWithConstructor*| objPtr = new()->construct(11); objPtr->printData(); delete(objPtr); return 0; diff --git a/tests/destructorTest.krak b/tests/destructorTest.krak index 21a2619..a63276f 100644 --- a/tests/destructorTest.krak +++ b/tests/destructorTest.krak @@ -1,27 +1,27 @@ import io; typedef DestructorPrint { - char* myStr; - DestructorPrint* construct(char* str) { + |char*| myStr; + |DestructorPrint*| construct(|char*| str) { myStr = str; return this; } - void destruct() { + |void| destruct() { println(myStr); } }; typedef NoDistruction { - int a; - void dummyFunc() {} + |int| a; + |void| dummyFunc() {} }; -void indirPrint() { - DestructorPrint testObj.construct("Hello Destructors!"); - NoDistruction dummy; +|void| indirPrint() { + |DestructorPrint| testObj.construct("Hello Destructors!"); + |NoDistruction| dummy; } -int main() { +|int| main() { indirPrint(); return 0; } diff --git a/tests/emptyBracesFunction.krak b/tests/emptyBracesFunction.krak index 0fbe029..d02cbd7 100644 --- a/tests/emptyBracesFunction.krak +++ b/tests/emptyBracesFunction.krak @@ -1,8 +1,8 @@ import io; -void nothing() {} +|void| nothing() {} -int main() { +|int| main() { nothing(); println("It was nothing"); return 0; diff --git a/tests/functionMultipleTemplateTest.krak b/tests/functionMultipleTemplateTest.krak index e6d11ce..a30f9d5 100644 --- a/tests/functionMultipleTemplateTest.krak +++ b/tests/functionMultipleTemplateTest.krak @@ -1,10 +1,10 @@ import io; -template void addAndPrint(T a, J b) { +template |void| addAndPrint(|T| a, |J| b) { print(a+b); } -int main() { +|int| main() { addAndPrint(10,12.14159); print("\n"); diff --git a/tests/functionOrderingTest.krak b/tests/functionOrderingTest.krak index 8075128..c26f5a9 100644 --- a/tests/functionOrderingTest.krak +++ b/tests/functionOrderingTest.krak @@ -1,17 +1,17 @@ import io; -int ret1() { +|int| ret1() { return ret2() / 2; } -int main() { +|int| main() { print(ret1()); print(ret2()); print("\n"); return 0; } -int ret2() { +|int| ret2() { return 2; } diff --git a/tests/functionTemplateTest.krak b/tests/functionTemplateTest.krak index 16fabea..e6b2597 100644 --- a/tests/functionTemplateTest.krak +++ b/tests/functionTemplateTest.krak @@ -1,12 +1,11 @@ import io; -template T addAndPrint(T a, T b) { +template |T| addAndPrint(|T| a, |T| b) { print(a+b); return a+b; } -int main() { - +|int| main() { addAndPrint(10,12); print("\n"); diff --git a/tests/memTest.krak b/tests/memTest.krak index 44acd40..6ddbac9 100644 --- a/tests/memTest.krak +++ b/tests/memTest.krak @@ -2,11 +2,11 @@ import mem; import io; typedef AnObject { - int a; - int b; - char* c; + |int| a; + |int| b; + |char*| c; - void print() { + |void| print() { print(a+b); print("\n"); print(c); @@ -15,8 +15,8 @@ typedef AnObject { }; -int main() { - AnObject* ptr = new(); +|int| main() { + |AnObject*| ptr = new(); ptr->a = 4; ptr->b = 7; ptr->c = "Hello decent memory! Quite a nice feeling\n"; @@ -24,4 +24,4 @@ int main() { delete(ptr); return 0; -} \ No newline at end of file +} diff --git a/tests/moreComplexObjectTest.krak b/tests/moreComplexObjectTest.krak index 8da7762..2c06e6b 100644 --- a/tests/moreComplexObjectTest.krak +++ b/tests/moreComplexObjectTest.krak @@ -1,25 +1,25 @@ import io; typedef firstObject { - int objectNum; - int other; - void print() { + |int| objectNum; + |int| other; + |void| print() { print(other); } - void printInd() { + |void| printInd() { print(); } }; typedef Int int; -Int aliasNum; +|Int| aliasNum; -int main() { - firstObject wooObject; +|int| main() { + |firstObject| wooObject; wooObject.objectNum = 7; print(wooObject.objectNum); - firstObject* objPtr = &wooObject; + |firstObject*| objPtr = &wooObject; objPtr->objectNum = 42; print(objPtr->objectNum); print("\n"); diff --git a/tests/moreObjectTemplateTest.krak b/tests/moreObjectTemplateTest.krak index 1a08428..6c7ae78 100644 --- a/tests/moreObjectTemplateTest.krak +++ b/tests/moreObjectTemplateTest.krak @@ -2,30 +2,30 @@ import io; import trivial_container; typedef RegularObject { - int num; - trivialContainer innerContainer; - void set(char* message, int number) { + |int| num; + |trivialContainer| innerContainer; + |void| set(|char*| message, |int| number) { innerContainer.data = message; num = number; } - char* get() { + |char*| get() { return innerContainer.data; } - void print() { + |void| print() { print(num); innerContainer.print(); } }; typedef MyIntContainer trivialContainer; -MyIntContainer roundabout; -RegularObject outsideDec; +|MyIntContainer| roundabout; +|RegularObject| outsideDec; -void print(trivialContainer toPrint) { +|void| print(|trivialContainer| toPrint) { print(toPrint.data); } -int main() { +|int| main() { roundabout.data = 4; outsideDec.set("Hello!", 5); roundabout.print(); diff --git a/tests/objectOrderingTest.krak b/tests/objectOrderingTest.krak index 80a96cb..4812bb8 100644 --- a/tests/objectOrderingTest.krak +++ b/tests/objectOrderingTest.krak @@ -1,24 +1,24 @@ import io; typedef objectA { - int a; + |int| a; }; typedef BigObject { - objectA a; - objectB b; - int add() { + |objectA| a; + |objectB| b; + |int| add() { return a.a + b.b; } }; typedef objectB { - int b; + |int| b; }; -int main() { - BigObject c; +|int| main() { + |BigObject| c; c.a.a = 4; c.b.b = 8; print(c.add()); diff --git a/tests/simpleFunctionTest.krak b/tests/simpleFunctionTest.krak index c78e629..2e45927 100644 --- a/tests/simpleFunctionTest.krak +++ b/tests/simpleFunctionTest.krak @@ -1,14 +1,14 @@ import io; -int addAndPrintInt(int a, int b) { +|int| addAndPrintInt(|int| a, |int| b) { print(a+b); return a+b; } -int main() { +|int| main() { print(addAndPrintInt(7,12)); print("\n"); return 0; -} \ No newline at end of file +} diff --git a/tests/simpleObjectMultipleTemplateTest.krak b/tests/simpleObjectMultipleTemplateTest.krak index cb8b831..f3615e4 100644 --- a/tests/simpleObjectMultipleTemplateTest.krak +++ b/tests/simpleObjectMultipleTemplateTest.krak @@ -2,9 +2,9 @@ import io; typedef template TemplateTest { - T a; - J b; - void print() { + |T| a; + |J| b; + |void| print() { print("a: "); print(a); print("\n"); @@ -14,10 +14,10 @@ typedef template TemplateTest { } }; -int main() { +|int| main() { - TemplateTest test; - TemplateTest test2; + |TemplateTest| test; + |TemplateTest| test2; test.a = 24; test.b = "Hello World"; test2.a = "Pi incoming"; diff --git a/tests/simpleObjectTemplateTest.krak b/tests/simpleObjectTemplateTest.krak index 9f16211..7aeebc2 100644 --- a/tests/simpleObjectTemplateTest.krak +++ b/tests/simpleObjectTemplateTest.krak @@ -2,9 +2,9 @@ import io; typedef template TemplateTest { - int a; - T b; - void print() { + |int| a; + |T| b; + |void| print() { print("a: "); print(a); print("\n"); @@ -14,10 +14,10 @@ typedef template TemplateTest { } }; -int main() { +|int| main() { - TemplateTest test; - TemplateTest test2; + |TemplateTest| test; + |TemplateTest| test2; test.a = 5; test.b = 7; test2.a = 9; diff --git a/tests/simpleObjectTest.krak b/tests/simpleObjectTest.krak index 9a96ac5..3e8f14f 100644 --- a/tests/simpleObjectTest.krak +++ b/tests/simpleObjectTest.krak @@ -2,15 +2,15 @@ import io; typedef FirstObject { - int objectNum; - void PrintSelf(int a) { + |int| objectNum; + |void| PrintSelf(|int| a) { print(objectNum); print(a); } }; -int main() { - FirstObject wooObject; +|int| main() { + |FirstObject| wooObject; wooObject.objectNum = 5; wooObject.PrintSelf(7); print("\n"); diff --git a/tests/templateTest.krak b/tests/templateTest.krak index a755ce2..8843126 100644 --- a/tests/templateTest.krak +++ b/tests/templateTest.krak @@ -2,10 +2,10 @@ import io; import trivial_container; typedef template TemplateTest { - int a; - T b; - trivialContainer c; - void print() { + |int| a; + |T| b; + |trivialContainer| c; + |void| print() { print("a: "); print(a); print("\n"); @@ -19,17 +19,17 @@ typedef template TemplateTest { typedef MyInt int; -MyInt c; +|MyInt| c; -template T addAndPrint(T a, T b) { +template |T| addAndPrint(|T| a, |T| b) { print(a+b); return a+b; } -int main() { - TemplateTest test; - TemplateTest test2; +|int| main() { + |TemplateTest| test; + |TemplateTest| test2; test.a = 5; test.b = 7; test.c.data = 1337; @@ -40,7 +40,7 @@ int main() { test.print(); test2.print(); - trivialContainer testImport; + |trivialContainer| testImport; testImport.data = "From another file! Whoh!"; testImport.print(); print("\n"); @@ -49,4 +49,4 @@ int main() { print("\n"); return 0; -} \ No newline at end of file +} diff --git a/tests/testArrayNotation.krak b/tests/testArrayNotation.krak index 9d4a0d9..9b04b25 100644 --- a/tests/testArrayNotation.krak +++ b/tests/testArrayNotation.krak @@ -1,9 +1,9 @@ import io; import mem; -int main() { - int b; - int* a = &b; +|int| main() { + |int| b; + |int*| a = &b; a [ 0 ] = 7; print(a [ 0 ] ); print(*a); diff --git a/tests/traitsTest.krak b/tests/traitsTest.krak index 70e1ce9..566e5ed 100644 --- a/tests/traitsTest.krak +++ b/tests/traitsTest.krak @@ -7,23 +7,23 @@ typedef Trait2 (SecondTrait) {}; typedef TwoTrait (FirstTrait, SecondTrait) {}; typedef AlreadySpecilized (FirstTrait, SecondTrait) {}; -template void OneTwoFunc(T obj) { +template |void| OneTwoFunc(|T| obj) { println("No Traits"); } -template void OneTwoFunc(T obj) { +template |void| OneTwoFunc(|T| obj) { println("First Trait"); } -template void OneTwoFunc(T obj) { +template |void| OneTwoFunc(|T| obj) { println("Second Trait"); } -template void OneTwoFunc(T obj) { +template |void| OneTwoFunc(|T| obj) { println("Both Traits"); } /* -template void OneTwoFunc(AlreadySpecilized obj) { +template |void| OneTwoFunc(|AlreadySpecilized| obj) { println("Already Specilized"); } */ @@ -42,12 +42,12 @@ typedef template OneTwoObj {}; *}; */ -int main() { - NoTraits a; - Trait1 b; - Trait2 c; - TwoTrait d; - AlreadySpecilized e; +|int| main() { + |NoTraits| a; + |Trait1| b; + |Trait2| c; + |TwoTrait| d; + |AlreadySpecilized| e; OneTwoFunc(a); OneTwoFunc(b); @@ -57,11 +57,11 @@ int main() { println(); - OneTwoObj alpha; - OneTwoObj beta; - OneTwoObj gamma; - OneTwoObj delta; -// OneTwoObj epsilon; + |OneTwoObj| alpha; + |OneTwoObj| beta; + |OneTwoObj| gamma; + |OneTwoObj| delta; +// |OneTwoObj| epsilon; OneTwoFunc>(alpha); OneTwoFunc>(beta); diff --git a/tests/typeExpr.expected_results b/tests/typeExpr.expected_results new file mode 100644 index 0000000..de78180 --- /dev/null +++ b/tests/typeExpr.expected_results @@ -0,0 +1,2 @@ +4 +8 diff --git a/tests/typeExpr.krak b/tests/typeExpr.krak new file mode 100644 index 0000000..e7dcae2 --- /dev/null +++ b/tests/typeExpr.krak @@ -0,0 +1,20 @@ +import io; + +typedef ClassWithConstructor { + |int| data; + |ClassWithConstructor*| construct(|int| inData) { + data = inData; + return this; + } + |void| printData() { + println(data); + } +}; + +|int| main() { + |ClassWithConstructor| object.construct(4); + object.printData(); + |int| a = 8; + println(a); + return 0; +} diff --git a/tests/vectorTest.krak b/tests/vectorTest.krak index 4ee170a..579fe24 100644 --- a/tests/vectorTest.krak +++ b/tests/vectorTest.krak @@ -3,24 +3,24 @@ import mem; import vector; typedef AbleToBeDestroyed (Destructable) { - void destruct() { + |void| destruct() { println("Destroyed!"); } }; -int main() { - vector intVec.construct(); +|int| main() { + |vector| intVec.construct(); intVec.addEnd(1); intVec.addEnd(3); intVec.addEnd(3); intVec.addEnd(7); - for (int i = 0; i < intVec.size; i++;) + for (|int| i = 0; i < intVec.size; i++;) print(intVec.at(i)); println(); - vector* desVec = new>()->construct(); - AbleToBeDestroyed testDestruct; + |vector*| desVec = new>()->construct(); + |AbleToBeDestroyed| testDestruct; desVec->addEnd(testDestruct); delete>(desVec);