Files
avmplus/core/ScriptObject-inlines.h
dmcallis 65a0592776 Initial source code drop
Source code drop for the Actionscript virtual machine in the Adobe
Flash Player for December 2013
2013-12-02 16:04:04 -08:00

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__ */