1
0
mirror of https://github.com/golang/go synced 2024-11-12 09:20:22 -07:00
Commit Graph

390 Commits

Author SHA1 Message Date
Austin Clements
264641711b Switch back to returning Value from the public expression
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
2009-09-01 16:17:50 -07:00
Austin Clements
3dfbfdabce Clean up the statement and expression public interfaces. The
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
2009-09-01 14:16:51 -07:00
Austin Clements
155fe7925b Add stack frame support. Architectures are now responsible
for decoding closures.  There is now no notion of a current OS
thread, though that needs to come back in the form of a
current Go thread.  As a result, Process now implements Peek
and Poke and maps them to any stopped OS thread, since they
all share the address space anyways.

R=rsc
APPROVED=rsc
DELTA=322  (310 added, 3 deleted, 9 changed)
OCL=34136
CL=34201
2009-09-01 13:01:37 -07:00
Russ Cox
8c7eb44249 move generated code into its own file.
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
2009-09-01 11:51:33 -07:00
Austin Clements
30dcb13420 Split decls.go up, taking advantage of whole-package
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
2009-08-28 18:25:56 -07:00
Austin Clements
345c1bd473 Debugged processes, remote values, and remote type parser
R=rsc
APPROVED=rsc
DELTA=917  (917 added, 0 deleted, 0 changed)
OCL=34049
CL=34066
2009-08-28 18:04:35 -07:00
Austin Clements
0a969fa983 Debugger's remote runtime definitions.
R=rsc
APPROVED=rsc
DELTA=237  (237 added, 0 deleted, 0 changed)
OCL=33966
CL=34065
2009-08-28 18:04:18 -07:00
Austin Clements
c90bc34d75 Implement cap, len, and make, as well as the general framework
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
2009-08-28 18:03:03 -07:00
Austin Clements
d11a4b0dd4 Fix named types being defined to named types. In general, the
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
2009-08-28 14:39:12 -07:00
Austin Clements
8fdc5b6041 Give NamedTypes a public interface
R=rsc
APPROVED=rsc
DELTA=32  (14 added, 1 deleted, 17 changed)
OCL=34043
CL=34043
2009-08-28 12:45:30 -07:00
Austin Clements
9d517ba3fd Implement runtime errors, divide-by-zero checking, nil pointer
checking, bounds checking, and map key checking.

R=rsc
APPROVED=rsc
DELTA=202  (108 added, 72 deleted, 22 changed)
OCL=33981
CL=34031
2009-08-28 10:39:57 -07:00
Austin Clements
e653280cad Utilities to bridge native types and functions into
interpreter values.  Also, print nil values properly.

R=rsc
APPROVED=rsc
DELTA=173  (173 added, 0 deleted, 0 changed)
OCL=33837
CL=33973
2009-08-27 13:11:06 -07:00
Austin Clements
ea62b3441f Debugger architecture interface and definitions for AMD64.
R=rsc
APPROVED=rsc
DELTA=114  (114 added, 0 deleted, 0 changed)
OCL=33957
CL=33962
2009-08-27 11:24:13 -07:00
Austin Clements
c0dd9f526b Make the statement compiler not use the AST visitor.
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
2009-08-27 11:21:52 -07:00
Russ Cox
4b409289f6 remove Line in bufio.ReadLine(Bytes|Slice|String)
also drop bool arg from ReadString

R=r
DELTA=45  (13 added, 1 deleted, 31 changed)
OCL=33923
CL=33960
2009-08-27 11:20:15 -07:00
Austin Clements
36eee6d1e1 Make the expression compiler not use the AST visitor. The
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
2009-08-25 17:57:40 -07:00
Russ Cox
67815ef65b checkpoint & test (pidigits) before trying to automate.
R=r
DELTA=616  (598 added, 11 deleted, 7 changed)
OCL=33846
CL=33848
2009-08-25 15:37:22 -07:00
Russ Cox
75a38963ca cgocall bug fix.
better FFI demo: compute fibonacci numbers using FFI'ed libgmp.

R=r
DELTA=281  (255 added, 19 deleted, 7 changed)
OCL=33815
CL=33820
2009-08-24 21:16:15 -07:00
Russ Cox
fdc4b4a47f start of FFI support, and a demo.
R=r
DELTA=494  (492 added, 0 deleted, 2 changed)
OCL=33784
CL=33810
2009-08-24 17:30:00 -07:00
Austin Clements
9a36b8087c Make it only necessary to exit blocks, not scopes. Allow
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
2009-08-24 13:48:16 -07:00
Austin Clements
30a2dabdc3 Implement map types
R=rsc
APPROVED=rsc
DELTA=329  (301 added, 2 deleted, 26 changed)
OCL=33696
CL=33706
2009-08-21 18:37:38 -07:00
Austin Clements
fc18391209 Decode overlapping section names correctly.
R=rsc
APPROVED=rsc
DELTA=23  (14 added, 8 deleted, 1 changed)
OCL=33699
CL=33705
2009-08-21 18:30:20 -07:00
Austin Clements
bd65739bc2 Implement line-to-PC mapping. Add unit tests for
PC/line/aline conversion methods.

R=rsc
APPROVED=rsc
DELTA=458  (434 added, 15 deleted, 9 changed)
OCL=33677
CL=33702
2009-08-21 18:13:35 -07:00
Austin Clements
1068bcab96 Make stop causes pointers so users outside the package can
type switch on them despite their private fields.  Add some
tracing stuff.

