Skip to content

Commit

Permalink
[ASObject] move check for final class to appropriate places
Browse files Browse the repository at this point in the history
  • Loading branch information
Ludger Krämer committed Mar 31, 2012
1 parent 39fecc2 commit dbeb0d2
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions src/asobject.cpp
Expand Up @@ -465,16 +465,16 @@ void ASObject::setVariableByMultiname(const multiname& name, ASObject* o, Class_

if(!obj && cls)
{
if(cls->isFinal)
{
tiny_string err=tiny_string("Error #1037: Cannot assign to a method ")+name.normalizedName()+tiny_string(" on ")+cls->getQualifiedClassName();
throw Class<ReferenceError>::getInstanceS(err);
}
//Look for borrowed traits before
//It's valid to override only a getter, so keep
//looking for a settable even if a super class sets
//has_getter to true.
obj=cls->findSettable(name,true,&has_getter);
if(obj && cls->isFinal)
{
tiny_string err=tiny_string("Error #1037: Cannot assign to a method ")+name.normalizedName()+tiny_string(" on ")+cls->getQualifiedClassName();
throw Class<ReferenceError>::getInstanceS(err);
}
}

if(!obj && cls)
Expand All @@ -487,14 +487,19 @@ void ASObject::setVariableByMultiname(const multiname& name, ASObject* o, Class_

if(tmp)
{
if(cls->isFinal)
{
tiny_string err=tiny_string("Error #1037: Cannot assign to a method ")+name.normalizedName()+tiny_string(" on ")+cls->getQualifiedClassName();
throw Class<ReferenceError>::getInstanceS(err);
}
if (tmp->kind != DYNAMIC_TRAIT) // dynamic prototype properties can be overridden
obj = tmp;
break;
}
proto = proto->getprop_prototype();
}
}

if(!obj)
{
if(has_getter)
Expand Down

0 comments on commit dbeb0d2

Please sign in to comment.