Browse Source

`extern` field syntax (#6984)

* support `extern` on fields, deprecate `@:extern`

* fix lua
Simon Krajewski 7 years ago
parent
commit
00f409858f
100 changed files with 638 additions and 615 deletions
  1. 5 5
      src/codegen/dotnet.ml
  2. 1 1
      src/codegen/gencommon/dynamicFieldAccess.ml
  3. 1 1
      src/codegen/gencommon/gencommon.ml
  4. 1 1
      src/context/typecore.ml
  5. 2 0
      src/core/ast.ml
  6. 3 1
      src/core/type.ml
  7. 2 2
      src/generators/genhl.ml
  8. 1 1
      src/macro/eval/evalPrototype.ml
  9. 4 0
      src/macro/macroApi.ml
  10. 1 1
      src/optimization/analyzerTexpr.ml
  11. 1 1
      src/optimization/inlineConstructors.ml
  12. 1 1
      src/optimization/optimizer.ml
  13. 1 0
      src/syntax/grammar.mly
  14. 1 0
      src/syntax/reification.ml
  15. 3 3
      src/typing/calls.ml
  16. 18 11
      src/typing/typeload.ml
  17. 3 3
      std/Any.hx
  18. 1 1
      std/DateTools.hx
  19. 5 5
      std/cpp/ConstCharStar.hx
  20. 6 6
      std/cpp/Function.hx
  21. 2 2
      std/cpp/Lib.hx
  22. 30 30
      std/cpp/NativeFile.hx
  23. 12 12
      std/cpp/NativeGc.hx
  24. 9 9
      std/cpp/NativeProcess.hx
  25. 4 4
      std/cpp/NativeRandom.hx
  26. 37 37
      std/cpp/NativeSocket.hx
  27. 36 36
      std/cpp/NativeSsl.hx
  28. 50 50
      std/cpp/NativeSys.hx
  29. 3 3
      std/cpp/NativeXml.hx
  30. 1 1
      std/cpp/StdString.hx
  31. 24 24
      std/cpp/VirtualArray.hx
  32. 8 8
      std/cpp/_std/EReg.hx
  33. 2 2
      std/cpp/_std/Type.hx
  34. 2 2
      std/cpp/_std/haxe/Log.hx
  35. 10 10
      std/cpp/_std/haxe/zip/Compress.hx
  36. 8 8
      std/cpp/_std/haxe/zip/Uncompress.hx
  37. 27 27
      std/cpp/_std/sys/db/Mysql.hx
  38. 20 20
      std/cpp/_std/sys/db/Sqlite.hx
  39. 1 1
      std/cpp/cppia/Host.hx
  40. 8 8
      std/cpp/objc/NSData.hx
  41. 5 5
      std/cpp/objc/NSDictionary.hx
  42. 4 4
      std/cpp/objc/NSObject.hx
  43. 6 6
      std/cpp/objc/NSString.hx
  44. 1 1
      std/cpp/vm/Gc.hx
  45. 10 10
      std/cs/Flags.hx
  46. 11 11
      std/cs/Lib.hx
  47. 2 2
      std/cs/NativeArray.hx
  48. 1 1
      std/cs/Pointer.hx
  49. 1 1
      std/cs/_std/Std.hx
  50. 11 11
      std/cs/_std/haxe/ds/ObjectMap.hx
  51. 10 10
      std/cs/_std/haxe/ds/StringMap.hx
  52. 11 11
      std/cs/_std/haxe/ds/WeakMap.hx2
  53. 1 1
      std/cs/internal/FieldLookup.hx
  54. 20 20
      std/eval/_std/Sys.hx
  55. 8 8
      std/eval/_std/sys/io/File.hx
  56. 6 6
      std/eval/_std/sys/io/FileInput.hx
  57. 6 6
      std/eval/_std/sys/io/FileOutput.hx
  58. 4 4
      std/eval/_std/sys/net/Host.hx
  59. 1 1
      std/flash/_std/Type.hx
  60. 1 1
      std/haxe/Serializer.hx
  61. 15 15
      std/haxe/Ucs2.hx
  62. 1 1
      std/haxe/Utf8.hx
  63. 9 9
      std/haxe/crypto/Sha224.hx
  64. 9 9
      std/haxe/crypto/Sha256.hx
  65. 2 2
      std/haxe/ds/BalancedTree.hx
  66. 1 1
      std/haxe/ds/List.hx
  67. 4 4
      std/haxe/ds/Vector.hx
  68. 2 2
      std/haxe/format/JsonPrinter.hx
  69. 5 0
      std/haxe/macro/Expr.hx
  70. 1 0
      std/haxe/macro/Printer.hx
  71. 10 10
      std/hl/Bytes.hx
  72. 5 5
      std/hl/BytesAccess.hx
  73. 6 6
      std/hl/NativeArray.hx
  74. 5 5
      std/hl/Ref.hx
  75. 4 4
      std/hl/Type.hx
  76. 1 1
      std/hl/_std/Reflect.hx
  77. 2 2
      std/hl/_std/Std.hx
  78. 2 2
      std/hl/types/BytesMap.hx
  79. 2 2
      std/hl/types/IntMap.hx
  80. 2 2
      std/hl/types/ObjectMap.hx
  81. 2 2
      std/java/Lib.hx
  82. 11 11
      std/java/_std/haxe/ds/ObjectMap.hx
  83. 11 11
      std/java/_std/haxe/ds/StringMap.hx
  84. 11 11
      std/java/_std/haxe/ds/WeakMap.hx
  85. 1 1
      std/java/internal/FieldLookup.hx
  86. 2 2
      std/java/lang/Boolean.hx
  87. 2 2
      std/java/lang/Byte.hx
  88. 2 2
      std/java/lang/Character.hx
  89. 2 2
      std/java/lang/Double.hx
  90. 2 2
      std/java/lang/Float.hx
  91. 2 2
      std/java/lang/Integer.hx
  92. 2 2
      std/java/lang/Long.hx
  93. 2 2
      std/java/lang/Short.hx
  94. 4 4
      std/js/Lib.hx
  95. 1 1
      std/python/Syntax.hx
  96. 2 2
      tests/unit/src/unit/issues/Issue1827.hx
  97. 1 1
      tests/unit/src/unit/issues/Issue2785.hx
  98. 2 2
      tests/unit/src/unit/issues/Issue2874.hx
  99. 10 10
      tests/unit/src/unit/issues/Issue3345.hx
  100. 3 3
      tests/unit/src/unit/issues/Issue3388.hx

+ 5 - 5
src/codegen/dotnet.ml

@@ -661,8 +661,8 @@ let convert_delegate ctx p ilcls =
 			cff_name = name,null_pos;
 			cff_doc = None;
 			cff_pos = p;
-			cff_meta = [ Meta.Extern,[],p ; Meta.Op, [ (EBinop(op, (EConst(Ident"A"),p), (EConst(Ident"B"),p)),p) ], p ];
-			cff_access = [APublic;AInline;AStatic];
+			cff_meta = [ Meta.Op, [ (EBinop(op, (EConst(Ident"A"),p), (EConst(Ident"B"),p)),p) ], p ];
+			cff_access = [APublic;AInline;AStatic;AExtern];
 			cff_kind = mk_op_fn op name p;
 		}
 	in
@@ -694,9 +694,9 @@ let convert_delegate ctx p ilcls =
 			EReturn( Some ( EConst(Ident "this"), p ) ), p
 		);
 	} in