R=rsc
APPROVED=rsc
DELTA=18  (7 added, 0 deleted, 11 changed)
OCL=33678
CL=33683
2009-08-21 15:54:54 -07:00
Austin Clements
6ece1b561c ELF reader and Go symbol table and PC/line table decoder.
R=rsc
APPROVED=rsc
DELTA=1425  (1425 added, 0 deleted, 0 changed)
OCL=33432
CL=33517
2009-08-19 10:05:11 -07:00
Austin Clements
fb9490c2ec Implement slice types
R=rsc
APPROVED=rsc
DELTA=286  (217 added, 42 deleted, 27 changed)
OCL=33319
CL=33383
2009-08-17 11:29:12 -07:00
Austin Clements
7c9b9af76e Convert interpreter to whole-package compilation.
R=rsc
APPROVED=rsc
DELTA=334  (110 added, 211 deleted, 13 changed)
OCL=33135
CL=33137
2009-08-12 17:24:05 -07:00
Austin Clements
ceaa7741a2 Convert ptrace to whole-package compilation.
R=rsc
APPROVED=rsc
DELTA=15  (9 added, 6 deleted, 0 changed)
OCL=33136
CL=33136
2009-08-12 17:22:47 -07:00
Russ Cox
5b62b19d43 convert non-pkg go files to whole-package compilation.
mostly removing forward declarations.

R=r
DELTA=138  (2 added, 127 deleted, 9 changed)
OCL=33068
CL=33099
2009-08-12 13:18:54 -07:00
Austin Clements
64193fcaa2 Implement switch statement. Can now extract effects from
non-addressable expressions.

R=rsc
APPROVED=rsc
DELTA=241  (202 added, 15 deleted, 24 changed)
OCL=32790
CL=32995
2009-08-10 16:27:54 -07:00
Austin Clements
e2e6becf3a Make ptrace_linux compile with recent changes to switch type
checking.

R=rsc
APPROVED=rsc
DELTA=11  (0 added, 0 deleted, 11 changed)
OCL=32839
CL=32841
2009-08-06 13:54:13 -07:00
Austin Clements
6adadeb3ab Implement struct types, selector expressions, and type
declarations.

R=rsc
APPROVED=rsc
DELTA=587  (519 added, 21 deleted, 47 changed)
OCL=32754
CL=32788
2009-08-05 11:49:51 -07:00
Austin Clements
458e23e151 Implement type compatibility and fix places where I thought
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
2009-07-31 17:11:34 -07:00
Austin Clements
d11173d452 Implement var declarations. Variables, constants, and types now carry
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
2009-07-31 15:51:27 -07:00
Austin Clements
36ca5fde68 Implement labels, goto, labeled break, and labeled continue.
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
2009-07-30 14:39:27 -07:00
Austin Clements
8f694f6661 Flatten the Frame tree. Now each function call produces a
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
2009-07-29 11:57:46 -07:00
Austin Clements
27b0c351af Implement comparison operators.
R=rsc
APPROVED=rsc
DELTA=304  (281 added, 0 deleted, 23 changed)
OCL=32361
CL=32382
2009-07-28 16:40:23 -07:00
Austin Clements
f62585118c Fix segfault on unnamed function arguments. Make continue
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
2009-07-28 16:38:41 -07:00
Austin Clements
709e75e3a1 Implement if, for (modulo ranges), break, continue, increment,
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
2009-07-28 14:37:06 -07:00
Phil Pennock
d6f89c69c4 Support use of $GOBINDIR to override $HOME/bin
R=r,gri,rsc
APPROVED=rsc
DELTA=53  (12 added, 6 deleted, 35 changed)
OCL=31822
CL=32282
2009-07-28 11:23:24 -07:00
Austin Clements
eaa25ac16b Fix bug where typeArrayMap was using the address of the
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
2009-07-28 09:58:31 -07:00
Austin Clements
75760a4b5d Implement multi-valued functions, multi-valued return, and
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
2009-07-27 17:32:35 -07:00
Austin Clements
33c1045056 Fix bug where nothing could ever be added to a code buffer.
R=rsc
APPROVED=rsc
DELTA=2  (0 added, 0 deleted, 2 changed)
OCL=32245
CL=32247
2009-07-27 15:21:32 -07:00
Austin Clements
d3888fe8a3 Implement single-valued, non-variadic function literals and
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
2009-07-27 13:01:23 -07:00
Austin Clements
d426b6389e Implement assignment. Move convertTo.
R=rsc
APPROVED=rsc
DELTA=591  (497 added, 76 deleted, 18 changed)
OCL=31933
CL=31955
2009-07-21 15:40:41 -07:00
Austin Clements
90ffb7b8f5 Cleanup of Type/Value interface. Add Type.ZeroVal, replace
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
2009-07-21 13:31:23 -07:00
Austin Clements
79fac7ca86 Implement array types and index expressions.
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
2009-07-20 17:41:40 -07:00
Austin Clements
51c0a84175 Gather errors in a go.scanner.ErrorList instead of printing
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
2009-07-17 16:58:59 -07:00
Austin Clements
2ac1528e55 Finish shift implementation for ideals.
R=rsc
APPROVED=rsc
DELTA=65  (29 added, 17 deleted, 19 changed)
OCL=31775
CL=31777
2009-07-17 11:50:32 -07:00
Austin Clements
b751be4cf5 Cleanup func literals. "func (" -> "func("
R=rsc
APPROVED=rsc
DELTA=41  (0 added, 0 deleted, 41 changed)
OCL=31773
CL=31773
2009-07-17 10:45:53 -07:00