瀏覽代碼

`extern` field syntax (#6984)

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

* fix lua
Simon Krajewski 7 年之前
父節點
當前提交
00f409858f
共有 100 個文件被更改,包括 638 次插入615 次删除
  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_name = name,null_pos;
 			cff_doc = None;
 			cff_doc = None;
 			cff_pos = p;
 			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;
 			cff_kind = mk_op_fn op name p;
 		}
 		}
 	in
 	in
@@ -694,9 +694,9 @@ let convert_delegate ctx p ilcls =
 			EReturn( Some ( EConst(Ident "this"), p ) ), p
 			EReturn( Some ( EConst(Ident "this"), p ) ), p
 		);
 		);
 	} in
 	} 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
 	let _, c = netpath_to_hx ctx.nstd ilcls.cpath in
 	EAbstract {
 	EAbstract {
 		d_name = netname_to_hx c,null_pos;
 		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
 					assert false
 			with Not_found ->
 			with Not_found ->
 				match f with
 				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)) }
 					{ 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)
 					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
 		| _ -> FNotFound
 
 
 let field_access_esp gen t field = match field with
 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
 		let static = match field with
 			| FStatic _ -> true
 			| FStatic _ -> true
 			| _ -> false
 			| _ -> 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
 		er,fun () -> ctx.this_stack <- List.tl ctx.this_stack
 
 
 let is_removable_field ctx f =
 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
 	|| (match f.cf_kind with
 		| Var {v_read = AccRequire (s,_)} -> true
 		| Var {v_read = AccRequire (s,_)} -> true
 		| Method MethMacro -> not ctx.in_macro
 		| Method MethMacro -> not ctx.in_macro

+ 2 - 0
src/core/ast.ml

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

+ 3 - 1
src/core/type.ml

@@ -175,6 +175,7 @@ and tclass_field = {
 	mutable cf_expr : texpr option;
 	mutable cf_expr : texpr option;
 	mutable cf_expr_unoptimized : tfunc option;
 	mutable cf_expr_unoptimized : tfunc option;
 	mutable cf_overloads : tclass_field list;
 	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 =
 and tclass_kind =
@@ -446,6 +447,7 @@ let mk_field name t p name_pos = {
 	cf_expr_unoptimized = None;
 	cf_expr_unoptimized = None;
 	cf_params = [];
 	cf_params = [];
 	cf_overloads = [];
 	cf_overloads = [];
+	cf_extern = false;
 }
 }
 
 
 let null_module = {
 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;
 				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
 				(match f1.cf_kind with
 				| Method MethInline ->
 				| 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;
 			) an.a_fields;
 			(match !(an.a_status) with
 			(match !(an.a_status) with

+ 2 - 2
src/generators/genhl.ml

@@ -139,7 +139,7 @@ let is_to_string t =
 	| _ -> false
 	| _ -> false
 
 
 let is_extern_field f =
 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 =
 let is_array_class name =
 	match name with
 	match name with
@@ -3156,7 +3156,7 @@ let generate_static ctx c f =
 	match f.cf_kind with
 	match f.cf_kind with
 	| Var _ ->
 	| Var _ ->
 		()
 		()
-	| Method _ when Meta.has Meta.Extern f.cf_meta ->
+	| Method _ when f.cf_extern ->
 		()
 		()
 	| Method m ->
 	| Method m ->
 		let add_native lib name =
 		let add_native lib name =

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

@@ -170,7 +170,7 @@ module PrototypeBuilder = struct
 end
 end
 
 
 let is_removable_field cf =
 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 create_static_prototype ctx mt =
 	let key = path_hash (t_infos mt).mt_path in
 	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
 		| AInline -> 5
 		| AMacro -> 6
 		| AMacro -> 6
 		| AFinal -> 7
 		| AFinal -> 7
+		| AExtern -> 8
 	in
 	in
 	encode_enum IAccess tag []
 	encode_enum IAccess tag []
 
 
@@ -696,6 +697,7 @@ and decode_access v =
 	| 5, [] -> AInline
 	| 5, [] -> AInline
 	| 6, [] -> AMacro
 	| 6, [] -> AMacro
 	| 7, [] -> AFinal
 	| 7, [] -> AFinal
+	| 8, [] -> AExtern
 	| _ -> raise Invalid_expr
 	| _ -> raise Invalid_expr
 
 
 and decode_meta_entry v =
 and decode_meta_entry v =
@@ -946,6 +948,7 @@ and encode_cfield f =
 		"namePos",encode_pos f.cf_name_pos;
 		"namePos",encode_pos f.cf_name_pos;
 		"doc", null encode_string f.cf_doc;
 		"doc", null encode_string f.cf_doc;
 		"overloads", encode_ref f.cf_overloads (encode_and_map_array encode_cfield) (fun() -> "overloads");
 		"overloads", encode_ref f.cf_overloads (encode_and_map_array encode_cfield) (fun() -> "overloads");
+		"isExtern", vbool f.cf_extern;
 	]
 	]
 
 
 and encode_field_kind k =
 and encode_field_kind k =
@@ -1319,6 +1322,7 @@ let decode_cfield v =
 		cf_expr = None;
 		cf_expr = None;
 		cf_expr_unoptimized = None;
 		cf_expr_unoptimized = None;
 		cf_overloads = decode_ref (field v "overloads");
 		cf_overloads = decode_ref (field v "overloads");
+		cf_extern = decode_bool (field v "isExtern");
 	}
 	}
 
 
 let decode_efield v =
 let decode_efield v =

