aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--amalgam.cflags1
-rw-r--r--amalgam.config2
-rw-r--r--amalgam.creator1
-rw-r--r--amalgam.cxxflags1
-rw-r--r--amalgam.files54
-rw-r--r--amalgam.includes4
-rw-r--r--include/bytecode/bytecode.h2
-rw-r--r--src/bytecode/bytecode.c1
-rw-r--r--src/compiler.c2
-rw-r--r--src/parser.c9
-rw-r--r--src/std/buffer.c2
-rw-r--r--tests/main.c4
12 files changed, 74 insertions, 9 deletions
diff --git a/amalgam.cflags b/amalgam.cflags
new file mode 100644
index 0000000..188be76
--- /dev/null
+++ b/amalgam.cflags
@@ -0,0 +1 @@
+-std=c89
diff --git a/amalgam.config b/amalgam.config
new file mode 100644
index 0000000..e0284f4
--- /dev/null
+++ b/amalgam.config
@@ -0,0 +1,2 @@
+// Add predefined macros for your project here. For example:
+// #define THE_ANSWER 42
diff --git a/amalgam.creator b/amalgam.creator
new file mode 100644
index 0000000..e94cbbd
--- /dev/null
+++ b/amalgam.creator
@@ -0,0 +1 @@
+[General]
diff --git a/amalgam.cxxflags b/amalgam.cxxflags
new file mode 100644
index 0000000..df98e0d
--- /dev/null
+++ b/amalgam.cxxflags
@@ -0,0 +1 @@
+-std=c++14
diff --git a/amalgam.files b/amalgam.files
new file mode 100644
index 0000000..1850f5c
--- /dev/null
+++ b/amalgam.files
@@ -0,0 +1,54 @@
+build.sh
+include/ast.h
+include/binop_type.h
+include/bytecode/bytecode.h
+include/compiler.h
+include/compiler_options.h
+include/defs.h
+include/parser.h
+include/ssa/ssa.h
+include/std/alloc.h
+include/std/buffer.h
+include/std/buffer_view.h
+include/std/defs.h
+include/std/file.h
+include/std/hash.h
+include/std/hash_map.h
+include/std/log.h
+include/std/mem.h
+include/std/misc.h
+include/std/scoped_allocator.h
+include/std/thread.h
+include/std/types.h
+include/tokenizer.h
+src/ast.c
+src/bytecode/bytecode.c
+src/compiler.c
+src/parser.c
+src/ssa/ssa.c
+src/std/alloc.c
+src/std/buffer.c
+src/std/buffer_view.c
+src/std/file.c
+src/std/hash.c
+src/std/hash_map.c
+src/std/log.c
+src/std/mem.c
+src/std/scoped_allocator.c
+src/std/thread.c
+src/tokenizer.c
+tests/b.amal
+tests/b.amal.z
+tests/bytecode.amal
+tests/bytecode.amal.z
+tests/errors/closure_no_lhs.amal
+tests/errors/const_assign.amal
+tests/errors/duplicate_declaration.amal
+tests/errors/pub_in_closure.amal
+tests/io.amal
+tests/io.amal.z
+tests/main.amal
+tests/main.amal.z
+tests/main.c
+tests/sub/a.amal
+tests/sub/a.amal.z
diff --git a/amalgam.includes b/amalgam.includes
new file mode 100644
index 0000000..5822a55
--- /dev/null
+++ b/amalgam.includes
@@ -0,0 +1,4 @@
+include
+include/bytecode
+include/ssa
+include/std
diff --git a/include/bytecode/bytecode.h b/include/bytecode/bytecode.h
index 3a141f0..e5a70e9 100644
--- a/include/bytecode/bytecode.h
+++ b/include/bytecode/bytecode.h
@@ -9,7 +9,7 @@
#include <setjmp.h>
typedef enum {
- NOP, /* To allow hot-patching */
+ NOP /* To allow hot-patching */
} BytecodeInstruction;
diff --git a/src/bytecode/bytecode.c b/src/bytecode/bytecode.c
index 8aae03e..6ceacf0 100644
--- a/src/bytecode/bytecode.c
+++ b/src/bytecode/bytecode.c
@@ -1,5 +1,6 @@
#include "../../include/bytecode/bytecode.h"
#include "../../include/std/mem.h"
+#include "../../include/std/log.h"
#include "../../include/ssa/ssa.h"
#include "../../include/parser.h"
#include "../../include/compiler.h"
diff --git a/src/compiler.c b/src/compiler.c
index 2b59a93..9f003c8 100644
--- a/src/compiler.c
+++ b/src/compiler.c
@@ -67,7 +67,7 @@ void amal_compiler_options_init(amal_compiler_options *self) {
int amal_compiler_init(amal_compiler *self, const amal_compiler_options *options) {
int i;
- self->usable_thread_count = options->num_threads;
+ self->usable_thread_count = options ? options->num_threads : 0;
if(self->usable_thread_count == 0) {
self->usable_thread_count = amal_get_usable_thread_count();
if(self->usable_thread_count == 0) {
diff --git a/src/parser.c b/src/parser.c
index c0d2c6d..68d0648 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -296,7 +296,6 @@ static void parser_parse_function_args(Parser *self, FunctionCall *func_call) {
for(;;) {
Ast *arg_expr;
bool is_end_token;
- arg_expr = NULL;
throw_if_error(tokenizer_consume_if(&self->tokenizer, TOK_CLOSING_PAREN, &is_end_token));
if(is_end_token)
@@ -638,7 +637,11 @@ Ast* parser_parse_body(Parser *self) {
lhs_expr = parser_parse_declaration_lhs(self);
if(lhs_expr) {
+ FunctionDecl *func_decl;
+ StructDecl *struct_decl;
+ Import *import;
bool match;
+
throw_if_error(ast_create(self->allocator, lhs_expr, AST_LHS, &result));
if(lhs_expr->is_extern) {
throw_if_error(tokenizer_accept(&self->tokenizer, TOK_SEMICOLON));
@@ -651,10 +654,6 @@ Ast* parser_parse_body(Parser *self) {
throw_if_error(tokenizer_accept(&self->tokenizer, TOK_EQUALS));
- FunctionDecl *func_decl;
- StructDecl *struct_decl;
- Import *import;
-
func_decl = parser_parse_closure(self);
if(func_decl) {
throw_if_error(ast_create(self->allocator, func_decl, AST_FUNCTION_DECL, &lhs_expr->rhs_expr));
diff --git a/src/std/buffer.c b/src/std/buffer.c
index ddf7d39..3676cee 100644
--- a/src/std/buffer.c
+++ b/src/std/buffer.c
@@ -12,7 +12,7 @@ int buffer_init(Buffer *self, struct ScopedAllocator *allocator) {
if(allocator) {
return scoped_allocator_add_mem(allocator, &self->allocator_index);
} else {
- self->allocator_index = ~0ULL;
+ self->allocator_index = ~(usize)0;
return 0;
}
}
diff --git a/tests/main.c b/tests/main.c
index c4c567d..520d8b4 100644
--- a/tests/main.c
+++ b/tests/main.c
@@ -3,6 +3,7 @@
#include "../include/compiler.h"
#include "../include/std/hash_map.h"
#include "../include/std/hash.h"
+#include "../include/std/log.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -181,6 +182,7 @@ static void test_load(const char *filepath) {
static void test_load_error(const char *filepath, const char *expected_error) {
amal_compiler compiler;
amal_compiler_options options;
+ ErrorExpectedData expected_data;
int result;
int num_threads;
@@ -197,7 +199,7 @@ static void test_load_error(const char *filepath, const char *expected_error) {
options.num_threads = num_threads;
++num_tests_run;
options.error_callback = error_callback_assert;
- ErrorExpectedData expected_data;
+
expected_data.filepath = get_full_path(filepath);
expected_data.expected_error = join_str(expected_data.filepath, expected_error, ':');
expected_data.got_expected_error = bool_false;