2
0
Эх сурвалжийг харах

Merge branch 'development' into kt_coro

# Conflicts:
#	README.md
Simon Krajewski 2 сар өмнө
parent
commit
34cffd3836
100 өөрчлөгдсөн 702 нэмэгдсэн , 114 устгасан
  1. 7 7
      LICENSE
  2. 2 1
      Makefile
  3. 2 2
      Makefile.win
  4. 256 0
      extra/CHANGES.txt
  5. 1 1
      extra/haxelib_src
  6. 22 41
      src-json/define.json
  7. 1 1
      src/compiler/args.ml
  8. 7 5
      src/compiler/hxb/hxbWriter.ml
  9. 1 1
      src/compiler/messageReporting.ml
  10. 1 1
      src/core/globals.ml
  11. 26 0
      src/macro/eval/evalStdLib.ml
  12. 2 0
      src/macro/eval/evalValue.ml
  13. 12 0
      std/EReg.hx
  14. 4 0
      std/cpp/Int64Map.hx
  15. 9 0
      std/cpp/_std/EReg.hx
  16. 4 0
      std/cpp/_std/haxe/ds/IntMap.hx
  17. 7 0
      std/cpp/_std/haxe/ds/Map.hx
  18. 4 0
      std/cpp/_std/haxe/ds/ObjectMap.hx
  19. 4 0
      std/cpp/_std/haxe/ds/StringMap.hx
  20. 4 0
      std/cpp/_std/haxe/ds/WeakMap.hx
  21. 1 0
      std/eval/_std/EReg.hx
  22. 5 0
      std/flash/_std/EReg.hx
  23. 6 0
      std/flash/_std/haxe/ds/IntMap.hx
  24. 6 0
      std/flash/_std/haxe/ds/ObjectMap.hx
  25. 6 0
      std/flash/_std/haxe/ds/StringMap.hx
  26. 6 0
      std/flash/_std/haxe/ds/UnsafeStringMap.hx
  27. 6 0
      std/flash/_std/haxe/ds/WeakMap.hx
  28. 1 0
      std/haxe/Constraints.hx
  29. 12 0
      std/haxe/ds/BalancedTree.hx
  30. 7 0
      std/haxe/ds/HashMap.hx
  31. 2 0
      std/haxe/ds/IntMap.hx
  32. 7 0
      std/haxe/ds/Map.hx
  33. 2 0
      std/haxe/ds/ObjectMap.hx
  34. 2 0
      std/haxe/ds/StringMap.hx
  35. 7 0
      std/haxe/ds/WeakMap.hx
  36. 23 0
      std/hl/_std/EReg.hx
  37. 8 0
      std/hl/_std/haxe/ds/IntMap.hx
  38. 8 0
      std/hl/_std/haxe/ds/ObjectMap.hx
  39. 8 0
      std/hl/_std/haxe/ds/StringMap.hx
  40. 7 0
      std/hl/types/BytesMap.hx
  41. 7 0
      std/hl/types/IntMap.hx
  42. 7 0
      std/hl/types/ObjectMap.hx
  43. 6 0
      std/js/_std/EReg.hx
  44. 10 0
      std/js/_std/haxe/ds/IntMap.hx
  45. 10 0
      std/js/_std/haxe/ds/ObjectMap.hx
  46. 16 0
      std/js/_std/haxe/ds/StringMap.hx
  47. 12 0
      std/jvm/_std/EReg.hx
  48. 4 0
      std/jvm/_std/haxe/ds/IntMap.hx
  49. 14 10
      std/jvm/_std/haxe/ds/ObjectMap.hx
  50. 4 0
      std/jvm/_std/haxe/ds/StringMap.hx
  51. 15 11
      std/jvm/_std/haxe/ds/WeakMap.hx
  52. 8 0
      std/lua/_std/EReg.hx
  53. 6 0
      std/lua/_std/haxe/ds/IntMap.hx
  54. 6 0
      std/lua/_std/haxe/ds/ObjectMap.hx
  55. 6 0
      std/lua/_std/haxe/ds/StringMap.hx
  56. 19 0
      std/neko/_std/EReg.hx
  57. 4 0
      std/neko/_std/haxe/ds/IntMap.hx
  58. 4 0
      std/neko/_std/haxe/ds/ObjectMap.hx
  59. 4 0
      std/neko/_std/haxe/ds/StringMap.hx
  60. 5 0
      std/php/_std/EReg.hx
  61. 4 0
      std/php/_std/haxe/ds/IntMap.hx
  62. 4 0
      std/php/_std/haxe/ds/ObjectMap.hx
  63. 4 0
      std/php/_std/haxe/ds/StringMap.hx
  64. 5 0
      std/python/_std/EReg.hx
  65. 4 0
      std/python/_std/haxe/ds/IntMap.hx
  66. 4 0
      std/python/_std/haxe/ds/ObjectMap.hx
  67. 4 0
      std/python/_std/haxe/ds/StringMap.hx
  68. 0 1
      tests/misc/Issue11280/compile-fail.hxml
  69. 0 1
      tests/misc/Issue11280/compile2-fail.hxml
  70. 0 1
      tests/misc/java/projects/Issue11095/pretty-fail.hxml
  71. 0 1
      tests/misc/projects/Issue10623/pretty-fail.hxml
  72. 0 1
      tests/misc/projects/Issue10844/user-defined-meta-pretty-fail.hxml
  73. 0 1
      tests/misc/projects/Issue10863/compile.hxml
  74. 0 1
      tests/misc/projects/Issue11055/compile-pretty-fail.hxml
  75. 0 1
      tests/misc/projects/Issue11121/compile-fail.hxml
  76. 0 1
      tests/misc/projects/Issue11162/compile-fail.hxml
  77. 0 1
      tests/misc/projects/Issue11162/compile2-fail.hxml
  78. 0 1
      tests/misc/projects/Issue11164/compile.hxml
  79. 0 1
      tests/misc/projects/Issue11164/compile2-fail.hxml
  80. 0 1
      tests/misc/projects/Issue11164/compile3-fail.hxml
  81. 0 1
      tests/misc/projects/Issue11164/compile4-fail.hxml
  82. 0 1
      tests/misc/projects/Issue11164/compile5-fail.hxml
  83. 0 1
      tests/misc/projects/Issue11164/compile6-fail.hxml
  84. 0 1
      tests/misc/projects/Issue11164/compile7-fail.hxml
  85. 0 1
      tests/misc/projects/Issue11417/compile-fail.hxml
  86. 0 1
      tests/misc/projects/Issue11417/compile1-fail.hxml
  87. 0 1
      tests/misc/projects/Issue11439/compile3-fail.hxml
  88. 0 1
      tests/misc/projects/Issue11679/compile-fail.hxml
  89. 0 1
      tests/misc/projects/Issue11700/compile-fail.hxml
  90. 0 1
      tests/misc/projects/Issue11753/compile-fail.hxml
  91. 0 1
      tests/misc/projects/Issue11753/compile.hxml
  92. 0 1
      tests/misc/projects/Issue12167/compile-fail.hxml
  93. 0 1
      tests/misc/projects/Issue3188/compile.hxml
  94. 0 1
      tests/misc/projects/Issue5644/pretty-fail.hxml
  95. 0 1
      tests/misc/projects/Issue5949/pretty-fail.hxml
  96. 0 1
      tests/misc/projects/Issue6065/pretty-fail.hxml
  97. 0 1
      tests/misc/projects/Issue6584/pretty-fail.hxml
  98. 0 1
      tests/misc/projects/Issue6790/pretty-fail.hxml
  99. 0 1
      tests/misc/projects/Issue6796/pretty-fail.hxml
  100. 0 1
      tests/misc/projects/Issue6810/pretty-fail.hxml

+ 7 - 7
extra/LICENSE.txt → LICENSE

