.
This commit is contained in:
6
.idea/tyche.iml
generated
6
.idea/tyche.iml
generated
@@ -1,6 +1,2 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module external.linked.project.id="tyche" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="Makefile" type="CPP_MODULE" version="4">
|
<module classpath="External" external.linked.project.id="tyche" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="Makefile" type="CPP_MODULE" version="4" />
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
28
Makefile
28
Makefile
@@ -1,7 +1,14 @@
|
|||||||
|
#
|
||||||
# user overwritable variables
|
# user overwritable variables
|
||||||
|
#
|
||||||
|
|
||||||
|
# install prefix
|
||||||
PREFIX=/usr/local
|
PREFIX=/usr/local
|
||||||
|
|
||||||
|
#
|
||||||
|
# internal flags/options
|
||||||
|
#
|
||||||
|
|
||||||
# version
|
# version
|
||||||
|
|
||||||
VERSION_MAJOR=0
|
VERSION_MAJOR=0
|
||||||
@@ -9,10 +16,6 @@ VERSION_MINOR=1
|
|||||||
|
|
||||||
VERSION=${VERSION_MAJOR}.${VERSION_MINOR}
|
VERSION=${VERSION_MAJOR}.${VERSION_MINOR}
|
||||||
|
|
||||||
#
|
|
||||||
# flags/options
|
|
||||||
#
|
|
||||||
|
|
||||||
IS_CLANG := $(shell $(CC) -dM -E - < /dev/null | grep -c __clang__)
|
IS_CLANG := $(shell $(CC) -dM -E - < /dev/null | grep -c __clang__)
|
||||||
|
|
||||||
WARNINGS=@config/WARNINGS
|
WARNINGS=@config/WARNINGS
|
||||||
@@ -25,13 +28,14 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
DEBUG_CFLAGS=-Og -ggdb3 ${WARNINGS} -fno-omit-frame-pointer -fsanitize=address -fsanitize=undefined -fsanitize=leak \
|
DEBUG_CFLAGS=-Og -ggdb3 ${WARNINGS} -fno-omit-frame-pointer -fsanitize=address -fsanitize=undefined -fsanitize=leak \
|
||||||
-fno-sanitize-recover=all -fstack-protector-strong -fstack-clash-protection -fno-common ${ADD_DBG_FLAGS}
|
-fno-sanitize-recover=all -fstack-protector-strong -fstack-clash-protection -fno-common ${ADD_DBG_FLAGS} \
|
||||||
|
-DCHECK_TYCHE_BUGS=1
|
||||||
DEBUG_LDFLAGS=-fsanitize=address
|
DEBUG_LDFLAGS=-fsanitize=address
|
||||||
|
|
||||||
RELEASE_CFLAGS=-O3 -flto=auto -march=native -mtune=native -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-protector-strong
|
RELEASE_CFLAGS=-O3 -flto=auto -march=native -mtune=native -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-protector-strong
|
||||||
RELEASE_LDFLAGS=-flto=auto
|
RELEASE_LDFLAGS=-flto=auto
|
||||||
|
|
||||||
CFLAGS+=-std=c99 -fPIC -fvisibility=hidden -MMD -MP
|
CFLAGS+=-std=c11 -fPIC -fvisibility=hidden
|
||||||
LDFLAGS+=
|
LDFLAGS+=
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -60,6 +64,13 @@ uninstall:
|
|||||||
|
|
||||||
.PHONY: all check clean install uninstall
|
.PHONY: all check clean install uninstall
|
||||||
|
|
||||||
|
#
|
||||||
|
# intermediate rules
|
||||||
|
#
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(CFLAGS) -c -o $@ $^
|
||||||
|
|
||||||
#
|
#
|
||||||
# executable files
|
# executable files
|
||||||
#
|
#
|
||||||
@@ -68,6 +79,7 @@ tyche: CFLAGS += ${RELEASE_CFLAGS}
|
|||||||
tyche: LDFLAGS += ${RELEASE_LDFLAGS}
|
tyche: LDFLAGS += ${RELEASE_LDFLAGS}
|
||||||
tyche: src/tyche.o libtyche.a
|
tyche: src/tyche.o libtyche.a
|
||||||
$(CC) -o $@ $^ ${LDFLAGS}
|
$(CC) -o $@ $^ ${LDFLAGS}
|
||||||
|
strip $@
|
||||||
|
|
||||||
tyche-test: CFLAGS += ${DEBUG_CFLAGS}
|
tyche-test: CFLAGS += ${DEBUG_CFLAGS}
|
||||||
tyche-test: LDFLAGS += ${DEBUG_LDFLAGS}
|
tyche-test: LDFLAGS += ${DEBUG_LDFLAGS}
|
||||||
@@ -79,6 +91,4 @@ libtyche.a: lib/vm.o
|
|||||||
|
|
||||||
libtyche.so.${VERSION}: LDFLAGS += ${RELEASE_LDFLAGS}
|
libtyche.so.${VERSION}: LDFLAGS += ${RELEASE_LDFLAGS}
|
||||||
libtyche.so.${VERSION}: lib/vm.o
|
libtyche.so.${VERSION}: lib/vm.o
|
||||||
$(CC) -shared -o $@ -Wl,-soname,libfoo.so.${VERSION_MAJOR} $^ ${LDFLAGS}
|
$(CC) -shared -o $@ -Wl,-soname,libfoo.so.${VERSION_MAJOR} $^ ${LDFLAGS}
|
||||||
|
|
||||||
-include $(wildcard src/*.d lib/*.d)
|
|
||||||
3
TODO.md
3
TODO.md
@@ -6,10 +6,11 @@ Decisions:
|
|||||||
- Transparency and log levels
|
- Transparency and log levels
|
||||||
|
|
||||||
- [ ] Makefile
|
- [ ] Makefile
|
||||||
- [ ] Value and stack value
|
- [ ] VALUE
|
||||||
- [ ] Stack
|
- [ ] Stack
|
||||||
- [ ] Test application (C++?)
|
- [ ] Test application (C++?)
|
||||||
- [ ] Heap
|
- [ ] Heap
|
||||||
|
- [ ] Heap value
|
||||||
- [ ] VM
|
- [ ] VM
|
||||||
- [ ] (Lua interface) call assembler
|
- [ ] (Lua interface) call assembler
|
||||||
- [ ] (Lua) generate bytecode
|
- [ ] (Lua) generate bytecode
|
||||||
|
|||||||
2
lib/stack.c
Normal file
2
lib/stack.c
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
#include "value.c"
|
||||||
|
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
#ifndef TYCHE_TYCHE_H
|
#ifndef TYCHE_TYCHE_H
|
||||||
#define TYCHE_TYCHE_H
|
#define TYCHE_TYCHE_H
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
TT_NIL, TT_INTEGER, TT_REAL, TT_STRING, TT_STRING_CONST, TT_ARRAY, TT_TABLE, TT_FUNCTION, TT_NATIVE_PTR,
|
||||||
|
} TYC_TYPE;
|
||||||
|
|
||||||
#endif //TYCHE_TYCHE_H
|
#endif //TYCHE_TYCHE_H
|
||||||
|
|||||||
62
lib/value.c
Normal file
62
lib/value.c
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
#include "tyche.h"
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
TYC_TYPE type;
|
||||||
|
union {
|
||||||
|
int32_t i;
|
||||||
|
float f;
|
||||||
|
uint32_t idx;
|
||||||
|
};
|
||||||
|
} VALUE;
|
||||||
|
|
||||||
|
static_assert(sizeof(VALUE) <= 8, "VALUE must be < 8 bytes");
|
||||||
|
|
||||||
|
static int32_t value_integer(VALUE v)
|
||||||
|
{
|
||||||
|
#ifdef CHECK_TYCHE_BUGS
|
||||||
|
if (v.type != TT_INTEGER)
|
||||||
|
abort();
|
||||||
|
#endif
|
||||||
|
return v.i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static float value_real(VALUE v)
|
||||||
|
{
|
||||||
|
#ifdef CHECK_TYCHE_BUGS
|
||||||
|
if (v.type != TT_REAL)
|
||||||
|
abort();
|
||||||
|
#endif
|
||||||
|
return v.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t value_idx(VALUE v)
|
||||||
|
{
|
||||||
|
#ifdef CHECK_TYCHE_BUGS
|
||||||
|
if (v.type != TT_FUNCTION && v.type != TT_NATIVE_PTR && v.type != TT_ARRAY && v.type != TT_TABLE && v.type != TT_STRING && v.type != TT_STRING_CONST)
|
||||||
|
abort();
|
||||||
|
#endif
|
||||||
|
return v.idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
VALUE create_value_integer(int32_t v)
|
||||||
|
{
|
||||||
|
return (VALUE) { .type = TT_INTEGER, .i = v };
|
||||||
|
}
|
||||||
|
|
||||||
|
VALUE create_value_real(float f)
|
||||||
|
{
|
||||||
|
return (VALUE) { .type = TT_INTEGER, .f = f };
|
||||||
|
}
|
||||||
|
|
||||||
|
VALUE create_value_idx(TYC_TYPE type, uint32_t idx)
|
||||||
|
{
|
||||||
|
#ifdef CHECK_TYCHE_BUGS
|
||||||
|
if (type != TT_FUNCTION && type != TT_NATIVE_PTR && type != TT_ARRAY && type != TT_TABLE && type != TT_STRING && type != TT_STRING_CONST)
|
||||||
|
abort();
|
||||||
|
#endif
|
||||||
|
return (VALUE) { .type = type, .idx = idx };
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user