+ 1 - 1
src/optimization/analyzerTexpr.ml

@@ -1237,7 +1237,7 @@ module Purity = struct
 				| None ->
 				| None ->
 					if not (is_pure c cf) then taint node
 					if not (is_pure c cf) then taint node
 				(* TODO: The function code check shouldn't be here I guess. *)
 				(* 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
 					if not (is_pure c cf) then taint node
 				| Some e ->
 				| Some e ->
 					try
 					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))
 		if i < 0 then "n" ^ (string_of_int (-i))
 		else (string_of_int i)
 		else (string_of_int i)
 	in
 	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
 	let make_expr_for_list (el:texpr list) (t:t) (p:pos): texpr = match el with
 		| [] -> mk (TBlock[]) ctx.t.tvoid p
 		| [] -> mk (TBlock[]) ctx.t.tvoid p
 		| [e] -> e
 		| [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))
 		if i < 0 then "n" ^ (string_of_int (-i))
 		else (string_of_int i)
 		else (string_of_int i)
 	in
 	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
 	let rec find_locals e = match e.eexpr with
 		| TVar(v,Some e1) ->
 		| TVar(v,Some e1) ->
 			find_locals 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 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 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 Inline,_); l = parse_cf_rights allow_static (AInline :: l) >] -> l
+	| [< '(Kwd Extern,_); l = parse_cf_rights allow_static (AExtern :: l) >] -> l
 	| [< >] -> l
 	| [< >] -> l
 
 
 and parse_fun_name = parser
 and parse_fun_name = parser

+ 1 - 0
src/syntax/reification.ml

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

+ 3 - 3
src/typing/calls.ml

@@ -12,7 +12,7 @@ let is_forced_inline c cf =
 	match c with
 	match c with
 	| Some { cl_extern = true } -> true
 	| Some { cl_extern = true } -> true
 	| Some { cl_kind = KAbstractImpl _ } -> true
 	| Some { cl_kind = KAbstractImpl _ } -> true
-	| _ when Meta.has Meta.Extern cf.cf_meta -> true
+	| _ when cf.cf_extern -> true
 	| _ -> false
 	| _ -> false
 
 
 let make_call ctx e params t p =
 let make_call ctx e params t p =
@@ -451,7 +451,7 @@ let rec acc_get ctx g p =
 		| None ->
 		| None ->
 			error "Recursive inline is not supported" p
 			error "Recursive inline is not supported" p
 		| Some { eexpr = TFunction _ } ->
 		| 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 wrap_extern c =
 				let c2 =
 				let c2 =
 					let m = c.cl_module in
 					let m = c.cl_module in
@@ -486,7 +486,7 @@ let rec acc_get ctx g p =
 					e_def
 					e_def
 				| TAnon a ->
 				| TAnon a ->
 					begin match !(a.a_status) with
 					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;
 							display_error ctx "Cannot create closure on @:extern inline method" p;
 							e_def
 							e_def
 						| Statics c when chk_class c -> wrap_extern c
 						| 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
 	match f.cff_kind with
 	| FProp ((("get" | "never"),_),(("set" | "never"),_),_,_) when not stat ->
 	| FProp ((("get" | "never"),_),(("set" | "never"),_),_,_) when not stat ->
 		(* TODO: hack to avoid issues with abstract property generation on As3 *)
 		(* 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 }
 		{ f with cff_access = AStatic :: f.cff_access; cff_meta = (Meta.Impl,[],null_pos) :: f.cff_meta }
 	| FProp _ when not stat ->
 	| FProp _ when not stat ->
 		error "Member property accessors must be get/set or never" p;
 		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 cast e = (ECast(e,None)),pos e in
 		let ret p = (EReturn (Some (cast (EConst (Ident "this"),p))),p) 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 = (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 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;
 			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. *)
 		(* We don't want the generated expression positions to shadow the real code. *)
 		let p = { p with pmax = p.pmin } in
 		let p = { p with pmax = p.pmin } in
 		let fu = {
 		let fu = {
@@ -622,7 +620,7 @@ and load_complex_type ctx allow_display p (t,pn) =
 				| APrivate -> pub := false;
 				| APrivate -> pub := false;
 				| ADynamic when (match f.cff_kind with FFun _ -> true | _ -> false) -> dyn := true
 				| ADynamic when (match f.cff_kind with FFun _ -> true | _ -> false) -> dyn := true
 				| AFinal -> final := 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;
 			) f.cff_access;
 			let t , access = (match f.cff_kind with
 			let t , access = (match f.cff_kind with
 				| FVar(t,e) when !final ->
 				| FVar(t,e) when !final ->
@@ -2093,9 +2091,15 @@ module ClassInitializer = struct
 			pass = PBuildClass; (* will be set later to PTypeExpr *)
 			pass = PBuildClass; (* will be set later to PTypeExpr *)
 		} in
 		} in
 		let is_static = List.mem AStatic cff.cff_access 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
 		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
 			| _ -> true
 		in
 		in
 		let is_inline = allow_inline && List.mem AInline cff.cff_access 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
 						| None -> display_error ctx msg p; e
 					in
 					in
 					let e = (match cf.cf_kind with
 					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
 						if not fctx.is_static then begin
 							display_error ctx "Extern non-static variables may not be initialized" p;
 							display_error ctx "Extern non-static variables may not be initialized" p;
 							e
 							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_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_kind = Var kind;
 			cf_public = is_public (ctx,cctx) f.cff_access None;
 			cf_public = is_public (ctx,cctx) f.cff_access None;
+			cf_extern = fctx.is_extern;
 		} in
 		} in
 		ctx.curfield <- cf;
 		ctx.curfield <- cf;
 		bind_var (ctx,cctx,fctx) cf eo;
 		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_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_public = is_public (ctx,cctx) f.cff_access parent;
 			cf_params = params;
 			cf_params = params;
+			cf_extern = fctx.is_extern;
 		} in
 		} in
 		cf.cf_meta <- List.map (fun (m,el,p) -> match m,el with
 		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)
 			| 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_meta = f.cff_meta;
 			cf_kind = Var { v_read = get; v_write = set };
 			cf_kind = Var { v_read = get; v_write = set };
 			cf_public = is_public (ctx,cctx) f.cff_access None;
 			cf_public = is_public (ctx,cctx) f.cff_access None;
