Skip to content

Instantly share code, notes, and snippets.

diff --git a/src/how/NQPClassHOW.pm b/src/how/NQPClassHOW.pm
index 4e9b979..3fdbd25 100644
--- a/src/how/NQPClassHOW.pm
+++ b/src/how/NQPClassHOW.pm
@@ -254,14 +254,18 @@ knowhow NQPClassHOW {
# Provided we have immediate parents...
my @result;
if +@immediate_parents {
- # Build merge list of lineraizations of all our parents, add
- # immediate parents and merge.
diff --git a/src/Perl6/Metamodel/C3MRO.pm b/src/Perl6/Metamodel/C3MRO.pm
index 6889829..781ae77 100644
--- a/src/Perl6/Metamodel/C3MRO.pm
+++ b/src/Perl6/Metamodel/C3MRO.pm
@@ -9,14 +9,18 @@ role Perl6::Metamodel::C3MRO {
# Provided we have immediate parents...
my @result;
if +@immediate_parents {
- # Build merge list of lineraizations of all our parents, add
- # immediate parents and merge.
diff --git a/src/call/pcc.c b/src/call/pcc.c
index 401b833..ca1dfc9 100644
--- a/src/call/pcc.c
+++ b/src/call/pcc.c
@@ -316,14 +316,14 @@ Parrot_pcc_invoke_from_sig_object(PARROT_INTERP, ARGIN(PMC *sub_obj),
ASSERT_ARGS(Parrot_pcc_invoke_from_sig_object)
opcode_t *dest;
- const UINTVAL n_regs_used[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- PMC *ctx = Parrot_push_context(interp, n_regs_used);
.sub foo
.annotate 'file', "foo.pir"
.annotate 'line', 3
say "function foo"
.end
.sub bar :main
die 'bye'
.end
diff --git a/compilers/imcc/pbc.c b/compilers/imcc/pbc.c
index b085cc9..4204c2b 100644
--- a/compilers/imcc/pbc.c
+++ b/compilers/imcc/pbc.c
@@ -681,7 +681,6 @@ get_code_size(ARGMOD(imc_info_t * imcc), ARGIN(const IMC_Unit *unit),
if (ins->opname && STREQ(ins->opname, ".annotate")) {
/* Annotations contribute nothing to code size, since they do not
* end up in bytecode segment. */
- (*src_lines)++;
}
diff --git a/src/sub.c b/src/sub.c
index 84a384a..d84518d 100644
--- a/src/sub.c
+++ b/src/sub.c
@@ -221,7 +221,7 @@ Parrot_sub_get_line_from_pc(PARROT_INTERP, ARGIN_NULLOK(PMC *subpmc), ARGIN_NULL
ASSERT_ARGS(Parrot_sub_get_line_from_pc)
Parrot_Sub_attributes *sub;
opcode_t *base_pc, *debug_ops;
- size_t i, op, current_annotation, debug_size;
+ size_t i, op, current_annotation, debug_size, code_size;
.sub foo :method
.annotate "line", 2
.param pmc node
.end
--- compilers/pct/src/PCT/HLLCompiler.pir.orig 2011-08-31 13:29:53.000000000 +0000
+++ compilers/pct/src/PCT/HLLCompiler.pir 2011-08-31 14:59:36.000000000 +0000
@@ -1009,8 +1009,22 @@ memoize the line offsets as a C<!lineof>
# element is the line number to be returned.
# (Potential optimization: use a binary search.)
.local int line, count
+ .local pmc lastpos, lastline
count = elements linepos
line = 0
+ unless cache goto line_loop
diff --git a/src/packfile/segments.c b/src/packfile/segments.c
index 1b23287..1339ade 100644
--- a/src/packfile/segments.c
+++ b/src/packfile/segments.c
@@ -708,7 +708,7 @@ PackFile_Annotations_dump(PARROT_INTERP, ARGIN(const PackFile_Segment *seg))
key->type == PF_ANNOTATION_KEY_TYPE_STR ? "string" :
key->type == PF_ANNOTATION_KEY_TYPE_PMC ? "pmc" :
"<ERROR>");
- for (j = key->start; j < key->len; j++) {
+ for (j = key->start; j < key->start + key->len; j++) {
--- ./src/pmc/sub.pmc.orig 2011-08-30 15:52:12.000000000 +0000
+++ ./src/pmc/sub.pmc 2011-08-30 15:56:05.000000000 +0000
@@ -428,6 +428,9 @@ Invokes the subroutine.
Parrot_pcc_set_context(INTERP, context);
Parrot_pcc_set_caller_ctx(INTERP, context, caller_ctx);
+ /* support callcontext reuse */
+ if (context == caller_ctx)
+ Parrot_pcc_free_registers(INTERP, context);
Parrot_pcc_allocate_registers(INTERP, context, sub->n_regs_used);