develooper Front page | perl.perl6.internals | Postings from October 2002

RE: Draft sketch of bytecode generation

Thread Previous | Thread Next
From:
Brent Dax
Date:
October 27, 2002 23:27
Subject:
RE: Draft sketch of bytecode generation
Message ID:
001301c27e55$47267da0$6501a8c0@deepblue
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 <brentdax@cpan.org>
@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)


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About