diff --git a/README.md b/README.md index f2b0600c1fb..04e3e107e58 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Haxe is an open source toolkit that allows you to easily build cross-platform to Haxe allows you to compile for the following targets: + * ActionScript 3 * C++ * C# * Flash @@ -20,6 +21,7 @@ Haxe allows you to compile for the following targets: * JavaScript * NekoVM * PHP + * Python You can try Haxe directly from your browser at [try.haxe.org](http://try.haxe.org)! @@ -37,14 +39,14 @@ For the complete Haxe licenses, please see http://haxe.org/foundation/open-sourc ## Installing Haxe -The latest stable release is [Haxe v3.1.3](http://haxe.org/download). Pre-built binaries are available for your platform: +The latest stable release is [Haxe 3.2.0-rc1](http://haxe.org/download). Pre-built binaries are available for your platform: - * **[Windows installer](http://haxe.org/file/haxe-3.1.3-win.exe)** - * **[Windows binaries](http://haxe.org/file/haxe-3.1.3-win.zip)** - * **[OSX installer](http://haxe.org/file/haxe-3.1.3-osx-installer.pkg)** - * **[OSX binaries](http://haxe.org/file/haxe-3.1.3-osx.tar.gz)** - * **[Linux 32-bit binaries](http://haxe.org/file/haxe-3.1.3-linux32.tar.gz)** - * **[Linux 64-bit binaries](http://haxe.org/file/haxe-3.1.3-linux64.tar.gz)** + * **[Windows installer](http://haxe.org/download/file/3.2.0-rc.1/haxe-3.2.0-rc1-win.exe)** + * **[Windows binaries](http://haxe.org/download/file/3.2.0-rc.1/haxe-3.2.0-rc1-win.zip)** + * **[OSX installer](http://haxe.org/download/file/3.2.0-rc.1/haxe-3.2.0-rc1-osx-installer.pkg)** + * **[OSX binaries](http://haxe.org/download/file/3.2.0-rc.1/haxe-3.2.0-rc1-osx.tar.gz)** + * **[Linux 32-bit binaries](http://haxe.org/download/file/3.2.0-rc.1/haxe-3.2.0-rc1-linux32.tar.gz)** + * **[Linux 64-bit binaries](http://haxe.org/download/file/3.2.0-rc.1/haxe-3.2.0-rc1-linux64.tar.gz)** Automated development builds are available from [build.haxe.org](http://build.haxe.org). diff --git a/extra/haxelib_src b/extra/haxelib_src index 0204aa98410..5f28ba60194 160000 --- a/extra/haxelib_src +++ b/extra/haxelib_src @@ -1 +1 @@ -Subproject commit 0204aa984100c3da3a527865656917d888642b20 +Subproject commit 5f28ba60194f7c75c2b2a4f63ec7e6595067fb9e diff --git a/extra/release-checklist.txt b/extra/release-checklist.txt index e6c40a99cab..b07e494f3f9 100644 --- a/extra/release-checklist.txt +++ b/extra/release-checklist.txt @@ -4,7 +4,7 @@ - Make sure to update the haxelib submodule - Check that the run-time haxelibs are ready for release: hxcpp, hxjava, hxcs -# Making the release +# Building the binaries and installers - Make sure CHANGES.txt has a proper date set! - Make sure `version` in main.ml has the correct value. @@ -12,15 +12,20 @@ - Wait for Travis to greenlight master. - Tag master as MAJOR.MINOR.PATCH. - Wait for builds.haxe.org to build master. -- If required, tell Caue to fix builds.haxe.org. - Get https://github.com/waneck/hxbuilds/tree/master/release-helper - Run it with the fileName corresponding to the latest master file name on builds.haxe.org. -- Upload generated files to some place. -- Update Haxe download page. + +# Making the release + +- Push the generated binaries and installers to haxe.org. +- Copy relevant changelog part to CHANGES.md. +- Write announcement post. +- Copy announcement post to RELEASE.md. +- Update versions.json + +# Announcing the release + - Update Github README page. -- Double-check that you got the links right. - Regenerate and upload API documentation. - Update http://haxe.org/file/CHANGES.txt -- Write announcement post. -- Post announcement post. - +- Post announcement post to haxelang. \ No newline at end of file diff --git a/gencpp.ml b/gencpp.ml index fb8650921ed..f9e24826958 100644 --- a/gencpp.ml +++ b/gencpp.ml @@ -1514,6 +1514,7 @@ let rec define_local_function_ctx ctx func_name func_def = output_i ("HX_BEGIN_LOCAL_FUNC_S" ^ (list_num typed_vars) ^ "(" ^ (if has_this then "hx::LocalThisFunc," else "hx::LocalFunc,") ^ func_name_sep ^ (String.concat "," typed_vars) ^ ")\n" ); + output_i ("int __ArgCount() const { return " ^ (string_of_int (List.length func_def.tf_args)) ^"; }\n"); (* actual function, called "run" *) let args_and_types = List.map diff --git a/genpy.ml b/genpy.ml index 600ae3d56ef..047ffaaec7e 100644 --- a/genpy.ml +++ b/genpy.ml @@ -1163,6 +1163,21 @@ module Printer = struct | TField ({eexpr=(TConst TThis | TLocal _)},_) -> handle_index | _ -> default + and is_safe_string pctx x = + let follow_parens e = match e.eexpr with + | TParenthesis e -> e + | _ -> e + in + match (follow_parens x).eexpr with + | TBinop(OpAdd, e1, e2) -> is_safe_string pctx e1 && is_safe_string pctx e2 + | TCall (e1,_) -> + let id = print_expr pctx (follow_parens e1) in + (match id with + | "Std.string" -> true + | _ -> false) + | TConst (TString s) -> true + | _ -> false + and print_expr pctx e = let indent = pctx.pc_indent in let print_expr_indented e = print_expr {pctx with pc_indent = "\t" ^ pctx.pc_indent} e in @@ -1251,24 +1266,9 @@ module Printer = struct | TBinop(OpUShr,e1,e2) -> Printf.sprintf "HxOverrides.rshift(%s, %s)" (print_expr pctx e1) (print_expr pctx e2) | TBinop(OpAdd,e1,e2) when (is_type1 "" "str")(e.etype) || is_underlying_string e.etype -> - let follow_parens e = match e.eexpr with - | TParenthesis e -> e - | _ -> e - in - let rec is_safe_string x = - match (follow_parens x).eexpr with - | TBinop(OpAdd, e1, e2) -> is_safe_string e1 && is_safe_string e2 - | TCall (e1,_) -> - let id = print_expr pctx (follow_parens e1) in - (match id with - | "Std.string" -> true - | _ -> false) - | TConst (TString s) -> true - | _ -> false - in let rec safe_string ex = match ex.eexpr, ex.etype with - | e, _ when is_safe_string ex -> print_expr pctx ex + | e, _ when is_safe_string pctx ex -> print_expr pctx ex | TBinop(OpAdd, e1, e2), x when (is_type1 "" "str")(x) -> Printf.sprintf "(%s + %s)" (safe_string e1) (safe_string e2) | (TLocal(_)),x when (is_type1 "" "str")(x) -> (* @@ -1611,9 +1611,10 @@ module Printer = struct | TLocal { v_name = "`trace" }, [e;infos] -> if has_feature pctx "haxe.Log.trace" then begin "haxe_Log.trace(" ^ (print_expr pctx e) ^ "," ^ (print_expr pctx infos) ^ ")" - end else begin + end else if is_safe_string pctx e then + "print(" ^ (print_expr pctx e) ^ ")" + else "print(str(" ^ (print_expr pctx e) ^ "))" - end | TField(e1,((FAnon {cf_name = (("join" | "push" | "map" | "filter") as s)}) | FDynamic (("join" | "push" | "map" | "filter") as s))), [x] -> Printf.sprintf "HxOverrides.%s(%s, %s)" s (print_expr pctx e1) (print_expr pctx x) | TField(e1,((FAnon {cf_name = (("iterator" | "toUpperCase" | "toLowerCase" | "pop" | "shift") as s)}) | FDynamic (("iterator" | "toUpperCase" | "toLowerCase" | "pop" | "shift") as s))), [] ->