1996-11-08
1996-11-08 04:57:40 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>
-
d2c608fc1d502911105fec8e5b5091a06a762031
(67 lines)
(+61/-6)
[
Show
| Annotate
]
Branch: 7.9
object(foo), prog(), 'constant' and class foo {} implemented
Rev: src/ChangeLog:1.18
Rev: src/builtin_functions.c:1.9
Rev: src/builtin_functions.h:1.2
Rev: src/docode.c:1.3
Rev: src/interpret.c:1.8
Rev: src/language.yacc:1.6
Rev: src/lex.c:1.6
Rev: src/object.c:1.3
Rev: src/object.h:1.3
Rev: src/pike_types.c:1.5
Rev: src/program.c:1.4
Rev: src/program.h:1.2
Rev: src/testsuite.in:1.6
265: Inside #if defined(DEBUG)
fatal("Program ->prev == 0 but first_program != program.\n");
}
- if(p->id > current_program_id || p->id < 0)
+ if(p->id > current_program_id || p->id <= 0)
fatal("Program id is wrong.\n");
if(p->storage_needed < 0)
329:
check_string(p->identifiers[e].name);
check_string(p->identifiers[e].type);
- if(p->identifiers[e].flags & ~7)
+ if(p->identifiers[e].flags & ~15)
fatal("Unknown flags in identifier flag field.\n");
if(p->identifiers[e].run_time_type!=T_MIXED)
674:
add_to_mem_block(A_INHERITS,(char *)&inherit,sizeof inherit);
low_my_binary_strcat((char *)&name,sizeof(name),&inherit_names);
+ if(name)
+ {
+ reference_shared_string(name);
name=0;
}
-
+ }
for (e=0; e < (int)p->num_identifier_references; e++)
{
742:
s=name;
}
do_inherit(sp[-1].u.program, flags, s);
+ free_string(s);
pop_stack();
}
828:
return n;
}
+ int add_constant(struct pike_string *name,
+ struct svalue *c,
+ INT32 flags)
+ {
+ int n;
+
+ #ifdef DEBUG
+ if(name!=debug_findstring(name))
+ fatal("define_variable on nonshared string.\n");
+ #endif
+
+ setup_fake_program();
+ n = isidentifier(name);
+
+ if(n != -1)
+ {
+ setup_fake_program();
+
+ if (IDENTIFIERP(n)->flags & ID_NOMASK)
+ my_yyerror("Illegal to redefine 'nomask' identifier \"%s\"", name->str);
+
+ if(PROG_FROM_INT(& fake_program, n) == &fake_program)
+ my_yyerror("Identifier '%s' defined twice.",name->str);
+ } else {
+ struct identifier dummy;
+ struct reference ref;
+
+ copy_shared_string(dummy.name, name);
+ dummy.type = get_type_of_svalue(c);
+
+ dummy.flags = IDENTIFIER_CONSTANT;
+ dummy.run_time_type=c->type;
+
+ dummy.func.offset=store_constant(c, 0);
+
+ ref.flags=flags;
+ ref.identifier_offset=areas[A_IDENTIFIERS].s.len / sizeof dummy;
+ ref.inherit_offset=0;
+
+ add_to_mem_block(A_IDENTIFIERS, (char *)&dummy, sizeof dummy);
+ fake_program.num_identifiers ++;
+
+ n=areas[A_IDENTIFIER_REFERENCES].s.len / sizeof ref;
+ add_to_mem_block(A_IDENTIFIER_REFERENCES, (char *)&ref, sizeof ref);
+ fake_program.num_identifier_references ++;
+
+ }
+
+ return n;
+ }
+
/*
* define a new function
* if func isn't given, it is supposed to be a prototype.
1222:
if(fd < 0)
error("Couldn't open file '%s'.\n",file_name->str);
-
-
+
#define FILE_STATE
#define PUSH
#include "compilation.h"