@awayfl/avm2
Version:
Virtual machine for executing AS3 code
164 lines (134 loc) • 7.58 kB
text/typescript
import { ASClass } from './ASClass';
import { NamespaceType } from '../abc/lazy/NamespaceType';
import { ASObject } from './ASObject';
import { ASFunction } from './ASFunction';
import { ASMethodClosure } from './ASMethodClosure';
import { ASNumber } from './ASNumber';
import { ASInt } from './ASInt';
import { ASString } from './ASString';
import { ASUint } from './ASUint';
import { ASBoolean } from './ASBoolean';
import { ASArray } from './ASArray';
import { Int32Vector } from '../natives/int32Vector';
import { GenericVector, Vector } from '../natives/GenericVector';
import { Uint32Vector } from '../natives/uint32Vector';
import { Float64Vector } from '../natives/float64Vector';
import { ASMath } from './ASMath';
import { ASRegExp } from './ASRegExp';
import { ASJSON } from './ASJSON';
import { assert } from '@awayjs/graphics';
import { release } from '@awayfl/swf-loader';
import { FlashUtilScript_getDefinitionByName } from './FlashUtilScript_getDefinitionByName';
import { FlashUtilScript_getTimer } from './FlashUtilScript_getTimer';
import { FlashNetScript_navigateToURL } from './FlashNetScript_navigateToURL';
import { FlashNetScript_sendToURL } from './FlashNetScript_sendToURL';
import { wrapJSGlobalFunction } from './wrapJSGlobalFunction';
import { Toplevel_registerClassAlias } from './Toplevel_registerClassAlias';
import { Toplevel_getClassByAlias } from './Toplevel_getClassByAlias';
import { ASError, ASArgumentError, ASUninitializedError, ASVerifyError, ASURIError, ASTypeError, ASSyntaxError,
ASSecurityError, ASReferenceError, ASRangeError, ASEvalError, ASDefinitionError, ASIllegalOperationError,
ASMemoryError, ASEOFError, ASIOError } from './ASError';
/* 80pro: todo: XML
import { XMLParser } from '../natives/xml';
import { XMLNode } from '../natives/xml';
import { XMLNodeType } from '../../customAway/xml/XMLNodeType';*/
import { nativeFunctions } from './nativeFunctions';
import { jsGlobal } from '@awayfl/swf-loader';
import { ASDate } from '../natives/date';
import { ASProxy } from '../natives/proxy';
import { Dictionary } from '../natives/dictionary';
import { ByteArray } from '../natives/byteArray';
import { OriginalSystem } from '../natives/system';
import { builtinNativeClasses } from './builtinNativeClasses';
import { nativeClasses } from './builtinNativeClasses';
import { nativeClassLoaderNames } from './builtinNativeClasses';
import { ASNamespace, ASQName, ASXML, ASXMLList } from '../natives/xml';
import { XMLNode, XMLParser, XMLTag, XMLNodeType, XMLDocument } from '../natives/xml-document';
class AVMPlusFile extends ASObject {
public static exists() {
}
public static read() {
}
public static write() {
}
public static readByteArray() {
}
public static writeByteArray() {
}
}
export function initializeBuiltins() {
builtinNativeClasses['Object'] = ASObject;
builtinNativeClasses['Class'] = ASClass;
builtinNativeClasses['Function'] = ASFunction;
builtinNativeClasses['Boolean'] = ASBoolean;
builtinNativeClasses['builtin.as$0.MethodClosure'] = ASMethodClosure;
builtinNativeClasses['Number'] = ASNumber;
builtinNativeClasses['int'] = ASInt;
builtinNativeClasses['uint'] = ASUint;
builtinNativeClasses['String'] = ASString;
builtinNativeClasses['Array'] = ASArray;
builtinNativeClasses['__AS3__.vec.Vector'] = Vector;
builtinNativeClasses['__AS3__.vec.Vector$object'] = GenericVector;
builtinNativeClasses['__AS3__.vec.Vector$int'] = Int32Vector;
builtinNativeClasses['__AS3__.vec.Vector$uint'] = Uint32Vector;
builtinNativeClasses['__AS3__.vec.Vector$double'] = Float64Vector;
builtinNativeClasses['Namespace'] = ASNamespace;
builtinNativeClasses['QName'] = ASQName;
builtinNativeClasses['XML'] = ASXML;
builtinNativeClasses['XMLList'] = ASXMLList;
builtinNativeClasses['flash.xml.XMLNode'] = XMLNode;
builtinNativeClasses['flash.xml.XMLDocument'] = XMLDocument;
builtinNativeClasses['flash.xml.XMLParser'] = XMLParser;
builtinNativeClasses['flash.xml.XMLTag'] = XMLTag;
builtinNativeClasses['flash.xml.XMLNodeType'] = XMLNodeType;
builtinNativeClasses['Math'] = ASMath;
builtinNativeClasses['Date'] = ASDate;
builtinNativeClasses['RegExp'] = ASRegExp;
builtinNativeClasses['JSON'] = ASJSON;
builtinNativeClasses['flash.utils.Proxy'] = ASProxy;
builtinNativeClasses['flash.utils.Dictionary'] = Dictionary;
builtinNativeClasses['flash.utils.ByteArray'] = ByteArray;
builtinNativeClasses['avmplus.System'] = OriginalSystem;
builtinNativeClasses['avmplus.File'] = AVMPlusFile;
// Errors
builtinNativeClasses['Error'] = ASError;
builtinNativeClasses['DefinitionError'] = ASDefinitionError;
builtinNativeClasses['EvalError'] = ASEvalError;
builtinNativeClasses['RangeError'] = ASRangeError;
builtinNativeClasses['ReferenceError'] = ASReferenceError;
builtinNativeClasses['SecurityError'] = ASSecurityError;
builtinNativeClasses['SyntaxError'] = ASSyntaxError;
builtinNativeClasses['TypeError'] = ASTypeError;
builtinNativeClasses['URIError'] = ASURIError;
builtinNativeClasses['VerifyError'] = ASVerifyError;
builtinNativeClasses['UninitializedError'] = ASUninitializedError;
builtinNativeClasses['ArgumentError'] = ASArgumentError;
builtinNativeClasses['flash.errors.IOError'] = ASIOError;
builtinNativeClasses['flash.errors.EOFError'] = ASEOFError;
builtinNativeClasses['flash.errors.MemoryError'] = ASMemoryError;
builtinNativeClasses['flash.errors.IllegalOperationError'] = ASIllegalOperationError;
}
export function registerNativeClass(name: string, asClass: ASClass, alias: string = name,
nsType: NamespaceType = NamespaceType.Public) {
release || assert (!nativeClasses[name], 'Native class: ' + name + ' is already registered.');
nativeClasses[name] = asClass;
nativeClassLoaderNames.push({ name: name, alias: alias, nsType: nsType });
}
export function registerNativeFunction(path: string, fun: Function) {
release || assert (!nativeFunctions[path], 'Native function: ' + path + ' is already registered.');
nativeFunctions[path] = fun;
}
registerNativeClass('__AS3__.vec.Vector$object', GenericVector, 'ObjectVector', NamespaceType.PackageInternal);
registerNativeClass('__AS3__.vec.Vector$int', Int32Vector, 'Int32Vector', NamespaceType.PackageInternal);
registerNativeClass('__AS3__.vec.Vector$uint', Uint32Vector, 'Uint32Vector', NamespaceType.PackageInternal);
registerNativeClass('__AS3__.vec.Vector$double', Float64Vector, 'Float64Vector', NamespaceType.PackageInternal);
registerNativeFunction('FlashUtilScript::getDefinitionByName',
FlashUtilScript_getDefinitionByName);
registerNativeFunction('FlashUtilScript::getTimer', FlashUtilScript_getTimer);
registerNativeFunction('FlashUtilScript::navigateToURL', FlashNetScript_navigateToURL);
registerNativeFunction('FlashNetScript::navigateToURL', FlashNetScript_navigateToURL);
registerNativeFunction('FlashNetScript::sendToURL', FlashNetScript_sendToURL);
registerNativeFunction('FlashUtilScript::escapeMultiByte', wrapJSGlobalFunction(jsGlobal.escape));
registerNativeFunction('FlashUtilScript::unescapeMultiByte', wrapJSGlobalFunction(jsGlobal.unescape));
registerNativeFunction('Toplevel::registerClassAlias', Toplevel_registerClassAlias);
registerNativeFunction('Toplevel::getClassByAlias', Toplevel_getClassByAlias);