+			cf_extern = fctx.is_extern;
 		} in
 		} in
 		ctx.curfield <- cf;
 		ctx.curfield <- cf;
 		bind_var (ctx,cctx,fctx) cf eo;
 		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;
 		if name.[0] = '$' then display_error ctx "Field names starting with a dollar are not allowed" p;
 		List.iter (fun acc ->
 		List.iter (fun acc ->
 			match (acc, f.cff_kind) with
 			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 _ -> ()
 			| ADynamic, FFun _ | AOverride, FFun _ | AMacro, FFun _ | AInline, FFun _ | AInline, FVar _ -> ()
 			| _, FVar _ -> error ("Invalid accessor '" ^ Ast.s_access acc ^ "' for variable " ^ name) p
 			| _, FVar _ -> error ("Invalid accessor '" ^ Ast.s_access acc ^ "' for variable " ^ name) p
 			| _, FProp _ -> error ("Invalid accessor '" ^ Ast.s_access acc ^ "' for property " ^ 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.
 	to another type.
 **/
 **/
 abstract Any(Dynamic) {
 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.
 		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;
 		return n * 60.0 * 1000.0;
 	}
 	}
 
 

+ 5 - 5
std/cpp/ConstCharStar.hx

@@ -21,17 +21,17 @@
  */
  */
  package cpp;
  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;
    inline function new(s:String) this = untyped s.__s;
 
 
    @:from
    @: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);
    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")
    @: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>
    inline public static function getProcAddress<T,ABI:cpp.abi.Abi>(inModule:String, inFunction:String) : Function<T,ABI>
    {
    {
       return cast nativeGetProcAddress(inModule, inFunction);
       return cast nativeGetProcAddress(inModule, inFunction);
    }
    }
 
 
    @:native("::cpp::Function_obj::fromStaticFunction")
    @: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>
    inline public static function fromStaticFunction<T>(inStaticFunction:T) : Callable<T>
    {
    {
       return cast nativeFromStaticFunction(inStaticFunction);
       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;
 		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
 	@:noDebug #if(!cppia) inline #end
 	public static function rethrow(inExp:Dynamic) { do_rethrow(inExp); }
 	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"/>')
 @:buildXml('<include name="${HXCPP}/src/hx/libs/std/Build.xml"/>')
 extern class NativeFile
 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 { }
    static public function enable(inEnable:Bool) : Void { }
 
 
-   @:native("__hxcpp_collect") @:extern
+   @:native("__hxcpp_collect") extern
    static public function run(major:Bool) : Void { }
    static public function run(major:Bool) : Void { }
 
 
-   @:native("__hxcpp_gc_compact") @:extern
+   @:native("__hxcpp_gc_compact") extern
    static public function compact() : Void { }
    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;
    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 { }
    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;
    static public function getNextZombie() : Dynamic return null;
 
 
-   @:native("__hxcpp_gc_safe_point") @:extern
+   @:native("__hxcpp_gc_safe_point") extern
    static public function safePoint() : Void { }
    static public function safePoint() : Void { }
 
 
-   @:native("__hxcpp_enter_gc_free_zone") @:extern
+   @:native("__hxcpp_enter_gc_free_zone") extern
    static public function enterGCFreeZone() : Void { }
    static public function enterGCFreeZone() : Void { }
 
 
-   @:native("__hxcpp_exit_gc_free_zone") @:extern
+   @:native("__hxcpp_exit_gc_free_zone") extern
    static public function exitGCFreeZone() : Void { }
    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 { }
    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 { }
    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 { }
    static public function setMinimumWorkingMemory(inBytes:Int) : Void { }
 }
 }
 
 

+ 9 - 9
std/cpp/NativeProcess.hx

@@ -4,37 +4,37 @@ package cpp;
 extern class NativeProcess
 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;
    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;
    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;
    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;
    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;
    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 { }
    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;
    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;
    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 { };
    public static function process_close(handle:Dynamic) : Void { };
 
 
 }
 }

+ 4 - 4
std/cpp/NativeRandom.hx

