]> gitweb.factorcode.org Git - factor.git/commitdiff
VM now compiles with GCC 3.4 on Windows
authorSlava Pestov <slava@factorcode.org>
Tue, 5 May 2009 19:17:02 +0000 (14:17 -0500)
committerSlava Pestov <slava@factorcode.org>
Tue, 5 May 2009 19:17:02 +0000 (14:17 -0500)
vm/code_gc.cpp
vm/code_gc.hpp
vm/code_heap.cpp
vm/data_heap.cpp [changed mode: 0644->0755]
vm/dispatch.cpp [changed mode: 0644->0755]
vm/inline_cache.cpp [changed mode: 0644->0755]
vm/layouts.hpp
vm/master.hpp [changed mode: 0644->0755]
vm/math.cpp [changed mode: 0644->0755]
vm/os-windows-nt.cpp
vm/os-windows-nt.hpp

index 721c3f3a7ae52f33722d439a3a3dc383467d29d3..59110d13f8a8fac81d24c44428eb552ca7000767 100755 (executable)
@@ -303,7 +303,7 @@ cell heap_size(heap *heap)
 }
 
 /* Compute where each block is going to go, after compaction */
-       cell compute_heap_forwarding(heap *heap, std::tr1::unordered_map<heap_block *,char *> &forwarding)
+       cell compute_heap_forwarding(heap *heap, unordered_map<heap_block *,char *> &forwarding)
 {
        heap_block *scan = first_block(heap);
        char *address = (char *)first_block(heap);
@@ -324,7 +324,7 @@ cell heap_size(heap *heap)
        return (cell)address - heap->seg->start;
 }
 
-       void compact_heap(heap *heap, std::tr1::unordered_map<heap_block *,char *> &forwarding)
+       void compact_heap(heap *heap, unordered_map<heap_block *,char *> &forwarding)
 {
        heap_block *scan = first_block(heap);
 
index 1ad68f46fd9c0df59bba03b4dfbee6e63782cd61..ebd6349ab95544854d5a03c2804f2610c996ab5a 100755 (executable)
@@ -25,8 +25,8 @@ void unmark_marked(heap *heap);
 void free_unmarked(heap *heap, heap_iterator iter);
 void heap_usage(heap *h, cell *used, cell *total_free, cell *max_free);
 cell heap_size(heap *h);
-cell compute_heap_forwarding(heap *h, std::tr1::unordered_map<heap_block *,char *> &forwarding);
-void compact_heap(heap *h, std::tr1::unordered_map<heap_block *,char *> &forwarding);
+cell compute_heap_forwarding(heap *h, unordered_map<heap_block *,char *> &forwarding);
+void compact_heap(heap *h, unordered_map<heap_block *,char *> &forwarding);
 
 inline static heap_block *next_block(heap *h, heap_block *block)
 {
index db1fd8f880ee87a12a3bcc40e0f2c36414d0d325..77c78ad53393c8eb5c8d64bb2661a20a7798bbb0 100755 (executable)
@@ -119,7 +119,7 @@ PRIMITIVE(code_room)
        dpush(tag_fixnum(max_free / 1024));
 }
 
-static std::tr1::unordered_map<heap_block *,char *> forwarding;
+static unordered_map<heap_block *,char *> forwarding;
 
 code_block *forward_xt(code_block *compiled)
 {
old mode 100644 (file)
new mode 100755 (executable)
index 0045539..9c84a99
@@ -241,7 +241,7 @@ cell unaligned_object_size(object *pointer)
                return callstack_size(untag_fixnum(((callstack *)pointer)->length));
        default:
                critical_error("Invalid header",(cell)pointer);
-               return -1; /* can't happen */
+               return 0; /* can't happen */
        }
 }
 
@@ -283,7 +283,7 @@ cell binary_payload_start(object *pointer)
                return sizeof(wrapper);
        default:
                critical_error("Invalid header",(cell)pointer);
-               return -1; /* can't happen */
+                return 0; /* can't happen */
        }
 }
 
old mode 100644 (file)
new mode 100755 (executable)
index bbcf20c..847a19d
@@ -103,7 +103,7 @@ static cell lookup_hairy_method(cell obj, cell methods)
                        break;
                default:
                        critical_error("Bad methods array",methods);
-                       return -1;
+                       return 0;
                }
        }
 }
