Update Files

This commit is contained in:
2025-01-22 16:18:30 +01:00
parent ed4603cf95
commit a36294b518
16718 changed files with 2960346 additions and 0 deletions

View File

@ -0,0 +1,100 @@
package haxe;
import flash.errors.Error;
@:coreApi
class Exception extends NativeException {
public var message(get,never):String;
public var stack(get,never):CallStack;
public var previous(get,never):Null<Exception>;
public var native(get,never):Any;
@:noCompletion var __exceptionStack:Null<CallStack>;
@:noCompletion var __nativeStack:String;
@:noCompletion @:ifFeature("haxe.Exception.get_stack") var __skipStack:Int;
@:noCompletion var __nativeException:Error;
@:noCompletion var __previousException:Null<Exception>;
static function caught(value:Any):Exception {
if(Std.isOfType(value, Exception)) {
return value;
} else if(Std.isOfType(value, Error)) {
return new Exception((value:Error).message, null, value);
} else {
return new ValueException(value, null, value);
}
}
static function thrown(value:Any):Any {
if(Std.isOfType(value, Exception)) {
return (value:Exception).native;
} else if(Std.isOfType(value, Error)) {
return value;
} else {
var e = new ValueException(value);
e.__shiftStack();
return e;
}
}
public function new(message:String, ?previous:Exception, ?native:Any) {
super(message);
__previousException = previous;
if(native != null && Std.isOfType(native, Error)) {
__nativeException = native;
__nativeStack = NativeStackTrace.normalize((native:Error).getStackTrace());
} else {
__nativeException = cast this;
__nativeStack = NativeStackTrace.callStack();
}
}
function unwrap():Any {
return __nativeException;
}
public function toString():String {
return message;
}
public function details():String {
return inline CallStack.exceptionToString(this);
}
@:noCompletion
@:ifFeature("haxe.Exception.get_stack")
inline function __shiftStack():Void {
__skipStack++;
}
function get_message():String {
return (cast this:Error).message;
}
function get_previous():Null<Exception> {
return __previousException;
}
final function get_native():Any {
return __nativeException;
}
function get_stack():CallStack {
return switch __exceptionStack {
case null:
__exceptionStack = NativeStackTrace.toHaxe(__nativeStack, __skipStack);
case s: s;
}
}
}
@:dox(hide)
@:native('flash.errors.Error')
extern class NativeException {
@:noCompletion @:flash.property private var errorID(get,never):Int;
// @:noCompletion private var message:Dynamic;
@:noCompletion private var name:Dynamic;
@:noCompletion private function new(?message:Dynamic, id:Dynamic = 0):Void;
@:noCompletion private function getStackTrace():String;
@:noCompletion private function get_errorID():Int;
}

View File

@ -0,0 +1,107 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe;
import haxe.io.Bytes;
typedef Http = HttpFlash;
class HttpFlash extends haxe.http.HttpBase {
var req:flash.net.URLLoader;
/**
Cancels `this` Http request if `request` has been called and a response
has not yet been received.
**/
public function cancel() {
if (req == null)
return;
req.close();
req = null;
}
public override function request(?post:Bool) {
responseAsString = null;
responseBytes = null;
var loader = req = new flash.net.URLLoader();
loader.dataFormat = BINARY;
loader.addEventListener("complete", function(e) {
req = null;
success(Bytes.ofData(loader.data));
});
loader.addEventListener("httpStatus", function(e:flash.events.HTTPStatusEvent) {
// on Firefox 1.5, Flash calls onHTTPStatus with 0 (!??)
if (e.status != 0)
onStatus(e.status);
});
loader.addEventListener("ioError", function(e:flash.events.IOErrorEvent) {
req = null;
responseBytes = Bytes.ofData(loader.data);
onError(e.text);
});
loader.addEventListener("securityError", function(e:flash.events.SecurityErrorEvent) {
req = null;
onError(e.text);
});
// headers
var param = false;
var vars = new flash.net.URLVariables();
for (p in params) {
param = true;
Reflect.setField(vars, p.name, p.value);
}
var small_url = url;
if (param && !post) {
var k = url.split("?");
if (k.length > 1) {
small_url = k.shift();
vars.decode(k.join("?"));
}
}
// Bug in flash player 9 ???
small_url.split("xxx");
var request = new flash.net.URLRequest(small_url);
for (h in headers)
request.requestHeaders.push(new flash.net.URLRequestHeader(h.name, h.value));
if (postData != null) {
request.data = postData;
request.method = "POST";
} else if (postBytes != null) {
request.data = postBytes.getData();
request.method = "POST";
} else {
request.data = vars;
request.method = if (post) "POST" else "GET";
}
try {
loader.load(request);
} catch (e:Dynamic) {
req = null;
onError("Exception: " + Std.string(e));
}
}
}

