diff --git a/parse.c b/parse.c index 5a2bfa0..ba6e5cd 100644 --- a/parse.c +++ b/parse.c @@ -482,9 +482,11 @@ enum ParseResult ParseStatement(struct ParseState *Parser) ProgramFail(Parser, "value required in return"); if (TopStackFrame->ReturnValue->Typ->Base != TypeVoid) + { ExpressionAssign(Parser, TopStackFrame->ReturnValue, CValue, TRUE, NULL, 0); - - VariableStackPop(Parser, CValue); + VariableStackPop(Parser, CValue); + } + Parser->Mode = RunModeReturn; } else diff --git a/tests/25_quicksort.c b/tests/25_quicksort.c index 8fa05ba..c023ade 100644 --- a/tests/25_quicksort.c +++ b/tests/25_quicksort.c @@ -1,22 +1,5 @@ int array[16]; -array[0] = 62; -array[1] = 83; -array[2] = 4; -array[3] = 89; -array[4] = 36; -array[5] = 21; -array[6] = 74; -array[7] = 37; -array[8] = 65; -array[9] = 33; -array[10] = 96; -array[11] = 38; -array[12] = 53; -array[13] = 16; -array[14] = 74; -array[15] = 55; - //Swap integer values by array indexes void swap(int a, int b) { @@ -59,17 +42,38 @@ void quicksort(int left, int right) quicksort(index + 1, right); } -int i; +void main() +{ + int i; -for (i = 0; i < 16; i++) - printf("%d ", array[i]); + array[0] = 62; + array[1] = 83; + array[2] = 4; + array[3] = 89; + array[4] = 36; + array[5] = 21; + array[6] = 74; + array[7] = 37; + array[8] = 65; + array[9] = 33; + array[10] = 96; + array[11] = 38; + array[12] = 53; + array[13] = 16; + array[14] = 74; + array[15] = 55; + + for (i = 0; i < 16; i++) + printf("%d ", array[i]); -printf("\n"); + printf("\n"); -quicksort(0, 15); + quicksort(0, 15); -for (i = 0; i < 16; i++) - printf("%d ", array[i]); - -printf("\n"); + for (i = 0; i < 16; i++) + printf("%d ", array[i]); + printf("\n"); +} +main(); + diff --git a/tests/Makefile b/tests/Makefile index 0f5bf2e..c2f3e12 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -22,6 +22,7 @@ TESTS= 00_assignment.test \ 22_floating_point.test \ 23_type_coercion.test \ 24_math_library.test \ + 25_quicksort.test \ 26_character_constants.test %.test: %.expect %.c