Age | Commit message (Collapse) | Author | Files | Lines |
|
R=r
OCL=35736
CL=35746
|
|
* generate different versions of binary operators
for each size of int and float, so that proper
truncating happens after each operation to
simulate the various sized ops.
* add slice expressions
* publish World.CompileStmtList, CompileDeclList, CompileExpr
* handle type-less expressions in CompileExpr
R=austin
DELTA=1459 (1327 added, 11 deleted, 121 changed)
OCL=34382
CL=35581
|
|
R=rsc
APPROVED=rsc
DELTA=3 (0 added, 3 deleted, 0 changed)
OCL=34970
CL=35007
|
|
R=rsc
APPROVED=rsc
DELTA=36 (0 added, 0 deleted, 36 changed)
OCL=34971
CL=35006
|
|
the interpreter and update code to use ast.BasicDecl and
multi-type switch. There are still a lot of "switch _ :=
x.(type)" that should make use of the new type switch syntax,
but those will be a different CL.
R=rsc
APPROVED=rsc
DELTA=58 (16 added, 23 deleted, 19 changed)
OCL=34853
CL=34963
|
|
from inlining newprocreadylocked. Fix type bridge's handling
of basic types. Include interpreter's Thread in bridged
native function calls.
; load . "6.out"
Started 6.out
; BpSet("main·merge")
; ContWait()
breakpoint at 0x400800
=> 400800 main·merge /home/austin/src-go1/usr/austin/ptrace/test/sort.go:19
; bt
=> 400800 main·merge /home/austin/src-go1/usr/austin/ptrace/test/sort.go:19
400b6a main·mergeSort+0x1be /home/austin/src-go1/usr/austin/ptrace/test/sort.go:34
448313 goexit /home/austin/src-go1/src/pkg/runtime/proc.c:133
; main.merge.a
{1}
; load . "pid:25753"
Attached to 25753
; bt
=> 479ddf syscall·Syscall+0x24 /home/austin/src-go1/src/pkg/syscall/asm_linux_amd64.s:24
47c011 syscall·Read+0x5d /home/austin/src-go1/src/pkg/syscall/zsyscall_linux_amd64.go:368
4119e5 os·*File·Read+0x5f /home/austin/src-go1/src/pkg/os/file.go:122
427bf3 bufio·*Reader·fill+0x116 /home/austin/src-go1/src/pkg/bufio/bufio.go:105
428361 bufio·*Reader·ReadSlice+0x195 /home/austin/src-go1/src/pkg/bufio/bufio.go:244
40204a ogle·Main+0x94 /home/austin/src-go1/usr/austin/ogle/cmd.go:226
40080f main·main+0xf /home/austin/src-go1/usr/austin/ogle/main.go:6
41c4b8 mainstart+0xf /home/austin/src-go1/src/pkg/runtime/amd64/asm.s:55
41531f goexit /home/austin/src-go1/src/pkg/runtime/proc.c:133
R=rsc
APPROVED=rsc
DELTA=433 (420 added, 2 deleted, 11 changed)
OCL=34410
CL=34782
|
|
tweak test/literal.go to give more information.
R=austin
DELTA=45 (43 added, 0 deleted, 2 changed)
OCL=34381
CL=34398
|
|
successful.
R=rsc
APPROVED=rsc
DELTA=43 (31 added, 0 deleted, 12 changed)
OCL=34375
CL=34397
|
|
R=austin
DELTA=21 (5 added, 10 deleted, 6 changed)
OCL=34355
CL=34355
|
|
implementations can abort. Make genConstant get values lazily
since we need the Thread now.
R=rsc
APPROVED=rsc
DELTA=299 (8 added, 19 deleted, 272 changed)
OCL=34353
CL=34353
|
|
start on Decl, but not working yet
R=austin
DELTA=762 (201 added, 205 deleted, 356 changed)
OCL=34335
CL=34349
|
|
R=austin
DELTA=142 (128 added, 4 deleted, 10 changed)
OCL=34275
CL=34284
|
|
reuse Thread in function calls.
R=austin
DELTA=59 (8 added, 7 deleted, 44 changed)
OCL=34266
CL=34266
|
|
change eval functions from taking *Frame to *Thread
R=austin
DELTA=500 (7 added, 4 deleted, 489 changed)
OCL=34256
CL=34260
|
|
R=rsc
APPROVED=rsc
DELTA=31 (0 added, 4 deleted, 27 changed)
OCL=34251
CL=34259
|
|
R=austin
DELTA=959 (404 added, 99 deleted, 456 changed)
OCL=34214
CL=34237
|
|
R=rsc
APPROVED=rsc
DELTA=1003 (1003 added, 0 deleted, 0 changed)
OCL=34223
CL=34227
|
|
interface, but implement it better this time. Also, work
around a 6g bug in asInterface.
R=rsc
APPROVED=rsc
DELTA=39 (13 added, 1 deleted, 25 changed)
OCL=34211
CL=34217
|
|
only visible change is that evaluating an expression returns a
interface{} instead of a Value.
R=rsc
APPROVED=rsc
DELTA=60 (15 added, 26 deleted, 19 changed)
OCL=34206
CL=34208
|
|
simplify expr by merging all simple eval functions
into a single eval interface{}.
R=austin
DELTA=1597 (730 added, 780 deleted, 87 changed)
OCL=34182
CL=34198
|
|
compilation to put the definitions in reasonable places. No
code changes, just movement.
R=rsc
APPROVED=rsc
DELTA=479 (232 added, 247 deleted, 0 changed)
OCL=34067
CL=34069
|
|
for built-in functions and type conversions. Extract out
common operations on expression nodes for converting them to
ints and implicitly dereferencing arrays.
R=rsc
APPROVED=rsc
DELTA=442 (365 added, 50 deleted, 27 changed)
OCL=34064
CL=34064
|
|
code assumes that the definition of a named type is not a
named type, but some code paths could violate that.
R=rsc
APPROVED=rsc
DELTA=9 (5 added, 2 deleted, 2 changed)
OCL=34046
CL=34053
|
|
R=rsc
APPROVED=rsc
DELTA=32 (14 added, 1 deleted, 17 changed)
OCL=34043
CL=34043
|
|
checking, bounds checking, and map key checking.
R=rsc
APPROVED=rsc
DELTA=202 (108 added, 72 deleted, 22 changed)
OCL=33981
CL=34031
|
|
interpreter values. Also, print nil values properly.
R=rsc
APPROVED=rsc
DELTA=173 (173 added, 0 deleted, 0 changed)
OCL=33837
CL=33973
|
|
In the process, I made error handling in the statement
compiler much saner. Instead of separately tracking various
error flags with weird relations, I just track if any error
messages have been produced.
R=rsc
APPROVED=rsc
DELTA=308 (98 added, 135 deleted, 75 changed)
OCL=33870
CL=33961
|
|
statement compiler will be fixed in a later CL.
The input and output of the expression compiler are now
clearly distinguished. In the process, I made the individual
expression compilers operate on the compiled form of their
children instead of AST nodes. As a result, there are now
fewer places where I hand-craft intermediate expression nodes.
The diff looks scarier than it is, mostly because exprCompiler
has been split into the input and output types, resulting in
lots of little renames.
R=rsc
APPROVED=rsc
DELTA=774 (204 added, 199 deleted, 371 changed)
OCL=33851
CL=33851
|
|
variables to be given initial values in some cases, to make
building global scopes more convenient.
R=rsc
APPROVED=rsc
DELTA=29 (17 added, 0 deleted, 12 changed)
OCL=33760
CL=33766
|
|
R=rsc
APPROVED=rsc
DELTA=329 (301 added, 2 deleted, 26 changed)
OCL=33696
CL=33706
|
|
R=rsc
APPROVED=rsc
DELTA=286 (217 added, 42 deleted, 27 changed)
OCL=33319
CL=33383
|
|
R=rsc
APPROVED=rsc
DELTA=334 (110 added, 211 deleted, 13 changed)
OCL=33135
CL=33137
|
|
non-addressable expressions.
R=rsc
APPROVED=rsc
DELTA=241 (202 added, 15 deleted, 24 changed)
OCL=32790
CL=32995
|
|
declarations.
R=rsc
APPROVED=rsc
DELTA=587 (519 added, 21 deleted, 47 changed)
OCL=32754
CL=32788
|
|
types were supposed to be identical but only needed to be
compatible. This gets rid of the Type.literal method. I
renamed the Type.rep method to Type.lit because I believe it
corresponds to the term "literal" as used in the spec.
R=rsc
APPROVED=rsc
DELTA=228 (57 added, 35 deleted, 136 changed)
OCL=32606
CL=32608
|
|
the position where they were defined so I can produce good
error messages on redefinitions.
R=rsc
APPROVED=rsc
DELTA=204 (126 added, 13 deleted, 65 changed)
OCL=32599
CL=32605
|
|
Return checking is now done as a general flow check at the end
of function compilation, since break and goto complicated the
way I was doing return checking before. Goto-over-declaration
checking is also done as a final flow check.
Temporary variables used for effect extraction are now
actually temporary. Otherwise "op=", "++", and "--" appear as
declarations that cannot be jumped over.
R=rsc
APPROVED=rsc
DELTA=421 (344 added, 38 deleted, 39 changed)
OCL=32527
CL=32535
|
|
single frame and non-overlapping variables reuse frame slots.
As a result, entering and exiting blocks no longer requires
code execution, which means jumps across block boundaries
should be doable now. Frame slot initialization happens at
definition time now, instead of at frame creation time. As an
added bonus, Scope's are now exclusively compile-time objects
and we no longer need to specially track the function
activation frame for access to out vars.
R=rsc
APPROVED=rsc
DELTA=313 (102 added, 90 deleted, 121 changed)
OCL=32416
CL=32420
|
|
R=rsc
APPROVED=rsc
DELTA=304 (281 added, 0 deleted, 23 changed)
OCL=32361
CL=32382
|
|
jump to the post statement instead of the condition check.
R=rsc
APPROVED=rsc
DELTA=10 (6 added, 1 deleted, 3 changed)
OCL=32359
CL=32379
|
|
and decrement. blockCompilers now form a tree the mimics the
nesting of scopes and provide convenient ways to enter and
exit scopes. blockCompilers also track the break and continue
PC for the current block. The statement testing interface now
works in lists of statements, which simplifies a bunch of
things.
R=rsc
APPROVED=rsc
DELTA=401 (335 added, 44 deleted, 22 changed)
OCL=32308
CL=32317
|
|
pointer to the Type instead of the address of the Type.
R=rsc
APPROVED=rsc
DELTA=1 (0 added, 0 deleted, 1 changed)
OCL=32265
CL=32279
|
|
unpacking for assignments, call arguments, and returns. This
change revamps the whole assignment compilation system to be
multi-valued, using the new MultiType type and multiV value.
Function calls, returns, and assignments now share a lot of
code and produce very consistent error messages.
R=rsc
APPROVED=rsc
DELTA=510 (335 added, 74 deleted, 101 changed)
OCL=32248
CL=32258
|
|
R=rsc
APPROVED=rsc
DELTA=2 (0 added, 0 deleted, 2 changed)
OCL=32245
CL=32247
|
|
function calling. Implement a type compiler and named types.
Implement a universal scope containing built-in named types,
and some built-in constants. Implement a simple virtual
machine for executing statements and single-valued return.
Fix many places that incorrectly dealt with named types. In
particular, the Type.Zero methods now use the type's bit count
to determine the appropriate value representation. As a
result, a bit count of 0 now means architecture-dependent and
bounded types use unsafe.Sizeof to determine the correct
bounds. Previously, the bounds on a 32-bit machine would have
been wrong.
Eliminated Type.compatible, since the implementation is
equivalent for all types. Added Type.rep that shallowly
strips named types. Replaced almost all uses of Type.literal
with Type.rep.
Fix implementation of assign-op's so it only evaluates the
left side once. As part of this, there is now a generic way
to separate out the effect and value of an expression.
R=rsc
APPROVED=rsc
DELTA=1530 (1244 added, 68 deleted, 218 changed)
OCL=32184
CL=32230
|
|
R=rsc
APPROVED=rsc
DELTA=591 (497 added, 76 deleted, 18 changed)
OCL=31933
CL=31955
|
|
all type-specific value functions, and use ZeroVal to create
new frames. Remove Value.Type; it was unused and difficult
for values with composite types. Add Value.Assign methods.
R=rsc
APPROVED=rsc
DELTA=282 (135 added, 90 deleted, 57 changed)
OCL=31894
CL=31930
|
|
Some cleanup. Elem() on PtrType is now just Elem and matches
with ArrayType. Generators now switch over the result type
instead of the operand type. Delete unused diag function.
R=rsc
APPROVED=rsc
DELTA=281 (219 added, 18 deleted, 44 changed)
OCL=31876
CL=31891
|
|
them as we go.
Lots of bug fixes. Let the parser toss illegal character and
string literals. Compile unary + correctly. Allow float OP
ideal. Compile unary * correctly. Implement min and max float
values.
R=rsc
APPROVED=rsc
DELTA=64 (29 added, 7 deleted, 28 changed)
OCL=31811
CL=31814
|
|
R=rsc
APPROVED=rsc
DELTA=65 (29 added, 17 deleted, 19 changed)
OCL=31775
CL=31777
|