Gnash  0.8.11dev
Classes | Public Types | Public Member Functions | Protected Attributes | List of all members
gnash::Function Class Reference

A simple SWF-defined Function. More...

#include <Function.h>

Inheritance diagram for gnash::Function:
gnash::UserFunction gnash::as_function gnash::as_object gnash::GcResource gnash::Function2

Classes

struct  Argument

Public Types

typedef std::vector< as_object * > ScopeStack

Public Member Functions

 Function (const action_buffer &ab, as_environment &env, size_t start, const ScopeStack &with_stack)
 Create an ActionScript function as defined in an action_buffer starting at offset 'start'.
virtual ~Function ()
const ScopeStackgetScopeStack () const
const action_buffergetActionBuffer () const
size_t getStartPC () const
size_t getLength () const
virtual boost::uint8_t registers () const
 Get the number of registers required for function execution.
void add_arg (boost::uint8_t reg, const ObjectURI &name)
 Add an expected argument for the function.
void setLength (size_t len)
 Set the length in bytes of the function code.
virtual as_value call (const fn_call &fn)
 Dispatch.
virtual void markReachableResources () const
 Mark reachable resources. Override from as_object.

Protected Attributes

std::vector< Argument_args
as_environment_env
 @ might need some kind of ref count here, but beware cycles
const ConstantPool_pool
 The ConstantPool in effect at time of function definition.

Additional Inherited Members

- Static Public Attributes inherited from gnash::as_object
static const int DefaultFlags
 The most common flags for built-in properties.
- Protected Member Functions inherited from gnash::UserFunction
 UserFunction (Global_as &gl)
virtual ~UserFunction ()=0
 This is an abstract base class!

Detailed Description

A simple SWF-defined Function.

This represents a callable Function defined in a SWF. The basic version creates a scope in which 'arguments' array, 'this', 'super', and the expected argument names are defined. For a more advanced function, see Function2.

Member Typedef Documentation

typedef std::vector<as_object*> gnash::Function::ScopeStack

Constructor & Destructor Documentation

gnash::Function::Function ( const action_buffer ab,
as_environment env,
size_t  start,
const ScopeStack with_stack 
)

Create an ActionScript function as defined in an action_buffer starting at offset 'start'.

References gnash::action_buffer::size().

virtual gnash::Function::~Function ( )
inlinevirtual

Member Function Documentation

void gnash::Function::add_arg ( boost::uint8_t  reg,
const ObjectURI name 
)
inline

Add an expected argument for the function.

For ordinary Functions the register is disregarded. This is only relevant for Function2s. All argument names are declared as variables in the function scope, whether the argument is passed or not.

Parameters
regThe register for the argument.
nameThe name of the argument.

References _args.

as_value gnash::Function::call ( const fn_call fn)
virtual

Dispatch.

This is only needed for SWF5 (temp switch of target) We do always and base 'target' value on SWF version. TODO: simplify code by maybe using a custom as_environment instead, so to get an "original" target being the one set now (rather then the really original one) TODO: test scope when calling functions defined in another timeline (target, in particular).

Implements gnash::as_function.

Reimplemented in gnash::Function2.

References _args, _env, _pool, gnash::fn_call::arg(), gnash::FrameGuard::callFrame(), gnash::VM::calling(), gnash::Global_as::createArray(), gnash::VM::currentCall(), gnash::declareLocal(), gnash::CallFrame::function(), gnash::as_environment::get_original_target(), gnash::as_object::get_super(), gnash::getArguments(), gnash::getGlobal(), gnash::getSWFVersion(), gnash::getVM(), gnash::key::i, gnash::key::n, gnash::fn_call::nargs, gnash::NSV::PROP_ARGUMENTS, gnash::NSV::PROP_SUPER, gnash::NSV::PROP_THIS, gnash::setLocal(), gnash::fn_call::super, gnash::as_environment::target(), gnash::fn_call::this_ptr, and gnash::as_object::vm().

const action_buffer& gnash::Function::getActionBuffer ( ) const
inline
size_t gnash::Function::getLength ( ) const
inline
const ScopeStack& gnash::Function::getScopeStack ( ) const
inline
size_t gnash::Function::getStartPC ( ) const
inline
void gnash::Function::markReachableResources ( ) const
virtual

Mark reachable resources. Override from as_object.

Reachable resources from this object are its scope stack and the prototype.

Reimplemented from gnash::as_object.

References _env, gnash::renderer::opengl::for_each(), gnash::as_environment::markReachableResources(), and gnash::GcResource::setReachable().

virtual boost::uint8_t gnash::Function::registers ( ) const
inlinevirtual

Get the number of registers required for function execution.

For ordinary Functions this is always 0.

Implements gnash::UserFunction.

Reimplemented in gnash::Function2.

void gnash::Function::setLength ( size_t  len)

Set the length in bytes of the function code.

References gnash::action_buffer::size().

Member Data Documentation

std::vector<Argument> gnash::Function::_args
protected
as_environment& gnash::Function::_env
protected

@ might need some kind of ref count here, but beware cycles

Referenced by gnash::Function2::call(), call(), and markReachableResources().

const ConstantPool* gnash::Function::_pool
protected

The ConstantPool in effect at time of function definition.

Referenced by gnash::Function2::call(), and call().


The documentation for this class was generated from the following files: