first draft of import builtin function

This commit is contained in:
cozis
2022-08-16 17:35:58 +02:00
parent 9935142a1e
commit 0a090c4cfa
12 changed files with 168 additions and 187 deletions
-174
View File
@@ -1,174 +0,0 @@
PUSHFUN copy, 1;
ASS "copy";
POP 1;
JUMP copy_end;
copy:
ASS "L";
POP 1;
PUSHLST 0;
ASS "L2";
POP 1;
PUSHINT 0;
ASS "i";
POP 1;
loop_start:
PUSHVAR "i";
PUSHVAR "L";
PUSHVAR "count";
CALL 1, 1;
LSS;
JUMPIFNOTANDPOP loop_end;
PUSHVAR "L";
PUSHVAR "i";
SELECT;
PUSHVAR "L2";
PUSHVAR "i";
INSERT2;
POP 1;
PUSHVAR "i";
PUSHINT 1;
ADD;
ASS "i";
POP 1;
JUMP loop_start;
loop_end:
PUSHVAR "L2";
RETURN 1;
RETURN 0;
copy_end:
PUSHFUN bubble_sort, 2;
ASS "bubble_sort";
POP 1;
JUMP bubble_sort_end;
bubble_sort:
ASS "less";
POP 1;
ASS "L";
POP 1;
PUSHVAR "less";
PUSHNNE;
EQL;
JUMPIFNOTANDPOP default_less_cb_end;
PUSHFUN default_less_cb, 2;
ASS "less";
POP 1;
JUMP default_less_cb_end;
default_less_cb:
ASS "b";
POP 1;
ASS "a";
POP 1;
PUSHVAR "a";
PUSHVAR "b";
LSS;
RETURN 1;
RETURN 0;
default_less_cb_end:
PUSHVAR "L";
PUSHVAR "copy";
CALL 1, 1;
ASS "L";
POP 1;
outer_loop_start:
PUSHFLS;
ASS "swapped";
POP 1;
PUSHINT 0;
ASS "i";
POP 1;
inner_loop_start:
PUSHVAR "i";
PUSHVAR "L";
PUSHVAR "count";
CALL 1, 1;
PUSHINT 1;
SUB;
LSS;
PUSHVAR "swapped";
NOT;
AND;
JUMPIFNOTANDPOP outer_loop_end;
PUSHVAR "L";
PUSHVAR "i";
SELECT;
PUSHVAR "L";
PUSHVAR "i";
PUSHINT 1;
ADD;
SELECT;
PUSHVAR "less";
CALL 2, 1;
JUMPIFNOTANDPOP if_branch_end;
PUSHTRU;
ASS "swapped";
POP 1;
PUSHVAR "L";
PUSHVAR "i";
PUSHINT 1;
ADD;
SELECT;
ASS "tmp";
POP 1;
PUSHVAR "L";
PUSHVAR "i";
SELECT;
PUSHVAR "L";
PUSHVAR "i";
PUSHINT 1;
ADD;
INSERT2;
POP 1;
PUSHVAR "tmp";
PUSHVAR "L";
PUSHVAR "i";
INSERT2;
POP 1;
if_branch_end:
PUSHVAR "i";
PUSHINT 1;
ADD;
ASS "i";
POP 1;
JUMP inner_loop_start;
outer_loop_end:
PUSHVAR "swapped";
JUMPIFANDPOP outer_loop_start;
PUSHVAR "L";
RETURN 1;
RETURN 0;
bubble_sort_end:
PUSHLST 5;
PUSHINT 0;
PUSHINT 3;
INSERT;
PUSHINT 1;
PUSHINT 2;
INSERT;
PUSHINT 2;
PUSHINT 1;
INSERT;
PUSHINT 3;
PUSHINT 6;
INSERT;
PUSHINT 4;
PUSHINT 0;
PUSHINT 2;
SUB;
INSERT;
PUSHVAR "bubble_sort";
CALL 1, 1;
PUSHVAR "print";
CALL 1, 1;
POP 1;
RETURN 0;
+2 -2
View File
@@ -12,7 +12,7 @@ fun copy(L) {
return L2;
}
fun bubble_sort(L, less) {
fun bubbleSort(L, less) {
if less == none:
fun less(a, b) return a < b;
@@ -37,4 +37,4 @@ fun bubble_sort(L, less) {
}
print(bubble_sort([3, 2, 1, 6, 0-2]));
print(bubbleSort([3, 2, 1, 6, 0-2]));
-5
View File
@@ -1,5 +0,0 @@
PUSHSTR "Hello, world!\n";
PUSHVAR "print";
CALL 1, 1;
POP 1;
RETURN 0;
+2
View File
@@ -0,0 +1,2 @@
a = 1;
+4
View File
@@ -0,0 +1,4 @@
vars, err = import("examples/imported.noja");
print("vars=[", vars, "]\n");
print("err=[", err, "]\n");
+1 -1
View File
@@ -34,4 +34,4 @@ w = pop(stack);
assert(x == 3);
assert(y == 2);
assert(z == 1);
assert(w == none);
assert(w == none);