Skip to content

Commit a1d546c

Browse files
committed
new update featuring new builtins
1 parent af7bd54 commit a1d546c

File tree

5 files changed

+56
-4
lines changed

5 files changed

+56
-4
lines changed

lolzak.ys

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ task fib(n) {
1111
i += 1;
1212
## exit(0);
1313
};
14-
return a;
14+
return int(a);
1515
};
1616

1717
task recursive_task(n) {
1818
n += 1;
1919
println("n: %V", n);
20-
if (n < 10) {
20+
delay(5);
21+
if (n < 100) {
2122
result = recursive_task(n);
2223
} else {
2324
result = n;
@@ -28,11 +29,20 @@ task recursive_task(n) {
2829
task main() {
2930
n = 10; ## Size of the fibonacci sequence
3031

32+
time_start_ms = int(time("%S%s"));
33+
println("Start time: %V", time_start_ms);
34+
3135
result = fib(n);
3236
println("fib(%V) = %V", n, result);
3337

3438
result = recursive_task(0);
3539
println("recursive_task(%V) = %V", 0, result);
40+
time_end_ms = int(time("%S%s"));
41+
println("End time: %V", time_end_ms);
42+
43+
println("Time taken: %V ms", time_end_ms - time_start_ms);
44+
45+
3646
};
3747

3848
main();

main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ int main(int argc, char *argv[]) {
3838

3939
// Printing the version number and exiting
4040
if (my_flags->version) {
41-
printf("Version: 02/10/2024 v0.2.0-alpha\n");
41+
printf("Version: 04/11/2024 v0.3.0-alpha\n");
4242
free(my_flags);
4343
exit(0);
4444
}

standard_library.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,7 @@ Variable *yoinkle_std_get_system_time(char *format_string) {
488488
for (int pos = 0; pos < format_string_len; pos++) {
489489
if (format_string[pos] == '%' && pos + 1 < format_string_len) {
490490
switch (format_string[pos + 1]) {
491+
// %d - day of the month as a decimal number (01-31)
491492
case 'd':
492493
;
493494
time_t t = time(NULL);
@@ -509,6 +510,7 @@ Variable *yoinkle_std_get_system_time(char *format_string) {
509510
free(day);
510511
free(rest);
511512
break;
513+
// %m - month as a decimal number (01-12)
512514
case 'm':
513515
;
514516
time_t t2 = time(NULL);
@@ -530,6 +532,7 @@ Variable *yoinkle_std_get_system_time(char *format_string) {
530532
free(month);
531533
free(rest2);
532534
break;
535+
// %Y - year as a decimal number
533536
case 'Y':
534537
;
535538
time_t t3 = time(NULL);
@@ -551,6 +554,7 @@ Variable *yoinkle_std_get_system_time(char *format_string) {
551554
free(year);
552555
free(rest3);
553556
break;
557+
// %H - hour as a decimal number (00-23)
554558
case 'H':
555559
;
556560
time_t t4 = time(NULL);
@@ -572,6 +576,7 @@ Variable *yoinkle_std_get_system_time(char *format_string) {
572576
free(hour);
573577
free(rest4);
574578
break;
579+
// %M - minute as a decimal number (00-59)
575580
case 'M':
576581
;
577582
time_t t5 = time(NULL);
@@ -593,6 +598,7 @@ Variable *yoinkle_std_get_system_time(char *format_string) {
593598
free(minute);
594599
free(rest5);
595600
break;
601+
// %S - second as a decimal number (00-59)
596602
case 'S':
597603
;
598604
time_t t6 = time(NULL);
@@ -614,6 +620,30 @@ Variable *yoinkle_std_get_system_time(char *format_string) {
614620
free(second);
615621
free(rest6);
616622
break;
623+
// Millisecond as a decimal number (000-999)
624+
case 's':
625+
;
626+
time_t t7 = time(NULL);
627+
struct tm tm7 = *localtime(&t7);
628+
struct timeval tv;
629+
mingw_gettimeofday(&tv, NULL);
630+
char *dest7 = malloc(pos + 1);
631+
strncpy(dest7, new_format_string, pos);
632+
dest7[pos] = '\0';
633+
char *millisecond = malloc(4);
634+
sprintf(millisecond, "%03d", (int)tv.tv_usec / 1000);
635+
char *rest7 = malloc(format_string_len - pos - 2);
636+
strncpy(rest7, new_format_string + pos + 2, format_string_len - pos - 2);
637+
rest7[format_string_len - pos - 2] = '\0';
638+
new_format_string = malloc(strlen(dest7) + 4 + strlen(rest7) + 1);
639+
strcpy(new_format_string, dest7);
640+
strcat(new_format_string, millisecond);
641+
strcat(new_format_string, rest7);
642+
format_string_len = strlen(new_format_string);
643+
free(dest7);
644+
free(millisecond);
645+
free(rest7);
646+
break;
617647
}
618648
}
619649
}
@@ -624,3 +654,11 @@ Variable *yoinkle_std_get_system_time(char *format_string) {
624654
return new_var;
625655
}
626656
}
657+
658+
void *yoinkle_std_delay(Variable *time_in_milliseconds) {
659+
// Storing start time
660+
clock_t start_time = clock();
661+
662+
// looping till required time is not achieved
663+
while (clock() < start_time + time_in_milliseconds->value.int_value);
664+
}

standard_library.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ Variable *yoinkle_std_value_to_string(Variable *var);
1414
Variable *yoinkle_std_value_to_bool(Variable *var);
1515

1616
Variable *yoinkle_std_get_system_time(char *format_string);
17+
void *yoinkle_std_delay(Variable *time);
1718

1819
#endif

yoinkle_runtime.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,13 +271,16 @@ Variable *runtime(Node *NODE, Token *p_tokens, Node *AST) {
271271
} else if (strcmp(func_name, "bool") == 0) {
272272
new_var = yoinkle_std_value_to_bool(&args[0]);
273273
return new_var;
274-
} else if (strcmp(func_name, "timestmp") == 0) {
274+
} else if (strcmp(func_name, "time") == 0) {
275275
char *format_string = NULL;
276276
if (num_args > 0) {
277277
format_string = args[0].value.string_value;
278278
}
279279
new_var = yoinkle_std_get_system_time(format_string);
280280
return new_var;
281+
} else if (strcmp(func_name, "delay") == 0) {
282+
yoinkle_std_delay(&args[0]);
283+
break;
281284
} else {
282285
// Checking if the function is a user defined function
283286
int function_found = 0;

0 commit comments

Comments
 (0)