Ejemplo n.º 1
0
void printObject(Object* obj, int indent) {
	switch (obj->kind) {
	case OBJ_CONSTANT:
		pad(indent);
		printf("Const %s = ", obj->name);
		printConstantValue(obj->constAttrs->value);
		break;
	case OBJ_TYPE:
		pad(indent);
		printf("Type %s = ", obj->name);
		printType(obj->typeAttrs->actualType);
		break;
	case OBJ_VARIABLE:
		pad(indent);
		printf("Var %s : ", obj->name);
		printType(obj->varAttrs->type);
		break;
	case OBJ_PARAMETER:
		pad(indent);
		if (obj->paramAttrs->kind == PARAM_VALUE)
			printf("Param %s : ", obj->name);
		else
			printf("Param VAR %s : ", obj->name);
		printType(obj->paramAttrs->type);
		break;
	case OBJ_FUNCTION:
		pad(indent);
		printf("Function %s : ", obj->name);
		printType(obj->funcAttrs->returnType);
		printf("\n");
		printScope(obj->funcAttrs->scope, indent + 4);
		break;
	case OBJ_PROCEDURE:
		pad(indent);
		printf("Procedure %s\n", obj->name);
		printScope(obj->procAttrs->scope, indent + 4);
		break;
	case OBJ_PROGRAM:
		pad(indent);
		printf("Program %s\n", obj->name);
		printScope(obj->progAttrs->scope, indent + 4);
		break;
	}
}
Ejemplo n.º 2
0
void PrettyPrinter::printBlock(BlockNode *node)
{
	printScope(node->scope());
	std::string indentation(m_indent, ' ');
	for (uint32_t i = 0; i != node->nodes(); ++i)
	{
		m_out << indentation;
		node->nodeAt(i)->visit(this);
		if (!node->nodeAt(i)->isIfNode() && !node->nodeAt(i)->isForNode() &&
			!node->nodeAt(i)->isWhileNode()) m_out << ";";
		m_out << std::endl;
	}
}
Ejemplo n.º 3
0
void
printScope (
    c_metaObject scope
    )
{
    if (scope->definedIn) {
        printScope (scope->definedIn);
        printf ("::%s", scope->name);
    } else {
        if (scope->name) {
            printf ("::%s", scope->name);
        }
    }
}
Ejemplo n.º 4
0
static void
printScope (
    c_metaObject scope
)
{
    if (scope == NULL) {
        return;
    }
    if (scope->definedIn) {
        printScope (scope->definedIn);
        printf ("::%s", scope->name);
    } else {
        if (scope->name) {
            printf ("::%s", scope->name);
        }
    }
}
Ejemplo n.º 5
0
    virtual void visitBlockNode(BlockNode* node) {
        if(indentationLevel >= 0){
            os << "{" << endl;
        }
        indentationLevel++;
        
        printScope(node->scope());

        for(uint32_t i = 0; i < node->nodes(); ++i) {
            os << indent();
            node->nodeAt(i)->visit(this);

            if(needSemicolon(node->nodeAt(i))) {
                os << ';';
            }

            os << endl;
        }
        
        indentationLevel--;
        if(indentationLevel >= 0) {
            os << indent() << "}" << endl;
        }
    }
