Пример #1
0
/*
 * Find or construct a span tag for this code.
 * Write it into the scratch buffer.
 */
void write_span(char *code, char **scratch, size_t *scratch_pos, size_t *scratchLen)
{
    size_t span_len = 0;
    char span[MAX_SPAN_SIZE];

    make_span(code, span, &span_len);

    write_scratch(span, span_len, scratch, scratch_pos, scratchLen);
}
Пример #2
0
void end_as_line_no(Node list_node, struct prsstack *next_token)
													/*;end_as_line_no*/
{
	/* add an as_line_no node to end of statement list this is the line
	 * number of the token following the sequence of statements
	 */

	Node  line_node;

	if (N_LIST(list_node) != (Tuple)0) {
		line_node = node_new (as_line_no);
		N_ID(line_node) = next_token->ptr.token->span.line ;
		set_span(line_node, make_span(N_ID(line_node),
		  next_token->ptr.token->span.col));
		N_LIST(list_node) = tup_with(N_LIST(list_node), (char *)line_node);
	}
}
Пример #3
0
static Span retrieve_l_span(Node node) 			/*;retrieve_l_span */
{
	int i,listsize;
	unsigned int nkind;
	Span lspan = (Span)0 ;

	if (node == (Node)0 || node == OPT_NODE) return (Span)0;
	nkind = N_KIND(node);
	if (is_terminal_node(nkind)) return make_span(N_SPAN0(node),N_SPAN1(node));
	if (nkind == as_exit) return retrieve_l_span(N_AST4(node));
	if (nkind == as_return) return retrieve_l_span(N_AST4(node));
	if (nkind == as_raise) return retrieve_l_span(N_AST2(node));
	if (nkind == as_others_choice) return retrieve_l_span(N_AST3(node));
	if (nkind == as_op)
		/* N_AST1 is the operator. Really want first argument! */
		if ((lspan=retrieve_l_span(N_AST2(node))) != (Span)0)
			return lspan;
	if (nkind == as_attribute)
		/* N_AST1 is the attribute. Really want first argument! */
		if ((lspan=retrieve_l_span(N_AST2(node))) != (Span)0)
			return lspan;
	if (N_LIST_DEFINED(nkind)) {
		listsize = tup_size(N_LIST(node));
		if (listsize == 0)
			return (Span)0;
		for (i=1; i <= listsize; i++) {
			lspan = retrieve_l_span((Node)N_LIST(node)[i]);
			if (lspan != (Span)0)
				return lspan;
		}
		return (Span)0;
	}
	if (N_AST1_DEFINED(nkind))
		lspan = retrieve_l_span(N_AST1(node));
	if (N_AST2_DEFINED(nkind) && lspan == (Span)0 )
		lspan = retrieve_l_span(N_AST2(node));
	if (N_AST3_DEFINED(nkind) && lspan == (Span)0 )
		lspan = retrieve_l_span(N_AST3(node));
	if (N_AST4_DEFINED(nkind) && lspan == (Span)0 )
		lspan = retrieve_l_span(N_AST4(node));
	return lspan;
}
Пример #4
0
	explicit
	string_path(const std::string& path_str)
	 : string_path(make_span(path_str))
	{ }
Пример #5
0
static Span retrieve_r_span(Node node) 				/*;retrieve_r_span */
{
	int i,listsize,length=1;
	unsigned int nkind;
	Span rspan = (Span)0 ;
	Node attr_node;

	if (node == (Node)0 || node == OPT_NODE) return (Span)0;
	nkind = N_KIND(node);
	if (is_terminal_node(nkind)) {
		if (N_VAL_DEFINED(nkind))
			/* as_null, as_null_s, as_others, 
			 * have no N_VAL field defined
			 */
			if (nkind != as_number && nkind != as_ivalue 
			  && nkind != as_line_no && N_VAL(node) != (char *)0)
				length = strlen(N_VAL(node));
		return (make_span(N_SPAN0(node), N_SPAN1(node)+length-1));
	}
	if (nkind == as_exit) {
		if (N_AST2(node) != OPT_NODE) return retrieve_r_span(N_AST2(node));
		if (N_AST1(node) != OPT_NODE) return retrieve_r_span(N_AST1(node));
		return retrieve_r_span(N_AST4(node));
	}
	if (nkind == as_return) {
		if (N_AST1(node) != OPT_NODE) return retrieve_r_span(N_AST1(node));
		return retrieve_r_span(N_AST4(node));
	}
	if (nkind == as_raise) {
		if (N_AST1(node) != OPT_NODE) return retrieve_r_span(N_AST1(node));
		return retrieve_r_span(N_AST2(node));
	}
	if (nkind == as_others_choice) {
		if (N_AST2(node) != OPT_NODE) return retrieve_r_span(N_AST2(node));
		if (N_AST1(node) != OPT_NODE) return retrieve_r_span(N_AST1(node));
		return retrieve_r_span(N_AST3(node));
	}
	if (nkind == as_attribute) {
		/* N_AST1 is number node representing attribute */
		attr_node = N_AST1(node);
		if (N_KIND(attr_node) == as_number)
			/* due to errors, this is not necessarily the case */
			length = strlen(attribute_str((int) N_VAL(attr_node)));
		rspan = make_span(N_SPAN0(attr_node),
		  N_SPAN1(attr_node) + length - 1 );
		return rspan;
	}
	if (nkind == as_entry_name || nkind == as_entry_family_name) {
		/* N_AST3 gets temporarily overwritten with N_NAMES, 
		 * so ignore it 
		 */
		return retrieve_r_span(N_AST1(node));
	}
	if (N_LIST_DEFINED(nkind)) {
		listsize = tup_size(N_LIST(node));
		if (listsize == 0)
			return (Span)0;
		for (i=listsize; i > 0; i--) {
			rspan = retrieve_r_span((Node)N_LIST(node)[i]);
			if (rspan != (Span)0)
				return rspan;
		}
		return (Span)0;
	}
	if (N_AST4_DEFINED(nkind))
		rspan = retrieve_r_span(N_AST4(node));
	if (N_AST3_DEFINED(nkind) && rspan == (Span)0 )
		rspan = retrieve_r_span(N_AST3(node));
	if (N_AST2_DEFINED(nkind) && rspan == (Span)0 )
		rspan = retrieve_r_span(N_AST2(node));
	if (N_AST1_DEFINED(nkind) && rspan == (Span)0 )
		rspan = retrieve_r_span(N_AST1(node));
	return rspan;
}