View File

@ -0,0 +1,46 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe;
@:coreApi
#if (!haxeJSON && flash11)
@:native("JSON")
extern
#end
class Json {
#if (haxeJSON || !flash11)
inline
#end
public static function parse(text:String):Dynamic
#if (!haxeJSON && flash11); #else {
return haxe.format.JsonParser.parse(text);
} #end
#if (haxeJSON || !flash11)
inline
#end
public static function stringify(value:Dynamic, ?replacer:(key:Dynamic, value:Dynamic) -> Dynamic, ?space:String):String
#if (!haxeJSON && flash11); #else {
return haxe.format.JsonPrinter.print(value, replacer, space);
} #end
}

View File

@ -0,0 +1,61 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe;
@:coreApi class Log {
public static function formatOutput(v:Dynamic, infos:PosInfos):String {
var str = Std.string(v);
if (infos == null)
return str;
var pstr = infos.fileName + ":" + infos.lineNumber;
if (infos != null && infos.customParams != null)
for (v in infos.customParams)
str += ", " + Std.string(v);
return pstr + ": " + str;
}
public static dynamic function trace(v:Dynamic, ?infos:PosInfos):Void {
#if (fdb || native_trace)
var str = formatOutput(v, infos);
untyped __global__["trace"](str);
#else
flash.Boot.__trace(v, infos);
#end
}
/**
Clears the trace output.
**/
@:hack
public static dynamic function clear():Void {
flash.Boot.__clear_trace();
}
/**
Sets the color of the trace output to `rgb`.
**/
@:hack
public static dynamic function setColor(rgb:Int):Void {
flash.Boot.__set_trace_color(rgb);
}
}

View File

