Skip to content

Commit

Permalink
Merge branch 'master' of http://github.com/GameClay/lightspark
Browse files Browse the repository at this point in the history
  • Loading branch information
alexp-sssup committed Jul 25, 2010
2 parents 5fcdd06 + b894678 commit 317db67
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 4 deletions.
1 change: 1 addition & 0 deletions abc.cpp
Expand Up @@ -160,6 +160,7 @@ void ABCVm::registerClasses()
Global.setVariableByQName("RegExp","",Class<RegExp>::getClass());
Global.setVariableByQName("QName","",Class<ASQName>::getClass());
Global.setVariableByQName("uint","",Class<UInteger>::getClass());
Global.setVariableByQName("Error","",Class<ASError>::getClass());

Global.setVariableByQName("print","",Class<IFunction>::getFunction(print));
Global.setVariableByQName("trace","",Class<IFunction>::getFunction(print));
Expand Down
58 changes: 58 additions & 0 deletions asobjects.cpp
Expand Up @@ -53,6 +53,7 @@ REGISTER_CLASS_NAME(Date);
REGISTER_CLASS_NAME(RegExp);
REGISTER_CLASS_NAME(Math);
REGISTER_CLASS_NAME(ASString);
REGISTER_CLASS_NAME(ASError);

Array::Array()
{
Expand Down Expand Up @@ -1657,6 +1658,63 @@ ASFUNCTIONBODY(ASString,concat)
return ret;
}

ASFUNCTIONBODY(ASError,getStackTrace)
{
ASError* th=static_cast<ASError*>(obj);
ASString* ret=Class<ASString>::getInstanceS(th->toString(true));
LOG(LOG_NOT_IMPLEMENTED,"Error.getStackTrace not yet implemented.");
return ret;
}

tiny_string ASError::toString(bool debugMsg)
{
return message.len() > 0 ? message : "Error";
}

ASFUNCTIONBODY(ASError,_getErrorID)
{
ASError* th=static_cast<ASError*>(obj);
return abstract_i(th->errorID);
}

ASFUNCTIONBODY(ASError,_setName)
{
ASError* th=static_cast<ASError*>(obj);
assert_and_throw(argslen==1);
th->name = args[0]->toString();
return NULL;
}

ASFUNCTIONBODY(ASError,_getName)
{
ASError* th=static_cast<ASError*>(obj);
return Class<ASString>::getInstanceS(th->name);
}

ASFUNCTIONBODY(ASError,_setMessage)
{
ASError* th=static_cast<ASError*>(obj);
assert_and_throw(argslen==1);
th->message = args[0]->toString();
return NULL;
}

ASFUNCTIONBODY(ASError,_getMessage)
{
ASError* th=static_cast<ASError*>(obj);
return Class<ASString>::getInstanceS(th->message);
}

void ASError::buildTraits(ASObject* o)
{
o->setVariableByQName("getStackTrace",AS3,Class<IFunction>::getFunction(getStackTrace));
o->setGetterByQName("errorID",AS3,Class<IFunction>::getFunction(_getErrorID));
o->setGetterByQName("message",AS3,Class<IFunction>::getFunction(_getMessage));
o->setSetterByQName("message",AS3,Class<IFunction>::getFunction(_setMessage));
o->setGetterByQName("name",AS3,Class<IFunction>::getFunction(_getName));
o->setSetterByQName("name",AS3,Class<IFunction>::getFunction(_setName));
}

Class_base::Class_base(const tiny_string& name):use_protected(false),constructor(NULL),referencedObjectsMutex("referencedObjects"),super(NULL),
context(NULL),class_name(name),class_index(-1),max_level(0)
{
Expand Down
19 changes: 19 additions & 0 deletions asobjects.h
Expand Up @@ -744,6 +744,25 @@ friend class ASString;
ASFUNCTION(_getGlobal);
};

class ASError: public ASObject
{
CLASSBUILDABLE(ASError);
private:
tiny_string message;
tiny_string name;
int errorID;
public:
ASError(const tiny_string& error_message = "", int id = 0) : message(error_message), name("Error"), errorID(id) {}
ASFUNCTION(getStackTrace);
ASFUNCTION(_setName);
ASFUNCTION(_getName);
ASFUNCTION(_setMessage);
ASFUNCTION(_getMessage);
ASFUNCTION(_getErrorID);
tiny_string toString(bool debugMsg=false);
static void buildTraits(ASObject* o);
};

};

#endif
8 changes: 4 additions & 4 deletions tags.cpp
Expand Up @@ -1709,10 +1709,10 @@ ProductInfoTag::ProductInfoTag(RECORDHEADER h, std::istream& in):Tag(h)
longlongTime|=CompileTimeLo;

LOG(LOG_NO_INFO,"SWF Info:" <<
"\r\n\tProductId: " << ProductId <<
"\r\n\tEdition: " << Edition <<
"\r\n\tVersion: " << UI32(MajorVersion) << "." << UI32(MinorVersion) << "." << MajorBuild << "." << MinorBuild <<
"\r\n\tCompileTime: " << longlongTime);
endl << "\tProductId: " << ProductId <<
endl << "\tEdition: " << Edition <<
endl << "\tVersion: " << UI32(MajorVersion) << "." << UI32(MinorVersion) << "." << MajorBuild << "." << MinorBuild <<
endl << "\tCompileTime: " << longlongTime);
}

FrameLabelTag::FrameLabelTag(RECORDHEADER h, std::istream& in):Tag(h)
Expand Down
24 changes: 24 additions & 0 deletions tests/error.mxml
@@ -0,0 +1,24 @@
<?xml version="1.0"?>
<mx:Application name="error_test"
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
applicationComplete="appComplete();"
backgroundColor="white">

<mx:Script>
<![CDATA[
private function appComplete():void {
//http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/Error.html
var err:Error = new Error();
trace(err.toString()); // Error
err = new Error("New Error Message");
trace(err.toString()); // Error: New Error Message
err.message = "Another New Error Message";
trace(err.toString()); // Error: Another New Error Message
}
]]>
</mx:Script>

</mx:Application>

0 comments on commit 317db67

Please sign in to comment.