Ver código fonte

makes the difference between * / Function / Object (using flash.utils.Object/Function aliases)
for methods only - in order to allow overriding

Nicolas Cannasse 13 anos atrás
pai
commit
f64cf64733

+ 26 - 6
genswf.ml

@@ -151,8 +151,9 @@ let rec make_tpath = function
 			| [], "uint" -> [], "UInt"
 			| [], "Number" -> [], "Float"
 			| [], "Boolean" -> [], "Bool"
-			| [], "Object" | [], "Function" -> [], "Dynamic"
-			| [],"Class" | [],"Array" -> pdyn := true; pack, name
+			| [], "Object" -> ["flash";"utils"], "Object"
+			| [], "Function" -> ["flash";"utils"], "Function"
+			| [], "Class" | [],"Array" -> pdyn := true; pack, name
 			| [], "Error" -> ["flash";"errors"], "Error"
 			| [] , "XML" -> ["flash";"xml"], "XML"
 			| [] , "XMLList" -> ["flash";"xml"], "XMLList"
@@ -208,8 +209,26 @@ let make_topt = function
 
 let make_type t = CTPath (make_topt t)
 
+let make_dyn_type t =
+	match make_topt t with
+	| { tpackage = ["flash";"utils"]; tname = ("Object"|"Function") } -> make_type None
+	| o -> CTPath o
+
 let build_class com c file =
 	let path = make_tpath c.hlc_name in
+	let pos = { pfile = file ^ "@" ^ s_type_path (path.tpackage,path.tname); pmin = 0; pmax = 0 } in
+	match path with
+	| { tpackage = ["flash";"utils"]; tname = ("Object"|"Function") } ->
+		let inf = {
+			d_name = path.tname;
+			d_doc = None;
+			d_params = [];
+			d_meta = [];
+			d_flags = [];
+			d_data = CTPath { tpackage = []; tname = "Dynamic"; tparams = []; tsub = None; };
+		} in
+		(path.tpackage, [(ETypedef inf,pos)])
+	| _ ->
   (* make flags *)
 	let flags = [HExtern] in
 	let flags = if c.hlc_interface then HInterface :: flags else flags in
@@ -232,7 +251,6 @@ let build_class com c file =
 	) (Array.to_list c.hlc_implements) @ flags in
 	let flags = if c.hlc_sealed || Common.defined com "flash_strict" then flags else HImplements (make_tpath (HMPath ([],"Dynamic"))) :: flags in
   (* make fields *)
-	let pos = { pfile = file ^ "@" ^ s_type_path (path.tpackage,path.tname); pmin = 0; pmax = 0 } in
 	let getters = Hashtbl.create 0 in
 	let setters = Hashtbl.create 0 in
 	let override = Hashtbl.create 0 in
@@ -277,7 +295,7 @@ let build_class com c file =
 			if v.hlv_const then
 				cf.cff_kind <- FProp ("default","never",Some (make_type v.hlv_type),None)
 			else
-				cf.cff_kind <- FVar (Some (make_type v.hlv_type),None);
+				cf.cff_kind <- FVar (Some (make_dyn_type v.hlv_type),None);
 			cf :: acc
 		| HFMethod m when m.hlm_override ->
 			Hashtbl.add override (name,stat) ();
@@ -287,6 +305,7 @@ let build_class com c file =
 			| MK3Normal ->
 				let t = m.hlm_type in
 				let p = ref 0 and pn = ref 0 in
