26 #include "interpreter.h"
27 #include "operations.h"
28 #include "error_object.h"
35 const ClassInfo ErrorInstanceImp::info = {
"Error", 0, 0, 0};
37 ErrorInstanceImp::ErrorInstanceImp(ObjectImp *proto)
45 ErrorPrototypeImp::ErrorPrototypeImp(
ExecState *exec,
46 ObjectPrototypeImp *objectProto,
48 : ObjectImp(objectProto)
54 put(exec, namePropertyName,
String(
"Error"), DontEnum);
55 put(exec, messagePropertyName,
String(
"Unknown error"), DontEnum);
56 putDirect(toStringPropertyName,
new ErrorProtoFuncImp(exec,funcProto), DontEnum);
65 putDirect(lengthPropertyName, NumberImp::zero(), DontDelete|ReadOnly|DontEnum);
69 bool ErrorProtoFuncImp::implementsCall()
const
79 Value v = thisObj.
get(exec, namePropertyName);
80 if (v.
type() != UndefinedType) {
84 v = thisObj.
get(exec, messagePropertyName);
85 if (v.
type() != UndefinedType) {
95 ErrorPrototypeImp *errorProto)
100 putDirect(prototypePropertyName, errorProto, DontEnum|DontDelete|ReadOnly);
101 putDirect(lengthPropertyName, NumberImp::one(), DontDelete|ReadOnly|DontEnum);
105 bool ErrorObjectImp::implementsConstruct()
const
114 ObjectImp *imp =
new ErrorInstanceImp(proto.imp());
117 if (!args.
isEmpty() && args[0].type() != UndefinedType) {
118 imp->putDirect(messagePropertyName,
new StringImp(args[0].toString(exec)));
124 bool ErrorObjectImp::implementsCall()
const
133 return construct(exec,args);
138 NativeErrorPrototypeImp::NativeErrorPrototypeImp(
ExecState * , ErrorPrototypeImp *errorProto,
140 : ObjectImp(errorProto)
144 putDirect(namePropertyName,
new StringImp(name), 0);
145 putDirect(messagePropertyName,
new StringImp(message), 0);
150 const ClassInfo NativeErrorImp::info = {
"Function", &InternalFunctionImp::info, 0, 0};
157 proto =
static_cast<ObjectImp*
>(prot.imp());
159 putDirect(lengthPropertyName, NumberImp::one(), DontDelete|ReadOnly|DontEnum);
160 putDirect(prototypePropertyName, proto, DontDelete|ReadOnly|DontEnum);
163 bool NativeErrorImp::implementsConstruct()
const
170 ObjectImp *imp =
new ErrorInstanceImp(proto);
172 if (args[0].type() != UndefinedType)
173 imp->putDirect(messagePropertyName,
new StringImp(args[0].toString(exec)));
177 bool NativeErrorImp::implementsCall()
const
184 return construct(exec,args);
187 void NativeErrorImp::mark()
190 if (proto && !proto->marked())