]> gitweb.factorcode.org Git - factor.git/blob - vm/utilities.cpp
Merge remote-tracking branch 'philip-searle/master'
[factor.git] / vm / utilities.cpp
1 #include "master.hpp"
2
3 namespace factor
4 {
5
6 /* Fill in a PPC function descriptor */
7 void *fill_function_descriptor(void *ptr, void *code)
8 {
9         void **descriptor = (void **)ptr;
10         descriptor[0] = code;
11         descriptor[1] = NULL;
12         descriptor[2] = NULL;
13         return descriptor;
14 }
15
16 /* Get a field from a PPC function descriptor */
17 void *function_descriptor_field(void *ptr, size_t idx)
18 {
19         return ptr ? ((void **) ptr)[idx] : ptr;
20 }
21
22 /* If memory allocation fails, bail out */
23 vm_char *safe_strdup(const vm_char *str)
24 {
25         vm_char *ptr = STRDUP(str);
26         if(!ptr) fatal_error("Out of memory in safe_strdup", 0);
27         return ptr;
28 }
29
30 cell read_cell_hex()
31 {
32         cell cell;
33         std::cin >> std::hex >> cell >> std::dec;
34         if(!std::cin.good()) exit(1);
35         return cell;
36 }
37
38 /* On Windows, memcpy() is in a different DLL and the non-optimizing
39 compiler can't find it */
40 VM_C_API void *factor_memcpy(void *dst, void *src, size_t len)
41 {
42         return memcpy(dst,src,len);
43 }
44
45 }