@@ -4,18 +4,18 @@ package cpp;
 extern class NativeRandom
 extern class NativeRandom
 {
 {
 
 
-   @:extern @:native("_hx_std_random_new")
+   @:native("_hx_std_random_new")
    public static function random_new() : Dynamic return null;
    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 { }
    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;
    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;
    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"/>')
 @:buildXml('<include name="${HXCPP}/src/hx/libs/std/Build.xml"/>')
 extern class NativeSocket
 extern class NativeSocket
 {
 {
-   @:extern @:native("_hx_std_socket_init")
+   @:native("_hx_std_socket_init")
    public static function socket_init() : Void { }
    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;
    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;
    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 { }
    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 { }
    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 { }
    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 { }
    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;
    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;
    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;
    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 { }
    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;
    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;
    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;
    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;
    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;
    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;
    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;
    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;
    public static function host_local() : String return null;
 
 
    inline public static function host_local_ipv6() : String return "::1";
    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 { }
    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 { }
    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 { }
    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;
    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 { }
    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;
    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;
    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;
    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 { }
    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 { }
    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 { }
    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 { }
    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;
    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;
    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 { }
    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;
    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;
    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;
    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"/>')
 @:buildXml('<include name="${HXCPP}/src/hx/libs/ssl/Build.xml"/>')
 extern class NativeSsl
 extern class NativeSsl
 {
 {
-   @:extern @:native("_hx_ssl_new")
+   @:native("_hx_ssl_new")
    public static function ssl_new( conf : Dynamic ) : Dynamic { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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> { }
    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> { }
    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> { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    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 { }
    public static function init() : Void { }
 
 
 }
 }

+ 50 - 50
std/cpp/NativeSys.hx

@@ -9,104 +9,104 @@ extern class NativeSys
    @:native("__hxcpp_println")
    @:native("__hxcpp_println")
    public static function println( v : Dynamic ) : Void { }
    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);
       x._nodeValue = text.substr(1);
       cur.addChild(x);
       cur.addChild(x);
    }
    }
-   
+
    @:keep
    @:keep
    public function done()
    public function done()
    {
    {
@@ -244,8 +244,8 @@ class Xml {
    function new() : Void {
    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
    public static function parse( str : String ) : Xml
    {
    {

+ 1 - 1
std/cpp/StdString.hx

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

+ 24 - 24
std/cpp/VirtualArray.hx

@@ -32,9 +32,9 @@ package cpp;
 abstract VirtualArray(NativeVirtualArray)
 abstract VirtualArray(NativeVirtualArray)
 {
 {
    // Add these two functions...
    // 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;
       return untyped a;
-   @:to @:extern inline public function toArray<T>() : Array<T>
+   @:to extern inline public function toArray<T>() : Array<T>
       return untyped this;
       return untyped this;
 
 
 
 
@@ -43,36 +43,36 @@ abstract VirtualArray(NativeVirtualArray)
    // The rest is just boiler-plate
    // The rest is just boiler-plate
    inline public function new() this=new NativeVirtualArray();
    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];
       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;
       return untyped this[idx] = value;
 
 
    public var length(get,never) : Int;
    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> ?
    // 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;
 	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();
 			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 {
 	#if !cppia inline #end public static function enumIndex( e : EnumValue ) : Int {
 			return getEnumValueIndex(e);
 			return getEnumValueIndex(e);

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

@@ -23,8 +23,8 @@ package haxe;
 
 
 @:coreApi class Log {
 @: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 {
 	public static dynamic function trace( v : Dynamic, ?infos : PosInfos ) : Void {
 		if (infos!=null && infos.customParams!=null) {
 		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);
 		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();
 		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
 @:keep
 private class D {
 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 >,
       charsToBytes: cpp.Callable< Dynamic -> Dynamic >,
       intToDate: cpp.Callable< Float -> Dynamic > ) : Void {}
       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")
    @: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)
    public static function runFile(filename:String)
    {
    {

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

@@ -26,26 +26,26 @@ package cpp.objc;
 @:objc
 @:objc
 extern abstract NSData( NSDataData )
 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;
    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) );
    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()) );
    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);
    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));
    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
 @:objc
 extern abstract NSDictionary( DictionaryData )
 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;
    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) );
    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);
    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
 @:objc
 extern abstract NSObject( NSObjectData )
 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;
    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);
    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);
    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 )
 extern abstract NSString( NSStringData )
 {
 {
    inline function new(s:NSStringData) this = s;
    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);
    static public inline function fromString(s:String):NSString return castFromString(s);
 
 
 
 
-   @:to @:extern
+   @:to extern
    public inline function toString():String return castToString(this);
    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);
       cpp.NativeGc.setMinimumWorkingMemory(inBytes);
 
 
    #if !cppia
    #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 { }
    static public function setFinalizer<T>(inObject:T, inFinalizer:cpp.Callable<T->Void> ) : Void { }
    #end
    #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,
 		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
 		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;
 		this = initial;
 
 
 	/**
 	/**
 		Accessible through the bitwise OR operator (`|`). Returns a new `Flags` type with the flags
 		Accessible through the bitwise OR operator (`|`). Returns a new `Flags` type with the flags
 		passed at `flags` added to it.
 		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());
 		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
 		Accessible through the bitwise AND operator (`&`). Returns a new `Flags` type with
 		the flags that are set on both `this` and `flags`
 		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());
 		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 (`^`).
 		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());
 		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
 		Accesible through the bitwise negation operator (`~`). Returns a new `Flags` type
 		with all unset flags as set - but the ones that are set already.
 		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());
 		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
 		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());
 		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
 		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;
 		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
 		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;
 		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
 		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();
 		return underlying() & flags.underlying() == flags.underlying();
 	}
 	}
 
 
-	@:extern inline private function underlying():EnumUnderlying<T>
+	extern inline private function underlying():EnumUnderlying<T>
 		return this;
 		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.
 		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);
 		var ret = new cs.NativeArray(arr.length);
 #if erase_generics
 #if erase_generics
@@ -85,7 +85,7 @@ class Lib
 		This function will not work with Value Types (such as Int, Float, Bool...)
 		This function will not work with Value Types (such as Int, Float, Bool...)
 	**/
 	**/
 	@:pure
 	@: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);
 		return untyped __as__(obj);
 	}
 	}
