From 0f26e1d204d3a3026ca3edfc4c6bd9638b2632e7 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 31 Jul 2019 22:29:24 +0200 Subject: Add nullable, add bytecode documentation --- src/program.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) (limited to 'src/program.c') diff --git a/src/program.c b/src/program.c index 92fcb6c..60e9870 100644 --- a/src/program.c +++ b/src/program.c @@ -28,12 +28,12 @@ typedef struct { static CHECK_RESULT int amal_program_append_header(amal_program *self) { /*doc(Bytecode header) # Header layout - |Size|Name |Description | + |Type|Field |Description | |----|-------------|----------------------------------------------------------------------------| - |4 |Magic number |The magic number used to identify an amalgam bytecode file. | - |1 |Major version|The major version of the bytecode. Updates in this is a breaking change. | - |1 |Minor version|The minor version of the bytecode. Updates in this are backwards compatible.| - |1 |Patch version|The patch version of the bytecode. Updates in this are only minor bug fixes.| + |u32 |Magic number |The magic number used to identify an amalgam bytecode file. | + |u8 |Major version|The major version of the bytecode. Updates in this is a breaking change. | + |u8 |Minor version|The minor version of the bytecode. Updates in this are backwards compatible.| + |u8 |Patch version|The patch version of the bytecode. Updates in this are only minor bug fixes.| The versions in the header only changes for every release, not every change. */ @@ -142,18 +142,7 @@ static CHECK_RESULT int amal_program_read_intermediates(amal_program *self) { } self->intermediates_start = &self->data.data[self->read_index]; - if(intermediates_size > 0) - self->num_intermediates = intermediates_size / (sizeof(u8) + sizeof(u64)); - /* - read_end = self->read_index + intermediates_size; - while(self->read_index < read_end) { - NumberType type; - NumberUnion value; - am_memcpy(&type, &self->data.data[self->read_index], sizeof(u8)); - am_memcpy(&value, &self->data.data[self->read_index + sizeof(u8)], sizeof(u64)); - self->read_index += sizeof(u8) + sizeof(u64); - } - */ + self->num_intermediates = intermediates_size / (sizeof(u8) + sizeof(u64)); self->read_index += intermediates_size; return AMAL_PROGRAM_OK; @@ -203,7 +192,7 @@ static CHECK_RESULT int amal_program_read_strings(amal_program *self) { if(bytes_left_to_read(self) < string_size) return AMAL_PROGRAM_INVALID_STRINGS; - self->read_index += string_size; + self->read_index += string_size +1; /* +1 to skip null-termination character */ } assert(self->read_index == read_end); @@ -248,10 +237,12 @@ static i64 abs_i64(i64 value) { return value >= 0 ? value : -value; } +#ifdef DEBUG static int assert_reg_outside_stack() { assert(bool_false && "Register outside stack!"); return 0; } +#endif static CHECK_RESULT int amal_program_read_instructions(amal_program *self) { u32 instructions_size; @@ -262,6 +253,7 @@ static CHECK_RESULT int amal_program_read_instructions(amal_program *self) { func_num_registers = 0; inside_func = bool_false; + (void)inside_func; if(bytes_left_to_read(self) < sizeof(instructions_size)) return AMAL_PROGRAM_INVALID_INSTRUCTIONS_SIZE; -- cgit v1.2.3