@@ -7,15 +7,15 @@ The Haxe compiler is licensed under the GNU GPL v2+ license (SPDX: GPL-2.0-or-la
 
 
 The compiler is built around the Haxe source code base.
 The compiler is built around the Haxe source code base.
 
 
-If a file does not have a license header or does not fall under one of the exceptions listed below, 
-it should be assumed to be licensed under the GNU GPL v2+ license with the standard copyright notice:  
-Copyright (C) 2005-2024 Haxe Foundation.
+If a file does not have a license header or does not fall under one of the exceptions listed below,
+it should be assumed to be licensed under the GNU GPL v2+ license with the standard copyright notice:
+Copyright (C) 2005-2025 Haxe Foundation.
 
 
-- The Haxe Standard Library is licensed under the MIT License, which is reproduced below.  
+- The Haxe Standard Library is licensed under the MIT License, which is reproduced below.
   It is located in the `std/` directory, and the MIT license applies to this part of Haxe.
   It is located in the `std/` directory, and the MIT license applies to this part of Haxe.
 
 
-- Haxe contains third-party source code, some of which is located in the `libs/` directory.  
-  Each third-party module includes its own license.  
+- Haxe contains third-party source code, some of which is located in the `libs/` directory.
+  Each third-party module includes its own license.
   For integration with Haxe, these modules may contain Haxe-related files such as a "dune" file
   For integration with Haxe, these modules may contain Haxe-related files such as a "dune" file
   or other files for integration with Haxe or OCaml.
   or other files for integration with Haxe or OCaml.
   These files are licensed under the Haxe Compiler license (GNU GPL v2+).
   These files are licensed under the Haxe Compiler license (GNU GPL v2+).
@@ -26,7 +26,7 @@ For a summary of Haxe licenses, please read [http://haxe.org/foundation/open-sou
 The Haxe Standard Library MIT License:
 The Haxe Standard Library MIT License:
 --------------------------
 --------------------------
 
 
-Copyright (C)2005-2016 Haxe Foundation
+Copyright (C)2005-2025 Haxe Foundation
 
 
 Permission is hereby granted, free of charge, to any person obtaining a
 Permission is hereby granted, free of charge, to any person obtaining a
 copy of this software and associated documentation files (the "Software"),
 copy of this software and associated documentation files (the "Software"),

+ 2 - 1
Makefile

@@ -152,7 +152,8 @@ package_unix:
 	rm -rf $(PACKAGE_FILE_NAME) $(PACKAGE_FILE_NAME).tar.gz
 	rm -rf $(PACKAGE_FILE_NAME) $(PACKAGE_FILE_NAME).tar.gz
 	# Copy the package contents to $(PACKAGE_FILE_NAME)
 	# Copy the package contents to $(PACKAGE_FILE_NAME)
 	mkdir -p $(PACKAGE_FILE_NAME)
 	mkdir -p $(PACKAGE_FILE_NAME)
-	cp -r $(HAXE_OUTPUT) $(HAXELIB_OUTPUT) std extra/LICENSE.txt extra/CONTRIB.txt extra/CHANGES.txt $(PACKAGE_FILE_NAME)
+	cp -r $(HAXE_OUTPUT) $(HAXELIB_OUTPUT) std extra/CONTRIB.txt extra/CHANGES.txt $(PACKAGE_FILE_NAME)
+	cp LICENSE $(PACKAGE_FILE_NAME)/LICENSE.txt
 	# archive
 	# archive
 	tar -zcf $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_bin.tar.gz $(PACKAGE_FILE_NAME)
 	tar -zcf $(PACKAGE_OUT_DIR)/$(PACKAGE_FILE_NAME)_bin.tar.gz $(PACKAGE_FILE_NAME)
 	rm -r $(PACKAGE_FILE_NAME)
 	rm -r $(PACKAGE_FILE_NAME)

+ 2 - 2
Makefile.win

@@ -42,7 +42,7 @@ ifdef FILTER
 CC_CMD=($(COMPILER) $(ALL_CFLAGS) -c $< 2>tmp.cmi && $(FILTER)) || ($(FILTER) && exit 1)
 CC_CMD=($(COMPILER) $(ALL_CFLAGS) -c $< 2>tmp.cmi && $(FILTER)) || ($(FILTER) && exit 1)
 endif
 endif
 
 
-PACKAGE_FILES=$(HAXE_OUTPUT) $(HAXELIB_OUTPUT) std \
+PACKAGE_FILES=$(HAXE_OUTPUT) $(HAXELIB_OUTPUT) std LICENSE \
 	"$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep zlib1.dll | sed -e 's/^\s*//')" \
 	"$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep zlib1.dll | sed -e 's/^\s*//')" \
 	"$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep libpcre2-8-0.dll | sed -e 's/^\s*//')" \
 	"$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep libpcre2-8-0.dll | sed -e 's/^\s*//')" \
 	"$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep libmbedcrypto.dll | sed -e 's/^\s*//')" \
 	"$$(cygcheck $(CURDIR)/$(HAXE_OUTPUT) | grep libmbedcrypto.dll | sed -e 's/^\s*//')" \
@@ -66,7 +66,7 @@ package_win:
 	# Using poor man's cp (zip then unzip), because cp in cygwin is quite broken
 	# Using poor man's cp (zip then unzip), because cp in cygwin is quite broken
 	mkdir -p $(PACKAGE_FILE_NAME)
 	mkdir -p $(PACKAGE_FILE_NAME)
 	7z a -y -tzip -mx0 temp.zip $(PACKAGE_FILES) > log.txt || type log.txt
 	7z a -y -tzip -mx0 temp.zip $(PACKAGE_FILES) > log.txt || type log.txt
-	cd extra && 7z a -y -tzip -mx0 ../temp.zip LICENSE.txt CONTRIB.txt CHANGES.txt > log.txt || type log.txt
+	cd extra && 7z a -y -tzip -mx0 ../temp.zip CONTRIB.txt CHANGES.txt > log.txt || type log.txt
 	7z x -y temp.zip -o$(PACKAGE_FILE_NAME) > log.txt || type log.txt
 	7z x -y temp.zip -o$(PACKAGE_FILE_NAME) > log.txt || type log.txt
 	rm temp.zip
 	rm temp.zip
 	# archive
 	# archive

+ 256 - 0
extra/CHANGES.txt

@@ -1,3 +1,259 @@
+2025-07-04 5.0.0-preview.1
+
+	Removal:
+
+	all : remove 32 bit windows builds (#11541)
+	all : move `sys.db`, `php.Web` and `neko.Web` to `hx4compat` lib (#11385)
+	all : move `haxe.remoting` to `hx4compat` lib (#11387)
+	all : remove haxe.Ucs2 (#12103)
+	hl : move some hl.Format into lib format/heaps (#11869)
+	java/cs : remove C# and Java targets (#11551)
+	macro : remove some API from haxe.macro.Compiler (#11540)
+	macro : remove CompilationServer.setModuleCheckPolicy options (#11615)
+
+	Breaking changes:
+
+	all : rework module resolution (#11168)
+	all : don't infer string on concat (#11318)
+	all : delay typer creation to after init macros (#11323)
+	all : disallow partial resolution (pack.SubType access when module is imported) (#11338)
+	all : don't create a class field for every enum field (#11452)
+	all : only set cf_expr_unoptimized if we think we need it (#11462)
+	all : fix the way optional arguments are handled when using `bind` (#11533)
+	all : don't bind foreign type parameters in definition mode (#11658)
+	all : disallow duplicate argument name (#11978)
+	all :  fix types in null coal null check (#11726)
+	macro : Build macro order vs inheritance (#11582)
+	macro : disallow defining types into existing modules (#11845)
+
+	General improvements:
+
+	all : hxb (new server cache + pre compilation) (#11504)
+	all : rework module resolution (#11168)
+	all : add "Custom" target (#11128)
+	all : private getters/setters (#12204)
+	all : allow boolean operators in patterns (#11157)
+	all : explicitly apply default type parameter (#12002)
+	all : allow modification of loop var in IntIterator loop (#8581)
+	all : support overloading true extern constructors (#11979)
+	all : support f?.bind() (#11571)
+	all : rework defines (#12130, #12251)
+	all : abort compilation on first error with -D fail-fast (#11609)
+	all : add position and error message to decode_error.txt (#12128)
+	all : add configuration options for -D dump, set -D dump-ignore-var-ids by default (#12150, #12130)
+	all : add support for binary literal (#11627)
+	all : add support for --undefine to remove define (#11400)
+	all : add optional WUnsafeEnumEquality (#11813)
+	all : build macOS universal binaries (#11572)
+	all : [experiments] run parts of the compiler in parallel with `-D enable-parallelism` (#12070, #12134, #12081, #12252)
+	all : [std] add enum as haxe.Unit (#11563)
+	all : [std] add BigInteger type (#10750)
+	all : [std] add haxe.runtime.Copy (#11863)
+	all : [std] haxe.Timer.milliseconds (#12260)
+	all : [std] String.indexOf (#7402, #11569)
+	all : [std] add StringBuf.clear() (#11848)
+	all : [std] allow setting haxe.Exception.stack (#12213)
+	all : [std] Serializer: implement reset method (#12068)
+	all : [std] use Vectors in haxe.zip (#11034)
+	all : [messageReparting] pretty errors as default message reporting (#11587)
+	all : [messageReporting] add config to use absolute positions (#11439)
+	all : [display] diagnostics as json rpc (#11412)
+	all : [display] report null safety errors in diagnostics (#11729)
+	all : [display] add server/resetCache (#11482)
+	all : [server] add support for ipv6 addresses for --wait/--connect (#11310)
+	all : [server] improve GC stats tracking (#12246)
+	all : [server] remove custom ocaml GC handling (#12287)
+	hl : bump default hl_version to 1.15 for haxe 5 (#12065)
+	hl : add std.hl.Gc.getLiveObjects (#11599)
+	hl : add element type to HArray (#11734)
+	hl : optimize single char String and adding with empty string
+	hl : added guid type
+	hl : hl.Profile.event give code some meaning with enum abstract (#12262)
+	jvm : improve NativeOutput performance (#11944)
+	jvm : functional interface support (#11019)
+	cpp : add Tracy profiler extern (#11772)
+	cppia : generate full debug source paths (#12053)
+	js : use native maps when ES6 is enabled (#11698)
+	js : remove String.fromCodePoint polyfill for es6 (#11713)
+	js : add the canParse() and parse() static methods to URL (#11802)
+	js : add externs for the Screen Wake Lock API (#11421)
+	js : add externs for the Web Share API (#11423)
+	js : update Object and Symbol externs (#11331)
+	js : clean up ES5 implementation of StringMap.keys() (#11895)
+	js : add new WebGLPolygonMode extension (#12026)
+	js : add js.lib.NativeStringTools (#12127)
+	php : add externs for some POSIX functions (#11769)
+	macro : delay typer creation to after init macros (#11323)
+	macro : added Context.resolveComplexType
+	macro : add TypeTools.toBaseType() (#11153)
+	macro : add TypeTools.resolveTypeParameters (#11053)
+	macro : add PositionTools.toZeroRange(pos) to avoid messing up display requests (#11892)
+	macro : apply @:using after build macros (#11625)
+	macro : include module path in virtual file names (#11852)
+	macro : respect imports on @:build (#11373)
+	macro : [server] expose compilation server stats (#12290)
+	macro : [server] add memory print that support details for macro interpreter (#11644)
+	eval : atomics (#12275)
+
+	Bugfixes:
+
+	all : fix @:wrappedException type (#11140)
+	all : don't allow null-only switches if we need a value (#11366)
+	all : detect recursive hxmls (#11580)
+	all : use local name instead of temp name for ?? (#11464)
+	all : fix local statics vs display requests (#11849)
+	all : fix unclosed monomorphs in function signature (#11381)
+	all : update target config after init macros (#11985)
+	all : local static vs local functions (#11999)
+	all : fix null coal assign (#11980)
+	all : static extension with name `_new` resolving incorrectly to abstract new (#11994)
+	all : allow Single div without cast to Float (#12039)
+	all : recurse into singularly constrained monos for field collection (#11918)
+	all : also skip mono ids if -D dump-ignore-var-ids (#12126)
+	all : renamed `-D *-times` defines to `-D times.*` (#12101)
+	all : apply @:haxe.warning rules to cached warnings too (#11775)
+	all : avoid some capture variable wrapping in non-loops (#12235)
+	all : @:noCompletion vs. static extensions (#12254)
+	all : use available terminal columns instead of hardcoded 80 columns (#11404)
+	all : track actual path position for path.Path<Params> (#11405)
+	all : set --run args only when we're actually running (#11524)
+	all : [std] do not close unowned socket in Http.customRequest (#12069)
+	all : [std] fix zipfiles not having data descriptor after filedata (#11686)
+	all : [std] implement EnumValueMap.compareArg properly (#12139)
+	all : [std] Syntax.code: remove double curly braces escaping (#11231)
+	all : [typer] check default type parameter constraints (#11556)
+	all : [typer] fix custom array access temp var handling (#11248)
+	all : [typer] valid redefinition rework (#11657)
+	all : [typer] give better "Cannot extend by" error (#11352)
+	all : [typer] delay unknown ident errors in overloads (#11372)
+	all : [typer] support safe nav for assign ops (#11379)
+	all : [typer] don't allow @:structInit to call abstract constructors (#11342)
+	all : [typer] align null coalescing top down inference with normal if/else (#11425)
+	all : [typer] deal with for (i in throw) (#11403)
+	all : [typer] type operator lhs against expected type (#11428)
+	all : [typer] consume bypass_accessor only if it's actually relevant (#11488)
+	all : [typer] don't hide abstract type when resolving through @:forward (#11526)
+	all : [typer] don't consider @:structInit + @:from when inferring (#11535)
+	all : [typer] avoid lhs cast on ambiguous operators (#12146)
+	all : [typer] abstract vs. mono hard unification error (#12182)
+	all : [typer] follow through abstract underlying types for null-checks when matching (#11716)
+	all : [typer] fix Monomorph vs Null<T> inference issue (#11851)
+	all : [typer] fail softer on multiple read/write resolve methods (#11757)
+	all : [typer] always allow local function type parameters (#11520)
+	all : [typer] disallow ?.new and ?.match (#11799)
+	all : [generics] use tclass instead of TType.t for substitution (#11784)
+	all : [generics] ensure type substitution happens for closures too (#12173)
+	all : [xml] fix when string ends with escape sequence (#11883)
+	all : [xml] fixed xml cased escape sequences (#11914)
+	all : [analyzer] inline ctors improved handling of ignored exprs (#11356)
+	all : [analyzer] fix captured checks in constructor inliner (#11356)
+	all : [analyzer] fix for inline constructors bug (#12169)
+	all : [analyzer] fix stack overflow on empty TBlock (#11393)
+	all : [analyzer] disallow Void in compound block expressions (#11391)
+	all : [analyzer] reconstruct binops in return (#12243)
+	all : [analyzer] send all types to analyzer for purity inference (#12224)
+	all : [analyzer] const propagation typing fixes (#12059)
+	all : [filters] avoid overlap work if we reserve anyway (#11174)
+	all : [filters] recurse into expressions of local statics (#11469)
+	all : [nullSafety] don't check return expr in assignments (#11114)
+	all : [nullSafety] only process fields that do not have CfPostProcessed flag (#11185)
+	all : [nullSafety] fix null arg check (#11076)
+	all : [nullSafety] detect nulls in structs (#11099)
+	all : [nullSafety] more nullSafety compatibility in std (#12141)
+	all : [nullSafety] better error range for anon fields (#12188)
+	all : [nullSafety] improve control flow in binops (#12197)
+	all : [nullSafety] some inline api fixes (#12210)
+	all : [nullSafety] allow statics init in main (#12211)
+	all : [parser] fix ?? precedence (#11144)
+	all : [parser] catch duplicate #else (#11208)
+	all : [parser] check for Eof (#11368)
+	all : [parser] detect trailing metadata (#11389)
+	all : [parser] allow using anonymous functions in operator expressions (#12015)
+	all : [parser] fix format string reentrency (#12159)
+	all : [printer] use parentheses for arrow function with argument default value (#12248)
+	all : [display] avoid display issues with missing fields (#11251)
+	all : [display] don't populate cache from xml diagnostics (#11696)
+	all : [display] run some filters in diagnostics (#11220)
+	all : [display] insert EDisplay in the proper position when parsing a call expression. (#11441)
+	all : [display] use correct position for alias imports (#11516)
+	all : [display] do not silently replace missing types with Dynamic (#11760)
+	all : [display] catch 'die' calls in diagnostics (#11984)
+	all : [display] browse for EDisplay when calls fail (#11422)
+	all : [server] do not crash when client exits before end of compilation
+	hl : rework Null<Int/Float/Bool> comparison for spec/alloc (#11612)
+	hl : fix -D hl-check error pos (#11727)
+	hl : fix interface override function resolution (#11723)
+	hl : fix debug info missing for catch e:String, arg with unify error (#11717)
+	hl : fix debug pos in assign when reg reuse arg (#11808)
+	hl : use HDyn instead of erroring on recursive types (#11844)
+	hl : fix array pos check, force UInt (#11810)
+	hl : fix debug assigns not sorted when not optimize (#12006)
+	hl : allow assign struct to packed (#12043)
+	hl : consider _ prefix when checking reserved keywords (#12090)
+	hl : fix no analyzer-optimize (#12107)
+	hl : make Reflect.field work with enums (#12117)
+	hl : CArray add blit, fix unsafeSet (#12118)
+	hl : fix `__string` null access when toString return null (#12143)
+	hl : fix debug function pos in wrapper, enum, init (#12207)
+	hl : use classpaths relative_path for get_relative_path (#12219)
+	hl : fix Type.typeof(HI64) to return TInt (#12264)
+	hl : `haxe.io.BytesBuffer.__expand` check overflow (#12267)
+	hl : added hl.Api.unsafeCast, allow CArray unsafe set
+	hl : hlopt rework try-catch control flow (#11581)
+	hl : make sure -dce full will not remove @:struct fields as they match native code
+	hl : fix do-while loop in genhl+hlopt (#11461)
+	hl/c: fix reserved keywords (#11408)
+	hl/c : fix SMOD/SDIV overflow exception when INT_MIN / -1 (#11917)
+	hl/c : split hl_init_roots to prevent out of heap in msvc (#11988)
+	jvm : allow - in resource names (#11275)
+	jvm : function arguments with type parameters not generating correctly (#11362)
+	jvm : refer to static instance methods correctly (#11023)
+	jvm : annotation rework (#11398)
+	jvm : deal with complex static inits (#11998)
+	jvm : deal with local function default arguments (#12094)
+	jvm : assign dynamic method only if it's null (#11530)
+	jvm : fix invokeDynamic arity
+	jvm : use HashMap for IntMap too
+	jvm : remove redundant ordinal comparison on enums (#11591)
+	cpp : enum Type Checking (#11444)
+	cpp : fix abstract class functions with default values (#11667)
+	cpp : absolute paths with -D absolute-path (#11763)
+	cpp : fix mismatching type and getter return on pointer (#12055)
+	cpp : allow setting callback for cppia script load (#12051)
+	cpp : prevent use of AtomicObject (#11674)
+	cpp : do not store AtomicInt Gc memory in cpp.Pointer (#12236)
+	js : fix wrong calculation for Int64 (ushr / add) methods (#11868)
+	js : avoid optimizing Std.is away in api_inline (#12133)
+	js : avoid crash in HttpNodeJs when no connection (#12137)
+	js : remove weird class name omission (#11071)
+	js : fix enums parameters generation to make it compatible with advanced JS minification tools (#11328)
+	lua : emit class name even if not required (#11112)
+	lua : fix do while loops (#11807)
+	lua : fix for wrong left shift with -1 (#11889)
+	lua : fix internal loop var updates (#12193)
+	lua : fix unnecessary `_hx_do_first` (#11453)
+	lua : allow generating sourcemaps for Lua in the same format as JS (#11454)
+	lua : share metatables with other class instances (#11103)
+	neko : optimise BytesBuffer length field (#11090)
+	python : mark threads as daemon threads (#12096)
+	hl/neko/eval : don't avoid exception wrapping (#12049)
+	macro : catch eval runtime failures when decoding (#11633)
+	macro : skip abstract impl classes when applying addGlobalMetadata (#11546)
+	macro : don't exception-wrap every API function (#11374)
+	macro : don't apply @:native names (#11481)
+	macro : display failing macro for "Build failure" errors (#11635)
+	macro : delay exclude macro turning types into externs until filters (#11685)
+	macro : use better error position for null_pos uncaught exceptions (#11788)
+	macro : fail nicer if we can't find a macro function (#11776)
+	macro : deal with module fields in Compiler.exclude (#11688)
+	macro : avoid polluting lexer cache with Context.parseInlineString (#11920)
+	macro : account for sub-types in ComplexTypeTools.toComplex() (#11273)
+	macro : build metadata with basic types from current context (#11336)
+	macro : fix TVar resolution (#11339)
+	macro : don't lose static modifier in ExprTools.map (#12030)
+	eval : fix ssl cert verification failures on clean windows environments (#11838)
+	eval : fix field typo in haxe.zip.Compress (#11143)
+
 2025-05-09 4.3.7
 2025-05-09 4.3.7
 
 
 	General improvements:
 	General improvements:

+ 1 - 1
extra/haxelib_src

@@ -1 +1 @@
-Subproject commit 436bd844f90c61100b13a108912c1f7e918aead3
+Subproject commit 20199d4e6c1eec17286efdc52067ad6ff94bb3d7

+ 22 - 41
src-json/define.json

@@ -8,8 +8,7 @@
 		"name": "AdvancedTelemetry",
 		"name": "AdvancedTelemetry",
 		"define": "advanced-telemetry",
 		"define": "advanced-telemetry",
 		"doc": "Allow the SWF to be measured with Monocle tool.",
 		"doc": "Allow the SWF to be measured with Monocle tool.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "AnalyzerOptimize",
 		"name": "AnalyzerOptimize",
@@ -226,8 +225,7 @@
 		"name": "Fdb",
 		"name": "Fdb",
 		"define": "fdb",
 		"define": "fdb",
 		"doc": "Enable full flash debug infos for FDB interactive debugging.",
 		"doc": "Enable full flash debug infos for FDB interactive debugging.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "FileExtension",
 		"name": "FileExtension",
@@ -239,15 +237,13 @@
 		"name": "FlashStrict",
 		"name": "FlashStrict",
 		"define": "flash-strict",
 		"define": "flash-strict",
 		"doc": "More strict typing for flash target.",
 		"doc": "More strict typing for flash target.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "FlashUseStage",
 		"name": "FlashUseStage",
 		"define": "flash-use-stage",
 		"define": "flash-use-stage",
 		"doc": "Keep the SWF library initial stage.",
 		"doc": "Keep the SWF library initial stage.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "ForceNativeProperty",
 		"name": "ForceNativeProperty",
@@ -265,8 +261,7 @@
 		"name": "HaxeBoot",
 		"name": "HaxeBoot",
 		"define": "haxe-boot",
 		"define": "haxe-boot",
 		"doc": "Give the name 'haxe' to the flash boot class instead of a generated name.",
 		"doc": "Give the name 'haxe' to the flash boot class instead of a generated name.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "HaxeVer",
 		"name": "HaxeVer",
@@ -611,8 +606,7 @@
 		"name": "NetworkSandbox",
 		"name": "NetworkSandbox",
 		"define": "network-sandbox",
 		"define": "network-sandbox",
 		"doc": "Use local network sandbox instead of local file access one.",
 		"doc": "Use local network sandbox instead of local file access one.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "NoCompilation",
 		"name": "NoCompilation",
@@ -636,8 +630,7 @@
 		"name": "NoFlashOverride",
 		"name": "NoFlashOverride",
 		"define": "no-flash-override",
 		"define": "no-flash-override",
 		"doc": "Change overrides on some basic classes into HX suffixed methods",
 		"doc": "Change overrides on some basic classes into HX suffixed methods",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "NoOpt",
 		"name": "NoOpt",
@@ -665,8 +658,7 @@
 		"name": "NoSwfCompress",
 		"name": "NoSwfCompress",
 		"define": "no-swf-compress",
 		"define": "no-swf-compress",
 		"doc": "Disable SWF output compression.",
 		"doc": "Disable SWF output compression.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "NoTraces",
 		"name": "NoTraces",
@@ -764,82 +756,71 @@
 		"define": "swc",
 		"define": "swc",
 		"doc": "Output a SWC instead of a SWF.",
 		"doc": "Output a SWC instead of a SWF.",
 		"platforms": ["flash"],
 		"platforms": ["flash"],
-		"reserved": true,
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"reserved": true
 	},
 	},
 	{
 	{
 		"name": "SwfCompressLevel",
 		"name": "SwfCompressLevel",
 		"define": "swf-compress-level",
 		"define": "swf-compress-level",
 		"doc": "Set the amount of compression for the SWF output.",
 		"doc": "Set the amount of compression for the SWF output.",
 		"platforms": ["flash"],
 		"platforms": ["flash"],
-		"params": ["level: 1-9"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"params": ["level: 1-9"]
 	},
 	},
 	{
 	{
 		"name": "SwfDebugPassword",
 		"name": "SwfDebugPassword",
 		"define": "swf-debug-password",
 		"define": "swf-debug-password",
 		"doc": "Set a password for debugging.",
 		"doc": "Set a password for debugging.",
 		"platforms": ["flash"],
 		"platforms": ["flash"],
-		"params": ["password"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"params": ["password"]
 	},
 	},
 	{
 	{
 		"name": "SwfDirectBlit",
 		"name": "SwfDirectBlit",
 		"define": "swf-direct-blit",
 		"define": "swf-direct-blit",
 		"doc": "Use hardware acceleration to blit graphics.",
 		"doc": "Use hardware acceleration to blit graphics.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "SwfGpu",
 		"name": "SwfGpu",
 		"define": "swf-gpu",
 		"define": "swf-gpu",
 		"doc": "Use GPU compositing features when drawing graphics.",
 		"doc": "Use GPU compositing features when drawing graphics.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "SwfHeader",
 		"name": "SwfHeader",
 		"define": "swf-header",
 		"define": "swf-header",
 		"doc": "define SWF header (width:height:fps:color)",
 		"doc": "define SWF header (width:height:fps:color)",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "SwfMetadata",
 		"name": "SwfMetadata",
 		"define": "swf-metadata",
 		"define": "swf-metadata",
 		"doc": "Include contents of the given file as metadata in the SWF.",
 		"doc": "Include contents of the given file as metadata in the SWF.",
 		"platforms": ["flash"],
 		"platforms": ["flash"],
-		"params": ["file"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"params": ["file"]
 	},
 	},
 	{
 	{
 		"name": "SwfPreloaderFrame",
 		"name": "SwfPreloaderFrame",
 		"define": "swf-preloader-frame",
 		"define": "swf-preloader-frame",
 		"doc": "Insert empty first frame in SWF.",
 		"doc": "Insert empty first frame in SWF.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "SwfProtected",
 		"name": "SwfProtected",
 		"define": "swf-protected",
 		"define": "swf-protected",
 		"doc": "Compile Haxe `private` as `protected` in the SWF instead of `public`.",
 		"doc": "Compile Haxe `private` as `protected` in the SWF instead of `public`.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "SwfScriptTimeout",
 		"name": "SwfScriptTimeout",
 		"define": "swf-script-timeout",
 		"define": "swf-script-timeout",
 		"doc": "Maximum ActionScript processing time before script stuck dialog box displays.",
 		"doc": "Maximum ActionScript processing time before script stuck dialog box displays.",
 		"platforms": ["flash"],
 		"platforms": ["flash"],
-		"params": ["time in seconds"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"params": ["time in seconds"]
 	},
 	},
 	{
 	{
 		"name": "SwfUseDoAbc",
 		"name": "SwfUseDoAbc",
 		"define": "swf-use-doabc",
 		"define": "swf-use-doabc",
 		"doc": "Use `DoAbc` SWF-tag instead of `DoAbcDefine`.",
 		"doc": "Use `DoAbc` SWF-tag instead of `DoAbcDefine`.",
-		"platforms": ["flash"],
-		"deprecated": "The flash target will be removed for Haxe 5"
+		"platforms": ["flash"]
 	},
 	},
 	{
 	{
 		"name": "Sys",
 		"name": "Sys",
@@ -885,10 +866,10 @@
 		"params": ["mode: classic | pretty | indent"]
 		"params": ["mode: classic | pretty | indent"]
 	},
 	},
 	{
 	{
-		"name": "MessageNoColor",
-		"define": "message.no-color",
+		"name": "MessageColor",
+		"define": "message.color",
 		"signatureNeutral": true,
 		"signatureNeutral": true,
-		"doc": "Disable ANSI color codes in message reporting."
+		"doc": "Enable ANSI color codes in message reporting."
 	},
 	},
 	{
 	{
 		"name": "MessageAbsolutePositions",
 		"name": "MessageAbsolutePositions",

+ 1 - 1
src/compiler/args.ml

@@ -42,7 +42,7 @@ let process_args arg_spec =
 
 
 let parse_args com =
 let parse_args com =
 	let usage = Printf.sprintf
 	let usage = Printf.sprintf
-		"Haxe Compiler %s - (C)2005-2024 Haxe Foundation\nUsage: haxe%s <target> [options] [hxml files and dot paths...]\n"
+		"Haxe Compiler %s - (C)2005-2025 Haxe Foundation\nUsage: haxe%s <target> [options] [hxml files and dot paths...]\n"
 		(s_version_full com.version) (if Sys.os_type = "Win32" then ".exe" else "")
 		(s_version_full com.version) (if Sys.os_type = "Win32" then ".exe" else "")
 	in
 	in
 	let actx = {
 	let actx = {

+ 7 - 5
src/compiler/hxb/hxbWriter.ml

@@ -430,7 +430,7 @@ type hxb_writer = {
 	mutable field_stack : unit list;
 	mutable field_stack : unit list;
 	mutable wrote_local_type_param : bool;
 	mutable wrote_local_type_param : bool;
 	mutable needs_local_context : bool;
 	mutable needs_local_context : bool;
-	unbound_ttp : (string * pos, bool) Hashtbl.t;
+	unbound_ttp : (typed_type_param,unit) IdentityPool.t;
 	unclosed_mono : (tmono,unit) IdentityPool.t;
 	unclosed_mono : (tmono,unit) IdentityPool.t;
 	t_instance_chunk : Chunk.t;
 	t_instance_chunk : Chunk.t;
 }
 }
@@ -1091,10 +1091,12 @@ module HxbWriter = struct
 		end with Not_found ->
 		end with Not_found ->
 			let (source, p) = perform UnboundTTP in
 			let (source, p) = perform UnboundTTP in
 			let msg = Printf.sprintf "Unbound type parameter %s while writing %s" (s_type_path ttp.ttp_class.cl_path) source in
 			let msg = Printf.sprintf "Unbound type parameter %s while writing %s" (s_type_path ttp.ttp_class.cl_path) source in
-			if not (Hashtbl.mem writer.unbound_ttp (msg, p)) then begin
-				Hashtbl.add writer.unbound_ttp (msg, p) true;
+			(* if not (Hashtbl.mem writer.unbound_ttp (msg, p)) then begin *)
+			(* 	Hashtbl.add writer.unbound_ttp (msg, p) true; *)
+			(try ignore(IdentityPool.get writer.unbound_ttp ttp) with Not_found -> begin
+				ignore(IdentityPool.add writer.unbound_ttp ttp ());
 				writer.warn WUnboundTypeParameter msg p;
 				writer.warn WUnboundTypeParameter msg p;
-			end;
+			end);
 			writer.wrote_local_type_param <- true;
 			writer.wrote_local_type_param <- true;
 			Chunk.write_u8 writer.chunk 5;
 			Chunk.write_u8 writer.chunk 5;
 			write_path writer ttp.ttp_class.cl_path;
 			write_path writer ttp.ttp_class.cl_path;
@@ -2340,7 +2342,7 @@ let create config warn anon_id =
 		field_stack = [];
 		field_stack = [];
 		wrote_local_type_param = false;
 		wrote_local_type_param = false;
 		needs_local_context = false;
 		needs_local_context = false;
-		unbound_ttp = Hashtbl.create 0;
+		unbound_ttp = IdentityPool.create ();
 		unclosed_mono = IdentityPool.create ();
 		unclosed_mono = IdentityPool.create ();
 		t_instance_chunk = Chunk.create EOM cp 32;
 		t_instance_chunk = Chunk.create EOM cp 32;
 	}
 	}

+ 1 - 1
src/compiler/messageReporting.ml

@@ -142,7 +142,7 @@ let compiler_pretty_message_string defines ectx cm =
 
 
 		let gutter_len = (try String.length (Printf.sprintf "%d" (IntMap.find cm.cm_depth ectx.max_lines)) with Not_found -> 0) + 2 in
 		let gutter_len = (try String.length (Printf.sprintf "%d" (IntMap.find cm.cm_depth ectx.max_lines)) with Not_found -> 0) + 2 in
 
 
-		let no_color = Define.defined defines Define.MessageNoColor in
+		let no_color = not (Define.defined defines Define.MessageColor) in
 		let c_reset = if no_color then "" else "\x1b[0m" in
 		let c_reset = if no_color then "" else "\x1b[0m" in
 		let c_bold = if no_color then "" else "\x1b[1m" in
 		let c_bold = if no_color then "" else "\x1b[1m" in
 		let c_dim = if no_color then "" else "\x1b[2m" in
 		let c_dim = if no_color then "" else "\x1b[2m" in

+ 1 - 1
src/core/globals.ml

@@ -56,7 +56,7 @@ let version = 5000
 let version_major = version / 1000
 let version_major = version / 1000
 let version_minor = (version mod 1000) / 100
 let version_minor = (version mod 1000) / 100
 let version_revision = (version mod 100)
 let version_revision = (version mod 100)
-let version_pre = Some "alpha.1"
+let version_pre = Some "preview.1"
 
 
 let file_pos file = { pfile = file; pmin = 0; pmax = 0 }
 let file_pos file = { pfile = file; pmin = 0; pmax = 0 }
 let fake_pos p = { pfile = p; pmin = -1; pmax = -1 }
 let fake_pos p = { pfile = p; pmin = -1; pmax = -1 }

+ 26 - 0
src/macro/eval/evalStdLib.ml

@@ -925,6 +925,16 @@ module StdEReg = struct
 		end
 		end
 	)
 	)
 
 
+	let matchedNum = vifun0 (fun vthis ->
+		let this = this vthis in
+		if Array.length this.r_groups = 0 then
+			vint 0
+		else begin
+			let substrings = this.r_groups.(0) in
+			vint (num_of_subs substrings)
+		end
+	)
+
 	let replace = vifun2 (fun vthis s by ->
 	let replace = vifun2 (fun vthis s by ->
 		let this = this vthis in
 		let this = this vthis in
 		let s = decode_string s in
 		let s = decode_string s in
@@ -1554,6 +1564,10 @@ module StdIntMap = struct
 		RuntimeIntHashtbl.clear (this vthis);
 		RuntimeIntHashtbl.clear (this vthis);
 		vnull
 		vnull
 	)
 	)
+
+	let size = vifun0 (fun vthis ->
+		vint (RuntimeIntHashtbl.size (this vthis))
+	)
 end
 end
 
 
 module StdStringMap = struct
 module StdStringMap = struct
@@ -1613,6 +1627,10 @@ module StdStringMap = struct
 		RuntimeStringHashtbl.clear (this vthis);
 		RuntimeStringHashtbl.clear (this vthis);
 		vnull
 		vnull
 	)
 	)
+
+	let size = vifun0 (fun vthis ->
+		vint (RuntimeStringHashtbl.size (this vthis))
+	)
 end
 end
 
 
 module StdObjectMap = struct
 module StdObjectMap = struct
@@ -1671,6 +1689,10 @@ module StdObjectMap = struct
 		ValueHashtbl.reset (this vthis);
 		ValueHashtbl.reset (this vthis);
 		vnull
 		vnull
 	)
 	)
+
+	let size = vifun0 (fun vthis ->
+		vint (ValueHashtbl.length (this vthis))
+	)
 end
 end
 
 
 let random = Random.State.make_self_init()
 let random = Random.State.make_self_init()
@@ -3205,6 +3227,7 @@ let init_maps builtins =
 		"set",StdIntMap.set;
 		"set",StdIntMap.set;
 		"toString",StdIntMap.toString;
 		"toString",StdIntMap.toString;
 		"clear",StdIntMap.clear;
 		"clear",StdIntMap.clear;
+		"size",StdIntMap.size;
 	];
 	];
 	init_fields builtins (["haxe";"ds"],"ObjectMap") [] [
 	init_fields builtins (["haxe";"ds"],"ObjectMap") [] [
 		"copy",StdObjectMap.copy;
 		"copy",StdObjectMap.copy;
@@ -3217,6 +3240,7 @@ let init_maps builtins =
 		"set",StdObjectMap.set;
 		"set",StdObjectMap.set;
 		"toString",StdObjectMap.toString;
 		"toString",StdObjectMap.toString;
 		"clear",StdObjectMap.clear;
 		"clear",StdObjectMap.clear;
+		"size",StdObjectMap.size;
 	];
 	];
 	init_fields builtins (["haxe";"ds"],"StringMap") [] [
 	init_fields builtins (["haxe";"ds"],"StringMap") [] [
 		"copy",StdStringMap.copy;
 		"copy",StdStringMap.copy;
@@ -3229,6 +3253,7 @@ let init_maps builtins =
 		"set",StdStringMap.set;
 		"set",StdStringMap.set;
 		"toString",StdStringMap.toString;
 		"toString",StdStringMap.toString;
 		"clear",StdStringMap.clear;
 		"clear",StdStringMap.clear;
+		"size",StdStringMap.size;
 	]
 	]
 
 
 let init_constructors builtins =
 let init_constructors builtins =
@@ -3500,6 +3525,7 @@ let init_standard_library builtins =
 		"matchedPos",StdEReg.matchedPos;
 		"matchedPos",StdEReg.matchedPos;
 		"matchedRight",StdEReg.matchedRight;
 		"matchedRight",StdEReg.matchedRight;
 		"matchSub",StdEReg.matchSub;
 		"matchSub",StdEReg.matchSub;
+		"matchedNum",StdEReg.matchedNum;
 		"replace",StdEReg.replace;
 		"replace",StdEReg.replace;
 		"split",StdEReg.split;
 		"split",StdEReg.split;
 	];
 	];

+ 2 - 0
src/macro/eval/evalValue.ml

@@ -56,6 +56,7 @@ module RuntimeStringHashtbl = struct
 	let mem this key = StringMap.mem key.sstring !this
 	let mem this key = StringMap.mem key.sstring !this
 	let remove this key = this := StringMap.remove key.sstring !this
 	let remove this key = this := StringMap.remove key.sstring !this
 	let clear this = this := StringMap.empty
 	let clear this = this := StringMap.empty
+	let size this = StringMap.cardinal !this
 end
 end
 
 
 module RuntimeIntHashtbl = struct
 module RuntimeIntHashtbl = struct
@@ -71,6 +72,7 @@ module RuntimeIntHashtbl = struct
 	let mem this key = IntHashtbl.mem this key
 	let mem this key = IntHashtbl.mem this key
 	let remove this key = IntHashtbl.remove this key
 	let remove this key = IntHashtbl.remove this key
 	let clear this = IntHashtbl.clear this
 	let clear this = IntHashtbl.clear this
+	let size this = IntHashtbl.length this
 end
 end
 
 
 type vregex = {
 type vregex = {

+ 12 - 0
std/EReg.hx

@@ -134,6 +134,18 @@ class EReg {
 		return false;
 		return false;
 	}
 	}
 
 
+	/**
+		Returns the total number of groups captures by the last matched substring.
+
+		To stay consistent with `this.matched`, the matched substring is also
+		counted as a group.
+
+		Returns `0` if no substring has been matched.
+	**/
+	public function matchedNum():Int {
+		return 0;
+	}
+
 	/**
 	/**
 		Splits String `s` at all substrings `this` EReg matches.
 		Splits String `s` at all substrings `this` EReg matches.
 
 

+ 4 - 0
std/cpp/Int64Map.hx

@@ -110,6 +110,10 @@ import haxe.Int64;
 		#end
 		#end
 	}
 	}
 
 
+	public function size():Int {
+		return untyped __global__.__root_hash_size(h);
+	}
+
 	#if (scriptable)
 	#if (scriptable)
 	private function setString(key:Int64, val:String):Void {
 	private function setString(key:Int64, val:String):Void {
 		untyped __int64_hash_set_string(__cpp__("HX_MAP_THIS"), key, val);
 		untyped __int64_hash_set_string(__cpp__("HX_MAP_THIS"), key, val);

+ 9 - 0
std/cpp/_std/EReg.hx

@@ -71,6 +71,12 @@
 		return p;
 		return p;
 	}
 	}
 
 
+	public function matchedNum():Int {
+		var num = _hx_regexp_matched_num(r);
+		if (num == -1) return 0;
+		return num;
+	}
+
 	public function split(s:String):Array<String> {
 	public function split(s:String):Array<String> {
 		var pos = 0;
 		var pos = 0;
 		var len = s.length;
 		var len = s.length;
@@ -190,4 +196,7 @@
 
 
 	@:native("_hx_regexp_matched_pos")
 	@:native("_hx_regexp_matched_pos")
 	extern static function _hx_regexp_matched_pos(handle:Dynamic, match:Int):{pos:Int, len:Int};
 	extern static function _hx_regexp_matched_pos(handle:Dynamic, match:Int):{pos:Int, len:Int};
+
+	@:native("_hx_regexp_matched_num")
+	extern static function _hx_regexp_matched_num(handle:Dynamic):Int;
 }
 }

+ 4 - 0
std/cpp/_std/haxe/ds/IntMap.hx

@@ -107,6 +107,10 @@ package haxe.ds;
 		h = null;
 		h = null;
 		#end
 		#end
 	}
 	}
+	
+	public function size():Int {
+		return untyped __global__.__root_hash_size(h);
+	}
 
 
 	#if (scriptable)
 	#if (scriptable)
 	private function setString(key:Int, val:String):Void {
 	private function setString(key:Int, val:String):Void {

+ 7 - 0
std/cpp/_std/haxe/ds/Map.hx

@@ -164,6 +164,13 @@ abstract Map<K, V>(IMap<K, V>) {
 		this.clear();
 		this.clear();
 	}
 	}
 
 
+	/**
+		Returns size of `this` Map.
+	**/
+	public inline function size():Int {
+		return this.size();
+	}
+
 	@:arrayAccess @:noCompletion public inline function arrayWrite(k:K, v:V):V {
 	@:arrayAccess @:noCompletion public inline function arrayWrite(k:K, v:V):V {
 		this.set(k, v);
 		this.set(k, v);
 		return v;
 		return v;

+ 4 - 0
std/cpp/_std/haxe/ds/ObjectMap.hx

@@ -106,6 +106,10 @@ class ObjectMap<K:{}, V> implements haxe.Constraints.IMap<K, V> {
 		h = null;
 		h = null;
 		#end
 		#end
 	}
 	}
+	
+	public function size():Int {
+		return untyped __global__.__root_hash_size(h);
+	}
 
 
 	#if (scriptable)
 	#if (scriptable)
 	private function setString(key:Dynamic, val:String):Void {
 	private function setString(key:Dynamic, val:String):Void {

+ 4 - 0
std/cpp/_std/haxe/ds/StringMap.hx

@@ -107,6 +107,10 @@ package haxe.ds;
 		h = null;
 		h = null;
 		#end
 		#end
 	}
 	}
+	
+	public function size():Int {
+		return untyped __global__.__root_hash_size(h);
+	}
 
 
 	#if (scriptable)
 	#if (scriptable)
 	private function setString(key:String, val:String):Void {
 	private function setString(key:String, val:String):Void {

+ 4 - 0
std/cpp/_std/haxe/ds/WeakMap.hx

@@ -99,4 +99,8 @@ class WeakMap<K:{}, V> implements haxe.Constraints.IMap<K, V> {
 		h = null;
 		h = null;
 		#end
 		#end
 	}
 	}
+	
+	public function size():Int {
+		return untyped __global__.__root_hash_size(h);
+	}
 }
 }

+ 1 - 0
std/eval/_std/EReg.hx

@@ -30,6 +30,7 @@ extern class EReg {
 	function matchedRight():String;
 	function matchedRight():String;
 	function matchedPos():{pos:Int, len:Int};
 	function matchedPos():{pos:Int, len:Int};
 	function matchSub(s:String, pos:Int, len:Int = -1):Bool;
 	function matchSub(s:String, pos:Int, len:Int = -1):Bool;
+	function matchedNum():Int;
 	function split(s:String):Array<String>;
 	function split(s:String):Array<String>;
 	function replace(s:String, by:String):String;
 	function replace(s:String, by:String):String;
 	function map(s:String, f:EReg->String):String;
 	function map(s:String, f:EReg->String):String;

+ 5 - 0
std/flash/_std/EReg.hx

@@ -59,6 +59,11 @@
 		return {pos: result.index, len: (result[0] : String).length};
 		return {pos: result.index, len: (result[0] : String).length};
 	}
 	}
 
 
+	public function matchedNum():Int {
+		if (result == null) return 0;
+		return result.length;
+	}
+
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 		return if (r.global) {
 		return if (r.global) {
 			r.lastIndex = pos;
 			r.lastIndex = pos;

+ 6 - 0
std/flash/_std/haxe/ds/IntMap.hx

@@ -85,6 +85,12 @@ package haxe.ds;
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h = new flash.utils.Dictionary();
 		h = new flash.utils.Dictionary();
 	}
 	}
+	
+	public function size():Int {
+		var s = 0;
+		for(_ in keys()) s++;
+		return s;
+	}
 }
 }
 
 
 // this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation
 // this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation

+ 6 - 0
std/flash/_std/haxe/ds/ObjectMap.hx

@@ -80,6 +80,12 @@ class ObjectMap<K:{}, V> extends flash.utils.Dictionary implements haxe.Constrai
 		for (i in keys())
 		for (i in keys())
 			untyped __delete__(this, i);
 			untyped __delete__(this, i);
 	}
 	}
+	
+	public function size():Int {
+		var s = 0;
+		for(_ in keys()) s++;
+		return s;
+	}
 }
 }
 
 
 private class NativePropertyIterator {
 private class NativePropertyIterator {

+ 6 - 0
std/flash/_std/haxe/ds/StringMap.hx

@@ -124,6 +124,12 @@ package haxe.ds;
 		h = {};
 		h = {};
 		rh = null;
 		rh = null;
 	}
 	}
+	
+	public function size():Int {
+		var s = 0;
+		for(_ in keys()) s++;
+		return s;
+	}
 }
 }
 
 
 // this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation
 // this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation

+ 6 - 0
std/flash/_std/haxe/ds/UnsafeStringMap.hx

@@ -90,6 +90,12 @@ class UnsafeStringMap<T> implements haxe.Constraints.IMap<String, T> {
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h = new flash.utils.Dictionary();
 		h = new flash.utils.Dictionary();
 	}
 	}
+	
+	public function size():Int {
+		var s = 0;
+		for(_ in keys()) s++;
+		return s;
+	}
 }
 }
 
 
 // this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation
 // this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation

+ 6 - 0
std/flash/_std/haxe/ds/WeakMap.hx

@@ -80,6 +80,12 @@ class WeakMap<K:{}, V> extends flash.utils.Dictionary implements haxe.Constraint
 		for (i in keys())
 		for (i in keys())
 			untyped __delete__(this, i);
 			untyped __delete__(this, i);
 	}
 	}
+	
+	public function size():Int {
+		var s = 0;
+		for(_ in keys()) s++;
+		return s;
+	}
 }
 }
 
 
 private class NativePropertyIterator {
 private class NativePropertyIterator {

+ 1 - 0
std/haxe/Constraints.hx

@@ -65,6 +65,7 @@ abstract NotVoid(Dynamic) { }
 abstract Constructible<T>(Dynamic) {}
 abstract Constructible<T>(Dynamic) {}
 
 
 interface IMap<K, V> {
 interface IMap<K, V> {
+	function size():Int;
 	function get(k:K):Null<V>;
 	function get(k:K):Null<V>;
 	function set(k:K, v:V):Void;
 	function set(k:K, v:V):Void;
 	function exists(k:K):Bool;
 	function exists(k:K):Bool;

+ 12 - 0
std/haxe/ds/BalancedTree.hx

@@ -185,6 +185,14 @@ class BalancedTree<K, V> implements haxe.Constraints.IMap<K, V> {
 		}
 		}
 	}
 	}
 
 
+	static function sizeLoop<K,V>(node:TreeNode<K, V>):Int {
+		if (node != null) {
+			return sizeLoop(node.left) + 1 + sizeLoop(node.right);
+		} else {
+			return 0;
+		}
+	}
+
 	function merge(t1, t2) {
 	function merge(t1, t2) {
 		if (t1 == null)
 		if (t1 == null)
 			return t2;
 			return t2;
@@ -236,6 +244,10 @@ class BalancedTree<K, V> implements haxe.Constraints.IMap<K, V> {
 	public function clear():Void {
 	public function clear():Void {
 		root = null;
 		root = null;
 	}
 	}
+
+	public function size():Int {
+		return sizeLoop(root);
+	}
 }
 }
 
 
 /**
 /**

+ 7 - 0
std/haxe/ds/HashMap.hx

@@ -107,6 +107,13 @@ abstract HashMap<K:{function hashCode():Int;}, V>(HashMapData<K, V>) {
 		this.keys.clear();
 		this.keys.clear();
 		this.values.clear();
 		this.values.clear();
 	}
 	}
+
+	/**
+		See `Map.size`
+	**/
+	public inline function size():Int {
+		return this.keys.size();
+	}
 }
 }
 
 
 private class HashMapData<K:{function hashCode():Int;}, V> {
 private class HashMapData<K:{function hashCode():Int;}, V> {

+ 2 - 0
std/haxe/ds/IntMap.hx

@@ -96,4 +96,6 @@ extern class IntMap<T> implements haxe.Constraints.IMap<Int, T> {
 		See `Map.clear`
 		See `Map.clear`
 	**/
 	**/
 	function clear():Void;
 	function clear():Void;
+	
+	function size():Int;
 }
 }

+ 7 - 0
std/haxe/ds/Map.hx

@@ -160,6 +160,13 @@ abstract Map<K, V>(IMap<K, V>) {
 		this.clear();
 		this.clear();
 	}
 	}
 
 
+	/**
+		Returns size of `this` Map.
+	**/
+	public inline function size():Int {
+		return this.size();
+	}
+
 	@:arrayAccess @:noCompletion public inline function arrayWrite(k:K, v:V):V {
 	@:arrayAccess @:noCompletion public inline function arrayWrite(k:K, v:V):V {
 		this.set(k, v);
 		this.set(k, v);
 		return v;
 		return v;

+ 2 - 0
std/haxe/ds/ObjectMap.hx

@@ -99,4 +99,6 @@ extern class ObjectMap<K:{}, V> implements haxe.Constraints.IMap<K, V> {
 		See `Map.clear`
 		See `Map.clear`
 	**/
 	**/
 	function clear():Void;
 	function clear():Void;
+	
+	public function size():Int;
 }
 }

+ 2 - 0
std/haxe/ds/StringMap.hx

@@ -96,4 +96,6 @@ extern class StringMap<T> implements haxe.Constraints.IMap<String, T> {
 		See `Map.clear`
 		See `Map.clear`
 	**/
 	**/
 	function clear():Void;
 	function clear():Void;
+	
+	public function size():Int;
 }
 }

+ 7 - 0
std/haxe/ds/WeakMap.hx

@@ -104,4 +104,11 @@ class WeakMap<K:{}, V> implements haxe.Constraints.IMap<K, V> {
 		See `Map.clear`
 		See `Map.clear`
 	**/
 	**/
 	public function clear():Void {}
 	public function clear():Void {}
+
+	/**
+		See `Map.size`
+	**/
+	public function size():Int {
+		return 0;
+	}
 }
 }

+ 23 - 0
std/hl/_std/EReg.hx

@@ -69,6 +69,23 @@ private typedef ERegValue = hl.Abstract<"ereg">;
 		return {pos: p, len: len};
 		return {pos: p, len: len};
 	}
 	}
 
 
+	public function matchedNum():Int {
+		if(last == null) return 0;
+		#if (hl_ver >= version("1.12.0"))
+		return regexp_matched_num(r);
+		#else
+		var i = 0;
+		var num = 0;
+		try {
+			while (true) {
+				if (regexp_matched_pos(r, i, null) >= 0) num++;
+				i++;
+			}
+		} catch (_:String) {}
+		return num;
+		#end
+	}
+
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 		var p = regexp_match(r, s.bytes, pos, len < 0 ? s.length - pos : len);
 		var p = regexp_match(r, s.bytes, pos, len < 0 ? s.length - pos : len);
 		if (p)
 		if (p)
@@ -199,4 +216,10 @@ private typedef ERegValue = hl.Abstract<"ereg">;
 	@:hlNative("std", "regexp_matched_pos") static function regexp_matched_pos(r:ERegValue, n:Int, size:hl.Ref<Int>):Int {
 	@:hlNative("std", "regexp_matched_pos") static function regexp_matched_pos(r:ERegValue, n:Int, size:hl.Ref<Int>):Int {
 		return 0;
 		return 0;
 	}
 	}
+
+	#if (hl_ver >= version("1.12.0"))
+	@:hlNative("std", "regexp_matched_num") static function regexp_matched_num(r:ERegValue):Int {
+		return 0;
+	}
+	#end
 }
 }

+ 8 - 0
std/hl/_std/haxe/ds/IntMap.hx

@@ -88,4 +88,12 @@ class IntMap<T> implements haxe.Constraints.IMap<Int, T> {
 		h = new hl.types.IntMap();
 		h = new hl.types.IntMap();
 		#end
 		#end
 	}
 	}
+	
+	public function size():Int {
+		#if (hl_ver >= version("1.12.0"))
+		return h.size();
+		#else
+		return h.keysArray().length;
+		#end
+	}
 }
 }

+ 8 - 0
std/hl/_std/haxe/ds/ObjectMap.hx

@@ -88,4 +88,12 @@ class ObjectMap<K:{}, T> implements haxe.Constraints.IMap<K, T> {
 		h = new hl.types.ObjectMap();
 		h = new hl.types.ObjectMap();
 		#end
 		#end
 	}
 	}
+	
+	public function size():Int {
+		#if (hl_ver >= version("1.12.0"))
+		return h.size();
+		#else
+		return h.keysArray().length;
+		#end
+	}
 }
 }

+ 8 - 0
std/hl/_std/haxe/ds/StringMap.hx

@@ -116,4 +116,12 @@ class StringMap<T> implements haxe.Constraints.IMap<String, T> {
 		h = new hl.types.BytesMap();
 		h = new hl.types.BytesMap();
 		#end
 		#end
 	}
 	}
+	
+	public function size():Int {
+		#if (hl_ver >= version("1.12.0"))
+		return h.size();
+		#else
+		return h.keysArray().length;
+		#end
+	}
 }
 }

+ 7 - 0
std/hl/types/BytesMap.hx

@@ -65,6 +65,13 @@ abstract BytesMap(BytesMapData) {
 	@:hlNative("std", "hbclear")
 	@:hlNative("std", "hbclear")
 	public function clear():Void {}
 	public function clear():Void {}
 	#end
 	#end
+	
+	#if (hl_ver >= version("1.12.0"))
+	@:hlNative("std", "hbsize")
+	public function size():Int {
+		return 0;
+	}
+	#end
 
 
 	extern public inline function iterator() {
 	extern public inline function iterator() {
 		return new NativeArray.NativeArrayIterator<Dynamic>(valuesArray());
 		return new NativeArray.NativeArrayIterator<Dynamic>(valuesArray());

+ 7 - 0
std/hl/types/IntMap.hx

@@ -65,6 +65,13 @@ abstract IntMap(IntMapData) {
 	@:hlNative("std", "hiclear")
 	@:hlNative("std", "hiclear")
 	public function clear():Void {}
 	public function clear():Void {}
 	#end
 	#end
+	
+	#if (hl_ver >= version("1.12.0"))
+	@:hlNative("std", "hisize")
+	public function size():Int {
+		return 0;
+	}
+	#end
 
 
 	extern public inline function iterator() {
 	extern public inline function iterator() {
 		return new NativeArray.NativeArrayIterator<Dynamic>(valuesArray());
 		return new NativeArray.NativeArrayIterator<Dynamic>(valuesArray());

+ 7 - 0
std/hl/types/ObjectMap.hx

@@ -65,6 +65,13 @@ abstract ObjectMap(ObjectMapData) {
 	@:hlNative("std", "hoclear")
 	@:hlNative("std", "hoclear")
 	public function clear():Void {}
 	public function clear():Void {}
 	#end
 	#end
+	
+	#if (hl_ver >= version("1.12.0"))
+	@:hlNative("std", "hosize")
+	public function size():Int {
+		return 0;
+	}
+	#end
 
 
 	extern public inline function iterator() {
 	extern public inline function iterator() {
 		return new NativeArray.NativeArrayIterator<Dynamic>(valuesArray());
 		return new NativeArray.NativeArrayIterator<Dynamic>(valuesArray());

+ 6 - 0
std/js/_std/EReg.hx

@@ -57,6 +57,12 @@
 		return {pos: r.m.index, len: r.m[0].length};
 		return {pos: r.m.index, len: r.m[0].length};
 	}
 	}
 
 
+	public function matchedNum():Int {
+		if (r.m == null)
+			return 0;
+		return r.m.length;
+	}
+
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 		return if (r.global) {
 		return if (r.global) {
 			r.lastIndex = pos;
 			r.lastIndex = pos;

+ 10 - 0
std/js/_std/haxe/ds/IntMap.hx

@@ -82,6 +82,10 @@ package haxe.ds;
 	public inline function clear():Void {
 	public inline function clear():Void {
 		m.clear();
 		m.clear();
 	}
 	}
+
+	public inline function size():Int {
+		return m.size;
+	}
 }
 }
 #else
 #else
 @:coreApi class IntMap<T> implements haxe.Constraints.IMap<Int, T> {
 @:coreApi class IntMap<T> implements haxe.Constraints.IMap<Int, T> {
@@ -159,5 +163,11 @@ package haxe.ds;
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h = {};
 		h = {};
 	}
 	}
+
+	public inline function size():Int {
+		var s:Any = 0;
+		js.Syntax.code("for( var key in {0} ) if({0}.hasOwnProperty(key)) {1}++", h, s);
+		return s;
+	}
 }
 }
 #end
 #end

+ 10 - 0
std/js/_std/haxe/ds/ObjectMap.hx

@@ -86,6 +86,10 @@ class ObjectMap<K:{}, V> implements haxe.Constraints.IMap<K, V> {
 	public inline function clear():Void {
 	public inline function clear():Void {
 		m.clear();
 		m.clear();
 	}
 	}
+
+	public inline function size():Int {
+		return m.size;
+	}
 }
 }
 #else
 #else
 @:coreApi
 @:coreApi
@@ -184,5 +188,11 @@ class ObjectMap<K:{}, V> implements haxe.Constraints.IMap<K, V> {
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h = {__keys__: {}};
 		h = {__keys__: {}};
 	}
 	}
+
+	public inline function size():Int {
+		var s:Any = 0;
+		js.Syntax.code("for( var key in {0} ) if({0}.hasOwnProperty(key)) {1}++", h.__keys__, s);
+		return s;
+	}
 }
 }
 #end
 #end

+ 16 - 0
std/js/_std/haxe/ds/StringMap.hx

@@ -86,6 +86,10 @@ import haxe.DynamicAccess;
 	public inline function clear():Void {
 	public inline function clear():Void {
 		m.clear();
 		m.clear();
 	}
 	}
+
+	public inline function size():Int {
+		return m.size;
+	}
 }
 }
 #elseif (js_es == 5)
 #elseif (js_es == 5)
 @:coreApi class StringMap<T> implements IMap<String, T> {
 @:coreApi class StringMap<T> implements IMap<String, T> {
@@ -139,6 +143,12 @@ import haxe.DynamicAccess;
 		return stringify(h);
 		return stringify(h);
 	}
 	}
 
 
+	public inline function size():Int {
+		var s:Any = 0;
+		js.Syntax.code("for( var key in {0} ) {1}++", h, s);
+		return s;
+	}
+
 	// impl
 	// impl
 	static function createCopy<T>(h:Dynamic):StringMap<T> {
 	static function createCopy<T>(h:Dynamic):StringMap<T> {
 		var copy = new StringMap();
 		var copy = new StringMap();
@@ -344,6 +354,12 @@ private class StringMapIterator<T> {
 		rh = null;
 		rh = null;
 	}
 	}
 
 
+	public inline function size():Int {
+		var s:Any = 0;
+		js.Syntax.code("for( var key in {0} ) if({0}.hasOwnProperty(key)) {1}++", h, s);
+		return s;
+	}
+
 	static function __init__():Void {
 	static function __init__():Void {
 		js.Syntax.code("var __map_reserved = {};");
 		js.Syntax.code("var __map_reserved = {};");
 	}
 	}

+ 12 - 0
std/jvm/_std/EReg.hx

@@ -71,6 +71,18 @@ using StringTools;
 		return {pos: start, len: matcher.end() - start};
 		return {pos: start, len: matcher.end() - start};
 	}
 	}
 
 
+	public function matchedNum():Int {
+		try {
+			if (matcher.group() == null) {
+				return 0;
+			} else {
+				return matcher.groupCount() + 1;
+			}
+		} catch (e) {
+			return 0;
+		}
+	}
+
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 		matcher = matcher.reset(len < 0 ? s : s.substr(0, pos + len));
 		matcher = matcher.reset(len < 0 ? s : s.substr(0, pos + len));
 		cur = s;
 		cur = s;

+ 4 - 0
std/jvm/_std/haxe/ds/IntMap.hx

@@ -88,4 +88,8 @@ class IntMap<T> implements haxe.Constraints.IMap<Int, T> {
 	public function clear():Void {
 	public function clear():Void {
 		hashMap.clear();
 		hashMap.clear();
 	}
 	}
+
+	public function size():Int {
+		return hashMap.size();
+	}
 }
 }

+ 14 - 10
std/jvm/_std/haxe/ds/ObjectMap.hx

@@ -43,7 +43,7 @@ import java.NativeArray;
 	private var vals:NativeArray<V>;
 	private var vals:NativeArray<V>;
 
 
 	private var nBuckets:Int;
 	private var nBuckets:Int;
-	private var size:Int;
+	private var _size:Int;
 	private var nOccupied:Int;
 	private var nOccupied:Int;
 	private var upperBound:Int;
 	private var upperBound:Int;
 
 
@@ -68,7 +68,7 @@ import java.NativeArray;
 	public function set(key:K, value:V):Void {
 	public function set(key:K, value:V):Void {
 		var x:Int, k:Int;
 		var x:Int, k:Int;
 		if (nOccupied >= upperBound) {
 		if (nOccupied >= upperBound) {
-			if (nBuckets > (size << 1))
+			if (nBuckets > (_size << 1))
 				resize(nBuckets - 1); // clear "deleted" elements
 				resize(nBuckets - 1); // clear "deleted" elements
 			else
 			else
 				resize(nBuckets + 2);
 				resize(nBuckets + 2);
@@ -117,13 +117,13 @@ import java.NativeArray;
 			keys[x] = key;
 			keys[x] = key;
 			vals[x] = value;
 			vals[x] = value;
 			hashes[x] = k;
 			hashes[x] = k;
-			size++;
+			_size++;
 			nOccupied++;
 			nOccupied++;
 		} else if (isDel(flag)) {
 		} else if (isDel(flag)) {
 			keys[x] = key;
 			keys[x] = key;
 			vals[x] = value;
 			vals[x] = value;
 			hashes[x] = k;
 			hashes[x] = k;
-			size++;
+			_size++;
 		} else {
 		} else {
 			assert(keys[x] == key);
 			assert(keys[x] == key);
 			vals[x] = value;
 			vals[x] = value;
@@ -171,10 +171,10 @@ import java.NativeArray;
 			newNBuckets = roundUp(newNBuckets);
 			newNBuckets = roundUp(newNBuckets);
 			if (newNBuckets < 4)
 			if (newNBuckets < 4)
 				newNBuckets = 4;
 				newNBuckets = 4;
-			if (size >= (newNBuckets * HASH_UPPER + 0.5))
-				/* requested size is too small */ {
+			if (_size >= (newNBuckets * HASH_UPPER + 0.5))
+				/* requested _size is too small */ {
 				j = 0;
 				j = 0;
-			} else { /* hash table size to be changed (shrink or expand); rehash */
+			} else { /* hash table _size to be changed (shrink or expand); rehash */
 				var nfSize = newNBuckets;
 				var nfSize = newNBuckets;
 				newHash = new NativeArray(nfSize);
 				newHash = new NativeArray(nfSize);
 				if (nBuckets < newNBuckets) // expand
 				if (nBuckets < newNBuckets) // expand
@@ -263,7 +263,7 @@ import java.NativeArray;
 
 
 			this.hashes = newHash;
 			this.hashes = newHash;
 			this.nBuckets = newNBuckets;
 			this.nBuckets = newNBuckets;
-			this.nOccupied = size;
+			this.nOccupied = _size;
 			this.upperBound = Std.int(newNBuckets * HASH_UPPER + .5);
 			this.upperBound = Std.int(newNBuckets * HASH_UPPER + .5);
 		}
 		}
 	}
 	}
@@ -351,7 +351,7 @@ import java.NativeArray;
 			hashes[idx] = FLAG_DEL;
 			hashes[idx] = FLAG_DEL;
 			_keys[idx] = null;
 			_keys[idx] = null;
 			vals[idx] = null;
 			vals[idx] = null;
-			--size;
+			--_size;
 
 
 			return true;
 			return true;
 		}
 		}
@@ -396,7 +396,7 @@ import java.NativeArray;
 		_keys = null;
 		_keys = null;
 		vals = null;
 		vals = null;
 		nBuckets = 0;
 		nBuckets = 0;
-		size = 0;
+		_size = 0;
 		nOccupied = 0;
 		nOccupied = 0;
 		upperBound = 0;
 		upperBound = 0;
 		#if !no_map_cache
 		#if !no_map_cache
@@ -410,6 +410,10 @@ import java.NativeArray;
 		maxProbe = 0;
 		maxProbe = 0;
 		#end
 		#end
 	}
 	}
+	
+	public inline function size():Int {
+		return _size;
+	}
 
 
 	extern private static inline function roundUp(x:Int):Int {
 	extern private static inline function roundUp(x:Int):Int {
 		--x;
 		--x;

+ 4 - 0
std/jvm/_std/haxe/ds/StringMap.hx

@@ -88,4 +88,8 @@ class StringMap<T> implements haxe.Constraints.IMap<String, T> {
 	public function clear():Void {
 	public function clear():Void {
 		hashMap.clear();
 		hashMap.clear();
 	}
 	}
+	
+	public inline function size():Int {
+		return hashMap.size();
+	}
 }
 }

+ 15 - 11
std/jvm/_std/haxe/ds/WeakMap.hx

@@ -47,7 +47,7 @@ import java.lang.ref.ReferenceQueue;
 	private var queue:ReferenceQueue<K>;
 	private var queue:ReferenceQueue<K>;
 
 
 	private var nBuckets:Int;
 	private var nBuckets:Int;
-	private var size:Int;
+	private var _size:Int;
 	private var nOccupied:Int;
 	private var nOccupied:Int;
 	private var upperBound:Int;
 	private var upperBound:Int;
 
 
@@ -96,7 +96,7 @@ import java.lang.ref.ReferenceQueue;
 					#end
 					#end
 					entries[i] = null;
 					entries[i] = null;
 					hashes[i] = FLAG_DEL;
 					hashes[i] = FLAG_DEL;
-					--size;
+					--_size;
 				}
 				}
 			}
 			}
 		}
 		}
@@ -106,7 +106,7 @@ import java.lang.ref.ReferenceQueue;
 		cleanupRefs();
 		cleanupRefs();
 		var x:Int, k:Int;
 		var x:Int, k:Int;
 		if (nOccupied >= upperBound) {
 		if (nOccupied >= upperBound) {
-			if (nBuckets > (size << 1))
+			if (nBuckets > (_size << 1))
 				resize(nBuckets - 1); // clear "deleted" elements
 				resize(nBuckets - 1); // clear "deleted" elements
 			else
 			else
 				resize(nBuckets + 2);
 				resize(nBuckets + 2);
@@ -154,12 +154,12 @@ import java.lang.ref.ReferenceQueue;
 		if (isEmpty(flag)) {
 		if (isEmpty(flag)) {
 			entries[x] = entry;
 			entries[x] = entry;
 			hashes[x] = k;
 			hashes[x] = k;
-			size++;
+			_size++;
 			nOccupied++;
 			nOccupied++;
 		} else if (isDel(flag)) {
 		} else if (isDel(flag)) {
 			entries[x] = entry;
 			entries[x] = entry;
 			hashes[x] = k;
 			hashes[x] = k;
-			size++;
+			_size++;
 		} else {
 		} else {
 			assert(entries[x].keyEquals(key));
 			assert(entries[x].keyEquals(key));
 			entries[x] = entry;
 			entries[x] = entry;
@@ -207,10 +207,10 @@ import java.lang.ref.ReferenceQueue;
 			newNBuckets = roundUp(newNBuckets);
 			newNBuckets = roundUp(newNBuckets);
 			if (newNBuckets < 4)
 			if (newNBuckets < 4)
 				newNBuckets = 4;
 				newNBuckets = 4;
-			if (size >= (newNBuckets * HASH_UPPER + 0.5))
-				/* requested size is too small */ {
+			if (_size >= (newNBuckets * HASH_UPPER + 0.5))
+				/* requested _size is too small */ {
 				j = 0;
 				j = 0;
-			} else { /* hash table size to be changed (shrink or expand); rehash */
+			} else { /* hash table _size to be changed (shrink or expand); rehash */
 				var nfSize = newNBuckets;
 				var nfSize = newNBuckets;
 				newHash = new NativeArray(nfSize);
 				newHash = new NativeArray(nfSize);
 				if (nBuckets < newNBuckets) // expand
 				if (nBuckets < newNBuckets) // expand
@@ -279,7 +279,7 @@ import java.lang.ref.ReferenceQueue;
 
 
 			this.hashes = newHash;
 			this.hashes = newHash;
 			this.nBuckets = newNBuckets;
 			this.nBuckets = newNBuckets;
-			this.nOccupied = size;
+			this.nOccupied = _size;
 			this.upperBound = Std.int(newNBuckets * HASH_UPPER + .5);
 			this.upperBound = Std.int(newNBuckets * HASH_UPPER + .5);
 		}
 		}
 	}
 	}
@@ -375,7 +375,7 @@ import java.lang.ref.ReferenceQueue;
 
 
 			hashes[idx] = FLAG_DEL;
 			hashes[idx] = FLAG_DEL;
 			entries[idx] = null;
 			entries[idx] = null;
-			--size;
+			--_size;
 
 
 			return true;
 			return true;
 		}
 		}
@@ -422,7 +422,7 @@ import java.lang.ref.ReferenceQueue;
 		entries = null;
 		entries = null;
 		queue = new ReferenceQueue();
 		queue = new ReferenceQueue();
 		nBuckets = 0;
 		nBuckets = 0;
-		size = 0;
+		_size = 0;
 		nOccupied = 0;
 		nOccupied = 0;
 		upperBound = 0;
 		upperBound = 0;
 		#if !no_map_cache
 		#if !no_map_cache
@@ -436,6 +436,10 @@ import java.lang.ref.ReferenceQueue;
 		maxProbe = 0;
 		maxProbe = 0;
 		#end
 		#end
 	}
 	}
+	
+	public inline function size():Int {
+		return _size;
+	}
 
 
 	extern private static inline function roundUp(x:Int):Int {
 	extern private static inline function roundUp(x:Int):Int {
 		--x;
 		--x;

+ 8 - 0
std/lua/_std/EReg.hx

@@ -111,6 +111,14 @@ class EReg {
 		}
 		}
 	}
 	}
 
 
+	public function matchedNum():Int {
+		if (m == null) return 0;
+		else if (m[1] == null)
+			return 0;
+		else
+			return 1 + untyped __lua_length__(m[3]) / 2;
+	}
+
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 		var ss = s.substr(0, len < 0 ? s.length : pos + len);
 		var ss = s.substr(0, len < 0 ? s.length : pos + len);
 
 

+ 6 - 0
std/lua/_std/haxe/ds/IntMap.hx

@@ -112,4 +112,10 @@ class IntMap<T> implements haxe.Constraints.IMap<Int, T> {
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h = lua.Table.create();
 		h = lua.Table.create();
 	}
 	}
+	
+	public function size():Int {
+		var s = 0;
+		untyped __lua__("for _ in pairs({0}) do s = s + 1 end", h);
+		return s;
+	}
 }
 }

+ 6 - 0
std/lua/_std/haxe/ds/ObjectMap.hx

@@ -117,4 +117,10 @@ class ObjectMap<A, B> implements haxe.Constraints.IMap<A, B> {
 		h = lua.Table.create();
 		h = lua.Table.create();
 		k = lua.Table.create();
 		k = lua.Table.create();
 	}
 	}
+	
+	public function size():Int {
+		var s = 0;
+		untyped __lua__("for _ in pairs({0}) do s = s + 1 end", h);
+		return s;
+	}
 }
 }

+ 6 - 0
std/lua/_std/haxe/ds/StringMap.hx

@@ -116,4 +116,10 @@ class StringMap<T> implements haxe.Constraints.IMap<String, T> {
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h = lua.Table.create();
 		h = lua.Table.create();
 	}
 	}
+	
+	public function size():Int {
+		var s = 0;
+		untyped __lua__("for _ in pairs({0}) do s = s + 1 end", h);
+		return s;
+	}
 }
 }

+ 19 - 0
std/neko/_std/EReg.hx

@@ -70,6 +70,12 @@
 		return p;
 		return p;
 	}
 	}
 
 
+	public function matchedNum():Int {
+		var num = regexp_matched_num(r);
+		if(last == null || num == -1) return 0;
+		return num;
+	}
+
 	public function split(s:String):Array<String> {
 	public function split(s:String):Array<String> {
 		var pos = 0;
 		var pos = 0;
 		var len = s.length;
 		var len = s.length;
@@ -206,4 +212,17 @@
 	static var regexp_match = neko.Lib.load("regexp", "regexp_match", 4);
 	static var regexp_match = neko.Lib.load("regexp", "regexp_match", 4);
 	static var regexp_matched = neko.Lib.load("regexp", "regexp_matched", 2);
 	static var regexp_matched = neko.Lib.load("regexp", "regexp_matched", 2);
 	static var regexp_matched_pos:Dynamic->Int->{pos: Int, len: Int} = neko.Lib.load("regexp", "regexp_matched_pos", 2);
 	static var regexp_matched_pos:Dynamic->Int->{pos: Int, len: Int} = neko.Lib.load("regexp", "regexp_matched_pos", 2);
+	static var regexp_matched_num = try neko.Lib.load("regexp", "regexp_matched_num", 1) catch (_:Dynamic) fallback_matched_num;
+
+	private static function fallback_matched_num(r:Dynamic):Int {
+		var i = 0;
+		var num = 0;
+		try {
+			while (true) {
+				if (regexp_matched(r, i) != null) num++;
+				i++;
+			}
+		} catch (_:Dynamic) {}
+		return num;
+	}
 }
 }

+ 4 - 0
std/neko/_std/haxe/ds/IntMap.hx

@@ -90,4 +90,8 @@ package haxe.ds;
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h = untyped __dollar__hnew(0);
 		h = untyped __dollar__hnew(0);
 	}
 	}
+	
+	public inline function size():Int {
+		return untyped __dollar__hcount(h);
+	}
 }
 }

+ 4 - 0
std/neko/_std/haxe/ds/ObjectMap.hx

@@ -111,4 +111,8 @@ class ObjectMap<K:{}, V> implements haxe.Constraints.IMap<K, V> {
 		h = untyped __dollar__hnew(0);
 		h = untyped __dollar__hnew(0);
 		k = untyped __dollar__hnew(0);
 		k = untyped __dollar__hnew(0);
 	}
 	}
+	
+	public inline function size():Int {
+		return untyped __dollar__hcount(k);
+	}
 }
 }

+ 4 - 0
std/neko/_std/haxe/ds/StringMap.hx

@@ -90,4 +90,8 @@ package haxe.ds;
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h = untyped __dollar__hnew(0);
 		h = untyped __dollar__hnew(0);
 	}
 	}
+	
+	public inline function size():Int {
+		return untyped __dollar__hcount(h);
+	}
 }
 }

+ 5 - 0
std/php/_std/EReg.hx

@@ -109,6 +109,11 @@ import php.*;
 		};
 		};
 	}
 	}
 
 
+	public function matchedNum():Int {
+		if(matches == null) return 0;
+		return Global.count(matches);
+	}
+
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 		var subject = len < 0 ? s : s.substr(0, pos + len);
 		var subject = len < 0 ? s : s.substr(0, pos + len);
 		var p = Global.preg_match(reUnicode, subject, matches, Const.PREG_OFFSET_CAPTURE, pos);
 		var p = Global.preg_match(reUnicode, subject, matches, Const.PREG_OFFSET_CAPTURE, pos);

+ 4 - 0
std/php/_std/haxe/ds/IntMap.hx

@@ -85,4 +85,8 @@ import php.NativeIndexedArray;
 	public inline function clear():Void {
 	public inline function clear():Void {
 		data = new NativeIndexedArray();
 		data = new NativeIndexedArray();
 	}
 	}
+	
+	public inline function size():Int {
+		return Global.count(data);
+	}
 }
 }

+ 4 - 0
std/php/_std/haxe/ds/ObjectMap.hx

@@ -94,4 +94,8 @@ class ObjectMap<K:{}, V> implements haxe.Constraints.IMap<K, V> {
 		_keys = new NativeAssocArray();
 		_keys = new NativeAssocArray();
 		_values = new NativeAssocArray();
 		_values = new NativeAssocArray();
 	}
 	}
+	
+	public inline function size():Int {
+		return Global.count(_keys);
+	}
 }
 }

+ 4 - 0
std/php/_std/haxe/ds/StringMap.hx

@@ -86,4 +86,8 @@ import haxe.Constraints;
 	public inline function clear():Void {
 	public inline function clear():Void {
 		data = new NativeAssocArray();
 		data = new NativeAssocArray();
 	}
 	}
+	
+	public inline function size():Int {
+		return Global.count(data);
+	}
 }
 }

+ 5 - 0
std/python/_std/EReg.hx

@@ -72,6 +72,11 @@ class EReg {
 		return {pos: matchObj.start(), len: matchObj.end() - matchObj.start()};
 		return {pos: matchObj.start(), len: matchObj.end() - matchObj.start()};
 	}
 	}
 
 
+	public function matchedNum():Int {
+		if (matchObj == null) return 0;
+		return (matchObj.lastindex ?? 0) + 1;
+	}
+
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 	public function matchSub(s:String, pos:Int, len:Int = -1):Bool {
 		if (len != -1) {
 		if (len != -1) {
 			matchObj = pattern.search(s, pos, pos + len);
 			matchObj = pattern.search(s, pos, pos + len);

+ 4 - 0
std/python/_std/haxe/ds/IntMap.hx

@@ -88,4 +88,8 @@ class IntMap<T> implements haxe.Constraints.IMap<Int, T> {
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h.clear();
 		h.clear();
 	}
 	}
+	
+	public inline function size():Int {
+		return h.length;
+	}
 }
 }

+ 4 - 0
std/python/_std/haxe/ds/ObjectMap.hx

@@ -87,4 +87,8 @@ class ObjectMap<K:{}, V> implements haxe.Constraints.IMap<K, V> {
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h.clear();
 		h.clear();
 	}
 	}
+	
+	public inline function size():Int {
+		return h.length;
+	}
 }
 }

+ 4 - 0
std/python/_std/haxe/ds/StringMap.hx

@@ -89,4 +89,8 @@ class StringMap<T> implements haxe.Constraints.IMap<String, T> {
 	public inline function clear():Void {
 	public inline function clear():Void {
 		h.clear();
 		h.clear();
 	}
 	}
+	
+	public inline function size():Int {
+		return h.length;
+	}
 }
 }

+ 0 - 1
tests/misc/Issue11280/compile-fail.hxml

@@ -1,3 +1,2 @@
 -main Main
 -main Main
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/Issue11280/compile2-fail.hxml

@@ -1,3 +1,2 @@
 -main Main2
 -main Main2
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/java/projects/Issue11095/pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile-fail.hxml
 compile-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue10623/pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile-fail.hxml
 compile-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue10844/user-defined-meta-pretty-fail.hxml

@@ -1,4 +1,3 @@
 user-defined-meta-fail.hxml
 user-defined-meta-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color
 
 

+ 0 - 1
tests/misc/projects/Issue10863/compile.hxml

@@ -1,5 +1,4 @@
 -main Main
 -main Main
 -js js.js
 -js js.js
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color
 --no-output
 --no-output

+ 0 - 1
tests/misc/projects/Issue11055/compile-pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile-fail.hxml
 compile-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11121/compile-fail.hxml

@@ -1,3 +1,2 @@
 --main Main
 --main Main
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11162/compile-fail.hxml

@@ -1,3 +1,2 @@
 -main Main
 -main Main
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11162/compile2-fail.hxml

@@ -1,3 +1,2 @@
 -main Main2
 -main Main2
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11164/compile.hxml

@@ -1,3 +1,2 @@
 -main Main
 -main Main
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11164/compile2-fail.hxml

@@ -1,3 +1,2 @@
 -main Main2
 -main Main2
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11164/compile3-fail.hxml

@@ -1,3 +1,2 @@
 -main Main3
 -main Main3
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11164/compile4-fail.hxml

@@ -1,3 +1,2 @@
 -main Main4
 -main Main4
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11164/compile5-fail.hxml

@@ -1,3 +1,2 @@
 -main Main5
 -main Main5
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11164/compile6-fail.hxml

@@ -1,3 +1,2 @@
 -main Main6
 -main Main6
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11164/compile7-fail.hxml

@@ -1,3 +1,2 @@
 -main Main7
 -main Main7
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11417/compile-fail.hxml

@@ -1,3 +1,2 @@
 Main
 Main
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11417/compile1-fail.hxml

@@ -1,3 +1,2 @@
 Main1
 Main1
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11439/compile3-fail.hxml

@@ -1,4 +1,3 @@
 -main Main
 -main Main
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color
 -D message.absolute-positions
 -D message.absolute-positions

+ 0 - 1
tests/misc/projects/Issue11679/compile-fail.hxml

@@ -1,3 +1,2 @@
 -main Main
 -main Main
--D message.no-color
 -D message.reporting=pretty
 -D message.reporting=pretty

+ 0 - 1
tests/misc/projects/Issue11700/compile-fail.hxml

@@ -2,4 +2,3 @@
 -cp src
 -cp src
 -main Main
 -main Main
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11753/compile-fail.hxml

@@ -1,4 +1,3 @@
 -main Main
 -main Main
 --hl bin/main.hl
 --hl bin/main.hl
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue11753/compile.hxml

@@ -1,4 +1,3 @@
 -main Main2
 -main Main2
 --hl bin/main.hl
 --hl bin/main.hl
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue12167/compile-fail.hxml

@@ -1,3 +1,2 @@
 -main Main
 -main Main
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue3188/compile.hxml

@@ -1,3 +1,2 @@
 --macro Main.init()
 --macro Main.init()
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue5644/pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile-fail.hxml
 compile-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue5949/pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile-fail.hxml
 compile-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue6065/pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile-fail.hxml
 compile-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue6584/pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile5-fail.hxml
 compile5-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue6790/pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile-fail.hxml
 compile-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue6796/pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile-fail.hxml
 compile-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

+ 0 - 1
tests/misc/projects/Issue6810/pretty-fail.hxml

@@ -1,3 +1,2 @@
 compile-fail.hxml
 compile-fail.hxml
 -D message.reporting=pretty
 -D message.reporting=pretty
--D message.no-color

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно