История изменений
Исправление SZT, (текущая версия) :
И еще по поводу стека
static inline uint32_t stack_push_str(uint32_t *stack, const char *str) {
*stack -= strlen(str) + 1;
memcpy((void *) (*stack), str, strlen(str) + 1);
return *stack;
}
static inline uint32_t stack_push_int(uint32_t *stack, uint32_t val) {
*stack -= 4;
memcpy((void *)(*stack), &val, 4);
return *stack;
}
Функция stack_push_str может записать строку произвольной длинны т.е. значение stack может быть не кратно 4 байтам - нехоршо.
Да и вызов функции memcpy несколько настораживает, я б использовал что-то типа __builtin_memcpy хотя вы наверно не только совместимые с GNU __builtin компиляторы поддерживаете.
Исходная версия SZT, :
И еще по поводу стека
static inline uint32_t stack_push_str(uint32_t *stack, const char *str) {
*stack -= strlen(str) + 1;
memcpy((void *) (*stack), str, strlen(str) + 1);
return *stack;
}
static inline uint32_t stack_push_int(uint32_t *stack, uint32_t val) {
*stack -= 4;
memcpy((void *)(*stack), &val, 4);
return *stack;
}
Функция stack_push_str может записать строку произвольной длинны т.е. значение stack будет не кратно 4 байтам - нехоршо.
Да и вызов функции memcpy несколько настораживает, я б использовал что-то типа __builtin_memcpy хотя вы наверно не только совместимые с GNU __builtin компиляторы поддерживаете.