Ejemplo n.º 6
0
static c_bool
display_orc (
    c_object o,
    c_voidp args
)
{
    refLeaf ord = (refLeaf)o;
    monitor_orc trace = (monitor_orc)args;
    regmatch_t match[1];

    if (ord->tr == nullType) {
        if (trace->delta) {
            if (abs(ord->rc - ord->prc) >= trace->extendCountLimit) {
                printf ("%6d                            <undefined>\r\n", (ord->rc - ord->prc));
            }
        } else {
            if (ord->rc >= trace->extendCountLimit) {
                printf ("%6d                            <undefined>\r\n", ord->rc);
            }
        }
    } else {
        switch (c_baseObject(ord->tr)->kind) {
        case M_COLLECTION:
            switch (c_collectionType(ord->tr)->kind) {
            case C_UNDEFINED:
            case C_LIST:
            case C_ARRAY:
            case C_BAG:
            case C_SET:
            case C_MAP:
            case C_DICTIONARY:
            case C_SEQUENCE:
            case C_STRING:
            case C_WSTRING:
            case C_QUERY:
            case C_SCOPE:
            case C_COUNT:
                if (trace->delta) {
                    if (abs(ord->rc - ord->prc) >= trace->extendCountLimit) {
                        if (trace->filterExpression) {
                            if (regexec (&trace->expression, c_metaObject(ord->tr)->name, 1, match, 0) == REG_NOMATCH) {
                                break;
                            }
                        }
                        printf ("%6d (%6d) %6d %10d %-15s %-15s ",
                                ord->rc - ord->prc,
                                ord->rc,
                                (int)c_type(ord->tr)->size,
                                (int)(c_type(ord->tr)->size * (ord->rc - ord->prc)),
                                baseKind[c_baseObject(ord->tr)->kind],
                                collectionKind[c_collectionType(ord->tr)->kind]);
                        printScope (c_metaObject(ord->tr)->definedIn);
                        printf ("::%s\r\n", c_metaObject(ord->tr)->name);
                        trace->totalSizeCount += c_type(ord->tr)->size * (ord->rc - ord->prc);
                        trace->totalObjectCount += ord->rc - ord->prc;
                    }
                } else {
                    if (ord->rc >= trace->extendCountLimit) {
                        if (trace->filterExpression) {
                            if (regexec (&trace->expression, c_metaObject(ord->tr)->name, 1, match, 0) == REG_NOMATCH) {
                                break;
                            }
                        }
                        printf ("%6d %6d %10d %-15s %-15s ",
                                ord->rc,
                                (int)c_type(ord->tr)->size,
                                (int)(c_type(ord->tr)->size * ord->rc),
                                baseKind[c_baseObject(ord->tr)->kind],
                                collectionKind[c_collectionType(ord->tr)->kind]);
                        printScope (c_metaObject(ord->tr)->definedIn);
                        printf ("::%s\r\n", c_metaObject(ord->tr)->name);
                        trace->totalSizeCount += c_type(ord->tr)->size * ord->rc;
                        trace->totalObjectCount += ord->rc;
                    }
                }
                break;
            }
            break;
        case M_PRIMITIVE:
        case M_TYPEDEF:
        case M_ENUMERATION:
        case M_UNION:
        case M_STRUCTURE:
        case M_INTERFACE:
        case M_CLASS:
        case M_EXCEPTION:
        case M_EXTENT:
        case M_EXTENTSYNC:
            if (trace->delta) {
                if (abs(ord->rc - ord->prc) >= trace->extendCountLimit) {
                    if (trace->filterExpression) {
                        if (regexec (&trace->expression, c_metaObject(ord->tr)->name, 1, match, 0) == REG_NOMATCH) {
                            break;
                        }
                    }
                    printf ("%6d (%6d) %6d %10d %-15s ",
                            ord->rc - ord->prc,
                            ord->rc,
                            (int)c_type(ord->tr)->size,
                            (int)(c_type(ord->tr)->size * (ord->rc - ord->prc)),
                            baseKind[c_baseObject(ord->tr)->kind]);
                    printf ("                ");
                    printScope (c_metaObject(ord->tr)->definedIn);
                    printf ("::%s\r\n", c_metaObject(ord->tr)->name);
                    trace->totalSizeCount += c_type(ord->tr)->size * (ord->rc - ord->prc);
                    trace->totalObjectCount += ord->rc - ord->prc;
                }
            } else {
                if (ord->rc >= trace->extendCountLimit) {
                    if (trace->filterExpression) {
                        if (regexec (&trace->expression, c_metaObject(ord->tr)->name, 1, match, 0) == REG_NOMATCH) {
                            break;
                        }
                    }
                    printf ("%6d %6d %10d %-15s ",
                            ord->rc,
                            (int)c_type(ord->tr)->size,
                            (int)(c_type(ord->tr)->size * ord->rc),
                            baseKind[c_baseObject(ord->tr)->kind]);
                    printf ("                ");
                    printScope (c_metaObject(ord->tr)->definedIn);
                    printf ("::%s\r\n", c_metaObject(ord->tr)->name);
                    trace->totalSizeCount += c_type(ord->tr)->size * ord->rc;
                    trace->totalObjectCount += ord->rc;
                }
            }
            break;
        case M_UNDEFINED:
        case M_ATTRIBUTE:
        case M_CONSTANT:
        case M_CONSTOPERAND:
        case M_EXPRESSION:
        case M_LITERAL:
        case M_MEMBER:
        case M_OPERATION:
        case M_PARAMETER:
        case M_RELATION:
        case M_BASE:
        case M_UNIONCASE:
        case M_COUNT:
        case M_MODULE:
            break;
        }
    }
    ord->prc = ord->rc;
    ord->rc = 0;
    return TRUE;
}
Ejemplo n.º 7
0
static void
metaobject (
    c_metaObject o,
    monitor_trc trace
    )
{
    refLeaf ted;

    if (c_baseObject(o)->kind < M_COUNT) {
        switch (c_baseObject(o)->kind) {
            case M_UNDEFINED:
            case M_ATTRIBUTE:
            case M_CONSTANT:
            case M_CONSTOPERAND:
            case M_EXPRESSION:
            case M_LITERAL:
            case M_MEMBER:
            case M_OPERATION:
            case M_PARAMETER:
            case M_RELATION:
            case M_BASE:
            case M_UNIONCASE:
            case M_COUNT:
                break;
            case M_COLLECTION:
                switch (c_collectionType(o)->kind) {
                    case C_UNDEFINED:
                    case C_LIST:
                    case C_ARRAY:
                    case C_BAG:
                    case C_SET:
                    case C_MAP:
                    case C_DICTIONARY:
                    case C_SEQUENCE:
                    case C_STRING:
                    case C_WSTRING:
                    case C_QUERY:
                    case C_SCOPE:
                    case C_COUNT:
                        if (trace->delta) {
                            ted = monitor_typeExtent (c_type(o), trace);
                            if (ted) {
                                if ((ted->ec - ted->ecp) >= trace->objectCountLimit) {
                                    if (trace->filterExpression) {
                                        if (strstr (o->name, trace->filterExpression) == NULL) {
                                            break;
                                        }
                                    }
                                    printf ("%6d (%8d) %8d %12lld %-15s %-15s ",
                                            ted->ec - ted->ecp,
                                            ted->ec,
                                            c_type(o)->size,
                                            (long long)(c_type(o)->size * (long long)((int)ted->ec - (int)ted->ecp)),
                                            baseKind[c_baseObject(o)->kind],
                                            collectionKind[c_collectionType(o)->kind]);
                                    printScope (o->definedIn);
                                    printf ("::%s\r\n", o->name);
                                    trace->totalCount += c_type(o)->size * (ted->ec - ted->ecp);
                                    trace->totalExtentCount += ted->ec - ted->ecp;
                                    trace->index++;
                                }
                            }
                        } else {
                            if (c_type(o)->objectCount >= trace->objectCountLimit) {
                                if (trace->filterExpression) {
                                    if (strstr (o->name, trace->filterExpression) == NULL) {
                                        break;
                                    }
                                }
                                printf ("%8d %8d %12lld %-15s %-15s ",
                                        c_type(o)->objectCount,
                                        c_type(o)->size,
                                        (long long)((long long)c_type(o)->size * c_type(o)->objectCount),
                                        baseKind[c_baseObject(o)->kind],
                                        collectionKind[c_collectionType(o)->kind]);
                                printScope (o->definedIn);
                                printf ("::%s\r\n", o->name);
                                trace->totalCount += c_type(o)->size * c_type(o)->objectCount;
                                trace->totalExtentCount += c_type(o)->objectCount;
                                trace->index++;
                            }
                        }
                        break;
                }
                break;
            case M_PRIMITIVE:
            case M_TYPEDEF:
            case M_ENUMERATION:
            case M_UNION:
            case M_STRUCTURE:
            case M_INTERFACE:
            case M_CLASS:
            case M_EXCEPTION:
                if (trace->delta) {
                    ted = monitor_typeExtent (c_type(o), trace);
                    if (ted) {
                        if ((ted->ec - ted->ecp) >= trace->objectCountLimit) {
                            if (trace->filterExpression) {
                                if (strstr (o->name, trace->filterExpression) == NULL) {
                                    break;
                                }
                            }
                            printf ("%6d (%8d) %8d %12lld %-15s ",
                                    ted->ec - ted->ecp,
                                    ted->ec,
                                    c_type(o)->size,
                                    (long long)(c_type(o)->size * (long long)((int)ted->ec - (int)ted->ecp)),
                                    baseKind[c_baseObject(o)->kind]);
                            printf ("                ");
                            printScope (o->definedIn);
                            printf ("::%s\r\n", o->name);
                            trace->totalCount += c_type(o)->size * (ted->ec - ted->ecp);
                            trace->totalExtentCount += ted->ec - ted->ecp;
                            trace->index++;
                        }
                    }
                } else {
                    if (c_type(o)->objectCount >= trace->objectCountLimit) {
                        if (trace->filterExpression) {
                            if (strstr (o->name, trace->filterExpression) == NULL) {
                                break;
                            }
                        }
                        printf ("%8d %8d %12lld %-15s ",
                                c_type(o)->objectCount,
                                c_type(o)->size,
                                (long long)((long long)c_type(o)->size * c_type(o)->objectCount),
                                baseKind[c_baseObject(o)->kind]);
                        printf ("                ");
                        printScope (o->definedIn);
                        printf ("::%s\r\n", o->name);
                        trace->totalCount += c_type(o)->size * c_type(o)->objectCount;
                        trace->totalExtentCount += c_type(o)->objectCount;
                        trace->index++;
                    }
                }
                break;
            case M_MODULE:
                c_metaWalk (o, metaobject, trace);
        }
    }
}