@@ -176,7 +176,7 @@ class Lib
 		Rethrow an exception. This is useful when manually filtering an exception in order
 		Rethrow an exception. This is useful when manually filtering an exception in order
 		to keep the previous exception stack.
 		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__;
 		throw untyped __rethrow__;
 	}
 	}
@@ -194,7 +194,7 @@ class Lib
 			});
 			});
 		This method only exists at compile-time, so it can't be called via reflection.
 		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);
 		untyped __checked__(block);
 	}
 	}
@@ -206,7 +206,7 @@ class Lib
 
 
 		This method only exists at compile-time, so it can't be called via reflection.
 		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);
 		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.
 		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);
 		untyped __fixed__(block);
 	}
 	}
@@ -242,7 +242,7 @@ class Lib
 
 
 		This method only exists at compile-time, so it can't be called via reflection.
 		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);
 		untyped __unsafe__(block);
 	}
 	}
@@ -260,7 +260,7 @@ class Lib
 		This method only exists at compile-time, so it can't be called via reflection.
 		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.
 		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);
 		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.
 		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);
 		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.
 		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);
 		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.
 		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);
 		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;
 	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;
 	static function Reverse(arr:cs.system.Array):Void;
 
 
 	/**
 	/**
 		Returns an iterator so it's possible to use `for` with C#'s `NativeArray`
 		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);
 		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>;
 	public var acc(get,never):PointerAccess<T>;
 
 
 	// @:analyzer(no_simplification)
 	// @: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
 	// backwards compatibility
 	inline public function add(i:Int):Pointer<T>
 	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;
 			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);
 		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>
 @: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.
 	 * 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();
 		return s.toString();
 	}
 	}
 
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 	{
 		--x;
 		--x;
 		x |= (x) >>> 1;
 		x |= (x) >>> 1;
@@ -431,20 +431,20 @@ import cs.NativeArray;
 		return ++x;
 		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);
 		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;
 		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;
 		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;
 		return v == FLAG_DEL;
 
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
 	//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();
 		var k:Int = untyped s.GetHashCode();
 		//k *= 357913941;
 		//k *= 357913941;
@@ -472,10 +472,10 @@ import cs.NativeArray;
 		return ret;
 		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);
 		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 DEBUG_HASHTBL
 		if (!x) throw "assert failed";
 		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>
 @: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.
 	 * 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();
 		return s.toString();
 	}
 	}
 
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 	{
 		--x;
 		--x;
 		x |= (x) >>> 1;
 		x |= (x) >>> 1;
@@ -435,17 +435,17 @@ import cs.NativeArray;
 		return ++x;
 		return ++x;
 	}
 	}
 
 
-	@:extern private static inline function isEither(v:HashType):Bool
+	extern private static inline function isEither(v:HashType):Bool
 		return (v & 0xFFFFFFFE) == 0;
 		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;
 		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;
 		return v == FLAG_DEL;
 
 
 	// guarantee: Whatever this function is, it will never return 0 nor 1
 	// 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();
 		var k:Int = untyped s.GetHashCode();
 		//k *= 357913941;
 		//k *= 357913941;
@@ -473,10 +473,10 @@ import cs.NativeArray;
 		return ret;
 		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);
 		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 DEBUG_HASHTBL
 		if (!x) throw "assert failed";
 		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.
 // 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>
 @: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.
 	 * 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();
 		return s.toString();
 	}
 	}
 
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 	{
 		--x;
 		--x;
 		x |= (x) >>> 1;
 		x |= (x) >>> 1;
@@ -491,20 +491,20 @@ import cs.system.WeakReference;
 		return ++x;
 		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);
 		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;
 		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;
 		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;
 		return v == FLAG_DEL;
 
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
 	//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();
 		var k:Int = untyped s.GetHashCode();
 		//k *= 357913941;
 		//k *= 357913941;
@@ -532,10 +532,10 @@ import cs.system.WeakReference;
 		return ret;
 		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);
 		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 DEBUG_HASHTBL
 		if (!x) throw "assert failed";
 		if (!x) throw "assert failed";

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

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

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

@@ -23,19 +23,19 @@
 @:require(sys)
 @:require(sys)
 @:coreApi
 @:coreApi
 class Sys {
 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 {
 	static public function command(cmd:String, ?args:Array<String>):Int {
 		if (args == null) {
 		if (args == null) {
@@ -57,12 +57,12 @@ class Sys {
 
 
 	static public function executablePath():String { return programPath(); }
 	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
 @:coreApi
 class File {
 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 {
 	static public function copy(srcPath:String, dstPath:String):Void {
 		var s = read(srcPath, true);
 		var s = read(srcPath, true);

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

@@ -25,10 +25,10 @@ package sys.io;
 
 
 @:coreApi
 @:coreApi
 class FileInput extends haxe.io.Input {
 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
 @:coreApi
 class FileOutput extends haxe.io.Output {
 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;
 		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;
 		return untyped if( e.params == null ) [] else e.params;
 	}
 	}
 
 
-	@:extern
+	extern
 	public inline static function enumIndex( e : EnumValue ) : Int {
 	public inline static function enumIndex( e : EnumValue ) : Int {
 		return untyped e.index;
 		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 ) {
 	public function serializeException( e : Dynamic ) {
 		buf.add("x");
 		buf.add("x");

+ 15 - 15
std/haxe/Ucs2.hx

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

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

@@ -140,7 +140,7 @@ class Sha224 {
         return blks;
         return blks;
     }
     }
 
 
-    @:extern
+    extern
     inline static function safeAdd(x, y) {
     inline static function safeAdd(x, y) {
         var lsw = (x & 0xFFFF) + (y & 0xFFFF);
         var lsw = (x & 0xFFFF) + (y & 0xFFFF);
         var msw = (x >>> 16) + (y >>> 16) + (lsw >>> 16);
         var msw = (x >>> 16) + (y >>> 16) + (lsw >>> 16);
@@ -148,45 +148,45 @@ class Sha224 {
     }
     }
 
 
     // ++
     // ++
-    @:extern
+    extern
     inline function ROTR(X, n) {
     inline function ROTR(X, n) {
         return ( X >>> n ) | (X << (32 - n));
         return ( X >>> n ) | (X << (32 - n));
     }
     }
 
 
     // ++
     // ++
-    @:extern
+    extern
     inline function SHR(X, n) {
     inline function SHR(X, n) {
         return ( X >>> n );
         return ( X >>> n );
     }
     }
 
 
     // ++
     // ++
-    @:extern
+    extern
     inline function Ch(x, y, z) {
     inline function Ch(x, y, z) {
         return ((x & y) ^ ((~x) & z));
         return ((x & y) ^ ((~x) & z));
     }
     }
 
 
     // ++
     // ++
-    @:extern
+    extern
     inline function Maj(x, y, z) {
     inline function Maj(x, y, z) {
         return ((x & y) ^ (x & z) ^ (y & z));
         return ((x & y) ^ (x & z) ^ (y & z));
     }
     }
 
 
-    @:extern
+    extern
     inline function Sigma0(x) {
     inline function Sigma0(x) {
         return ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22);
         return ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22);
     }
     }
 
 
-    @:extern
+    extern
     inline function Sigma1(x) {
     inline function Sigma1(x) {
         return ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25);
         return ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25);
     }
     }
 
 
-    @:extern
+    extern
     inline function Gamma0(x) {
     inline function Gamma0(x) {
         return ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3);
         return ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3);
     }
     }
 
 
-    @:extern
+    extern
     inline function Gamma1(x) {
     inline function Gamma1(x) {
         return ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10);
         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;
 		blks[nblk * 16 - 1] = b.length * 8;
 		return blks;
 		return blks;
 	}
 	}
-	@:extern
+	extern
 	inline function S(X, n) {
 	inline function S(X, n) {
 		return ( X >>> n ) | (X << (32 - n));
 		return ( X >>> n ) | (X << (32 - n));
 	}
 	}
 
 
-	@:extern
+	extern
 	inline function R(X, n) {
 	inline function R(X, n) {
 		return ( X >>> n );
 		return ( X >>> n );
 	}
 	}
 
 
-	@:extern
+	extern
 	inline function Ch(x, y, z) {
 	inline function Ch(x, y, z) {
 		return ((x & y) ^ ((~x) & z));
 		return ((x & y) ^ ((~x) & z));
 	}
 	}
 
 
-	@:extern
+	extern
 	inline function Maj(x, y, z) {
 	inline function Maj(x, y, z) {
 		return ((x & y) ^ (x & z) ^ (y & z));
 		return ((x & y) ^ (x & z) ^ (y & z));
 	}
 	}
 
 
-	@:extern
+	extern
 	inline function Sigma0256(x) {
 	inline function Sigma0256(x) {
 		return (S(x, 2) ^ S(x, 13) ^ S(x, 22));
 		return (S(x, 2) ^ S(x, 13) ^ S(x, 22));
 	}
 	}
 
 
-	@:extern
+	extern
 	inline function Sigma1256(x) {
 	inline function Sigma1256(x) {
 		return (S(x, 6) ^ S(x, 11) ^ S(x, 25));
 		return (S(x, 6) ^ S(x, 11) ^ S(x, 25));
 	}
 	}
 
 
-	@:extern
+	extern
 	inline function Gamma0256(x) {
 	inline function Gamma0256(x) {
 		return (S(x, 7) ^ S(x, 18) ^ R(x, 3));
 		return (S(x, 7) ^ S(x, 18) ^ R(x, 3));
 	}
 	}
 
 
-	@:extern
+	extern
 	inline function Gamma1256(x) {
 	inline function Gamma1256(x) {
 		return (S(x, 17) ^ S(x, 19) ^ R(x, 10));
 		return (S(x, 17) ^ S(x, 19) ^ R(x, 10));
 	}
 	}
 
 
-	@:extern
+	extern
 	inline function safeAdd(x, y) {
 	inline function safeAdd(x, y) {
 		var lsw = (x & 0xFFFF) + (y & 0xFFFF);
 		var lsw = (x & 0xFFFF) + (y & 0xFFFF);
 		var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
 		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);
 		keysLoop(root, ret);
 		return ret.iterator();
 		return ret.iterator();
 	}
 	}
-	
+
 	public function copy():BalancedTree<K, V> {
 	public function copy():BalancedTree<K, V> {
 		var copied = new BalancedTree<K, V>();
 		var copied = new BalancedTree<K, V>();
 		copied.root = root;
 		copied.root = root;
@@ -237,7 +237,7 @@ class TreeNode<K,V> {
 			_height = h;
 			_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() {
 	public function toString() {
 		return (left == null ? "" : left.toString() + ", ") + '$key=$value' + (right == null ? "" : ", " +right.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.item = item;
 		this.next = next;
 		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);
 		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 `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> {
 	static public inline function fromArrayCopy<T>(array:Array<T>):Vector<T> {
 		#if python
 		#if python
 		return cast array.copy();
 		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[i] == a.copy()[i]` is true for any valid `i`. However,
 		`a == a.copy()` is always false.
 		`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
 		#if eval
 		return fromData(this.copy());
 		return fromData(this.copy());
 		#else
 		#else
@@ -294,7 +294,7 @@ abstract Vector<T>(VectorData<T>) {
 
 
 		If `sep` is null, the result is unspecified.
 		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)
 		#if (flash10 || cpp || eval)
 		return this.join(sep);
 		return this.join(sep);
 		#else
 		#else
@@ -318,7 +318,7 @@ abstract Vector<T>(VectorData<T>) {
 
 
 		If `f` is null, the result is unspecified.
 		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
 		#if eval
 			return fromData(this.map(f));
 			return fromData(this.map(f));
 		#else
 		#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
 		#if flash
 		buf.writeByte(c);
 		buf.writeByte(c);
 		#else
 		#else
@@ -141,7 +141,7 @@ class JsonPrinter {
 		#end
 		#end
 	}
 	}
 
 
-	@:extern inline function add(v:String) {
+	extern inline function add(v:String) {
 		#if flash
 		#if flash
 		// argument is not always a string but will be automatically casted
 		// argument is not always a string but will be automatically casted
 		buf.writeUTFBytes(v);
 		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.
 		variables, it means they can be assigned to only once.
 	**/
 	**/
 	AFinal;
 	AFinal;
