Source code drop for the Actionscript virtual machine in the Adobe Flash Player for December 2013
153 lines
3.8 KiB
C++
153 lines
3.8 KiB
C++
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
|
|
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef __avmplus_ScriptObject_inlines__
|
|
#define __avmplus_ScriptObject_inlines__
|
|
|
|
|
|
namespace avmplus
|
|
{
|
|
REALLY_INLINE /*static*/ ScriptObject* ScriptObject::create(MMgc::GC* gc, VTable* vtable, ScriptObject* delegate)
|
|
{
|
|
return new (gc, MMgc::kExact, vtable->getExtraSize()) ScriptObject(vtable, delegate);
|
|
}
|
|
|
|
REALLY_INLINE /*static*/ ScriptObject* ScriptObject::create(MMgc::GC* gc, VTable* vtable, ScriptObject* delegate, int htCapacity)
|
|
{
|
|
return new (gc, MMgc::kExact, vtable->getExtraSize()) ScriptObject(vtable, delegate, htCapacity);
|
|
}
|
|
|
|
REALLY_INLINE ScriptObject* ScriptObject::getDelegate() const
|
|
{
|
|
return delegate;
|
|
}
|
|
|
|
REALLY_INLINE void ScriptObject::setDelegate(ScriptObject *d)
|
|
{
|
|
delegate = d;
|
|
}
|
|
|
|
REALLY_INLINE Atom ScriptObject::atom() const
|
|
{
|
|
return kObjectType|(uintptr_t)this;
|
|
}
|
|
|
|
REALLY_INLINE /*virtual*/ Atom ScriptObject::toAtom() const
|
|
{
|
|
return atom();
|
|
}
|
|
|
|
REALLY_INLINE Traits* ScriptObject::traits() const
|
|
{
|
|
return vtable->traits;
|
|
}
|
|
|
|
REALLY_INLINE AvmCore* ScriptObject::core() const
|
|
{
|
|
return vtable->traits->core;
|
|
}
|
|
|
|
REALLY_INLINE MMgc::GC* ScriptObject::gc() const
|
|
{
|
|
return core()->GetGC();
|
|
}
|
|
|
|
REALLY_INLINE Toplevel* ScriptObject::toplevel() const
|
|
{
|
|
return vtable->toplevel();
|
|
}
|
|
|
|
REALLY_INLINE InlineHashtable* ScriptObject::getTableNoInit() const
|
|
{
|
|
InlineHashtable* iht = (InlineHashtable*)((uint8_t*)this + vtable->traits->getHashtableOffset());
|
|
if(!vtable->traits->isDictionary())
|
|
{
|
|
return iht;
|
|
}
|
|
else
|
|
{
|
|
HeapHashtable** hht = (HeapHashtable**)iht;
|
|
//DictionaryObjects store pointer to HeapHashtable at
|
|
//the hashtable offset
|
|
return ((*hht) ? (*hht)->get_ht() : NULL);
|
|
}
|
|
}
|
|
|
|
REALLY_INLINE Atom ScriptObject::getStringProperty(Stringp name) const
|
|
{
|
|
AvmAssert(name != NULL && name->isInterned());
|
|
return getAtomProperty(name->atom());
|
|
}
|
|
|
|
REALLY_INLINE Atom ScriptObject::getStringPropertyFromProtoChain(Stringp name, ScriptObject* protochain, Traits *origObjTraits) const
|
|
{
|
|
return getAtomPropertyFromProtoChain(name->atom(), protochain, origObjTraits);
|
|
}
|
|
|
|
REALLY_INLINE void ScriptObject::setStringProperty(Stringp name, Atom value)
|
|
{
|
|
setAtomProperty(name->atom(), value);
|
|
}
|
|
|
|
REALLY_INLINE bool ScriptObject::deleteStringProperty(Stringp name)
|
|
{
|
|
return deleteAtomProperty(name->atom());
|
|
}
|
|
|
|
REALLY_INLINE bool ScriptObject::hasStringProperty(Stringp name) const
|
|
{
|
|
AvmAssert(name != NULL && name->isInterned());
|
|
return hasAtomProperty(name->atom());
|
|
}
|
|
|
|
REALLY_INLINE bool ScriptObject::getStringPropertyIsEnumerable(Stringp name) const
|
|
{
|
|
AvmAssert(name != NULL && name->isInterned());
|
|
return getAtomPropertyIsEnumerable(name->atom());
|
|
}
|
|
|
|
REALLY_INLINE void ScriptObject::setStringPropertyIsEnumerable(Stringp name, bool enumerable)
|
|
{
|
|
setAtomPropertyIsEnumerable(name->atom(), enumerable);
|
|
}
|
|
|
|
REALLY_INLINE /*virtual*/ MethodClosure* ScriptObject::toMethodClosure() const
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
REALLY_INLINE bool ScriptObject::isMethodClosure() const
|
|
{
|
|
return toMethodClosure() != NULL;
|
|
}
|
|
|
|
REALLY_INLINE /*virtual*/ CodeContext* ScriptObject::getFunctionCodeContext() const
|
|
{
|
|
AvmAssert(0);
|
|
return NULL;
|
|
}
|
|
|
|
REALLY_INLINE /*virtual*/ ArrayObject* ScriptObject::toArrayObject()
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
#if defined(DEBUGGER) || defined(VMCFG_AOT)
|
|
REALLY_INLINE /*virtual*/ MethodEnv* ScriptObject::getCallMethodEnv()
|
|
{
|
|
return NULL;
|
|
}
|
|
#endif
|
|
|
|
REALLY_INLINE /*virtual*/ ClassClosure* ScriptObject::toClassClosure()
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
}
|
|
|
|
#endif /* __avmplus_ScriptObject_inlines__ */
|