Ejemplo n.º 1
0
    /**
     * @see parser.idlparservisitor#visit(ASTvalue_box_decl, Object)
     * @param data the current buildinfo
     */
    public Object visit(ASTvalue_box_decl node, Object data) {
        CheckParameterForBuildInfo(data, node);
        Scope enclosingScope = ((BuildInfo) data).GetBuildScope();
        Symbol forSymbol = enclosingScope.getSymbol(node.getIdent());
        // check if type is known from a previous run over a parse tree --> if so: skip
        if (m_typeManager.CheckSkip(forSymbol)) { 
            return null;
        }
        
        Debug.WriteLine("begin boxed value type: " + node.getIdent());
        // get the boxed type
        TypeContainer boxedType = (TypeContainer)node.jjtGetChild(0).jjtAccept(this, data);
        if (boxedType == null) {
            throw new InvalidIdlException(
                String.Format("boxed type " + 
                              ((SimpleNode)node.jjtGetChild(0)).GetIdentification() +
                              " not (yet) defined for boxed value type " +
                              node.GetIdentification()));
        }
        boxedType = ReplaceByCustomMappedIfNeeded(boxedType);        

        // do use fusioned type + attributes on fusioned type for boxed value;
        m_typeManager.StartBoxedValueTypeDefinition(forSymbol, boxedType.GetCompactClsType(),
                                                    boxedType.GetCompactTypeAttrs());

        m_typeManager.EndTypeDefinition(forSymbol);
        return null;
    }