From: Robert Griesemer Date: Thu, 31 Jul 2008 04:51:25 +0000 (-0700) Subject: - added missing file X-Git-Tag: weekly.2009-11-06~3396 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9fb9e82fa34b9bb9c7a7282b91036b6592e47c88;p=gostls13.git - added missing file R=r OCL=13681 CL=13681 --- diff --git a/usr/gri/gosrc/verifier.go b/usr/gri/gosrc/verifier.go new file mode 100644 index 0000000000..3ec700b25e --- /dev/null +++ b/usr/gri/gosrc/verifier.go @@ -0,0 +1,114 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Verifies compiler-internal data structures. + +package Verifier + +import Utils "utils" +import Scanner "scanner" +import Globals "globals" +import Object "object" +import Type "type" +import Universe "universe" +import Import "import" +import AST "ast" + + +func Error(msg string) { + panic "internal compiler error: ", msg, "\n"; +} + + +func VerifyObject(obj *Globals.Object, pnolev int); + + +func VerifyType(typ *Globals.Type) { + if typ == nil { + return; // see Globals.NewObject + } + + if typ.obj != nil { + VerifyObject(typ.obj, 0); + } + + switch typ.form { + case Type.UNDEF: // for now - remove eventually + break; + case Type.NIL: + break; + case Type.BOOL: + break; + case Type.UINT: + break; + case Type.INT: + break; + case Type.FLOAT: + break; + case Type.STRING: + break; + case Type.ANY: + break; + case Type.ARRAY: + break; + case Type.STRUCT: + break; + case Type.INTERFACE: + break; + case Type.MAP: + break; + case Type.CHANNEL: + break; + case Type.FUNCTION: + break; + case Type.POINTER: + break; + case Type.REFERENCE: + break; + default: + Error("illegal type form " + Type.FormStr(typ.form)); + } +} + + +func VerifyObject(obj *Globals.Object, pnolev int) { + VerifyType(obj.typ); + + switch obj.kind { + case Object.CONST: + break; + case Object.TYPE: + break; + case Object.VAR: + break; + case Object.FUNC: + break; + case Object.PACKAGE: + break; + case Object.LABEL: + break; + default: + Error("illegal object kind " + Object.KindStr(obj.kind)); + } +} + + +func VerifyScope(scope *Globals.Scope) { + for p := scope.entries.first; p != nil; p = p.next { + VerifyObject(p.obj, 0); + } +} + + +func VerifyPackage(pkg *Globals.Package, pno int) { + VerifyObject(pkg.obj, 0); +} + + +export Verify +func Verify(comp *Globals.Compilation) { + for i := 0; i < comp.npkgs; i++ { + VerifyPackage(comp.pkgs[i], i); + } +}