Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(lang): support for generators / stackful coroutines #105

Merged
merged 3 commits into from
Sep 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 20 additions & 9 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ ifndef NO_THREADS
ALUMINA_FLAGS += --cfg threading
LDFLAGS += -lpthread
endif
ifndef NO_MINICORO
MINICORO = $(BUILD_DIR)/minicoro.o
ALUMINA_FLAGS += --cfg coroutines
else
MINICORO =
endif

ifdef TIMINGS
ALUMINA_FLAGS += --timings
Expand Down Expand Up @@ -112,13 +118,18 @@ ALUMINA_FLAGS_TEST = --sysroot $(SYSROOT) $(ALUMINA_FLAGS) --cfg test
ALUMINA_FLAGS_TEST_STD = --sysroot $(SYSROOT) $(ALUMINA_FLAGS) --cfg test --cfg test_std
endif

## ----------------------------- Minicoro ------------------------------

$(BUILD_DIR)/minicoro.o: common/minicoro/minicoro.c
$(CC) $(CFLAGS) -c $^ -o $@

## --------------------------- Stdlib tests ----------------------------

# Stdlib tests
$(STDLIB_TESTS).c: $(ALU_TEST_STD_DEPS)
$(ALUMINA_BOOT) $(ALUMINA_FLAGS_TEST_STD) -Zdeny-warnings --output $@

$(STDLIB_TESTS): $(STDLIB_TESTS).c
$(STDLIB_TESTS): $(STDLIB_TESTS).c $(MINICORO)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

## ---------------------------- Lang tests -----------------------------
Expand All @@ -129,7 +140,7 @@ $(LANG_TESTS).c: $(ALU_TEST_DEPS) $(LANG_TEST_FILES)
$(ALUMINA_BOOT) $(ALUMINA_FLAGS_TEST) -Zdeny-warnings --output $@ \
$(call alumina_modules,$(LANG_TEST_FILES),tests/,)

$(LANG_TESTS): $(LANG_TESTS).c
$(LANG_TESTS): $(LANG_TESTS).c $(MINICORO)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

## ------------------ Libraries ------------------
Expand All @@ -151,7 +162,7 @@ $(CODEGEN).c: $(ALU_DEPS) $(TREE_SITTER_SOURCES) $(CODEGEN_SOURCES)
$(call alumina_modules,$(TREE_SITTER_SOURCES),libraries/,/) \
$(call alumina_modules,$(CODEGEN_SOURCES),tools/,/)

$(CODEGEN): $(CODEGEN).c $(BUILD_DIR)/parser.o
$(CODEGEN): $(CODEGEN).c $(BUILD_DIR)/parser.o $(MINICORO)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -ltree-sitter

libraries/aluminac/lib/node_kinds.alu: $(CODEGEN)
Expand All @@ -161,7 +172,7 @@ $(LIBRARIES_TESTS).c: $(ALU_TEST_DEPS) $(ALU_LIBRARIES)
$(ALUMINA_BOOT) $(ALUMINA_FLAGS_TEST) -Zdeny-warnings --output $@ \
$(call alumina_modules,$(ALU_LIBRARIES),libraries/,/)

$(LIBRARIES_TESTS): $(LIBRARIES_TESTS).c
$(LIBRARIES_TESTS): $(LIBRARIES_TESTS).c $(MINICORO)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -ltree-sitter

## --------------------------------Tools -------------------------------
Expand All @@ -174,7 +185,7 @@ $(ALUMINA_DOC).c: $(ALU_DEPS) $(ALU_LIBRARIES) $(ALUMINA_DOC_SOURCES) libraries/
$(call alumina_modules,$(ALU_LIBRARIES),libraries/,/) \
$(call alumina_modules,$(ALUMINA_DOC_SOURCES),tools/,/)

$(ALUMINA_DOC): $(ALUMINA_DOC).c $(BUILD_DIR)/parser.o
$(ALUMINA_DOC): $(ALUMINA_DOC).c $(BUILD_DIR)/parser.o $(MINICORO)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -ltree-sitter

$(BUILD_DIR)/doctest.alu: $(ALUMINA_DOC) $(SYSROOT_FILES) tools/alumina-doc/static/*
Expand All @@ -191,7 +202,7 @@ $(DOCTEST).c: $(ALU_TEST_DEPS) $(BUILD_DIR)/doctest.alu
$(ALUMINA_BOOT) $(ALUMINA_FLAGS_TEST) --output $@ $(BUILD_DIR)/doctest.alu \
$(call alumina_modules,$(ALU_LIBRARIES),libraries/,/)

$(DOCTEST): $(DOCTEST).c
$(DOCTEST): $(DOCTEST).c $(MINICORO)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

.PHONY: docs test-docs serve-docs watch-docs
Expand Down Expand Up @@ -219,7 +230,7 @@ $(BUILD_DIR)/examples/.build:
$(BUILD_DIR)/examples/%.c: examples/%.alu $(ALU_DEPS) $(BUILD_DIR)/examples/.build
$(ALUMINA_BOOT) $(ALUMINA_FLAGS_COMMON) --output $@ main=$<

$(BUILD_DIR)/examples/%: $(BUILD_DIR)/examples/%.c
$(BUILD_DIR)/examples/%: $(BUILD_DIR)/examples/%.c $(MINICORO)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

examples: $(patsubst examples/%.alu,$(BUILD_DIR)/examples/%,$(EXAMPLES))
Expand Down Expand Up @@ -268,7 +279,7 @@ all: alumina-boot
$(BUILD_DIR)/quick.c: $(ALU_DEPS) quick.alu
$(ALUMINA_BOOT) $(ALUMINA_FLAGS_COMMON) --output $@ quick=./quick.alu

$(BUILD_DIR)/quick: $(BUILD_DIR)/quick.c
$(BUILD_DIR)/quick: $(BUILD_DIR)/quick.c $(MINICORO)
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

quick: $(BUILD_DIR)/quick
Expand All @@ -291,7 +302,7 @@ bench-std-cached: $(ALU_TEST_STD_DEPS)
fi
$(BENCH_CMD) $(ALUMINA_BOOT) $(ALUMINA_FLAGS_TEST_STD) --timings --cfg test --cfg test_std --output /dev/null

bench-std-cc: $(STDLIB_TESTS).c
bench-std-cc: $(STDLIB_TESTS).c $(MINICORO)
$(BENCH_CMD) $(CC) $(CFLAGS) -o/dev/null $^ $(LDFLAGS)

$(BUILD_DIR)/flamegraph.svg: $(ALUMINA_BOOT) $(SYSROOT_FILES)
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Non-exhaustive list of distinguishing features:
- Limited operator overloading (via `Equatable` and `Comparable` protocols)
- Block expressions
- Anonymous functions (including closures)
- Generators (stackful coroutines)
- Richer type system:
- strong enums,
- array slices,
Expand Down
2 changes: 2 additions & 0 deletions common/minicoro/minicoro.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#define MINICORO_IMPL
#include "minicoro.h"
Loading
Loading