X-Git-Url: http://nitlanguage.org diff --git a/src/compiler/abstract_compiler.nit b/src/compiler/abstract_compiler.nit index 96ae7a3..224de8b 100644 --- a/src/compiler/abstract_compiler.nit +++ b/src/compiler/abstract_compiler.nit @@ -349,7 +349,14 @@ class MakefileToolchain end var debug = toolcontext.opt_debug.value - makefile.write("CC = ccache cc\nCXX = ccache c++\nCFLAGS = -g{ if not debug then " -O2 " else " "}-Wno-unused-value -Wno-switch -Wno-attributes -Wno-trigraphs\nCINCL =\nLDFLAGS ?= \nLDLIBS ?= -lm {linker_options.join(" ")}\n\n") + makefile.write """ +CC = ccache cc +CXX = ccache c++ +CFLAGS = -g {{{if not debug then "-O2" else ""}}} -Wno-unused-value -Wno-switch -Wno-attributes -Wno-trigraphs +CINCL = +LDFLAGS ?= +LDLIBS ?= -lm {{{linker_options.join(" ")}}} +\n""" makefile.write "\n# SPECIAL CONFIGURATION FLAGS\n" if platform.supports_libunwind then @@ -403,6 +410,18 @@ ifeq ($(uname_S),Darwin) LDLIBS := $(filter-out -lrt,$(LDLIBS)) endif +# Special configuration for Windows under mingw64 +ifeq ($(uname_S),MINGW64_NT-10.0) + # Use the pcreposix regex library + LDLIBS += -lpcreposix + + # Remove POSIX flag -lrt + LDLIBS := $(filter-out -lrt,$(LDLIBS)) + + # Silence warnings when storing Int, Char and Bool as pointer address + CFLAGS += -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast +endif + """ makefile.write("all: {outpath}\n") @@ -510,8 +529,10 @@ endif self.toolcontext.info(command, 2) var res - if self.toolcontext.verbose_level >= 3 or is_windows then + if self.toolcontext.verbose_level >= 3 then res = sys.system("{command} 2>&1") + else if is_windows then + res = sys.system("{command} 2>&1 >nul") else res = sys.system("{command} 2>&1 >/dev/null") end @@ -1610,7 +1631,7 @@ abstract class AbstractCompilerVisitor fun int8_instance(value: Int8): RuntimeVariable do var t = mmodule.int8_type - var res = new RuntimeVariable("((int8_t){value.to_s})", t, t) + var res = new RuntimeVariable("INT8_C({value.to_s})", t, t) return res end @@ -1618,7 +1639,7 @@ abstract class AbstractCompilerVisitor fun int16_instance(value: Int16): RuntimeVariable do var t = mmodule.int16_type - var res = new RuntimeVariable("((int16_t){value.to_s})", t, t) + var res = new RuntimeVariable("INT16_C({value.to_s})", t, t) return res end @@ -1626,7 +1647,7 @@ abstract class AbstractCompilerVisitor fun uint16_instance(value: UInt16): RuntimeVariable do var t = mmodule.uint16_type - var res = new RuntimeVariable("((uint16_t){value.to_s})", t, t) + var res = new RuntimeVariable("UINT16_C({value.to_s})", t, t) return res end @@ -1634,7 +1655,7 @@ abstract class AbstractCompilerVisitor fun int32_instance(value: Int32): RuntimeVariable do var t = mmodule.int32_type - var res = new RuntimeVariable("((int32_t){value.to_s})", t, t) + var res = new RuntimeVariable("INT32_C({value.to_s})", t, t) return res end @@ -1642,7 +1663,7 @@ abstract class AbstractCompilerVisitor fun uint32_instance(value: UInt32): RuntimeVariable do var t = mmodule.uint32_type - var res = new RuntimeVariable("((uint32_t){value.to_s})", t, t) + var res = new RuntimeVariable("UINT32_C({value.to_s})", t, t) return res end @@ -1711,7 +1732,7 @@ abstract class AbstractCompilerVisitor self.add("{nat} = \"{string.escape_to_c}\";") var byte_length = self.int_instance(string.byte_length) var unilen = self.int_instance(string.length) - self.add("{res} = {self.send(self.get_property("to_s_full", native_mtype), [nat, byte_length, unilen]).as(not null)};") + self.add("{res} = {self.send(self.get_property("to_s_unsafe", native_mtype), [nat, byte_length, unilen, value_instance(false), value_instance(false)]).as(not null)};") self.add("{name} = {res};") self.add("\}") return res @@ -2612,10 +2633,10 @@ redef class AMethPropdef v.ret(v.new_expr("(char*){alloc}", ret.as(not null))) return true else if pname == "fetch_4_chars" then - v.ret(v.new_expr("(long)*((uint32_t*)({arguments[0]} + {arguments[1]}))", ret.as(not null))) + v.ret(v.new_expr("*((uint32_t*)({arguments[0]} + {arguments[1]}))", ret.as(not null))) return true else if pname == "fetch_4_hchars" then - v.ret(v.new_expr("(long)be32toh(*((uint32_t*)({arguments[0]} + {arguments[1]})))", ret.as(not null))) + v.ret(v.new_expr("(uint32_t)be32toh(*((uint32_t*)({arguments[0]} + {arguments[1]})))", ret.as(not null))) return true end else if cname == "NativeArray" then @@ -3057,7 +3078,7 @@ redef class AMethPropdef end end if pname == "exit" then - v.add("exit({arguments[1]});") + v.add("exit((int){arguments[1]});") return true else if pname == "sys" then v.ret(v.new_expr("glob_sys", ret.as(not null)))