Skip to content

Commit

Permalink
code gardening
Browse files Browse the repository at this point in the history
  • Loading branch information
bamboo committed May 8, 2012
1 parent 6046e83 commit ea26d13
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 48 deletions.
99 changes: 52 additions & 47 deletions src/Boo.Lang.Compiler/Steps/ProcessMethodBodies.cs
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -232,65 +232,72 @@ override public void OnProperty(Property node)
{ {
if (WasVisited(node)) if (WasVisited(node))
return; return;

MarkVisited(node); MarkVisited(node);


Method setter = node.Setter;
Method getter = node.Getter;

Visit(node.Attributes); Visit(node.Attributes);
Visit(node.Type); Visit(node.Type);
Visit(node.Parameters); Visit(node.Parameters);


ResolvePropertyOverride(node); ResolvePropertyOverride(node);


if (null != getter) ProcessGetter(node);
{
if (null != node.Type)
{
getter.ReturnType = node.Type.CloneNode();
}
getter.Parameters.ExtendWithClones(node.Parameters);


Visit(getter); if (node.Type == null)
} node.Type = CodeBuilder.CreateTypeReference(node.LexicalInfo, InferTypeOfProperty(node));

if (node.Getter != null)
node.Getter.ReturnType = node.Type.CloneNode();

ProcessSetter(node);
}


IType typeInfo = null; private void ProcessSetter(Property node)
if (null != node.Type) {
if (node.Setter != null)
{ {
typeInfo = GetType(node.Type); NormalizeSetterOf(node);
} Visit(node.Setter);
else
{
if (null != getter)
{
typeInfo = GetEntity(node.Getter).ReturnType;
if (typeInfo == TypeSystemServices.VoidType)
{
typeInfo = TypeSystemServices.ObjectType;
node.Getter.ReturnType = CodeBuilder.CreateTypeReference(getter.LexicalInfo, typeInfo);
}
}
else
{
typeInfo = TypeSystemServices.ObjectType;
}
node.Type = CodeBuilder.CreateTypeReference(node.LexicalInfo, typeInfo);
} }
}


if (null != setter) private void ProcessGetter(Property node)
{
if (node.Getter != null)
{ {
ParameterDeclaration parameter = new ParameterDeclaration(); NormalizeGetterOf(node);
parameter.Type = CodeBuilder.CreateTypeReference(typeInfo); Visit(node.Getter);
parameter.Name = "value";
parameter.Entity = new InternalParameter(parameter, node.Parameters.Count+CodeBuilder.GetFirstParameterIndex(setter));
setter.Parameters.ExtendWithClones(node.Parameters);
setter.Parameters.Add(parameter);
setter.Name = "set_" + node.Name;
Visit(setter);
} }
} }


private static void NormalizeGetterOf(Property node)
{
node.Getter.Parameters.ExtendWithClones(node.Parameters);
if (node.Getter.ReturnType == null && node.Type != null)
node.Getter.ReturnType = node.Type.CloneNode();
}

private IType InferTypeOfProperty(Property node)
{
if (node.Getter == null)
return TypeSystemServices.ObjectType;

var getterType = GetEntity(node.Getter).ReturnType;
if (getterType != TypeSystemServices.VoidType)
return getterType;

return TypeSystemServices.ObjectType;
}

private void NormalizeSetterOf(Property node)
{
var setter = node.Setter;
setter.Name = "set_" + node.Name;

var setterParameters = setter.Parameters;
setterParameters.ExtendWithClones(node.Parameters);
setterParameters.Add(CodeBuilder.CreateParameterDeclaration(CodeBuilder.GetFirstParameterIndex(setter) + setterParameters.Count, "value", GetType(node.Type)));
}

override public void OnStatementTypeMember(StatementTypeMember node) override public void OnStatementTypeMember(StatementTypeMember node)
{ {
// statement type members are later // statement type members are later
Expand Down Expand Up @@ -337,7 +344,7 @@ override public void OnField(Field node)
CheckFieldType(node.Type); CheckFieldType(node.Type);
} }


bool IsValidLiteralInitializer(Expression e) static bool IsValidLiteralInitializer(Expression e)
{ {
switch (e.NodeType) switch (e.NodeType)
{ {
Expand All @@ -346,9 +353,7 @@ bool IsValidLiteralInitializer(Expression e)
case NodeType.DoubleLiteralExpression: case NodeType.DoubleLiteralExpression:
case NodeType.NullLiteralExpression: case NodeType.NullLiteralExpression:
case NodeType.StringLiteralExpression: case NodeType.StringLiteralExpression:
{ return true;
return true;
}
} }
return false; return false;
} }
Expand Down Expand Up @@ -1056,7 +1061,7 @@ IProperty ResolvePropertyOverride(IProperty p, IEntity[] candidates)
return null; return null;
} }


bool CheckOverrideSignature(IProperty p, IProperty candidate) static bool CheckOverrideSignature(IProperty p, IProperty candidate)
{ {
return TypeSystemServices.CheckOverrideSignature(p.GetParameters(), candidate.GetParameters()); return TypeSystemServices.CheckOverrideSignature(p.GetParameters(), candidate.GetParameters());
} }
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#endregion #endregion



namespace Boo.Lang.Compiler.TypeSystem.Services namespace Boo.Lang.Compiler.TypeSystem.Services
{ {
public static class TypeCompatibilityRules public static class TypeCompatibilityRules
Expand Down

0 comments on commit ea26d13

Please sign in to comment.