+
+	/**
+		Extern access modifier.
+	**/
+	AExtern;
 }
 }
 
 
 /**
 /**

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

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

+ 10 - 10
std/hl/Bytes.hx

@@ -23,23 +23,23 @@ package hl;
 
 
 @:coreType abstract Bytes {
 @:coreType abstract Bytes {
 
 
-	@:extern public inline function new( v : Int ) {
+	extern public inline function new( v : Int ) {
 		this = alloc(v);
 		this = alloc(v);
 	}
 	}
 
 
 	@:hlNative("std","bytes_blit") public function blit( pos : Int, src : Bytes, srcPos : Int, len : Int ) : Void {
 	@: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);
 		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);
 		untyped $bsetui8(this,pos,value);
 		return value;
 		return value;
 	}
 	}
 
 
-	@:extern public inline function getI32( pos : Int ) : Int {
+	extern public inline function getI32( pos : Int ) : Int {
 		return untyped $bgeti32(this,pos);
 		return untyped $bgeti32(this,pos);
 	}
 	}
 
 
@@ -51,23 +51,23 @@ package hl;
 		untyped $bsetui16(this,pos,v);
 		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);
 		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);
 		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);
 		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);
 		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);
 		untyped $bsetf64(this, pos, value);
 	}
 	}
 
 
@@ -205,7 +205,7 @@ package hl;
 	/**
 	/**
 		Get the bytes reference from an array of basic types (no copy occurs)
 		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);
 		return untyped $abytes(a);
 	}
 	}
 
 

+ 5 - 5
std/hl/BytesAccess.hx

@@ -27,23 +27,23 @@ package hl;
 	public var nullValue(get, never) : T;
 	public var nullValue(get, never) : T;
 
 
 
 
-	@:extern inline function get_sizeBits() {
+	extern inline function get_sizeBits() {
 		return untyped $bytes_sizebits(this);
 		return untyped $bytes_sizebits(this);
 	}
 	}
 
 
-	@:extern inline function get_nullValue() {
+	extern inline function get_nullValue() {
 		return untyped $bytes_nullvalue(this);
 		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);
 		(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);
 		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);
 		untyped $bset(this,pos,value);
 		return value;
 		return value;
 	}
 	}

+ 6 - 6
std/hl/NativeArray.hx

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

+ 5 - 5
std/hl/Ref.hx

@@ -23,20 +23,20 @@ package hl;
 
 
 @:coreType abstract Ref<T> {
 @: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);
 		return new Ref<T>(v);
 	}
 	}
 
 
-	@:extern public inline function new( v : T ) {
+	extern public inline function new( v : T ) {
 		this = untyped $ref(v);
 		this = untyped $ref(v);
 	}
 	}
-	@:extern public inline function get() : T {
+	extern public inline function get() : T {
 		return untyped $unref(this);
 		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);
 		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);
 		return untyped $refoffset(this, v);
 	}
 	}
 }
 }

+ 4 - 4
std/hl/Type.hx

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

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

@@ -64,12 +64,12 @@ class Std {
 		return t.check(v);
 		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;
 		var t : hl.BaseType = cast c;
 		return t.check(value) ? cast value : null;
 		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);
 		return untyped $int(x);
 	}
 	}
 
 

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

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

+ 2 - 2
std/java/Lib.hx

@@ -111,7 +111,7 @@ package java;
 		return untyped Array.ofNative(native);
 		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);
 		var ret:NativeArray<Dynamic> = new NativeArray(native.length);
 		for (i in 0...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.
 		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);
 		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>
 @: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.
 	 * 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();
 		return s.toString();
 	}
 	}
 
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 	{
 		--x;
 		--x;
 		x |= (x) >>> 1;
 		x |= (x) >>> 1;
@@ -432,20 +432,20 @@ import java.NativeArray;
 		return ++x;
 		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);
 		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;
 		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;
 		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;
 		return v == FLAG_DEL;
 
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
 	//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();
 		var k:Int = untyped s.hashCode();
 		//k *= 357913941;
 		//k *= 357913941;
@@ -473,10 +473,10 @@ import java.NativeArray;
 		return ret;
 		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);
 		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 DEBUG_HASHTBL
 		if (!x) throw "assert failed";
 		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>
 @: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.
 	 * 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();
 		return s.toString();
 	}
 	}
 
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 	{
 		--x;
 		--x;
 		x |= (x) >>> 1;
 		x |= (x) >>> 1;
@@ -435,20 +435,20 @@ import java.NativeArray;
 		return ++x;
 		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);
 		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;
 		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;
 		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;
 		return v == FLAG_DEL;
 
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
 	//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();
 		var k:Int = untyped s.hashCode();
 		//k *= 357913941;
 		//k *= 357913941;
@@ -476,10 +476,10 @@ import java.NativeArray;
 		return ret;
 		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);
 		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 DEBUG_HASHTBL
 		if (!x) throw "assert failed";
 		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>
 @: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.
 	 * 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();
 		return s.toString();
 	}
 	}
 
 
-	@:extern private static inline function roundUp(x:Int):Int
+	extern private static inline function roundUp(x:Int):Int
 	{
 	{
 		--x;
 		--x;
 		x |= (x) >>> 1;
 		x |= (x) >>> 1;
@@ -466,20 +466,20 @@ import java.lang.ref.ReferenceQueue;
 		return ++x;
 		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);
 		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;
 		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;
 		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;
 		return v == FLAG_DEL;
 
 
 	//guarantee: Whatever this function is, it will never return 0 nor 1
 	//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();
 		var k:Int = untyped s.hashCode();
 		//k *= 357913941;
 		//k *= 357913941;
@@ -507,10 +507,10 @@ import java.lang.ref.ReferenceQueue;
 		return ret;
 		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);
 		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 DEBUG_HASHTBL
 		if (!x) throw "assert failed";
 		if (!x) throw "assert failed";

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

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

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

@@ -25,9 +25,9 @@
 @:forward
 @:forward
 @:forwardStatics abstract Boolean(BooleanClass) from BooleanClass to BooleanClass
 @: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();
 		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);
 		return BooleanClass.valueOf(b);
 }
 }
 
 

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

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forwardStatics
 @:forward abstract Byte(ByteClass) from ByteClass to ByteClass
 @: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();
 		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);
 		return ByteClass.valueOf(b);
 }
 }
 
 

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

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forwardStatics
 @:forward abstract Character(CharacterClass) from CharacterClass to CharacterClass
 @: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();
 		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);
 		return CharacterClass.valueOf(b);
 }
 }
 
 

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

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forwardStatics
 @:forward abstract Double(DoubleClass) from DoubleClass to DoubleClass
 @: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();
 		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);
 		return DoubleClass.valueOf(b);
 }
 }
 
 

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

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forwardStatics
 @:forward abstract Float(FloatClass) from FloatClass to FloatClass
 @: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();
 		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);
 		return FloatClass.valueOf(b);
 }
 }
 
 

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

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forwardStatics
 @:forward abstract Integer(IntegerClass) from IntegerClass to IntegerClass
 @: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();
 		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);
 		return IntegerClass.valueOf(b);
 }
 }
 
 

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

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forwardStatics
 @:forward abstract Long(LongClass) from LongClass to LongClass
 @: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();
 		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);
 		return LongClass.valueOf(b);
 }
 }
 
 

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

@@ -25,9 +25,9 @@
 @:forwardStatics
 @:forwardStatics
 @:forward abstract Short(ShortClass) from ShortClass to ShortClass
 @: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();
 		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);
 		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
 		This is only supported in environments where `require` function
 		is available, such as Node.js or RequireJS.
 		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);
 		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
 		Read more at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
 	**/
 	**/
 	public static var nativeThis(get,never) : Dynamic;
 	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");
 		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
 		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);
 		return js.Syntax.typeof(o);
 	}
 	}
 
 