+				let make_type = if stat || name = "new" then make_dyn_type else make_type in
 				let args = List.map (fun at ->
 					let aname = (match t.hlmt_pnames with
 						| None -> incr pn; "p" ^ string_of_int !pn
@@ -378,7 +397,7 @@ let build_class com c file =
 			cff_doc = None;
 			cff_access = flags;
 			cff_meta = [];
-			cff_kind = if get && set then FVar (Some (make_type t), None) else FProp ((if get then "default" else "never"),(if set then "default" else "never"),Some (make_type t),None);
+			cff_kind = if get && set then FVar (Some (make_dyn_type t), None) else FProp ((if get then "default" else "never"),(if set then "default" else "never"),Some (make_dyn_type t),None);
 		}
 	in
 	let fields = Hashtbl.fold (fun (name,stat) t acc ->
@@ -438,7 +457,8 @@ let extract_data (_,tags) =
 		| HFClass c ->
 			let path = make_tpath f.hlf_name in
 			(match path with
-			| { tpackage = []; tname = "Float" | "Bool" | "MethodClosure" | "Int" | "UInt" | "Dynamic" } -> ()
+			| { tpackage = []; tname = "Float" | "Bool" | "Int" | "UInt" | "Dynamic" } -> ()
+			| { tpackage = _; tname = "MethodClosure" } -> ()
 			| _ -> Hashtbl.add h (path.tpackage,path.tname) c)
 		| _ -> ()
 	in

+ 9 - 3
genswf9.ml

@@ -160,6 +160,8 @@ let real_path = function
 	| ["flash";"xml"], "XMLList" -> [], "XMLList"
 	| ["flash";"utils"], "QName" -> [] , "QName"
 	| ["flash";"utils"], "Namespace" -> [] , "Namespace"
+	| ["flash";"utils"], "Object" -> [] , "Object"
+	| ["flash";"utils"], "Function" -> [] , "Function"
 	| ["flash"] , "FlashXml__" -> [] , "Xml"
 	| ["flash";"errors"] , "Error" -> [], "Error"
 	| ["flash"] , "Vector" -> ["__AS3__";"vec"], "Vector"
@@ -187,6 +189,8 @@ let rec follow_basic t =
 		| TType ({ t_path = [],"UInt" },[])
 		| TEnum ({ e_path = ([],"Bool") },[]) -> t
 		| t -> t)
+	| TType ({ t_path = ["flash";"utils"],"Object" },[])
+	| TType ({ t_path = ["flash";"utils"],"Function" },[])
 	| TType ({ t_path = [],"UInt" },[]) ->
 		t
 	| TType (t,tl) ->
@@ -209,7 +213,7 @@ let rec type_id ctx t =
 			type_id ctx (TInst (c,params))
 		| _ ->
 			type_path ctx c.cl_path)
-	| TFun _ ->
+	| TFun _ | TType ({ t_path = ["flash";"utils"],"Function" },[]) ->
 		type_path ctx ([],"Function")
 	| TType ({ t_path = ([],"UInt") as path },_) ->
 		type_path ctx path
@@ -226,7 +230,7 @@ let rec type_id ctx t =
 		HMPath ([],"Object")
 
 let type_opt ctx t =
-	match follow t with
+	match follow_basic t with
 	| TDynamic _ | TMono _ -> None
 	| _ -> Some (type_id ctx t)
 
@@ -263,12 +267,14 @@ let classify ctx t =
 		KType (type_id ctx t)
 	| TType ({ t_path = [],"UInt" },_) ->
 		KUInt
-	| TFun _ ->
+	| TFun _ | TType ({ t_path = ["flash";"utils"],"Function" },[]) ->
 		KType (HMPath ([],"Function"))
 	| TAnon a ->
 		(match !(a.a_status) with
 		| Statics _ -> KNone
 		| _ -> KDynamic)
+	| TType ({ t_path = ["flash";"utils"],"Object" },[]) ->
+		KType (HMPath ([],"Object"))
 	| TMono _
 	| TType _
 	| TDynamic _ ->

+ 3 - 3
std/flash/desktop/Clipboard.hx

@@ -4,9 +4,9 @@ package flash.desktop;
 	var formats(default,null) : Array<ClipboardFormats>;
 	function clear() : Void;
 	function clearData(format : ClipboardFormats) : Void;
-	function getData(format : ClipboardFormats, ?transferMode : ClipboardTransferMode) : Dynamic;
+	function getData(format : ClipboardFormats, ?transferMode : ClipboardTransferMode) : flash.utils.Object;
 	function hasFormat(format : ClipboardFormats) : Bool;
-	function setData(format : ClipboardFormats, data : Dynamic, serializable : Bool = true) : Bool;
-	function setDataHandler(format : ClipboardFormats, handler : Dynamic, serializable : Bool = true) : Bool;
+	function setData(format : ClipboardFormats, data : flash.utils.Object, serializable : Bool = true) : Bool;
+	function setDataHandler(format : ClipboardFormats, handler : flash.utils.Function, serializable : Bool = true) : Bool;
 	static var generalClipboard(default,null) : Clipboard;
 }

+ 1 - 1
std/flash/display/AVM1Movie.hx

@@ -2,6 +2,6 @@ package flash.display;
 
 extern class AVM1Movie extends DisplayObject {
 	function new() : Void;
-	function addCallback(functionName : String, closure : Dynamic) : Void;
+	function addCallback(functionName : String, closure : flash.utils.Function) : Void;
 	function call(functionName : String, ?p1 : Dynamic, ?p2 : Dynamic, ?p3 : Dynamic, ?p4 : Dynamic, ?p5 : Dynamic) : Dynamic;
 }

