From 7a5d0d1dcb86cb04d8fa3e57e5c942c3767dbec4 Mon Sep 17 00:00:00 2001 From: cozis Date: Sun, 31 Oct 2021 04:17:57 +0000 Subject: [PATCH] first commit --- 3p/include/xjson.h | 217 ++++++++++ 3p/libs/libxjson.a | Bin 0 -> 183156 bytes build.sh | 80 ++++ build/libnoja-compile.a | Bin 0 -> 88012 bytes build/libnoja-objects.a | Bin 0 -> 58746 bytes build/libnoja-runtime.a | Bin 0 -> 192892 bytes build/noja | Bin 0 -> 251752 bytes build/test-objects | Bin 0 -> 46384 bytes build/test-parse | Bin 0 -> 171272 bytes include/noja/compile.h | 0 include/noja/objects.h | 0 samples/gang.noja | 36 ++ src/common/executable.c | 365 +++++++++++++++++ src/common/executable.h | 50 +++ src/compiler/AST.h | 4 + src/compiler/ASTi.h | 73 ++++ src/compiler/compile.c | 123 ++++++ src/compiler/compile.h | 8 + src/compiler/parse.c | 762 +++++++++++++++++++++++++++++++++++ src/compiler/parse.h | 8 + src/compiler/serialize.c | 161 ++++++++ src/compiler/serialize.h | 5 + src/main.c | 335 +++++++++++++++ src/objects/heap.c | 110 +++++ src/objects/o_float.c | 40 ++ src/objects/o_int.c | 41 ++ src/objects/o_map.c | 261 ++++++++++++ src/objects/o_none.c | 21 + src/objects/o_string.c | 69 ++++ src/objects/objects.c | 286 +++++++++++++ src/objects/objects.h | 96 +++++ src/runtime/o_func.c | 53 +++ src/runtime/runtime.c | 522 ++++++++++++++++++++++++ src/runtime/runtime.h | 22 + src/runtime/runtime_error.c | 29 ++ src/runtime/runtime_error.h | 14 + src/utils/bpalloc.c | 217 ++++++++++ src/utils/bpalloc.h | 9 + src/utils/bucketlist.c | 177 ++++++++ src/utils/bucketlist.h | 10 + src/utils/defs.h | 17 + src/utils/error.c | 88 ++++ src/utils/error.h | 26 ++ src/utils/hash.c | 19 + src/utils/hash.h | 4 + src/utils/promise.c | 106 +++++ src/utils/promise.h | 11 + src/utils/source.c | 160 ++++++++ src/utils/source.h | 12 + src/utils/stack.c | 73 ++++ src/utils/stack.h | 11 + test.sh | 2 + tests/aux/parsing-tests.json | 104 +++++ tests/src/test-objects.c | 86 ++++ tests/src/test-parse.c | 281 +++++++++++++ 55 files changed, 5204 insertions(+) create mode 100644 3p/include/xjson.h create mode 100644 3p/libs/libxjson.a create mode 100755 build.sh create mode 100644 build/libnoja-compile.a create mode 100644 build/libnoja-objects.a create mode 100644 build/libnoja-runtime.a create mode 100755 build/noja create mode 100755 build/test-objects create mode 100755 build/test-parse create mode 100644 include/noja/compile.h create mode 100644 include/noja/objects.h create mode 100644 samples/gang.noja create mode 100644 src/common/executable.c create mode 100644 src/common/executable.h create mode 100644 src/compiler/AST.h create mode 100644 src/compiler/ASTi.h create mode 100644 src/compiler/compile.c create mode 100644 src/compiler/compile.h create mode 100644 src/compiler/parse.c create mode 100644 src/compiler/parse.h create mode 100644 src/compiler/serialize.c create mode 100644 src/compiler/serialize.h create mode 100644 src/main.c create mode 100644 src/objects/heap.c create mode 100644 src/objects/o_float.c create mode 100644 src/objects/o_int.c create mode 100644 src/objects/o_map.c create mode 100644 src/objects/o_none.c create mode 100644 src/objects/o_string.c create mode 100644 src/objects/objects.c create mode 100644 src/objects/objects.h create mode 100644 src/runtime/o_func.c create mode 100644 src/runtime/runtime.c create mode 100644 src/runtime/runtime.h create mode 100644 src/runtime/runtime_error.c create mode 100644 src/runtime/runtime_error.h create mode 100644 src/utils/bpalloc.c create mode 100644 src/utils/bpalloc.h create mode 100644 src/utils/bucketlist.c create mode 100644 src/utils/bucketlist.h create mode 100644 src/utils/defs.h create mode 100644 src/utils/error.c create mode 100644 src/utils/error.h create mode 100644 src/utils/hash.c create mode 100644 src/utils/hash.h create mode 100644 src/utils/promise.c create mode 100644 src/utils/promise.h create mode 100644 src/utils/source.c create mode 100644 src/utils/source.h create mode 100644 src/utils/stack.c create mode 100644 src/utils/stack.h create mode 100644 test.sh create mode 100644 tests/aux/parsing-tests.json create mode 100644 tests/src/test-objects.c create mode 100644 tests/src/test-parse.c diff --git a/3p/include/xjson.h b/3p/include/xjson.h new file mode 100644 index 0000000..30eadcf --- /dev/null +++ b/3p/include/xjson.h @@ -0,0 +1,217 @@ + +#ifndef XJSON_H +#define XJSON_H + +#include +#include + +enum { + xj_INT = (1 << 0), + xj_BOOL = (1 << 1), + xj_NULL = (1 << 2), + xj_FLOAT = (1 << 3), + xj_ARRAY = (1 << 4), + xj_OBJECT = (1 << 5), + xj_STRING = (1 << 6), + xj_BIG_INT = (1 << 7), + xj_BIG_FLOAT = (1 << 8), +}; + +typedef enum { + + xj_E0000 = 0, // No error. + + + // --------------------------- // + // --- Internal errors ------- // + // --------------------------- // + + xj_E0001, // Maximum depth reached. + xj_E0002, // Out of memory. + xj_E0003, // Not implemented. + + + // --------------------------- // + // --- Input errors ---------- // + // --------------------------- // + + // (Unexpexted end of source inside object) // + + xj_E1000, // End of source inside object, + // right after the starting { + + xj_E1001, // End of source inside object, + // right after a key string. Was + // expected : + + xj_E1002, // End of source inside object, + // right after a key-value separator :. + // Was expected a value expression + + xj_E1003, // End of source inside object, + // right after value expression. + // Were expected , or } + + xj_E1004, // End of source inside object, + // right after value-key separator ,. + // Was expected a key string + + // (Unexpected end of source inside array) // + + xj_E1100, // End of source inside array, + // right after the starting [ + + xj_E1101, // End of source inside array, + // right after a value expression + + xj_E1102, // End of source inside array, + // right after value separator ,. + // Was expected a new value + // expression + + // (Unexpected end of source inside number) // + + xj_E1200, // End of source inside numeric + // expression, right after minus + // sign. Was expected a digit + + // (Unexpected end of source inside string) // + xj_E1300, // End of source inside string expression + xj_E1301, // End of source inside string expression, right after a backslash + + // (Unexpected character inside object) // + xj_E2000, // Unexpected character in place of an object key string. Was expected " + xj_E2001, // Unexpected character in place of an object key-value separator. Was expected : + xj_E2002, // Unexpected character inside object, right after value expression. Were expected , or } + + // (Unexpected character inside array) // + xj_E2100, // Unexpected character inside array, right after value expression. Were expecter ] or , + + // (Unexpected character inside number) // + xj_E2200, // Unexpected character inside number expression, right after minus sign. Was expected a digit after it + + // (Unexpected character inside string) // + xj_E2300, // Unexpected character inside string expression, right after backslash. The only escapable characters are \, /, ", n, t, r, f, b and u. + xj_E2301, // Unexpected character inside string expression, after \u. Was expected a hex digit + + xj_E2302, // Unexpected character inside string expression, right after unicode codepoint. Was expected an auxiliary codepoint + xj_E2303, // Unexpected character inside string expression, right after \\. Was expected an auxiliary codepoint + + xj_E2304, // Invalid symbol + xj_E2305, // Invalid auxiliary symbol + xj_E2306, // Invalid codepoint + + // (Unexpected end of source inside value expression) // + xj_E2400, // Unexpected character in place of a value expression. Were expected {, [, ", n, t, f or a digit. + + // (Other) // + xj_E2500, // Unexpected character after root value expression + xj_E2501, // Source string is empty (null pointer) + xj_E2502, // Source string is empty + xj_E2503, // Duplicate key in object + + // Decodef errors + xj_E3000, // Bad format + + // Query errors + xj_E4000, // End of source after dot. + xj_E4001, // Invalid character after dot. + xj_E4002, // End of source after [. + xj_E4003, // Float used as index. + xj_E4004, // Index too big. + xj_E4005, // Invalid character after [. + xj_E4006, // End of source instead of closing ]. + xj_E4007, // Invalid character instead of closing ]. + xj_E4008, // Invalid character instead of dot and [. + xj_E4009, // Missing node. + + // (i|f|b|s|a|o)Query errors + xj_E4100, // Queried int is too big so it's not representable. + xj_E4101, // Queried value is not an int. + xj_E4102, // Queried float is too big, so it's not representable. + xj_E4103, // Queried value is not a float. + xj_E4104, // Queried value is not a string. + xj_E4105, // Queried value is not a bool. + xj_E4106, // Queried value is not an array. + xj_E4107, // Queried value is not an object. + + xj_ECOUNT, +} xj_code; + +typedef struct { + + const char *src; + + _Bool occurred; + xj_code code; + + char text[128]; + + int offset, + lineno; + + const char *cfile, + *cfunc; + int cline; +} xj_error; + +typedef void xj_alloc; + +typedef struct xj_value xj_value; +struct xj_value { + int offset, length, type, size; + char *key; + union { + long long as_int; + _Bool as_bool; + double as_float; + xj_value* as_array; + xj_value* as_object; + char* as_string; + }; + xj_value *next; +}; + +xj_alloc* xj_init (unsigned int default_chunk_size); +void xj_free (xj_alloc *alloc); +void* xj_malloc(xj_alloc *alloc, unsigned int size); + +void xj_set_malloc(void *(*malloc)(void*, unsigned int)); +void* xj_sys_malloc(unsigned int size); +void xj_set_free(void (*free)(void*, void*)); +void xj_sys_free(void *ptr); +void xj_set_userp(void *userp); + +int xj_snprintf (char *buff, int buffsz, const char *fmt, ...); +int xj_vsnprintf(char *buff, int buffsz, const char *fmt, va_list args); + +xj_value* xj_query (xj_error *error, xj_value *root, const char *text, int len); +_Bool xj_nquery(xj_error *error, xj_value *root, const char *text, int len); +int xj_iquery(xj_error *error, xj_value *root, const char *text, int len); +double xj_fquery(xj_error *error, xj_value *root, const char *text, int len); +_Bool xj_bquery(xj_error *error, xj_value *root, const char *text, int len); +char *xj_squery(xj_error *error, xj_value *root, const char *text, int len, int *count); +xj_value *xj_aquery(xj_error *error, xj_value *root, const char *text, int len, int *count); +xj_value *xj_oquery(xj_error *error, xj_value *root, const char *text, int len, int *count); + +xj_value* xj_decode (xj_error *error, xj_alloc **alloc, const char *text, int len); +xj_value* xj_decodef (xj_error *error, xj_alloc **alloc, const char *format, ...); +xj_value* xj_vdecodef(xj_error *error, xj_alloc **alloc, const char *format, va_list args); + +char* xj_encode (const xj_value *value, int *len); +char* xj_sencode(const char *src, int *len); +char* xj_aencode(const xj_value *head, int *len); +char* xj_oencode(const xj_value *head, int *len); + +char* xj_encode2 (const xj_value *value, char *buff, unsigned int bufflen, int *len); +char* xj_sencode2(const char *src, char *buff, unsigned int bufflen, int *len); +char* xj_aencode2(const xj_value *head, char *buff, unsigned int bufflen, int *len); +char* xj_oencode2(const xj_value *head, char *buff, unsigned int bufflen, int *len); + +_Bool xj_compare(const xj_value *a, const xj_value *b); +xj_value* xj_get_by_name (const xj_value *parent, const char *name, int len); +xj_value* xj_get_by_index(const xj_value *parent, unsigned int index); +_Bool xj_is_error_internal(const xj_error *error); +const char *xj_typename(int type); +void xj_stats(FILE *fp); +#endif \ No newline at end of file diff --git a/3p/libs/libxjson.a b/3p/libs/libxjson.a new file mode 100644 index 0000000000000000000000000000000000000000..cd3e2873885ac352542c4531b836498ef1c14d30 GIT binary patch literal 183156 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

)O22SH8Ae^RY*lhg^-5- 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

NQVxP04>QRBB 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

