Package tree.expression

Source Code of tree.expression.Array

package tree.expression;


import org.antlr.runtime.CommonToken;
import org.antlr.runtime.Token;

import tree.HaxeTree;
import tree.type.Class;
import tree.type.HaxeType;
import tree.utils.TypeUtils;

/**
* This class represents arryas in that form: [el1, el2, ..]
*
* @author Savenko Maria
*/
public class Array extends Constant
{  
    private CommonToken leftBracket = null;
    private CommonToken rightBracket = null;
   
    private HaxeType memebersType = null;
   
    public Array(
            final int ttype, final Token lbToken, final Token rbToken)
    {
        super(new CommonToken(ttype, "Array"));
        leftBracket = (CommonToken) lbToken;
        rightBracket = (CommonToken) rbToken;
    }
   
    @Override
    public HaxeType getHaxeType()
    {
        if (haxeType == null)
        {
            HaxeType arrayType = TypeUtils.getArray();
            if (arrayType == null || !(arrayType instanceof Class))
            {
                return null;
            }
            ((Class)arrayType).addToParamTypes(getMembersType());
            haxeType = arrayType;
        }
        return super.getHaxeType();
    }
   
    public HaxeType getMembersType()
    {
        if (memebersType == null)
        {
            tryDefineType();
        }
        return memebersType;
    }
   
    @Override
    public String getText()
    {
        return "Array";
    }
   
    @Override
    protected void calculateMostRightPosition()
    {
        mostRightPosition = rightBracket.getStopIndex();
    }
   
    @Override
    protected void calculateMostLeftPosition()
    {
        mostLeftPosition = leftBracket.getStartIndex();
    }
   
    private void tryDefineType()
    {
        // for empty arrays
        HaxeType type = TypeUtils.getUnknown();
        for (HaxeTree child : getChildren())
        {
            if (child.getChildIndex() == 0)
            {
                type = child.getHaxeType();
                continue;
            }
            if (child.isUndefinedType())
            {
                // it will leave type of the array as Undefined
                return;
            }
            HaxeType ctype = child.getHaxeType();
            if (TypeUtils.isAvailableAssignement(type, ctype))
            {
                continue;
            }
            else if (TypeUtils.isAvailableAssignement(ctype, type))
            {
                type = ctype;
                continue;
            }
        }
        setHaxeType(type);
    }
}
TOP

Related Classes of tree.expression.Array

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.