@ -0,0 +1,69 @@
package haxe;
import flash.errors.Error;
import haxe.CallStack.StackItem;
/**
Do not use manually.
**/
@:dox(hide)
@:noCompletion
@:allow(haxe.Exception)
class NativeStackTrace {
@:ifFeature('haxe.NativeStackTrace.exceptionStack')
static public inline function saveStack(e:Any):Void {
}
static public inline function callStack():String {
return normalize(new Error().getStackTrace(), 1);
}
static public function exceptionStack():String {
var err:Null<Error> = untyped flash.Boot.lastError;
return err == null ? '' : normalize(err.getStackTrace());
}
static public function toHaxe(native:String, skip:Int = 0):Array<StackItem> {
var a = new Array();
var r = ~/at ([^\/]+?)\$?(\/[^\(]+)?\(\)(\[(.*?):([0-9]+)\])?/;
var rlambda = ~/^MethodInfo-([0-9]+)$/g;
var cnt = 0;
while (r.match(native)) {
native = r.matchedRight();
if(skip > cnt++) {
continue;
}
var cl = r.matched(1).split("::").join(".");
var meth = r.matched(2);
var item;
if (meth == null) {
if (rlambda.match(cl))
item = LocalFunction(Std.parseInt(rlambda.matched(1)));
else
item = Method(cl, "new");
} else
item = Method(cl, meth.substring(1));
if (r.matched(3) != null)
item = FilePos(item, r.matched(4), Std.parseInt(r.matched(5)));
a.push(item);
}
return a;
}
static function normalize(stack:String, skipItems:Int = 0):String {
switch (stack:String).substring(0, 6) {
case 'Error:' | 'Error\n': skipItems += 1;
case _:
}
return skipLines(stack, skipItems);
}
static function skipLines(stack:String, skip:Int, pos:Int = 0):String {
return if(skip > 0) {
pos = stack.indexOf('\n', pos);
return pos < 0 ? '' : skipLines(stack, --skip, pos + 1);
} else {
return stack.substring(pos);
}
}
}

View File

@ -0,0 +1,59 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe;
@:coreApi
class Resource {
static var content:Array<{name:String}>;
public static function listNames():Array<String> {
var names = new Array();
for (x in content)
names.push(x.name);
return names;
}
public static function getString(name:String):String {
var b = resolve(name);
return b == null ? null : b.readUTFBytes(b.length);
}
public static function getBytes(name:String):haxe.io.Bytes {
var b = resolve(name);
return b == null ? null : haxe.io.Bytes.ofData(b);
}
static function resolve(name:String):flash.utils.ByteArray {
try
untyped {
var c = __as__(__global__["flash.utils.getDefinitionByName"]("_res._" + name.split(".").join("_")), Class);
return __new__(c);
} catch (e:Dynamic) {
return null;
}
}
static function __init__():Void {
content = untyped __resources__();
}
}

View File

@ -0,0 +1,142 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe.ds;
@:coreApi class IntMap<T> implements haxe.Constraints.IMap<Int, T> {
private var h:flash.utils.Dictionary;
public function new():Void {
h = new flash.utils.Dictionary();
}
public inline function set(key:Int, value:T):Void {
untyped h[key] = value;
}
public inline function get(key:Int):Null<T> {
return untyped h[key];
}
public inline function exists(key:Int):Bool {
return untyped __in__(key, h);
}
public function remove(key:Int):Bool {
if (!exists(key))
return false;
untyped __delete__(h, key);
return true;
}
public inline function keys():Iterator<Int> {
return new IntMapKeysIterator(h);
}
public inline function iterator():Iterator<T> {
return new IntMapValuesIterator<T>(h);
}
@:runtime public inline function keyValueIterator():KeyValueIterator<Int, T> {
return new haxe.iterators.MapKeyValueIterator(this);
}
public function copy():IntMap<T> {
var copied = new IntMap();
for (key in keys())
copied.set(key, get(key));
return copied;
}
public function toString():String {
var s = new StringBuf();
s.add("{");
var it = keys();
for (i in it) {
s.add(i);
s.add(" => ");
s.add(Std.string(get(i)));
if (it.hasNext())
s.add(", ");
}
s.add("}");
return s.toString();
}
public inline function clear():Void {
h = new flash.utils.Dictionary();
}
}
// this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation
@:allow(haxe.ds.IntMap)
private class IntMapKeysIterator {
var h:flash.utils.Dictionary;
var index:Int;
var nextIndex:Int;
inline function new(h:flash.utils.Dictionary):Void {
this.h = h;
this.index = 0;
hasNext();
}
public inline function hasNext():Bool {
var h = h, index = index; // tmp vars required for __has_next
var n = untyped __has_next__(h, index);
this.nextIndex = index; // store next index
return n;
}
public inline function next():Int {
var r:Int = untyped __forin__(h, nextIndex);
index = nextIndex;
return r;
}
}
@:allow(haxe.ds.IntMap)
private class IntMapValuesIterator<T> {
var h:flash.utils.Dictionary;
var index:Int;
var nextIndex:Int;
inline function new(h:flash.utils.Dictionary):Void {
this.h = h;
this.index = 0;
hasNext();
}
public inline function hasNext():Bool {
var h = h, index = index; // tmp vars required for __has_next
var n = untyped __has_next__(h, index);
this.nextIndex = index; // store next index
return n;
}
public inline function next():T {
var r = untyped __foreach__(h, nextIndex);
index = nextIndex;
return r;
}
}

View File

@ -0,0 +1,141 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe.ds;
@:coreApi
class ObjectMap<K:{}, V> extends flash.utils.Dictionary implements haxe.Constraints.IMap<K, V> {
public function new() {
super(false);
}
public inline function get(key:K):Null<V> {
return untyped this[key];
}
public inline function set(key:K, value:V):Void {
untyped this[key] = value;
}
public inline function exists(key:K):Bool {
return untyped this[key] != null;
}
public function remove(key:K):Bool {
var has = exists(key);
untyped __delete__(this, key);
return has;
}
public function keys():Iterator<K> {
return NativePropertyIterator.iterator(this);
}
public function iterator():Iterator<V> {
return NativeValueIterator.iterator(this);
}
@:runtime public inline function keyValueIterator():KeyValueIterator<K, V> {
return new haxe.iterators.MapKeyValueIterator(this);
}
public function copy():ObjectMap<K, V> {
var copied = new ObjectMap();
for (key in keys())
copied.set(key, get(key));
return copied;
}
public function toString():String {
var s = "";
var it = keys();
for (i in it) {
s += (s == "" ? "" : ",") + Std.string(i);
s += " => ";
s += Std.string(get(i));
}
return s + "}";
}
public function clear():Void {
for (i in keys())
untyped __delete__(this, i);
}
}
private class NativePropertyIterator {
var collection:Dynamic;
var index:Int = 0;
public static inline function iterator(collection:Dynamic):NativePropertyIterator {
var result = new NativePropertyIterator();
result.collection = collection;
return result;
}
function new() {}
public inline function hasNext():Bool {
var c = collection;
var i = index;
var result = untyped __has_next__(c, i);
collection = c;
index = i;
return result;
}
public inline function next():Dynamic {
var i = index;
var result = untyped __forin__(collection, i);
index = i;
return result;
}
}
private class NativeValueIterator {
var collection:Dynamic;
var index:Int = 0;
public static inline function iterator(collection:Dynamic):NativeValueIterator {
var result = new NativeValueIterator();
result.collection = collection;
return result;
}
function new() {}
public inline function hasNext():Bool {
var c = collection;
var i = index;
var result = untyped __has_next__(c, i);
collection = c;
index = i;
return result;
}
public inline function next():Dynamic {
var i = index;
var result = untyped __foreach__(collection, i);
index = i;
return result;
}
}

View File

@ -0,0 +1,202 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe.ds;
@:coreApi class StringMap<T> implements haxe.Constraints.IMap<String, T> {
private var h:Dynamic;
private var rh:Dynamic;
static var reserved = {};
public function new():Void {
h = {};
}
inline function isReserved(key:String):Bool {
return untyped __in__(key, reserved);
}
public inline function set(key:String, value:T):Void {
if (isReserved(key))
setReserved(key, value);
else
untyped h[key] = value;
}
public inline function get(key:String):Null<T> {
if (isReserved(key))
return getReserved(key);
return untyped h[key];
}
public inline function exists(key:String):Bool {
if (isReserved(key))
return existsReserved(key);
return untyped __in__(key, h);
}
function setReserved(key:String, value:T):Void {
if (rh == null)
rh = {};
untyped rh["$" + key] = value;
}
function getReserved(key:String):Null<T> {
return rh == null ? null : untyped rh["$" + key];
}
function existsReserved(key:String):Bool {
if (rh == null)
return false;
return untyped __in__("$" + key, rh);
}
public function remove(key:String):Bool {
if (isReserved(key)) {
key = "$" + key;
if (rh == null || !untyped __in__(key, rh))
return false;
untyped __delete__(rh, key);
return true;
} else {
if (!untyped __in__(key, h))
return false;
untyped __delete__(h, key);
return true;
}
}
public inline function keys():Iterator<String> {
return new StringMapKeysIterator(h, rh);
}
public inline function iterator():Iterator<T> {
return new StringMapValuesIterator<T>(h, rh);
}
@:runtime public inline function keyValueIterator():KeyValueIterator<String, T> {
return new haxe.iterators.MapKeyValueIterator(this);
}
public function copy():StringMap<T> {
var copied = new StringMap();
for (key in keys())
copied.set(key, get(key));
return copied;
}
public function toString():String {
var s = new StringBuf();
s.add("{");
var it = keys();
for (i in it) {
s.add(i);
s.add(" => ");
s.add(Std.string(get(i)));
if (it.hasNext())
s.add(", ");
}
s.add("}");
return s.toString();
}
public inline function clear():Void {
h = {};
rh = null;
}
}
// this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation
@:allow(haxe.ds.StringMap)
private class StringMapKeysIterator {
var h:Dynamic;
var rh:Dynamic;
var index:Int;
var nextIndex:Int;
var isReserved:Bool;
inline function new(h:Dynamic, rh:Dynamic):Void {
this.h = h;
this.rh = rh;
this.index = 0;
isReserved = false;
hasNext();
}
public inline function hasNext():Bool {
var h = h, index = index; // tmp vars required for __has_next
var n = untyped __has_next__(h, index);
if (!n && rh != null) {
h = this.h = rh;
index = this.index = 0;
rh = null;
isReserved = true;
n = untyped __has_next__(h, index);
}
this.nextIndex = index; // store next index
return n;
}
public inline function next():String {
var r:String = untyped __forin__(h, nextIndex);
index = nextIndex;
if (isReserved)
r = r.substr(1);
return r;
}
}
@:allow(haxe.ds.StringMap)
private class StringMapValuesIterator<T> {
var h:Dynamic;
var rh:Dynamic;
var index:Int;
var nextIndex:Int;
inline function new(h:Dynamic, rh:Dynamic):Void {
this.h = h;
this.rh = rh;
this.index = 0;
hasNext();
}
public inline function hasNext():Bool {
var h = h, index = index; // tmp vars required for __has_next
var n = untyped __has_next__(h, index);
if (!n && rh != null) {
h = this.h = rh;
index = this.index = 0;
rh = null;
n = untyped __has_next__(h, index);
}
this.nextIndex = index; // store next index
return n;
}
public inline function next():T {
var r = untyped __foreach__(h, nextIndex);
index = nextIndex;
return r;
}
}

View File

@ -0,0 +1,147 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe.ds;
/**
This is similar to `StringMap` excepts that it does not sanitize the keys.
As a result, it will be faster to access the map for reading, but it might fail
with some reserved keys such as `constructor` or `prototype`.
**/
class UnsafeStringMap<T> implements haxe.Constraints.IMap<String, T> {
private var h:flash.utils.Dictionary;
public function new():Void {
h = new flash.utils.Dictionary();
}
public inline function set(key:String, value:T):Void {
untyped h[key] = value;
}
public inline function get(key:String):Null<T> {
return untyped h[key];
}
public inline function exists(key:String):Bool {
return untyped __in__(key, h);
}
public function remove(key:String):Bool {
if (untyped !h.hasOwnProperty(key))
return false;
untyped __delete__(h, key);
return true;
}
public inline function keys():Iterator<String> {
return new UnsafeStringMapKeysIterator(h);
}
public inline function iterator():Iterator<T> {
return new UnsafeStringMapValuesIterator<T>(h);
}
public inline function keyValueIterator():KeyValueIterator<String, T> {
return new haxe.iterators.MapKeyValueIterator(this);
}
public function copy():UnsafeStringMap<T> {
var copied = new UnsafeStringMap();
for (key in keys())
copied.set(key, get(key));
return copied;
}
public function toString():String {
var s = new StringBuf();
s.add("{");
var it = keys();
for (i in it) {
s.add(i);
s.add(" => ");
s.add(Std.string(get(i)));
if (it.hasNext())
s.add(", ");
}
s.add("}");
return s.toString();
}
public inline function clear():Void {
h = new flash.utils.Dictionary();
}
}
// this version uses __has_next__/__forin__ special SWF opcodes for iteration with no allocation
@:allow(haxe.ds.UnsafeStringMap)
private class UnsafeStringMapKeysIterator {
var h:flash.utils.Dictionary;
var index:Int;
var nextIndex:Int;
inline function new(h:flash.utils.Dictionary):Void {
this.h = h;
this.index = 0;
hasNext();
}
public inline function hasNext():Bool {
var h = h, index = index; // tmp vars required for __has_next
var n = untyped __has_next__(h, index);
this.nextIndex = index; // store next index
return n;
}
public inline function next():String {
var r:String = untyped __forin__(h, nextIndex);
index = nextIndex;
return r;
}
}
@:allow(haxe.ds.UnsafeStringMap)
private class UnsafeStringMapValuesIterator<T> {
var h:flash.utils.Dictionary;
var index:Int;
var nextIndex:Int;
inline function new(h:flash.utils.Dictionary):Void {
this.h = h;
this.index = 0;
hasNext();
}
public inline function hasNext():Bool {
var h = h, index = index; // tmp vars required for __has_next
var n = untyped __has_next__(h, index);
this.nextIndex = index; // store next index
return n;
}
public inline function next():T {
var r = untyped __foreach__(h, nextIndex);
index = nextIndex;
return r;
}
}

View File

@ -0,0 +1,141 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe.ds;
@:coreApi
class WeakMap<K:{}, V> extends flash.utils.Dictionary implements haxe.Constraints.IMap<K, V> {
public function new() {
super(true);
}
public inline function get(key:K):Null<V> {
return untyped this[key];
}
public inline function set(key:K, value:V):Void {
untyped this[key] = value;
}
public inline function exists(key:K):Bool {
return untyped this[key] != null;
}
public function remove(key:K):Bool {
var has = exists(key);
untyped __delete__(this, key);
return has;
}
public function keys():Iterator<K> {
return NativePropertyIterator.iterator(this);
}
public function iterator():Iterator<V> {
return NativeValueIterator.iterator(this);
}
public inline function keyValueIterator():KeyValueIterator<K, V> {
return new haxe.iterators.MapKeyValueIterator(this);
}
public function copy():WeakMap<K, V> {
var copied = new WeakMap();
for (key in keys())
copied.set(key, get(key));
return copied;
}
public function toString():String {
var s = "";
var it = keys();
for (i in it) {
s += (s == "" ? "" : ",") + Std.string(i);
s += " => ";
s += Std.string(get(i));
}
return s + "}";
}
public function clear():Void {
for (i in keys())
untyped __delete__(this, i);
}
}
private class NativePropertyIterator {
var collection:Dynamic;
var index:Int = 0;
public static inline function iterator(collection:Dynamic):NativePropertyIterator {
var result = new NativePropertyIterator();
result.collection = collection;
return result;
}
function new() {}
public inline function hasNext():Bool {
var c = collection;
var i = index;
var result = untyped __has_next__(c, i);
collection = c;
index = i;
return result;
}
public inline function next():Dynamic {
var i = index;
var result = untyped __forin__(collection, i);
index = i;
return result;
}
}
private class NativeValueIterator {
var collection:Dynamic;
var index:Int = 0;
public static inline function iterator(collection:Dynamic):NativeValueIterator {
var result = new NativeValueIterator();
result.collection = collection;
return result;
}
function new() {}
public inline function hasNext():Bool {
var c = collection;
var i = index;
var result = untyped __has_next__(c, i);
collection = c;
index = i;
return result;
}
public inline function next():Dynamic {
var i = index;
var result = untyped __foreach__(collection, i);
index = i;
return result;
}
}

View File

@ -0,0 +1,54 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe.zip;
@:coreApi
class Compress {
public function new(level:Int):Void {
throw new haxe.exceptions.NotImplementedException("Not implemented for this platform");
}
public function execute(src:haxe.io.Bytes, srcPos:Int, dst:haxe.io.Bytes, dstPos:Int):{done:Bool, read:Int, write:Int} {
return null;
}
public function setFlushMode(f:FlushMode):Void {}
public function close():Void {}
public static function run(s:haxe.io.Bytes, level:Int):haxe.io.Bytes {
if (s.length == 0) {
// Flash returns 0 bytes for 0 length compress (which can't be decoded on other platforms...)
var b = haxe.io.Bytes.alloc(8);
b.set(0, 0x78);
b.set(1, 0xDA);
b.set(2, 0x03);
b.set(7, 0x01);
return b;
}
var tmp = new flash.utils.ByteArray();
tmp.writeBytes(s.getData(), 0, s.length);
tmp.compress();
return haxe.io.Bytes.ofData(tmp);
}
}

View File

@ -0,0 +1,45 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package haxe.zip;
@:coreApi
class Uncompress {
public function new(?windowBits:Int):Void {
throw new haxe.exceptions.NotImplementedException("Not implemented for this platform");
}
public function execute(src:haxe.io.Bytes, srcPos:Int, dst:haxe.io.Bytes, dstPos:Int):{done:Bool, read:Int, write:Int} {
return null;
}
public function setFlushMode(f:FlushMode):Void {}
public function close():Void {}
public static function run(src:haxe.io.Bytes, ?bufsize:Int):haxe.io.Bytes {
var tmp = new flash.utils.ByteArray();
tmp.writeBytes(src.getData(), 0, src.length);
tmp.uncompress();
return haxe.io.Bytes.ofData(tmp);
}
}