#include "master.hpp"
-namespace factor
-{
+namespace factor {
-/* If memory allocation fails, bail out */
-vm_char *safe_strdup(const vm_char *str)
-{
- vm_char *ptr = STRDUP(str);
- if(!ptr) fatal_error("Out of memory in safe_strdup", 0);
- return ptr;
+// Fill in a PPC function descriptor
+void* fill_function_descriptor(void* ptr, void* code) {
+ void** descriptor = (void**)ptr;
+ descriptor[0] = code;
+ descriptor[1] = NULL;
+ descriptor[2] = NULL;
+ return descriptor;
}
-cell read_cell_hex()
-{
- cell cell;
- if(scanf(CELL_HEX_FORMAT,&cell) < 0) exit(1);
- return cell;
+// Get a field from a PPC function descriptor
+void* function_descriptor_field(void* ptr, size_t idx) {
+ return ptr ? ((void**)ptr)[idx] : ptr;
}
-/* On Windows, memcpy() is in a different DLL and the non-optimizing
-compiler can't find it */
-VM_C_API void *factor_memcpy(void *dst, void *src, size_t len)
-{
- return memcpy(dst,src,len);
+// If memory allocation fails, bail out
+vm_char* safe_strdup(const vm_char* str) {
+ vm_char* ptr = STRDUP(str);
+ if (!ptr)
+ fatal_error("Out of memory in safe_strdup", 0);
+ return ptr;
+}
+
+cell read_cell_hex() {
+ cell cell;
+ std::cin >> std::hex >> cell >> std::dec;
+ if (!std::cin.good())
+ exit(1);
+ return cell;
+}
+
+// On Windows, memcpy() is in a different DLL and the non-optimizing
+// compiler can't find it
+VM_C_API void* factor_memcpy(void* dst, void* src, size_t len) {
+ return memcpy(dst, src, len);
}
}