Simon --

> On Mon, Sep 17, 2001 at 10:33:35AM -0400, Gregor N. Purdy wrote:
> > as *word* counts not *byte* counts -- D'Oh!)
> 
> Isn't assembly programming fun? :)

Woo-hoo!

> >  */
> >  
> >  static int
> > -check_magic(void** program_code) {
> > +check_magic(void** program_code, long* program_size) {
> > +    program_size -= sizeof(IV);
> >      return (GRAB_IV(program_code) == PARROT_MAGIC);
> >  }
> 
> And to think, just above that "*/" is a load of lovely documentation
> you haven't touched...

It would be my pleasure to update the docs if this doesn't die
an early death. I wanted to get initial reactions to the idea
and implementation before investing the extra time.

> > +#ifdef TRACE_OPS
> > +    fprintf(stderr, "PC=%ld; OP=%ld (%s)\n", code - code_start, *code, 
>op_names[*code]);
> > +#endif /* TRACE_OPS */
> 
> That's neat.

Thanks.

> > +#ifdef TRACE_OPS
> > +        if (code >= code_start && code < (code_start + code_size)) {
> > +            fprintf(stderr, "PC=%ld; OP=%ld (%s)", code - code_start, *code, 
>op_names[*code]);
> > +            if (op_args[*code]) {
> > +                fprintf(stderr, "; ARGS=(");
> > +                for(i = 0; i < op_args[*code]; i++) {
> > +                    if (i) { fprintf(stderr, ", "); }
> > +                    fprintf(stderr, "%ld", *(code + i + 1));
> > +                }
> > +                fprintf(stderr, ")");
> > +            }
> > +            fprintf(stderr, "\n");
> > +        } else {
> > +            fprintf(stderr, "PC=%ld; OP=<err>\n", code - code_start);
> > +        }
> > +#endif /* TRACE_OPS */
> 
> That's less than neat, but I can't think of a better way to do it.

I'm thinking of just putting it in a function to sweep the mess under
the rug...

> > +    if (code < code_start || code >= (code_start + code_size)) {
> > +        fprintf(stderr, "Error: Control left bounds of byte-code block (now at 
>location %d)!\n", code - code_start);
> > +        exit(1);
> 
> I don't like this check in every iteration. 

Nor do I. Note that the checks themselves are about as cheap as they
*can* be, though. And I think that not checking is dangerous. I *did*
get some segfaults when I was working on the jump_i example. Just try
running blamo.pasm (attached) on your stock interpreter...
 

Regards,

-- Gregor
 _____________________________________________________________________ 
/     perl -e 'srand(-2091643526); print chr rand 90 for (0..4)'      \

   Gregor N. Purdy                          [EMAIL PROTECTED]
   Focus Research, Inc.                http://www.focusresearch.com/
   8080 Beckett Center Drive #203                   513-860-3570 vox
   West Chester, OH 45069                           513-860-3579 fax
\_____________________________________________________________________/
#
# blamo.pasm
#
# A simple program to blow up the interpreter.
#
# Copyright (C) 2001 Gregor N. Purdy. All rights reserved.
# This program is free software. It is subject to the same
# license as Perl itself.
#
# $Id: $
#

set I0 -4
jump I0

Reply via email to