From dff7306cc3793020608ed6860cd109e757379edd Mon Sep 17 00:00:00 2001 From: Nathan Braswell Date: Sun, 19 Apr 2020 01:25:20 -0400 Subject: [PATCH] Change to raw string --- k_prime.krak | 152 +++++++++++++++++++++++++-------------------------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/k_prime.krak b/k_prime.krak index 3d8cee4..2ae5194 100644 --- a/k_prime.krak +++ b/k_prime.krak @@ -1398,83 +1398,83 @@ fun main(argc: int, argv: **char): int { match (get_value(main)) { MalValue::Function(f) { var top_decs = str("#include \n#include \n#include \n") - top_decs += "void error(char* message) {fprintf(stderr, \"%s\", message); exit(1);}\n" - top_decs += "void check_num_params(size_t a, size_t b, char* function) { if (a!=b) {fprintf(stderr, \"%s: expected num params to be %d\\n\", function, b); exit(1);}}\n" - top_decs += "void check_int(size_t p, char* function) { if ((p&0x7)!=0) {fprintf(stderr, \"%s: expected param to be int\\n\", function); exit(1);}}\n" - top_decs += "void check_function(size_t p, char* message) { if ((p&0x7)!=0x6) {fprintf(stderr, \"%s: expected a function\\n\", message); exit(1);}}\n" - top_decs += "typedef struct {\n" - top_decs += "size_t (*func)(size_t*,size_t,size_t*);\n" - top_decs += "size_t* data;\n" - top_decs += "} closure;\n" - top_decs += "size_t _plus_impl(size_t* _, size_t num, size_t* args) {\n" - top_decs += "check_num_params(num, 2, \"+\"); check_int(args[0], \"+\"); check_int(args[1], \"+\");" - top_decs += " return (size_t)(((((ptrdiff_t)args[0]) >> 3) + (((ptrdiff_t)args[1]) >> 3)) << 3);\n" - top_decs += "}\n" + top_decs += """void error(char* message) {fprintf(stderr, "%s", message); exit(1);} + void check_num_params(size_t a, size_t b, char* function) { if (a!=b) {fprintf(stderr, "%s: expected num params to be %d\n", function, b); exit(1);}} + void check_int(size_t p, char* function) { if ((p&0x7)!=0) {fprintf(stderr, "%s: expected param to be int\n", function); exit(1);}} + void check_function(size_t p, char* message) { if ((p&0x7)!=0x6) {fprintf(stderr, "%s: expected a function\n", message); exit(1);}} + typedef struct { + size_t (*func)(size_t*,size_t,size_t*); + size_t* data; + } closure; + size_t _plus_impl(size_t* _, size_t num, size_t* args) { + check_num_params(num, 2, "+"); check_int(args[0], "+"); check_int(args[1], "+"); + return (size_t)(((((ptrdiff_t)args[0]) >> 3) + (((ptrdiff_t)args[1]) >> 3)) << 3); + }""" var top_defs = str("closure _plus_closure = { _plus_impl, NULL};\n") - top_defs += "size_t _minus_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "check_num_params(num, 2, \"-\"); check_int(args[0], \"-\"); check_int(args[1], \"-\");" - top_defs += " return (size_t)(((((ptrdiff_t)args[0]) >> 3) - (((ptrdiff_t)args[1]) >> 3)) << 3);\n" - top_defs += "}\n" - top_defs += "closure _minus_closure =(closure){ _minus_impl, NULL};\n" - top_defs += "size_t _mult_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "check_num_params(num, 2, \"*\"); check_int(args[0], \"*\"); check_int(args[1], \"*\");" - top_defs += " return (size_t)(((((ptrdiff_t)args[0]) >> 3) * (((ptrdiff_t)args[1]) >> 3)) << 3);\n" - top_defs += "}\n" - top_defs += "closure _mult_closure = (closure){ _mult_impl, NULL};\n" - top_defs += "size_t _div_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "check_num_params(num, 2, \"/\"); check_int(args[0], \"/\"); check_int(args[1], \"/\");" - top_defs += " return (size_t)(((((ptrdiff_t)args[0]) >> 3) / (((ptrdiff_t)args[1]) >> 3)) << 3);\n" - top_defs += "}\n" - top_defs += "closure _div_closure = (closure){ _div_impl, NULL};\n" - top_defs += "size_t _eq_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "check_num_params(num, 2, \"=\");" - top_defs += "if (args[0] == args[1]) { return 0x9F; } else { return 0x1F; }\n" - top_defs += "}\n" - top_defs += "closure _eq_closure = (closure){ _eq_impl, NULL};\n" - top_defs += "size_t _lt_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "check_num_params(num, 2, \"<\"); check_int(args[0], \"<\"); check_int(args[1], \"<\");" - top_defs += "if (args[0] < args[1]) { return 0x9F; } else { return 0x1F; }\n" - top_defs += "}\n" - top_defs += "closure _lt_closure = (closure){ _lt_impl, NULL};\n" - top_defs += "size_t _lte_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "check_num_params(num, 2, \"<=\"); check_int(args[0], \"<=\"); check_int(args[1], \"<=\");" - top_defs += "if (args[0] <= args[1]) { return 0x9F; } else { return 0x1F; }\n" - top_defs += "}\n" - top_defs += "closure _lte_closure = (closure){ _lte_impl, NULL};\n" - top_defs += "size_t _gt_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "check_num_params(num, 2, \">\"); check_int(args[0], \">\"); check_int(args[1], \">\");" - top_defs += "if (args[0] > args[1]) { return 0x9F; } else { return 0x1F; }\n" - top_defs += "}\n" - top_defs += "closure _gt_closure = (closure){ _gt_impl, NULL};\n" - top_defs += "size_t _gte_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "check_num_params(num, 2, \">=\"); check_int(args[0], \">=\"); check_int(args[1], \">=\");" - top_defs += "if (args[0] >= args[1]) { return 0x9F; } else { return 0x1F; }\n" - top_defs += "}\n" - top_defs += "closure _gte_closure = (closure){ _gte_impl, NULL};\n" - top_defs += "size_t _print_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "for (int _idx = 0; _idx < num; _idx++) {\n" - top_defs += "if ((args[_idx] & 0xFF) == 0x2F) printf(\"nil\");\n" - top_defs += "else if ((args[_idx] & 0xFF) == 0x9F) printf(\"true\");\n" - top_defs += "else if ((args[_idx] & 0xFF) == 0x1F) printf(\"false\");\n" - top_defs += "else if ((args[_idx] & 0xFF) == 0x0F) printf(\"Char?\");\n" - top_defs += "else if ((args[_idx] & 0x07) == 0x06) printf(\"function\");\n" - top_defs += "else if ((args[_idx] & 0x07) == 0x05) printf(\"Symbol?\");\n" - top_defs += "else if ((args[_idx] & 0x07) == 0x04) printf(\"Atom?\");\n" - top_defs += "else if ((args[_idx] & 0x07) == 0x03) printf(\"String?\");\n" - top_defs += "else if ((args[_idx] & 0x07) == 0x02) printf(\"Vector?\");\n" - top_defs += "else if ((args[_idx] & 0x07) == 0x01) printf(\"List?\");\n" - top_defs += "else if ((args[_idx] & 0x07) == 0x00) printf(\"%d\", args[_idx]>>3);\n" - top_defs += "else printf(\"can't print\");\n" //' - top_defs += "}\n" - top_defs += "return 0x2F;\n" - top_defs += "}\n" - top_defs += "closure _print_closure = (closure){ _print_impl, NULL};\n" - top_defs += "size_t _println_impl(size_t* _, size_t num, size_t* args) {\n" - top_defs += "_print_impl(_, num, args);\n" - top_defs += "printf(\"\\n\");\n" - top_defs += "return 0x2F;\n" - top_defs += "}\n" - top_defs += "closure _println_closure = (closure){ _println_impl, NULL};\n" + top_defs += """size_t _minus_impl(size_t* _, size_t num, size_t* args) { + check_num_params(num, 2, "-"); check_int(args[0], "-"); check_int(args[1], "-"); + return (size_t)(((((ptrdiff_t)args[0]) >> 3) - (((ptrdiff_t)args[1]) >> 3)) << 3); + } + closure _minus_closure =(closure){ _minus_impl, NULL}; + size_t _mult_impl(size_t* _, size_t num, size_t* args) { + check_num_params(num, 2, "*"); check_int(args[0], "*"); check_int(args[1], "*"); + return (size_t)(((((ptrdiff_t)args[0]) >> 3) * (((ptrdiff_t)args[1]) >> 3)) << 3); + } + closure _mult_closure = (closure){ _mult_impl, NULL}; + size_t _div_impl(size_t* _, size_t num, size_t* args) { + check_num_params(num, 2, "/"); check_int(args[0], "/"); check_int(args[1], "/"); + return (size_t)(((((ptrdiff_t)args[0]) >> 3) / (((ptrdiff_t)args[1]) >> 3)) << 3); + } + closure _div_closure = (closure){ _div_impl, NULL}; + size_t _eq_impl(size_t* _, size_t num, size_t* args) { + check_num_params(num, 2, "="); + if (args[0] == args[1]) { return 0x9F; } else { return 0x1F; } + } + closure _eq_closure = (closure){ _eq_impl, NULL}; + size_t _lt_impl(size_t* _, size_t num, size_t* args) { + check_num_params(num, 2, "<"); check_int(args[0], "<"); check_int(args[1], "<"); + if (args[0] < args[1]) { return 0x9F; } else { return 0x1F; } + } + closure _lt_closure = (closure){ _lt_impl, NULL}; + size_t _lte_impl(size_t* _, size_t num, size_t* args) { + check_num_params(num, 2, "<="); check_int(args[0], "<="); check_int(args[1], "<="); + if (args[0] <= args[1]) { return 0x9F; } else { return 0x1F; } + } + closure _lte_closure = (closure){ _lte_impl, NULL}; + size_t _gt_impl(size_t* _, size_t num, size_t* args) { + check_num_params(num, 2, ">"); check_int(args[0], ">"); check_int(args[1], ">"); + if (args[0] > args[1]) { return 0x9F; } else { return 0x1F; } + } + closure _gt_closure = (closure){ _gt_impl, NULL}; + size_t _gte_impl(size_t* _, size_t num, size_t* args) { + check_num_params(num, 2, ">="); check_int(args[0], ">="); check_int(args[1], ">="); + if (args[0] >= args[1]) { return 0x9F; } else { return 0x1F; } + } + closure _gte_closure = (closure){ _gte_impl, NULL}; + size_t _print_impl(size_t* _, size_t num, size_t* args) { + for (int _idx = 0; _idx < num; _idx++) { + if ((args[_idx] & 0xFF) == 0x2F) printf("nil"); + else if ((args[_idx] & 0xFF) == 0x9F) printf("true"); + else if ((args[_idx] & 0xFF) == 0x1F) printf("false"); + else if ((args[_idx] & 0xFF) == 0x0F) printf("Char?"); + else if ((args[_idx] & 0x07) == 0x06) printf("function"); + else if ((args[_idx] & 0x07) == 0x05) printf("Symbol?"); + else if ((args[_idx] & 0x07) == 0x04) printf("Atom?"); + else if ((args[_idx] & 0x07) == 0x03) printf("String?"); + else if ((args[_idx] & 0x07) == 0x02) printf("Vector?"); + else if ((args[_idx] & 0x07) == 0x01) printf("List?"); + else if ((args[_idx] & 0x07) == 0x00) printf("%d", args[_idx]>>3); + else printf("can't print"); + } + return 0x2F; + } + closure _print_closure = (closure){ _print_impl, NULL}; + size_t _println_impl(size_t* _, size_t num, size_t* args) { + _print_impl(_, num, args); + printf("\n"); + return 0x2F; + } + closure _println_closure = (closure){ _println_impl, NULL};""" //' var main_s = str("int main(int argc, char** argv) {\n") var main_body = str() var inner_main = compile(&top_decs, &top_defs, &main_s, &main_body, f.env, *f.body)