-	let fn_new = mk_abstract_fun "new" p fn_new [Meta.Extern] [APublic;AInline] in
-	let fn_from_hx = mk_abstract_fun "FromHaxeFunction" p fn_from_hx [Meta.Extern;Meta.From] [APublic;AInline;AStatic] in
-	let fn_asdel = mk_abstract_fun "AsDelegate" p fn_asdel [Meta.Extern] [APublic;AInline] in
+	let fn_new = mk_abstract_fun "new" p fn_new [] [APublic;AInline;AExtern] in
+	let fn_from_hx = mk_abstract_fun "FromHaxeFunction" p fn_from_hx [Meta.From] [APublic;AInline;AStatic;AExtern] in
+	let fn_asdel = mk_abstract_fun "AsDelegate" p fn_asdel [] [APublic;AInline;AExtern] in
 	let _, c = netpath_to_hx ctx.nstd ilcls.cpath in
 	EAbstract {
 		d_name = netname_to_hx c,null_pos;

+ 1 - 1
src/codegen/gencommon/dynamicFieldAccess.ml

@@ -89,7 +89,7 @@ let configure gen (is_dynamic:texpr->Type.tfield_access->bool) (change_expr:texp
 					assert false
 			with Not_found ->
 				match f with
-				| FStatic (cl, cf) when Meta.has Meta.Extern cf.cf_meta ->
+				| FStatic (cl, cf) when cf.cf_extern ->
 					{ e with eexpr = TField ({ fexpr with eexpr = TTypeExpr decl }, FStatic (cl, cf)) }
 				| _ ->
 					change_expr e { fexpr with eexpr = TTypeExpr decl } (field_name f) None true)

+ 1 - 1
src/codegen/gencommon/gencommon.ml

@@ -1246,7 +1246,7 @@ let rec field_access gen (t:t) (field:string) : (tfield_access) =
 		| _ -> FNotFound
 
 let field_access_esp gen t field = match field with
-	| FStatic(cl,cf) | FInstance(cl,_,cf) when Meta.has Meta.Extern cf.cf_meta ->
+	| FStatic(cl,cf) | FInstance(cl,_,cf) when cf.cf_extern ->
 		let static = match field with
 			| FStatic _ -> true
 			| _ -> false

+ 1 - 1
src/context/typecore.ml

@@ -309,7 +309,7 @@ let push_this ctx e = match e.eexpr with
 		er,fun () -> ctx.this_stack <- List.tl ctx.this_stack
 
 let is_removable_field ctx f =
-	Meta.has Meta.Extern f.cf_meta || Meta.has Meta.Generic f.cf_meta
+	f.cf_extern || Meta.has Meta.Generic f.cf_meta
 	|| (match f.cf_kind with
 		| Var {v_read = AccRequire (s,_)} -> true
 		| Method MethMacro -> not ctx.in_macro

+ 2 - 0
src/core/ast.ml

@@ -228,6 +228,7 @@ and access =
 	| AInline
 	| AMacro
 	| AFinal
+	| AExtern
 
 and class_field_kind =
 	| FVar of type_hint option * expr option
@@ -370,6 +371,7 @@ let s_access = function
 	| AInline -> "inline"
 	| AMacro -> "macro"
 	| AFinal -> "final"
+	| AExtern -> "extern"
 
 let s_keyword = function
 	| Function -> "function"

+ 3 - 1
src/core/type.ml

@@ -175,6 +175,7 @@ and tclass_field = {
 	mutable cf_expr : texpr option;
 	mutable cf_expr_unoptimized : tfunc option;
 	mutable cf_overloads : tclass_field list;
+	mutable cf_extern : bool; (* this is only true if the field itself is extern, not its class *)
 }
 
 and tclass_kind =
@@ -446,6 +447,7 @@ let mk_field name t p name_pos = {
 	cf_expr_unoptimized = None;
 	cf_params = [];
 	cf_overloads = [];
+	cf_extern = false;
 }
 
 let null_module = {
@@ -1980,7 +1982,7 @@ let rec unify a b =
 				if not (Meta.has Meta.MaybeUsed f1.cf_meta) then f1.cf_meta <- (Meta.MaybeUsed,[],f1.cf_pos) :: f1.cf_meta;
 				(match f1.cf_kind with
 				| Method MethInline ->
-					if (c.cl_extern || Meta.has Meta.Extern f1.cf_meta) && not (Meta.has Meta.Runtime f1.cf_meta) then error [Has_no_runtime_field (a,n)];
+					if (c.cl_extern || f1.cf_extern) && not (Meta.has Meta.Runtime f1.cf_meta) then error [Has_no_runtime_field (a,n)];
 				| _ -> ());
 			) an.a_fields;
 			(match !(an.a_status) with

+ 2 - 2
src/generators/genhl.ml

@@ -139,7 +139,7 @@ let is_to_string t =
 	| _ -> false
 
 let is_extern_field f =
-	not (Type.is_physical_field f) || (match f.cf_kind with Method MethNormal -> List.exists (fun (m,_,_) -> m = Meta.HlNative) f.cf_meta | _ -> false) || Meta.has Meta.Extern f.cf_meta
+	not (Type.is_physical_field f) || (match f.cf_kind with Method MethNormal -> List.exists (fun (m,_,_) -> m = Meta.HlNative) f.cf_meta | _ -> false) || f.cf_extern
 
 let is_array_class name =
 	match name with
@@ -3156,7 +3156,7 @@ let generate_static ctx c f =
 	match f.cf_kind with
 	| Var _ ->
 		()
-	| Method _ when Meta.has Meta.Extern f.cf_meta ->
+	| Method _ when f.cf_extern ->
 		()
 	| Method m ->
 		let add_native lib name =

+ 1 - 1
src/macro/eval/evalPrototype.ml

@@ -170,7 +170,7 @@ module PrototypeBuilder = struct
 end
 
 let is_removable_field cf =
-	Meta.has Meta.Extern cf.cf_meta || Meta.has Meta.Generic cf.cf_meta
+	cf.cf_extern || Meta.has Meta.Generic cf.cf_meta
 
 let create_static_prototype ctx mt =
 	let key = path_hash (t_infos mt).mt_path in

+ 4 - 0
src/macro/macroApi.ml

@@ -394,6 +394,7 @@ and encode_access a =
 		| AInline -> 5
 		| AMacro -> 6
 		| AFinal -> 7
+		| AExtern -> 8
 	in
 	encode_enum IAccess tag []
 
@@ -696,6 +697,7 @@ and decode_access v =
 	| 5, [] -> AInline
 	| 6, [] -> AMacro
 	| 7, [] -> AFinal
+	| 8, [] -> AExtern
 	| _ -> raise Invalid_expr
 
 and decode_meta_entry v =
@@ -946,6 +948,7 @@ and encode_cfield f =
 		"namePos",encode_pos f.cf_name_pos;
 		"doc", null encode_string f.cf_doc;
 		"overloads", encode_ref f.cf_overloads (encode_and_map_array encode_cfield) (fun() -> "overloads");
+		"isExtern", vbool f.cf_extern;
 	]
 
 and encode_field_kind k =
@@ -1319,6 +1322,7 @@ let decode_cfield v =
 		cf_expr = None;
 		cf_expr_unoptimized = None;
 		cf_overloads = decode_ref (field v "overloads");
+		cf_extern = decode_bool (field v "isExtern");
 	}
 
 let decode_efield v =

+ 1 - 1
src/optimization/analyzerTexpr.ml

@@ -1237,7 +1237,7 @@ module Purity = struct
 				| None ->
 					if not (is_pure c cf) then taint node
 				(* TODO: The function code check shouldn't be here I guess. *)
-				| Some _ when (Meta.has Meta.Extern cf.cf_meta || Meta.has Meta.FunctionCode cf.cf_meta || Meta.has (Meta.HlNative) cf.cf_meta || Meta.has (Meta.HlNative) c.cl_meta) ->
+				| Some _ when (cf.cf_extern || Meta.has Meta.FunctionCode cf.cf_meta || Meta.has (Meta.HlNative) cf.cf_meta || Meta.has (Meta.HlNative) c.cl_meta) ->
 					if not (is_pure c cf) then taint node
 				| Some e ->
 					try

+ 1 - 1
src/optimization/inlineConstructors.ml

@@ -165,7 +165,7 @@ let inline_constructors ctx e =
 		if i < 0 then "n" ^ (string_of_int (-i))
 		else (string_of_int i)
 	in
-	let is_extern_ctor c cf = c.cl_extern || Meta.has Meta.Extern cf.cf_meta in
+	let is_extern_ctor c cf = c.cl_extern || cf.cf_extern in
 	let make_expr_for_list (el:texpr list) (t:t) (p:pos): texpr = match el with
 		| [] -> mk (TBlock[]) ctx.t.tvoid p
 		| [e] -> e

+ 1 - 1
src/optimization/optimizer.ml

@@ -1050,7 +1050,7 @@ let inline_constructors ctx e =
 		if i < 0 then "n" ^ (string_of_int (-i))
 		else (string_of_int i)
 	in
-	let is_extern_ctor c cf = c.cl_extern || Meta.has Meta.Extern cf.cf_meta in
+	let is_extern_ctor c cf = c.cl_extern || cf.cf_extern in
 	let rec find_locals e = match e.eexpr with
 		| TVar(v,Some e1) ->
 			find_locals e1;

+ 1 - 0
src/syntax/grammar.mly

@@ -624,6 +624,7 @@ and parse_cf_rights allow_static l = parser
 	| [< '(Kwd Override,_) when not (List.mem AOverride l); l = parse_cf_rights false (AOverride :: l) >] -> l
 	| [< '(Kwd Dynamic,_) when not (List.mem ADynamic l); l = parse_cf_rights allow_static (ADynamic :: l) >] -> l
 	| [< '(Kwd Inline,_); l = parse_cf_rights allow_static (AInline :: l) >] -> l
+	| [< '(Kwd Extern,_); l = parse_cf_rights allow_static (AExtern :: l) >] -> l
 	| [< >] -> l
 
 and parse_fun_name = parser

+ 1 - 0
src/syntax/reification.ml

@@ -177,6 +177,7 @@ let reify in_macro =
 			| AInline -> "AInline"
 			| AMacro -> "AMacro"
 			| AFinal -> "AFinal"
+			| AExtern -> "AExtern"
 			) in
 			mk_enum "Access" n [] p
 		in

+ 3 - 3
src/typing/calls.ml

@@ -12,7 +12,7 @@ let is_forced_inline c cf =
 	match c with
 	| Some { cl_extern = true } -> true
 	| Some { cl_kind = KAbstractImpl _ } -> true
-	| _ when Meta.has Meta.Extern cf.cf_meta -> true
+	| _ when cf.cf_extern -> true
 	| _ -> false
 
 let make_call ctx e params t p =
@@ -451,7 +451,7 @@ let rec acc_get ctx g p =
 		| None ->
 			error "Recursive inline is not supported" p
 		| Some { eexpr = TFunction _ } ->
-			let chk_class c = (c.cl_extern || Meta.has Meta.Extern f.cf_meta) && not (Meta.has Meta.Runtime f.cf_meta) in
+			let chk_class c = (c.cl_extern || f.cf_extern) && not (Meta.has Meta.Runtime f.cf_meta) in
 			let wrap_extern c =
 				let c2 =
 					let m = c.cl_module in
@@ -486,7 +486,7 @@ let rec acc_get ctx g p =
 					e_def
 				| TAnon a ->
 					begin match !(a.a_status) with
-						| Statics {cl_extern = false} when Meta.has Meta.Extern f.cf_meta ->
+						| Statics {cl_extern = false} when f.cf_extern ->
 							display_error ctx "Cannot create closure on @:extern inline method" p;
 							e_def
 						| Statics c when chk_class c -> wrap_extern c

+ 18 - 11
src/typing/typeload.ml

@@ -36,7 +36,7 @@ let transform_abstract_field com this_t a_t a f =
 	match f.cff_kind with
 	| FProp ((("get" | "never"),_),(("set" | "never"),_),_,_) when not stat ->
 		(* TODO: hack to avoid issues with abstract property generation on As3 *)
-		if Common.defined com Define.As3 then f.cff_meta <- (Meta.Extern,[],null_pos) :: f.cff_meta;
+		if Common.defined com Define.As3 then f.cff_access <- AExtern :: f.cff_access;
 		{ f with cff_access = AStatic :: f.cff_access; cff_meta = (Meta.Impl,[],null_pos) :: f.cff_meta }
 	| FProp _ when not stat ->
 		error "Member property accessors must be get/set or never" p;
@@ -45,13 +45,11 @@ let transform_abstract_field com this_t a_t a f =
 		let cast e = (ECast(e,None)),pos e in
 		let ret p = (EReturn (Some (cast (EConst (Ident "this"),p))),p) in
 		let meta = (Meta.Impl,[],null_pos) :: f.cff_meta in
-		let meta = if Meta.has Meta.MultiType a.a_meta then begin
+		if Meta.has Meta.MultiType a.a_meta then begin
 			if List.mem AInline f.cff_access then error "MultiType constructors cannot be inline" f.cff_pos;
 			if fu.f_expr <> None then error "MultiType constructors cannot have a body" f.cff_pos;
-			(Meta.Extern,[],null_pos) :: meta
-		end else
-			meta
-		in
+			f.cff_access <- AExtern :: f.cff_access
+		end;
 		(* We don't want the generated expression positions to shadow the real code. *)
 		let p = { p with pmax = p.pmin } in
 		let fu = {
@@ -622,7 +620,7 @@ and load_complex_type ctx allow_display p (t,pn) =
 				| APrivate -> pub := false;
 				| ADynamic when (match f.cff_kind with FFun _ -> true | _ -> false) -> dyn := true
 				| AFinal -> final := true
-				| AStatic | AOverride | AInline | ADynamic | AMacro -> error ("Invalid access " ^ Ast.s_access a) p
+				| AStatic | AOverride | AInline | ADynamic | AMacro | AExtern -> error ("Invalid access " ^ Ast.s_access a) p
 			) f.cff_access;
 			let t , access = (match f.cff_kind with
 				| FVar(t,e) when !final ->
@@ -2093,9 +2091,15 @@ module ClassInitializer = struct
 			pass = PBuildClass; (* will be set later to PTypeExpr *)
 		} in
 		let is_static = List.mem AStatic cff.cff_access in
-		let is_extern = Meta.has Meta.Extern cff.cff_meta || c.cl_extern in
+		let is_extern = List.mem AExtern cff.cff_access in
+		let is_extern = if Meta.has Meta.Extern cff.cff_meta then begin
+			ctx.com.warning "`@:extern function` is deprecated in favor of `extern function`" (pos cff.cff_name);
+			true
+		end else
+			is_extern
+		in
 		let allow_inline = cctx.abstract <> None || match cff.cff_kind with
-			| FFun _ -> ctx.g.doinline || is_extern
+			| FFun _ -> ctx.g.doinline || is_extern || c.cl_extern
 			| _ -> true
 		in
 		let is_inline = allow_inline && List.mem AInline cff.cff_access in
@@ -2301,7 +2305,7 @@ module ClassInitializer = struct
 						| None -> display_error ctx msg p; e
 					in
 					let e = (match cf.cf_kind with
-					| Var v when c.cl_extern || Meta.has Meta.Extern cf.cf_meta ->
+					| Var v when c.cl_extern || fctx.is_extern ->
 						if not fctx.is_static then begin
 							display_error ctx "Extern non-static variables may not be initialized" p;
 							e
@@ -2398,6 +2402,7 @@ module ClassInitializer = struct
 			cf_meta = (if fctx.is_final && not (Meta.has Meta.Final f.cff_meta) then (Meta.Final,[],null_pos) :: f.cff_meta else f.cff_meta);
 			cf_kind = Var kind;
 			cf_public = is_public (ctx,cctx) f.cff_access None;
+			cf_extern = fctx.is_extern;
 		} in
 		ctx.curfield <- cf;
 		bind_var (ctx,cctx,fctx) cf eo;
@@ -2617,6 +2622,7 @@ module ClassInitializer = struct
 			cf_kind = Method (if fctx.is_macro then MethMacro else if fctx.is_inline then MethInline else if dynamic then MethDynamic else MethNormal);
 			cf_public = is_public (ctx,cctx) f.cff_access parent;
 			cf_params = params;
+			cf_extern = fctx.is_extern;
 		} in
 		cf.cf_meta <- List.map (fun (m,el,p) -> match m,el with
 			| Meta.AstSource,[] -> (m,(match fd.f_expr with None -> [] | Some e -> [e]),p)
@@ -2806,6 +2812,7 @@ module ClassInitializer = struct
 			cf_meta = f.cff_meta;
 			cf_kind = Var { v_read = get; v_write = set };
 			cf_public = is_public (ctx,cctx) f.cff_access None;
+			cf_extern = fctx.is_extern;
 		} in
 		ctx.curfield <- cf;
 		bind_var (ctx,cctx,fctx) cf eo;
@@ -2819,7 +2826,7 @@ module ClassInitializer = struct
 		if name.[0] = '$' then display_error ctx "Field names starting with a dollar are not allowed" p;
 		List.iter (fun acc ->
 			match (acc, f.cff_kind) with
-			| APublic, _ | APrivate, _ | AStatic, _ | AFinal, _ -> ()
+			| APublic, _ | APrivate, _ | AStatic, _ | AFinal, _ | AExtern, _ -> ()
 			| ADynamic, FFun _ | AOverride, FFun _ | AMacro, FFun _ | AInline, FFun _ | AInline, FVar _ -> ()
 			| _, FVar _ -> error ("Invalid accessor '" ^ Ast.s_access acc ^ "' for variable " ^ name) p
 			| _, FProp _ -> error ("Invalid accessor '" ^ Ast.s_access acc ^ "' for property " ^ name) p

+ 3 - 3
std/Any.hx

@@ -32,7 +32,7 @@
 	to another type.
 **/
 abstract Any(Dynamic) {
-	@:noCompletion @:extern @:to inline function __promote<T>():T return this;
-	@:noCompletion @:extern @:from inline static function __cast<T>(value:T):Any return cast value;
-	@:noCompletion @:extern inline function toString():String return Std.string(this);
+	@:noCompletion @:to extern inline function __promote<T>():T return this;
+	@:noCompletion @:from extern inline static function __cast<T>(value:T):Any return cast value;
+	@:noCompletion extern inline function toString():String return Std.string(this);
 }

+ 1 - 1
std/DateTools.hx

@@ -188,7 +188,7 @@ class DateTools {
 	/**
 		Converts a number of minutes to a timestamp.
 	**/
-	#if as3 @:extern #end public static inline function minutes( n : Float ) : Float {
+	#if as3 extern #end public static inline function minutes( n : Float ) : Float {
 		return n * 60.0 * 1000.0;
 	}
 

+ 5 - 5
std/cpp/ConstCharStar.hx

@@ -21,17 +21,17 @@
  */
  package cpp;
 
-@:extern abstract ConstCharStar( RawConstPointer<Char> ) to(RawConstPointer<Char>)
+extern abstract ConstCharStar( RawConstPointer<Char> ) to(RawConstPointer<Char>)
 {
    inline function new(s:String) this = untyped s.__s;
 
    @:from
-   static public inline function fromString(s:String) return new ConstCharStar(s);
+   static public inline function fromString(s:String):ConstCharStar return new ConstCharStar(s);
 
-   @:to @:extern
+   @:to extern
    public inline function toString():String return new String(untyped this);
 
-    @:to @:extern
-    public inline function toPointer() return this;
+    @:to extern
+    public inline function toPointer():RawConstPointer<Char> return this;
 }
 

+ 6 - 6
std/cpp/Function.hx

@@ -36,23 +36,23 @@ extern abstract Function<T, ABI:cpp.abi.Abi>( FunctionData<T,ABI> )
 
 
    @:native("::cpp::Function_obj::getProcAddress")
-   @:extern static function nativeGetProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : AutoCast return null;
+   extern static function nativeGetProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : AutoCast return null;
    inline public static function getProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : Function<T,ABI>
    {
       return cast nativeGetProcAddress(inModule, inFunction);
    }
 
    @:native("::cpp::Function_obj::fromStaticFunction")
-   @:extern static function nativeFromStaticFunction<T>(inStaticFunction:T) : AutoCast return null;
+   extern static function nativeFromStaticFunction<T>(inStaticFunction:T) : AutoCast return null;
    inline public static function fromStaticFunction<T>(inStaticFunction:T) : Callable<T>
    {
       return cast nativeFromStaticFunction(inStaticFunction);
    }
 
-	@:extern public function lt(inOther:Function<T,ABI>):Bool return false;
-	@:extern public function leq(inOther:Function<T,ABI>):Bool return false;
-	@:extern public function gt(inOther:Function<T,ABI>):Bool return false;
-	@:extern public function geq(inOther:Function<T,ABI>):Bool return false;
+	extern public function lt(inOther:Function<T,ABI>):Bool return false;
+	extern public function leq(inOther:Function<T,ABI>):Bool return false;
+	extern public function gt(inOther:Function<T,ABI>):Bool return false;
+	extern public function geq(inOther:Function<T,ABI>):Bool return false;
 }
 
 

+ 2 - 2
std/cpp/Lib.hx

@@ -81,8 +81,8 @@ class Lib {
 		return null;
 	}
 
-	@:extern  @:noDebug @:native("HX_STACK_DO_RETHROW")
-	static function do_rethrow(inExp:Dynamic) { throw inExp; }
+	@:noDebug @:native("HX_STACK_DO_RETHROW")
+	extern static function do_rethrow(inExp:Dynamic) { throw inExp; }
 
 	@:noDebug #if(!cppia) inline #end
 	public static function rethrow(inExp:Dynamic) { do_rethrow(inExp); }

+ 30 - 30
std/cpp/NativeFile.hx

@@ -3,62 +3,62 @@ package cpp;
 @:buildXml('<include name="${HXCPP}/src/hx/libs/std/Build.xml"/>')
 extern class NativeFile
 {
-   @:extern @:native("_hx_std_file_open")
-   public static function file_open(fname:String,r:String) : Dynamic return null;
+   @:native("_hx_std_file_open")
+   extern public static function file_open(fname:String,r:String) : Dynamic return null;
 
-   @:extern @:native("_hx_std_file_close")
-   public static function file_close(handle:Dynamic) : Void { }
+   @:native("_hx_std_file_close")
+   extern public static function file_close(handle:Dynamic) : Void { }
 
 
-   @:extern @:native("_hx_std_file_write")
-   public static function file_write(handle:Dynamic,s:haxe.io.BytesData,p:Int,n:Int) : Int return 0;
+   @:native("_hx_std_file_write")
+   extern public static function file_write(handle:Dynamic,s:haxe.io.BytesData,p:Int,n:Int) : Int return 0;
 
 
-   @:extern @:native("_hx_std_file_write_char")
-   public static function file_write_char(handle:Dynamic,c:Int) : Void { }
+   @:native("_hx_std_file_write_char")
+   extern public static function file_write_char(handle:Dynamic,c:Int) : Void { }
 
 
-   @:extern @:native("_hx_std_file_read")
-   public static function file_read(handle:Dynamic,s:haxe.io.BytesData,p:Int,n:Int) : Int return 0;
+   @:native("_hx_std_file_read")
+   extern public static function file_read(handle:Dynamic,s:haxe.io.BytesData,p:Int,n:Int) : Int return 0;
 
 
-   @:extern @:native("_hx_std_file_read_char")
-   public static function file_read_char(handle:Dynamic) : Int return 0;
+   @:native("_hx_std_file_read_char")
+   extern public static function file_read_char(handle:Dynamic) : Int return 0;
 
 
-   @:extern @:native("_hx_std_file_seek")
-   public static function file_seek(handle:Dynamic,pos:Int,kind:Int) : Void { }
+   @:native("_hx_std_file_seek")
+   extern public static function file_seek(handle:Dynamic,pos:Int,kind:Int) : Void { }
 
 
-   @:extern @:native("_hx_std_file_tell")
-   public static function file_tell(handle:Dynamic) : Int return 0;
+   @:native("_hx_std_file_tell")
+   extern public static function file_tell(handle:Dynamic) : Int return 0;
 
 
-   @:extern @:native("_hx_std_file_eof")
-   public static function file_eof(handle:Dynamic) : Bool return false;
+   @:native("_hx_std_file_eof")
+   extern public static function file_eof(handle:Dynamic) : Bool return false;
 
 
-   @:extern @:native("_hx_std_file_flush")
-   public static function file_flush(handle:Dynamic) : Void return null;
+   @:native("_hx_std_file_flush")
+   extern public static function file_flush(handle:Dynamic) : Void return null;
 
 
-   @:extern @:native("_hx_std_file_contents_string")
-   public static function file_contents_string(name:String) : String return null;
+   @:native("_hx_std_file_contents_string")
+   extern public static function file_contents_string(name:String) : String return null;
 
 
-   @:extern @:native("_hx_std_file_contents_bytes")
-   public static function file_contents_bytes(name:String) : haxe.io.BytesData return null;
+   @:native("_hx_std_file_contents_bytes")
+   extern public static function file_contents_bytes(name:String) : haxe.io.BytesData return null;
 
 
-   @:extern @:native("_hx_std_file_stdin")
-   public static function file_stdin() : Dynamic return null;
+   @:native("_hx_std_file_stdin")
+   extern public static function file_stdin() : Dynamic return null;
 
 
-   @:extern @:native("_hx_std_file_stdout")
-   public static function file_stdout() : Dynamic return null;
+   @:native("_hx_std_file_stdout")
+   extern public static function file_stdout() : Dynamic return null;
 
 
-   @:extern @:native("_hx_std_file_stderr")
-   public static function file_stderr() : Dynamic return null;
+   @:native("_hx_std_file_stderr")
+   extern public static function file_stderr() : Dynamic return null;
 
 }

+ 12 - 12
std/cpp/NativeGc.hx

@@ -20,40 +20,40 @@ extern class NativeGc
    }
 
 
-   @:native("__hxcpp_enable") @:extern
+   @:native("__hxcpp_enable") extern
    static public function enable(inEnable:Bool) : Void { }
 
-   @:native("__hxcpp_collect") @:extern
+   @:native("__hxcpp_collect") extern
    static public function run(major:Bool) : Void { }
 
-   @:native("__hxcpp_gc_compact") @:extern
+   @:native("__hxcpp_gc_compact") extern
    static public function compact() : Void { }
 
-   @:native("__hxcpp_gc_trace") @:extern
+   @:native("__hxcpp_gc_trace") extern
    static public function nativeTrace(sought:Class<Dynamic>,printInstances:Bool) : Int return 0;
 
-   @:native("__hxcpp_gc_do_not_kill") @:extern
+   @:native("__hxcpp_gc_do_not_kill") extern
    static public function doNotKill(inObject:Dynamic) : Void { }
 
-   @:native("__hxcpp_get_next_zombie") @:extern
+   @:native("__hxcpp_get_next_zombie") extern
    static public function getNextZombie() : Dynamic return null;
 
-   @:native("__hxcpp_gc_safe_point") @:extern
+   @:native("__hxcpp_gc_safe_point") extern
    static public function safePoint() : Void { }
 
-   @:native("__hxcpp_enter_gc_free_zone") @:extern
+   @:native("__hxcpp_enter_gc_free_zone") extern
    static public function enterGCFreeZone() : Void { }
 
-   @:native("__hxcpp_exit_gc_free_zone") @:extern
+   @:native("__hxcpp_exit_gc_free_zone") extern
    static public function exitGCFreeZone() : Void { }
 
-   @:native("__hxcpp_set_minimum_free_space") @:extern
+   @:native("__hxcpp_set_minimum_free_space") extern
    static public function setMinimumFreeSpace(inBytes:Int) : Void { }
 
-   @:native("__hxcpp_set_target_free_space_percentage") @:extern
+   @:native("__hxcpp_set_target_free_space_percentage") extern
    static public function setTargetFreeSpacePercentage(inPercentage:Int) : Void { }
 
-   @:native("__hxcpp_set_minimum_working_memory") @:extern
+   @:native("__hxcpp_set_minimum_working_memory") extern
    static public function setMinimumWorkingMemory(inBytes:Int) : Void { }
 }
 

+ 9 - 9
std/cpp/NativeProcess.hx

@@ -4,37 +4,37 @@ package cpp;
 extern class NativeProcess
 {
 
-   @:extern @:native("_hx_std_process_run")
+   @:native("_hx_std_process_run")
    public static function process_run(cmd:String,vargs:Array<String>) : Dynamic return null;
 
-   @:extern @:native("_hx_std_process_run")
+   @:native("_hx_std_process_run")
    public static function process_run_with_show(cmd:String,vargs:Array<String>,inShow:Int) : Dynamic return null;
 
-   @:extern @:native("_hx_std_process_stdout_read")
+   @:native("_hx_std_process_stdout_read")
    public static function process_stdout_read(handle:Dynamic,buf:haxe.io.BytesData,pos:Int,len:Int) : Int return 0;
 
 
-   @:extern @:native("_hx_std_process_stderr_read")
+   @:native("_hx_std_process_stderr_read")
    public static function process_stderr_read(handle:Dynamic,buf:haxe.io.BytesData,pos:Int,len:Int) : Int return 0;
 
 
-   @:extern @:native("_hx_std_process_stdin_write")
+   @:native("_hx_std_process_stdin_write")
    public static function process_stdin_write(handle:Dynamic,buf:haxe.io.BytesData,pos:Int,len:Int) : Int return 0;
 
 
-   @:extern @:native("_hx_std_process_stdin_close")
+   @:native("_hx_std_process_stdin_close")
    public static function process_stdin_close(handle:Dynamic) : Void { }
 
 
-   @:extern @:native("_hx_std_process_exit")
+   @:native("_hx_std_process_exit")
    public static function process_exit(handle:Dynamic) : Int return 0;
 
 
-   @:extern @:native("_hx_std_process_pid")
+   @:native("_hx_std_process_pid")
    public static function process_pid(handle:Dynamic) : Int return 0;
 
 
-   @:extern @:native("_hx_std_process_close")
+   @:native("_hx_std_process_close")
    public static function process_close(handle:Dynamic) : Void { };
 
 }

+ 4 - 4
std/cpp/NativeRandom.hx

@@ -4,18 +4,18 @@ package cpp;
 extern class NativeRandom
 {
 
-   @:extern @:native("_hx_std_random_new")
+   @:native("_hx_std_random_new")
    public static function random_new() : Dynamic return null;
 
 
-   @:extern @:native("_hx_std_random_set_seed")
+   @:native("_hx_std_random_set_seed")
    public static function random_set_seed(handle:Dynamic,v:Int) : Void { }
 
 
-   @:extern @:native("_hx_std_random_int")
+   @:native("_hx_std_random_int")
    public static function random_int(handle:Dynamic,max:Int) : Int return 0;
 
-   @:extern @:native("_hx_std_random_float")
+   @:native("_hx_std_random_float")
    public static function random_float(handle:Dynamic) : Float return 0.0;
 
 

+ 37 - 37
std/cpp/NativeSocket.hx

@@ -5,147 +5,147 @@ import sys.net.Socket;
 @:buildXml('<include name="${HXCPP}/src/hx/libs/std/Build.xml"/>')
 extern class NativeSocket
 {
-   @:extern @:native("_hx_std_socket_init")
+   @:native("_hx_std_socket_init")
    public static function socket_init() : Void { }
 
 
-   @:extern @:native("_hx_std_socket_new")
+   @:native("_hx_std_socket_new")
    public static function socket_new(udp:Bool) : Dynamic return null;
 
-   @:extern @:native("_hx_std_socket_new")
+   @:native("_hx_std_socket_new")
    public static function socket_new_ip(udp:Bool,ipv6:Bool) : Dynamic return null;
 
 
-   @:extern @:native("_hx_std_socket_close")
+   @:native("_hx_std_socket_close")
    public static function socket_close(handle:Dynamic) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_bind")
+   @:native("_hx_std_socket_bind")
    public static function socket_bind(o:Dynamic,host:Int,port:Int) : Void { }
 
-   @:extern @:native("_hx_std_socket_bind_ipv6")
+   @:native("_hx_std_socket_bind_ipv6")
    public static function socket_bind_ipv6(o:Dynamic,host:haxe.io.BytesData,port:Int) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_send_char")
+   @:native("_hx_std_socket_send_char")
    public static function socket_send_char(o:Dynamic,c:Int) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_send")
+   @:native("_hx_std_socket_send")
    public static function socket_send(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int) : Int return 0;
 
 
-   @:extern @:native("_hx_std_socket_recv")
+   @:native("_hx_std_socket_recv")
    public static function socket_recv(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int) : Int return 0;
 
 
-   @:extern @:native("_hx_std_socket_recv_char")
+   @:native("_hx_std_socket_recv_char")
    public static function socket_recv_char(o:Dynamic) : Int return 0;
 
 
-   @:extern @:native("_hx_std_socket_write")
+   @:native("_hx_std_socket_write")
    public static function socket_write(o:Dynamic,buf:haxe.io.BytesData) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_read")
+   @:native("_hx_std_socket_read")
    public static function socket_read(o:Dynamic) : haxe.io.BytesData return null;
 
-   @:extern @:native("_hx_std_host_resolve_ipv6")
+   @:native("_hx_std_host_resolve_ipv6")
    public static function host_resolve_ipv6(host:String) : haxe.io.BytesData return null;
 
 
-   @:extern @:native("_hx_std_host_resolve")
+   @:native("_hx_std_host_resolve")
    public static function host_resolve(host:String) : Int return 0;
 
 
-   @:extern @:native("_hx_std_host_to_string")
+   @:native("_hx_std_host_to_string")
    public static function host_to_string(ip:Int) : String return null;
 
-   @:extern @:native("_hx_std_host_to_string_ipv6")
+   @:native("_hx_std_host_to_string_ipv6")
    public static function host_to_string_ipv6(ipv6:haxe.io.BytesData) : String return null;
 
 
-   @:extern @:native("_hx_std_host_reverse")
+   @:native("_hx_std_host_reverse")
    public static function host_reverse(host:Int) : String return null;
 
-   @:extern @:native("_hx_std_host_reverse_ipv6")
+   @:native("_hx_std_host_reverse_ipv6")
    public static function host_reverse_ipv6(ipv6:haxe.io.BytesData) : String return null;
 
 
-   @:extern @:native("_hx_std_host_local")
+   @:native("_hx_std_host_local")
    public static function host_local() : String return null;
 
    inline public static function host_local_ipv6() : String return "::1";
 
 
-   @:extern @:native("_hx_std_socket_connect")
+   @:native("_hx_std_socket_connect")
    public static function socket_connect(o:Dynamic,host:Int,port:Int) : Void { }
 
-   @:extern @:native("_hx_std_socket_connect_ipv6")
+   @:native("_hx_std_socket_connect_ipv6")
    public static function socket_connect_ipv6(o:Dynamic,host:haxe.io.BytesData,port:Int) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_listen")
+   @:native("_hx_std_socket_listen")
    public static function socket_listen(o:Dynamic,n:Int) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_select")
+   @:native("_hx_std_socket_select")
    public static function socket_select(rs:Array<Dynamic>,ws:Array<Dynamic>,es:Array<Dynamic>,timeout:Dynamic) : Array<Dynamic> return null;
 
 
-   @:extern @:native("_hx_std_socket_fast_select")
+   @:native("_hx_std_socket_fast_select")
    public static function socket_fast_select(rs:Array<Dynamic>,ws:Array<Dynamic>,es:Array<Dynamic>,timeout:Dynamic) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_accept")
+   @:native("_hx_std_socket_accept")
    public static function socket_accept(o:Dynamic) : Dynamic return null;
 
 
-   @:extern @:native("_hx_std_socket_peer")
+   @:native("_hx_std_socket_peer")
    public static function socket_peer(o:Dynamic) : Array<Int> return null;
 
 
-   @:extern @:native("_hx_std_socket_host")
+   @:native("_hx_std_socket_host")
    public static function socket_host(o:Dynamic) : Array<Int> return null;
 
 
-   @:extern @:native("_hx_std_socket_set_timeout")
+   @:native("_hx_std_socket_set_timeout")
    public static function socket_set_timeout(o:Dynamic,t:Dynamic) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_shutdown")
+   @:native("_hx_std_socket_shutdown")
    public static function socket_shutdown(o:Dynamic,r:Bool,w:Bool) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_set_blocking")
+   @:native("_hx_std_socket_set_blocking")
    public static function socket_set_blocking(o:Dynamic,b:Bool) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_set_fast_send")
+   @:native("_hx_std_socket_set_fast_send")
    public static function socket_set_fast_send(o:Dynamic,b:Bool) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_poll_alloc")
+   @:native("_hx_std_socket_poll_alloc")
    public static function socket_poll_alloc(nsocks:Int) : Dynamic return null;
 
 
-   @:extern @:native("_hx_std_socket_poll_prepare")
+   @:native("_hx_std_socket_poll_prepare")
    public static function socket_poll_prepare(pdata:Dynamic,rsocks:Array<Socket>,wsocks:Array<Socket>) : Array< Array<Int> > return null;
 
 
-   @:extern @:native("_hx_std_socket_poll_events")
+   @:native("_hx_std_socket_poll_events")
    public static function socket_poll_events(pdata:Dynamic,timeout:Float) : Void { }
 
 
-   @:extern @:native("_hx_std_socket_poll")
+   @:native("_hx_std_socket_poll")
    public static function socket_poll(socks:Array<Socket>,pdata:Dynamic,timeout:Float) : Array<Socket> return null;
 
 
-   @:extern @:native("_hx_std_socket_send_to")
+   @:native("_hx_std_socket_send_to")
    public static function socket_send_to(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int,inAddr:Dynamic) : Int return 0;
 
 
-   @:extern @:native("_hx_std_socket_recv_from")
+   @:native("_hx_std_socket_recv_from")
    public static function socket_recv_from(o:Dynamic,buf:haxe.io.BytesData,p:Int,l:Int,outAddr:Dynamic) : Int return 0;
 
 

+ 36 - 36
std/cpp/NativeSsl.hx

@@ -3,112 +3,112 @@ package cpp;
 @:buildXml('<include name="${HXCPP}/src/hx/libs/ssl/Build.xml"/>')
 extern class NativeSsl
 {
-   @:extern @:native("_hx_ssl_new")
+   @:native("_hx_ssl_new")
    public static function ssl_new( conf : Dynamic ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_close")
+   @:native("_hx_ssl_close")
    public static function ssl_close( ctx : Dynamic ) : Void { }
 
-   @:extern @:native("_hx_ssl_handshake")
+   @:native("_hx_ssl_handshake")
    public static function ssl_handshake( ctx : Dynamic ) : Void { }
 
-   @:extern @:native("_hx_ssl_set_socket")
+   @:native("_hx_ssl_set_socket")
    public static function ssl_set_socket( ctx : Dynamic, socket : Dynamic ) : Void { }
 
-   @:extern @:native("_hx_ssl_set_hostname")
+   @:native("_hx_ssl_set_hostname")
    public static function ssl_set_hostname( ctx : Dynamic, hostname : String ) : Void { }
 
-   @:extern @:native("_hx_ssl_get_peer_certificate")
+   @:native("_hx_ssl_get_peer_certificate")
    public static function ssl_get_peer_certificate( ctx : Dynamic ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_get_verify_result")
+   @:native("_hx_ssl_get_verify_result")
    public static function ssl_get_verify_result( ctx : Dynamic ) : Bool { }
 
-   @:extern @:native("_hx_ssl_send_char")
+   @:native("_hx_ssl_send_char")
    public static function ssl_send_char( ctx : Dynamic, char : Int ) : Void { }
 
-   @:extern @:native("_hx_ssl_send")
+   @:native("_hx_ssl_send")
    public static function ssl_send( ctx : Dynamic, buf : haxe.io.BytesData, p : Int, l : Int ) : Int { }
 
-   @:extern @:native("_hx_ssl_write")
+   @:native("_hx_ssl_write")
    public static function ssl_write( ctx : Dynamic, data : haxe.io.BytesData ) : Void { }
 
-   @:extern @:native("_hx_ssl_recv_char")
+   @:native("_hx_ssl_recv_char")
    public static function ssl_recv_char( ctx : Dynamic ) : Int { }
 
-   @:extern @:native("_hx_ssl_recv")
+   @:native("_hx_ssl_recv")
    public static function ssl_recv( ctx : Dynamic, buf : haxe.io.BytesData, p : Int, l : Int ) : Int { }
 
-   @:extern @:native("_hx_ssl_read")
+   @:native("_hx_ssl_read")
    public static function ssl_read( ctx : Dynamic ) : haxe.io.BytesData { }
 
-   @:extern @:native("_hx_ssl_conf_new")
+   @:native("_hx_ssl_conf_new")
    public static function conf_new( server : Bool ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_conf_close")
+   @:native("_hx_ssl_conf_close")
    public static function conf_close( conf : Dynamic ) : Void { }
 
-   @:extern @:native("_hx_ssl_conf_set_ca")
+   @:native("_hx_ssl_conf_set_ca")
    public static function conf_set_ca( conf : Dynamic, cert : Dynamic ) : Void { }
 
-   @:extern @:native("_hx_ssl_conf_set_verify")
+   @:native("_hx_ssl_conf_set_verify")
    public static function conf_set_verify( conf : Dynamic, mode : Int ) : Void { }
 
-   @:extern @:native("_hx_ssl_conf_set_cert")
+   @:native("_hx_ssl_conf_set_cert")
    public static function conf_set_cert( conf : Dynamic, cert : Dynamic, pkey : Dynamic ) : Void { }
 
-   @:extern @:native("_hx_ssl_conf_set_servername_callback")
+   @:native("_hx_ssl_conf_set_servername_callback")
    public static function conf_set_servername_callback( conf : Dynamic, cb : Dynamic ) : Void { }
 
-   @:extern @:native("_hx_ssl_cert_load_defaults")
+   @:native("_hx_ssl_cert_load_defaults")
    public static function cert_load_defaults() : Dynamic { }
 
-   @:extern @:native("_hx_ssl_cert_load_file")
+   @:native("_hx_ssl_cert_load_file")
    public static function cert_load_file( file : String ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_cert_load_path")
+   @:native("_hx_ssl_cert_load_path")
    public static function cert_load_path( path : String ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_cert_get_subject")
+   @:native("_hx_ssl_cert_get_subject")
    public static function cert_get_subject( cert : Dynamic, field : String ) : String { }
 
-   @:extern @:native("_hx_ssl_cert_get_issuer")
+   @:native("_hx_ssl_cert_get_issuer")
    public static function cert_get_issuer( cert : Dynamic, field : String ) : String { }
 
-   @:extern @:native("_hx_ssl_cert_get_altnames")
+   @:native("_hx_ssl_cert_get_altnames")
    public static function cert_get_altnames( cert : Dynamic ) : Array<String> { }
 
-   @:extern @:native("_hx_ssl_cert_get_notbefore")
+   @:native("_hx_ssl_cert_get_notbefore")
    public static function cert_get_notbefore( cert : Dynamic ) : Array<Int> { }
 
-   @:extern @:native("_hx_ssl_cert_get_notafter")
+   @:native("_hx_ssl_cert_get_notafter")
    public static function cert_get_notafter( cert : Dynamic ) : Array<Int> { }
 
-   @:extern @:native("_hx_ssl_cert_get_next")
+   @:native("_hx_ssl_cert_get_next")
    public static function cert_get_next( cert : Dynamic ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_cert_add_pem")
+   @:native("_hx_ssl_cert_add_pem")
    public static function cert_add_pem( cert : Dynamic, data : String ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_cert_add_der")
+   @:native("_hx_ssl_cert_add_der")
    public static function cert_add_der( cert : Dynamic, data : haxe.io.BytesData ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_key_from_der")
+   @:native("_hx_ssl_key_from_der")
    public static function key_from_der( data : haxe.io.BytesData, pub : Bool ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_key_from_pem")
+   @:native("_hx_ssl_key_from_pem")
    public static function key_from_pem( data : String, pub : Bool, pass : String ) : Dynamic { }
 
-   @:extern @:native("_hx_ssl_dgst_make")
+   @:native("_hx_ssl_dgst_make")
    public static function dgst_make( data : haxe.io.BytesData, alg : String ) : haxe.io.BytesData { }
 
-   @:extern @:native("_hx_ssl_dgst_sign")
+   @:native("_hx_ssl_dgst_sign")
    public static function dgst_sign( data : haxe.io.BytesData, key : Dynamic, alg : String ) : haxe.io.BytesData { }
 
-   @:extern @:native("_hx_ssl_dgst_verify")
+   @:native("_hx_ssl_dgst_verify")
    public static function dgst_verify( data : haxe.io.BytesData, sign : haxe.io.BytesData, key : Dynamic, alg : String ) : Bool { }
 
-   @:extern @:native("_hx_ssl_init")
+   @:native("_hx_ssl_init")
    public static function init() : Void { }
 
 }

+ 50 - 50
std/cpp/NativeSys.hx

@@ -9,104 +9,104 @@ extern class NativeSys
    @:native("__hxcpp_println")
    public static function println( v : Dynamic ) : Void { }
 
-   @:extern @:native("_hx_std_get_env")
-   public static function get_env(v:String) : String return null;
+   @:native("_hx_std_get_env")
+   extern public static function get_env(v:String) : String return null;
 
 
-   @:extern @:native("_hx_std_put_env")
-   public static function put_env(e:String,v:String) : Void { }
+   @:native("_hx_std_put_env")
+   extern public static function put_env(e:String,v:String) : Void { }
 
 
-   @:extern @:native("_hx_std_sys_sleep")
-   public static function sys_sleep(f:Float) : Void { }
+   @:native("_hx_std_sys_sleep")
+   extern public static function sys_sleep(f:Float) : Void { }
 
 
-   @:extern @:native("_hx_std_set_time_locale")
-   public static function set_time_locale(l:String) : Bool return false;
+   @:native("_hx_std_set_time_locale")
+   extern public static function set_time_locale(l:String) : Bool return false;
 
 
-   @:extern @:native("_hx_std_get_cwd")
-   public static function get_cwd() : String return null;
+   @:native("_hx_std_get_cwd")
+   extern public static function get_cwd() : String return null;
 
 
-   @:extern @:native("_hx_std_set_cwd")
-   public static function set_cwd(d:String) : Void { }
+   @:native("_hx_std_set_cwd")
+   extern public static function set_cwd(d:String) : Void { }
 
 
-   @:extern @:native("_hx_std_sys_string")
-   public static function sys_string() : String return null;
+   @:native("_hx_std_sys_string")
+   extern public static function sys_string() : String return null;
 
 
-   @:extern @:native("_hx_std_sys_is64")
-   public static function sys_is64() : Bool return false;
+   @:native("_hx_std_sys_is64")
+   extern public static function sys_is64() : Bool return false;
 
 
-   @:extern @:native("_hx_std_sys_command")
-   public static function sys_command(cmd:String) : Int return 0;
+   @:native("_hx_std_sys_command")
+   extern public static function sys_command(cmd:String) : Int return 0;
 
 
-   @:extern @:native("_hx_std_sys_exit")
-   public static function sys_exit(code:Int) : Void { }
+   @:native("_hx_std_sys_exit")
+   extern public static function sys_exit(code:Int) : Void { }
 
 
-   @:extern @:native("_hx_std_sys_exists")
-   public static function sys_exists(path:String) : Bool return false;
+   @:native("_hx_std_sys_exists")
+   extern public static function sys_exists(path:String) : Bool return false;
 
 
-   @:extern @:native("_hx_std_file_delete")
-   public static function file_delete(path:String) : Void { }
+   @:native("_hx_std_file_delete")
+   extern public static function file_delete(path:String) : Void { }
 
 
-   @:extern @:native("_hx_std_sys_rename")
-   public static function sys_rename(path:String,newname:String) : Bool return false;
+   @:native("_hx_std_sys_rename")
+   extern public static function sys_rename(path:String,newname:String) : Bool return false;
 
 
-   @:extern @:native("_hx_std_sys_stat")
-   public static function sys_stat(path:String) : Dynamic return null;
+   @:native("_hx_std_sys_stat")
+   extern public static function sys_stat(path:String) : Dynamic return null;
 
 
-   @:extern @:native("_hx_std_sys_file_type")
-   public static function sys_file_type(path:String) : String return null;
+   @:native("_hx_std_sys_file_type")
+   extern public static function sys_file_type(path:String) : String return null;
 
 
-   @:extern @:native("_hx_std_sys_create_dir")
-   public static function sys_create_dir(path:String,mode:Int) : Bool return false;
+   @:native("_hx_std_sys_create_dir")
+   extern public static function sys_create_dir(path:String,mode:Int) : Bool return false;
 
 
-   @:extern @:native("_hx_std_sys_remove_dir")
-   public static function sys_remove_dir(path:String) : Void { }
+   @:native("_hx_std_sys_remove_dir")
+   extern public static function sys_remove_dir(path:String) : Void { }
 
 
-   @:extern @:native("_hx_std_sys_time")
-   public static function sys_time() : Float return 0;
+   @:native("_hx_std_sys_time")
+   extern public static function sys_time() : Float return 0;
 
 
-   @:extern @:native("_hx_std_sys_cpu_time")
-   public static function sys_cpu_time() : Float return 0;
+   @:native("_hx_std_sys_cpu_time")
+   extern public static function sys_cpu_time() : Float return 0;
 
 
-   @:extern @:native("_hx_std_sys_read_dir")
-   public static function sys_read_dir(p:String) : Array<String> return null;
+   @:native("_hx_std_sys_read_dir")
+   extern public static function sys_read_dir(p:String) : Array<String> return null;
 
 
-   @:extern @:native("_hx_std_file_full_path")
-   public static function file_full_path(path:String) : String return null;
+   @:native("_hx_std_file_full_path")
+   extern public static function file_full_path(path:String) : String return null;
 
 
-   @:extern @:native("_hx_std_sys_exe_path")
-   public static function sys_exe_path() : String return null;
+   @:native("_hx_std_sys_exe_path")
+   extern public static function sys_exe_path() : String return null;
 
 
-   @:extern @:native("_hx_std_sys_env")
-   public static function sys_env() : Array<String> return null;
+   @:native("_hx_std_sys_env")
+   extern public static function sys_env() : Array<String> return null;
 
 
-   @:extern @:native("_hx_std_sys_getch")
-   public static function sys_getch(b:Bool) : Int return 0;
+   @:native("_hx_std_sys_getch")
+   extern public static function sys_getch(b:Bool) : Int return 0;
 
 
-   @:extern @:native("_hx_std_sys_get_pid")
-   public static function sys_get_pid() : Int return 0;
+   @:native("_hx_std_sys_get_pid")
+   extern public static function sys_get_pid() : Int return 0;
 
 }
 

+ 3 - 3
std/cpp/NativeXml.hx

@@ -123,7 +123,7 @@ class NativeXmlState
       x._nodeValue = text.substr(1);
       cur.addChild(x);
    }
-   
+
    @:keep
    public function done()
    {
@@ -244,8 +244,8 @@ class Xml {
    function new() : Void {
    }
 
-   @:extern @:native("parse_xml")
-   static function parse_xml(str:String, state:NativeXmlState) { }
+   @:native("parse_xml")
+   extern static function parse_xml(str:String, state:NativeXmlState) { }
 
    public static function parse( str : String ) : Xml
    {

+ 1 - 1
std/cpp/StdString.hx

@@ -8,7 +8,7 @@ using cpp.NativeString;
 @:structAccess
 extern class StdString extends StdStringRef
 {
-   @:extern @:native("std::string::npos")
+   @:native("std::string::npos")
    public static var npos(default,null):Int;
 
    //public function new(inData:StdStringData);

+ 24 - 24
std/cpp/VirtualArray.hx

@@ -32,9 +32,9 @@ package cpp;
 abstract VirtualArray(NativeVirtualArray)
 {
    // Add these two functions...
-   @:from @:extern inline static public function fromArray<T>(a:Array<T>) : VirtualArray
+   @:from extern inline static public function fromArray<T>(a:Array<T>) : VirtualArray
       return untyped a;
-   @:to @:extern inline public function toArray<T>() : Array<T>
+   @:to extern inline public function toArray<T>() : Array<T>
       return untyped this;
 
 
@@ -43,36 +43,36 @@ abstract VirtualArray(NativeVirtualArray)
    // The rest is just boiler-plate
    inline public function new() this=new NativeVirtualArray();
 
-   @:extern @:arrayAccess inline function get(idx:Int) : Dynamic
+   @:arrayAccess extern inline function get(idx:Int) : Dynamic
       return untyped this[idx];
 
-   @:extern @:arrayAccess inline function set<T>(pos:Int, value:T ) : T
+   @:arrayAccess extern inline function set<T>(pos:Int, value:T ) : T
       return untyped this[idx] = value;
 
    public var length(get,never) : Int;
-   @:extern inline public function get_length() : Int return this.length;
+   extern inline public function get_length() : Int return this.length;
 
 
 
    // concat<T>( a:Array<T> ) : Array<T> ?
-   @:extern inline public function concat( a : VirtualArray ) : VirtualArray return this.concat(a);
-   @:extern inline public function join( sep : String ) : String return this.join(sep);
-   @:extern inline public function pop() : Dynamic return this.pop();
-   @:extern inline public function push(x : Dynamic) : Int return this.push(x);
-   @:extern inline public function reverse() : Void this.reverse();
-   @:extern inline public function shift() : Dynamic return this.shift();
-   @:extern inline public function slice( pos : Int, ?end : Int ) : VirtualArray return this.slice(pos,end);
-   @:extern inline public function sort( f : Dynamic -> Dynamic -> Int ) : Void this.sort(f);
-   @:extern inline public function splice( pos : Int, len : Int ) : VirtualArray return this.slice(pos,len);
-   @:extern inline public function unshift( x : Dynamic ) : Void this.unshift(x);
-   @:extern inline public function insert( pos : Int, x : Dynamic ) : Void this.insert(pos,x);
-   @:extern inline public function remove( x : Dynamic ) : Bool return this.remove(x);
-   @:extern inline public function indexOf( x : Dynamic, ?fromIndex:Int ) : Int return this.indexOf(x,fromIndex);
-   @:extern inline public function lastIndexOf( x : Dynamic, ?fromIndex:Int ) : Int return this.lastIndexOf(x,fromIndex);
-   @:extern inline public function copy() : VirtualArray return this.copy();
-   @:extern inline public function iterator() : Iterator<Dynamic> return this.iterator();
-   @:extern inline public function map<S>( f : Dynamic -> S ) : VirtualArray return this.map(f);
-   @:extern inline public function filter( f : Dynamic -> Bool ) : VirtualArray return this.filter(f);
-   @:extern inline public function resize( len : Int ) : Void return this.resize(len);
+   extern inline public function concat( a : VirtualArray ) : VirtualArray return this.concat(a);
+   extern inline public function join( sep : String ) : String return this.join(sep);
+   extern inline public function pop() : Dynamic return this.pop();
+   extern inline public function push(x : Dynamic) : Int return this.push(x);
+   extern inline public function reverse() : Void this.reverse();
+   extern inline public function shift() : Dynamic return this.shift();
+   extern inline public function slice( pos : Int, ?end : Int ) : VirtualArray return this.slice(pos,end);
+   extern inline public function sort( f : Dynamic -> Dynamic -> Int ) : Void this.sort(f);
+   extern inline public function splice( pos : Int, len : Int ) : VirtualArray return this.slice(pos,len);
+   extern inline public function unshift( x : Dynamic ) : Void this.unshift(x);
+   extern inline public function insert( pos : Int, x : Dynamic ) : Void this.insert(pos,x);
+   extern inline public function remove( x : Dynamic ) : Bool return this.remove(x);
+   extern inline public function indexOf( x : Dynamic, ?fromIndex:Int ) : Int return this.indexOf(x,fromIndex);
+   extern inline public function lastIndexOf( x : Dynamic, ?fromIndex:Int ) : Int return this.lastIndexOf(x,fromIndex);
+   extern inline public function copy() : VirtualArray return this.copy();
+   extern inline public function iterator() : Iterator<Dynamic> return this.iterator();
+   extern inline public function map<S>( f : Dynamic -> S ) : VirtualArray return this.map(f);
+   extern inline public function filter( f : Dynamic -> Bool ) : VirtualArray return this.filter(f);
+   extern inline public function resize( len : Int ) : Void return this.resize(len);
 }
 

+ 8 - 8
std/cpp/_std/EReg.hx

@@ -178,15 +178,15 @@
 	}
 	static var escapeRegExpRe = ~/[\[\]{}()*+?.\\\^$|]/g;
 
-   @:extern @:native("_hx_regexp_new_options")
-	static function _hx_regexp_new_options(s:String, options:String) : Dynamic return null;
+   @:native("_hx_regexp_new_options")
+	extern static function _hx_regexp_new_options(s:String, options:String) : Dynamic return null;
 
-   @:extern @:native("_hx_regexp_match")
-	static function _hx_regexp_match(handler: Dynamic, string:String, pos:Int, len:Int) : Bool return false;
+   @:native("_hx_regexp_match")
+	extern static function _hx_regexp_match(handler: Dynamic, string:String, pos:Int, len:Int) : Bool return false;
 
-   @:extern @:native("_hx_regexp_matched")
-	static function _hx_regexp_matched(handle:Dynamic, pos:Int) : String return null;
+   @:native("_hx_regexp_matched")
+	extern static function _hx_regexp_matched(handle:Dynamic, pos:Int) : String return null;
 
-   @:extern @:native("_hx_regexp_matched_pos")
-	static function _hx_regexp_matched_pos(handle:Dynamic, match:Int) : {pos:Int, len:Int} return null;
+   @:native("_hx_regexp_matched_pos")
+	extern static function _hx_regexp_matched_pos(handle:Dynamic, match:Int) : {pos:Int, len:Int} return null;
 }

+ 2 - 2
std/cpp/_std/Type.hx

@@ -140,8 +140,8 @@ enum ValueType {
 			return value._hx_getParameters();
 	}
 
-   @:extern @:native("_hx_getEnumValueIndex")
-	private static function getEnumValueIndex( e : EnumValue ) : Int return 0;
+    @:native("_hx_getEnumValueIndex")
+	extern private static function getEnumValueIndex( e : EnumValue ) : Int return 0;
 
 	#if !cppia inline #end public static function enumIndex( e : EnumValue ) : Int {
 			return getEnumValueIndex(e);

+ 2 - 2
std/cpp/_std/haxe/Log.hx

@@ -23,8 +23,8 @@ package haxe;
 
 @:coreApi class Log {
 
-   @:extern @:native("__trace")
-   private static function nativeTrace(message:String, posInfo:Dynamic) : Void { }
+   @:native("__trace")
+   extern private static function nativeTrace(message:String, posInfo:Dynamic) : Void { }
 
 	public static dynamic function trace( v : Dynamic, ?infos : PosInfos ) : Void {
 		if (infos!=null && infos.customParams!=null) {

+ 10 - 10
std/cpp/_std/haxe/zip/Compress.hx

@@ -53,19 +53,19 @@ class Compress {
 		return out.sub(0,r.write);
 	}
 
-   @:extern @:native("_hx_deflate_init")
-	static function _deflate_init(level:Int) : Dynamic return null;
+    @:native("_hx_deflate_init")
+	extern static function _deflate_init(level:Int) : Dynamic return null;
 
-   @:extern @:native("_hx_deflate_bound")
-	static function _deflate_bound(handle:Dynamic,length:Int):Int return 0;
+    @:native("_hx_deflate_bound")
+	extern static function _deflate_bound(handle:Dynamic,length:Int):Int return 0;
 
-   @:extern @:native("_hx_deflate_buffer")
-	static function _deflate_buffer(handle:Dynamic, src:haxe.io.BytesData, srcPos:Int,  dest:haxe.io.BytesData, destPos:Int) : { done : Bool, read : Int, write : Int } return null;
+    @:native("_hx_deflate_buffer")
+	extern static function _deflate_buffer(handle:Dynamic, src:haxe.io.BytesData, srcPos:Int,  dest:haxe.io.BytesData, destPos:Int) : { done : Bool, read : Int, write : Int } return null;
 
-   @:extern @:native("_hx_deflate_end")
-	static function _deflate_end(handle:Dynamic) : Void { }
+    @:native("_hx_deflate_end")
+	extern static function _deflate_end(handle:Dynamic) : Void { }
 
-   @:extern @:native("_hx_zip_set_flush_mode")
-	static function _set_flush_mode(handle:Dynamic, flushMode:String):Void { }
+    @:native("_hx_zip_set_flush_mode")
+	extern static function _set_flush_mode(handle:Dynamic, flushMode:String):Void { }
 
 }

+ 8 - 8
std/cpp/_std/haxe/zip/Uncompress.hx

@@ -59,16 +59,16 @@ class Uncompress {
 		return b.getBytes();
 	}
 
-   @:extern @:native("_hx_inflate_init")
-	static function _inflate_init(windowBits:Dynamic) : Dynamic return null;
+   @:native("_hx_inflate_init")
+	extern static function _inflate_init(windowBits:Dynamic) : Dynamic return null;
 
-   @:extern @:native("_hx_inflate_buffer")
-	static function _inflate_buffer(handle:Dynamic, src:haxe.io.BytesData, srcPos:Int,  dest:haxe.io.BytesData, destPos:Int) : { done : Bool, read : Int, write : Int } return null;
+   @:native("_hx_inflate_buffer")
+	extern static function _inflate_buffer(handle:Dynamic, src:haxe.io.BytesData, srcPos:Int,  dest:haxe.io.BytesData, destPos:Int) : { done : Bool, read : Int, write : Int } return null;
 
-   @:extern @:native("_hx_inflate_end")
-	static function _inflate_end(handle:Dynamic):Void { }
+   @:native("_hx_inflate_end")
+	extern static function _inflate_end(handle:Dynamic):Void { }
 
-   @:extern @:native("_hx_zip_set_flush_mode")
-	static function _set_flush_mode(handle:Dynamic, flushMode:String):Void { }
+   @:native("_hx_zip_set_flush_mode")
+	extern static function _set_flush_mode(handle:Dynamic, flushMode:String):Void { }
 
 }

+ 27 - 27
std/cpp/_std/sys/db/Mysql.hx

@@ -24,33 +24,33 @@ package sys.db;
 @:keep
 private class D {
 
-   @:extern @:native("_hx_mysql_connect")
-	public static function connect(params:Dynamic):Dynamic return null;
-   @:extern @:native("_hx_mysql_select_db")
-	public static function select_db(handle:Dynamic, db:String):Void { }
-   @:extern @:native("_hx_mysql_request")
-	public static function request(handle:Dynamic,req:String):Dynamic return null;
-   @:extern @:native("_hx_mysql_close")
-	public static function close(handle:Dynamic):Dynamic return null;
-   @:extern @:native("_hx_mysql_escape")
-	public static function escape(handle:Dynamic,str:String):String return null;
-   @:extern @:native("_hx_mysql_result_get_length")
-	public static function result_get_length(handle:Dynamic):Int return 0;
-   @:extern @:native("_hx_mysql_result_get_nfields")
-	public static function result_get_nfields(handle:Dynamic):Int return 0;
-   @:extern @:native("_hx_mysql_result_next")
-	public static function result_next(handle:Dynamic):Dynamic return null;
-   @:extern @:native("_hx_mysql_result_get")
-	public static function result_get(handle:Dynamic,i:Int) : String return null;
-   @:extern @:native("_hx_mysql_result_get_int")
-	public static function result_get_int(handle:Dynamic,i:Int) : Int return 0;
-   @:extern @:native("_hx_mysql_result_get_float")
-	public static function result_get_float(handle:Dynamic,i:Int):Float return 0.0;
-   @:extern @:native("_hx_mysql_result_get_fields_names")
-	public static function result_fields_names(handle:Dynamic):Array<String> return null;
-
-   @:extern @:native("_hx_mysql_set_conversion")
-	public static function set_conv_funs(
+   @:native("_hx_mysql_connect")
+	extern public static function connect(params:Dynamic):Dynamic return null;
+   @:native("_hx_mysql_select_db")
+	extern public static function select_db(handle:Dynamic, db:String):Void { }
+   @:native("_hx_mysql_request")
+	extern public static function request(handle:Dynamic,req:String):Dynamic return null;
+   @:native("_hx_mysql_close")
+	extern public static function close(handle:Dynamic):Dynamic return null;
+   @:native("_hx_mysql_escape")
+	extern public static function escape(handle:Dynamic,str:String):String return null;
+   @:native("_hx_mysql_result_get_length")
+	extern public static function result_get_length(handle:Dynamic):Int return 0;
+   @:native("_hx_mysql_result_get_nfields")
+	extern public static function result_get_nfields(handle:Dynamic):Int return 0;
+   @:native("_hx_mysql_result_next")
+	extern public static function result_next(handle:Dynamic):Dynamic return null;
+   @:native("_hx_mysql_result_get")
+	extern public static function result_get(handle:Dynamic,i:Int) : String return null;
+   @:native("_hx_mysql_result_get_int")
+	extern public static function result_get_int(handle:Dynamic,i:Int) : Int return 0;
+   @:native("_hx_mysql_result_get_float")
+	extern public static function result_get_float(handle:Dynamic,i:Int):Float return 0.0;
+   @:native("_hx_mysql_result_get_fields_names")
+	extern public static function result_fields_names(handle:Dynamic):Array<String> return null;
+
+   @:native("_hx_mysql_set_conversion")
+	extern public static function set_conv_funs(
       charsToBytes: cpp.Callable< Dynamic -> Dynamic >,
       intToDate: cpp.Callable< Float -> Dynamic > ) : Void {}
 

+ 20 - 20
std/cpp/_std/sys/db/Sqlite.hx

@@ -96,14 +96,14 @@ private class SqliteConnection implements Connection {
 	}
 
 
-   @:extern @:native("_hx_sqlite_connect")
-	public static function _connect(filename:String):Dynamic return null;
-   @:extern @:native("_hx_sqlite_request")
-	public static function _request(handle:Dynamic,req:String):Dynamic return null;
-   @:extern @:native("_hx_sqlite_close")
-	public static function _close(handle:Dynamic):Void { };
-   @:extern @:native("_hx_sqlite_last_insert_id")
-	public static function _last_id(handle:Dynamic):Int return 0;
+   @:native("_hx_sqlite_connect")
+	extern public static function _connect(filename:String):Dynamic return null;
+   @:native("_hx_sqlite_request")
+	extern public static function _request(handle:Dynamic,req:String):Dynamic return null;
+   @:native("_hx_sqlite_close")
+	extern public static function _close(handle:Dynamic):Void { };
+   @:native("_hx_sqlite_last_insert_id")
+	extern public static function _last_id(handle:Dynamic):Int return 0;
 
 }
 
@@ -182,18 +182,18 @@ private class SqliteResultSet implements ResultSet {
 
 
 
-   @:extern @:native("_hx_sqlite_result_next")
-	public static function result_next(handle:Dynamic):Dynamic return null;
-   @:extern @:native("_hx_sqlite_result_get_length")
-	public static function result_get_length(handle:Dynamic):Int return 0;
-   @:extern @:native("_hx_sqlite_result_get_nfields")
-	public static function result_get_nfields(handle:Dynamic):Int return 0;
-   @:extern @:native("_hx_sqlite_result_get")
-	public static function result_get(handle:Dynamic,i:Int) : String return null;
-   @:extern @:native("_hx_sqlite_result_get_int")
-	public static function result_get_int(handle:Dynamic,i:Int) : Int return 0;
-   @:extern @:native("_hx_sqlite_result_get_float")
-	public static function result_get_float(handle:Dynamic,i:Int):Float return 0.0;
+    @:native("_hx_sqlite_result_next")
+	extern public static function result_next(handle:Dynamic):Dynamic return null;
+    @:native("_hx_sqlite_result_get_length")
+	extern public static function result_get_length(handle:Dynamic):Int return 0;
+    @:native("_hx_sqlite_result_get_nfields")
+	extern public static function result_get_nfields(handle:Dynamic):Int return 0;
+    @:native("_hx_sqlite_result_get")
+	extern public static function result_get(handle:Dynamic,i:Int) : String return null;
+    @:native("_hx_sqlite_result_get_int")
+	extern public static function result_get_int(handle:Dynamic,i:Int) : Int return 0;
+    @:native("_hx_sqlite_result_get_float")
+	extern public static function result_get_float(handle:Dynamic,i:Int):Float return 0.0;
 
 }
 

+ 1 - 1
std/cpp/cppia/Host.hx

@@ -33,7 +33,7 @@ class Host
 
 
    @:native("hx::EnableJit")
-   @:extern public static function enableJit(enable:Bool) : Void { }
+   extern public static function enableJit(enable:Bool) : Void { }
 
    public static function runFile(filename:String)
    {

+ 8 - 8
std/cpp/objc/NSData.hx

@@ -26,26 +26,26 @@ package cpp.objc;
 @:objc
 extern abstract NSData( NSDataData )
 {
-   @:native("_hx_value_to_objc") @:extern static function to_data(b:haxe.io.BytesData) : NSData return null;
-   @:native("_hx_value_to_objc") @:extern static function to_data_data(b:haxe.io.BytesData) : NSDataData return null;
-   @:native("_hx_objc_to_bytes") @:extern static function NSDataDataToBytes(d:NSDataData) : haxe.io.BytesData return null;
+   @:native("_hx_value_to_objc") extern static function to_data(b:haxe.io.BytesData) : NSData return null;
+   @:native("_hx_value_to_objc") extern static function to_data_data(b:haxe.io.BytesData) : NSDataData return null;
+   @:native("_hx_objc_to_bytes") extern static function NSDataDataToBytes(d:NSDataData) : haxe.io.BytesData return null;
 
 
    inline function new(d:NSDataData) this = d;
 
-   @:from @:extern
+   @:from extern
    static public inline function fromBytesData(d:haxe.io.BytesData):NSData return new NSData( to_data_data(d) );
 
-   @:from @:extern
+   @:from extern
    static public inline function fromBytes(d:haxe.io.Bytes):NSData return new NSData( to_data_data(d.getData()) );
 
-   @:to @:extern
+   @:to extern
    public inline function toBytesData():haxe.io.BytesData return NSDataDataToBytes(this);
 
-   @:to @:extern
+   @:to extern
    public inline function toBytes():haxe.io.Bytes return haxe.io.Bytes.ofData(NSDataDataToBytes(this));
 
-   @:to @:extern public inline function toNSObject():NSObject return cast this;
+   @:to extern public inline function toNSObject():NSObject return cast this;
 
 }
 

+ 5 - 5
std/cpp/objc/NSDictionary.hx

@@ -26,19 +26,19 @@ package cpp.objc;
 @:objc
 extern abstract NSDictionary( DictionaryData )
 {
-   @:native("_hx_obj_to_nsdictionary") @:extern static function _hx_obj_to_nsdictionary(obj:Dynamic) : DictionaryData return null;
-   @:native("_hx_nsdictionary_to_obj") @:extern static function _hx_nsdictionary_to_obj(d:DictionaryData) : Dynamic return null;
+   @:native("_hx_obj_to_nsdictionary") extern static function _hx_obj_to_nsdictionary(obj:Dynamic) : DictionaryData return null;
+   @:native("_hx_nsdictionary_to_obj") extern static function _hx_nsdictionary_to_obj(d:DictionaryData) : Dynamic return null;
 
 
    inline function new(dict:DictionaryData) this = dict;
 
-   @:from @:extern
+   @:from extern
    static public inline function fromDynamic(o:Dynamic):NSDictionary return new NSDictionary( _hx_obj_to_nsdictionary(o) );
 
-   @:to @:extern
+   @:to extern
    public inline function toDynamic():Dynamic return _hx_nsdictionary_to_obj(this);
 
-   @:to @:extern public inline function toNSObject():NSObject return cast this;
+   @:to extern public inline function toNSObject():NSObject return cast this;
 
 }
 

+ 4 - 4
std/cpp/objc/NSObject.hx

@@ -26,18 +26,18 @@ package cpp.objc;
 @:objc
 extern abstract NSObject( NSObjectData )
 {
-   @:native("_hx_value_to_objc") @:extern static function _hx_value_to_objc(obj:Dynamic) : NSObject return null;
-   @:native("_hx_objc_to_dynamic") @:extern static function _hx_objc_to_dynamic(d:NSObjectData) : Dynamic return null;
+   @:native("_hx_value_to_objc") extern static function _hx_value_to_objc(obj:Dynamic) : NSObject return null;
+   @:native("_hx_objc_to_dynamic") extern static function _hx_objc_to_dynamic(d:NSObjectData) : Dynamic return null;
 
 
    inline function new(d:NSObjectData) this = d;
 
 
-   @:from @:extern
+   @:from extern
    static public inline function fromHaxe(d:Dynamic):NSObject return _hx_value_to_objc(d);
 
 
-   @:to @:extern
+   @:to extern
    public inline function toHaxe():Dynamic return _hx_objc_to_dynamic(this);
 }
 

+ 6 - 6
std/cpp/objc/NSString.hx

@@ -27,19 +27,19 @@ package cpp.objc;
 extern abstract NSString( NSStringData )
 {
    inline function new(s:NSStringData) this = s;
-   @:native("(id)") @:extern static function toObject(d:NSStringData) : NSObject return null;
+   @:native("(id)") extern static function toObject(d:NSStringData) : NSObject return null;
 
-   @:native("(NSString *)") @:extern static function castFromString(s:String) : NSString return null;
-   @:native("String") @:extern static function castToString(s:NSStringData) : String return null;
+   @:native("(NSString *)") extern static function castFromString(s:String) : NSString return null;
+   @:native("String") extern static function castToString(s:NSStringData) : String return null;
 
 
-   @:from @:extern
+   @:from extern
    static public inline function fromString(s:String):NSString return castFromString(s);
 
 
-   @:to @:extern
+   @:to extern
    public inline function toString():String return castToString(this);
 
-   @:to @:extern public inline function toNSObject():NSObject return toObject(this);
+   @:to extern public inline function toNSObject():NSObject return toObject(this);
 }
 

+ 1 - 1
std/cpp/vm/Gc.hx

@@ -105,7 +105,7 @@ class Gc
       cpp.NativeGc.setMinimumWorkingMemory(inBytes);
 
    #if !cppia
-   @:native("__hxcpp_set_finalizer") @:extern
+   @:native("__hxcpp_set_finalizer") extern
    static public function setFinalizer<T>(inObject:T, inFinalizer:cpp.Callable<T->Void> ) : Void { }
    #end
 }

+ 10 - 10
std/cs/Flags.hx

@@ -38,14 +38,14 @@ abstract Flags<T : EnumValue>(T) from T to T
 		Creates a new `Flags` type with an optional initial value. If no initial value was specified,
 		the default enum value for an empty flags attribute is specified
 	 **/
-	@:extern inline public function new(?initial:T)
+	extern inline public function new(?initial:T)
 		this = initial;
 
 	/**
 		Accessible through the bitwise OR operator (`|`). Returns a new `Flags` type with the flags
 		passed at `flags` added to it.
 	 **/
-	@:op(A|B) @:extern inline public function add(flags:Flags<T>):Flags<T>
+	@:op(A|B) extern inline public function add(flags:Flags<T>):Flags<T>
 	{
 		return new Flags(underlying() | flags.underlying());
 	}
@@ -54,7 +54,7 @@ abstract Flags<T : EnumValue>(T) from T to T
 		Accessible through the bitwise AND operator (`&`). Returns a new `Flags` type with
 		the flags that are set on both `this` and `flags`
 	 **/
-	@:op(A&B) @:extern inline public function bitAnd(flags:Flags<T>):Flags<T>
+	@:op(A&B) extern inline public function bitAnd(flags:Flags<T>):Flags<T>
 	{
 		return new Flags(underlying() & flags.underlying());
 	}
@@ -62,7 +62,7 @@ abstract Flags<T : EnumValue>(T) from T to T
 	/**
 		Accessible through the bitwise XOR operator (`^`).
 	 **/
-	@:op(A^B) @:extern inline public function bitXor(flags:Flags<T>):Flags<T>
+	@:op(A^B) extern inline public function bitXor(flags:Flags<T>):Flags<T>
 	{
 		return new Flags(underlying() & flags.underlying());
 	}
@@ -71,7 +71,7 @@ abstract Flags<T : EnumValue>(T) from T to T
 		Accesible through the bitwise negation operator (`~`). Returns a new `Flags` type
 		with all unset flags as set - but the ones that are set already.
 	 **/
-	@:op(~A) @:extern inline public function bitNeg():Flags<T>
+	@:op(~A) extern inline public function bitNeg():Flags<T>
 	{
 		return new Flags(~underlying());
 	}
@@ -79,7 +79,7 @@ abstract Flags<T : EnumValue>(T) from T to T
 	/**
 		Returns a new `Flags` type with all flags set by `flags` unset
 	 **/
-	@:extern inline public function remove(flags:Flags<T>):Flags<T>
+	extern inline public function remove(flags:Flags<T>):Flags<T>
 	{
 		return new Flags(underlying() & ~flags.underlying());
 	}
@@ -87,7 +87,7 @@ abstract Flags<T : EnumValue>(T) from T to T
 	/**
 		Returns whether `flag` is present on `this` type
 	 **/
-	@:extern inline public function has(flag:T):Bool
+	extern inline public function has(flag:T):Bool
 	{
 		return underlying() & new Flags(flag).underlying() != null;
 	}
@@ -95,7 +95,7 @@ abstract Flags<T : EnumValue>(T) from T to T
 	/**
 		Returns whether `this` type has any flag set by `flags` also set
 	 **/
-	@:extern inline public function hasAny(flags:Flags<T>):Bool
+	extern inline public function hasAny(flags:Flags<T>):Bool
 	{
 		return underlying() & flags.underlying() != null;
 	}
@@ -103,12 +103,12 @@ abstract Flags<T : EnumValue>(T) from T to T
 	/**
 		Returns whether `this` type has all flags set by `flags` also set
 	 **/
-	@:extern inline public function hasAll(flags:Flags<T>):Bool
+	extern inline public function hasAll(flags:Flags<T>):Bool
 	{
 		return underlying() & flags.underlying() == flags.underlying();
 	}
 
-	@:extern inline private function underlying():EnumUnderlying<T>
+	extern inline private function underlying():EnumUnderlying<T>
 		return this;
 }
 

+ 11 - 11
std/cs/Lib.hx

@@ -57,7 +57,7 @@ class Lib
 
 		If equalLengthRequired is true, the result might be a copy of an array with the correct size.
 	**/
-	@:extern inline public static function nativeArray<T>(arr:Array<T>, equalLengthRequired:Bool):NativeArray<T>
+	extern inline public static function nativeArray<T>(arr:Array<T>, equalLengthRequired:Bool):NativeArray<T>
 	{
 		var ret = new cs.NativeArray(arr.length);
 #if erase_generics
@@ -85,7 +85,7 @@ class Lib
 		This function will not work with Value Types (such as Int, Float, Bool...)
 	**/
 	@:pure
-	@:extern public static inline function as<T>(obj:Dynamic, cl:Class<T>):T
+	extern public static inline function as<T>(obj:Dynamic, cl:Class<T>):T
 	{
 		return untyped __as__(obj);
 	}
@@ -176,7 +176,7 @@ class Lib
 		Rethrow an exception. This is useful when manually filtering an exception in order
 		to keep the previous exception stack.
 	**/
-	@:extern inline public static function rethrow(e:Dynamic):Void
+	extern inline public static function rethrow(e:Dynamic):Void
 	{
 		throw untyped __rethrow__;
 	}
@@ -194,7 +194,7 @@ class Lib
 			});
 		This method only exists at compile-time, so it can't be called via reflection.
 	**/
-	@:extern public static inline function checked<V>(block:V):Void
+	extern public static inline function checked<V>(block:V):Void
 	{
 		untyped __checked__(block);
 	}
@@ -206,7 +206,7 @@ class Lib
 
 		This method only exists at compile-time, so it can't be called via reflection.
 	**/
-	@:extern public static inline function lock<O,V>(obj:O, block:V):Void
+	extern public static inline function lock<O,V>(obj:O, block:V):Void
 	{
 		untyped __lock__(obj, block);
 	}
@@ -228,7 +228,7 @@ class Lib
 
 		This method only exists at compile-time, so it can't be called via reflection.
 	**/
-	@:extern public static inline function fixed<V>(block:V):Void
+	extern public static inline function fixed<V>(block:V):Void
 	{
 		untyped __fixed__(block);
 	}
@@ -242,7 +242,7 @@ class Lib
 
 		This method only exists at compile-time, so it can't be called via reflection.
 	**/
-	@:extern public static inline function unsafe<V>(block:V):Void
+	extern public static inline function unsafe<V>(block:V):Void
 	{
 		untyped __unsafe__(block);
 	}
@@ -260,7 +260,7 @@ class Lib
 		This method only exists at compile-time, so it can't be called via reflection.
 		Warning: This method will only work if a local variable is passed as an argument.
 	**/
-	@:extern public static inline function addressOf<T>(variable:T):cs.Pointer<T>
+	extern public static inline function addressOf<T>(variable:T):cs.Pointer<T>
 	{
 		return untyped __addressOf__(variable);
 	}
@@ -279,7 +279,7 @@ class Lib
 
 		This method only exists at compile-time, so it can't be called via reflection.
 	**/
-	@:extern public static inline function valueOf<T>(pointer:cs.Pointer<T>):T
+	extern public static inline function valueOf<T>(pointer:cs.Pointer<T>):T
 	{
 		return untyped __valueOf__(pointer);
 	}
@@ -300,7 +300,7 @@ class Lib
 
 		This method only exists at compile-time, so it can't be called via reflection.
 	**/
-	@:extern public static inline function pointerOfArray<T>(array:cs.NativeArray<T>):cs.Pointer<T>
+	extern public static inline function pointerOfArray<T>(array:cs.NativeArray<T>):cs.Pointer<T>
 	{
 		return untyped __ptr__(array);
 	}
@@ -308,7 +308,7 @@ class Lib
 	/**
 		Returns the byte size of the given struct. Only works with structs and basic types.
 	**/
-	@:extern public static inline function sizeof(struct:Class<Dynamic>):Int
+	extern public static inline function sizeof(struct:Class<Dynamic>):Int
 	{
 		return untyped __sizeof__(struct);
 	}

+ 2 - 2
std/cs/NativeArray.hx

@@ -48,14 +48,14 @@ extern class NativeArray<T> extends cs.system.Array implements ArrayAccess<T>
 	 **/
 	public var length(get,never):Int;
 
-	@:extern inline private function get_length():Int return this.Length;
+	extern inline private function get_length():Int return this.Length;
 
 	static function Reverse(arr:cs.system.Array):Void;
 
 	/**
 		Returns an iterator so it's possible to use `for` with C#'s `NativeArray`
 	 **/
-	@:extern inline public function iterator():NativeArrayIterator<T>
+	extern inline public function iterator():NativeArrayIterator<T>
 		return new NativeArrayIterator(this);
 }
 

+ 1 - 1
std/cs/Pointer.hx

@@ -85,7 +85,7 @@ import cs.StdTypes.Int64;
 	public var acc(get,never):PointerAccess<T>;
 
 	// @:analyzer(no_simplification)
-	@:extern inline private function get_acc():PointerAccess<T> return (cast this : PointerAccess<T>);
+	extern inline private function get_acc():PointerAccess<T> return (cast this : PointerAccess<T>);
 
 	// backwards compatibility
 	inline public function add(i:Int):Pointer<T>

+ 1 - 1
std/cs/_std/Std.hx

@@ -191,7 +191,7 @@ import cs.internal.Exceptions;
 			Math.NaN;
 	}
 
-	@:extern inline public static function instance<T:{},S:T>( value : T, c : Class<S> ) : S {
+	extern inline public static function instance<T:{},S:T>( value : T, c : Class<S> ) : S {
 		return cs.Lib.as(value,c);
 	}
 

+ 11 - 11
std/cs/_std/haxe/ds/ObjectMap.hx

@@ -25,9 +25,9 @@ import cs.NativeArray;
 
 @:coreApi class ObjectMap<K:{}, V> implements haxe.Constraints.IMap<K,V>
 {
-	@:extern private static inline var HASH_UPPER = 0.77;
-	@:extern private static inline var FLAG_EMPTY = 0;
-	@:extern private static inline var FLAG_DEL = 1;
+	extern private static inline var HASH_UPPER = 0.77;
+	extern private static inline var FLAG_EMPTY = 0;
+	extern private static inline var FLAG_DEL = 1;
 
 	/**
 	 * This is the most important structure here and the reason why it's so fast.
@@ -420,7 +420,7 @@ import cs.NativeArray;
 		return s.toString();
 	}
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 		--x;
 		x |= (x) >>> 1;
@@ -431,20 +431,20 @@ import cs.NativeArray;
 		return ++x;
 	}
 
-	@:extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
+	extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
 		return (((k) >> 3 ^ (k) << 3) | 1) & (mask);
 
-	@:extern private static inline function isEither(v:HashType):Bool
+	extern private static inline function isEither(v:HashType):Bool
 		return (v & 0xFFFFFFFE) == 0;
 
-	@:extern private static inline function isEmpty(v:HashType):Bool
+	extern private static inline function isEmpty(v:HashType):Bool
 		return v == FLAG_EMPTY;
 
-	@:extern private static inline function isDel(v:HashType):Bool
+	extern private static inline function isDel(v:HashType):Bool
 		return v == FLAG_DEL;
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
-	@:extern private static inline function hash<K>(s:K):HashType
+	extern private static inline function hash<K>(s:K):HashType
 	{
 		var k:Int = untyped s.GetHashCode();
 		//k *= 357913941;
@@ -472,10 +472,10 @@ import cs.NativeArray;
 		return ret;
 	}
 
-	@:extern private static inline function arrayCopy(sourceArray:cs.system.Array, sourceIndex:Int, destinationArray:cs.system.Array, destinationIndex:Int, length:Int):Void
+	extern private static inline function arrayCopy(sourceArray:cs.system.Array, sourceIndex:Int, destinationArray:cs.system.Array, destinationIndex:Int, length:Int):Void
 		cs.system.Array.Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length);
 
-	@:extern private static inline function assert(x:Bool):Void
+	extern private static inline function assert(x:Bool):Void
 	{
 #if DEBUG_HASHTBL
 		if (!x) throw "assert failed";

+ 10 - 10
std/cs/_std/haxe/ds/StringMap.hx

@@ -25,9 +25,9 @@ import cs.NativeArray;
 
 @:coreApi class StringMap<T> implements haxe.Constraints.IMap<String,T>
 {
-	@:extern private static inline var HASH_UPPER = 0.77;
-	@:extern private static inline var FLAG_EMPTY = 0;
-	@:extern private static inline var FLAG_DEL = 1;
+	extern private static inline var HASH_UPPER = 0.77;
+	extern private static inline var FLAG_EMPTY = 0;
+	extern private static inline var FLAG_DEL = 1;
 
 	/**
 	 * This is the most important structure here and the reason why it's so fast.
@@ -424,7 +424,7 @@ import cs.NativeArray;
 		return s.toString();
 	}
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 		--x;
 		x |= (x) >>> 1;
@@ -435,17 +435,17 @@ import cs.NativeArray;
 		return ++x;
 	}
 
-	@:extern private static inline function isEither(v:HashType):Bool
+	extern private static inline function isEither(v:HashType):Bool
 		return (v & 0xFFFFFFFE) == 0;
 
-	@:extern private static inline function isEmpty(v:HashType):Bool
+	extern private static inline function isEmpty(v:HashType):Bool
 		return v == FLAG_EMPTY;
 
-	@:extern private static inline function isDel(v:HashType):Bool
+	extern private static inline function isDel(v:HashType):Bool
 		return v == FLAG_DEL;
 
 	// guarantee: Whatever this function is, it will never return 0 nor 1
-	@:extern private static inline function hash(s:String):HashType
+	extern private static inline function hash(s:String):HashType
 	{
 		var k:Int = untyped s.GetHashCode();
 		//k *= 357913941;
@@ -473,10 +473,10 @@ import cs.NativeArray;
 		return ret;
 	}
 
-	@:extern private static inline function arrayCopy(sourceArray:cs.system.Array, sourceIndex:Int, destinationArray:cs.system.Array, destinationIndex:Int, length:Int):Void
+	extern private static inline function arrayCopy(sourceArray:cs.system.Array, sourceIndex:Int, destinationArray:cs.system.Array, destinationIndex:Int, length:Int):Void
 		cs.system.Array.Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length);
 
-	@:extern private static inline function assert(x:Bool):Void
+	extern private static inline function assert(x:Bool):Void
 	{
 #if DEBUG_HASHTBL
 		if (!x) throw "assert failed";

+ 11 - 11
std/cs/_std/haxe/ds/WeakMap.hx2

@@ -27,9 +27,9 @@ import cs.system.WeakReference;
 // This implementation works by lazily evaluating the weak references, and only cleaning them up when needed.
 @:coreApi class WeakMap<K:{}, V> implements haxe.Constraints.IMap<K,V>
 {
-	@:extern private static inline var HASH_UPPER = 0.77;
-	@:extern private static inline var FLAG_EMPTY = 0;
-	@:extern private static inline var FLAG_DEL = 1;
+	extern private static inline var HASH_UPPER = 0.77;
+	extern private static inline var FLAG_EMPTY = 0;
+	extern private static inline var FLAG_DEL = 1;
 
 	/**
 	 * This is the most important structure here and the reason why it's so fast.
@@ -480,7 +480,7 @@ import cs.system.WeakReference;
 		return s.toString();
 	}
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 		--x;
 		x |= (x) >>> 1;
@@ -491,20 +491,20 @@ import cs.system.WeakReference;
 		return ++x;
 	}
 
-	@:extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
+	extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
 		return (((k) >> 3 ^ (k) << 3) | 1) & (mask);
 
-	@:extern private static inline function isEither(v:HashType):Bool
+	extern private static inline function isEither(v:HashType):Bool
 		return (v & 0xFFFFFFFE) == 0;
 
-	@:extern private static inline function isEmpty(v:HashType):Bool
+	extern private static inline function isEmpty(v:HashType):Bool
 		return v == FLAG_EMPTY;
 
-	@:extern private static inline function isDel(v:HashType):Bool
+	extern private static inline function isDel(v:HashType):Bool
 		return v == FLAG_DEL;
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
-	@:extern private static inline function hash(s:Dynamic):HashType
+	extern private static inline function hash(s:Dynamic):HashType
 	{
 		var k:Int = untyped s.GetHashCode();
 		//k *= 357913941;
@@ -532,10 +532,10 @@ import cs.system.WeakReference;
 		return ret;
 	}
 
-	@:extern private static inline function arrayCopy(sourceArray:cs.system.Array, sourceIndex:Int, destinationArray:cs.system.Array, destinationIndex:Int, length:Int):Void
+	extern private static inline function arrayCopy(sourceArray:cs.system.Array, sourceIndex:Int, destinationArray:cs.system.Array, destinationIndex:Int, length:Int):Void
 		cs.system.Array.Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length);
 
-	@:extern private static inline function assert(x:Bool):Void
+	extern private static inline function assert(x:Bool):Void
 	{
 #if DEBUG_HASHTBL
 		if (!x) throw "assert failed";

+ 1 - 1
std/cs/internal/FieldLookup.hx

@@ -290,7 +290,7 @@ package cs.internal;
 		a[length - 1] = null;
 	}
 
-	@:extern
+	extern
 	static inline function __insert<T>(a:cs.NativeArray<T>, length:Int, pos:Int, x:T):cs.NativeArray<T>
 	{
 		var capacity = a.Length;

+ 20 - 20
std/eval/_std/Sys.hx

@@ -23,19 +23,19 @@
 @:require(sys)
 @:coreApi
 class Sys {
-	@:extern static public function print(v:Dynamic):Void { }
-	@:extern static public function println(v:Dynamic):Void { }
-	@:extern static public function args():Array<String> { return []; }
-	@:extern static public function getEnv(s:String):String { return ""; }
-	@:extern static public function putEnv(s:String, v:String):Void { }
-	@:extern static public function environment():Map<String, String> { return null; }
-	@:extern static public function sleep(seconds:Float):Void { }
-	@:extern static public function setTimeLocale(loc:String):Bool { return false; }
-	@:extern static public function getCwd():String { return ""; }
-	@:extern static public function setCwd(s:String):Void { }
-	@:extern static public function systemName():String { return ""; }
+	extern static public function print(v:Dynamic):Void { }
+	extern static public function println(v:Dynamic):Void { }
+	extern static public function args():Array<String> { return []; }
+	extern static public function getEnv(s:String):String { return ""; }
+	extern static public function putEnv(s:String, v:String):Void { }
+	extern static public function environment():Map<String, String> { return null; }
+	extern static public function sleep(seconds:Float):Void { }
+	extern static public function setTimeLocale(loc:String):Bool { return false; }
+	extern static public function getCwd():String { return ""; }
+	extern static public function setCwd(s:String):Void { }
+	extern static public function systemName():String { return ""; }
 
-	@:extern static function _command(cmd:String):Int { return 0; }
+	extern static function _command(cmd:String):Int { return 0; }
 
 	static public function command(cmd:String, ?args:Array<String>):Int {
 		if (args == null) {
@@ -57,12 +57,12 @@ class Sys {
 
 	static public function executablePath():String { return programPath(); }
 
-	@:extern static public function exit(code:Int):Void { }
-	@:extern static public function time():Float { return 0.; }
-	@:extern static public function cpuTime():Float { return 0.; }
-	@:extern static public function programPath():String { return ""; }
-	@:extern static public function getChar(echo:Bool):Int { return 0; }
-	@:extern static public function stdin():haxe.io.Input { return (null : sys.io.FileInput); }
-	@:extern static public function stdout():haxe.io.Output { return (null : sys.io.FileOutput); }
-	@:extern static public function stderr():haxe.io.Output { return (null : sys.io.FileOutput); }
+	extern static public function exit(code:Int):Void { }
+	extern static public function time():Float { return 0.; }
+	extern static public function cpuTime():Float { return 0.; }
+	extern static public function programPath():String { return ""; }
+	extern static public function getChar(echo:Bool):Int { return 0; }
+	extern static public function stdin():haxe.io.Input { return (null : sys.io.FileInput); }
+	extern static public function stdout():haxe.io.Output { return (null : sys.io.FileOutput); }
+	extern static public function stderr():haxe.io.Output { return (null : sys.io.FileOutput); }
 }

+ 8 - 8
std/eval/_std/sys/io/File.hx

@@ -23,14 +23,14 @@ package sys.io;
 
 @:coreApi
 class File {
-	@:extern static public function getContent(path:String):String { return ""; }
-	@:extern static public function saveContent(path:String, content:String):Void { }
-	@:extern static public function getBytes(path:String):haxe.io.Bytes { return haxe.io.Bytes.alloc(0); }
-	@:extern static public function saveBytes(path:String, bytes:haxe.io.Bytes):Void { }
-	@:extern static public function read(path:String, binary:Bool = true):FileInput { return null; }
-	@:extern static public function write(path:String, binary:Bool = true):FileOutput { return null; }
-	@:extern static public function append(path:String, binary:Bool = true):FileOutput { return null; }
-	@:extern static public function update(path:String, binary:Bool = true):FileOutput { return null; }
+	extern static public function getContent(path:String):String { return ""; }
+	extern static public function saveContent(path:String, content:String):Void { }
+	extern static public function getBytes(path:String):haxe.io.Bytes { return haxe.io.Bytes.alloc(0); }
+	extern static public function saveBytes(path:String, bytes:haxe.io.Bytes):Void { }
+	extern static public function read(path:String, binary:Bool = true):FileInput { return null; }
+	extern static public function write(path:String, binary:Bool = true):FileOutput { return null; }
+	extern static public function append(path:String, binary:Bool = true):FileOutput { return null; }
+	extern static public function update(path:String, binary:Bool = true):FileOutput { return null; }
 
 	static public function copy(srcPath:String, dstPath:String):Void {
 		var s = read(srcPath, true);

+ 6 - 6
std/eval/_std/sys/io/FileInput.hx

@@ -25,10 +25,10 @@ package sys.io;
 
 @:coreApi
 class FileInput extends haxe.io.Input {
-	@:extern public override function close():Void { }
-	@:extern public function eof():Bool { return false; }
-	@:extern public function seek(p:Int, pos:FileSeek):Void { }
-	@:extern public function tell():Int { return 0; }
-	@:extern public override function readByte():Int { return 0; }
-	@:extern public override function readBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int { return 0; }
+	extern public override function close():Void { }
+	extern public function eof():Bool { return false; }
+	extern public function seek(p:Int, pos:FileSeek):Void { }
+	extern public function tell():Int { return 0; }
+	extern public override function readByte():Int { return 0; }
+	extern public override function readBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int { return 0; }
 }

+ 6 - 6
std/eval/_std/sys/io/FileOutput.hx

@@ -25,10 +25,10 @@ package sys.io;
 
 @:coreApi
 class FileOutput extends haxe.io.Output {
-	@:extern public override function close():Void { }
-	@:extern public override function flush():Void { }
-	@:extern public function seek(p:Int, pos:FileSeek):Void { }
-	@:extern public function tell():Int { return 0; }
-	@:extern public override function writeByte(c:Int):Void { }
-	@:extern public override function writeBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int { return 0; }
+	extern public override function close():Void { }
+	extern public override function flush():Void { }
+	extern public function seek(p:Int, pos:FileSeek):Void { }
+	extern public function tell():Int { return 0; }
+	extern public override function writeByte(c:Int):Void { }
+	extern public override function writeBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int { return 0; }
 }

+ 4 - 4
std/eval/_std/sys/net/Host.hx

@@ -42,8 +42,8 @@ class Host {
 		this.ip = ip;
 	}
 
-	@:extern static public function localhost() { return ""; }
-	@:extern static function hostReverse(ip:Int) { return ""; }
-	@:extern static function hostToString(ip:Int) { return ""; }
-	@:extern static function resolve(name:String) { return 0; }
+	extern static public function localhost() { return ""; }
+	extern static function hostReverse(ip:Int) { return ""; }
+	extern static function hostToString(ip:Int) { return ""; }
+	extern static function resolve(name:String) { return 0; }
 }

+ 1 - 1
std/flash/_std/Type.hx

@@ -276,7 +276,7 @@ enum ValueType {
 		return untyped if( e.params == null ) [] else e.params;
 	}
 
-	@:extern
+	extern
 	public inline static function enumIndex( e : EnumValue ) : Int {
 		return untyped e.index;
 	}

+ 1 - 1
std/haxe/Serializer.hx

@@ -537,7 +537,7 @@ class Serializer {
 		}
 	}
 
-	@:extern inline function __getField(o:Dynamic, f:String):Dynamic return o[cast f];
+	extern inline function __getField(o:Dynamic, f:String):Dynamic return o[cast f];
 
 	public function serializeException( e : Dynamic ) {
 		buf.add("x");

+ 15 - 15
std/haxe/Ucs2.hx

@@ -26,9 +26,9 @@ package haxe;
 **/
 abstract Ucs2(String) {
 
-	@:extern public var length(get,never) : Int;
+	extern public var length(get,never) : Int;
 
-	@:extern inline function new(str:String) : Void {
+	extern inline function new(str:String) : Void {
 		// this implementation only allows platforms which have native UCS2 String.
 		// other platforms should create a shadow class in their _std directory
 		#if !(flash || js)
@@ -37,7 +37,7 @@ abstract Ucs2(String) {
 		this = str;
 	}
 
-	@:extern inline function get_length() {
+	extern inline function get_length() {
 		return this.length;
 	}
 
@@ -46,7 +46,7 @@ abstract Ucs2(String) {
 
 		Affects the characters `a-z`. Other characters remain unchanged.
 	**/
-	@:extern public inline function toUpperCase() : Ucs2 {
+	extern public inline function toUpperCase() : Ucs2 {
 		return new Ucs2(this.toUpperCase());
 	}
 
@@ -55,7 +55,7 @@ abstract Ucs2(String) {
 
 		Affects the characters `A-Z`. Other characters remain unchanged.
 	**/
-	@:extern public inline function toLowerCase() : Ucs2 {
+	extern public inline function toLowerCase() : Ucs2 {
 		return new Ucs2(this.toLowerCase());
 	}
 
@@ -65,7 +65,7 @@ abstract Ucs2(String) {
 		If `index` is negative or exceeds `this.length`, the empty Ucs2 ""
 		is returned.
 	**/
-	@:extern public inline function charAt(index : Int) : Ucs2 {
+	extern public inline function charAt(index : Int) : Ucs2 {
 		return new Ucs2(this.charAt(index));
 	}
 
@@ -75,10 +75,10 @@ abstract Ucs2(String) {
 		If `index` is negative or exceeds `this.length`, null is returned.
 
 		To obtain the character code of a single character, "x".code can be used
-		instead to @:extern public inline the character code at compile time. Note that this
+		instead to extern public inline the character code at compile time. Note that this
 		only works on Ucs2 literals of length 1.
 	**/
-	@:extern public inline function charCodeAt( index : Int) : Null<Int> {
+	extern public inline function charCodeAt( index : Int) : Null<Int> {
 		return this.charCodeAt(index);
 	}
 
@@ -93,7 +93,7 @@ abstract Ucs2(String) {
 
 		If `str` cannot be found, -1 is returned.
 	**/
-	@:extern public inline function indexOf( str : Ucs2, ?startIndex : Int ) : Int {
+	extern public inline function indexOf( str : Ucs2, ?startIndex : Int ) : Int {
 		return this.indexOf(str.toNativeString(),startIndex);
 	}
 
@@ -108,7 +108,7 @@ abstract Ucs2(String) {
 
 		If `str` cannot be found, -1 is returned.
 	**/
-	@:extern public inline function lastIndexOf( str : Ucs2, ?startIndex : Int ) : Int {
+	extern public inline function lastIndexOf( str : Ucs2, ?startIndex : Int ) : Int {
 		return this.lastIndexOf(str.toNativeString(),startIndex);
 	}
 
@@ -132,7 +132,7 @@ abstract Ucs2(String) {
 		result Array contains a leading (or trailing) empty Ucs2 "" element.
 		Two subsequent delimiters also result in an empty Ucs2 "" element.
 	**/
-	@:extern public inline function split( delimiter : Ucs2 ) : Array<Ucs2> {
+	extern public inline function split( delimiter : Ucs2 ) : Array<Ucs2> {
 		return cast this.split(delimiter.toNativeString());
 	}
 
@@ -151,7 +151,7 @@ abstract Ucs2(String) {
 
 		If `len` is negative, the result is unspecified.
 	**/
-	@:extern public inline function substr( pos : Int, ?len : Int ) : Ucs2 {
+	extern public inline function substr( pos : Int, ?len : Int ) : Ucs2 {
 		return new Ucs2(this.substr(pos,len));
 	}
 
@@ -168,14 +168,14 @@ abstract Ucs2(String) {
 		If the (possibly swapped) `startIndex` exceeds `this.length`, the empty
 		Ucs2 "" is returned.
 	**/
-	@:extern public inline function substring( startIndex : Int, ?endIndex : Int ) : Ucs2 {
+	extern public inline function substring( startIndex : Int, ?endIndex : Int ) : Ucs2 {
 		return new Ucs2(this.substring(startIndex,endIndex));
 	}
 
 	/**
 		Returns the native underlying String.
 	**/
-	@:extern public inline function toNativeString() : String {
+	extern public inline function toNativeString() : String {
 		return this;
 	}
 
@@ -185,7 +185,7 @@ abstract Ucs2(String) {
 		If `code` is negative or has another invalid value, the result is
 		unspecified.
 	**/
-	@:extern public static inline function fromCharCode( code : Int ) : Ucs2 {
+	extern public static inline function fromCharCode( code : Int ) : Ucs2 {
 		return new Ucs2(String.fromCharCode(code));
 	}
 

+ 1 - 1
std/haxe/Utf8.hx

@@ -90,7 +90,7 @@ class Utf8 {
 	/**
 		Returns the number of UTF8 chars of the String.
 	**/
-	#if js @:extern #end
+	#if js extern #end
 	public static inline function length( s : String ) : Int {
 		return s.length;
 	}

+ 9 - 9
std/haxe/crypto/Sha224.hx

@@ -140,7 +140,7 @@ class Sha224 {
         return blks;
     }
 
-    @:extern
+    extern
     inline static function safeAdd(x, y) {
         var lsw = (x & 0xFFFF) + (y & 0xFFFF);
         var msw = (x >>> 16) + (y >>> 16) + (lsw >>> 16);
@@ -148,45 +148,45 @@ class Sha224 {
     }
 
     // ++
-    @:extern
+    extern
     inline function ROTR(X, n) {
         return ( X >>> n ) | (X << (32 - n));
     }
 
     // ++
-    @:extern
+    extern
     inline function SHR(X, n) {
         return ( X >>> n );
     }
 
     // ++
-    @:extern
+    extern
     inline function Ch(x, y, z) {
         return ((x & y) ^ ((~x) & z));
     }
 
     // ++
-    @:extern
+    extern
     inline function Maj(x, y, z) {
         return ((x & y) ^ (x & z) ^ (y & z));
     }
 
-    @:extern
+    extern
     inline function Sigma0(x) {
         return ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22);
     }
 
-    @:extern
+    extern
     inline function Sigma1(x) {
         return ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25);
     }
 
-    @:extern
+    extern
     inline function Gamma0(x) {
         return ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3);
     }
 
-    @:extern
+    extern
     inline function Gamma1(x) {
         return ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10);
     }

+ 9 - 9
std/haxe/crypto/Sha256.hx

@@ -140,47 +140,47 @@ class Sha256 {
 		blks[nblk * 16 - 1] = b.length * 8;
 		return blks;
 	}
-	@:extern
+	extern
 	inline function S(X, n) {
 		return ( X >>> n ) | (X << (32 - n));
 	}
 
-	@:extern
+	extern
 	inline function R(X, n) {
 		return ( X >>> n );
 	}
 
-	@:extern
+	extern
 	inline function Ch(x, y, z) {
 		return ((x & y) ^ ((~x) & z));
 	}
 
-	@:extern
+	extern
 	inline function Maj(x, y, z) {
 		return ((x & y) ^ (x & z) ^ (y & z));
 	}
 
-	@:extern
+	extern
 	inline function Sigma0256(x) {
 		return (S(x, 2) ^ S(x, 13) ^ S(x, 22));
 	}
 
-	@:extern
+	extern
 	inline function Sigma1256(x) {
 		return (S(x, 6) ^ S(x, 11) ^ S(x, 25));
 	}
 
-	@:extern
+	extern
 	inline function Gamma0256(x) {
 		return (S(x, 7) ^ S(x, 18) ^ R(x, 3));
 	}
 
-	@:extern
+	extern
 	inline function Gamma1256(x) {
 		return (S(x, 17) ^ S(x, 19) ^ R(x, 10));
 	}
 
-	@:extern
+	extern
 	inline function safeAdd(x, y) {
 		var lsw = (x & 0xFFFF) + (y & 0xFFFF);
 		var msw = (x >> 16) + (y >> 16) + (lsw >> 16);

+ 2 - 2
std/haxe/ds/BalancedTree.hx

@@ -128,7 +128,7 @@ class BalancedTree<K,V> implements haxe.Constraints.IMap<K,V> {
 		keysLoop(root, ret);
 		return ret.iterator();
 	}
-	
+
 	public function copy():BalancedTree<K, V> {
 		var copied = new BalancedTree<K, V>();
 		copied.root = root;
@@ -237,7 +237,7 @@ class TreeNode<K,V> {
 			_height = h;
 	}
 
-	@:extern public inline function get_height() return this == null ? 0 : _height;
+	extern public inline function get_height() return this == null ? 0 : _height;
 
 	public function toString() {
 		return (left == null ? "" : left.toString() + ", ") + '$key=$value' + (right == null ? "" : ", " +right.toString());

+ 1 - 1
std/haxe/ds/List.hx

@@ -257,7 +257,7 @@ private class ListNode<T> {
 		this.item = item;
 		this.next = next;
 	}
-	@:extern public inline static function create<T>(item:T, next:ListNode<T>):ListNode<T> {
+	extern public inline static function create<T>(item:T, next:ListNode<T>):ListNode<T> {
 		return new ListNode(item, next);
 	}
 }

+ 4 - 4
std/haxe/ds/Vector.hx

@@ -239,7 +239,7 @@ abstract Vector<T>(VectorData<T>) {
 
 		If `array` is null, the result is unspecified.
 	**/
-	#if as3 @:extern #end
+	#if as3 extern #end
 	static public inline function fromArrayCopy<T>(array:Array<T>):Vector<T> {
 		#if python
 		return cast array.copy();
@@ -271,7 +271,7 @@ abstract Vector<T>(VectorData<T>) {
 		`a[i] == a.copy()[i]` is true for any valid `i`. However,
 		`a == a.copy()` is always false.
 	**/
-	#if cs @:extern #end public inline function copy<T>():Vector<T> {
+	#if cs extern #end public inline function copy<T>():Vector<T> {
 		#if eval
 		return fromData(this.copy());
 		#else
@@ -294,7 +294,7 @@ abstract Vector<T>(VectorData<T>) {
 
 		If `sep` is null, the result is unspecified.
 	**/
-	#if cs @:extern #end public inline function join<T>(sep:String):String {
+	#if cs extern #end public inline function join<T>(sep:String):String {
 		#if (flash10 || cpp || eval)
 		return this.join(sep);
 		#else
@@ -318,7 +318,7 @@ abstract Vector<T>(VectorData<T>) {
 
 		If `f` is null, the result is unspecified.
 	**/
-	#if cs @:extern #end public inline function map<S>(f:T->S):Vector<S> {
+	#if cs extern #end public inline function map<S>(f:T->S):Vector<S> {
 		#if eval
 			return fromData(this.map(f));
 		#else

+ 2 - 2
std/haxe/format/JsonPrinter.hx

@@ -133,7 +133,7 @@ class JsonPrinter {
 		}
 	}
 
-	@:extern inline function addChar(c:Int) {
+	extern inline function addChar(c:Int) {
 		#if flash
 		buf.writeByte(c);
 		#else
@@ -141,7 +141,7 @@ class JsonPrinter {
 		#end
 	}
 
-	@:extern inline function add(v:String) {
+	extern inline function add(v:String) {
 		#if flash
 		// argument is not always a string but will be automatically casted
 		buf.writeUTFBytes(v);

+ 5 - 0
std/haxe/macro/Expr.hx

@@ -818,6 +818,11 @@ enum Access {
 		variables, it means they can be assigned to only once.
 	**/
 	AFinal;
+
+	/**
+		Extern access modifier.
+	**/
+	AExtern;
 }
 
 /**

+ 1 - 0
std/haxe/macro/Printer.hx

@@ -137,6 +137,7 @@ class Printer {
 		case ADynamic: "dynamic";
 		case AMacro: "macro";
 		case AFinal: "final";
+		case AExtern: "extern";
 	}
 
 	public function printField(field:Field) return

+ 10 - 10
std/hl/Bytes.hx

@@ -23,23 +23,23 @@ package hl;
 
 @:coreType abstract Bytes {
 
-	@:extern public inline function new( v : Int ) {
+	extern public inline function new( v : Int ) {
 		this = alloc(v);
 	}
 
 	@:hlNative("std","bytes_blit") public function blit( pos : Int, src : Bytes, srcPos : Int, len : Int ) : Void {
 	}
 
-	@:extern @:arrayAccess public inline function getUI8( pos : Int ) : Int {
+	@:arrayAccess extern public inline function getUI8( pos : Int ) : Int {
 		return untyped $bgetui8(this,pos);
 	}
 
-	@:extern @:arrayAccess public inline function setUI8( pos : Int, value : Int ) : Int {
+	@:arrayAccess extern public inline function setUI8( pos : Int, value : Int ) : Int {
 		untyped $bsetui8(this,pos,value);
 		return value;
 	}
 
-	@:extern public inline function getI32( pos : Int ) : Int {
+	extern public inline function getI32( pos : Int ) : Int {
 		return untyped $bgeti32(this,pos);
 	}
 
@@ -51,23 +51,23 @@ package hl;
 		untyped $bsetui16(this,pos,v);
 	}
 
-	@:extern public inline function getF32( pos : Int ) : F32 {
+	extern public inline function getF32( pos : Int ) : F32 {
 		return untyped $bgetf32(this,pos);
 	}
 
-	@:extern public inline function getF64( pos : Int ) : Float {
+	extern public inline function getF64( pos : Int ) : Float {
 		return untyped $bgetf64(this,pos);
 	}
 
-	@:extern public inline function setI32( pos : Int, value : Int ) : Void {
+	extern public inline function setI32( pos : Int, value : Int ) : Void {
 		untyped $bseti32(this, pos, value);
 	}
 
-	@:extern public inline function setF32( pos : Int, value : F32 ) : Void {
+	extern public inline function setF32( pos : Int, value : F32 ) : Void {
 		untyped $bsetf32(this, pos, value);
 	}
 
-	@:extern public inline function setF64( pos : Int, value : Float ) : Void {
+	extern public inline function setF64( pos : Int, value : Float ) : Void {
 		untyped $bsetf64(this, pos, value);
 	}
 
@@ -205,7 +205,7 @@ package hl;
 	/**
 		Get the bytes reference from an array of basic types (no copy occurs)
 	**/
-	@:extern public static inline function getArray<T>( a : Array<T> ) : Bytes {
+	extern public static inline function getArray<T>( a : Array<T> ) : Bytes {
 		return untyped $abytes(a);
 	}
 

+ 5 - 5
std/hl/BytesAccess.hx

@@ -27,23 +27,23 @@ package hl;
 	public var nullValue(get, never) : T;
 
 
-	@:extern inline function get_sizeBits() {
+	extern inline function get_sizeBits() {
 		return untyped $bytes_sizebits(this);
 	}
 
-	@:extern inline function get_nullValue() {
+	extern inline function get_nullValue() {
 		return untyped $bytes_nullvalue(this);
 	}
 
-	@:extern public inline function blit( pos : Int, src : BytesAccess<T>, srcPos : Int, len : Int ) : Void {
+	extern public inline function blit( pos : Int, src : BytesAccess<T>, srcPos : Int, len : Int ) : Void {
 		(this:Bytes).blit(pos << sizeBits, src, srcPos << sizeBits, len << sizeBits);
 	}
 
-	@:extern @:arrayAccess public inline function get( pos : Int ) : T {
+	@:arrayAccess extern public inline function get( pos : Int ) : T {
 		return untyped $bget(this,pos);
 	}
 
-	@:extern @:arrayAccess public inline function set( pos : Int, value : T ) : T {
+	@:arrayAccess extern public inline function set( pos : Int, value : T ) : T {
 		untyped $bset(this,pos,value);
 		return value;
 	}

+ 6 - 6
std/hl/NativeArray.hx

@@ -45,30 +45,30 @@ package hl;
 
 	public var length(get,never):Int;
 
-	@:extern public inline function new( length : Int ) {
+	extern public inline function new( length : Int ) {
 		this = untyped $aalloc(length);
 	}
 
-	@:extern inline function get_length() : Int {
+	extern inline function get_length() : Int {
 		return untyped $asize(this);
 	}
 
-	@:extern @:arrayAccess inline function get( pos : Int ) : T {
+	@:arrayAccess extern inline function get( pos : Int ) : T {
 		return untyped ($aget(this,pos):T);
 	}
 
-	@:extern @:arrayAccess inline function set( pos : Int, value : T ) : T {
+	@:arrayAccess extern inline function set( pos : Int, value : T ) : T {
 		untyped $aset(this,pos,value);
 		return value;
 	}
 
-	@:extern public inline function sub( pos : Int, len : Int ) {
+	extern public inline function sub( pos : Int, len : Int ) {
 		var n = new NativeArray<T>(len);
 		n.blit(0, this, pos, len);
 		return n;
 	}
 
-	@:to @:extern public inline function getRef() : Ref<T> {
+	@:to extern public inline function getRef() : Ref<T> {
 		return untyped $refdata(this);
 	}
 

+ 5 - 5
std/hl/Ref.hx

@@ -23,20 +23,20 @@ package hl;
 
 @:coreType abstract Ref<T> {
 
-	@:extern @:from public static inline function make<T>( v : T ) {
+	@:from extern public static inline function make<T>( v : T ) {
 		return new Ref<T>(v);
 	}
 
-	@:extern public inline function new( v : T ) {
+	extern public inline function new( v : T ) {
 		this = untyped $ref(v);
 	}
-	@:extern public inline function get() : T {
+	extern public inline function get() : T {
 		return untyped $unref(this);
 	}
-	@:extern public inline function set( v : T ) : Void {
+	extern public inline function set( v : T ) : Void {
 		return untyped $setref(this,v);
 	}
-	@:extern public inline function offset( v : Int ) : Ref<T> {
+	extern public inline function offset( v : Int ) : Ref<T> {
 		return untyped $refoffset(this, v);
 	}
 }

+ 4 - 4
std/hl/Type.hx

@@ -49,7 +49,7 @@ abstract TypeKind(Int) {
 
 	public var kind(get,never) : TypeKind;
 
-	@:extern inline function get_kind() : TypeKind {
+	extern inline function get_kind() : TypeKind {
 		return untyped $tkind(this);
 	}
 
@@ -57,15 +57,15 @@ abstract TypeKind(Int) {
 		return null;
 	}
 
-	@:extern public static inline function getDynamic( v : Dynamic ) : Type {
+	extern public static inline function getDynamic( v : Dynamic ) : Type {
 		return untyped $tdyntype(v);
 	}
 
-	@:extern public static inline function get<T>( v : T ) : Type {
+	extern public static inline function get<T>( v : T ) : Type {
 		return untyped $ttype(v);
 	}
 
-	@:extern public inline function getName() : String {
+	extern public inline function getName() : String {
 		var s = getNameBytes();
 		return @:privateAccess String.fromUCS2(s);
 	}

+ 1 - 1
std/hl/_std/Reflect.hx

@@ -132,7 +132,7 @@ class Reflect {
 	}
 
 	@:overload(function( f : Array<Dynamic> -> Void ) : Dynamic {})
-	@:extern public inline static function makeVarArgs( f : Array<Dynamic> -> Dynamic ) : Dynamic {
+	extern public inline static function makeVarArgs( f : Array<Dynamic> -> Dynamic ) : Dynamic {
 		return _makeVarArgs(f);
 	}
 

+ 2 - 2
std/hl/_std/Std.hx

@@ -64,12 +64,12 @@ class Std {
 		return t.check(v);
 	}
 
-	@:extern public inline static function instance<T:{},S:T>( value : T, c : Class<S> ) : S {
+	extern public inline static function instance<T:{},S:T>( value : T, c : Class<S> ) : S {
 		var t : hl.BaseType = cast c;
 		return t.check(value) ? cast value : null;
 	}
 
-	@:extern public static inline function int( x : Float ) : Int {
+	extern public static inline function int( x : Float ) : Int {
 		return untyped $int(x);
 	}
 

+ 2 - 2
std/hl/types/BytesMap.hx

@@ -25,7 +25,7 @@ typedef BytesMapData = Abstract<"hl_bytes_map">;
 
 abstract BytesMap(BytesMapData) {
 
-	@:extern public inline function new() {
+	extern public inline function new() {
 		this = alloc();
 	}
 
@@ -62,7 +62,7 @@ abstract BytesMap(BytesMapData) {
 		return null;
 	}
 
-	@:extern public inline function iterator() {
+	extern public inline function iterator() {
 		return new NativeArray.NativeArrayIterator<Dynamic>(valuesArray());
 	}
 

+ 2 - 2
std/hl/types/IntMap.hx

@@ -25,7 +25,7 @@ typedef IntMapData = Abstract<"hl_int_map">;
 
 abstract IntMap(IntMapData) {
 
-	@:extern public inline function new() {
+	extern public inline function new() {
 		this = alloc();
 	}
 
@@ -62,7 +62,7 @@ abstract IntMap(IntMapData) {
 		return null;
 	}
 
-	@:extern public inline function iterator() {
+	extern public inline function iterator() {
 		return new NativeArray.NativeArrayIterator<Dynamic>(valuesArray());
 	}
 

+ 2 - 2
std/hl/types/ObjectMap.hx

@@ -25,7 +25,7 @@ typedef ObjectMapData = Abstract<"hl_obj_map">;
 
 abstract ObjectMap(ObjectMapData) {
 
-	@:extern public inline function new() {
+	extern public inline function new() {
 		this = alloc();
 	}
 
@@ -62,7 +62,7 @@ abstract ObjectMap(ObjectMapData) {
 		return null;
 	}
 
-	@:extern public inline function iterator() {
+	extern public inline function iterator() {
 		return new NativeArray.NativeArrayIterator<Dynamic>(valuesArray());
 	}
 

+ 2 - 2
std/java/Lib.hx

@@ -111,7 +111,7 @@ package java;
 		return untyped Array.ofNative(native);
 	}
 
-	@:extern inline private static function doArray<T>(native:java.NativeArray<T>):Array<T>
+	extern inline private static function doArray<T>(native:java.NativeArray<T>):Array<T>
 	{
 		var ret:NativeArray<Dynamic> = new NativeArray(native.length);
 		for (i in 0...native.length)
@@ -177,7 +177,7 @@ package java;
 
 		This method only exists at compile-time, so it can't be called via reflection.
 	**/
-	@:extern public static inline function lock<T>(obj:Dynamic, block:T):Void
+	extern public static inline function lock<T>(obj:Dynamic, block:T):Void
 	{
 		untyped __lock__(obj, block);
 	}

+ 11 - 11
std/java/_std/haxe/ds/ObjectMap.hx

@@ -25,9 +25,9 @@ import java.NativeArray;
 
 @:coreApi class ObjectMap<K:{}, V> implements haxe.Constraints.IMap<K,V>
 {
-	@:extern private static inline var HASH_UPPER = 0.77;
-	@:extern private static inline var FLAG_EMPTY = 0;
-	@:extern private static inline var FLAG_DEL = 1;
+	extern private static inline var HASH_UPPER = 0.77;
+	extern private static inline var FLAG_EMPTY = 0;
+	extern private static inline var FLAG_DEL = 1;
 
 	/**
 	 * This is the most important structure here and the reason why it's so fast.
@@ -421,7 +421,7 @@ import java.NativeArray;
 		return s.toString();
 	}
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 		--x;
 		x |= (x) >>> 1;
@@ -432,20 +432,20 @@ import java.NativeArray;
 		return ++x;
 	}
 
-	@:extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
+	extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
 		return (((k) >> 3 ^ (k) << 3) | 1) & (mask);
 
-	@:extern private static inline function isEither(v:HashType):Bool
+	extern private static inline function isEither(v:HashType):Bool
 		return (v & 0xFFFFFFFE) == 0;
 
-	@:extern private static inline function isEmpty(v:HashType):Bool
+	extern private static inline function isEmpty(v:HashType):Bool
 		return v == FLAG_EMPTY;
 
-	@:extern private static inline function isDel(v:HashType):Bool
+	extern private static inline function isDel(v:HashType):Bool
 		return v == FLAG_DEL;
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
-	@:extern private static inline function hash(s:Dynamic):HashType
+	extern private static inline function hash(s:Dynamic):HashType
 	{
 		var k:Int = untyped s.hashCode();
 		//k *= 357913941;
@@ -473,10 +473,10 @@ import java.NativeArray;
 		return ret;
 	}
 
-	@:extern private static inline function arrayCopy(sourceArray:Dynamic, sourceIndex:Int, destinationArray:Dynamic, destinationIndex:Int, length:Int):Void
+	extern private static inline function arrayCopy(sourceArray:Dynamic, sourceIndex:Int, destinationArray:Dynamic, destinationIndex:Int, length:Int):Void
 		java.lang.System.arraycopy(sourceArray, sourceIndex, destinationArray, destinationIndex, length);
 
-	@:extern private static inline function assert(x:Bool):Void
+	extern private static inline function assert(x:Bool):Void
 	{
 #if DEBUG_HASHTBL
 		if (!x) throw "assert failed";

+ 11 - 11
std/java/_std/haxe/ds/StringMap.hx

@@ -25,9 +25,9 @@ import java.NativeArray;
 
 @:coreApi class StringMap<T> implements haxe.Constraints.IMap<String,T>
 {
-	@:extern private static inline var HASH_UPPER = 0.77;
-	@:extern private static inline var FLAG_EMPTY = 0;
-	@:extern private static inline var FLAG_DEL = 1;
+	extern private static inline var HASH_UPPER = 0.77;
+	extern private static inline var FLAG_EMPTY = 0;
+	extern private static inline var FLAG_DEL = 1;
 
 	/**
 	 * This is the most important structure here and the reason why it's so fast.
@@ -424,7 +424,7 @@ import java.NativeArray;
 		return s.toString();
 	}
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 		--x;
 		x |= (x) >>> 1;
@@ -435,20 +435,20 @@ import java.NativeArray;
 		return ++x;
 	}
 
-	@:extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
+	extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
 		return (((k) >> 3 ^ (k) << 3) | 1) & (mask);
 
-	@:extern private static inline function isEither(v:HashType):Bool
+	extern private static inline function isEither(v:HashType):Bool
 		return (v & 0xFFFFFFFE) == 0;
 
-	@:extern private static inline function isEmpty(v:HashType):Bool
+	extern private static inline function isEmpty(v:HashType):Bool
 		return v == FLAG_EMPTY;
 
-	@:extern private static inline function isDel(v:HashType):Bool
+	extern private static inline function isDel(v:HashType):Bool
 		return v == FLAG_DEL;
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
-	@:extern private static inline function hash(s:String):HashType
+	extern private static inline function hash(s:String):HashType
 	{
 		var k:Int = untyped s.hashCode();
 		//k *= 357913941;
@@ -476,10 +476,10 @@ import java.NativeArray;
 		return ret;
 	}
 
-	@:extern private static inline function arrayCopy(sourceArray:Dynamic, sourceIndex:Int, destinationArray:Dynamic, destinationIndex:Int, length:Int):Void
+	extern private static inline function arrayCopy(sourceArray:Dynamic, sourceIndex:Int, destinationArray:Dynamic, destinationIndex:Int, length:Int):Void
 		java.lang.System.arraycopy(sourceArray, sourceIndex, destinationArray, destinationIndex, length);
 
-	@:extern private static inline function assert(x:Bool):Void
+	extern private static inline function assert(x:Bool):Void
 	{
 #if DEBUG_HASHTBL
 		if (!x) throw "assert failed";

+ 11 - 11
std/java/_std/haxe/ds/WeakMap.hx

@@ -27,9 +27,9 @@ import java.lang.ref.ReferenceQueue;
 
 @:coreApi class WeakMap<K:{}, V> implements haxe.Constraints.IMap<K,V>
 {
-	@:extern private static inline var HASH_UPPER = 0.77;
-	@:extern private static inline var FLAG_EMPTY = 0;
-	@:extern private static inline var FLAG_DEL = 1;
+	extern private static inline var HASH_UPPER = 0.77;
+	extern private static inline var FLAG_EMPTY = 0;
+	extern private static inline var FLAG_DEL = 1;
 
 	/**
 	 * This is the most important structure here and the reason why it's so fast.
@@ -455,7 +455,7 @@ import java.lang.ref.ReferenceQueue;
 		return s.toString();
 	}
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 		--x;
 		x |= (x) >>> 1;
@@ -466,20 +466,20 @@ import java.lang.ref.ReferenceQueue;
 		return ++x;
 	}
 
-	@:extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
+	extern private static inline function getInc(k:Int, mask:Int):Int //return 1 for linear probing
 		return (((k) >> 3 ^ (k) << 3) | 1) & (mask);
 
-	@:extern private static inline function isEither(v:HashType):Bool
+	extern private static inline function isEither(v:HashType):Bool
 		return (v & 0xFFFFFFFE) == 0;
 
-	@:extern private static inline function isEmpty(v:HashType):Bool
+	extern private static inline function isEmpty(v:HashType):Bool
 		return v == FLAG_EMPTY;
 
-	@:extern private static inline function isDel(v:HashType):Bool
+	extern private static inline function isDel(v:HashType):Bool
 		return v == FLAG_DEL;
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
-	@:extern private static inline function hash(s:Dynamic):HashType
+	extern private static inline function hash(s:Dynamic):HashType
 	{
 		var k:Int = untyped s.hashCode();
 		//k *= 357913941;
@@ -507,10 +507,10 @@ import java.lang.ref.ReferenceQueue;
 		return ret;
 	}
 
-	@:extern private static inline function arrayCopy(sourceArray:Dynamic, sourceIndex:Int, destinationArray:Dynamic, destinationIndex:Int, length:Int):Void
+	extern private static inline function arrayCopy(sourceArray:Dynamic, sourceIndex:Int, destinationArray:Dynamic, destinationIndex:Int, length:Int):Void
 		java.lang.System.arraycopy(sourceArray, sourceIndex, destinationArray, destinationIndex, length);
 
-	@:extern private static inline function assert(x:Bool):Void
+	extern private static inline function assert(x:Bool):Void
 	{
 #if DEBUG_HASHTBL
 		if (!x) throw "assert failed";

+ 1 - 1
std/java/internal/FieldLookup.hx

@@ -73,7 +73,7 @@ import java.lang.System;
 		a[length - 1] = null;
 	}
 
-	@:extern
+	extern
 	static inline function __insert<T>(a:java.NativeArray<T>, length:Int, pos:Int, x:T):java.NativeArray<T>
 	{
 		var capacity = a.length;

+ 2 - 2
std/java/lang/Boolean.hx

@@ -25,9 +25,9 @@
 @:forward
 @:forwardStatics abstract Boolean(BooleanClass) from BooleanClass to BooleanClass
 {
-	@:to @:extern inline public function toBool():Bool
+	@:to extern inline public function toBool():Bool
 		return this.booleanValue();
-	@:from @:extern inline public static function fromBool(b:Bool):Boolean
+	@:from extern inline public static function fromBool(b:Bool):Boolean
 		return BooleanClass.valueOf(b);
 }
 

+ 2 - 2
std/java/lang/Byte.hx

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forward abstract Byte(ByteClass) from ByteClass to ByteClass
 {
-	@:to @:extern inline public function toByte():java.types.Int8
+	@:to extern inline public function toByte():java.types.Int8
 		return this.byteValue();
-	@:from @:extern inline public static function fromByte(b:java.types.Int8):Byte
+	@:from extern inline public static function fromByte(b:java.types.Int8):Byte
 		return ByteClass.valueOf(b);
 }
 

+ 2 - 2
std/java/lang/Character.hx

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forward abstract Character(CharacterClass) from CharacterClass to CharacterClass
 {
-	@:to @:extern inline public function toCharacter():java.types.Char16
+	@:to extern inline public function toCharacter():java.types.Char16
 		return this.charValue();
-	@:from @:extern inline public static function fromCharacter(b:java.types.Char16):Character
+	@:from extern inline public static function fromCharacter(b:java.types.Char16):Character
 		return CharacterClass.valueOf(b);
 }
 

+ 2 - 2
std/java/lang/Double.hx

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forward abstract Double(DoubleClass) from DoubleClass to DoubleClass
 {
-	@:to @:extern inline public function toFloat():Float
+	@:to extern inline public function toFloat():Float
 		return this.doubleValue();
-	@:from @:extern inline public static function fromFloat(b:Float):Double
+	@:from extern inline public static function fromFloat(b:Float):Double
 		return DoubleClass.valueOf(b);
 }
 

+ 2 - 2
std/java/lang/Float.hx

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forward abstract Float(FloatClass) from FloatClass to FloatClass
 {
-	@:to @:extern inline public function toFloat():std.StdTypes.Float
+	@:to extern inline public function toFloat():std.StdTypes.Float
 		return this.floatValue();
-	@:from @:extern inline public static function fromFloat(b:std.StdTypes.Single):Float
+	@:from extern inline public static function fromFloat(b:std.StdTypes.Single):Float
 		return FloatClass.valueOf(b);
 }
 

+ 2 - 2
std/java/lang/Integer.hx

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forward abstract Integer(IntegerClass) from IntegerClass to IntegerClass
 {
-	@:to @:extern inline public function toInt():Int
+	@:to extern inline public function toInt():Int
 		return this.intValue();
-	@:from @:extern inline public static function fromInt(b:Int):Integer
+	@:from extern inline public static function fromInt(b:Int):Integer
 		return IntegerClass.valueOf(b);
 }
 

+ 2 - 2
std/java/lang/Long.hx

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forward abstract Long(LongClass) from LongClass to LongClass
 {
-	@:to @:extern inline public function toLong():haxe.Int64
+	@:to extern inline public function toLong():haxe.Int64
 		return this.longValue();
-	@:from @:extern inline public static function fromLong(b:haxe.Int64):Long
+	@:from extern inline public static function fromLong(b:haxe.Int64):Long
 		return LongClass.valueOf(b);
 }
 

+ 2 - 2
std/java/lang/Short.hx

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forward abstract Short(ShortClass) from ShortClass to ShortClass
 {
-	@:to @:extern inline public function toShort():java.types.Int16
+	@:to extern inline public function toShort():java.types.Int16
 		return this.shortValue();
-	@:from @:extern inline public static function fromShort(b:java.types.Int16):Short
+	@:from extern inline public static function fromShort(b:java.types.Int16):Short
 		return ShortClass.valueOf(b);
 }
 

+ 4 - 4
std/js/Lib.hx

@@ -54,7 +54,7 @@ class Lib {
 		This is only supported in environments where `require` function
 		is available, such as Node.js or RequireJS.
 	**/
-	@:extern public static inline function require( module:String ) : Dynamic {
+	extern public static inline function require( module:String ) : Dynamic {
 		return untyped __js__("require")(module);
 	}
 
@@ -83,7 +83,7 @@ class Lib {
 		Read more at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
 	**/
 	public static var nativeThis(get,never) : Dynamic;
-	@:extern static inline function get_nativeThis() : Dynamic {
+	extern static inline function get_nativeThis() : Dynamic {
 		return untyped __js__("this");
 	}
 
@@ -93,7 +93,7 @@ class Lib {
 
 		Read more at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
 	**/
-	@:extern public static inline function typeof(o:Dynamic):String {
+	extern public static inline function typeof(o:Dynamic):String {
 		return js.Syntax.typeof(o);
 	}
 
@@ -110,7 +110,7 @@ class Lib {
 		@:allow(js) private
 	#end
 	static var global(get,never) : Dynamic;
-	@:extern static inline function get_global() : Dynamic {
+	extern static inline function get_global() : Dynamic {
 		return untyped __define_feature__("js.Lib.global", __js__("$global")); // $global is generated by the compiler
 	}
 

+ 1 - 1
std/python/Syntax.hx

@@ -30,7 +30,7 @@ import haxe.macro.ExprTools;
 import haxe.extern.Rest;
 
 @:noPackageRestrict
-extern class Syntax {
+#if !macro extern #end class Syntax {
 
 	#if macro
 	static var self = macro python.Syntax;

+ 2 - 2
tests/unit/src/unit/issues/Issue1827.hx

@@ -33,7 +33,7 @@ private class E {
 		b = 2;
 	}
 
-	@:extern public inline function set(inA:Int, inB:Int) {
+	extern public inline function set(inA:Int, inB:Int) {
 		setA(inA);
 		setB(inB);
 	}
@@ -109,7 +109,7 @@ class Issue1827 extends Test {
 		return 0;
 	}
 
-	@:extern static inline function callInline(i1:Int, _) {
+	extern static inline function callInline(i1:Int, _) {
 		return i1;
 	}
 }

+ 1 - 1
tests/unit/src/unit/issues/Issue2785.hx

@@ -4,7 +4,7 @@ import unit.Test;
 private class Base {
 	public function new() {}
 
-	@:extern
+	extern
 	public var foo(default, never):Int;
 
 	@:getter(foo)

+ 2 - 2
tests/unit/src/unit/issues/Issue2874.hx

@@ -27,12 +27,12 @@ class Issue2874 extends unit.Test
 
 @:arrayAccess abstract Arr<T>(Array<T>)
 {
-	@:extern inline public function new(a)
+	extern inline public function new(a)
 	{
 		this = a;
 	}
 
-	@:extern inline public function map<X>(fn:T->X):Arr<X>
+	extern inline public function map<X>(fn:T->X):Arr<X>
 	{
 		var arr2 = [];
 		for (v in this)

+ 10 - 10
tests/unit/src/unit/issues/Issue3345.hx

@@ -4,19 +4,19 @@ private abstract Meters(Float) from Float {
 	inline public static var One:Meters = 1;
 	inline public static var Zero:Meters = 0;
 
-	@:extern inline public function new(f:Float) {
+	extern inline public function new(f:Float) {
 		this = f;
 	}
 
-	@:extern @:op(-A) public static function neg(s:Meters):Meters;
-	@:extern @:op(A+B) public static function add(lhs:Meters, rhs:Meters):Meters;
-	@:extern @:op(A-B) public static function sub(lhs:Meters, rhs:Meters):Meters;
-	@:extern @:op(A>B) public static function gt(lhs:Meters, rhs:Meters):Bool;
-	@:extern @:op(A>=B) public static function gte(lhs:Meters, rhs:Meters):Bool;
-	@:extern @:op(A<B) public static function lt(lhs:Meters, rhs:Meters):Bool;
-	@:extern @:op(A<=B) public static function lte(lhs:Meters, rhs:Meters):Bool;
-	@:extern @:op(A==B) public static function eq(lhs:Meters, rhs:Meters):Bool;
-	@:extern inline public function float() return this;
+	@:op(-A) extern public static function neg(s:Meters):Meters;
+	@:op(A+B) extern public static function add(lhs:Meters, rhs:Meters):Meters;
+	@:op(A-B) extern public static function sub(lhs:Meters, rhs:Meters):Meters;
+	@:op(A>B) extern public static function gt(lhs:Meters, rhs:Meters):Bool;
+	@:op(A>=B) extern public static function gte(lhs:Meters, rhs:Meters):Bool;
+	@:op(A<B) extern public static function lt(lhs:Meters, rhs:Meters):Bool;
+	@:op(A<=B) extern public static function lte(lhs:Meters, rhs:Meters):Bool;
+	@:op(A==B) extern public static function eq(lhs:Meters, rhs:Meters):Bool;
+	extern inline public function float() return this;
 
 	@:to inline public function toString() {
 		return '$this(m)';

+ 3 - 3
tests/unit/src/unit/issues/Issue3388.hx

@@ -7,14 +7,14 @@ private abstract A<T>(Array<T>) {
 
 	#if java
 	@:impl
-	@:overload @:extern
+	@:overload extern
 	static inline public function sum(a:Array<Int>) {
 		return "sum of ints";
 	}
 
-	@:overload @:extern
+	@:overload
 	@:impl
-	static inline public function sum(a:Array<String>) {
+	extern static inline public function sum(a:Array<String>) {
 		return "sum of strings";
 	}
 	#end

Some files were not shown because too many files changed in this diff