avm2: Fix handling of default domain memory (#12308)
This commit is contained in:
parent
55906c22fa
commit
99ed2c6d4a
|
@ -12,6 +12,7 @@ use gc_arena::{Collect, GcCell, MutationContext};
|
||||||
use ruffle_wstr::WStr;
|
use ruffle_wstr::WStr;
|
||||||
|
|
||||||
use super::class::Class;
|
use super::class::Class;
|
||||||
|
use super::error::error;
|
||||||
use super::string::AvmString;
|
use super::string::AvmString;
|
||||||
|
|
||||||
/// Represents a set of scripts and movies that share traits across different
|
/// Represents a set of scripts and movies that share traits across different
|
||||||
|
@ -40,8 +41,12 @@ struct DomainData<'gc> {
|
||||||
/// player globals setup (we need a global domain to put globals into, but
|
/// player globals setup (we need a global domain to put globals into, but
|
||||||
/// that domain needs the bytearray global)
|
/// that domain needs the bytearray global)
|
||||||
pub domain_memory: Option<ByteArrayObject<'gc>>,
|
pub domain_memory: Option<ByteArrayObject<'gc>>,
|
||||||
|
|
||||||
|
pub default_domain_memory: Option<ByteArrayObject<'gc>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const MIN_DOMAIN_MEMORY_LENGTH: usize = 1024;
|
||||||
|
|
||||||
impl<'gc> Domain<'gc> {
|
impl<'gc> Domain<'gc> {
|
||||||
/// Create a new domain with no parent.
|
/// Create a new domain with no parent.
|
||||||
///
|
///
|
||||||
|
@ -62,6 +67,7 @@ impl<'gc> Domain<'gc> {
|
||||||
classes: PropertyMap::new(),
|
classes: PropertyMap::new(),
|
||||||
parent,
|
parent,
|
||||||
domain_memory: None,
|
domain_memory: None,
|
||||||
|
default_domain_memory: None,
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -82,6 +88,7 @@ impl<'gc> Domain<'gc> {
|
||||||
classes: PropertyMap::new(),
|
classes: PropertyMap::new(),
|
||||||
parent: Some(parent),
|
parent: Some(parent),
|
||||||
domain_memory: None,
|
domain_memory: None,
|
||||||
|
default_domain_memory: None,
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -294,6 +301,15 @@ impl<'gc> Domain<'gc> {
|
||||||
self.0.write(mc).classes.insert(class.read().name(), class);
|
self.0.write(mc).classes.insert(class.read().name(), class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_default_domain_memory(&self) -> bool {
|
||||||
|
let read = self.0.read();
|
||||||
|
read.domain_memory.expect("Missing domain memory").as_ptr()
|
||||||
|
== read
|
||||||
|
.default_domain_memory
|
||||||
|
.expect("Missing default domain memory")
|
||||||
|
.as_ptr()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn domain_memory(&self) -> ByteArrayObject<'gc> {
|
pub fn domain_memory(&self) -> ByteArrayObject<'gc> {
|
||||||
self.0
|
self.0
|
||||||
.read()
|
.read()
|
||||||
|
@ -303,10 +319,26 @@ impl<'gc> Domain<'gc> {
|
||||||
|
|
||||||
pub fn set_domain_memory(
|
pub fn set_domain_memory(
|
||||||
&self,
|
&self,
|
||||||
mc: MutationContext<'gc, '_>,
|
activation: &mut Activation<'_, 'gc>,
|
||||||
domain_memory: ByteArrayObject<'gc>,
|
domain_memory: Option<ByteArrayObject<'gc>>,
|
||||||
) {
|
) -> Result<(), Error<'gc>> {
|
||||||
self.0.write(mc).domain_memory = Some(domain_memory)
|
let mut write = self.0.write(activation.context.gc_context);
|
||||||
|
let memory = if let Some(domain_memory) = domain_memory {
|
||||||
|
if domain_memory.storage().len() < MIN_DOMAIN_MEMORY_LENGTH {
|
||||||
|
return Err(Error::AvmError(error(
|
||||||
|
activation,
|
||||||
|
"Error #1504: End of file.",
|
||||||
|
1504,
|
||||||
|
)?));
|
||||||
|
}
|
||||||
|
domain_memory
|
||||||
|
} else {
|
||||||
|
write
|
||||||
|
.default_domain_memory
|
||||||
|
.expect("Default domain memory not initialized")
|
||||||
|
};
|
||||||
|
write.domain_memory = Some(memory);
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Allocate the default domain memory for this domain, if it does not
|
/// Allocate the default domain memory for this domain, if it does not
|
||||||
|
@ -325,12 +357,23 @@ impl<'gc> Domain<'gc> {
|
||||||
domain_memory
|
domain_memory
|
||||||
.as_bytearray_mut(activation.context.gc_context)
|
.as_bytearray_mut(activation.context.gc_context)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.set_length(1024);
|
.set_length(MIN_DOMAIN_MEMORY_LENGTH);
|
||||||
|
|
||||||
let mut write = self.0.write(activation.context.gc_context);
|
let mut write = self.0.write(activation.context.gc_context);
|
||||||
write
|
|
||||||
.domain_memory
|
assert!(
|
||||||
.get_or_insert(domain_memory.as_bytearray_object().unwrap());
|
write.domain_memory.is_none(),
|
||||||
|
"Already initialized domain memory!"
|
||||||
|
);
|
||||||
|
assert!(
|
||||||
|
write.default_domain_memory.is_none(),
|
||||||
|
"Already initialized domain memory!"
|
||||||
|
);
|
||||||
|
|
||||||
|
let bytearray = domain_memory.as_bytearray_object().unwrap();
|
||||||
|
|
||||||
|
write.domain_memory = Some(bytearray);
|
||||||
|
write.default_domain_memory = Some(bytearray);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,5 +19,10 @@ package flash.system {
|
||||||
public native function hasDefinition(name:String):Boolean;
|
public native function hasDefinition(name:String):Boolean;
|
||||||
|
|
||||||
public native function getQualifiedDefinitionNames():Vector.<String>;
|
public native function getQualifiedDefinitionNames():Vector.<String>;
|
||||||
|
|
||||||
|
public static function get MIN_DOMAIN_MEMORY_LENGTH():uint {
|
||||||
|
return 1024;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,11 +140,12 @@ pub fn set_domain_memory<'gc>(
|
||||||
this: Object<'gc>,
|
this: Object<'gc>,
|
||||||
args: &[Value<'gc>],
|
args: &[Value<'gc>],
|
||||||
) -> Result<Value<'gc>, Error<'gc>> {
|
) -> Result<Value<'gc>, Error<'gc>> {
|
||||||
if let Some(Value::Object(arg)) = args.get(0) {
|
|
||||||
if let Some(bytearray_obj) = arg.as_bytearray_object() {
|
|
||||||
if let Some(appdomain) = this.as_application_domain() {
|
if let Some(appdomain) = this.as_application_domain() {
|
||||||
appdomain.set_domain_memory(activation.context.gc_context, bytearray_obj);
|
let obj = args.try_get_object(activation, 0);
|
||||||
}
|
if let Some(obj) = obj {
|
||||||
|
appdomain.set_domain_memory(activation, Some(obj.as_bytearray_object().unwrap()))?;
|
||||||
|
} else {
|
||||||
|
appdomain.set_domain_memory(activation, None)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,9 +159,13 @@ pub fn get_domain_memory<'gc>(
|
||||||
_args: &[Value<'gc>],
|
_args: &[Value<'gc>],
|
||||||
) -> Result<Value<'gc>, Error<'gc>> {
|
) -> Result<Value<'gc>, Error<'gc>> {
|
||||||
if let Some(appdomain) = this.as_application_domain() {
|
if let Some(appdomain) = this.as_application_domain() {
|
||||||
|
if appdomain.is_default_domain_memory() {
|
||||||
|
return Ok(Value::Null);
|
||||||
|
} else {
|
||||||
let bytearray_object: Object<'gc> = appdomain.domain_memory().into();
|
let bytearray_object: Object<'gc> = appdomain.domain_memory().into();
|
||||||
return Ok(bytearray_object.into());
|
return Ok(bytearray_object.into());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(Value::Undefined)
|
Ok(Value::Undefined)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,218 @@
|
||||||
|
package {
|
||||||
|
import flash.utils.Endian;
|
||||||
|
import avm2.intrinsics.memory.si8;
|
||||||
|
import avm2.intrinsics.memory.si16;
|
||||||
|
import avm2.intrinsics.memory.si32;
|
||||||
|
import avm2.intrinsics.memory.sf32;
|
||||||
|
import avm2.intrinsics.memory.sf64;
|
||||||
|
import avm2.intrinsics.memory.li8;
|
||||||
|
import avm2.intrinsics.memory.li16;
|
||||||
|
import avm2.intrinsics.memory.li32;
|
||||||
|
import avm2.intrinsics.memory.lf32;
|
||||||
|
import avm2.intrinsics.memory.lf64;
|
||||||
|
import avm2.intrinsics.memory.sxi1;
|
||||||
|
import avm2.intrinsics.memory.sxi8;
|
||||||
|
import avm2.intrinsics.memory.sxi16;
|
||||||
|
import flash.system.ApplicationDomain;
|
||||||
|
import flash.utils.ByteArray;
|
||||||
|
import flash.display.Sprite;
|
||||||
|
|
||||||
|
public class Test extends Sprite {
|
||||||
|
public function Test() {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function init():void {
|
||||||
|
trace("// ApplicationDomain.currentDomain.domainMemory");
|
||||||
|
trace(ApplicationDomain.currentDomain.domainMemory);
|
||||||
|
si8(65, 0);
|
||||||
|
|
||||||
|
trace("// ApplicationDomain.currentDomain.domainMemory after si8(65, 0)");
|
||||||
|
trace(ApplicationDomain.currentDomain.domainMemory);
|
||||||
|
|
||||||
|
trace("// li8(0) after si8(65, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
|
||||||
|
trace("// ApplicationDomain.currentDomain.domainMemory after li8(0)");
|
||||||
|
trace(ApplicationDomain.currentDomain.domainMemory);
|
||||||
|
|
||||||
|
si8(255, 0);
|
||||||
|
trace("// li8(0) after si8(255, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
|
||||||
|
si8(0xFFFFFFFF, 0);
|
||||||
|
trace("// li8(0) after si8(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
trace("// li8(1) after si8(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(1));
|
||||||
|
trace("// li8(1) after si8(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(2));
|
||||||
|
trace("// li8(1) after si8(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(3));
|
||||||
|
|
||||||
|
si16(256, 0);
|
||||||
|
trace("// li8(0) after si16(256, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
trace("// li8(1) after si16(256, 0)");
|
||||||
|
trace(li8(1));
|
||||||
|
trace("// li16(0) after si16(256, 0)");
|
||||||
|
trace(li16(0));
|
||||||
|
|
||||||
|
si16(0xFFFF, 0);
|
||||||
|
trace("// li8(0) after si16(0xFFFF, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
trace("// li8(1) after si16(0xFFFF, 0)");
|
||||||
|
trace(li8(1));
|
||||||
|
trace("// li16(0) after si16(0xFFFF, 0)");
|
||||||
|
trace(li16(0));
|
||||||
|
|
||||||
|
si16(0xFFFFFFFF, 0);
|
||||||
|
trace("// li8(0) after si16(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
trace("// li8(1) after si16(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(1));
|
||||||
|
trace("// li8(1) after si16(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(2));
|
||||||
|
trace("// li8(1) after si16(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(3));
|
||||||
|
|
||||||
|
si32(0xFFFFFFFF, 0);
|
||||||
|
trace("// li8(0) after si32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
trace("// li8(1) after si32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(1));
|
||||||
|
trace("// li8(2) after si32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(2));
|
||||||
|
trace("// li8(3) after si32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(3));
|
||||||
|
trace("// li32(0) after si32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li32(0));
|
||||||
|
|
||||||
|
sf32(0xFFFFFFFF, 0);
|
||||||
|
trace("// li8(0) after sf32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
trace("// li8(1) after sf32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(1));
|
||||||
|
trace("// li8(2) after sf32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(2));
|
||||||
|
trace("// li8(3) after sf32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li8(3));
|
||||||
|
trace("// li32(0) after sf32(0xFFFFFFFF, 0)");
|
||||||
|
trace(li32(0));
|
||||||
|
trace("// lf32(0) after sf32(0xFFFFFFFF, 0)");
|
||||||
|
trace(lf32(0));
|
||||||
|
|
||||||
|
sf32(1234.7654321, 0);
|
||||||
|
trace("// li8(0) after sf32(1234.7654321, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
trace("// li8(1) after sf32(1234.7654321, 0)");
|
||||||
|
trace(li8(1));
|
||||||
|
trace("// li8(2) after sf32(1234.7654321, 0)");
|
||||||
|
trace(li8(2));
|
||||||
|
trace("// li8(3) after sf32(1234.7654321, 0)");
|
||||||
|
trace(li8(3));
|
||||||
|
trace("// li32(0) after sf32(1234.7654321, 0)");
|
||||||
|
trace(li32(0));
|
||||||
|
trace("// lf32(0) after sf32(1234.7654321, 0)");
|
||||||
|
trace(lf32(0));
|
||||||
|
|
||||||
|
sf64(999999.9999999999, 0);
|
||||||
|
trace("// li8(0) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li8(0));
|
||||||
|
trace("// li8(1) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li8(1));
|
||||||
|
trace("// li8(2) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li8(2));
|
||||||
|
trace("// li8(3) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li8(3));
|
||||||
|
trace("// li8(4) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li8(4));
|
||||||
|
trace("// li8(5) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li8(5));
|
||||||
|
trace("// li8(6) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li8(6));
|
||||||
|
trace("// li8(7) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li8(7));
|
||||||
|
|
||||||
|
trace("// li32(0) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li32(0));
|
||||||
|
trace("// li32(4) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(li32(4));
|
||||||
|
trace("// lf32(0) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(lf32(0));
|
||||||
|
trace("// lf32(4) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(lf32(0));
|
||||||
|
trace("// lf64(0) after sf64(999999.9999999999, 0)");
|
||||||
|
trace(lf64(0));
|
||||||
|
|
||||||
|
trace("// sxi1(0)");
|
||||||
|
trace(sxi1(0));
|
||||||
|
|
||||||
|
trace("// sxi1(1)");
|
||||||
|
trace(sxi1(1));
|
||||||
|
|
||||||
|
trace("// sxi1(10)");
|
||||||
|
trace(sxi1(10));
|
||||||
|
|
||||||
|
trace("// sxi1(255)");
|
||||||
|
trace(sxi1(255));
|
||||||
|
|
||||||
|
trace("// sxi8(0)");
|
||||||
|
trace(sxi8(0));
|
||||||
|
|
||||||
|
trace("// sxi8(1)");
|
||||||
|
trace(sxi8(1));
|
||||||
|
|
||||||
|
trace("// sxi8(10)");
|
||||||
|
trace(sxi8(10));
|
||||||
|
|
||||||
|
trace("// sxi8(255)");
|
||||||
|
trace(sxi8(255));
|
||||||
|
|
||||||
|
trace("// sxi16(0)");
|
||||||
|
trace(sxi16(0));
|
||||||
|
|
||||||
|
trace("// sxi16(1)");
|
||||||
|
trace(sxi16(1));
|
||||||
|
|
||||||
|
trace("// sxi16(10)");
|
||||||
|
trace(sxi16(10));
|
||||||
|
|
||||||
|
trace("// sxi16(255)");
|
||||||
|
trace(sxi16(255));
|
||||||
|
|
||||||
|
trace("// si8(42, 0)");
|
||||||
|
si8(42, 0);
|
||||||
|
|
||||||
|
var bytes = new ByteArray();
|
||||||
|
bytes.length = 1024;
|
||||||
|
trace("// ApplicationDomain.currentDomain.domainMemory = bytes");
|
||||||
|
ApplicationDomain.currentDomain.domainMemory = bytes;
|
||||||
|
|
||||||
|
trace("// li8(0) after explicit overwrite");
|
||||||
|
trace(li8(0));
|
||||||
|
|
||||||
|
trace("// si8(45, 0)");
|
||||||
|
si8(45, 0);
|
||||||
|
|
||||||
|
trace("// ApplicationDomain.currentDomain.domainMemory = null");
|
||||||
|
ApplicationDomain.currentDomain.domainMemory = null;
|
||||||
|
|
||||||
|
trace("// li8(0)");
|
||||||
|
trace(li8(0));
|
||||||
|
|
||||||
|
trace("// ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH")
|
||||||
|
trace(ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH)
|
||||||
|
|
||||||
|
var bytes = new ByteArray();
|
||||||
|
bytes.length = ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH - 1;
|
||||||
|
try {
|
||||||
|
ApplicationDomain.currentDomain.domainMemory = bytes;
|
||||||
|
trace("FAILED - write should have thrown an error")
|
||||||
|
} catch (e) {
|
||||||
|
trace("Caught error: " + e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,11 @@
|
||||||
|
// ApplicationDomain.currentDomain.domainMemory
|
||||||
|
null
|
||||||
|
// ApplicationDomain.currentDomain.domainMemory after si8(65, 0)
|
||||||
|
null
|
||||||
// li8(0) after si8(65, 0)
|
// li8(0) after si8(65, 0)
|
||||||
65
|
65
|
||||||
|
// ApplicationDomain.currentDomain.domainMemory after li8(0)
|
||||||
|
null
|
||||||
// li8(0) after si8(255, 0)
|
// li8(0) after si8(255, 0)
|
||||||
255
|
255
|
||||||
// li8(0) after si8(0xFFFFFFFF, 0)
|
// li8(0) after si8(0xFFFFFFFF, 0)
|
||||||
|
@ -114,3 +120,14 @@ NaN
|
||||||
10
|
10
|
||||||
// sxi16(255)
|
// sxi16(255)
|
||||||
255
|
255
|
||||||
|
// si8(42, 0)
|
||||||
|
// ApplicationDomain.currentDomain.domainMemory = bytes
|
||||||
|
// li8(0) after explicit overwrite
|
||||||
|
0
|
||||||
|
// si8(45, 0)
|
||||||
|
// ApplicationDomain.currentDomain.domainMemory = null
|
||||||
|
// li8(0)
|
||||||
|
42
|
||||||
|
// ApplicationDomain.MIN_DOMAIN_MEMORY_LENGTH
|
||||||
|
1024
|
||||||
|
Caught error: Error: Error #1504: End of file.
|
||||||
|
|
|
@ -1,180 +0,0 @@
|
||||||
package
|
|
||||||
{
|
|
||||||
import flash.utils.Endian;
|
|
||||||
import avm2.intrinsics.memory.si8;
|
|
||||||
import avm2.intrinsics.memory.si16;
|
|
||||||
import avm2.intrinsics.memory.si32;
|
|
||||||
import avm2.intrinsics.memory.sf32;
|
|
||||||
import avm2.intrinsics.memory.sf64;
|
|
||||||
import avm2.intrinsics.memory.li8;
|
|
||||||
import avm2.intrinsics.memory.li16;
|
|
||||||
import avm2.intrinsics.memory.li32;
|
|
||||||
import avm2.intrinsics.memory.lf32;
|
|
||||||
import avm2.intrinsics.memory.lf64;
|
|
||||||
import avm2.intrinsics.memory.sxi1;
|
|
||||||
import avm2.intrinsics.memory.sxi8;
|
|
||||||
import avm2.intrinsics.memory.sxi16;
|
|
||||||
import flash.system.ApplicationDomain;
|
|
||||||
import flash.utils.ByteArray;
|
|
||||||
import flash.display.Sprite;
|
|
||||||
|
|
||||||
public class Test extends Sprite
|
|
||||||
{
|
|
||||||
public function Test()
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function init(): void
|
|
||||||
{
|
|
||||||
si8(65, 0);
|
|
||||||
trace("// li8(0) after si8(65, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
|
|
||||||
si8(255, 0);
|
|
||||||
trace("// li8(0) after si8(255, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
|
|
||||||
si8(0xFFFFFFFF, 0);
|
|
||||||
trace("// li8(0) after si8(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
trace("// li8(1) after si8(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(1));
|
|
||||||
trace("// li8(1) after si8(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(2));
|
|
||||||
trace("// li8(1) after si8(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(3));
|
|
||||||
|
|
||||||
si16(256, 0);
|
|
||||||
trace("// li8(0) after si16(256, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
trace("// li8(1) after si16(256, 0)");
|
|
||||||
trace(li8(1));
|
|
||||||
trace("// li16(0) after si16(256, 0)");
|
|
||||||
trace(li16(0));
|
|
||||||
|
|
||||||
si16(0xFFFF, 0);
|
|
||||||
trace("// li8(0) after si16(0xFFFF, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
trace("// li8(1) after si16(0xFFFF, 0)");
|
|
||||||
trace(li8(1));
|
|
||||||
trace("// li16(0) after si16(0xFFFF, 0)");
|
|
||||||
trace(li16(0));
|
|
||||||
|
|
||||||
si16(0xFFFFFFFF, 0);
|
|
||||||
trace("// li8(0) after si16(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
trace("// li8(1) after si16(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(1));
|
|
||||||
trace("// li8(1) after si16(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(2));
|
|
||||||
trace("// li8(1) after si16(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(3));
|
|
||||||
|
|
||||||
si32(0xFFFFFFFF, 0);
|
|
||||||
trace("// li8(0) after si32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
trace("// li8(1) after si32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(1));
|
|
||||||
trace("// li8(2) after si32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(2));
|
|
||||||
trace("// li8(3) after si32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(3));
|
|
||||||
trace("// li32(0) after si32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li32(0));
|
|
||||||
|
|
||||||
sf32(0xFFFFFFFF, 0);
|
|
||||||
trace("// li8(0) after sf32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
trace("// li8(1) after sf32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(1));
|
|
||||||
trace("// li8(2) after sf32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(2));
|
|
||||||
trace("// li8(3) after sf32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li8(3));
|
|
||||||
trace("// li32(0) after sf32(0xFFFFFFFF, 0)");
|
|
||||||
trace(li32(0));
|
|
||||||
trace("// lf32(0) after sf32(0xFFFFFFFF, 0)");
|
|
||||||
trace(lf32(0));
|
|
||||||
|
|
||||||
sf32(1234.7654321, 0);
|
|
||||||
trace("// li8(0) after sf32(1234.7654321, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
trace("// li8(1) after sf32(1234.7654321, 0)");
|
|
||||||
trace(li8(1));
|
|
||||||
trace("// li8(2) after sf32(1234.7654321, 0)");
|
|
||||||
trace(li8(2));
|
|
||||||
trace("// li8(3) after sf32(1234.7654321, 0)");
|
|
||||||
trace(li8(3));
|
|
||||||
trace("// li32(0) after sf32(1234.7654321, 0)");
|
|
||||||
trace(li32(0));
|
|
||||||
trace("// lf32(0) after sf32(1234.7654321, 0)");
|
|
||||||
trace(lf32(0));
|
|
||||||
|
|
||||||
sf64(999999.9999999999, 0);
|
|
||||||
trace("// li8(0) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li8(0));
|
|
||||||
trace("// li8(1) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li8(1));
|
|
||||||
trace("// li8(2) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li8(2));
|
|
||||||
trace("// li8(3) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li8(3));
|
|
||||||
trace("// li8(4) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li8(4));
|
|
||||||
trace("// li8(5) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li8(5));
|
|
||||||
trace("// li8(6) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li8(6));
|
|
||||||
trace("// li8(7) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li8(7));
|
|
||||||
|
|
||||||
trace("// li32(0) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li32(0));
|
|
||||||
trace("// li32(4) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(li32(4));
|
|
||||||
trace("// lf32(0) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(lf32(0));
|
|
||||||
trace("// lf32(4) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(lf32(0));
|
|
||||||
trace("// lf64(0) after sf64(999999.9999999999, 0)");
|
|
||||||
trace(lf64(0));
|
|
||||||
|
|
||||||
trace("// sxi1(0)");
|
|
||||||
trace(sxi1(0));
|
|
||||||
|
|
||||||
trace("// sxi1(1)");
|
|
||||||
trace(sxi1(1));
|
|
||||||
|
|
||||||
trace("// sxi1(10)");
|
|
||||||
trace(sxi1(10));
|
|
||||||
|
|
||||||
trace("// sxi1(255)");
|
|
||||||
trace(sxi1(255));
|
|
||||||
|
|
||||||
trace("// sxi8(0)");
|
|
||||||
trace(sxi8(0));
|
|
||||||
|
|
||||||
trace("// sxi8(1)");
|
|
||||||
trace(sxi8(1));
|
|
||||||
|
|
||||||
trace("// sxi8(10)");
|
|
||||||
trace(sxi8(10));
|
|
||||||
|
|
||||||
trace("// sxi8(255)");
|
|
||||||
trace(sxi8(255));
|
|
||||||
|
|
||||||
trace("// sxi16(0)");
|
|
||||||
trace(sxi16(0));
|
|
||||||
|
|
||||||
trace("// sxi16(1)");
|
|
||||||
trace(sxi16(1));
|
|
||||||
|
|
||||||
trace("// sxi16(10)");
|
|
||||||
trace(sxi16(10));
|
|
||||||
|
|
||||||
trace("// sxi16(255)");
|
|
||||||
trace(sxi16(255));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
Loading…
Reference in New Issue