+ 3 - 3
std/flash/display/BitmapData.hx

@@ -9,14 +9,14 @@ extern class BitmapData implements IBitmapDrawable {
 	function applyFilter(sourceBitmapData : BitmapData, sourceRect : flash.geom.Rectangle, destPoint : flash.geom.Point, filter : flash.filters.BitmapFilter) : Void;
 	function clone() : BitmapData;
 	function colorTransform(rect : flash.geom.Rectangle, colorTransform : flash.geom.ColorTransform) : Void;
-	function compare(otherBitmapData : BitmapData) : Dynamic;
+	function compare(otherBitmapData : BitmapData) : flash.utils.Object;
 	function copyChannel(sourceBitmapData : BitmapData, sourceRect : flash.geom.Rectangle, destPoint : flash.geom.Point, sourceChannel : UInt, destChannel : UInt) : Void;
 	function copyPixels(sourceBitmapData : BitmapData, sourceRect : flash.geom.Rectangle, destPoint : flash.geom.Point, ?alphaBitmapData : BitmapData, ?alphaPoint : flash.geom.Point, mergeAlpha : Bool = false) : Void;
 	@:require(flash11_4) function copyPixelsToByteArray(rect : flash.geom.Rectangle, data : flash.utils.ByteArray) : Void;
 	function dispose() : Void;
 	function draw(source : IBitmapDrawable, ?matrix : flash.geom.Matrix, ?colorTransform : flash.geom.ColorTransform, ?blendMode : BlendMode, ?clipRect : flash.geom.Rectangle, smoothing : Bool = false) : Void;
 	@:require(flash11_3) function drawWithQuality(source : IBitmapDrawable, ?matrix : flash.geom.Matrix, ?colorTransform : flash.geom.ColorTransform, ?blendMode : BlendMode, ?clipRect : flash.geom.Rectangle, smoothing : Bool = false, ?quality : StageQuality) : Void;
-	@:require(flash11_3) function encode(rect : flash.geom.Rectangle, compressor : Dynamic, ?byteArray : flash.utils.ByteArray) : flash.utils.ByteArray;
+	@:require(flash11_3) function encode(rect : flash.geom.Rectangle, compressor : flash.utils.Object, ?byteArray : flash.utils.ByteArray) : flash.utils.ByteArray;
 	function fillRect(rect : flash.geom.Rectangle, color : UInt) : Void;
 	function floodFill(x : Int, y : Int, color : UInt) : Void;
 	function generateFilterRect(sourceRect : flash.geom.Rectangle, filter : flash.filters.BitmapFilter) : flash.geom.Rectangle;
@@ -26,7 +26,7 @@ extern class BitmapData implements IBitmapDrawable {
 	function getPixels(rect : flash.geom.Rectangle) : flash.utils.ByteArray;
 	@:require(flash10) function getVector(rect : flash.geom.Rectangle) : flash.Vector<UInt>;
 	@:require(flash10) function histogram(?hRect : flash.geom.Rectangle) : flash.Vector<flash.Vector<Float>>;
-	function hitTest(firstPoint : flash.geom.Point, firstAlphaThreshold : UInt, secondObject : Dynamic, ?secondBitmapDataPoint : flash.geom.Point, secondAlphaThreshold : UInt = 1) : Bool;
+	function hitTest(firstPoint : flash.geom.Point, firstAlphaThreshold : UInt, secondObject : flash.utils.Object, ?secondBitmapDataPoint : flash.geom.Point, secondAlphaThreshold : UInt = 1) : Bool;
 	function lock() : Void;
 	function merge(sourceBitmapData : BitmapData, sourceRect : flash.geom.Rectangle, destPoint : flash.geom.Point, redMultiplier : UInt, greenMultiplier : UInt, blueMultiplier : UInt, alphaMultiplier : UInt) : Void;
 	function noise(randomSeed : Int, low : UInt = 0, high : UInt = 255, channelOptions : UInt = 7, grayScale : Bool = false) : Void;

+ 2 - 2
std/flash/display/MovieClip.hx

@@ -14,8 +14,8 @@ extern class MovieClip extends Sprite #if !flash_strict, implements Dynamic #end
 	var trackAsMenu : Bool;
 	function new() : Void;
 	function addFrameScript(?p1 : Dynamic, ?p2 : Dynamic, ?p3 : Dynamic, ?p4 : Dynamic, ?p5 : Dynamic) : Void;
-	function gotoAndPlay(frame : Dynamic, ?scene : String) : Void;
-	function gotoAndStop(frame : Dynamic, ?scene : String) : Void;
+	function gotoAndPlay(frame : flash.utils.Object, ?scene : String) : Void;
+	function gotoAndStop(frame : flash.utils.Object, ?scene : String) : Void;
 	function nextFrame() : Void;
 	function nextScene() : Void;
 	function play() : Void;

+ 1 - 1
std/flash/globalization/LocaleID.hx

@@ -4,7 +4,7 @@ package flash.globalization;
 	var lastOperationStatus(default,null) : LastOperationStatus;
 	var name(default,null) : String;
 	function new(name : String) : Void;
-	function getKeysAndValues() : Dynamic;
+	function getKeysAndValues() : flash.utils.Object;
 	function getLanguage() : String;
 	function getRegion() : String;
 	function getScript() : String;

+ 1 - 1
std/flash/net/IDynamicPropertyWriter.hx

@@ -1,5 +1,5 @@
 package flash.net;
 
 extern interface IDynamicPropertyWriter {
-	function writeDynamicProperties(obj : Dynamic, output : IDynamicPropertyOutput) : Void;
+	function writeDynamicProperties(obj : flash.utils.Object, output : IDynamicPropertyOutput) : Void;
 }

+ 1 - 1
std/flash/net/NetConnection.hx

@@ -16,7 +16,7 @@ extern class NetConnection extends flash.events.EventDispatcher {
 	var uri(default,null) : String;
 	var usingTLS(default,null) : Bool;
 	function new() : Void;
-	function addHeader(operation : String, mustUnderstand : Bool = false, ?param : Dynamic) : Void;
+	function addHeader(operation : String, mustUnderstand : Bool = false, ?param : flash.utils.Object) : Void;
 	function call(command : String, responder : Responder, ?p1 : Dynamic, ?p2 : Dynamic, ?p3 : Dynamic, ?p4 : Dynamic, ?p5 : Dynamic) : Void;
 	function close() : Void;
 	function connect(command : String, ?p1 : Dynamic, ?p2 : Dynamic, ?p3 : Dynamic, ?p4 : Dynamic, ?p5 : Dynamic) : Void;

+ 5 - 5
std/flash/net/NetGroup.hx

@@ -16,11 +16,11 @@ package flash.net;
 	function close() : Void;
 	function convertPeerIDToGroupAddress(peerID : String) : String;
 	function denyRequestedObject(requestID : Int) : Void;
-	function post(message : Dynamic) : String;
+	function post(message : flash.utils.Object) : String;
 	function removeHaveObjects(startIndex : Float, endIndex : Float) : Void;
 	function removeWantObjects(startIndex : Float, endIndex : Float) : Void;
-	function sendToAllNeighbors(message : Dynamic) : String;
-	function sendToNearest(message : Dynamic, groupAddress : String) : String;
-	function sendToNeighbor(message : Dynamic, sendMode : String) : String;
-	function writeRequestedObject(requestID : Int, object : Dynamic) : Void;
+	function sendToAllNeighbors(message : flash.utils.Object) : String;
+	function sendToNearest(message : flash.utils.Object, groupAddress : String) : String;
+	function sendToNeighbor(message : flash.utils.Object, sendMode : String) : String;
+	function writeRequestedObject(requestID : Int, object : flash.utils.Object) : Void;
 }

+ 1 - 1
std/flash/net/SharedObject.hx

@@ -13,7 +13,7 @@ extern class SharedObject extends flash.events.EventDispatcher {
 	function flush(minDiskSpace : Int = 0) : String;
 	function send(?p1 : Dynamic, ?p2 : Dynamic, ?p3 : Dynamic, ?p4 : Dynamic, ?p5 : Dynamic) : Void;
 	function setDirty(propertyName : String) : Void;
-	function setProperty(propertyName : String, ?value : Dynamic) : Void;
+	function setProperty(propertyName : String, ?value : flash.utils.Object) : Void;
 	static var defaultObjectEncoding : UInt;
 	static function deleteAll(url : String) : Int;
 	static function getDiskUsage(url : String) : Int;

+ 1 - 1
std/flash/system/ApplicationDomain.hx

@@ -4,7 +4,7 @@ package flash.system;
 	@:require(flash10) var domainMemory : flash.utils.ByteArray;
 	var parentDomain(default,null) : ApplicationDomain;
 	function new(?parentDomain : ApplicationDomain) : Void;
-	function getDefinition(name : String) : Dynamic;
+	function getDefinition(name : String) : flash.utils.Object;
 	@:require(flash11_3) function getQualifiedDefinitionNames() : flash.Vector<String>;
 	function hasDefinition(name : String) : Bool;
 	@:require(flash10) static var MIN_DOMAIN_MEMORY_LENGTH(default,null) : UInt;

+ 3 - 3
std/flash/text/StyleSheet.hx

@@ -4,8 +4,8 @@ extern class StyleSheet extends flash.events.EventDispatcher, implements Dynamic
 	var styleNames(default,null) : Array<Dynamic>;
 	function new() : Void;
 	function clear() : Void;
-	function getStyle(styleName : String) : Dynamic;
+	function getStyle(styleName : String) : flash.utils.Object;
 	function parseCSS(CSSText : String) : Void;
-	function setStyle(styleName : String, styleObject : Dynamic) : Void;
-	function transform(formatObject : Dynamic) : TextFormat;
+	function setStyle(styleName : String, styleObject : flash.utils.Object) : Void;
+	function transform(formatObject : flash.utils.Object) : TextFormat;
 }

+ 1 - 1
std/flash/utils/ByteArray.hx

@@ -1,6 +1,6 @@
 package flash.utils;
 
-extern class ByteArray implements IDataOutput, implements IDataInput, implements ArrayAccess<Int> {
+extern class ByteArray implements IDataOutput2, implements IDataInput2, implements ArrayAccess<Int> {
 	var bytesAvailable(default,null) : UInt;
 	var endian : Endian;
 	var length : UInt;

+ 3 - 0
std/flash/utils/Function.hx

@@ -0,0 +1,3 @@
+package flash.utils;
+
+typedef Function = Dynamic

+ 4 - 0
std/flash/utils/IDataInput2.hx

@@ -0,0 +1,4 @@
+package flash.utils;
+
+extern interface IDataInput2 implements IDataInput {
+}

+ 4 - 0
std/flash/utils/IDataOutput2.hx

@@ -0,0 +1,4 @@
+package flash.utils;
+
+extern interface IDataOutput2 implements IDataOutput {
+}

+ 3 - 0
std/flash/utils/Object.hx

@@ -0,0 +1,3 @@
+package flash.utils;
+
+typedef Object = Dynamic

+ 4 - 4
std/flash/xml/XML.hx

@@ -20,13 +20,13 @@ package flash.xml;
 	function insertChildAfter(child1 : Dynamic, child2 : Dynamic) : Dynamic;
 	function insertChildBefore(child1 : Dynamic, child2 : Dynamic) : Dynamic;
 	function length() : Int;
-	function localName() : Dynamic;
-	function name() : Dynamic;
+	function localName() : flash.utils.Object;
+	function name() : flash.utils.Object;
 	function namespace(?prefix : Dynamic) : flash.utils.Namespace;
 	function namespaceDeclarations() : Array<Dynamic>;
 	function nodeKind() : String;
 	function normalize() : XML;
-	function notification() : Dynamic;
+	function notification() : flash.utils.Function;
 	function parent() : XML;
 	function prependChild(value : Dynamic) : XML;
 	function processingInstructions(?name : Dynamic) : XMLList;
@@ -36,7 +36,7 @@ package flash.xml;
 	function setLocalName(name : Dynamic) : Void;
 	function setName(name : Dynamic) : Void;
 	function setNamespace(ns : Dynamic) : Void;
-	function setNotification(f : Dynamic) : Dynamic;
+	function setNotification(f : flash.utils.Function) : Dynamic;
 	function text() : XMLList;
 	@:require(flash11) function toJSON(k : String) : Dynamic;
 	function toString() : String;

+ 2 - 2
std/flash/xml/XMLList.hx

@@ -20,8 +20,8 @@ package flash.xml;
 	function insertChildAfter(child1 : Dynamic, child2 : Dynamic) : Dynamic;
 	function insertChildBefore(child1 : Dynamic, child2 : Dynamic) : Dynamic;
 	function length() : Int;
-	function localName() : Dynamic;
-	function name() : Dynamic;
+	function localName() : flash.utils.Object;
+	function name() : flash.utils.Object;
 	function namespace(?prefix : Dynamic) : flash.utils.Namespace;
 	function namespaceDeclarations() : Array<Dynamic>;
 	function nodeKind() : String;