void DeclarativeEnvironment::init(ExecutionEngine *e)
{
engine = e;
- outer = 0;
function = 0;
arguments = 0;
argumentCount = 0;
void DeclarativeEnvironment::init(FunctionObject *f, Value *args, uint argc)
{
function = f;
- outer = function->scope;
- engine = outer->engine;
+ engine = f->scope->engine;
strictMode = f->strictMode;
arguments = args;
delete w;
}
+DeclarativeEnvironment *DeclarativeEnvironment::outer() const
+{
+ return function ? function->scope : 0;
+}
+
String **DeclarativeEnvironment::formals() const
{
return function ? function->formalParameterList : 0;
PropertyDescriptor *ExecutionContext::lookupPropertyDescriptor(String *name, PropertyDescriptor *tmp)
{
- for (DeclarativeEnvironment *ctx = lexicalEnvironment; ctx; ctx = ctx->outer) {
+ for (DeclarativeEnvironment *ctx = lexicalEnvironment; ctx; ctx = ctx->outer()) {
if (ctx->withObject) {
DeclarativeEnvironment::With *w = ctx->withObject;
while (w) {
bool ExecutionContext::deleteProperty(String *name)
{
- for (DeclarativeEnvironment *ctx = lexicalEnvironment; ctx; ctx = ctx->outer) {
+ for (DeclarativeEnvironment *ctx = lexicalEnvironment; ctx; ctx = ctx->outer()) {
if (ctx->withObject) {
DeclarativeEnvironment::With *w = ctx->withObject;
while (w) {
void ExecutionContext::inplaceBitOp(Value value, String *name, BinOp op)
{
- for (DeclarativeEnvironment *ctx = lexicalEnvironment; ctx; ctx = ctx->outer) {
+ for (DeclarativeEnvironment *ctx = lexicalEnvironment; ctx; ctx = ctx->outer()) {
if (ctx->activation) {
if (ctx->activation->inplaceBinOp(value, name, op, this))
return;
struct DeclarativeEnvironment
{
ExecutionEngine *engine;
- DeclarativeEnvironment *outer;
-
FunctionObject *function;
Value *arguments;
unsigned int variableCount() const;
bool strictMode;
+ DeclarativeEnvironment *outer() const;
+
Object *activation;
struct With {
Object *object;