Ejemplo n.º 1
0
Archivo: do.c Proyecto: franred/ofc
bool ofc_sema_stmt_do_while_print(
	ofc_colstr_t* cs,
	const ofc_sema_stmt_t* stmt)
{
	if (!cs || (stmt->type != OFC_SEMA_STMT_DO_WHILE))
		return false;

	if (!ofc_colstr_atomic_writef(cs, "DO WHILE")
		|| !ofc_sema_expr_print(cs, stmt->do_while.end_label)
		|| !ofc_sema_expr_print(cs, stmt->do_while.cond))
		return false;

	return true;
}
Ejemplo n.º 2
0
Archivo: do.c Proyecto: franred/ofc
bool ofc_sema_stmt_do_while_block_print(
	ofc_colstr_t* cs, unsigned indent,
	ofc_sema_label_map_t* label_map,
	const ofc_sema_stmt_t* stmt)
{
	if (!cs || (stmt->type != OFC_SEMA_STMT_DO_WHILE_BLOCK))
		return false;

	if (!ofc_colstr_atomic_writef(cs, "DO WHILE")
		|| !ofc_colstr_atomic_writef(cs, " ")
		|| !ofc_colstr_atomic_writef(cs, "(")
		|| !ofc_sema_expr_print(cs, stmt->do_while_block.cond)
		|| !ofc_colstr_atomic_writef(cs, ")")
		|| !ofc_sema_stmt_list_print(
			cs, (indent + 1), label_map,
			stmt->do_while_block.block))
		return false;

	const ofc_sema_label_t* label
		= ofc_sema_label_map_find_end_block(
			label_map, stmt);
	const unsigned* ulabel = NULL;
	if (label) ulabel = &label->number;

	if (!ofc_colstr_newline(cs, indent, ulabel)
		|| !ofc_colstr_atomic_writef(cs, "END DO"))
		return false;

	return true;
}
Ejemplo n.º 3
0
bool ofc_sema_stmt_assign_print(
	ofc_colstr_t* cs,
	const ofc_sema_stmt_t* stmt)
{
	return (cs && stmt
		&& ofc_colstr_atomic_writef(cs, "ASSIGN")
		&& ofc_colstr_atomic_writef(cs, " ")
		&& ofc_sema_expr_print(cs, stmt->assign.label)
		&& ofc_colstr_atomic_writef(cs, " ")
		&& ofc_colstr_atomic_writef(cs, "TO")
		&& ofc_colstr_atomic_writef(cs, " ")
		&& ofc_sema_decl_print_name(cs, stmt->assign.dest));
}
Ejemplo n.º 4
0
static bool ofc_sema_stmt_read__print_optional(
	ofc_colstr_t* cs, const char* name,
	const ofc_sema_expr_t* expr)
{
	if (!cs || !expr)
		return false;

	if (!ofc_colstr_atomic_writef(cs, ",")
		|| !ofc_colstr_atomic_writef(cs, " ")
		|| !ofc_colstr_atomic_writef(cs, name)
		|| !ofc_colstr_atomic_writef(cs, "= ")
		|| !ofc_sema_expr_print(cs, expr))
		return false;

	return true;
}
Ejemplo n.º 5
0
bool ofc_sema_stmt_read_print(ofc_colstr_t* cs,
	const ofc_sema_stmt_t* stmt)
{
	if (!cs || (stmt->type != OFC_SEMA_STMT_IO_READ))
		return false;

	if (!ofc_colstr_atomic_writef(cs, "READ")
		|| !ofc_colstr_atomic_writef(cs, " ")
		|| !ofc_colstr_atomic_writef(cs, "("))
		return false;

	if (stmt->io_read.stdin)
	{
		if (!ofc_colstr_atomic_writef(cs, "*"))
			return false;
	}
	else
	{
		if (!ofc_sema_expr_print(cs,
			stmt->io_read.unit))
			return false;
	}

	if (stmt->io_read.format_ldio)
	{
		if (!ofc_colstr_atomic_writef(cs, ",")
			|| !ofc_colstr_atomic_writef(cs, " "))
			return false;
		if (!ofc_colstr_atomic_writef(cs, "*"))
			return false;
	}
	else if (stmt->io_read.formatted)
	{
		if (!ofc_sema_stmt_read__print_optional(
			cs,	"FMT", stmt->io_read.format))
			return false;
	}

	if (stmt->io_read.iostat)
	{
		if (!ofc_sema_stmt_read__print_optional(
			cs, "IOSTAT", stmt->io_read.iostat))
			return false;
	}
	if (stmt->io_read.rec)
	{
		if (!ofc_sema_stmt_read__print_optional(
			cs, "REC", stmt->io_read.rec))
			return false;
	}
	if (stmt->io_read.err)
	{
		if (!ofc_sema_stmt_read__print_optional(
			cs,	"ERR", stmt->io_read.err))
			return false;
	}
	if (stmt->io_read.eor)
	{
		if (!ofc_sema_stmt_read__print_optional(
			cs,	"EOR", stmt->io_read.eor))
			return false;
	}
	if (stmt->io_read.end)
	{
		if (!ofc_sema_stmt_read__print_optional(
			cs,	"END", stmt->io_read.end))
			return false;
	}
	if (stmt->io_read.size)
	{
		if (!ofc_sema_stmt_read__print_optional(
			cs,	"SIZE", stmt->io_read.size))
			return false;
	}

	if (!ofc_colstr_atomic_writef(cs, ")"))
		return false;

	if (stmt->io_read.iolist)
	{
		if (!ofc_colstr_atomic_writef(cs, " ")
			|| !ofc_sema_lhs_list_print(cs,
				stmt->io_read.iolist))
			return false;
	}

	return true;
}
Ejemplo n.º 6
0
bool ofc_sema_stmt_io_inquire_print(
	ofc_colstr_t* cs,
	const ofc_sema_stmt_t* stmt)
{
	if (!cs || !stmt
		|| stmt->type != OFC_SEMA_STMT_IO_INQUIRE)
		return false;

	if (!ofc_colstr_atomic_writef(cs, "INQUIRE")
		|| !ofc_colstr_atomic_writef(cs, " ")
		|| !ofc_colstr_atomic_writef(cs, "("))
		return false;

	if (stmt->io_inquire.unit)
		if (!ofc_colstr_atomic_writef(cs, "UNIT= ")
			|| !ofc_sema_expr_print(cs, stmt->io_inquire.unit)) return false;
	if (stmt->io_inquire.file)
		if (!ofc_colstr_atomic_writef(cs, "FILE= ")
			|| !ofc_sema_expr_print(cs, stmt->io_inquire.file)) return false;

    if (stmt->io_inquire.access)
		if (!ofc_sema_inquire_print_elem(cs, "ACCESS", stmt->io_inquire.access))           return false;
	if (stmt->io_inquire.action)
		if (!ofc_sema_inquire_print_elem(cs, "ACTION", stmt->io_inquire.action))           return false;
	if (stmt->io_inquire.blank)
		if (!ofc_sema_inquire_print_elem(cs, "BLANK", stmt->io_inquire.blank))             return false;
	if (stmt->io_inquire.delim)
		if (!ofc_sema_inquire_print_elem(cs, "DELIM", stmt->io_inquire.delim))             return false;
	if (stmt->io_inquire.direct)
		if (!ofc_sema_inquire_print_elem(cs, "DIRECT", stmt->io_inquire.direct))           return false;
	if (stmt->io_inquire.exist)
		if (!ofc_sema_inquire_print_elem(cs, "EXIST", stmt->io_inquire.exist))             return false;
	if (stmt->io_inquire.form)
		if (!ofc_sema_inquire_print_elem(cs, "FORM", stmt->io_inquire.form))               return false;
	if (stmt->io_inquire.formatted)
		if (!ofc_sema_inquire_print_elem(cs, "FORMATTED", stmt->io_inquire.formatted))     return false;
	if (stmt->io_inquire.iostat)
		if (!ofc_sema_inquire_print_elem(cs, "IOSTAT", stmt->io_inquire.iostat))           return false;
	if (stmt->io_inquire.name)
		if (!ofc_sema_inquire_print_elem(cs, "NAME", stmt->io_inquire.name))               return false;
	if (stmt->io_inquire.named)
		if (!ofc_sema_inquire_print_elem(cs, "NAMED", stmt->io_inquire.named))             return false;
	if (stmt->io_inquire.nextrec)
		if (!ofc_sema_inquire_print_elem(cs, "NEXTREC", stmt->io_inquire.nextrec))         return false;
	if (stmt->io_inquire.number)
		if (!ofc_sema_inquire_print_elem(cs, "NUMBER", stmt->io_inquire.number))           return false;
	if (stmt->io_inquire.opened)
		if (!ofc_sema_inquire_print_elem(cs, "OPENED", stmt->io_inquire.opened))           return false;
	if (stmt->io_inquire.pad)
		if (!ofc_sema_inquire_print_elem(cs, "PAD", stmt->io_inquire.pad))                 return false;
	if (stmt->io_inquire.position)
		if (!ofc_sema_inquire_print_elem(cs, "POSITION", stmt->io_inquire.position))       return false;
	if (stmt->io_inquire.read)
		if (!ofc_sema_inquire_print_elem(cs, "READ", stmt->io_inquire.read))               return false;
	if (stmt->io_inquire.readwrite)
		if (!ofc_sema_inquire_print_elem(cs, "READWRITE", stmt->io_inquire.readwrite))     return false;
	if (stmt->io_inquire.recl)
		if (!ofc_sema_inquire_print_elem(cs, "RECL", stmt->io_inquire.recl))               return false;
	if (stmt->io_inquire.sequential)
		if (!ofc_sema_inquire_print_elem(cs, "SEQUENTIAL", stmt->io_inquire.sequential))   return false;
	if (stmt->io_inquire.unformatted)
		if (!ofc_sema_inquire_print_elem(cs, "UNFORMATTED", stmt->io_inquire.unformatted)) return false;
	if (stmt->io_inquire.write)
		if (!ofc_sema_inquire_print_elem(cs, "WRITE", stmt->io_inquire.write))             return false;

	if (!ofc_colstr_atomic_writef(cs, ")"))
		return false;

	return true;
}
Ejemplo n.º 7
0
bool ofc_sema_lhs_print(
	ofc_colstr_t* cs,
	const ofc_sema_lhs_t* lhs)
{
	if (!cs || !lhs) return false;

	switch(lhs->type)
	{
		case OFC_SEMA_LHS_ARRAY_INDEX:
		case OFC_SEMA_LHS_ARRAY_SLICE:
		case OFC_SEMA_LHS_STRUCTURE_MEMBER:
		case OFC_SEMA_LHS_SUBSTRING:
			if (!ofc_sema_lhs_print(
				cs, lhs->parent))
				return false;
			break;
		default:
			break;
	}

	switch(lhs->type)
	{
		case OFC_SEMA_LHS_DECL:
			if (!ofc_sema_decl_print_name(cs, lhs->decl))
				return false;
			break;

		case OFC_SEMA_LHS_ARRAY_INDEX:
			if (!ofc_sema_array_index_print(cs, lhs->index))
				return false;
			break;

		case OFC_SEMA_LHS_ARRAY_SLICE:
			if (!ofc_sema_array_slice_print(cs, lhs->slice.slice))
				return false;
			break;

		case OFC_SEMA_LHS_SUBSTRING:
			if (!ofc_colstr_atomic_writef(cs, "("))
				return false;
			if (lhs->substring.first
				&& !ofc_sema_expr_print(cs,
					lhs->substring.first))
				return false;

			if (!ofc_colstr_atomic_writef(cs, ":"))
				return false;

			if (lhs->substring.last
				&& !ofc_sema_expr_print(cs,
					lhs->substring.last))
				return false;

			if (!ofc_colstr_atomic_writef(cs, ")"))
				return false;
			break;

		case OFC_SEMA_LHS_STRUCTURE_MEMBER:
			{
				char member = '%';
				ofc_sema_structure_t* structure
					= ofc_sema_lhs_structure(lhs->parent);
				if (!ofc_sema_structure_is_derived_type(structure))
					member = '.';

				if (!ofc_colstr_atomic_writef(cs, "%c", member)
					|| !ofc_sema_decl_print_name(cs, lhs->member))
						return false;
			}
			break;

		case OFC_SEMA_LHS_IMPLICIT_DO:
			if (!ofc_colstr_atomic_writef(cs, "(")
				|| !ofc_sema_lhs_list_print(cs, lhs->implicit_do.lhs)
				|| !ofc_colstr_atomic_writef(cs, ",")
				|| !ofc_colstr_atomic_writef(cs, " ")
				|| !ofc_sema_decl_print_name(cs, lhs->implicit_do.iter)
				|| !ofc_colstr_atomic_writef(cs, " ")
				|| !ofc_colstr_atomic_writef(cs, "=")
				|| !ofc_colstr_atomic_writef(cs, " ")
				|| !ofc_sema_expr_print(cs, lhs->implicit_do.init)
				|| !ofc_colstr_atomic_writef(cs, ",")
				|| !ofc_colstr_atomic_writef(cs, " ")
				|| !ofc_sema_expr_print(cs, lhs->implicit_do.last))
				return false;

			if (lhs->implicit_do.step)
			{
				if (!ofc_colstr_atomic_writef(cs, ",")
					|| !ofc_colstr_atomic_writef(cs, " ")
					|| !ofc_sema_expr_print(cs, lhs->implicit_do.step))
					return false;
			}

			if (!ofc_colstr_atomic_writef(cs, ")"))
				return false;
			break;

		default:
			return false;
	}

	return true;
}
Ejemplo n.º 8
0
bool ofc_sema_stmt_io_position_print(
	ofc_colstr_t* cs,
	const ofc_sema_stmt_t* stmt)
{
	if (!cs || !stmt)
		return false;

	switch (stmt->type)
	{
		case OFC_SEMA_STMT_IO_REWIND:
			if (!ofc_colstr_atomic_writef(cs, "REWIND"))
				return false;
			break;
		case OFC_SEMA_STMT_IO_END_FILE:
			if (!ofc_colstr_atomic_writef(cs, "END FILE"))
				return false;
			break;
		case OFC_SEMA_STMT_IO_BACKSPACE:
			if (!ofc_colstr_atomic_writef(cs, "BACKSPACE"))
				return false;
			break;

		default:
			return false;
	}

	if (!ofc_colstr_atomic_writef(cs, " ")
		|| !ofc_colstr_atomic_writef(cs, "("))
		return false;

	if (stmt->io_position.unit)
	{
		if (!ofc_colstr_atomic_writef(cs, "UNIT")
			|| !ofc_colstr_atomic_writef(cs, "=")
			|| !ofc_sema_expr_print(cs, stmt->io_position.unit))
			return false;
	}

	if (stmt->io_position.iostat)
	{
		if (!ofc_colstr_atomic_writef(cs, ",")
			|| !ofc_colstr_atomic_writef(cs, " ")
			|| !ofc_colstr_atomic_writef(cs, "IOSTAT")
			|| !ofc_colstr_atomic_writef(cs, "=")
			|| !ofc_sema_expr_print(cs, stmt->io_position.iostat))
			return false;
	}

	if (stmt->io_position.err)
	{
		if (!ofc_colstr_atomic_writef(cs, ",")
			|| !ofc_colstr_atomic_writef(cs, " ")
			|| !ofc_colstr_atomic_writef(cs, "ERR")
			|| !ofc_colstr_atomic_writef(cs, "=")
			|| !ofc_sema_expr_print(cs, stmt->io_position.err))
			return false;
	}

	if (!ofc_colstr_atomic_writef(cs, ")"))
		return false;

	return true;
}