2002-05-10
2002-05-10 15:39:24 by Henrik Grubbström (Grubba) <grubba@grubba.org>
-
2659cff894ed32cc1c5fb5b1168ea61c5e3fb912
(78 lines)
(+52/-26)
[
Show
| Annotate
]
Branch: 7.9
Removed obsolete prototype.
Added add_relocated_int_to_program().
Ported fixate_program() fixes from Pike 7.2.
The identifier_ref_offset field in struct inherit is now set.
end_first_pass() now supports being called with 2 as the argument.
The linenumber information is no longer byteorder dependant.
Rev: src/program.c:1.427
5:
\*/
/**/
#include "global.h"
- RCSID("$Id: program.c,v 1.426 2002/05/09 14:59:18 mast Exp $");
+ RCSID("$Id: program.c,v 1.427 2002/05/10 15:39:24 grubba Exp $");
#include "program.h"
#include "object.h"
#include "dynamic_buffer.h"
845: Inside #if defined(PIKE_DEBUG)
int i;
for (i = 0; i < Pike_compiler->new_program->num_identifiers; i++)
if (Pike_compiler->new_program->identifiers[i].name == id.name) {
- extern void dump_program_tables (struct program *p, int indent);
+
dump_program_tables (Pike_compiler->new_program, 0);
fatal ("Adding identifier twice, old at %d.\n", i);
}
856:
#define debug_add_to_identifiers(ARG) add_to_identifiers(ARG)
#endif
+ void add_relocated_int_to_program(INT32 i)
+ {
+ add_to_relocations(Pike_compiler->new_program->num_program);
+ ins_int(i, (void (*)(char))add_to_program);
+ }
void use_module(struct svalue *s)
{
1406:
e=really_low_find_shared_string_identifier(name, p,
SEE_STATIC|SEE_PRIVATE);
- if(e != i)
+ if((e != i) && (e != -1))
{
if(name->len < 1024 && !name->size_shift)
my_yyerror("Illegal to redefine final identifier %s",name->str);
1721:
i.identifier_level=0;
i.storage_offset=0;
i.inherit_level=0;
+ i.identifier_ref_offset=0;
i.parent=0;
i.parent_identifier=-1;
i.parent_offset=-18;
2255:
#endif
/* Note: This function is misnamed, since it's run after both passes. /mast */
+ /* finish-states:
+ *
+ * 0: First pass.
+ * 1: Last pass.
+ * 2: Called from decode_value().
+ */
struct program *end_first_pass(int finish)
{
int e;
2268:
/* Collect references to inherited __INIT functions */
+ if (!(Pike_compiler->new_program->flags & PROGRAM_AVOID_CHECK)) {
for(e=Pike_compiler->new_program->num_inherits-1;e;e--)
{
int id;
2281:
Pike_compiler->init_node);
}
}
+ }
/*
* Define the __INIT function, but only if there was any code
2295:
function_type_string,
ID_STATIC);
Pike_compiler->init_node=0;
+ } else if (finish == 2) {
+ /* Called from decode_value(). */
+ e = low_find_lfun(Pike_compiler->new_program, LFUN___INIT);
}else{
e=-1;
}
3068:
add_to_inherits(inherit);
}
+ /* This value is used by encode_value() to reverse the inherit operation. */
+ Pike_compiler->new_program->inherits[inherit_offset].identifier_ref_offset =
+ Pike_compiler->new_program->num_identifier_references;
+
for (e=0; e < (int)p->num_identifier_references; e++)
{
struct reference fun;
4486:
int get_small_number(char **q)
{
/* This is a workaround for buggy cc & Tru64 */
- int ret;
+ unsigned char *addr = (unsigned char *)*q;
+ int ret = *((signed char *)addr);
ret=*(signed char *)*q;
- (*q)++;
+ addr++;
switch(ret)
{
case -127:
- ret=EXTRACT_WORD((unsigned char*)*q);
- *q+=2;
- return ret;
+ ret = (((signed char *)addr)[0]<<8) | addr[1];
+ addr += 2;
+ break;
case -128:
- ret=EXTRACT_INT((unsigned char*)*q);
- *q+=4;
- return ret;
+ ret = (((signed char *)addr)[0]<<24) | (addr[1]<<16) |
+ (addr[2]<<8) | addr[3];
+ addr += 4;
+ break;
#ifdef PIKE_DEBUG
case 127:
fatal("get_small_number used on filename entry\n");
#endif
-
- default:
+ }
+ *q = (char *)addr;
return ret;
}
- }
+
void start_line_numbering(void)
{
4531:
add_to_linenumbers(a);
}else if(a>=-32768 && a<32768){
add_to_linenumbers(-127);
- ins_short(a, add_to_linenumbers);
+ add_to_linenumbers(a>>8);
+ add_to_linenumbers(a);
}else{
add_to_linenumbers(-128);
- ins_int(a, add_to_linenumbers);
+ add_to_linenumbers(a>>24);
+ add_to_linenumbers(a>>16);
+ add_to_linenumbers(a>>8);
+ add_to_linenumbers(a);
}
#ifdef PIKE_DEBUG
{