_ 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 literal 0 HcmV?d00001 diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..d4db02d --- /dev/null +++ b/build.sh @@ -0,0 +1,80 @@ +USING_VALGRIND=0 + +FLAGS="-L3p/libs/ -I3p/include/ -Wall -Wextra -g -DUSING_VALGRIND=$USING_VALGRIND -DTRACE_SOURCE_COPIES=$TRACE_SOURCE_COPIES" + +mkdir temp + +mkdir temp/utils +gcc -c src/utils/hash.c -o temp/utils/hash.o $FLAGS +gcc -c src/utils/stack.c -o temp/utils/stack.o $FLAGS +gcc -c src/utils/error.c -o temp/utils/error.o $FLAGS +gcc -c src/utils/source.c -o temp/utils/source.o $FLAGS +gcc -c src/utils/bpalloc.c -o temp/utils/bpalloc.o $FLAGS +gcc -c src/utils/promise.c -o temp/utils/promise.o $FLAGS +gcc -c src/utils/bucketlist.c -o temp/utils/bucketlist.o $FLAGS + +mkdir temp/objects +gcc -c src/objects/heap.c -o temp/objects/heap.o $FLAGS +gcc -c src/objects/o_int.c -o temp/objects/o_int.o $FLAGS +gcc -c src/objects/o_map.c -o temp/objects/o_map.o $FLAGS +gcc -c src/objects/o_none.c -o temp/objects/o_none.o $FLAGS +gcc -c src/objects/o_float.c -o temp/objects/o_float.o $FLAGS +gcc -c src/objects/o_string.c -o temp/objects/o_string.o $FLAGS +gcc -c src/objects/objects.c -o temp/objects/objects.o $FLAGS + +mkdir temp/compiler +gcc -c src/compiler/parse.c -o temp/compiler/parse.o $FLAGS +gcc -c src/compiler/compile.c -o temp/compiler/compile.o $FLAGS +gcc -c src/compiler/serialize.c -o temp/compiler/serialize.o $FLAGS + +mkdir temp/common +gcc -c src/common/executable.c -o temp/common/executable.o $FLAGS + +mkdir temp/runtime +gcc -c src/runtime/runtime_error.c -o temp/runtime/runtime_error.o $FLAGS +gcc -c src/runtime/runtime.c -o temp/runtime/runtime.o $FLAGS +gcc -c src/runtime/o_func.c -o temp/runtime/o_func.o $FLAGS + +rm -rf build +mkdir build + +ar rcs build/libnoja-objects.a \ + temp/objects/heap.o \ + temp/objects/o_int.o \ + temp/objects/o_float.o \ + temp/objects/objects.o \ + temp/utils/error.o + +ar rcs build/libnoja-compile.a \ + temp/compiler/parse.o \ + temp/compiler/compile.o \ + temp/compiler/serialize.o \ + temp/utils/bpalloc.o \ + temp/utils/error.o \ + temp/utils/source.o + +ar rcs build/libnoja-runtime.a \ + temp/runtime/runtime.o \ + temp/runtime/runtime_error.o \ + temp/runtime/o_func.o \ + build/libnoja-compile.a \ + build/libnoja-objects.a + +gcc tests/src/test-parse.c -o build/test-parse $FLAGS -Lbuild/ -lnoja-compile -lxjson +gcc tests/src/test-objects.c -o build/test-objects $FLAGS -Lbuild/ -lnoja-objects + +gcc src/main.c \ + temp/utils/hash.o \ + temp/utils/stack.o \ + temp/utils/source.o \ + temp/utils/promise.o \ + temp/utils/bucketlist.o \ + temp/objects/o_map.o \ + temp/objects/o_none.o \ + temp/objects/o_string.o \ + temp/runtime/runtime.o \ + temp/runtime/runtime_error.o \ + temp/common/executable.o \ + -o build/noja $FLAGS -Lbuild/ -lnoja-compile -lnoja-objects -lxjson + +rm -rf temp \ No newline at end of file diff --git a/build/libnoja-compile.a b/build/libnoja-compile.a new file mode 100644 index 0000000000000000000000000000000000000000..e8f3e9b2be0d41239135600d3ca98c30a698d462 GIT binary patch literal 88012 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 B-w6N! literal 0 HcmV?d00001 diff --git a/build/libnoja-runtime.a b/build/libnoja-runtime.a new file mode 100644 index 0000000000000000000000000000000000000000..9a948735d4331bc119676b80aeca49f494494b7a GIT binary patch literal 192892 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�Ir%LEXB)g}fF9OduM^YKyEwiG6 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 lZgj1wvwQP!?t0 zGOdzdx}M9)`$dS61Vkq;_u%k{pKAjUrSLRQ0l_nu_vY0~72Xfz&45QJH$^fSZ-G?I zhC|@zq#07V0w?hNM-Yc$Q}{;VyMrqi)9OHuq_$olmCP%sSSnSR51dl7WyJxx7iqay zcgm#qc<`p;D1>I^9a6p3EXWwEf#(~(mL`ye zWKGo&3zBa`!~3Up6e$;(n2+nH*Gd7OCcp{@ee$nymQ8%1gRd{iA6MsakPD5} z64TUs2RR`=bVZgqA>MH$T1;+0xb_{O?<0_AEI{H$#U;u9I$z_KK`#hS&w*q+&(qyd zb-88!F3g01ZrWJhoe0T(iJ2zoRnIEp#S((E0ooxBlO{N1_z=GGgm)!IxJdO0CkW2R zWlkc-vpiM{$CVEWtl7llWA!v_h7o`0h+hk{;T=X_an#vEek@W(bY<1M;6!EWJlvQt z(wJFF(CV2*z{>k;@h=!a;Z275r*OpfeIbRzb$CxDHla_1vq#+hfBw|ri!7Ns13A#n z6}$MJ#2mCa5CJWXGx6!=K#<^YfgbE63cTB}!(^&W>Wd(hC4$#ewG#&WP2`V4Hg&fk zIgY+c*f#2&J!ST}XU!|j@R~Y2^Sm2S6|?~Of@X8*3qdG#W9~QA*;n=5!LfX__s~~TLVdWCifdnnGoM`p&(+uqaWr>%?|DI&9kJ$oh zeF|@a;1XYz)Fpu|N9KiHWixX7j_?=??9OVu6cSs zAvP33_C2?EAcRUOyB2b8%mD1zQR4JeO4uv#WunBI!dNC(qin5be=ZQDl`f+AeIwGS zFSmeG)H^TPi+rnA0yN{pv;?sr!DNJ~3ZzqjFp0PnaV-@+S) z6|YDS3-}ZA4R78!EAk6yb}RDsm<)6g_2v|yKGBbumpUW=r2;xo(m+1+Sc_KHZmHD^pE5Y<~`yHZlM}vnGDaxt1I4Rh6u%ueTO0r zRPyeKzIM_7icKobe3TAFYzcA9pBFbt2KvihG!9A4OvxZFzASwo77*lbSOr;lhokr# zFgmPDO`N30TEP7yC_TxUA6NId=NI2Lhbj@5@!_Ak28Jn)rU!2s0bujc(uKpUs0Ob#dDjFd>|Iiv}Ao6-AmBomJP6tQ<`sycuYDBK`8YJ=CssJcbcQ<5fw zAXdmJ(rCmKC-a9>RGVU{T%Pp_Vb#SHAi7wOp zyJ;j|hjh1HlK2~evkn$#4gv_a;#e0zu#P|V9^BN^b;sbqwl&4U{_TCv=AMnieNNZV zmVv?I#^GLP_v+#8#r|zQPS=u^U0Vk>J=|4v26lAyd~B<;W_$Mz)GKzaLd&AlzkSDW z(OI?9q2APL&eQKgM-=)`t9o3zS-Hc(N;{)*)iC&(-{h8<^-i!U{8;;d-3j`O~b|Rjaz#-n*q$0iyG?QX$I!a zrh&~pn|2nR9o>UNJzW@g$k{ruy{}EbhPMy(_igXl+{Wb=2QVQnELi8-fh8zq9~-+j zJv_VvKSMncfH8jW4#KGy3+dn5vwgrB>VKq%&>Suja4}Tef#=%OU{CjE(@)o}0|Q%~ zO#|C@@Y!I1lSP|~{R7*b07Yh%o4U7dwUC_`pyQ6^D;LEOq7&VQmFge{gwc3Aih}^p z;HGUmY{!cS2L}x143>0dSU+l!WFi0&E+I&@*5;m`9bBh#*W%@?42g904=Ds99Fxu> z+?Zwbc4MKNovyAO-J7p*dIxs&Y)92Zs(k~S=)-k+j|!D^=$7M?B9gj?!ir47VN(M+F93L-8Kt^u50UB-LnJq z9>IXrsVtzV-qJm^MW5~J-`vx+xx3hnl??TuLAOCb5eV7TUBr9`b`*!4k1SrjX35GG zhKQV@o~_`6023=#u3fZt<=sne3rTay_I?aZ&cgbX9i6U$t()!ALh3SHMCjhJWcgwM zrhAA}=pvw;flZr+2L~~JNTQpzbjMLfq^{gSY8fKs5>W%&y9Uj&E&Z(M+2!;qiqSnl z3*y|_Gq`a8bZmeT_RjV}D+54X#kTJL?P$4b_2RW_*LU4j0t{VUDC-4)aIqP% zD1z)TJ5;@W$(luL)-1mJ*5&I1?w*H7!-L?$t;5^4JByUn*Y4SY7M#zuS7Syc!zy2Q z4R0SF>e-C8WIo6ir92{S~J;? zY~B;xt|85uCxpswy$lL;Q1fgpT7e6;Z`y%|MwZ^$Q(Vyvc?rVoc^HhiZD4Q@>wx8B zRc_Ux!WKFlnGXF7_Vf-p+tI~V2STu$JOIJDeSkF5t^D4*X)AFO40ziB8ub=?!1m|? zRl%#9dmuGeL8|vdime&mIJ9Z7e`C+Qu!w82k8d|Pv9~&v@WwU`Yp?DZ8rZtChYRCm zt$@87QU}tv4;sPQ9kh0~_v`{bHa!du-PZkZkG;NCin3sM_;5 z8BD<0sLIDYceeKQ7Qr`m77zFA0VhHK>~N@wx>k4Z3ShuhZ?eR;t$XNUXJ_};A*&|t zqAa<)dxzm`r*Cjzm$QSS1U=!`R$Bux0U;4^Kh}vR_D+GOg9al)!t^?r5COLblPZ#9 zwopHEE~aC%)}X)Jphvm~dmQMBP0?J7TY9>-4{Y!08c@w`hr{42P>O!}5I>+YVhTT~ zXlunxh&B4$3>BB_I`6^mT@X7UaHyZ5_|rRjikr4LcMOtuR_>r4Hh{(O&dOD{t-O74 z*X>I_V%fh-S$EUcp6>0#0E~IQ>fSYX-4VZ862Dm!zxjy6iEIV?c5kHQ4|-U!a@FE! z2s~X0oODAO*b!E)iOe3(j8Hb9RfMQ$Sh)%o(5lst@=!{f2Y`U$mM-+Qxo1ali_<-1 z0T}cNX?gGJ6?TNX?_Cba_F!Jnl4@UArMH40*$KNur#{HZnPo4!{dU&gVb~p|)&S$h znzgH!thmz@8Z%&s;?OQkg=;_+L?KNBJD^d-7BY+Pgg8>g-cW)(2Lc2m=_3YjO#R);6^c*t~*7Otu zO$l`iS|1`BHg9#7u-ULt$-2s+M_>;Q?1a`1I)NEMbZU<}%@PuX=nndYir4{Nu9b)E zg=s~}JY;6rWo*fkPP+$T0MJA*P|ztY+1@)4UndEN1a7JXcmp49-AdCDeWQBM?w*aD z{5F`n5r{CAO#?9gR8?(__ZbK}9XYUyx|Xcz8|>b(#aRn2>nvWkYPH(sC?0|;>h3e%L!YbPP z_Tg=&FEY(qL*2w&7tH|Us$_|w5fE^M{z|>#63M{>L1*khfqw{b-_?;8( z+1#^zQ_n!JvzFVLwE-s?h?IhYM)+DT`u{8KN}%kjs_d=gGa8{lR0fd}3B(~aWiSYh zsVPZGO;lANi273XYYbKOi(gexLAyzW#)u3N5n`jRC<4I&qF_sdVpuo?1dZSj2(*dK z5ELb#KvvredY^mtdH=mz|M%)%{no0w_w9G?x#ymH?)ct4zq`4yNoeE3$*Av(%hY}p z5&bEuSjQo-j)S~LGF%2N18bG90bcjiTtam_-dC!z4gXpXk6AOsytD$`*T8vb7h*7 zS(Z!-Few=5nHs?|ZVdATKZi~r-Yf=&^Oz~?R8==QB1u{+Ghc<5EypnL=ZnZuA#}Pv zMTGh4@W>>(;0t@ylu|2RteK+0v8inQba31jp85Vk-5S9}vB%|L|Co+kBwHf*12Pa( zMwS}m;h@V2nQNE-b-p~D2w-salMS?cMKF_;Chxoc7(ueamP(s+T}+OFRA$M%Yk;a; zu6GT(JKbdh_eN|rbjj?2P>1XUVI}DaYYde!K0(yrM^mQYN~plnFXXUZ%sVjz9ahd> z9g;SfD-x|YoEbGXbv7+;?&@ypbjgPeE9%;oqbKd`#Kg6$uD+$IRmO(1>spp$ zO4f)OB8HV^F1q;Q3uHzNBSxh9Y5AwhR1NKy}5 zn_4^C+gqZ#7Nko(QISV`g5bsre&gsiM5!xOLv}3<~unth4#*_ z)Pq)ELy4S|shZo`nmVKI6{wKLE*D*J@x^}Wlq7*=HPm%BMlgZ4t`_tG?QQ7{DDVt1 zhh^I-$;nKHrs2)f?|&wVu#X7Cg~}V7>Q^prZd=xl(HeWAGDa`yEy}NH74!p{(q>=6 zZrLWhQDQLeTdTd<|7}yRV*Wq}*3Q^C?2~nBQvS1>R$&g@+#M~0xioh+ryjPppIzMS z8=EkDYd^PWlQ6Z30mYrU%0I(+TI;Yg-Vt@TM_ru_(lD`_!v=FwKx2nhTdP@9(U#R7 zv7#oP&i;Ob8FG!Hnv8YfCFd@0{vxJCJFMhf~b@-eir7hC2sfaZwXb1Zz zqu#X`EBpGV6Zd|e)RP@TmAGCFbf+2f4OF45;*eP07|2c!qB52Di4eyYyq{{y2;85? zs#^%Kjix;p;s)W?}9@(Wt4+5(Gd`&gENLCa5kRES*FdI~9;taDRJy__OY?z~AX<*s+ zVi7^!WBr4;6Vb4O7#-~~95a{^pQT@~OM$IDz}B(K9f2?tB))KhO{I4jYkOJg3}ao& z4E%CD3Z&_iNl?$E7{VZSYx;(#WvSYi!z@>^f^<|I_BRJcW2s@ruq@2iP$*QVQWu&m zR0-L#L+97{|F!xC1~0Vq&6eo6P@Lflv4SpCL`ryQ2l+eyVlC>E<}{YeV@A{`^YNUM zigvzIe9wa26zl+HBVW7N-y7rM5M(7|0WmCl_*7CkB z#!$_J*c22=<2_?ZRO=z_&;4G}cupqEvac_Fj_=^*g_HLD%ooa+H!FE;hiL>Q$6Gpi zmFwhHh;AK?`CWM#D4Y<(qW!zhDOWX=8||+e?HOCslh0K(_D`ITs;W9Cmp|VRFI8>1 zHE2KiEJ%jODzW0pXI<6QM80ZdxVLIBo2|lYwP^9e`QzF7STapb&&SH5O5ej(4Uc6< zrl1Q?&zmaWo@O9bx}}%IeXi1#VFi}2s;sP>~R2Z2qoqIES!z+-qGB|K0`>Y|`ei_G8DSYz4;LjYKkwC7@$WpB%Z9Ov{r;LYBS$mobxg=^niJM`;4AU90j`LMo z#aXG)VJO~ju(1MS8b+v#7%owU_<6y&vTnh6+~lTZ&nQ*LX2~kK8kC<7NRE?zm=S{f zbeZ@}&L18-!xze`NnUu&s3fsGWoBgjI3h&-1Ze`O_B9wzu)~TWBwN*y&&jsYM3ooU zXQ|DNeT?-P=vN0}5q7ooVq#%g@x znLoep`|r;@I{!EG-CL6Bu9|&)dFICQFO{d^zn0y6K<0-B+;@PRgD>*pT%IhuVpitb zS@>1W%$H{G8p-S)*)x)Pc69xi%Y1$Imf4vf&c1JU=JEr!9OyDn%zh+;N6(MC%u3y5B|YTdb+7e-%1^v;jo^0CZ| zp5UR6{Uyr0Jo*aIzkfWAerffd-pnhb`+@$YCyrj9{cC?_|LEU=uIrDZHw@f6l==JU z>p-^;#?e0yJ#v2LbuZZyYvSmuUn_g*rn1ayHugsOZ6?x6~O&)dbapJ22{AuD@;_`{9T>pu`V)@Fq{l)M@fJ?rc$jAR) zDtH+GEkVBG4ZawkdE~Qu0ufwN-*TNnd>`?0gvc7n>^*jk0gCW`sx5*1N?uI zXD8`HdG-=NocvAyZmNVl#7!R4Pc?DrQREV~#pE$PY$3hnyB_pnSJ4@oenMpZG6Y6hB4-Cm%lxpHmtXIGMPW>t@P%5b>XrewTQ?!u2)gYvuhG>COJFyx$4< z>;Ru)_3}7yDevlCh~TpF?)Lbxu6&Q;W}o|TTa3@&Jw1A}Czam#WFW7U_sKTT-hEL6 zXZl%5{L{ou4@)mnK4x!L-cI5NlHSU@in!_F5ae4-&bI)U_P*+3<^N{#c`xyy0AEae znz*&27UCNM{2bz&0zRX}w-7h`zZAIW=M!hEAjhy^SCjs3(p!J{b>iCt{0{QD?xV`* zZ{%a`?lIDve!6{qmAjn*ZhC%-c!v71{%22s--UdO>G{W$$9@ZRl6;JR#V1t%VSigq z-0J-oCHU_GUWW1O1&&`P=RS`g>ndoshRe^EmbqiyNdbN=@p%DW<#E`vG!R@B8o1L) zzm)XwN$0ON;;RFEHSucVWAL% z+sxN~gwgu>yMRl+XUSnZT-M%yPW+qz_l~e3|Kuf}+%08&JxBW0q&Gdk&V27$r}P() zUVeu{@*NN8{ZCT>Uq}2nP3BGqz3A=B{Bfi6h_{l@=74?`>F0h*2`5-EvxjY@uOOdk z^4T5Wmy*w>4NAD14aw}pU8)5#`@E5SDgyi#@|pg;@|kA7R=*oauWJnTRVwA(NBVlw zKY&p5Hcfi#SMMeN+Uu0i`hllOzcHZSPWoF&{~GLDF0<#Qq__Eo+4JfE-vvI!?Clxy zw;!XT`r`R#^<}Czo%zz$G~pnGW~Rr-rCpGcqV!nB5rz{gO0bDJVyf;eO~ev z&(>A3ymN`)|7FGR(;&{b{Bo7k+WSJ%-@aK1|CRJ6PX+0%UY3=Rr-OXHaEmhd1o_Ab zTamN;Rs}e0$Mv$E{0}4j84yqOurtWl>|}2szvm9_sR!eK{01$T&Fii%!G9C^FMUesH3)3K26-l!CK-Q0{jf(n*w|#@ht(~L;UUlpC-ONz%L`dlepRKjl}l`_^rhE2l#!& z50>NMxQvgDUq=VHjbHNu+{URT#I2p$c(fwGZ9G~<-1KSV&QO5c_%a>fHoj~Ka2rQ9 z5jS~kzOjY4*^l+lcL(&=KW`6k>j!oQd~ChHH^6OPu|L39zz&P`0}r8Iq`$IX#5h%} z$2~!O>L#wF_|xw?p7`#ZhAO#?S-^g9WV{~-va-`Fb)e_W=Y4WxgG`L;9J4aApHPUCO& z;;vRcHjaD)^u_AM?8H2(n?0DFT=aX*(D3gv-~0C{ekIFm_Pp^L&DYjzR<6wfZgOrV zZtZA$2{|7FexTo=)qIbp9-b;ezZbZych+&;p;9^bD)IFJJ{uDiq2EmWVe&r;xY&<* z$(~F6J;d+ct3ZzU2Z^8ZyaG29?;!p#@z)mVgC5|L@Aw~7LK{bhh;Iz=G4fe`lG1;l z{4XWGeX-)lqdm)YJ@E%lQ2dVyyRQ@fc7@_)8n}Ci-~KKI7LxwA#Q#9NpY+cXU;b_d zXfEy*;wMwi50X#j5ViA)Yn9&S35OHkO?)fqk0-uaPRQdjyps6p>l7a%{i(($z?U2S z7t-`AjXuB!jQ)D1-%S3Kz{MWkK3DPYa3NZ1eP`?0cKP{HTrfX>U1|J@+q}-km+=6% zeUEhkZvE=U0Jna1bAVfW+#29EzHAHd8z5(~e#7?V%w549ESHUgZnKux%4OqVd4S(U zecs%o^jFYsze)V8)r#AE-ujse^09v79?~B~K3q=3<5xB5VV3@~@-7MRQture0sk_0 zq?>b}%0o6jD5jrXpm%sL5WYuv!Si{$+rjy*@p*;x;d_LG{XlSpTS_^N{y5-e?ilBG zr{!q?K1+7rD~wXZ8sJC5ZZ{7pJ*Ex*sv~~;PxXF1@n(~Y>Cf_q5+wXZAqSIYBX3Hql~|Ku74&Lw_2@oPsE zSjO?R!{a1M1XRfe&8rxKS0tH%R~Ef6xr8`DhMIU-bOw zX$o9H{GG%%WED7ZwuYxkz0W$_ZDG40xjWI*+g%}CL_R-zMzOcCyp6=aM?o%NlC~0j zhDrYs>A-P)i}d5fKlOkD_Yl8?cz&A#>zVJZCG>M8=`X!i>1`a}MEv^a6hB!5ceBTN zlL&r9`u%LbPt!hk5Px*L5}(I3JBeRHJHL$hABey7BL&tIf63##Ndy@zxTGGxc%yfyY z%eevK|Gri6l^VE7Tg$&g;G8^B#{I(?WPU>5ur8 zVlVU23gQ#rQlOuBC-K>=Uv}T_qb2x{lYTGtQ=3sn>xggNt@pns|0{{N%EAN}U-P&d zh~G^6uhYlwTg2_Bn6D*%9`*VCTNU^)@$Y$h-XwwtOW?c6|2Zns>~JseibQ&gzDD}x ztF%H6Jy@R{gb9+=*Bdn08(Ck+5dSC_#4>M_>;1rwn02f>I2gZ9_4G=U{C_6-yz;1` zR*&Zp|05g3=a^_f_`|Z?xMs*|aZ{wXUyXd7{mdoAbF@#h=g$&<-^0rIKgj=j;`@H7 zKo#+?63+(sH;GrXL72VWOZ@0=WiUw{M-V@X_*2g+a6a+pFmEi!JY-)mo}NVd%4I5eBNcrh?PSNhl!3{! zko4~yRQy8nUq<|srz*f<$#oL{3ES6^r0?-KZxX=-aFH_{_b(xz%j82HTn}mBt|orq zhgAM~2k8UZw-Nok_9eYH`mc~a|6!%K_rJFj|0E4Z)`xQ4NxZc|@6Xd@?tbDsZ&KX& z|AP2~P8@1wmPOZ*@1Q$m{$ zpG^G4TE&kepBj(zCK12~weO#|1ns?pd`_U^UuK%~fLA2aTXc%_8`(d9gbywye%K=l ztYklY4e?jEDE=qnUm?De4f9wR&OX2el6M{w^-YbAu0@i> z9nK)(RKGu%jU!S*%JT*Km90M_SH!7QrJP+>w^Efgh|cgj1<~v)dH(^t6n-WVj?mc0 z@Wmc4EShLRA?t(`)$u3usc+-6Dd$H#x~AXGJNr^z9SPA>7>;hsQD;4^ffG&%7d_rx zQ2eF5dE^QF_9Q--orx$EKv^X;II@7w`ar~dU=Vt z6>mT|il>>OtlE$ggng`E7S=gUoKb6Rv<$sNXxH#ko1}3oIB4KuDmotUJ_BU_sNPf~aT5n8e>i^beb2_J7K#f>IUr4$8?*|>}?&lhWPydjfl8R}!1cVfg=1Z}}{m@H{h0>Nd%$b|Rp zATCbhN8Vdi>_Wyg3G+|-rKRHNpCKW6o%eR?y-ElV5?~4E{So>z@f2MBXBG<9CSJG1 zu!DxYR%a|u zq66;EsmUQL^EXnc+HUD^5{38fuRzJ>t$syx0K#O3%1YUHv-k?Kjz%P54WmJLKgQnG zaY`<@9h(q8r{aYnk+r1NoN}?71-&o0Ven3*DLv@L@2w33$#&K}(F~<~-KrNhCXx2n zrCwmXEfxIo7Bu2DkT5^rpMq6UuPCv<7Z9*PC6Yn~s*Jb~(#5-JtCQ}Mt=WkN?3owC zdp1w$F6q#xpa<`Q7a7}VR8VEXQxB=>a#b5??DpD}D3!@op~>t$r75{rvHAc{2^B>c zGdbyiBGg>bTx47=I;zH&>p3Dx?0qP3K<8_zH6GwGmC6;mL$UFs;IVIB&o!YA?fKAt zveP{>Y4M);QY9$Ztncd*<|2lKgwjW;tIIguf;c~M502Ii>EeeXTdFM1RZgrOg-=+7 z7~g$3WHEFR;x(tz@58|{M&&p>_+p!9Z36PklKI1ZgzD;>=Zi2d zA?DEj2|V+O_tw-+glGBwkscvrY#jdODt)I?>D{4J$_^c#<@_|FvVVwsazk*q9pAZ1 z_+^>Ubh<_7d^(FuTFD4(yih&z(+rh^@V_JfDt(^H-?PCe?A^;&`d^sc7XU|}`+Nf||VR{oAs7b@vA8?fXXypFSX+Ak6>4ApN{sRACnGeS12+)xV*SAtKmpGPdtB z_ia}`W+z4;rhgm{#AMjaV*e19KBTvM3!g#S!xQQ4JJS8k-{?T%FT1z!C7>dyxhc&T6+6lb;l!`Ue3YG#cm_C3q5H2qB)#9S)km`0AnbKw=s&-Z;dJ*o)< z^L1hR3Xln9NN4Hs`Z9GXS4|@i-ox}MBHVnB`Hu(oZ|RMGNs07x>8Iq3SB+A`Fnwc* z^jSHOj_WG>;6Ri6vNGy}&JyYOy-79t+m9!y3*|OczV{QELjC=8jix{Hokppl(8^`u zaEbIgH)#6BCG=*a|1zCv=h;Tlap?>!36MQ|h%o84N! lBEywZCK4mM^=?In@xD2Eh55^S?_%kXd05fU1POv$_usecnr{FA literal 0 HcmV?d00001 diff --git a/build/test-objects b/build/test-objects new file mode 100755 index 0000000000000000000000000000000000000000..0b5ea66d720fd4a4a5bd5e050725260d42bfc60d GIT binary patch literal 46384 zcmeHw3w%`7x$oXHvnMl|WF{dAg!k|i1VVy{P(c$QI7oP?p+ZH6kW5HwUQH$#Jc4M% zlBTK9(^k$cZSB$1YONmZ!_ru7@D=(v75k)~J~%D5LA2$lZMm(Q`~R=Uo;{n1?RngL zf4_U#n!VQgUh7-m`qsDhT6@pp_R6YN9@8}R|5j_F^NnGER!2{v@9HDpS@k*>q40-YMF9ptmfq{{B} z4^yN>ooc*YU%ABF4O8X)*%Gc(Cm(Hdc8$cJy&*mAQjOT78>951xdh)@MSo*@dXfs^ z(y6v5#qe*jvZp&O2aZ>{xEqF>uS@Z{)0K)|r>uk5buTCD{xkJ$P<)$|KzF)SwNIzI zzH7ioyZo(}?&fP%eIxZlo~l5ns(NF7Q{%Qp3+Ff0&1-6G>Fk=F>oyvmJ;nfGn%^``Q4Rve%cIH~PufEK(d^_ezTvZ%pW1qO?DVHDz55%D zkIuMg=bNWV!*-B|G`tAopT3CGe;W3;q?wn%bM=wGB7N>uVaD0I2Ec zNVF$qsX5Wykw_XlI$GM=8(Wg~MsrP5Q)?}#YP)LU^^GkxO^vrEP=tTgQWO}QYZ_aO z`u0S^Ado(`$hfL%_3{<*1tkmZ+=7xzjri*7weh+{dt!TIM>5e~y>>-YYfGZKW?K_Q zZf|aFQ6l4#G$SEe#VF%}?|JP1G|U9#CSdjWDQs-arI$7+Sm(G#xU|P;N12z7YdW6X zmoMSxRJ_yh4GL~-k$4S%NWlXx_-WNyQ5Rg7OI`4`3MqHM1=sY)UGNvmC4ISyuUem@ zVwu#J?W=gJ%w{1mZ79Zo1Foh5ft}@mJL68N11{!OL5*?afIH)LxdYC+^%dJH zbA)Ld5wc+`?}kBmNaQZuE?D4#1uj_Nf(0&E;DQDIyDacVWYV8w-LD2>z1EBC4I{R9 zAn6%C9_xNK@QkQp_|jhiJUrtR?vcsm$g$i&-073UxMsY>G9M*Q9~b5Cv&=`D(*vUX zZI<~+ar&?*Kg}{9B~ITb%Ka?!5#scIQT`Ikd~`UyN0h(7G9Lp@x1mgZ%U)aE^Wsgh zo?pefPo3RRUDaoeo&weTaz7Jgvg}6GHeB@Qb%ycgeiZM3fLNb(E0ZPXl0|6hkAY)T zgTp5yllMTj@r+7Ae~qBO^lB!v---2{jUD~nm9eAeyfO3n*o*HZ3nAbUB_J?-vOY3- zWs0Br?OB!!UZeApjj`@!9|ENj>v=hu8|z*6I~0bCx^N$=MPr_~P9baF_)L9CWb$29 z!+54Xm8ZQa@AP)iZiI~39j|VMrR!q7z8SNG*vfNd1JCdM{5!+L#y3GUJoF?iAM4qB z7?4=^lT3`xS!jJ-3E@Zk`7DTHt|&f_+ys#u9O@uP-`)WxJ%dBX#~H@p-Um^78)AD! zE_N{1_i;hc+b1gM`5s9ZptDfr5ps4v$;3!jMIPUK47s}oI#=3ElBDOyWcu7_!|2)j zMUeE0`{kmB&T%QeQL%vi6_x?LT9pH*E#?LBUwBY$)Vik9LEXmWcIkJXaT+ zQz%T7w1yhdf^R*e?AMmbexISv(tf*uM`P}zobD%?Nc%0ENBGfxSc~@im$@v`em@hr z!J$h~i$lHrV-4f=NS>7gzSkr9(tdq?(s~~k;+0Wp#Glm1A}s?$Z(|ssa%blyt5fEa zHW%g_g89I+djRCLII0q9eWXNGb!*fONqWxYJinJMHP5rMVS>9bs9=>J%mFwHnHQ1iUHew7=V`RF&-xaM=zd9m z@-M@~-IZ^d-Mij0cYi~`R6ljU8tvKjYWJ>Jjh$J8m9KKC@=Y$NhF$|ptf%r^tb5lv zqccnJoY@lVtvuJe@ztI@W(Lc}I;FSrRro7f(=S+_CMwpm0f7$bV7XY|ihOT*0HL6> zKoSfNjRU=u>mw+oQLJaz(3v@a4aIuPQ56~jQM!nlPX3t&BYGpNqBfEg;*Y69fGT}W z6C(dG^84*dN?A#)r}Jd2XX6R5oa`+x?l}s9EDXuo z0m>R;RYg(II?A9oQx;-TB^J8Ur-onbK5L@;lu^flDzl)o>Du;mo)XG-?>ZreN+b4u zI8-)J&pvCEC~~Nb7rDWq0Gr>vYe9 z`dUf-RhxQHQ9lf7s6N!Y!Pi@P%4EL}^%_f_zHL2<@QCgK(FG5X%yy(~(cz~brBKkv zdPV2KFscvj{)FR^zw+#vwL);Yulr;cY>GJn)v$D~Px#nS&jz{=MFkWNm7B*!$C1{d zo+LdBN$eiBa;9j^(f*rdD_=mcmo_;ga)U$9ofEB0bwwT=2l{r>D=;!Bq(lips9-<5 zYzz6l60(OvgcFf`SU`{Va{~m$$8GXw75O!?PSi3uRLg0muV^=BzSxrELg#NPevVV{ z@38szDgJ!TkI|FvLMexrPLHX4Iwebg|2M>(R97kY6wVC?#$b_sWlPLpiCdIvMN+ky zwrUHMYCHbqv_wpiE5rTiBC0}<%u?i6kzB-+!J*BZF#3uL9hL|ver3t8+59hv+~81_ z;zx`w&l6!>#DBX9rI<0`Iz78i!ZH~7wpAWoVO!-pnIhpRY6Yp4Ly*82<&IyeVdqs! zst1BbTggtP+l>o+Q#9mf9UGa>UJh$3B z_b8r@6pvkR)Q-m8yH3hM^{OC0+CN3gSzyb#M#-5&Id*V+Qjt%US)|fbUlqB*p(iE#IZPApru8Z%2hS?B*lo6)PbxW`lw)f>Mv>#$ zh2(2(^395Tl|$=Id`w8|;1h!CXn(0>58Ld+)2ToFUug~Bh_Qp-%LqxtHGGKbVaz@$ z7A1YTUj*|tc-*fzvQS7Xk{Z8=A@?|>J%!Onks^K%Jq2&X(j`w$-}!WZ#NU{bKK%WR zCQ{ST4NB={Qt8b?ReEJYDSho5&`s%CC-j7L+b1U|_HxNS&SnoO_5#Tch006Q+I*u3 zZ_YNK1dD9*N+GT21tEiNetMd_&EJlwHp6*_&*(Onp5NwD+nM=jVb9jxLiW-AwNmjK zR3Ke!kH`%Uz3+9WYg8-pb&`C6O@4(UpF?tGre$f7n+{#1*wtkJ2F8V~?Ucw34!!#C zf}LhsoMxs)_G28B$9lCd_ot{)nu)K*V4Pz@1)AxTke2Qm_lK34Kx&+s2o29wu?i7e z*PfIbb2(EneB5@Ea&5AnjX#U^tUX@UQ+W)QJ0?Rxqp0p^KVO%iX&2dTS*6+%Wn1h) z^&Umejd_rtLj;jc_bKv!Kbx|gH!Zr;a(@w2NBg%)_OILQUl6&$p)W~xTCP0Ja&L)8 z9Xc447nb`bWJ$}_3u#4<3gNU|4Wy-8j_-d`gKE08T&z6SyX#o2ckS_Bn5GxctLXC8 zJ$yE(7=F<_-*5nD_duDw}uxW8cGv z91+3LR$=UR$dbnHGT8IN#IYV4`_0L2W4{%08hes7HmZQ3rK?IyyZrQB%@QE!%Kcd628Vv}nqa4yH>H_*7N4Nf%sdCOq?tb?q!o=5!fEC{NK5zW zk7s8x^QOOIW;+~+_0D@@Y(G*dsx2O42& z9X?J%L22qkLR!%aLSveGDx{^G`r@F|)H9?<$F}P5;q>bB<405n;FQ@qL|sSw|4BCF zu?gC2$3<>%=nH3@W?QMqKPSoWw8Tb7AA7 z{lApL9=3)3OymZK9!LqJ@i?hJq{M`!O8<4 zBAYN)HerR`gy#$0P52(=+3S7rw9M*z_lb&nH$oXSN$qaijwC|~F#V;dLU-NJoxgT& z#7iRXr=CZ+8HBP;sGuir|M`MreH)4;1@_=z3>pTeMWF}pBYq{>(`)xRYQN)EyzhV` zJUL5j2z|U*Bz<{ER`%?TBB|=>3n0O6eKaz=a!+LT+WnE)8}EzEzVUEmc48nhyZLxz zcIU~+>|JMj&hFbg9kh;@hI?ZumkkW=Ek(*rn!&vbRW8<72_^R~Mlsg6cLS52z2!(E zkAIa?s(MAmD|>|+v0kB6tXHboyH_YImOW2W_VsMN!hvlsAG8B+OzQp7Tbqc_EZj3^{jnxU*)qfAGE5x&(Q|H_(W(`OYz-exE$@jh;?Bp zZjYn+Y8-tW6@mPSTzjrp19|tZ z0poT~Gp`Ha(f*4i^(SrW#}su?3V%=ve@2ndk>pJ_d9NaW>7?+NW0A+p10o=a$?U_5 zP3`DiYO`%pZ1*d+=gR{o><9LZ&+gk0WEN9BEWE#%P9}?oQH-i$@5X_i{j*r;x9|H-e(_L9S?fo_>m+JM`OM4iEQK{;+%3 z59LdnUt+75&pJzF8~2GK_tu^gxxt}7f}ywahs%aR5V@O+Pn5a`O!)@y9I)tqwQ0pA z#Ifhgvqh`aNIRz90vsDG&!LPnb&9|CtZc=`2f=m1o_=;vq7YhJTR9E!8wK3K=uMXhrs%F2yU=gMw#DbFL3)ck;T(H0e3tX_k z1q)oTzy%9ju)qZiT(H0e3tX_k|6dm1?>%`X6CKHp`5o=G^O>91y6ydm+GIybt;~FpSso=tMI#5B-NGIRYzyky(c=O1MgGiMeaC$_?lL(Z)&YkkW0iB z8emPTlKHFxH6_~HMQuh0ejyvZB08_km^BNc+LG<@_?6gN}qoD}3ju2eZ)lz=&e zk#J;zQUXLeS`Ry;+H?(VOH;>|n&t$Rop*&Gq)Bd0>@;dyo0^P9{Nk55yEkk)8?s&q zi#B#dTUwLRnwBV9pV$sI7a}TjYHZo=(0?7Pc9dx#XZbq*ZrOofnMkxrm@t^S$%<&; zbi9JcYC0MO<}|#kd|jdmehUgE-(6k_d=kyjcz1bq3xCR;!n?~W zT05n0EBWs7xu?L;4-0#RyBKFAfhcM*0h+n~*mCV0gF->69OWA87~DBS;th2>eKU zk)A`k>c`;63#O-#E=HRC3HXuTdjkAOdw&Xk;$H$k(&2vvKhpZ2gCFU?VB4+OXBbyv z3w1HlZP>8gg!JRsx$i=H414tlk*>zenIlNQjr0W4HF#fk4(UsH?N@9W#>a-hkM!$E zHz9ouX&2JV@M8EN(z$pkegtVT-h!M!x({g-FSL0T%ET~lz1A?h^33r$S%Lkq4dHn4 zY@GY{@bG-ntjx+|G97;l@wWl+{RD*bR)veNj)ZOr>@lt!clpJaOrJ_HdAH#2G4x3} z1of0d0t1pM3RL&~xFJ=c?6@P7l~CFt9ars4Z+ z{LcV?82CgQeyfdt3-GhR^K<-^{D*A(1n9LJKGU0~-`%!;^gI3-?MNE`mu>znz~2F% z;%^92^4Hq<+kpQv@Xw^-pR)0XfPe4z@sq4H{01BU4d8o$e{O)Tm)iJ4z)!|l+Mb5rX5+sBd_Bh4Ncf)t{|Lrjdm4YU&Hong9FrrpZvw`s2V-?4 z{g(n?gfTo4ehcuk@CM+HH2d6U+vhgmd)@_q2>4fsPt*T4TmNqWzXmbmo;3W2Z2ZrF z=Uc%3wEDkl*Z&sq)rc`OoOn4r#Q2(k7{iy49Pf7jw+eQFUkZFP@K-zWo=RK(7U1s% z{ts#Rvo`)V;F}QB&Y&M``QG1nNU##1L%=Uaj1%K`RXFb+&+2gTN4%BcXrHe#JnO^O z%5dr3{#bZ%ch*(m@|N)8ig0N~c-Hc8ba}XVc{p!*I3Ug!IR!aeAqS!F!u5a10{VOw zeIAQGe?_0S;#MOnf_&<%5Pi;ym}A_;{};+`{az@SO5jTfzKZ{ z1}n*ADPJJ#eK4HQmlbDX2CAX9&y#f;^gh%7UQx2PAsOSduq$Br0#*_@@6D3nMqvER z2S*|2u|{_zU(9@|>B$Nd68H*lfzWg$hKFYH1Vgit1Uy|VWLqo*JueX*5`}EfCy2=j zZ2~OEGlzxTU_A@TW>kvzG?jR`VucuwKw z9T%a1JP%i)-tm!30W0=g4!n0lE0Q|j@u zFeUttC@l5_SeP1q0flnUn=DMrA3`DK;S;KNW=;q$u))J+kM|-`*yQ;x3$t=A0cI=p zGrY5d6y4xqpz+Slq3AXbzCAR&^F*O*+&4kE$1|JiF3PR~=RPC&3zo9Rycda|4b3MY zFZ(v!JwL?F8w&R!F+4w|DmkLb0VBAGsKDrbNXB2v{53#N$nw!5-bk3X2#d$x@MA!j z;awDA1b;~(1>TPWJu%=d^}K>iEV3bLVZBpc-gc^5M~1*DhcUXQF{y#p}+ObbQX zy>L&)NiTKwQj9eXIR2#(`94LW2*4J-YOReIxocUJ-a-fRven-CB&Mgb4;{k1TZkYX z?JN+6x05hxMRQAHhtM94{kDx2Ia-h7fJbSR~nm)v^nq zUv-GJ{39{K{3*5a2EgdOBJdUB2sZM*fSYG@*7Jl&5pRR$eG&HVNtf_%19P1aK1_^o z0Eh6eQdD79J|<2nYBJTeR^%=qgn4-r#%9sT=EKRdAZ1)d8n)AjmZEC&YSFR$N{*L$ zrZvn%&wwuY0m`Zx#k{`}w@@c;AHtuAB&OlN75S_Oz_@la!9lNFUw}4qM zQyb$rROWp72biQl%$HvWl=G$gNr4lXYlc+QrkX_4=F7sg`LZbBZH7opshlx`%=(qdGCv3Rv_=?{Ho#@rss{o_&K5atkH*o87(JQUsj+3Kry-c0wKm(Il20R zAj5B&&5)d2S%{jU0VMY1 zI)=_@3Xk;C*}c?DO|Cg?Xfw(Ywrtq&a~ie$MZ1v%3C|Yus#VlNTX15v#sry{6RR~Y z!W!koYK@O9ML|xi)`ZAdc&MCMtx36@B;~|vO%???v0Bj(Bc_~Kttnv>5kpR_*3@tb z3UXq#rsZFSf}B{bnK|!AK~AjJMWP@lR%=$yM}d(Ot2H}F(Q;z7=H^heoLH@SqR>@5 z19&;HT8pwD27aI6{{` zB-xx<@w`Ja@yKC@#eiPl81^)k_ah{xZ?oqe!n{uqK|1!1 zK&YuwsDt)PVuw&ZQ(45$wy`2d^Oz1gl6d`~v4~ktV%`kztyG9ptdK(Ik#&d~9RfJJ z3Z3ai4iYzAtEQvRr05Lqy(s%{L2YK%_-`Pe&3wQNuv^75of#BeY{<^f&Kd$DV0aHB z5kv7$$c$eBos9_$%KjC(#h77C4l;QYZD!G!$fwk-OFg-BNI@?$CM`#GS>runmX;H| zm*BiZ0Iwr#5uYn@i5+&N=ArL_O3X*=CeRR`1Dmq=ki2dtd&qO3I-jp9*ImNi^&E&z z=2Z0yumrsW<;da+G(mW^@M6z_t)tGU8rDjz5ujsl$`b}S0N=@B@T3G0aKc8A3gq1h zq9s&tUyYR(g#97TGJkKcl2qdSa=pS9%fDY_IfKuvdC4*eg9cp1sl=4UE0g8;?S9unG4_ zcm=46&7ho&Scsaz0VMeW@?)hp+5(-)o8i5YH|k}{m7bT)$l;9(N*-mWXC$ojmI9PT zcv#FxMRQ;nz0zaeUg@z`d!<*6g1yrF1jy`_-gPj&z0zaBUg>Q|!CvX@MZsR_eF+77 zrS}~a?3Lc{P_S2eEZ8f((HPNkLc&UqqV1I)McXSq7P`j#BQ&&Edh@}lCM2x%mI9T< zhK9w2l)VjEz0&JI-d^dk$!b2rN{@lPSgiCegY6D<_m(sG2P&l=mQO`2Gzz{+Zn3k$r2aWgZpwQjE_JQvRh8$$8~< z;^|VQHeTc|Wl_2cy~oQYdq)B2qi3?u9KyU;5x{%`1r=LYp-95gRLV zG?M9{qX6%RNKDN0B<9WV@&|$5uMt5KcDt-Y*uf#-I7z58oxwrkrh7xvvFlTG*s?%b z^xYEwDr5uCqB_$U_kGqMFJRA(FE+D+JAe~o!VCn(n3%AmrpYjadF-7$!{1M~Z11%o zn|K2onIm`+%(tL~O9bL8gT#FeMA8WKF4+xv4r~EYkAf)Z&8<*eISj3Y zi4f#BvM9uO2sg&;caX}M&1l4!?cPz0L3JIoWl%1#gYwm&FSLX5zoMjr@)_ji3IW@1 zXOXvqG7EN4X2A~1e?q|y%I~0H2W5Jj4$54x+d-KHJ1CPMLAmHRNKM|b?B|Vosh~Vs zO*h>6($fv|IlNJriql?BDt^Xh1nWzYWN|sBf;HEuI#@Gr2WtwjgEd$DcCfw&WOlHw zf<^6M&4L}Qx1wMN>)j~W!TMno>|p&Y3U;vmEedw9X2A~D5%`lGtSQU+6yqDljeluGGFYD>o~||<;v`<= zN?4RGM6dF)$=(ovK6)(s%puIXmyCwcBk#z-Y z_AG+6KiCSK4AxmeF(zcN4g_g<1nZw7F@xSUAe)Gn9flbyAaBsC{|O5ftU2Xz{UD7% z?~>i1f;9op5iP8sgY|C+;oy@uVMG><$psWJDah7-guxBhMwuX3mm~IxU_EIHwba3S zF3qQd^%6RP9jv1f@`zx~22Y_^ngtPZ>#+HZE&g7LXRt1avVI+`3+76ZGFX2eL@+{y z;>uy%Axy-ffRRNZ#+x}ZSbG9^2A&PT#0rqHJ?_^zuR!&Xe83LLU>#<7#`7~DMAc>v z-jw_lCEqK=1VX2gH+KR|wj>M^H~n!L$Xu0_2<^7*+~hHA?MUr4SD zvYF4}jlxu@w)o;gL}r9)zN*Ncidz9=_x_@(Fuac{;SCD&hL4ru4GIP1`J8W1eCiDf zUo=ecO()r;+^b>Fs878?VPTd}y+OGNg;Jk-gK`@Ri+xlCZ%`gWq1>n5pgfI2%%|R< zyo|yIAI*g~C@gI9sW&LOJ_HZ^0W&*D(G5O73v+WQy3NPc8s4C=&^7iSpy3{$dV?|( zT>E5X#&h*0KxMO`1@gIiGqOJQ2Ic+88@{wRC}H&mB>~hphIy+5Z7AdbiikHZkvmW} zBI3C^BA=_nzhpBDysaP~&*$oAk;#7!WMu`Xn3bX02UYW@fb^2wGGvV)zkTGN`AgnT z0R&GKuTLy0Y*9?`ZQS^mMkGSDb((nE?jnejc#)gSq7Y}%t1LFz3IZ6U$Fk2H!mLF^ zkd8(c2*X-W7`38#C9y+jt;RlJV?~ZeG97djVBJAtVxA;1Z!jqlj}k!=cDt-Y*uf!S zkR;TZ&fp+%({YRoI(B`E&ag(IEc$MVe;Kk7TGTWqsOM_->_oy%D<|mHUwlkj0BN4$ zzz2yq#U@b$lfy&aXe*JMY(&ce#k28)q)kx>L$GK}`4Jm8%FLpS1#@x3)h`poTR&pi zs2-3^Vv`ULN0p;6R~EL8;Vd_w6chb(V1?|Ta?w8rHc&P1 zfg`tz4*Cw{1-${MZudHMllWq-o9H0IL+0@5>#A_J0iw=5fid0y9g^R3t=*FP3 z(Czl1rNXz*Qwj?eZ(l4`j0qKQuawp+cW5}YTnZL0wD)`s&ndj&{}hyI7Rp>7bu06V zR;D>kndUTQn$whN&Y;XOr!pPqD|5nDCI`xF5z367ES0ISyYlXA6Rl-hNu6B0imh02HQjVnuox0UHb(8obwrxojg)KItZ z(pZGOHMVZt_*gSb)-Q+pnoDIrIfwc_XZ0J-ul}H2{X|rMxfoWzpCGG$Qzmel9lH9< z$2y1A;wK9&Mk_5Ix10SwEDVIzC(m(eG5Ip5 z7IK1%I<=Utv@rbK11rvD@zdj^*e+Z8r?m9qi>34iF}|d{JgxOK?wgsRTs{Hl<;WAZ z453{}@o#eQ8%}*9QlG5>>OG2*IM3p_7f()x8JGsg&*w}#@p_=R?s0#XwhU1vYaLqQ zd2!5pfcMBX&?vcv@W`*oknn3AkNoV+BVRyxN!a6~ID`E5u@-@jCK>%aN}mG>}j^U*J0Ab`lh* zRJlAO>mp>Wg~bN}&*I9>Z;j@XP_5kjS%HtCWO3yd2t9ziVR7LW3_V1M#dTY@#eC3u z3CNJhXIosg<%B8#$+5)Sh~VELpJ&zJ9u6G_wm3&F+5R4oVl(Gc0ObW(h?+SANb&>Z z=929*K$*N5er}xjsgOr5*|PTlFo3c!!LX707Hk89=2QUwE5J=wYnJdv*?C6pa`YMB z@zD_flN3Z6xql&Jy=0sW5*MRMnBk|ji}_F*Sdq(5u!K-~s{=~pjIr-WmTwj}k%ILY z<1AP?xJ*>qrJ*L3l+_3GfuDAlPz66iVO_)>S_7?oe1e=dfd=55=%vZ0T||?64}9fz zFReH|%*J^SJb1g8cAOrS#rtme4gfy=;tGL1e7ldoR-2)S58m$EQDe*)&z9jkn%l?s zfa(TR81%+gB8w}$qh^7zFq;mAXdiAfF7s2A=fKJd2TMtScil2ECgz|8=CW+s8@m_q z3i>U@iLMD75w<1BhyStn%#%!f(&uF!`VGLMonyz#b{^a<+BtTnZ0E;zi*}Avs_)w^ z+Br_ObI)$k&T*=p`*(|Wj#tFzcIBZR#zfH!eDbr~2z~*Tj;d5zTrG5<7VHF}#i(Lx z!H5u?4_HpVB3)>cUad)U#wt=The*y04iUV_H70$P4a@TDxS<{kQH!V{%dP>dBV%;| zm~sto_&uS^LrX%d3l<{|dm~0@N`NTr4TM5hguG$6Xpwo**wqClp#GVHFKZ$BrkIk^ zgBJt=Kmuuy;An?zbWMqQ!6jxv)C8a+ z5+y`X$vh=gwBVw#Qeu9A=?#ZMvZg5kRx%128U-bQOBJVtR~O`)qq542Zxc!svOTK{ z7LH|8in3FU%ZFu0=bJOa1tIU`@sr7uHwNGBD&rs?7mL~~X++jFmeyisTrL_!qmD0t zK>oW<6MW_sp%6@+qMkU$gsMV+@=UTDWI2sA*#-;Seb7`*jXL4!O_~xisVx?7Masbc z`A$#o$t){npVbAr^V8iSDE%Z`bp_iedm~u*7$kn|ZmNb^6L9c7i(A_N@ zZ%P)O$k~hdJkjNYqqGq~=kCM8R38?>>(Ni6-Ca3GcV)5e%CYD7;JEZ298YD@)y|%| zXsq316K%NYVCk_V^}5q5qhf%mp-Q7qu_Xzga2jH2Ix1x)hKIjC@>9dzN(BMG%L!x$ zEz5gX6^Z1Xnbn3kXk~GMOQb zb{chl*B7L^zEF03k-O_h>#iT8yS`YD;<4!+K90SlW9XF_m>lqFgL(oi5zrJ22os$w z)G_4%>Eqiq?o%B}8)Whbt%-YROm(`_|2IA`>D_!lc6_0`bsoLpS~4zdejvEMPr@1~_J z9@=X35qn5|pwSQUpGRr&TWh?t-%iIyTA+v}eM7(MFJaY@J+|MGNQD}KR z(+jNN0?X^YWq*a`nfbC6goMt(4OVuKfu(S=|WRgj`Uosg-x9mD>r7mDg?MJZ{mL@i#2AZv$}bC;F-2(1j-Vzk!W zWEC>GQ?%WD-O6KWsg=FP%GsevS&b(!p9p^vohQ37m8-XcfR48EVBbxauih%ILVs3S zIi1$%`=DAUwGO>xjY?YnrPi1=)}*90eW{hVlx>`Frxo09MLJPKnW&*(NGn9+L=Vtd z?14%eEt8k}=%wrdTHf|hi{IZG+^kG_sIa+Lm|K5WMss`K7_nu6q%~eN&Fn6-qOhbd z@NITUXa}40U(}GhPzFEs%c!CLn8I7|*EF0cHT=mf*7U#{r-moAhU>96@Sm}v*msXW z%ZwW8olb8E8a^RyXca-3LffQPSQa&we!`xGKPeCZ(w+LP9Of}tfjqBA+;VfJpudS$ zRw_n~XMKT{dy5sk(=rdFs&NY+nIW*u?J9p8Z$ONo&-^EuAK~!pbTiwQOa6^IZ2oT) z^T>Z$niT_GBj^wzAZsV6)=5{FeH;|m~;eO%LR=?$2T4jYi3k$5G z&)OqF#YEp15&E?gf6+4E$Y{h2lAat{(%)M_ND8dMut0ztgQ+5EWpB2E_lapEnX0fL zX$6z0Q-tN~5VsgoZeny8F)TNNij$%pmb3Zx!l+@;<9z7p;O#cT`1ByAN0XDHm(!#7 zgUpF|tv4;l!nja&^Ob0il^@t_nU7p)Sx;DF@8pCQ+H83-^L3M=!t=gSaFeN?d59^V z<%NNddu9Xh^2m;ByJ5YZOU-eotUUG)X4gkve%bPT#~Q<#0F?#q6B6sK(W3u+ORcew zTKV;s|AbYv!y40V72VlwjsC9XueXWb4314ct##`=K<mYTMCUapJ6jUVwkKK=?Txi4 z*0k3)EbCglXx^fQ(RtgYFrFsRoapGN*`8Qn)VC)RMpJ9c_NcfKS5dvTdP96w)%uER zBOc#yZDn=!=J=|O>sC~+UcW9LH|knDx8b-saRQ}LDUOj_MJY17nriVBIzye#*eH+a zYm-M&CfjjJT}?7kCy!3-Xu$Dv(ax5R#_cVMIv#&$)X5|NYI(9?EsqP_R@0$`8~Q9e z%I-+E^FTz^5~D+&B#3tst?f{owY4YX^*H&`h%aw#Z8GdiY8z_W4Oubk6KCfMD<@%7 zoY~ld&j6$i)~&Cus9wKz^$K~;WmBSMd$K{Ev$tLzOj+G3&+C))tJhT<4LmVXbdoTN zqFdG8+Ps>THPvkIFe;L*&5gC8e5Dm)@sxU*?=@PwbmNjTI+U-^Eu<_6uXygQ?UI!r_*SKhuvbV=eu}aXl_ey-U9gd_Lk0CnI$U(?_6 z;s9D9ye?5MGvIeg*T>X4Yg7lvmei){q1Bbp^piWuEv zz3as}(`WoU{}G+E3m+_C{q8dk;RPnIsJLS@0%<1ti6g*g0q!xv#>qS-KqVI|cwT-w ze3^pl^U5^#I%M$6CZl1igivo@{1Lv1Q!@2=R04?G-S}g@`usBu|0pu1QDErvtu*{G zWHPmD0C39D+Ysfd;%@9>|kLTp9J3-a(o8~cn3 zZ6rMIl&^ouwO>%E;QHek4ewO& zsEhu?3a&pP!oHfg?pJXA>5zv1vw}A$IUEnXo>y@FZIgz7U%~ge=ua!S{`gAM|3SeY zbkXN{WP6Xe;Kd4lOu_NWTwL=N{Dce6Pw;8CAs75w1wZG4-=yIBb3`q_Q^ECTh#G!} zg6mH!bCo^^6kd{0Ck1{92mz9&y3-ct57#TFyd6f5HXluTF*iUGS>`&*bNNT<9-UwEU6c z>a{}tDC5KWD-UIVCYj{(gGPLwa9*7JfRHoVaGwiztD<+u$vy$kH#V)Lywr7{kW*|J zTT?LRK8h`KkAdFSflZ-#h?UVc(ZJG=XRnxfacjZY{&dAJnixQ~8V zs^EG<;rXg9pTko-}>-CycjcxS}^a(|v*px}CkXNJ;ql7e3!l>j|X=PJ1SrxuF= zXTP}HwGwb8LP?g%O-hdY6USx+cOP7`6Y!~N5@g|Hir)Q0`1=*y{b`|5v#oI+{?Ug7 z)(hCJ*w!ePUfk0Gpte2Pk?gFmN4743WgOOp3H+NH&GA~S;S(KTsB4XHZ))9E(-f~u zwzhY~YdX8|k4`kV@n1`*!(p8nDdP2zkF{TW&CYnDCE30cyFd6xB;s|Q&CNT(;wa&t z;b=^zk#dK`@z0Ei4HIr3WY{4pSs<2m>L1d`L{KKzeNa@b(=rj28hV+fc9K#nEPGcZ z6W@X*nUz|c8GKo0@FIZa-a^TOOEZ%!bdX$fvdrq1In*u7tZtb@-OSoLl+COwRXuN4u_Uw74xOp8HbN>}sx}5VidJ1) zv9>Z^xo#!*gVH^?&WNwvysm;lHLyQk$>RjppWBEFzx0otJUc*HhVe0BBOcxwDsuU)~> zTV2D=Q$;8Cu+-L=z44PtVET@d_*YiqiMpC(4OBuKYHyC$HryC~ddY=65tlZ=uN@sZ10ZHqp4{DYpBx)r76%+^WnZLG14#Y@tnT5qd@GtGCa@ zzN6Sv6*+E!%SJf&S>?a)g6*+pY^=%(*=uzjt?`DMmO5BIzIr_n*yV|f-AqT1GUTa! z(@YBLt=^PcVgnaDcpV)|W3dgZ@N!#IsG4cB)VY(WHab&XqMM$+#VB?q<8kGwiCBw6(XkVf%fj1H_H3x_OOt3RJOt^*nAimXKWRnU~bV_xvc?P-F8WG$VpCe=sdYt z1q29nYOq@m6;7oqIr?^66ao$jL7&&wLT+QqN;Gj$r(gerCOUk~^nafZ9rpX)VVI@RsRW16_! z`qu!;y*|xvQyV`ivyA?{52l02rQ8ule=4^g4Cx zujzEU8~i-;UYGfUSzbCVl||7giD{} zuhRhmmHgy!+wZf0u?j7pODl1yl>Y6!-2HzDNGE?(@#%EGlNouJc;oXfe!Y&;>7`TB z1!#T^eZ_nenYoFVtk zQv3%iCACiZ?`JtL-G3VP17x`8sD_QbZ+~`;q;S*gvQD`l&%HFwuiq1#`y2VsfR|0w z{Kgg(cvZ>dtgHP|3AXR&kfZNue!b6jcC92isrWhmd1<|MKk!3JXZ^?d!UNaw^)j6$ z6Z@|Db?SHV8(S6W2AOWMIb}xk=~V7Zru5&mRq-i)t)~{F`E_9;8Wg{q zo^5qrc&n;EstFa1t7t3$zzrkm|F}jnyvP?>j>}EU z_aJT<$#1?*GVzDW&dW_(H3I*&`y|)Lf==%9>)NFF-S+#<0m-+^HU4z{I;|anzxET7 zf4?SFYUrXf)v?2=={W{=T*p=Wry;)zf7%~({AcsD?;vYm$L^Qe$Lzo^%er1on2$^* R{+(Zt6#R0?dAW+l{{n%k5AFZ} literal 0 HcmV?d00001 diff --git a/build/test-parse b/build/test-parse new file mode 100755 index 0000000000000000000000000000000000000000..e35df71702f83b9ec889caab7f07630911d411ba GIT binary patch literal 171272 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Ð5G&yuldOBRVSe?8&Oxr{~cW6iAVgI&;#Qv-|31!5`2c2n|Sptl|UV%!_o_Mc-EsjT=}(x zEvFAHQ@HkIEtBx{S1*;Y>bd6_#+U3cCnMZ@;>0a7)j}9()Di z$bMh03Qtij?~GahXxS9C zJoM`8Z=dq!#EUD}zuWxX^%FDyI^@*tm!2^3v=e8o_-(<2iI)$$`i#p@_f714)CX7I zZoN3+!Lwhx^v)OCCS3aR^yyzlkDqYslowxETt8yMtuNkt*zY!dH@?s03&U5pJvsic z%cH@&|9s*2_mArmi;q2SyeqdGYWa_OaCcAq3*YYOgWqgi`C#KkuRZX6)mQJ8Uw!Wb zl|BEp>C_K?@xb7=>;ARu*h9wm*|llwhwpY8zjgMIxBC?BxqtlbTYl3x{jU25pZ|8% zykPzPHy0jy@`GQ^7z{l6S07B=6bRfnXY7tIXLQ~)X8o_W zpZWerzrDL)?0}-6edm3VUwwLBt*`KjS9kj-UfJ`mBhD!q{g>CSpE2+FlH=}s=f0~> zJgB7l#%Eq%-t^6VuH0_;&x7B6(j0Qn)F+DPeSE#|lv$Nmy?4t~=T4r}cTVANu07X2 z^1M5K`{jU1dyYQk&9Vn(HebBxi*KJ9dUnI2@`<4fzJBGU{N=&(Htu0oc*T>>vw&%ee8GLt&MJZ9mB)#%qqQWNa6VM`GfmDKeb}C z$NER*vdb?YeqZ;m?)vJ@mj@S3vOhR;b4FpGN7hUq_`-}nix=!G`}6mw_Ixq^=;8;4 zKals()h9fif8G~4Z*FVd^j>&aY-i=%dh5jFLn?OXm)8AP`-T-9OU`EwRsa@w#jp1b6?muJ3P_wE-T{Ofn; z4cxM`KKN1aEPLc5S-;4iv+0-fO8JjJR^ zhm1&p99q7vdUexk=c#ra#sK!!cnX9wDIEGOTTxY+ZX%xS=qJS<+pnFhcR?vnjnWMl zJ|;Vvbx7gU!LCa^AM0o|xkoX21C2v0r#L*ZTpi~&K}~I1Q&YW+56+Rq839fRs@-Sz zae2;$)3rG98{%uLQD+>|@NkAtk@=L?)o+S?|4ltzfgFK

