2017-03-23 | Paul Boddie | file changeset files shortlog | Represent integers as __attr values with bit 0 set. Since pointers must be aligned (to four-byte boundaries on many modern systems, maybe two-byte boundaries on older or embedded systems, eight-byte boundaries on some 64-bit systems), any value with bit 0 set will not be referencing an object. This avoids allocating objects for integers and instead just allows them to be passed around. Bit 0 needs to be tested when attributes are accessed, and for integers, a common instance is employed to provide any instance attributes, an instance table reference and a reference to the integer class. | integers-as-tagged-attrs |
paul@511 | 1 | include native.mk |
paul@539 | 2 | include modules.mk |
paul@511 | 3 | include options.mk |
paul@511 | 4 | |
paul@539 | 5 | SRC += exceptions.c main.c ops.c progops.c progtypes.c |
paul@126 | 6 | OBJ = $(SRC:.c=.o) |
paul@666 | 7 | CFLAGS += -Wall -I. -finput-charset=UTF-8 |
paul@511 | 8 | LDFLAGS += -lm -lgc |
paul@126 | 9 | |
paul@450 | 10 | ifdef ARCH |
paul@450 | 11 | CC := $(ARCH)-$(CC) |
paul@450 | 12 | endif |
paul@450 | 13 | |
paul@126 | 14 | all: main |
paul@126 | 15 | |
paul@126 | 16 | clean: |
paul@126 | 17 | rm -f main $(OBJ) |
paul@126 | 18 | |
paul@126 | 19 | main: $(OBJ) |
paul@126 | 20 | $(CC) $(LDFLAGS) $(OBJ) -o $@ |
paul@126 | 21 | |
paul@126 | 22 | .c.o: |
paul@126 | 23 | $(CC) -c $(CFLAGS) $< -o $@ |