@@ -110,7 +110,7 @@ class Lib {
 		@:allow(js) private
 		@:allow(js) private
 	#end
 	#end
 	static var global(get,never) : Dynamic;
 	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
 		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;
 import haxe.extern.Rest;
 
 
 @:noPackageRestrict
 @:noPackageRestrict
-extern class Syntax {
+#if !macro extern #end class Syntax {
 
 
 	#if macro
 	#if macro
 	static var self = macro python.Syntax;
 	static var self = macro python.Syntax;

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

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

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

@@ -4,7 +4,7 @@ import unit.Test;
 private class Base {
 private class Base {
 	public function new() {}
 	public function new() {}
 
 
-	@:extern
+	extern
 	public var foo(default, never):Int;
 	public var foo(default, never):Int;
 
 
 	@:getter(foo)
 	@: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>)
 @:arrayAccess abstract Arr<T>(Array<T>)
 {
 {
-	@:extern inline public function new(a)
+	extern inline public function new(a)
 	{
 	{
 		this = 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 = [];
 		var arr2 = [];
 		for (v in this)
 		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 One:Meters = 1;
 	inline public static var Zero:Meters = 0;
 	inline public static var Zero:Meters = 0;
 
 
-	@:extern inline public function new(f:Float) {
+	extern inline public function new(f:Float) {
 		this = f;
 		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() {
 	@:to inline public function toString() {
 		return '$this(m)';
 		return '$this(m)';

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

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

部分文件因文件數量過多而無法顯示