]> Cypherpunks repositories - gostls13.git/commitdiff
weekend snapshot
authorRobert Griesemer <gri@golang.org>
Sat, 7 Mar 2009 00:54:26 +0000 (16:54 -0800)
committerRobert Griesemer <gri@golang.org>
Sat, 7 Mar 2009 00:54:26 +0000 (16:54 -0800)
- fixed a minor bug
- some initial code to extract interface of a package

R=r
OCL=25866
CL=25866

usr/gri/pretty/printer.go
usr/gri/pretty/template.html

index 009dde35cb9a0a8561a3064982a8e4660433801c..5a75483fb26ef7db79c0c81df9f8b8447abcee32 100644 (file)
@@ -1016,7 +1016,7 @@ func (P *Printer) DoVarDecl(d *ast.VarDecl) {
 }
 
 
-func (P *Printer) DoFuncDecl(d *ast.FuncDecl) {
+func (P *Printer) funcDecl(d *ast.FuncDecl, with_body bool) {
        P.Token(d.Pos_, token.FUNC);
        P.separator = blank;
        if recv := d.Recv; recv != nil {
@@ -1032,7 +1032,7 @@ func (P *Printer) DoFuncDecl(d *ast.FuncDecl) {
        }
        P.Expr(d.Ident);
        P.Signature(d.Sig);
-       if d.Body != nil {
+       if with_body && d.Body != nil {
                P.separator = blank;
                P.Block(d.Body, true);
        }
@@ -1040,6 +1040,11 @@ func (P *Printer) DoFuncDecl(d *ast.FuncDecl) {
 }
 
 
+func (P *Printer) DoFuncDecl(d *ast.FuncDecl) {
+       P.funcDecl(d, true);
+}
+
+
 func (P *Printer) DoDeclList(d *ast.DeclList) {
        if !*def || d.Tok == token.IMPORT || d.Tok == token.VAR {
                P.Token(d.Pos, d.Tok);
@@ -1073,6 +1078,20 @@ func (P *Printer) Decl(d ast.Decl) {
 }
 
 
+// ----------------------------------------------------------------------------
+// Interface
+
+func (P *Printer) Interface(p *ast.Program) {
+       for i := 0; i < len(p.Decls); i++ {
+               decl := p.Decls[i];
+               // TODO use type switch
+               if fun, is_fun := decl.(*ast.FuncDecl); is_fun {
+                       P.funcDecl(fun, false);
+               }
+       }
+}
+
+
 // ----------------------------------------------------------------------------
 // Program
 
@@ -1110,7 +1129,8 @@ func Print(writer io.Write, html bool, prog *ast.Program) {
 
        if P.html {
                err := templ.Apply(text, "<!--", template.Substitution {
-                       "PACKAGE-->" : func() { /* P.Expr(prog.Ident); */ },
+                       "PACKAGE-->" : func() { P.Printf("%s", prog.Ident.Str); },
+                       "INTERFACE-->" : func() { P.Interface(prog); },
                        "BODY-->" : func() { P.Program(prog); },
                });
                if err != nil {
index 4689bee64b36389944084bc68208a19f3b980894..71126499b653510b31f430cba1d41dff57884b5f 100644 (file)
@@ -1,3 +1,4 @@
+
 <h1><!--PACKAGE--></h1>
 
 <pre>