return engine->current;
}
-String **ExecutionContext::formals() const
+String * const *ExecutionContext::formals() const
{
return function ? function->formalParameterList : 0;
}
return function ? function->formalParameterCount : 0;
}
-String **ExecutionContext::variables() const
+String * const *ExecutionContext::variables() const
{
return function ? function->varList : 0;
}
unsigned int argumentCount;
Value *locals;
- String **formals() const;
+ String * const *formals() const;
unsigned int formalCount() const;
- String **variables() const;
+ String * const *variables() const;
unsigned int variableCount() const;
bool strictMode;
{
if (name)
name->mark();
- for (uint i = 0; i < formalParameterCount; ++i)
- formalParameterList[i]->mark();
- for (uint i = 0; i < varCount; ++i)
- varList[i]->mark();
+ // these are marked in VM::Function:
+// for (uint i = 0; i < formalParameterCount; ++i)
+// formalParameterList[i]->mark();
+// for (uint i = 0; i < varCount; ++i)
+// varList[i]->mark();
scope->mark();
Object::markObjects();
}
usesArgumentsObject = function->usesArgumentsObject;
strictMode = function->isStrict;
formalParameterCount = function->formals.size();
- // ### no need to copy
- if (formalParameterCount) {
- formalParameterList = new String*[formalParameterCount];
- for (unsigned int i = 0; i < formalParameterCount; ++i) {
- formalParameterList[i] = function->formals.at(i);
- }
- }
+ formalParameterList = function->formals.constData();
defineReadonlyProperty(scope->engine->id_length, Value::fromInt32(formalParameterCount));
varCount = function->locals.size();
- // ### no need to copy
- if (varCount) {
- varList = new String*[varCount];
- for (unsigned int i = 0; i < varCount; ++i) {
- varList[i] = function->locals.at(i);
- }
- }
+ varList = function->locals.constData();
Object *proto = scope->engine->newObject();
proto->defineDefaultProperty(scope->engine->id_constructor, Value::fromObject(this));
ScriptFunction::~ScriptFunction()
{
- delete[] formalParameterList;
- delete[] varList;
}
Value ScriptFunction::call(VM::ExecutionContext *ctx)
const uchar *codeData;
JSC::MacroAssemblerCodeRef codeRef;
- QList<String *> formals;
- QList<String *> locals;
+ QVector<String *> formals;
+ QVector<String *> locals;
QVector<Value> generatedValues;
QVector<String *> identifiers;
struct FunctionObject: Object {
ExecutionContext *scope;
String *name;
- String **formalParameterList;
- String **varList;
+ String * const *formalParameterList;
+ String * const *varList;
unsigned int formalParameterCount;
unsigned int varCount;
QStringList inheritedLocals;
if (inheritContext)
- for (String **i = ctx->variables(), **ei = i + ctx->variableCount(); i < ei; ++i)
+ for (String * const *i = ctx->variables(), * const *ei = i + ctx->variableCount(); i < ei; ++i)
inheritedLocals.append(*i ? (*i)->toQString() : QString());
Codegen cg(ctx, strictMode);