*r@Dd$J@04e1O?N4a; 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 literal 0 HcmV?d00001 diff --git a/include/noja/compile.h b/include/noja/compile.h new file mode 100644 index 0000000..e69de29 diff --git a/include/noja/objects.h b/include/noja/objects.h new file mode 100644 index 0000000..e69de29 diff --git a/samples/gang.noja b/samples/gang.noja new file mode 100644 index 0000000..f710f37 --- /dev/null +++ b/samples/gang.noja @@ -0,0 +1,36 @@ + +stack = {count: 0, head: none}; + +fun push(stack, value) { + + node = {prev: null, item: value}; + + node.prev = list.head; + stack.head = node; + stack.count += 1; +} + +fun pop(stack) +{ + if stack.head is none: + return none; # return it; ? + + value = stack.head.item; + stack.head = stack.head.prev; + stack.count -= 1; + + return value; +} + +push(stack, 1); +push(stack, 2); +push(stack, 3); +x = pop(stack); +y = pop(stack); +z = pop(stack); +w = pop(stack); + +assert x == 3; +assert y == 2; +assert z == 1; +assert w == none; \ No newline at end of file diff --git a/src/common/executable.c b/src/common/executable.c new file mode 100644 index 0000000..449dbd2 --- /dev/null +++ b/src/common/executable.c @@ -0,0 +1,365 @@ +#include +#include +#include "../utils/defs.h" +#include "../utils/bucketlist.h" +#include "executable.h" + +#define MAX_OPS 3 + +typedef struct { + Opcode opcode; + int offset; + int length; + union { + long long int as_int; + double as_float; + } operands[MAX_OPS]; +} Instruction; + +struct xExecutable { + int refs; + int headl, bodyl; + char *head; + Instruction *body; + Source *src; +}; + +struct xExeBuilder { + BucketList *data, *code; + int promc; +}; + +typedef struct { + const char *name; + int stacksz; + int opcount; + OperandType *optypes; +} InstrInfo; + +static const InstrInfo instr_table[] = { + + [OPCODE_NOPE] = {"NOPE", 0, 0, NULL}, + + [OPCODE_POS] = {"POS", 1, 0, NULL}, + [OPCODE_NEG] = {"NEG", 1, 0, NULL}, + + [OPCODE_ADD] = {"ADD", 2, 0, NULL}, + [OPCODE_SUB] = {"SUB", 2, 0, NULL}, + [OPCODE_MUL] = {"MUL", 2, 0, NULL}, + [OPCODE_DIV] = {"DIV", 2, 0, NULL}, + + [OPCODE_PUSHI] = {"PUSHI", 2, 1, (OperandType[]) {OPTP_INT}}, + [OPCODE_PUSHF] = {"PUSHF", 2, 1, (OperandType[]) {OPTP_FLOAT}}, + [OPCODE_PUSHS] = {"PUSHS", 2, 1, (OperandType[]) {OPTP_STRING}}, + [OPCODE_PUSHV] = {"PUSHV", 2, 1, (OperandType[]) {OPTP_STRING}}, + + [OPCODE_RETURN] = {"RETURN", 0, 0, NULL}, +}; + +static const char *operand_type_names[] = { + [OPTP_INT] = "int", + [OPTP_FLOAT] = "float", + [OPTP_STRING] = "string", +}; + +static const char *operand_type_arts[] = { + [OPTP_INT] = "an", + [OPTP_FLOAT] = "a", + [OPTP_STRING] = "a", +}; + +static unsigned int operand_type_sizes[] = { + [OPTP_INT] = membersizeof(Operand, as_int), + [OPTP_FLOAT] = membersizeof(Operand, as_float), + [OPTP_STRING] = membersizeof(Operand, as_string), +}; + +Executable *Executable_Copy(Executable *exe) +{ + assert(exe != NULL); + + exe->refs += 1; + return exe; +} + +void Executable_Free(Executable *exe) +{ + exe->refs -= 1; + assert(exe->refs >= 0); + + if(exe->refs == 0) + { + if(exe->src) + Source_Free(exe->src); + free(exe); + } +} + +_Bool Executable_SetSource(Executable *exe, Source *src) +{ + src = Source_Copy(src); + + if(src == NULL) + return 0; + + exe->src = src; + return 1; +} + +Source *Executable_GetSource(Executable *exe) +{ + return exe->src; +} + +_Bool Executable_Fetch(Executable *exe, int index, Opcode *opcode, Operand *ops, int *opc) +{ + assert(index >= 0); + + if(index >= exe->bodyl) + return 0; + + const Instruction *instr = exe->body + index; + const InstrInfo *info = instr_table + instr->opcode; + + if(opcode) + *opcode = instr->opcode; + + int i; + + if(ops && opc) + { + int k = MIN(*opc, info->opcount); + + for(i = 0; i < k; i += 1) + { + OperandType type = info->optypes[i]; + assert(type != OPTP_PROMISE); + + switch(type) { + + case OPTP_STRING: + + int data_offset = instr->operands[i].as_int; + + assert(data_offset < exe->headl); + + ops[i].type = OPTP_STRING; + ops[i].as_string = exe->head + data_offset; + break; + + case OPTP_INT: + ops[i].type = OPTP_INT; + ops[i].as_int = instr->operands[i].as_int; + break; + + case OPTP_FLOAT: + ops[i].type = OPTP_FLOAT; + ops[i].as_int = instr->operands[i].as_int; + break; + + case OPTP_PROMISE: + UNREACHABLE; + break; + } + } + + *opc = MIN(*opc, info->opcount); + } + + return 1; +} + +ExeBuilder *ExeBuilder_New(BPAlloc *alloc) +{ + assert(alloc != NULL); + + ExeBuilder *exeb = BPAlloc_Malloc(alloc, sizeof(ExeBuilder)); + + if(exeb == NULL) + return NULL; + + exeb->promc = 0; + exeb->data = BucketList_New(alloc); + exeb->code = BucketList_New(alloc); + + if(exeb->data == NULL || exeb->code == NULL) + return NULL; + return exeb; +} + +Executable *ExeBuilder_Finalize(ExeBuilder *exeb, Error *error) +{ + assert(exeb != NULL); + + if(exeb->promc > 0) + { + Error_Report(error, 0, "There are still %d unfulfilled promises", exeb->promc); + return 0; + } + + Executable *exe; + { + int data_size = BucketList_Size(exeb->data); + int code_size = BucketList_Size(exeb->code); + + assert(code_size % sizeof(Instruction) == 0); + + void *temp = malloc(sizeof(Executable) + data_size + code_size); + + if(temp == NULL) + { + Error_Report(error, 1, "No memory"); + return NULL; + } + + exe = temp; + exe->headl = data_size; + exe->bodyl = code_size / sizeof(Instruction); + exe->body = (Instruction*) (exe + 1); + exe->head = (char*) (exe->body + exe->bodyl); + exe->refs = 1; + exe->src = NULL; + + } + + BucketList_Copy(exeb->data, exe->head, -1); + BucketList_Copy(exeb->code, exe->body, -1); + return exe; +} + +static void promise_callback(void *userp) +{ + assert(userp != NULL); + + ExeBuilder *exeb = userp; + + exeb->promc -= 1; + assert(exeb->promc >= 0); +} + +_Bool ExeBuilder_Append(ExeBuilder *exeb, Error *error, Opcode opcode, Operand *opv, int opc, int off, int len) +{ + assert(exeb != NULL); + assert(opc >= 0); + + const InstrInfo *info = instr_table + opcode; + + if(opc != info->opcount) + { + // ERROR: Too many operands were provided. + Error_Report(error, 0, + "Instruction %s expects %d operands, but %d were provided", + info->name, opc, info->opcount); + return 0; + } + + assert(opc <= MAX_OPS); + + { + Instruction *instr = BucketList_Append2(exeb->code, NULL, sizeof(Instruction)); + + if(instr == NULL) + { + Error_Report(error, 1, "No memory"); + return 0; + } + + instr->opcode = opcode; + instr->offset = off; + instr->length = len; + + for(int i = 0; i < opc; i += 1) + { + // Check that the expected type and the provided one + // match, or that the provided type is a promise with + // the same size of the expected type. + { + OperandType expected_type = info->optypes[i]; + OperandType provided_type = opv[i].type; + + assert(expected_type != OPTP_PROMISE); + + if(provided_type == OPTP_PROMISE) + { + assert(opv[i].as_promise != NULL); + + if(expected_type == OPTP_STRING) + { + Error_Report(error, 0, "Promise values can't be provided as string operands"); + return 0; + } + + if(Promise_Size(opv[i].as_promise) != operand_type_sizes[expected_type]) + { + Error_Report(error, 0, + "Provided promise has a value size of %d, " + "but since %s %s was expected, the promise " + "size must be %d", + Promise_Size(opv[i].as_promise), + operand_type_arts[expected_type], + operand_type_names[expected_type], + operand_type_sizes[expected_type]); + return 0; + } + } + else if(expected_type != provided_type) + { + // ERROR: Wrong operand type provided. + Error_Report(error, 0, + "Instruction %s expects %s %s as operand %d, but %s %s was provided instead", + info->name, + operand_type_arts[expected_type], + operand_type_names[expected_type], + i, + operand_type_arts[provided_type], + operand_type_names[provided_type] + ); + return 0; + } + } + + // Do the copying of the operands. + switch(opv[i].type) + { + case OPTP_STRING: + + instr->operands[i].as_int = BucketList_Size(exeb->data); + + if(!BucketList_Append(exeb->data, opv[i].as_string, strlen(opv[i].as_string)+1)) + { + Error_Report(error, 1, "No memory"); + return 0; + } + break; + + case OPTP_PROMISE: + + assert(info->optypes[i] != OPTP_STRING); + + // This must be incremented before subscribing + // since the counter-decrementing callback may + // be called immediately if the promise was + // already fulfilled. + exeb->promc += 1; + + if(!Promise_Subscribe2(opv[i].as_promise, &instr->operands[i], exeb, promise_callback)) + { + Error_Report(error, 1, "No memory"); + return 0; + } + break; + + case OPTP_INT: + instr->operands[i].as_int = opv[i].as_int; + break; + + case OPTP_FLOAT: + instr->operands[i].as_float = opv[i].as_float; + break; + + } + } + } + + return 1; +} \ No newline at end of file diff --git a/src/common/executable.h b/src/common/executable.h new file mode 100644 index 0000000..228cb6c --- /dev/null +++ b/src/common/executable.h @@ -0,0 +1,50 @@ +#ifndef EXECUTABLE_H +#define EXECUTABLE_H +#include "../utils/source.h" +#include "../utils/promise.h" + +typedef enum { + OPTP_INT, + OPTP_FLOAT, + OPTP_STRING, + OPTP_PROMISE, +} OperandType; + +typedef struct { + OperandType type; + union { + long long int as_int; + double as_float; + const char *as_string; + Promise *as_promise; + }; +} Operand; + +typedef enum { + OPCODE_NOPE, + OPCODE_POS, + OPCODE_NEG, + OPCODE_ADD, + OPCODE_SUB, + OPCODE_MUL, + OPCODE_DIV, + OPCODE_PUSHI, + OPCODE_PUSHF, + OPCODE_PUSHS, + OPCODE_PUSHV, + OPCODE_RETURN, +} Opcode; + +typedef struct xExecutable Executable; +typedef struct xExeBuilder ExeBuilder; + +Executable *Executable_Copy(Executable *exe); +void Executable_Free(Executable *exe); +_Bool Executable_Fetch(Executable *exe, int index, Opcode *opcode, Operand *ops, int *opc); +_Bool Executable_SetSource(Executable *exe, Source *src); +Source *Executable_GetSource(Executable *exe); + +ExeBuilder *ExeBuilder_New(BPAlloc *alloc); +_Bool ExeBuilder_Append(ExeBuilder *exeb, Error *error, Opcode opcode, Operand *opv, int opc, int off, int len); +Executable *ExeBuilder_Finalize(ExeBuilder *exeb, Error *error); +#endif \ No newline at end of file diff --git a/src/compiler/AST.h b/src/compiler/AST.h new file mode 100644 index 0000000..82b755b --- /dev/null +++ b/src/compiler/AST.h @@ -0,0 +1,4 @@ +#ifndef AST_H +#define AST_H +typedef struct xAST AST; +#endif \ No newline at end of file diff --git a/src/compiler/ASTi.h b/src/compiler/ASTi.h new file mode 100644 index 0000000..3b294f9 --- /dev/null +++ b/src/compiler/ASTi.h @@ -0,0 +1,73 @@ + +#ifndef ASTi_H +#define ASTi_H +#include "../utils/source.h" +#include "AST.h" + +typedef enum { + NODE_EXPR, +} NodeKind; + +typedef enum { + EXPR_POS, + EXPR_NEG, + EXPR_ADD, + EXPR_SUB, + EXPR_MUL, + EXPR_DIV, + EXPR_INT, + EXPR_FLOAT, + EXPR_STRING, + EXPR_IDENT, +} ExprKind; + +typedef struct Node Node; + +struct xAST { + Source *src; + Node *root; +}; + +struct Node { + NodeKind kind; + Node *next; + int offset, + length; + char body[]; +}; + +typedef struct { + Node base; + ExprKind kind; + char body[]; +} ExprNode; + +typedef struct { + ExprNode base; + long long int val; +} IntExprNode; + +typedef struct { + ExprNode base; + double val; +} FloatExprNode; + +typedef struct { + ExprNode base; + char *val; + int len; +} StringExprNode; + +typedef struct { + ExprNode base; + char *val; + int len; +} IdentExprNode; + +typedef struct { + ExprNode base; + Node *head; + int count; +} OperExprNode; + +#endif \ No newline at end of file diff --git a/src/compiler/compile.c b/src/compiler/compile.c new file mode 100644 index 0000000..9544af4 --- /dev/null +++ b/src/compiler/compile.c @@ -0,0 +1,123 @@ +#include +#include +#include +#include "../utils/defs.h" +#include "compile.h" +#include "ASTi.h" + +static Opcode exprkind_to_opcode(ExprKind kind) +{ + switch(kind) + { + case EXPR_POS: return OPCODE_POS; + case EXPR_NEG: return OPCODE_NEG; + case EXPR_ADD: return OPCODE_ADD; + case EXPR_SUB: return OPCODE_SUB; + case EXPR_MUL: return OPCODE_MUL; + case EXPR_DIV: return OPCODE_DIV; + default: + UNREACHABLE; + break; + } +} + +static _Bool emit_instr_for_node(ExeBuilder *exeb, Node *node, Error *error) +{ + assert(node != NULL); + + switch(node->kind) + { + case NODE_EXPR: + { + ExprNode *expr = (ExprNode*) node; + switch(expr->kind) + { + case EXPR_POS: + case EXPR_NEG: + case EXPR_ADD: + case EXPR_SUB: + case EXPR_MUL: + case EXPR_DIV: + { + OperExprNode *oper = (OperExprNode*) expr; + + for(Node *operand = oper->head; operand; operand = operand->next) + emit_instr_for_node(exeb, operand, error); + + return ExeBuilder_Append(exeb, error, + exprkind_to_opcode(expr->kind), + NULL, 0, node->offset, node->length); + } + + case EXPR_INT: + { + IntExprNode *p = (IntExprNode*) expr; + Operand op = { .type = OPTP_INT, .as_int = p->val }; + return ExeBuilder_Append(exeb, error, OPCODE_PUSHI, &op, 1, node->offset, node->length); + } + + case EXPR_FLOAT: + { + FloatExprNode *p = (FloatExprNode*) expr; + Operand op = { .type = OPTP_FLOAT, .as_float = p->val }; + return ExeBuilder_Append(exeb, error, OPCODE_PUSHF, &op, 1, node->offset, node->length); + } + + case EXPR_STRING: + { + StringExprNode *p = (StringExprNode*) expr; + Operand op = { .type = OPTP_STRING, .as_string = p->val }; + return ExeBuilder_Append(exeb, error, OPCODE_PUSHS, &op, 1, node->offset, node->length); + } + + case EXPR_IDENT: + { + IdentExprNode *p = (IdentExprNode*) expr; + Operand op = { .type = OPTP_STRING, .as_string = p->val }; + return ExeBuilder_Append(exeb, error, OPCODE_PUSHV, &op, 1, node->offset, node->length); + } + + default: + UNREACHABLE; + break; + } + break; + } + + default: + UNREACHABLE; + break; + } +} + +Executable *compile(AST *ast, BPAlloc *alloc, Error *error) +{ + assert(ast != NULL); + assert(error != NULL); + + BPAlloc *alloc2 = alloc; + + if(alloc2 == NULL) + { + alloc2 = BPAlloc_Init(-1); + + if(alloc2 == NULL) + return NULL; + } + + Executable *exe = NULL; + ExeBuilder *exeb = ExeBuilder_New(alloc2); + + if(exeb) + { + if(!emit_instr_for_node(exeb, ast->root, error)) + return 0; + + if(ExeBuilder_Append(exeb, error, OPCODE_RETURN, NULL, 0, Source_GetSize(ast->src), 0)) + exe = ExeBuilder_Finalize(exeb, error); + } + + if(alloc == NULL) + BPAlloc_Free(alloc2); + return exe; +} \ No newline at end of file diff --git a/src/compiler/compile.h b/src/compiler/compile.h new file mode 100644 index 0000000..7530eff --- /dev/null +++ b/src/compiler/compile.h @@ -0,0 +1,8 @@ +#ifndef COMPILE_H +#define COMPILE_H +#include "../utils/error.h" +#include "../utils/bpalloc.h" +#include "../common/executable.h" +#include "AST.h" +Executable *compile(AST *ast, BPAlloc *alloc, Error *error); +#endif \ No newline at end of file diff --git a/src/compiler/parse.c b/src/compiler/parse.c new file mode 100644 index 0000000..a07a14c --- /dev/null +++ b/src/compiler/parse.c @@ -0,0 +1,762 @@ +#include +#include +#include +#include +#include +#include "parse.h" +#include "ASTi.h" + +#define UNREACHABLE assert(0) + +#ifndef NULL +#define NULL ((void*) 0) +#endif + +typedef enum { + + TPOS = '+', + TNEG = '-', + + TADD = '+', + TSUB = '-', + TMUL = '*', + TDIV = '/', + TASS = '=', + + TDONE = 256, + TINT, + TFLOAT, + TSTRING, + TIDENT, +} TokenKind; + +typedef struct Token Token; +struct Token { + TokenKind kind; + Token *prev, *next; + int offset, length; +}; + +typedef struct { + const char *src; + Token *token; + BPAlloc *alloc; + Error *error; +} Context; + +static Node *parse_statement(Context *ctx); +static Node *parse_expression(Context *ctx); +static Node *parse_expression_statement(Context *ctx); + +static inline _Bool isoper(char c) +{ + return c == '+' || + c == '-' || + c == '*' || + c == '/' || + c == '='; +} + +AST *parse(Source *src, BPAlloc *alloc, Error *error) +{ + assert(src != NULL); + assert(alloc != NULL); + + const char *str = Source_GetBody(src); + int len = Source_GetSize(src); + assert(str != NULL); + assert(len >= 0); + + AST *ast = BPAlloc_Malloc(alloc, sizeof(AST)); + + if(ast == NULL) + return NULL; + + Token *head = NULL, + *tail = NULL; + int i = 0; + while(1) + { + // Skip whitespace and comments. + while(i < len && (isspace(str[i]) || str[i] == '#')) + { + while(i < len && isspace(str[i])) + i += 1; + + if(str[i] == '#') + { + i += 1; + + while(i < len && str[i] != '\n') + i += 1; + } + } + + if(i == len) + break; // No more tokens left. + + Token *tok = BPAlloc_Malloc(alloc, sizeof(Token)); // Allocate a token. + + if(tok == NULL) + { + // Error: No memory. + Error_Report(error, 1, "No memory"); + return NULL; + } + + if(isalpha(str[i]) || str[i] == '_') + { + tok->kind = TIDENT; + tok->offset = i; + + while(i < len && (isalpha(str[i]) || str[i] == '_')) + i += 1; + + tok->length = i - tok->offset; + } + else if(isdigit(str[i])) + { + tok->kind = TINT; + tok->offset = i; + + while(i < len && isdigit(str[i])) + i += 1; + + if(i+1 < len && str[i] == '.' && isdigit(str[i+1])) + { + i += 1; // Consume the dot. + + tok->kind = TFLOAT; + + while(i < len && isdigit(str[i])) + i += 1; + } + + tok->length = i - tok->offset; + } + else if(str[i] == '\'' || str[i] == '"') + { + tok->kind = TSTRING; + tok->offset = i; + + char f = str[i]; + + i += 1; // Skip the starting quote. + + while(i < len && str[i] != f) + i += 1; + + if(i == len) + { + Error_Report(error, 0, "Source ended inside string literal"); + return NULL; + } + + i += 1; // Consume the ' or ". + + tok->length = i - tok->offset; + } + else if(isoper(str[i])) + { + tok->offset = i; + + while(i < len && isoper(str[i])) + i += 1; + + tok->length = i - tok->offset; + + // Determine the token + + #define matchop(str, len, const_str) \ + (len == sizeof(const_str)-1 && !strncmp(str, const_str, sizeof(const_str)-1)) + + if(matchop(str + tok->offset, tok->length, "+")) + { + tok->kind = TADD; + } + else if(matchop(str + tok->offset, tok->length, "-")) + { + tok->kind = TSUB; + } + else if(matchop(str + tok->offset, tok->length, "*")) + { + tok->kind = TMUL; + } + else if(matchop(str + tok->offset, tok->length, "/")) + { + tok->kind = TDIV; + } + else if(matchop(str + tok->offset, tok->length, "=")) + { + tok->kind = TASS; + } + else + { + // Not a known operator. + tok->kind = str[tok->offset]; + tok->length = 1; + i = tok->offset + 1; + } + + #undef matchop + } + else + { + tok->kind = str[i]; + tok->offset = i; + tok->length = 1; + i += 1; + } + + // Append to the token list. + if(head) + tail->next = tok; + else + head = tok; + tok->prev = tail; + tok->next = NULL; + tail = tok; + } + + { + Token *tok = BPAlloc_Malloc(alloc, sizeof(Token)); // Allocate a token. + + if(tok == NULL) + { + // Error: No memory. + Error_Report(error, 1, "No memory"); + return NULL; + } + + tok->kind = TDONE; + tok->offset = i; + tok->length = 0; + + if(head) + tail->next = tok; + else + head = tok; + tok->prev = tail; + tok->next = NULL; + tail = tok; + } + + Context ctx; + ctx.src = str; + ctx.token = head; + ctx.alloc = alloc; + ctx.error = error; + + Node *root = parse_statement(&ctx); + + if(root == NULL) + return NULL; + + ast->src = src; // Not copying! Be sure to not free the source before the AST! + ast->root = root; + + if(ast->src == NULL) + return NULL; + + return ast; +} + +static Node *parse_statement(Context *ctx) +{ + assert(ctx != NULL); + + switch(ctx->token->kind) + { + case '*': + case '/': + case TASS: + case TDONE: + UNREACHABLE; + break; + + case '(': + case '+': + case '-': + case TINT: + case TFLOAT: + case TSTRING: + case TIDENT: + return parse_expression_statement(ctx); + } + + Error_Report(ctx->error, 0, "Got token \"%.*s\" where the start of a statement was expected", + ctx->token->length, ctx->src + ctx->token->offset); + return NULL; +} + +static Node *parse_expression_statement(Context *ctx) +{ + assert(ctx != NULL); + + Node *expr = parse_expression(ctx); + + if(expr == NULL) + return NULL; + + assert(ctx->token != NULL); + + if(ctx->token->kind == TDONE) + // If the source ended before + // the final ";", it's ok. + return expr; + + if(ctx->token->kind != ';') + { + // ERROR: Got something other than + // a semicolon at the end of statement. + Error_Report(ctx->error, 0, "Got token \"%.*s\" where \";\" was expected", ctx->token->length, ctx->src + ctx->token->offset); + return NULL; + } + + ctx->token = ctx->token->next; + assert(ctx->token != NULL); + + return expr; +} + +static Node *parse_string_primary_expression(Context *ctx) +{ + assert(ctx != NULL); + assert(ctx->token->kind == TSTRING); + + const char *src = ctx->src; + int len = ctx->token->offset + ctx->token->length - 1; + int i = ctx->token->offset + 1; + + assert(src[i-1] == '"' || src[i-1] == '\''); + assert(src[len] == '"' || src[len] == '\''); + + char temp[4096]; + int temp_used = 0; + + do + { + int segm_off, segm_len; + { + segm_off = i; + + while(i < len && src[i] != '\\') + i += 1; + + segm_len = i - segm_off; + } + + if(temp_used + segm_len >= (int) sizeof(temp)) + { + Error_Report(ctx->error, 1, "String is too big to be rendered inside the fixed size buffer"); + return NULL; + } + + memcpy(temp + temp_used, src + segm_off, segm_len); + temp_used += segm_len; + + if(src[i] == '\\') + { + i += 1; // Consume the \. + + if(temp_used + 1 >= (int) sizeof(temp)) + { + Error_Report(ctx->error, 1, "String is too big to be rendered inside the fixed size buffer"); + return NULL; + } + + if(i == len) + { + // Append the \ as a normal char. + temp[temp_used++] = '\\'; + } + else + { + switch(src[i]) + { + case 'n': temp[temp_used++] = '\n'; break; + case 't': temp[temp_used++] = '\t'; break; + case 'r': temp[temp_used++] = '\r'; break; + + default: + Error_Report(ctx->error, 0, "Invalid escape sequence \\%c", src[i]); + return NULL; + } + + i += 1; // Consume the char after the \. + } + } + } + while(i < len); + + assert(temp_used < (int) sizeof(temp)); + + temp[temp_used] = '\0'; + + char *copy; + int copyl; + + { + copy = BPAlloc_Malloc(ctx->alloc, temp_used + 1); + + if(copy == NULL) + { + Error_Report(ctx->error, 1, "No memory"); + return NULL; + } + + strcpy(copy, temp); + copyl = temp_used; + } + + StringExprNode *node; + { + node = BPAlloc_Malloc(ctx->alloc, sizeof(StringExprNode)); + + if(node == NULL) + { + Error_Report(ctx->error, 1, "No memory"); + return NULL; + } + + node->base.base.kind = NODE_EXPR; + node->base.base.next = NULL; + node->base.base.offset = ctx->token->offset; + node->base.base.length = ctx->token->length; + node->base.kind = EXPR_STRING; + node->val = copy; + node->len = copyl; + } + + ctx->token = ctx->token->next; + assert(ctx->token != NULL); + + return (Node*) node; +} + +static Node *parse_primary_expresion(Context *ctx) +{ + assert(ctx != NULL); + + switch(ctx->token->kind) + { + case '+': + case '-': + { + Token *operator = ctx->token; + + ctx->token = ctx->token->next; + assert(ctx->token != NULL); + + Node *operand = parse_primary_expresion(ctx); + + if(operand == NULL) + return NULL; + + OperExprNode *temp = BPAlloc_Malloc(ctx->alloc, sizeof(OperExprNode)); + { + if(temp == NULL) + return NULL; + + temp->base.base.kind = NODE_EXPR; + temp->base.base.next = NULL; + temp->base.base.offset = operator->offset; + temp->base.base.length = operand->offset + operand->length - operator->offset; + temp->base.kind = operator->kind == '+' ? EXPR_POS : EXPR_NEG; + temp->head = operand; + temp->count = 1; + } + return (Node*) temp; + } + + case '(': + { + ctx->token = ctx->token->next; + + Node *node = parse_expression(ctx); + + if(node == NULL) + return NULL; + + if(ctx->token->kind != ')') + { + Error_Report(ctx->error, 0, "Missing \")\", after sub-expression"); + return NULL; + } + + ctx->token = ctx->token->next; + assert(ctx->token != NULL); + + return node; + } + + case TINT: + { + char buffer[64]; + + if(ctx->token->length >= (int) sizeof(buffer)) + { + Error_Report(ctx->error, 1, "Integer is too big"); + return NULL; + } + + memcpy(buffer, ctx->src + ctx->token->offset, ctx->token->length); + buffer[ctx->token->length] = '\0'; + + errno = 0; + + long long int val = strtoll(buffer, NULL, 10); + + if(errno == ERANGE) + { + Error_Report(ctx->error, 1, "Integer is too big"); + return NULL; + } + else assert(errno == 0); + + IntExprNode *node; + { + node = BPAlloc_Malloc(ctx->alloc, sizeof(IntExprNode)); + + if(node == NULL) + { + Error_Report(ctx->error, 1, "No memory"); + return NULL; + } + + node->base.base.kind = NODE_EXPR; + node->base.base.next = NULL; + node->base.base.offset = ctx->token->offset; + node->base.base.length = ctx->token->length; + node->base.kind = EXPR_INT; + node->val = val; + } + + ctx->token = ctx->token->next; + assert(ctx->token != NULL); + + return (Node*) node; + } + + case TFLOAT: + { + char buffer[64]; + + if(ctx->token->length >= (int) sizeof(buffer)) + { + Error_Report(ctx->error, 1, "Floating is too big"); + return NULL; + } + + memcpy(buffer, ctx->src + ctx->token->offset, ctx->token->length); + buffer[ctx->token->length] = '\0'; + + errno = 0; + + double val = strtod(buffer, NULL); + + if(errno == ERANGE) + { + Error_Report(ctx->error, 1, "Floating is too big"); + return NULL; + } + else assert(errno == 0); + + FloatExprNode *node; + { + node = BPAlloc_Malloc(ctx->alloc, sizeof(FloatExprNode)); + + if(node == NULL) + { + Error_Report(ctx->error, 1, "No memory"); + return NULL; + } + + node->base.base.kind = NODE_EXPR; + node->base.base.next = NULL; + node->base.base.offset = ctx->token->offset; + node->base.base.length = ctx->token->length; + node->base.kind = EXPR_FLOAT; + node->val = val; + } + + ctx->token = ctx->token->next; + assert(ctx->token != NULL); + + return (Node*) node; + } + + case TSTRING: + return parse_string_primary_expression(ctx); + + case TIDENT: + { + char *copy; + int copyl; + + { + copy = BPAlloc_Malloc(ctx->alloc, ctx->token->length + 1); + + if(copy == NULL) + { + Error_Report(ctx->error, 1, "No memory"); + return NULL; + } + + copyl = ctx->token->length; + memcpy(copy, ctx->src + ctx->token->offset, copyl); + copy[copyl] = '\0'; + + } + + IdentExprNode *node; + { + node = BPAlloc_Malloc(ctx->alloc, sizeof(IdentExprNode)); + + if(node == NULL) + { + Error_Report(ctx->error, 1, "No memory"); + return NULL; + } + + node->base.base.kind = NODE_EXPR; + node->base.base.next = NULL; + node->base.base.offset = ctx->token->offset; + node->base.base.length = ctx->token->length; + node->base.kind = EXPR_IDENT; + node->val = copy; + node->len = copyl; + } + + ctx->token = ctx->token->next; + assert(ctx->token != NULL); + + return (Node*) node; + } + + case TDONE: + Error_Report(ctx->error, 1, "Unexpected end of source where a primary expression was expected"); + return NULL; + + default: + Error_Report(ctx->error, 1, "Unexpected token \"%.*s\" where a primary expression was expected", ctx->token->length, ctx->src + ctx->token->offset); + return NULL; + } + + UNREACHABLE; + return NULL; +} + +static inline _Bool isbinop(Token *tok) +{ + assert(tok != NULL); + + return tok->kind == '+' || + tok->kind == '-' || + tok->kind == '*' || + tok->kind == '/'; +} + +static inline _Bool isrightassoc(Token *tok) +{ + assert(tok != NULL); + + (void) tok; + return 0; +} + +static inline int precedenceof(Token *tok) +{ + assert(tok != NULL); + + switch(tok->kind) + { + case '+': + case '-': + return 1; + + case '*': + case '/': + return 2; + + default: + return -10000000; + } + + UNREACHABLE; + return -100000000; +} + +static Node *parse_expression_2(Context *ctx, Node *left_expr, int min_prec) +{ + while(isbinop(ctx->token) && precedenceof(ctx->token) >= min_prec) + { + Token *op = ctx->token; + + ctx->token = ctx->token->next; + assert(ctx->token != NULL); + + Node *right_expr = parse_primary_expresion(ctx); + + if(right_expr == NULL) + return NULL; + + while(isbinop(ctx->token) && (precedenceof(ctx->token) > precedenceof(op) || (precedenceof(ctx->token) == precedenceof(op) && isrightassoc(ctx->token)))) + { + right_expr = parse_expression_2(ctx, right_expr, precedenceof(op) + 1); + + if(right_expr == NULL) + return NULL; + } + + OperExprNode *temp; + { + temp = BPAlloc_Malloc(ctx->alloc, sizeof(OperExprNode)); + + if(temp == NULL) + { + Error_Report(ctx->error, 1, "No memory"); + return NULL; + } + + temp->base.base.kind = NODE_EXPR; + temp->base.base.next = NULL; + temp->base.base.offset = left_expr->offset; + temp->base.base.length = right_expr->offset + right_expr->length - left_expr->offset; + + switch(op->kind) + { + case '+': temp->base.kind = EXPR_ADD; break; + case '-': temp->base.kind = EXPR_SUB; break; + case '*': temp->base.kind = EXPR_MUL; break; + case '/': temp->base.kind = EXPR_DIV; break; + + default: + UNREACHABLE; + break; + } + + temp->head = left_expr; + temp->head->next = right_expr; + temp->count = 2; + assert(right_expr->next == NULL); + } + + left_expr = (Node*) temp; + } + + return left_expr; +} + +static Node *parse_expression(Context *ctx) +{ + Node *left_expr = parse_primary_expresion(ctx); + + if(left_expr == NULL) + return NULL; + + if(ctx->token->kind == TDONE) + return left_expr; + + return parse_expression_2(ctx, left_expr, -1000000000); +} \ No newline at end of file diff --git a/src/compiler/parse.h b/src/compiler/parse.h new file mode 100644 index 0000000..99020ce --- /dev/null +++ b/src/compiler/parse.h @@ -0,0 +1,8 @@ +#ifndef PARSE_H +#define PARSE_H +#include "../utils/bpalloc.h" +#include "../utils/source.h" +#include "../utils/error.h" +#include "AST.h" +AST *parse(Source *src, BPAlloc *alloc, Error *error); +#endif \ No newline at end of file diff --git a/src/compiler/serialize.c b/src/compiler/serialize.c new file mode 100644 index 0000000..9059713 --- /dev/null +++ b/src/compiler/serialize.c @@ -0,0 +1,161 @@ +#include +#include +#include "serialize.h" +#include "ASTi.h" + +#define UNREACHABLE assert(0) + +static xj_value *convert_node(Node *node, xj_error *error, xj_alloc **alloc); + +char *serialize(AST *ast, int *len) +{ + xj_alloc *alloc = NULL; + xj_error error; + + xj_value *value = convert_node(ast->root, &error, &alloc); + + if(value == NULL) + { + xj_free(alloc); + return NULL; + } + else + { + char *serialized = xj_encode(value, len); + xj_free(alloc); + return serialized; + } +} + +static const char *expr_kind_name(ExprNode *expr) +{ + switch(expr->kind) + { + case EXPR_POS: return "pos"; + case EXPR_NEG: return "neg"; + case EXPR_ADD: return "add"; + case EXPR_SUB: return "sub"; + case EXPR_MUL: return "mul"; + case EXPR_DIV: return "div"; + case EXPR_INT: return "int"; + case EXPR_FLOAT: return "float"; + case EXPR_STRING: return "string"; + case EXPR_IDENT: return "ident"; + + default: + UNREACHABLE; + return NULL; + } + + UNREACHABLE; + return NULL; +} + +static xj_value *convert_node_list(Node *head, xj_error *error, xj_alloc **alloc); + +static xj_value *convert_node(Node *node, xj_error *error, xj_alloc **alloc) +{ + switch(node->kind) + { + case NODE_EXPR: + ExprNode *expr = (ExprNode*) node; + switch(expr->kind) + { + case EXPR_POS: + case EXPR_NEG: + case EXPR_ADD: + case EXPR_SUB: + case EXPR_MUL: + case EXPR_DIV: + { + OperExprNode *oper = (OperExprNode*) expr; + + xj_value *operands = NULL; + + if(oper->count > 0) + { + operands = convert_node_list((Node*) oper->head, error, alloc); + + if(operands == NULL) + return NULL; + } + + return xj_decodef(error, alloc, + "{" + "\t\"node-kind\": \"expr\", \n" + "\t\"expr-kind\": %Q, \n" + "\t\"operands\": %L\n" + "}", expr_kind_name(expr), operands); + } + + case EXPR_INT: + return xj_decodef(error, alloc, + "{" + "\t\"node-kind\": \"expr\", \n" + "\t\"expr-kind\": %Q, \n" + "\t\"value\": %d\n" + "}", expr_kind_name(expr), ((IntExprNode*) expr)->val); + + case EXPR_FLOAT: + return xj_decodef(error, alloc, + "{" + "\t\"node-kind\": \"expr\", \n" + "\t\"expr-kind\": %Q, \n" + "\t\"value\": %f\n" + "}", expr_kind_name(expr), ((FloatExprNode*) expr)->val); + + case EXPR_STRING: + return xj_decodef(error, alloc, + "{" + "\t\"node-kind\": \"expr\", \n" + "\t\"expr-kind\": %Q, \n" + "\t\"value\": %Q\n" + "}", expr_kind_name(expr), ((StringExprNode*) expr)->val); + + case EXPR_IDENT: + return xj_decodef(error, alloc, + "{" + "\t\"node-kind\": \"expr\", \n" + "\t\"expr-kind\": %Q, \n" + "\t\"value\": %Q\n" + "}", expr_kind_name(expr), ((IdentExprNode*) expr)->val); + + default: + UNREACHABLE; + break; + } + break; + + + default: + UNREACHABLE; + break; + } + + UNREACHABLE; + return NULL; +} + +static xj_value *convert_node_list(Node *head, xj_error *error, xj_alloc **alloc) +{ + xj_value *json_head = NULL; + xj_value **json_tail = &json_head; + + Node *curs = head; + while(curs) + { + xj_value *temp = convert_node(curs, error, alloc); + + if(temp == NULL) + return NULL; + + temp->next = NULL; + + *json_tail = temp; + json_tail = &temp->next; + + curs = curs->next; + } + + return json_head; +} \ No newline at end of file diff --git a/src/compiler/serialize.h b/src/compiler/serialize.h new file mode 100644 index 0000000..f691054 --- /dev/null +++ b/src/compiler/serialize.h @@ -0,0 +1,5 @@ +#ifndef SERIALIZE_H +#define SERIALIZE_H +#include "AST.h" +char *serialize(AST *ast, int *len); +#endif \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..1841e77 --- /dev/null +++ b/src/main.c @@ -0,0 +1,335 @@ +#include +#include +#include +#include +#include "compiler/parse.h" +#include "compiler/serialize.h" +#include "compiler/compile.h" +#include "runtime/runtime.h" +#include "runtime/runtime_error.h" + +/* $ noja -f + * $ noja -c + * $ noja -f -o + */ + +typedef enum { RUN, HELP, PARSE, VERSION, DISASSEMBLY } Action; + +typedef struct { + Action action; + _Bool input_is_file, debug, verbose; + const char *input, *output; +} Options; + +static int parse_args(Options *opts, int argc, char **argv, Error *error) +{ + assert(argc >= 0); + assert(opts != NULL); + + opts->action = RUN; + opts->input_is_file = 1; + opts->input = NULL; + opts->output = NULL; + + int i; + + for(i = 1; i < argc; i += 1) + { + if(!strcmp("-r", argv[i]) || !strcmp("--run", argv[i])) + { + opts->action = RUN; + } + else if(!strcmp("-p", argv[i]) || !strcmp("--parse", argv[i])) + { + opts->action = PARSE; + } + else if(!strcmp("-d", argv[i]) || !strcmp("--disassembly", argv[i])) + { + opts->action = DISASSEMBLY; + } + else if(!strcmp("-h", argv[i]) || !strcmp("--help", argv[i])) + { + opts->action = HELP; + } + else if(!strcmp("-v", argv[i]) || !strcmp("--version", argv[i])) + { + opts->action = VERSION; + } + else if(!strcmp("--debug", argv[i])) + { + opts->debug = 1; + } + else if(!strcmp("--verbose", argv[i])) + { + opts->verbose = 1; + } + else if(!strcmp("-f", argv[i])) + { + opts->input_is_file = 1; + } + else if(!strcmp("-c", argv[i])) + { + opts->input_is_file = 0; + } + else if(!strcmp("-o", argv[i])) + { + i += 1; + + if(i == argc) + { + Error_Report(error, 0, "Option -o requires a file name after it"); + return -1; + } + + opts->output = argv[i]; + } + else break; + } + + if(i == argc) + { + Error_Report(error, 0, "Input file is missing"); + return -1; + } + + opts->input = argv[i]; + + i += 1; + + return i; +} + +int main(int argc, char **argv) +{ + Error error; + Error_Init(&error); + + + // Parse command line options. + + Options opts; + { + int i = parse_args(&opts, argc, argv, &error); + + if(i < 0) + { + fprintf(stderr, "FATAL: %s.\n", error.message); + Error_Free(&error); + return 1; + } + } + + switch(opts.action) + { + case HELP: + fprintf(stderr, "Not implemented yet.\n"); + return 1; + + case VERSION: + fprintf(stderr, "Not implemented yet.\n"); + return 1; + + case RUN: + { + // Load + Source *src; + { + if(opts.input_is_file) + src = Source_FromFile(opts.input, &error); + else + src = Source_FromString(NULL, opts.input, -1, &error); + + if(src == NULL) + { + fprintf(stderr, "FATAL: %s.\n", error.message); + return 1; + } + } + + // Compile + Executable *exe; + { + BPAlloc *alloc = BPAlloc_Init(-1); + + if(alloc == NULL) + return 1; + + AST *ast = parse(src, alloc, &error); + + if(ast == NULL) + { + fprintf(stderr, "PARSING ERROR: %s.\n", error.message); + + Error_Free(&error); + BPAlloc_Free(alloc); + Source_Free(src); + return 1; + } + + exe = compile(ast, alloc, &error); + + if(exe == NULL) + { + fprintf(stderr, "COMPILATION ERROR: %s.\n", error.message); + + Error_Free(&error); + BPAlloc_Free(alloc); + Source_Free(src); + return 1; + } + + BPAlloc_Free(alloc); + } + + // Execute + { + Runtime *runtime = Runtime_New(-1, -1); + + if(runtime == NULL) + { + fprintf(stderr, "Couldn't initialize runtime.\n"); + Executable_Free(exe); + Source_Free(src); + return 1; + } + + RuntimeError error; + RuntimeError_Init(&error, runtime); + + Object *result = run(runtime, (Error*) &error, exe, 0, NULL, 0); + + if(result == NULL) + { + fprintf(stderr, "RUNTIME ERROR: %s.\n", error.base.message); + + if(error.snapshot) + Snapshot_Print(error.snapshot, stderr); + else + fprintf(stderr, "No snapshot available.\n"); + + Source_Free(src); + Executable_Free(exe); + RuntimeError_Free(&error); + Runtime_Free(runtime); + return 1; + } + else + { + if(Object_IsInt(result)) + { + long long int val = Object_ToInt(result, (Error*) &error); + assert(error.base.occurred == 0); + + fprintf(stderr, "%lld\n", val); + } + else if(Object_IsFloat(result)) + { + double val = Object_ToFloat(result, (Error*) &error); + assert(error.base.occurred == 0); + + fprintf(stderr, "%f\n", val); + } + else + { + fprintf(stderr, "Not printing returned value since it's not an int or a float.\n"); + } + } + + Runtime_Free(runtime); + } + + Executable_Free(exe); + Source_Free(src); + break; + } + + case PARSE: + { + // Load + Source *src; + { + if(opts.input_is_file) + src = Source_FromFile(opts.input, &error); + else + src = Source_FromString(NULL, opts.input, -1, &error); + + if(src == NULL) + { + fprintf(stderr, "FATAL: %s.\n", error.message); + return 1; + } + } + + BPAlloc *alloc = BPAlloc_Init(-1); + + if(alloc == NULL) + return 1; + + + Error error; + Error_Init(&error); + + AST *ast = parse(src, alloc, &error); + + if(ast == NULL) + { + fprintf(stderr, "PARSING ERROR: %s.\n", error.message); + + Error_Free(&error); + BPAlloc_Free(alloc); + Source_Free(src); + return 1; + } + + int len; + char *str = serialize(ast, &len); + + _Bool failed = 0; + + if(str == NULL) + { + fprintf(stderr, "Failed to serialize\n"); + failed = 1; + } + else + { + if(opts.output == NULL) + { + fprintf(stdout, "%s\n", str); + } + else + { + FILE *fp = fopen(opts.output, "wb"); + + if(fp == NULL) + { + fprintf(stderr, "Couldn't write to \"%s\".\n", opts.output); + failed = 1; + } + else + { + int k = fwrite(str, 1, len, fp); + + if(k != len) + { + fprintf(stderr, "Only %d bytes out of %d could be written to \"%s\".\n", k, len, opts.output); + failed = 1; + } + } + } + + free(str); + } + + Source_Free(src); + BPAlloc_Free(alloc); + return failed; + } + + case DISASSEMBLY: + fprintf(stderr, "Not implemented yet.\n"); + return 1; + } + return 0; +} + diff --git a/src/objects/heap.c b/src/objects/heap.c new file mode 100644 index 0000000..7288352 --- /dev/null +++ b/src/objects/heap.c @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include "objects.h" + +typedef struct OflowAlloc OflowAlloc; +struct OflowAlloc { + OflowAlloc *prev; + char body[]; +}; + +struct xHeap { + int size; + int used; + void *body; + OflowAlloc *oflow; +}; + +Heap *Heap_New(int size) +{ + if(size < 0) + size = 65536; + + Heap *heap = malloc(sizeof(Heap)); + + if(heap == NULL) + return NULL; + + heap->size = size; + heap->used = 0; + heap->body = malloc(size); + heap->oflow = 0; + + if(heap->body == NULL) + { + free(heap); + return NULL; + } + + return heap; +} + +void Heap_Free(Heap *heap) +{ + while(heap->oflow) + { + OflowAlloc *prev = heap->oflow->prev; + free(heap->oflow); + heap->oflow = prev; + } + + free(heap->body); + free(heap); +} + +void *Heap_Malloc(Heap *heap, const Type *type, Error *err) +{ + void *addr = Heap_RawMalloc(heap, type->size, err); + + if(addr == NULL) + return NULL; + + Object *obj = addr; + + obj->type = type; + obj->flags = 0; + + if(type->init && !type->init(obj, err)) + return NULL; + + obj->type = type; + obj->flags = 0; + + return (Object*) addr; +} + +void *Heap_RawMalloc(Heap *heap, int size, Error *err) +{ + assert(err); + assert(heap); + assert(size > -1); + + void *addr; + + if(heap->used + size >= heap->size) + { + OflowAlloc *oflow = malloc(sizeof(OflowAlloc) + size); + + if(oflow == 0) + return 0; + + oflow->prev = heap->oflow; + heap->oflow = oflow; + + addr = oflow->body; + } + else + { + if(heap->used & 7) + heap->used = (heap->used & ~7) + 8; + + addr = heap->body + heap->used; + heap->used += size; + } + + assert(((intptr_t) addr) % 8 == 0); + + return addr; +} \ No newline at end of file diff --git a/src/objects/o_float.c b/src/objects/o_float.c new file mode 100644 index 0000000..81a5e4c --- /dev/null +++ b/src/objects/o_float.c @@ -0,0 +1,40 @@ +#include +#include "objects.h" + +static double to_float(Object *obj, Error *err); + +typedef struct { + Object base; + double val; +} FloatObject; + +static const Type t_float = { + .base = (Object) { .type = &t_type, .flags = Object_STATIC }, + .name = "float", + .size = sizeof (FloatObject), + .atomic = ATMTP_FLOAT, + .to_float = to_float, +}; + +static double to_float(Object *obj, Error *err) +{ + assert(obj); + assert(err); + assert(Object_GetType(obj) == &t_float); + + (void) err; + + return ((FloatObject*) obj)->val; +} + +Object *Object_FromFloat(double val, Heap *heap, Error *error) +{ + FloatObject *obj = (FloatObject*) Heap_Malloc(heap, &t_float, error); + + if(obj == 0) + return 0; + + obj->val = val; + + return (Object*) obj; +} diff --git a/src/objects/o_int.c b/src/objects/o_int.c new file mode 100644 index 0000000..2219336 --- /dev/null +++ b/src/objects/o_int.c @@ -0,0 +1,41 @@ +#include +#include +#include "objects.h" + +static long long int to_int(Object *obj, Error *err); + +typedef struct { + Object base; + long long int val; +} IntObject; + +static const Type t_int = { + .base = (Object) { .type = &t_type, .flags = Object_STATIC }, + .name = "int", + .size = sizeof (IntObject), + .atomic = ATMTP_INT, + .to_int = to_int, +}; + +static long long int to_int(Object *obj, Error *err) +{ + assert(obj); + assert(err); + assert(Object_GetType(obj) == &t_int); + + (void) err; + + return ((IntObject*) obj)->val; +} + +Object *Object_FromInt(long long int val, Heap *heap, Error *error) +{ + IntObject *obj = (IntObject*) Heap_Malloc(heap, &t_int, error); + + if(obj == 0) + return 0; + + obj->val = val; + + return (Object*) obj; +} \ No newline at end of file diff --git a/src/objects/o_map.c b/src/objects/o_map.c new file mode 100644 index 0000000..d9307d2 --- /dev/null +++ b/src/objects/o_map.c @@ -0,0 +1,261 @@ +#include +#include "../utils/defs.h" +#include "objects.h" + +typedef struct { + Object base; + int mapper_size, count; + int *mapper; + Object **keys; + Object **vals; +} MapObject; + +static Object *select(Object *self, Object *key, Heap *heap, Error *err); +static _Bool insert(Object *self, Object *key, Object *val, Heap *heap, Error *err); +static int count(Object *self); + +static const Type t_map = { + .base = (Object) { .type = &t_type, .flags = Object_STATIC }, + .name = "map", + .size = sizeof (MapObject), + .select = select, + .insert = insert, + .count = count, +}; + +static inline int calc_capacity(int mapper_size) +{ + return mapper_size * 2.0 / 3.0; +} + +Object *Object_NewMap(int num, Heap *heap, Error *error) +{ + // Handle default args. + if(num < 0) + num = 0; + + // Calculate initial mapper size. + int mapper_size, capacity; + { + mapper_size = 8; + while(calc_capacity(mapper_size) < num) + mapper_size <<= 1; + + capacity = calc_capacity(mapper_size); + } + + // Make the thing. + MapObject *obj = (MapObject*) Heap_Malloc(heap, &t_map, error); + { + if(obj == 0) + return 0; + + obj->mapper_size = mapper_size; + obj->count = 0; + obj->mapper = Heap_RawMalloc(heap, sizeof(int) * capacity, error); + obj->keys = Heap_RawMalloc(heap, sizeof(Object*) * capacity, error); + obj->vals = Heap_RawMalloc(heap, sizeof(Object*) * capacity, error); + + if(obj->mapper == NULL || obj->keys == NULL || obj->vals == NULL) + return NULL; + } + + for(int i = 0; i < mapper_size; i += 1) + obj->mapper[i] = -1; + + return (Object*) obj; +} + +static Object *select(Object *self, Object *key, Heap *heap, Error *error) +{ + assert(self != NULL); + assert(self->type == &t_map); + assert(key != NULL); + assert(heap != NULL); + assert(error != NULL); + + MapObject *map = (MapObject*) self; + + int mask = map->mapper_size - 1; + int hash = Object_Hash(key, error); + int pert = hash; + + if(error->occurred) + // No hash function. + return 0; + + int i = hash & mask; + + while(1) + { + int k = map->mapper[i]; + + if(k == -1) + { + // Empty slot. + // This key is not present. + return NULL; + } + else + { + // Found an item. + // Is it the right one? + + assert(k >= 0); + + if(Object_Compare(key, map->keys[i], error)) + // Found it! + return map->vals[i]; + + if(error->occurred) + // Key doesn't implement compare. + return 0; + + // Not the one we wanted. + } + + pert >>= 5; + i = (i * 5 + pert + 1) & mask; + } + + UNREACHABLE; + return NULL; +} + +static _Bool grow(MapObject *map, Heap *heap, Error *error) +{ + assert(map != NULL); + + int new_mapper_size = map->mapper_size << 1; + int new_capacity = calc_capacity(new_mapper_size); + + int *mapper = Heap_RawMalloc(heap, sizeof(int) * new_mapper_size, error); + Object **keys = Heap_RawMalloc(heap, sizeof(Object*) * new_capacity, error); + Object **vals = Heap_RawMalloc(heap, sizeof(Object*) * new_capacity, error); + + if(mapper == NULL || keys == NULL || vals == NULL) + return 0; + + for(int i = 0; i < map->count; i += 1) + { + keys[i] = map->keys[i]; + vals[i] = map->vals[i]; + } + + for(int i = 0; i < new_mapper_size; i += 1) + mapper[i] = -1; + + // Rehash everything. + for(int i = 0; i < map->count; i += 1) + { + // This won't trigger an error because the key + // surely has a hash method since we already + // hashed it once. + int hash = Object_Hash(keys[i], error); + assert(error->occurred == 0); + + int mask = new_mapper_size - 1; + int pert = hash; + + int j = hash & mask; + + while(1) + { + if(mapper[j] == -1) + { + // No collision. + // Insert here. + mapper[j] = i; + break; + } + + // Collided. Find a new place. + pert >>= 5; + j = (j * 5 + pert + 1) & mask; + } + } + + // Done. + map->mapper = mapper; + map->mapper_size = new_mapper_size; + map->keys = keys; + map->vals = vals; + return 1; +} + +static _Bool insert(Object *self, Object *key, Object *val, Heap *heap, Error *error) +{ + assert(error != NULL); + assert(key != NULL); + assert(val != NULL); + assert(heap != NULL); + assert(self != NULL); + assert(self->type == &t_map); + + MapObject *map = (MapObject*) self; + + if(map->count == calc_capacity(map->mapper_size)) + if(!grow(map, heap, error)) + return 0; + + int mask = map->mapper_size - 1; + int hash = Object_Hash(key, error); + int pert = hash; + + if(error->occurred) + // No hash function. + return 0; + + int i = hash & mask; + + while(1) + { + int k = map->mapper[i]; + + if(k == -1) + { + // Empty slot. We can insert it here. + Object *key_copy = Object_Copy(key, heap, error); + + if(key_copy == NULL) + return NULL; + + map->mapper[i] = map->count; + map->keys[map->count] = key_copy; + map->vals[map->count] = val; + map->count += 1; + return 1; + } + else + { + assert(k >= 0); + + if(Object_Compare(key, map->keys[i], error)) + { + // Already inserted. + // Overwrite the value. + map->vals[i] = val; + return 1; + } + + if(error->occurred) + // Key doesn't implement compare. + return 0; + + // Collision. + } + + pert >>= 5; + i = (i * 5 + pert + 1) & mask; + } + + UNREACHABLE; + return 0; +} + +static int count(Object *self) +{ + MapObject *map = (MapObject*) self; + + return map->count; +} \ No newline at end of file diff --git a/src/objects/o_none.c b/src/objects/o_none.c new file mode 100644 index 0000000..16fa570 --- /dev/null +++ b/src/objects/o_none.c @@ -0,0 +1,21 @@ +#include +#include +#include "objects.h" + +static const Type t_none = { + .base = (Object) { .type = &t_type, .flags = Object_STATIC }, + .name = "none", + .size = sizeof (Object), +}; + +static Object the_none_object = { + .type = &t_none, + .flags = Object_STATIC, +}; + +Object *Object_NewNone(Heap *heap, Error *error) +{ + (void) heap; + (void) error; + return &the_none_object; +} \ No newline at end of file diff --git a/src/objects/o_string.c b/src/objects/o_string.c new file mode 100644 index 0000000..a96e761 --- /dev/null +++ b/src/objects/o_string.c @@ -0,0 +1,69 @@ +#include +#include +#include "../utils/defs.h" +#include "../utils/hash.h" +#include "objects.h" + +typedef struct { + Object base; + int size; + char *body; +} StringObject; + +static int hash(Object *self); +static int count(Object *self); + +static const Type t_string = { + .base = (Object) { .type = &t_type, .flags = Object_STATIC }, + .name = "string", + .size = sizeof (StringObject), + .hash = hash, + .count = count, +}; + +Object *Object_FromString(const char *str, int len, Heap *heap, Error *error) +{ + assert(str != NULL); + assert(heap != NULL); + assert(error != NULL); + + if(len < 0) + len = strlen(str); + + StringObject *strobj = Heap_Malloc(heap, &t_string, error); + + if(strobj == NULL) + return NULL; + + strobj->body = Heap_RawMalloc(heap, len+1, error); + strobj->size = len; + + if(strobj->body == NULL) + return NULL; + + memcpy(strobj->body, str, len); + + strobj->body[len] = '\0'; + + return (Object*) strobj; +} + +static int count(Object *self) +{ + assert(self != NULL); + assert(self->type == &t_string); + + StringObject *strobj = (StringObject*) self; + + return strobj->size; +} + +static int hash(Object *self) +{ + assert(self != NULL); + assert(self->type == &t_string); + + StringObject *strobj = (StringObject*) self; + + return hashbytes((unsigned char*) strobj->body, strobj->size); +} \ No newline at end of file diff --git a/src/objects/objects.c b/src/objects/objects.c new file mode 100644 index 0000000..862557d --- /dev/null +++ b/src/objects/objects.c @@ -0,0 +1,286 @@ +#include +#include "../utils/defs.h" +#include "objects.h" + +const Type t_type = { + .base = (Object) { .type = &t_type, .flags = Object_STATIC }, + .name = "type", + .size = sizeof (Type), +}; + +const char *Object_GetName(const Object *obj) +{ + assert(obj); + + const Type *type = Object_GetType(obj); + assert(type); + + const char *name = type->name; + assert(name); + + return name; +} + +const Type *Object_GetType(const Object *obj) +{ + assert(obj); + assert(obj->type); + return obj->type; +} + +unsigned int Object_GetSize(const Object *obj, Error *err) +{ + assert(err); + assert(obj); + + const Type *type = Object_GetType(obj); + assert(type); + + return type->size; +} + +unsigned int Object_GetDeepSize(const Object *obj, Error *err) +{ + assert(err); + assert(obj); + + const Type *type = Object_GetType(obj); + assert(type); + + if(type->deepsize == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(obj), __func__); + return 0; + } + + return type->deepsize(obj); +} + +int Object_Hash(Object *obj, Error *err) +{ + assert(obj); + + const Type *type = Object_GetType(obj); + assert(type); + + if(type->hash == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(obj), __func__); + return -1; + } + + return type->hash(obj); +} + +Object *Object_Copy(Object *obj, Heap *heap, Error *err) +{ + assert(err); + assert(obj); + + const Type *type = Object_GetType(obj); + assert(type); + + if(type->copy == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(obj), __func__); + return NULL; + } + + return type->copy(obj, heap, err); +} + +Object *Object_Call(Object *obj, Object **argv, unsigned int argc, Heap *heap, Error *err) +{ + assert(err); + assert(obj); + + const Type *type = Object_GetType(obj); + assert(type); + + if(type->call == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(obj), __func__); + return NULL; + } + + return type->call(obj, argv, argc, heap, err); +} + +Object *Object_Select(Object *coll, Object *key, Heap *heap, Error *err) +{ + assert(err); + assert(key); + assert(coll); + + const Type *type = Object_GetType(coll); + assert(type); + + if(type->select == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(coll), __func__); + return NULL; + } + + return type->select(coll, key, heap, err); +} + +Object *Object_Delete(Object *coll, Object *key, Heap *heap, Error *err) +{ + assert(err); + assert(key); + assert(coll); + + const Type *type = Object_GetType(coll); + assert(type); + + if(type->delete == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(coll), __func__); + return NULL; + } + + return type->delete(coll, key, heap, err); +} + +_Bool Object_Insert(Object *coll, Object *key, Object *val, Heap *heap, Error *err) +{ + assert(err); + assert(key); + assert(coll); + + const Type *type = Object_GetType(coll); + assert(type); + + if(type->insert == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(coll), __func__); + return 0; + } + + return type->insert(coll, key, val, heap, err); +} + +int Object_Count(Object *coll, Error *err) +{ + assert(err); + assert(coll); + + const Type *type = Object_GetType(coll); + assert(type); + + if(type->count == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(coll), __func__); + return -1; + } + + return type->count(coll); +} + +Object *Object_Next(Object *iter, Heap *heap, Error *err) +{ + assert(err); + assert(iter); + + const Type *type = Object_GetType(iter); + assert(type); + + if(type->next == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(iter), __func__); + return NULL; + } + + return type->next(iter, heap, err); +} + +Object *Object_Prev(Object *iter, Heap *heap, Error *err) +{ + assert(err); + assert(iter); + + const Type *type = Object_GetType(iter); + assert(type); + + if(type->prev == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(iter), __func__); + return NULL; + } + + return type->prev(iter, heap, err); +} + +_Bool Object_IsInt(Object *obj) +{ + assert(obj != NULL); + assert(obj->type != NULL); + return obj->type->atomic == ATMTP_INT; +} + +_Bool Object_IsFloat(Object *obj) +{ + assert(obj != NULL); + assert(obj->type != NULL); + return obj->type->atomic == ATMTP_FLOAT; +} + +long long int Object_ToInt(Object *obj, Error *err) +{ + assert(err); + assert(obj); + + if(!Object_IsInt(obj)) + { + Error_Report(err, 0, "Object is not an integer"); + return 0; + } + + const Type *type = Object_GetType(obj); + assert(type); + + if(type->to_int == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(obj), __func__); + return 0; + } + + return type->to_int(obj, err); +} + +double Object_ToFloat(Object *obj, Error *err) +{ + assert(err); + assert(obj); + + if(!Object_IsFloat(obj)) + { + Error_Report(err, 0, "Object is not a floating"); + return 0; + } + + const Type *type = Object_GetType(obj); + assert(type); + + if(type->to_float == NULL) + { + Error_Report(err, "Object %s doesn't implement %s", Object_GetName(obj), __func__); + return 0; + } + + return type->to_float(obj, err); +} + +_Bool Object_Compare(Object *obj1, Object *obj2, Error *error) +{ + if(obj1->type != obj2->type) + return 0; + + if(obj1->type->op_eql == NULL) + { + Error_Report(error, "Object %s doesn't implement %s", Object_GetName(obj1), __func__); + return 0; + } + + return obj1->type->op_eql(obj1, obj2); +} \ No newline at end of file diff --git a/src/objects/objects.h b/src/objects/objects.h new file mode 100644 index 0000000..c126aba --- /dev/null +++ b/src/objects/objects.h @@ -0,0 +1,96 @@ +#ifndef OBJECT_H +#define OBJECT_H + +#include "../utils/error.h" + +typedef struct Type Type; +typedef struct Object Object; +typedef struct xHeap Heap; + +struct Object { + const Type *type; + unsigned int flags; +}; + +typedef enum { + ATMTP_NOTATOMIC = 0, + ATMTP_INT, + ATMTP_FLOAT, +} AtomicType; + +struct Type { + + Object base; + + // Any. + const char *name; + unsigned int size; + AtomicType atomic; + + _Bool (*init)(Object *self, Error *err); + _Bool (*free)(Object *self, Error *err); + int (*hash)(Object *self); + Object* (*copy)(Object *self, Heap *heap, Error *err); + Object* (*call)(Object *self, Object **argv, unsigned int argc, Heap *heap, Error *err); + unsigned int (*deepsize)(const Object *self); + + // Collections. + Object *(*select)(Object *self, Object *key, Heap *heap, Error *err); + Object *(*delete)(Object *self, Object *key, Heap *heap, Error *err); + _Bool (*insert)(Object *self, Object *key, Object *val, Heap *heap, Error *err); + int (*count)(Object *self); + + // Iterators. + Object *(*next)(Object *self, Heap *heap, Error *err); + Object *(*prev)(Object *self, Heap *heap, Error *err); + + // Some. + union { + long long int (*to_int)(Object *self, Error *err); + double (*to_float)(Object *self, Error *err); + char *(*to_string)(Object *self, int *size, Heap *heap, Error *err); + }; + + _Bool (*op_eql)(Object *self, Object *other); +}; + +enum { + Object_STATIC = 1, +}; + +Heap* Heap_New(int size); +void Heap_Free(Heap *heap); +void* Heap_Malloc (Heap *heap, const Type *type, Error *err); +void* Heap_RawMalloc(Heap *heap, int size, Error *err); + +const Type* Object_GetType(const Object *obj); +const char* Object_GetName(const Object *obj); +unsigned int Object_GetSize(const Object *obj, Error *err); +unsigned int Object_GetDeepSize(const Object *obj, Error *err); +int Object_Hash (Object *obj, Error *err); +Object* Object_Copy (Object *obj, Heap *heap, Error *err); +Object* Object_Call (Object *obj, Object **argv, unsigned int argc, Heap *heap, Error *err); +Object* Object_Select(Object *coll, Object *key, Heap *heap, Error *err); +Object* Object_Delete(Object *coll, Object *key, Heap *heap, Error *err); +_Bool Object_Insert(Object *coll, Object *key, Object *val, Heap *heap, Error *err); +int Object_Count (Object *coll, Error *err); +Object* Object_Next (Object *iter, Heap *heap, Error *err); +Object* Object_Prev (Object *iter, Heap *heap, Error *err); + +Object* Object_NewMap(int num, Heap *heap, Error *error); +Object* Object_NewNone(Heap *heap, Error *error); + +Object* Object_FromInt (long long int val, Heap *heap, Error *error); +Object* Object_FromFloat (double val, Heap *heap, Error *error); +Object* Object_FromString(const char *str, int len, Heap *heap, Error *error); + +_Bool Object_IsInt (Object *obj); +_Bool Object_IsFloat(Object *obj); + +long long int Object_ToInt (Object *obj, Error *err); +double Object_ToFloat(Object *obj, Error *err); + +_Bool Object_Compare(Object *obj1, Object *obj2, Error *error); + +extern const Type t_type; +#endif \ No newline at end of file diff --git a/src/runtime/o_func.c b/src/runtime/o_func.c new file mode 100644 index 0000000..3dc18b1 --- /dev/null +++ b/src/runtime/o_func.c @@ -0,0 +1,53 @@ +#include +#include "../utils/defs.h" +#include "../objects/objects.h" +#include "runtime.h" + +typedef struct { + Object base; + Runtime *runtime; + Executable *exe; + int index; +} FunctionObject; + +static Object *call(Object *self, Object **argv, unsigned int argc, Heap *heap, Error *error); + +static const Type t_func = { + .base = (Object) { .type = &t_type, .flags = Object_STATIC }, + .name = "function", + .size = sizeof (FunctionObject), + .call = call, +}; + +static Object *call(Object *self, Object **argv, unsigned int argc, Heap *heap, Error *error) +{ + assert(self != NULL); + assert(heap != NULL); + assert(error != NULL); + + FunctionObject *func = (FunctionObject*) self; + + assert(func->exe != NULL); + assert(func->index >= 0); + + return run(func->runtime, error, func->exe, func->index, argv, argc); +} + +Object *Object_FromNojaFunction(Runtime *runtime, Executable *exe, int index, Heap *heap, Error *error) +{ + assert(runtime != NULL); + assert(exe != NULL); + assert(index >= 0); + assert(heap != NULL); + assert(error != NULL); + + FunctionObject *func = (FunctionObject*) Heap_Malloc(heap, &t_func, error); + + if(func == NULL) + return NULL; + + func->runtime = runtime; + func->exe = exe; + func->index = index; + return (Object*) func; +} \ No newline at end of file diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c new file mode 100644 index 0000000..1121801 --- /dev/null +++ b/src/runtime/runtime.c @@ -0,0 +1,522 @@ +#include +#include "../utils/defs.h" +#include "../utils/stack.h" +#include "runtime.h" + +#define MAX_FRAME_STACK 16 + +typedef struct Frame Frame; + +struct Frame { + Frame *prev; + Object *vars; + Executable *exe; + int index, used; +}; + +struct xRuntime { + int depth; + Frame *frame; + Stack *stack; + Heap *heap; +}; + +Runtime *Runtime_New(int stack_size, int heap_size) +{ + if(stack_size < 0) + stack_size = 1024; + + if(heap_size < 0) + heap_size = 65536; + + Runtime *runtime; + + { + runtime = malloc(sizeof(Runtime)); + + if(runtime == NULL) + return NULL; + + runtime->heap = Heap_New(heap_size); + + if(runtime->heap == NULL) + { + free(runtime); + return NULL; + } + + runtime->stack = Stack_New(stack_size); + + if(runtime->stack == NULL) + { + Heap_Free(runtime->heap); + free(runtime); + } + + runtime->frame = NULL; + runtime->depth = 0; + } + + return runtime; +} + +void Runtime_Free(Runtime *runtime) +{ + Heap_Free(runtime->heap); + Stack_Free(runtime->stack); + free(runtime); +} + +_Bool Runtime_Push(Runtime *runtime, Error *error, Object *obj) +{ + assert(runtime != NULL); + assert(error != NULL); + assert(obj != NULL); + + if(runtime->depth == 0) + { + Error_Report(error, 0, "There are no frames on the stack"); + return 0; + } + + assert(runtime->frame->used <= MAX_FRAME_STACK); + + if(runtime->frame->used == MAX_FRAME_STACK) + { + Error_Report(error, 0, "Frames stack limit of %d reached", MAX_FRAME_STACK); + return 0; + } + + if(!Stack_Push(runtime->stack, obj)) + { + Error_Report(error, 0, "Out of stack"); + return 0; + } + + runtime->frame->used += 1; + return 1; +} + +_Bool Runtime_Pop(Runtime *runtime, Error *error, unsigned int n) +{ + assert(runtime != NULL); + assert(error != NULL); + + if(runtime->depth == 0) + { + Error_Report(error, 0, "There are no frames on the stack"); + return 0; + } + + assert(runtime->frame->used >= 0); + + if((unsigned int) runtime->frame->used < n) + { + Error_Report(error, 0, "Frames has not enough values on the stack"); + return 0; + } + + // The frame has something on the stack, + // this means that the stack isn't empty + // and popping won't fail. + (void) Stack_Pop(runtime->stack, n); + + runtime->frame->used -= n; + + assert(runtime->frame->used >= 0); + + return 1; +} + +typedef struct { + Executable *exe; + int index; +} SnapshotNode; + +struct xSnapshot { + int depth; + SnapshotNode nodes[]; +}; + +Snapshot *Snapshot_New(Runtime *runtime) +{ + assert(runtime->depth >= 0); + + Snapshot *snapshot = malloc(sizeof(Snapshot) + sizeof(SnapshotNode) * runtime->depth); + + if(snapshot == NULL) + return NULL; + + { + Frame *f = runtime->frame; + + snapshot->depth = 0; + + while(snapshot->depth < runtime->depth) + { + assert(f != NULL); + + SnapshotNode *node = snapshot->nodes + snapshot->depth; + + node->exe = Executable_Copy(f->exe); + node->index = f->index; + + if(node->exe == NULL) + goto abort; + + f = f->prev; + snapshot->depth += 1; + } + + assert(f == NULL); + } + + return snapshot; + +abort: + Snapshot_Free(snapshot); + return NULL; +} + +void Snapshot_Free(Snapshot *snapshot) +{ + for(int i = 0; i < snapshot->depth; i += 1) + { + Executable *exe = snapshot->nodes[i].exe; + + Executable_Free(exe); + } + free(snapshot); +} + +void Snapshot_Print(Snapshot *snapshot, FILE *fp) +{ + assert(snapshot != NULL); + assert(fp != NULL); + + fprintf(fp, " (Snapshot can't be printed yet)\n"); +} + +static Object *do_math_op(Object *lop, Object *rop, Opcode opcode, Heap *heap, Error *error) +{ + assert(lop != NULL); + assert(rop != NULL); + + #define APPLY(x, y, z, id) \ + switch(opcode) \ + { \ + case OPCODE_ADD: (z) = (x) + (y); break; \ + case OPCODE_SUB: (z) = (x) - (y); break; \ + case OPCODE_MUL: (z) = (x) * (y); break; \ + case OPCODE_DIV: (z) = (x) / (y); break; \ + default: assert(0); break; \ + } + + Object *res; + + if(Object_IsInt(lop)) + { + long long int raw_lop = Object_ToInt(lop, error); + + if(error->occurred) + return NULL; + + if(Object_IsInt(rop)) + { + // int + int + long long int raw_rop = Object_ToInt(rop, error); + + if(error->occurred) + return NULL; + + long long int raw_res; + + APPLY(raw_lop, raw_rop, raw_res, id) + + res = Object_FromInt(raw_res, heap, error); + } + else if(Object_IsFloat(rop)) + { + // int + float + double raw_rop = Object_ToFloat(rop, error); + + if(error->occurred) + return NULL; + + double raw_res; + + APPLY((double) raw_lop, raw_rop, raw_res, id) + + res = Object_FromFloat(raw_res, heap, error); + } + else + { + Error_Report(error, 0, "Arithmetic operation on a non-numeric object"); + return NULL; + } + } + else if(Object_IsFloat(lop)) + { + double raw_lop = Object_ToFloat(lop, error); + + if(error->occurred) + return NULL; + + if(Object_IsInt(rop)) + { + // float + int + long long int raw_rop = Object_ToInt(rop, error); + + if(error->occurred) + return NULL; + + double raw_res; + + APPLY(raw_lop, (double) raw_rop, raw_res, id) + + res = Object_FromFloat(raw_res, heap, error); + } + else if(Object_IsFloat(rop)) + { + // float + float + double raw_rop = Object_ToFloat(rop, error); + + if(error->occurred) + return NULL; + + double raw_res; + + APPLY(raw_lop, raw_rop, raw_res, id) + + res = Object_FromFloat(raw_res, heap, error); + } + else + { + Error_Report(error, 0, "Arithmetic operation on a non-numeric object"); + return NULL; + } + } + else + { + Error_Report(error, 0, "Arithmetic operation on a non-numeric object"); + return NULL; + } + + #undef APPLY + + return res; +} + +static _Bool step(Runtime *runtime, Error *error) +{ + assert(runtime != NULL); + + Opcode opcode; + Operand ops[3]; + int opc = sizeof(ops) / sizeof(ops[0]); + + if(!Executable_Fetch(runtime->frame->exe, runtime->frame->index, &opcode, ops, &opc)) + { + Error_Report(error, 1, "Invalid instruction index"); + return 0; + } + + runtime->frame->index += 1; + + switch(opcode) + { + case OPCODE_NOPE: + // Do nothing. + return 1; + + case OPCODE_POS: + Error_Report(error, 1, "POS not implemented"); + return 0; + + case OPCODE_NEG: + Error_Report(error, 1, "NEG not implemented"); + return 0; + + case OPCODE_ADD: + case OPCODE_SUB: + case OPCODE_MUL: + case OPCODE_DIV: + { + Object *rop = Stack_Top(runtime->stack, 0); + Object *lop = Stack_Top(runtime->stack, -1); + + if(!Runtime_Pop(runtime, error, 2)) + return 0; + + // We managed to pop rop and lop, + // so we know they're not NULL. + assert(rop != NULL); + assert(lop != NULL); + + Object *res = do_math_op(lop, rop, opcode, runtime->heap, error); + + if(res == NULL) + return 0; + + if(!Runtime_Push(runtime, error, res)) + return 0; + break; + } + + case OPCODE_PUSHI: + { + assert(opc == 1); + assert(ops[0].type == OPTP_INT); + + Object *obj = Object_FromInt(ops[0].as_int, runtime->heap, error); + + if(obj == NULL) + return 0; + + if(!Runtime_Push(runtime, error, obj)) + return 0; + return 1; + } + + case OPCODE_PUSHF: + { + assert(opc == 1); + assert(ops[0].type == OPTP_FLOAT); + + Object *obj = Object_FromFloat(ops[0].as_float, runtime->heap, error); + + if(obj == NULL) + return 0; + + if(!Runtime_Push(runtime, error, obj)) + return 0; + return 1; + } + + case OPCODE_PUSHS: + { + assert(opc == 1); + assert(ops[0].type == OPTP_STRING); + + Object *obj = Object_FromString(ops[0].as_string, -1, runtime->heap, error); + + if(obj == NULL) + return 0; + + if(!Runtime_Push(runtime, error, obj)) + return 0; + return 1; + } + + case OPCODE_PUSHV: + { + assert(opc == 1); + assert(ops[0].type == OPTP_STRING); + + Object *key = Object_FromString(ops[0].as_string, -1, runtime->heap, error); + + if(key == NULL) + return 0; + + Object *obj = Object_Select(runtime->frame->vars, key, runtime->heap, error); + + if(obj == NULL) + { + if(error->occurred == 0) + // There's no such variable. + Error_Report(error, 1, "Reference to undefined variable \"%s\"", ops[0].as_string); + return 0; + } + return 1; + } + + case OPCODE_RETURN: + return 0; + + default: + UNREACHABLE; + return 0; + } + + return 1; +} + +Object *run(Runtime *runtime, Error *error, Executable *exe, int index, Object **argv, int argc) +{ + assert(runtime != NULL); + assert(error != NULL); + assert(exe != NULL); + assert(index >= 0); + assert(argc >= 0); + + // Initialize the frame. + Frame frame; + { + frame.prev = NULL; + frame.vars = Object_NewMap(-1, runtime->heap, error); + frame.exe = Executable_Copy(exe); + frame.index = index; + frame.used = 0; + + if(frame.vars == NULL) + return NULL; + + if(frame.exe == NULL) + { + Error_Report(error, 1, "Failed to copy executable"); + return NULL; + } + + // Add the frame to the runtime. + frame.prev = runtime->frame; + runtime->frame = &frame; + runtime->depth += 1; + } + + // Push the initial values of the frame. + for(int i = 0; i < argc; i += 1) + if(!Runtime_Push(runtime, error, argv[i])) + goto cleanup; + + // Run the code. + while(step(runtime, error)); + + // This is what the function will return. + Object *result = NULL; + + // If an error occurred, we want to return NULL. + if(error->occurred == 0) + { + // If the step function left something + // on the stack, we return that. If it + // didn't, we return some other default + // value like "none". + if(frame.used == 0) + { + // Nothing to return on the stack. Set to none. + result = Object_NewNone(runtime->heap, error); + } + else + { + result = Stack_Top(runtime->stack, 0); + assert(result != NULL); + } + } + +cleanup: + // Remove the frame-owned items from the stack. + // This can't fail. + (void) Stack_Pop(runtime->stack, frame.used); + + // Deinitialize the frame. + { + // Remove the frame from the runtime. + runtime->frame = runtime->frame->prev; + runtime->depth -= 1; + + // Deallocate the fields. + Executable_Free(frame.exe); + } + + return result; +} \ No newline at end of file diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h new file mode 100644 index 0000000..5267e2c --- /dev/null +++ b/src/runtime/runtime.h @@ -0,0 +1,22 @@ +#ifndef RUNTIME_H +#define RUNTIME_H +#include // meh.. just for the definition of FILE. +#include "../utils/error.h" +#include "../objects/objects.h" +#include "../common/executable.h" + +typedef struct xRuntime Runtime; +Runtime* Runtime_New(int stack_size, int heap_size); +void Runtime_Free(Runtime *runtime); +_Bool Runtime_Pop(Runtime *runtime, Error *error, unsigned int n); +_Bool Runtime_Push(Runtime *runtime, Error *error, Object *obj); + +typedef struct xSnapshot Snapshot; +Snapshot *Snapshot_New(Runtime *runtime); +void Snapshot_Free(Snapshot *snapshot); +void Snapshot_Print(Snapshot *snapshot, FILE *fp); + +Object *run(Runtime *runtime, Error *error, Executable *exe, int index, Object **argv, int argc); + +Object *Object_FromNojaFunction(Runtime *runtime, Executable *exe, int offset, Heap *heap, Error *error); +#endif \ No newline at end of file diff --git a/src/runtime/runtime_error.c b/src/runtime/runtime_error.c new file mode 100644 index 0000000..84928bb --- /dev/null +++ b/src/runtime/runtime_error.c @@ -0,0 +1,29 @@ +#include +#include "runtime_error.h" + +static void on_report(Error *error) +{ + assert(error != NULL); + + RuntimeError *error2 = (RuntimeError*) error; + + if(error2->runtime != NULL) + error2->snapshot = Snapshot_New(error2->runtime); +} + +void RuntimeError_Init(RuntimeError *error, Runtime *runtime) +{ + assert(error != NULL); + + Error_Init2(&error->base, on_report); + + error->runtime = runtime; + error->snapshot = NULL; +} + +void RuntimeError_Free(RuntimeError *error) +{ + if(error->snapshot) + Snapshot_Free(error->snapshot); + Error_Free(&error->base); +} \ No newline at end of file diff --git a/src/runtime/runtime_error.h b/src/runtime/runtime_error.h new file mode 100644 index 0000000..2059bd3 --- /dev/null +++ b/src/runtime/runtime_error.h @@ -0,0 +1,14 @@ +#ifndef RUNTIME_ERROR_H +#define RUNTIME_ERROR_H +#include "../utils/error.h" +#include "runtime.h" + +typedef struct { + Error base; + Runtime *runtime; + Snapshot *snapshot; +} RuntimeError; + +void RuntimeError_Init(RuntimeError *error, Runtime *runtime); +void RuntimeError_Free(RuntimeError *error); +#endif \ No newline at end of file diff --git a/src/utils/bpalloc.c b/src/utils/bpalloc.c new file mode 100644 index 0000000..8bb5500 --- /dev/null +++ b/src/utils/bpalloc.c @@ -0,0 +1,217 @@ +#include +#include +#include +#include "defs.h" +#include "bpalloc.h" + +#if USING_VALGRIND +#include +#endif + +#define CHUNK_SIZE 4096 +#define PADDING 8 + +typedef struct BPAllocChunk BPAllocChunk; +struct BPAllocChunk { + BPAllocChunk *prev; + char body[]; +}; + +struct xBPAlloc { + int flags; + void *userp; + void *(*fn_malloc)(void *userp, int size); + void (*fn_free )(void *userp, void *addr); + int minsize, size, used; + BPAllocChunk *tail; +}; + +enum { + FG_STATIC = 1, +}; + +static void *default_fn_malloc(void *userp, int size); +static void default_fn_free (void *userp, void *addr); + +BPAlloc *BPAlloc_Init(int chunk_size) +{ + return BPAlloc_Init2(-1, chunk_size, NULL, NULL, NULL); +} + +BPAlloc *BPAlloc_Init2(int first_size, int chunk_size, + void *userp, + void *(*fn_malloc)(void *userp, int size), + void (*fn_free )(void *userp, void *addr)) +{ + if(chunk_size < 0) + chunk_size = CHUNK_SIZE; + + if(first_size < 0) + first_size = chunk_size; + + if(fn_malloc == NULL) + { + userp = NULL; + fn_malloc = default_fn_malloc; + fn_free = default_fn_free; + } + + void *temp = fn_malloc(userp, sizeof(BPAlloc) + sizeof(BPAllocChunk) + first_size + PADDING); + + if(temp == NULL) + return NULL; + + BPAlloc *alloc = temp; + + BPAllocChunk *chunk = (BPAllocChunk*) (alloc + 1); + chunk->prev = NULL; + + alloc->flags = 0; + alloc->used = 0; + alloc->size = first_size; + alloc->tail = chunk; + alloc->minsize = chunk_size; + alloc->userp = userp; + alloc->fn_malloc = fn_malloc; + alloc->fn_free = fn_free; + +#if USING_VALGRIND + VALGRIND_CREATE_MEMPOOL(alloc, PADDING, 0); +#endif + + return alloc; +} + +BPAlloc *BPAlloc_Init3(void *mem, int mem_size, int chunk_size, + void *userp, + void *(*fn_malloc)(void *userp, int size), + void (*fn_free )(void *userp, void *addr)) +{ + assert(mem != NULL); + assert(mem_size >= 0); + + if(chunk_size < 0) + chunk_size = CHUNK_SIZE; + + if(fn_malloc == NULL) + { + userp = NULL; + fn_malloc = default_fn_malloc; + fn_free = default_fn_free; + } + + int required = sizeof(BPAlloc) + + sizeof(BPAllocChunk) + + PADDING; + + if(mem_size < required) + // Not enough memory was provided. + return NULL; + + BPAlloc *alloc = mem; + + BPAllocChunk *chunk = (BPAllocChunk*) (alloc + 1); + chunk->prev = NULL; + + alloc->flags = FG_STATIC; + alloc->used = 0; + alloc->size = mem_size - sizeof(BPAlloc) - sizeof(BPAllocChunk); + alloc->tail = chunk; + alloc->minsize = chunk_size; + alloc->userp = userp; + alloc->fn_malloc = fn_malloc; + alloc->fn_free = fn_free; + +#if USING_VALGRIND + VALGRIND_CREATE_MEMPOOL(alloc, PADDING, 0); +#endif + + return alloc; +} + +void BPAlloc_Free(BPAlloc *alloc) +{ + assert(alloc != NULL); + +#if USING_VALGRIND + VALGRIND_DESTROY_MEMPOOL(alloc); +#endif + + BPAllocChunk *chunk = alloc->tail; + + while(chunk->prev) + { + BPAllocChunk *prev = chunk->prev; + + if(alloc->fn_free) + alloc->fn_free(alloc->userp, chunk); + + chunk = prev; + } + + if(!(alloc->flags & FG_STATIC)) + if(alloc->fn_free) + alloc->fn_free(alloc->userp, alloc); +} + +void *BPAlloc_Malloc(BPAlloc *alloc, int req_size) +{ + assert(alloc != NULL); + assert(req_size >= 0); + + alloc->used += PADDING; + + if(alloc->used & 7) + alloc->used = (alloc->used & ~7) + 8; + + if(alloc->used + req_size > alloc->size) + { + // If the chunk size is lower than the + // requested size, then set the chunk + // size to the requested size. + int chunk_size = MAX(alloc->minsize, req_size + PADDING); + + assert(alloc->fn_malloc != NULL); + BPAllocChunk *chunk = alloc->fn_malloc(alloc->userp, sizeof(BPAllocChunk) + chunk_size); + + if(chunk == NULL) + return NULL; + + chunk->prev = alloc->tail; + alloc->tail = chunk; + alloc->size = chunk_size; + alloc->used = PADDING; + + if(alloc->used & 7) + alloc->used = (alloc->used & ~7) + 8; + } + + void *addr = alloc->tail->body + alloc->used; + + assert(((intptr_t) addr) % 8 == 0); + + alloc->used += req_size; + +#if USING_VALGRIND + VALGRIND_MEMPOOL_ALLOC(alloc, addr, req_size); +// VALGRIND_MAKE_MEM_NOACCESS((char*) addr - PADDING, PADDING); +// VALGRIND_MAKE_MEM_NOACCESS((char*) addr + req_size, PADDING); +#endif + + return addr; +} + +static void *default_fn_malloc(void *userp, int size) +{ + assert(userp == NULL); + assert(size >= 0); + + return malloc(size); +} + +static void default_fn_free(void *userp, void *addr) +{ + assert(userp == NULL); + + free(addr); +} diff --git a/src/utils/bpalloc.h b/src/utils/bpalloc.h new file mode 100644 index 0000000..6c44d9a --- /dev/null +++ b/src/utils/bpalloc.h @@ -0,0 +1,9 @@ +#ifndef BPALLOC_H +#define BPALLOC_H +typedef struct xBPAlloc BPAlloc; +BPAlloc* BPAlloc_Init(int chunk_size); +BPAlloc* BPAlloc_Init2(int first_size, int chunk_size, void *userp, void *(*fn_malloc)(void *userp, int size), void (*fn_free )(void *userp, void *addr)); +BPAlloc* BPAlloc_Init3(void *mem, int mem_size, int chunk_size, void *userp, void *(*fn_malloc)(void *userp, int size), void (*fn_free )(void *userp, void *addr)); +void BPAlloc_Free(BPAlloc *alloc); +void* BPAlloc_Malloc(BPAlloc *alloc, int req_size); +#endif \ No newline at end of file diff --git a/src/utils/bucketlist.c b/src/utils/bucketlist.c new file mode 100644 index 0000000..62b1ad7 --- /dev/null +++ b/src/utils/bucketlist.c @@ -0,0 +1,177 @@ +#include +#include +#include +#include "bucketlist.h" +#include "defs.h" + +#define MIN_BUCKET_SIZE 4096 + +typedef struct Bucket Bucket; +struct Bucket { + Bucket* next; + int size, + used, + aidx; + char body[]; +}; + +struct xBucketList { + BPAlloc *alloc; + Bucket *head, + *tail; + int size; +}; + +BucketList *BucketList_New(BPAlloc *alloc) +{ + assert(alloc != NULL); + + BucketList *blist = BPAlloc_Malloc(alloc, sizeof(BucketList) + sizeof(Bucket) + MIN_BUCKET_SIZE); + + if(blist == NULL) + return NULL; + + Bucket *head = (Bucket*) (blist + 1); + head->next = NULL; + head->size = MIN_BUCKET_SIZE; + head->used = 0; + head->aidx = 0; + + blist->alloc = alloc; + blist->head = head; + blist->tail = head; + blist->size = 0; + return blist; +} + +int BucketList_Size(BucketList *blist) +{ + return blist->size; +} + +static Bucket *make_bucket(BPAlloc *alloc, int size) +{ + Bucket *new_bucket = BPAlloc_Malloc(alloc, sizeof(Bucket) + size); + + if(new_bucket == NULL) + return NULL; + + // Initialize it. + new_bucket->next = NULL; + new_bucket->size = size; + new_bucket->used = 0; + new_bucket->aidx = -1; + return new_bucket; +} + +static void append_bucket(BucketList *blist, Bucket *new_bucket) +{ + new_bucket->aidx = blist->size; + blist->tail->next = new_bucket; + blist->tail = new_bucket; +} + +_Bool BucketList_Append(BucketList *blist, const void *data, int size) +{ + assert(blist != NULL); + assert(size >= 0); + + int not_copied_yet = size; + + while(not_copied_yet > 0) + { + // Copy until there's nothing left + // or until the current bucket is + // full. If the bucket is already + // full, add another one. + + int left_in_bucket = blist->tail->size - blist->tail->used; + + if(left_in_bucket == 0) + { + Bucket *new_bucket = make_bucket(blist->alloc, MIN_BUCKET_SIZE); + + if(new_bucket == NULL) + return 0; + + append_bucket(blist, new_bucket); + } + + // Decide how much to copy. + int copying = MIN(not_copied_yet, left_in_bucket); + + // Copy into the bucket. + { + char *dst = blist->tail->body + blist->tail->used; + + if(data == NULL) + memset(dst, 0, copying); + else + memcpy(dst, data + size - not_copied_yet, copying); + + blist->tail->used += copying; + } + + not_copied_yet -= copying; + } + + blist->size += size; + return 1; +} + +void *BucketList_Append2(BucketList *blist, const void *data, int size) +{ + assert(blist != NULL); + assert(size >= 0); + + // If the data doesn't fit inside the + // current bucket, add another one with + // enough space. + if(blist->tail->used + size > blist->tail->size) + { + int bucket_size = MAX(MIN_BUCKET_SIZE, size); + + Bucket *new_bucket = make_bucket(blist->alloc, bucket_size); + + if(new_bucket == NULL) + return 0; + + append_bucket(blist, new_bucket); + } + + void *addr = blist->tail->body + blist->tail->used; + + // Do the copying. + if(data == NULL) + memset(addr, 0, size); + else + memcpy(addr, data, size); + + blist->tail->used += size; + blist->size += size; + return addr; +} + +void BucketList_Copy(BucketList *blist, void *dest, int len) +{ + assert(blist != NULL); + assert(dest != NULL); + + if(len < 0) + len = blist->size; + + int copied = 0; + + Bucket *bucket = blist->head; + + while(bucket && copied < len) + { + int copying = MIN(len - copied, bucket->used); + assert(copying >= 0); + + memcpy((char*) dest + copied, bucket->body, copying); + + copied += copying; + bucket = bucket->next; + } +} \ No newline at end of file diff --git a/src/utils/bucketlist.h b/src/utils/bucketlist.h new file mode 100644 index 0000000..66e9a63 --- /dev/null +++ b/src/utils/bucketlist.h @@ -0,0 +1,10 @@ +#ifndef BUCKETLIST_H +#define BUCKETLIST_H +#include "bpalloc.h" +typedef struct xBucketList BucketList; +BucketList *BucketList_New(BPAlloc *alloc); +int BucketList_Size(BucketList *blist); +void BucketList_Copy(BucketList *blist, void *dest, int len); +_Bool BucketList_Append (BucketList *blist, const void *data, int size); +void *BucketList_Append2(BucketList *blist, const void *data, int size); +#endif \ No newline at end of file diff --git a/src/utils/defs.h b/src/utils/defs.h new file mode 100644 index 0000000..c077a38 --- /dev/null +++ b/src/utils/defs.h @@ -0,0 +1,17 @@ +#include + +#ifndef MAX +#define MAX(x, y) ((x) > (y) ? (x) : (y)) +#endif + +#ifndef MIN +#define MIN(x, y) ((x) < (y) ? (x) : (y)) +#endif + +#ifndef NULL +#define NULL ((void*) 0) +#endif + +#define UNREACHABLE assert(0); + +#define membersizeof(type, member) (sizeof(((type*) 0)->member)) \ No newline at end of file diff --git a/src/utils/error.c b/src/utils/error.c new file mode 100644 index 0000000..062d870 --- /dev/null +++ b/src/utils/error.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include "error.h" + +void Error_Init(Error *err) +{ + memset(err, 0, sizeof (Error)); +} + +void Error_Init2(Error *err, void (*on_report)(Error *err)) +{ + memset(err, 0, sizeof (Error)); + err->on_report = on_report; +} + +void Error_Free(Error *err) +{ + if(err->message2 != err->message) + free(err->message); + memset(err, 0, sizeof (Error)); +} + +void _Error_Report(Error *err, _Bool internal, + const char *file, const char *func, int line, + const char *fmt, ...) +{ + va_list va; + va_start(va, fmt); + _Error_Report2(err, internal, file, func, line, fmt, va); + va_end(va); +} + +void _Error_Report2(Error *err, _Bool internal, + const char *file, const char *func, int line, + const char *fmt, va_list va) +{ + assert(err); + assert(file); + assert(func); + assert(line > 0); + assert(fmt); + assert(err->occurred == 0); + + err->occurred = 1; + err->internal = internal; + err->file = file; + err->func = func; + err->line = line; + + va_list va2; + va_copy(va2, va); + + int p = vsnprintf(err->message2, sizeof(err->message2), fmt, va); + + assert(p > -1); + + if((unsigned int) p > sizeof(err->message2)-1) + { + char *temp = malloc(p+1); + + if(temp == NULL) + { + err->truncated = 1; + err->message = err->message2; + err->length = sizeof(err->message2)-1; + } + else + { + snprintf(temp, p+1, fmt, va2); + err->truncated = 0; + err->message = temp; + err->length = p; + } + } + else + { + err->truncated = 0; + err->message = err->message2; + err->length = p; + } + + va_end(va2); + + if(err->on_report) + err->on_report(err); +} \ No newline at end of file diff --git a/src/utils/error.h b/src/utils/error.h new file mode 100644 index 0000000..d2f478d --- /dev/null +++ b/src/utils/error.h @@ -0,0 +1,26 @@ +#ifndef ERROR_H +#define ERROR_H +#include + +typedef struct Error Error; + +struct Error { + void (*on_report)(Error *err); + _Bool occurred, + internal, + truncated; + int length; + char* message; + char message2[256]; + const char *file, + *func; + int line; +}; + +void Error_Init(Error *err); +void Error_Init2(Error *err, void (*on_report)(Error *err)); +void Error_Free(Error *err); +#define Error_Report(err, internal, fmt, ...) _Error_Report(err, internal, __FILE__, __func__, __LINE__, fmt, ## __VA_ARGS__) +void _Error_Report (Error *err, _Bool internal, const char *file, const char *func, int line, const char *fmt, ...); +void _Error_Report2(Error *err, _Bool internal, const char *file, const char *func, int line, const char *fmt, va_list va); +#endif \ No newline at end of file diff --git a/src/utils/hash.c b/src/utils/hash.c new file mode 100644 index 0000000..cd20650 --- /dev/null +++ b/src/utils/hash.c @@ -0,0 +1,19 @@ +#include +#include "hash.h" + +int hashbytes(unsigned char *str, int len) +{ + int x = (intptr_t) str; // just to not use 0. + + x ^= *str << 7; + + for(int i = 0; i < len; i += 1) + x = (1000003UL * x) ^ *str++; + + x ^= len; + + if(x == -1) + x = -2; + + return x; +} \ No newline at end of file diff --git a/src/utils/hash.h b/src/utils/hash.h new file mode 100644 index 0000000..220ea4b --- /dev/null +++ b/src/utils/hash.h @@ -0,0 +1,4 @@ +#ifndef HASH_H +#define HASH_H +int hashbytes(unsigned char *str, int len); +#endif \ No newline at end of file diff --git a/src/utils/promise.c b/src/utils/promise.c new file mode 100644 index 0000000..8720e25 --- /dev/null +++ b/src/utils/promise.c @@ -0,0 +1,106 @@ +#include +#include +#include "promise.h" +#include "defs.h" + +typedef struct Gap Gap; +struct Gap { + Gap *next; + void *dest; + void *userp; + void (*callback)(void*); +}; + +struct xPromise { + BPAlloc *alloc; + _Bool set; + Gap *gaps; + int size; + char body[]; +}; + +Promise *Promise_New(BPAlloc *alloc, int size) +{ + assert(alloc != NULL); + assert(size >= 0); + + Promise *promise = BPAlloc_Malloc(alloc, sizeof(Promise) + size); + + if(promise == NULL) + return NULL; + + promise->alloc = alloc; + promise->set = 0; + promise->gaps = NULL; + promise->size = size; + return promise; +} + +unsigned int Promise_Size(Promise *promise) +{ + return promise->size; +} + +void Promise_Delete(Promise *promise) +{ + assert(promise->set == 1); +} + +void Promise_Resolve(Promise *promise, const void *data, int size) +{ + assert(size >= 0); + assert(size == promise->size); + assert(promise->set == 0); + + memcpy(promise->body, data, size); + promise->set = 1; + + Gap *gap = promise->gaps; + while(gap) + { + memcpy(gap->dest, data, size); + + if(gap->callback) + gap->callback(gap->userp); + + gap = gap->next; + } + + promise->gaps = NULL; +} + +_Bool Promise_Subscribe(Promise *promise, void *dest) +{ + assert(promise != NULL); + assert(dest != NULL); + return Promise_Subscribe2(promise, dest, NULL, NULL); +} + +_Bool Promise_Subscribe2(Promise *promise, void *dest, void *userp, void (*callback)(void*)) +{ + assert(promise != NULL); + assert(dest != NULL); + + if(promise->set == 0) + { + Gap *gap = BPAlloc_Malloc(promise->alloc, sizeof(Gap)); + + if(gap == NULL) + return 0; + + gap->next = promise->gaps; + gap->dest = dest; + gap->userp = userp; + gap->callback = callback; + promise->gaps = gap; + } + else + { + memcpy(dest, promise->body, promise->size); + + if(callback) + callback(userp); + } + + return 1; +} \ No newline at end of file diff --git a/src/utils/promise.h b/src/utils/promise.h new file mode 100644 index 0000000..9d2c64f --- /dev/null +++ b/src/utils/promise.h @@ -0,0 +1,11 @@ +#ifndef PROMISE_H +#define PROMISE_H +#include "bpalloc.h" +typedef struct xPromise Promise; +Promise *Promise_New(BPAlloc *alloc, int size); +unsigned int Promise_Size(Promise *promise); +void Promise_Delete(Promise *promise); +void Promise_Resolve(Promise *promise, const void *data, int size); +_Bool Promise_Subscribe(Promise *promise, void *dest); +_Bool Promise_Subscribe2(Promise *promise, void *dest, void *userp, void (*callback)(void*)); +#endif \ No newline at end of file diff --git a/src/utils/source.c b/src/utils/source.c new file mode 100644 index 0000000..a7a999b --- /dev/null +++ b/src/utils/source.c @@ -0,0 +1,160 @@ +#include +#include +#include +#include +#include +#include "source.h" + +struct xSource { + char *name; + char *body; + int size; + int refs; +}; + +Source *Source_Copy(Source *s) +{ + s->refs += 1; + return s; +} + +void Source_Free(Source *s) +{ + s->refs -= 1; + assert(s->refs >= 0); + + if(s->refs == 0) + free(s); +} + +const char *Source_GetName(const Source *s) +{ + return s->name; +} + +const char *Source_GetBody(const Source *s) +{ + return s->body; +} + +unsigned int Source_GetSize(const Source *s) +{ + return s->size; +} + +Source *Source_FromFile(const char *file, Error *error) +{ + assert(file != NULL); + + // Open the file and get it's size. + // at the end of the block, the file + // cursor will point at the start of + // the file. + FILE *fp; + int size; + { + fp = fopen(file, "rb"); + + if(fp == NULL) + { + if(errno == ENOENT) + Error_Report(error, 0, "File \"%s\" doesn't exist", file); + else + Error_Report(error, 1, "Call to fopen failed (%s, errno = %d)", strerror(errno), errno); + return NULL; + } + + if(fseek(fp, 0, SEEK_END)) + { + Error_Report(error, 1, "Call to fseek failed (%s, errno = %d)", strerror(errno), errno); + fclose(fp); + return NULL; + } + + size = ftell(fp); + + if(size < 0) + { + Error_Report(error, 1, "Call to ftell failed (%s, errno = %d)", strerror(errno), errno); + fclose(fp); + return NULL; + } + + if(fseek(fp, 0, SEEK_END)) + { + Error_Report(error, 1, "Call to fseek failed (%s, errno = %d)", strerror(errno), errno); + fclose(fp); + return NULL; + } + } + + // Allocate the source structure. + Source *s; + { + int namel = strlen(file); + + s = malloc(sizeof(Source) + namel + size + 2); + + if(s == NULL) + { + Error_Report(error, 1, "No memory"); + fclose(fp); + return NULL; + } + + s->name = (char*) (s + 1); + s->body = s->name + namel + 1; + } + + // Copy the name into it. + strcpy(s->name, file); + s->size = size; + s->refs = 1; + + // Now copy the file contents into it. + { + int p = fread(s->body, 1, size, fp); + + if(p != size) + { + Error_Report(error, 1, "Call to fread failed, %d bytes out of %d were read (%s, errno = %d)", p, size, strerror(errno), errno); + fclose(fp); + free(s); + return NULL; + } + + s->body[s->size] = '\0'; + } + + fclose(fp); + return s; +} + +Source *Source_FromString(const char *name, const char *body, int size, Error *error) +{ + assert(body != NULL); + + if(size < 0) + size = strlen(body); + + int namel = name ? strlen(name) : 0; + + void *memory = malloc(sizeof(Source) + namel + size + 2); + + if(memory == NULL) + { + Error_Report(error, 1, "No memory"); + return NULL; + } + + Source *s = memory; + s->name = (char*) (s + 1); + s->body = s->name + namel + 1; + s->size = size; + s->refs = 1; + + if(name) + strcpy(s->name, name); + strncpy(s->body, body, size); + return s; +} \ No newline at end of file diff --git a/src/utils/source.h b/src/utils/source.h new file mode 100644 index 0000000..8e32456 --- /dev/null +++ b/src/utils/source.h @@ -0,0 +1,12 @@ +#ifndef SOURCE_H +#define SOURCE_H +#include "error.h" +typedef struct xSource Source; +Source *Source_Copy(Source *s); +void Source_Free(Source *s); +const char *Source_GetName(const Source *s); +const char *Source_GetBody(const Source *s); +unsigned int Source_GetSize(const Source *s); +Source *Source_FromFile(const char *file, Error *error); +Source *Source_FromString(const char *name, const char *body, int size, Error *error); +#endif \ No newline at end of file diff --git a/src/utils/stack.c b/src/utils/stack.c new file mode 100644 index 0000000..1fc2e97 --- /dev/null +++ b/src/utils/stack.c @@ -0,0 +1,73 @@ +#include +#include "stack.h" +#include "defs.h" + +struct xStack { + unsigned int size, used; + void *body[]; +}; + +void *Stack_New(int size) +{ + if(size < 0) + size = 1024; + + Stack *s = malloc(sizeof(Stack) + sizeof(void*) * size); + + if(s == NULL) + return NULL; + + s->size = size; + s->used = 0; + return s; +} + +void *Stack_Top(Stack *s, int n) +{ + assert(n <= 0); + + if(s->used == 0) + return NULL; + + if((int) s->used + n - 1 < 0) + return NULL; + + return s->body[s->used + n - 1]; +} + +_Bool Stack_Pop(Stack *s, unsigned int n) +{ + if(s->used < n) + return 0; + + s->used -= n; + return 1; +} + +_Bool Stack_Push(Stack *s, void *item) +{ + assert(s != NULL); + assert(item != NULL); + + if(s->used == s->size) + return 0; + + s->body[s->used] = item; + s->used += 1; + return 1; +} + +void Stack_Free(Stack *s) +{ + free(s); +} + +unsigned int Stack_Size(Stack *s) +{ + return s->used; +} + +unsigned int Stack_Capacity(Stack *s) +{ + return s->size; +} \ No newline at end of file diff --git a/src/utils/stack.h b/src/utils/stack.h new file mode 100644 index 0000000..e440f77 --- /dev/null +++ b/src/utils/stack.h @@ -0,0 +1,11 @@ +#ifndef STACK_H +#define STACK_H +typedef struct xStack Stack; +void *Stack_New(int size); +void *Stack_Top(Stack *s, int n); +_Bool Stack_Pop(Stack *s, unsigned int n); +_Bool Stack_Push(Stack *s, void *item); +void Stack_Free(Stack *s); +unsigned int Stack_Size(Stack *s); +unsigned int Stack_Capacity(Stack *s); +#endif \ No newline at end of file diff --git a/test.sh b/test.sh new file mode 100644 index 0000000..57d89dc --- /dev/null +++ b/test.sh @@ -0,0 +1,2 @@ +./build/test-parse tests/aux/parsing-tests.json +./build/test-objects \ No newline at end of file diff --git a/tests/aux/parsing-tests.json b/tests/aux/parsing-tests.json new file mode 100644 index 0000000..a11d780 --- /dev/null +++ b/tests/aux/parsing-tests.json @@ -0,0 +1,104 @@ +[ + { + "source": "1", + "expect": { + "node-kind": "expr", + "expr-kind": "int", + "value": 1 + } + }, + { + "source": "1.1", + "expect": { + "node-kind": "expr", + "expr-kind": "float", + "value": 1.1 + } + }, + { + "source": "1+1", + "expect": { + "node-kind": "expr", + "expr-kind": "add", + "operands": [ + {"node-kind": "expr", "expr-kind": "int", "value": 1}, + {"node-kind": "expr", "expr-kind": "int", "value": 1} + ] + } + }, + { + "source": "1-1", + "expect": { + "node-kind": "expr", + "expr-kind": "sub", + "operands": [ + {"node-kind": "expr", "expr-kind": "int", "value": 1}, + {"node-kind": "expr", "expr-kind": "int", "value": 1} + ] + } + }, + { + "source": "1*1", + "expect": { + "node-kind": "expr", + "expr-kind": "mul", + "operands": [ + {"node-kind": "expr", "expr-kind": "int", "value": 1}, + {"node-kind": "expr", "expr-kind": "int", "value": 1} + ] + } + }, + { + "source": "1-+1", + "expect": { + "node-kind": "expr", + "expr-kind": "sub", + "operands": [ + {"node-kind": "expr", "expr-kind": "int", "value": 1}, + { + "node-kind": "expr", + "expr-kind": "pos", + "operands": [ + {"node-kind": "expr", "expr-kind": "int", "value": 1} + ] + } + ] + } + }, + { + "source": "+1", + "expect": { + "node-kind": "expr", + "expr-kind": "pos", + "operands": [ + {"node-kind": "expr", "expr-kind": "int", "value": 1} + ] + } + }, + { + "source": "-1", + "expect": { + "node-kind": "expr", + "expr-kind": "neg", + "operands": [ + {"node-kind": "expr", "expr-kind": "int", "value": 1} + ] + } + }, + { + "source": "hello", + "expect": {"node-kind": "expr", "expr-kind": "ident", "value": "hello"} + }, + { + "source": "'hello'", + "expect": {"node-kind": "expr", "expr-kind": "string", "value": "hello"} + }, + { + "source": "-'hello'", + "expect": {"node-kind": "expr", "expr-kind": "neg", "operands": [{"node-kind": "expr", "expr-kind": "string", "value": "hello"}]} + }, + { + "source": "-'hel\\nlo'", + "expect": {"node-kind": "expr", "expr-kind": "neg", "operands": [{"node-kind": "expr", "expr-kind": "string", "value": "hel\\nlo"}]} + } +] \ No newline at end of file diff --git a/tests/src/test-objects.c b/tests/src/test-objects.c new file mode 100644 index 0000000..2e85472 --- /dev/null +++ b/tests/src/test-objects.c @@ -0,0 +1,86 @@ +#include +#include +#include "../../src/objects/objects.h" + +#define tassert(exp) if(!(exp)) goto done; +#define tdone done: if(1) + +static _Bool test_int() +{ + _Bool passed = 0; + + Heap *heap = Heap_New(-1); + assert(heap != NULL); + + Error error; + Error_Init(&error); + + // Test [Object_FromInt], [Object_ToInt]. + + int n = -3; // Just any value. + + Object *obj = Object_FromInt(n, heap, &error); + + tassert(obj != 0); + tassert(error.occurred == 0); + + int k = Object_ToInt(obj, &error); + + tassert(k == n); + tassert(error.occurred == 0); + + passed = 1; + + tdone { + Error_Free(&error); + Heap_Free(heap); + return passed; + } +} + +static _Bool test_float() +{ + _Bool passed = 0; + + Heap *heap = Heap_New(-1); + assert(heap != NULL); + + Error error; + Error_Init(&error); + + // Test [Object_FromFloat], [Object_ToFloat]. + + double n = -3.4; // Just any value. + + Object *obj = Object_FromFloat(n, heap, &error); + + if(obj == 0) + goto done; + + double k = Object_ToFloat(obj, &error); + + if(k != n) + goto done; + + // ... + + passed = 1; +done: + Error_Free(&error); + Heap_Free(heap); + return passed; +} + +int main() +{ + typedef _Bool (*test_t)(); + static const test_t tests[] = { + test_int, + test_float, + }; + + for(int i = 0; i < (int) (sizeof(tests) / sizeof(tests[0])); i += 1) + printf("TEST %d: %s\n", i, test_int() ? "Passed" : "Failed"); + + return 0; +} \ No newline at end of file diff --git a/tests/src/test-parse.c b/tests/src/test-parse.c new file mode 100644 index 0000000..0d16718 --- /dev/null +++ b/tests/src/test-parse.c @@ -0,0 +1,281 @@ +#include +#include +#include +#include +#include +#include "../../src/compiler/parse.h" +#include "../../src/compiler/serialize.h" + +typedef enum { PASSED, FAILED, IGNORED } result_t; + +static _Bool compare(const char *s, xj_value *v) +{ + xj_alloc *alloc = NULL; + xj_error error; + xj_value *doc; + + doc = xj_decode(&error, &alloc, s, -1); + assert(doc != NULL); + + _Bool same = xj_compare(doc, v); + + xj_free(alloc); + return same; +} + +result_t runtest(xj_value *value, int testno) +{ + int raw_sourcel; + char *raw_source; + xj_value *expect; + + { + xj_error error; + xj_value *source2 = xj_query(&error, value, ".source", -1); + + if(source2 == NULL) + { + if(error.code == xj_E4009) + fprintf(stderr, "WARNING: Field \"source\" is missing\n"); + else + fprintf(stderr, "WARNING: Internal failure (%s)\n", error.text); + return IGNORED; + } + + if(source2->type != xj_STRING) + { + fprintf(stderr, "WARNING: Field \"source\" is not a string\n"); + return IGNORED; + } + + raw_source = source2->as_string; + raw_sourcel = source2->size; + + expect = xj_query(&error, value, ".expect", -1); + + if(expect == NULL) + { + if(error.code == xj_E4009) + fprintf(stderr, "WARNING: Field \"expect\" is missing\n"); + else + fprintf(stderr, "WARNING: Internal failure (%s)\n", error.text); + return IGNORED; + } + + if(expect->type != xj_OBJECT) + { + fprintf(stderr, "WARNING: Field \"expect\" is not an object\n"); + return IGNORED; + } + } + + Source *source; + { + Error error; + Error_Init(&error); + + char temp[64]; + int k = snprintf(temp, sizeof(temp), "(Test %d's source)", testno); + + assert(k >= 0); + assert((unsigned int) k < sizeof(temp)); + + source = Source_FromString(temp, raw_source, raw_sourcel, &error); + + if(source == NULL) + { + fprintf(stderr, "WARNING: Internal failure (%s)\n", error.message); + return IGNORED; + } + } + + _Bool passed; + { + Error error; + BPAlloc *alloc; + char buffer[65536]; + + Error_Init(&error); + + alloc = BPAlloc_Init3(buffer, sizeof(buffer), -1, NULL, NULL, NULL); + + if(alloc == NULL) + { + fprintf(stderr, "WARNING: Internal failure (Failed to instanciate BPAlloc)\n"); + return IGNORED; + } + + AST *ast = parse(source, alloc, &error); + + if(ast == NULL) + { + fprintf(stderr, "WARNING: Internal failure (Failed to compile: %s; reported in %s at %s:%d)\n", error.message, error.func, error.file, error.line); + + Error_Free(&error); + BPAlloc_Free(alloc); + return IGNORED; + } + + char *serialized = serialize(ast, NULL); + + if(serialized == NULL) + { + fprintf(stderr, "WARNING: Internal failure (Failed to serialize AST)\n"); + + Error_Free(&error); + BPAlloc_Free(alloc); + return IGNORED; + } + + /* + printf("SERIALIZED :: %s\n", serialized); + { + char *temp = xj_encode(expect, NULL); + printf("SERIALIZED 2 :: %s\n", temp); + xj_sys_free(temp); + } + */ + + passed = compare(serialized, expect); + + Error_Free(&error); + BPAlloc_Free(alloc); + xj_sys_free(serialized); + } + + return passed ? PASSED : FAILED; +} + +static char *loadfile(const char *file, int *size); + +int main(int argc, char **argv) +{ + if(argc == 1) + { + fprintf(stderr, "ERROR: Missing file name\n"); + return 1; + } + + int filesize; + char *filename = argv[1]; + char *filetext = loadfile(filename, &filesize); + + if(filetext == NULL) + { + fprintf(stderr, "ERROR: Couldn't open \"%s\"\n", filename); + return 1; + } + + xj_alloc *alloc = NULL; + xj_error error; + xj_value *document; + + document = xj_decode(&error, &alloc, filetext, filesize); + + free(filetext); + + if(document == NULL) + { + assert(error.occurred == 1); + fprintf(stderr, "ERROR: Failed to parse \"%s\" as JSON: %s\n", + filename, error.text); + xj_free(alloc); + return 1; + } + + if(document->type != xj_ARRAY) + { + fprintf(stderr, "ERROR: Was expected an array as JSON document root\n"); + xj_free(alloc); + return 1; + } + + xj_value *cursor = document->as_array; + + int passed = 0, ignored = 0; + int total = document->size; + int index = 1; + + while(cursor) + { + result_t result = runtest(cursor, index); + + #define KNRM "\x1B[0m" + #define KRED "\x1B[31m" + #define KGRN "\x1B[32m" + #define KYEL "\x1B[33m" + #define KBLU "\x1B[34m" + #define KMAG "\x1B[35m" + #define KCYN "\x1B[36m" + #define KWHT "\x1B[37m" + #define RESET "\033[0m" + + switch(result) + { + case PASSED: + printf("TEST %-2d :: " KGRN "PASSED" RESET "\n", index); + passed += 1; + break; + + case FAILED: + printf("TEST %-2d :: " KRED "FAILED" RESET "\n", index); + break; + + case IGNORED: + printf("TEST %-2d :: " KYEL "IGNORED" RESET "\n", index); + ignored += 1; + break; + + default: assert(0); + } + + index += 1; + cursor = cursor->next; + } + + printf("\n ... %d passed, %d failed and %d ignored.\n", passed, total - passed - ignored, ignored); + + xj_free(alloc); + return 0; +} + +static char *loadfile(const char *file, int *size) +{ + char *body = NULL; + int _size; + + FILE *fp = fopen(file, "rb"); + + if(fp == NULL) + return NULL; + + if(fseek(fp, 0, SEEK_END)) + goto done; + + _size = ftell(fp); + + if(_size < 0) + goto done; + + if(size) + *size = _size; + + body = malloc(_size + 1); + + if(body == NULL) + goto done; + + if(fseek(fp, 0, SEEK_SET)) + goto done; + + int k = fread(body, 1, _size, fp); + + if(k != _size) + goto done; + + body[_size] = '\0'; + +done: + fclose(fp); + return body; +} \ No newline at end of file