Dan Sugalski:
# =item Add source code to segment
# 
# This adds a line or more of source code to the bytecode segment.

Optional?

# =item Add AST to segment
# 
# This adds the AST for some of the source code to the bytecode segment.

Optional?

# =item Add line number information
# 
# This adds line number info to the bytecode segment, allowing 
# the interpreter to find out what line of source a particular 
# piece of bytecode corresponds to.

Optional?

# =item Add bytecode to segment
# 
# Add in actual bytecode to the segment.

Not optional.  :^)

# =item Add constants (string, PMC, and float)
# 
# Add one or more constants to the bytecode constant pool
# 
# =item Add symbols to segment
# 
# Add in symbolic information to the bytecode segment, 
# including exported variables, classes, and functions

Optional?

# =item Add binary data chunk to segment
# 
# Add in some raw binary data to the bytecode segment

Optional?

Can you have multiple raw chunks?  Can they have symbolic names?
Symbolic type names?

Are the other chunks essentially subclasses of this one?

Is there some kind of directory that tells you stuff about these chunks?
If there is, I can imagine two basic formats:

SEGMENT 1
        DIRECTORY
                CHUNK 1
                        OFFSET: 100 (4 bytes)
                        SIZE:   55 (4 bytes)
                        NAME:   "src" (7 bytes)
                        TYPE:   "Parrot::Source Code" (23 bytes)
                CHUNK 2
                        OFFSET: 155
                        SIZE:   524
                        NAME:   "bc"
                        TYPE:   "Parrot::Bytecode"
                ...
        CHUNK 1
                use strict;
                use warnings;
                print "Hello World!\n";
                exit;
        CHUNK 2
                101011101...

Or

SEGMENT 1
        DIRECTORY
                CHUNK 1 OFFSET: 100
                CHUNK 2 OFFSET: 189
        CHUNK 1:
                SIZE: 55
                NAME: "src"
                TYPE: "Parrot::Source Code"
                DATA: ...
        CHUNK 2:
                SIZE: 524
                NAME: "bc"
                TYPE: "Parrot::Bytecode"
                DATA: ...

--Brent Dax <[EMAIL PROTECTED]>
@roles=map {"Parrot $_"} qw(embedding regexen Configure)

Wire telegraph is a kind of a very, very long cat. You pull his tail in
New York and his head is meowing in Los Angeles. And radio operates
exactly the same way. The only difference is that there is no cat.
    --Albert Einstein (explaining radio)

Reply via email to