|
|
- #include "ink.h"
-
- int main(int argc, char** argv) {
- struct context* ctx;
- ctx = ink_make_default_context();
-
- ink_compile(
- ctx,
- "fn encrypt do\n"
- " 3 pluck array.size\n"
- " # array add_key modulo_key index\n"
- " loop:\n"
- " 1 - dup 5 pluck\n"
- " # array add_key modulo_key index index array\n"
- " array.index \n"
- " # array add_key modulo_key index v\n"
- " 4 pluck +\n"
- " # array add_key modulo_key index (v + add_key)\n"
- " 3 pluck %\n"
- " # array add_key modulo_key index ((v + add_key) % modulo_key)\n"
- " 2 pluck\n"
- " # array add_key modulo_key index ((v + add_key) % modulo_key) index\n"
- " 6 pluck\n"
- " # array add_key modulo_key index ((v + add_key) % modulo_key) index array\n"
- " array.set\n"
- " # array add_key modulo_key index\n"
- " dup 0 != loop jump_if drop drop drop drop\n"
- "end\n"
- "fn string.dump do\n"
- " dup array.size 0\n"
- " # array end it\n"
- " 91 print_utf8\n"
- " 32 print_utf8\n"
- " loop:\n"
- " dup\n"
- " # array end it it\n"
- " 4 pluck\n"
- " # array end it it array\n"
- " array.index print_int\n"
- " 32 print_utf8\n"
- " 1 +\n"
- " # array end it\n"
- " 2 pluck 2 pluck > loop jump_if\n"
- " # array end it\n"
- " 93 print_utf8\n"
- " drop drop drop\n"
- "end\n"
- "fn string.print do\n"
- " dup array.size 0\n"
- " # array end it\n"
- " loop:\n"
- " dup\n"
- " # array end it it\n"
- " 4 pluck\n"
- " # array end it it array\n"
- " array.index print_utf8\n"
- " 1 +\n"
- " # array end it\n"
- " 2 pluck 2 pluck > loop jump_if\n"
- " # array end it\n"
- " drop drop drop\n"
- "end"
- );
-
- ink_compile(
- ctx,
- "# Clones an array, creating a new array\n"
- "#\n"
- "# @param array The array to clone into a new array\n"
- "# @return a new array that contains the same elements as the source array\n"
- "#\n"
- "# array -> new_array\n"
- "fn array.clone do\n"
- " array.new 2 pluck array.size 0\n"
- " # array new_array end it\n"
- " 2 pluck 2 pluck == l jump_if\n"
- " # array new_array end it\n"
- " loop:\n"
- " dup 5 pluck\n"
- " # array new_array end it it array\n"
- " array.index 4 pluck\n"
- " # array new_array end it v new_array\n"
- " array.push\n"
- " # array new_array end it\n"
- " 1 +\n"
- " 2 pluck 2 pluck > loop jump_if\n"
- " l: drop drop swap drop\n"
- " # new_array\n"
- "end"
- );
-
- ink_compile(
- ctx,
- "fn witch do\n"
- " drop drop drop sys.trace\n"
- "end\n"
- );
-
- ink_compile(
- ctx,
- "fn golden do\n"
- " 42 64190 witch\n"
- "end\n"
- );
-
- ink_compile(
- ctx,
- "fn beatrice do\n"
- " 10 golden\n"
- "end\n"
- );
-
- ink_compile(
- ctx,
- "beatrice 4 8 15 16 23 stack.dump\n"
- );
-
- //ctx->routines[coro].panic = 0;
-
- int increment = 1 << 16;
- int counter = increment;
- int c;
-
- while(ink_can_run(ctx)) {
- for(c = 0; c < 64; ++c)
- ink_step_everyone(ctx);
-
-
- if(ctx->steps < counter) {
- ink_gc(ctx);
- counter += increment;
- }
- }
-
- //return ctx->routines[coro].panic != INK_ROUTINE_SUCCESS && ctx->routines[coro].panic != INK_ROUTINE_CAN_REUSE;
- }
|