old mode 100644 (file)
new mode 100755 (executable)
index 23c4b27..259a3e0
@@ -70,7 +70,7 @@ static cell determine_inline_cache_type(array *cache_entries)
        if(!seen_hi_tag && !seen_tuple) return PIC_TAG;
 
        critical_error("Oops",0);
-       return -1;
+       return 0;
 }
 
 static void update_pic_count(cell type)
index 114b88b9255848e764e43f962288fcebf02a034a..8c96cf3187dc5587780163b161ae225bfd107df0 100755 (executable)
@@ -93,6 +93,9 @@ class object;
 struct header {
        cell value;
 
+        /* Default ctor to make gcc 3.x happy */
+        header() { abort(); }
+
        header(cell value_) : value(value_ << TAG_BITS) {}
 
        void check_header() {
old mode 100644 (file)
new mode 100755 (executable)
index 65d17fa..6409d65
 #include <sys/param.h>
 
 /* C++ headers */
-#include <tr1/unordered_map>
+#if __GNUC__ == 4
+        #include <tr1/unordered_map>
+        #define unordered_map std::tr1::unordered_map
+#elif __GNUC__ == 3
+        #include <boost/unordered_map.hpp>
+        #define unordered_map boost::unordered_map
+#else
+        #error Factor requires GCC 3.x or later
+#endif
 
 /* Factor headers */
 #include "layouts.hpp"
old mode 100644 (file)
new mode 100755 (executable)
index 37768f5..7a2abe7
@@ -377,7 +377,7 @@ VM_C_API fixnum to_fixnum(cell tagged)
                return bignum_to_fixnum(untag<bignum>(tagged));
        default:
                type_error(FIXNUM_TYPE,tagged);
-               return -1; /* can't happen */
+               return 0; /* can't happen */
        }
 }
 
@@ -444,7 +444,7 @@ VM_C_API s64 to_signed_8(cell obj)
                return bignum_to_long_long(untag<bignum>(obj));
        default:
                type_error(BIGNUM_TYPE,obj);
-               return -1;
+               return 0;
        }
 }
 
@@ -466,7 +466,7 @@ VM_C_API u64 to_unsigned_8(cell obj)
                return bignum_to_ulong_long(untag<bignum>(obj));
        default:
                type_error(BIGNUM_TYPE,obj);
-               return -1;
+               return 0;
        }
 }
 
index f07fdaeb87c62f57d08699c5b92d3b0d5228e24e..c4349f243b37f1156f469554575d522f2d06ab36 100755 (executable)
@@ -11,7 +11,7 @@ s64 current_micros()
                - EPOCH_OFFSET) / 10;
 }
 
-long exception_handler(PEXCEPTION_POINTERS pe)
+FACTOR_STDCALL LONG exception_handler(PEXCEPTION_POINTERS pe)
 {
        PEXCEPTION_RECORD e = (PEXCEPTION_RECORD)pe->ExceptionRecord;
        CONTEXT *c = (CONTEXT*)pe->ContextRecord;
@@ -43,10 +43,10 @@ long exception_handler(PEXCEPTION_POINTERS pe)
 
 void c_to_factor_toplevel(cell quot)
 {
-       if(!AddVectoredExceptionHandler(0, exception_handler))
+       if(!AddVectoredExceptionHandler(0, (PVECTORED_EXCEPTION_HANDLER)exception_handler))
                fatal_error("AddVectoredExceptionHandler failed", 0);
        c_to_factor(quot);
-       RemoveVectoredExceptionHandler((void*)exception_handler);
+       RemoveVectoredExceptionHandler((void *)exception_handler);
 }
 
 void open_console()
index 551a798b45fdf9b0ab8b494c9a8880ff23518cbb..4371771c13aa454f3eee2b76291907b57a58e2a8 100755 (executable)
@@ -17,8 +17,10 @@ typedef char symbol_char;
 #define FACTOR_DLL L"factor.dll"
 #define FACTOR_DLL_NAME "factor.dll"
 
+#define FACTOR_STDCALL __attribute__((stdcall))
+
 void c_to_factor_toplevel(cell quot);
-long exception_handler(PEXCEPTION_POINTERS pe);
+FACTOR_STDCALL LONG exception_handler(PEXCEPTION_POINTERS pe);
 void open_console();
 
 }