Step 1 of the Big Error Shift: make os.Error an interface and replace *os.Errors with os.Errors.
lib/template updated to use new setup; its clients also updated.

Step 2 will make os's error support internally much cleaner.

R=rsc
OCL=27586
CL=27586
diff --git a/src/lib/regexp/all_test.go b/src/lib/regexp/all_test.go
index 1a5285e..a9f2758 100644
--- a/src/lib/regexp/all_test.go
+++ b/src/lib/regexp/all_test.go
@@ -32,7 +32,7 @@
 // TODO: nice to do this with a map
 type stringError struct {
 	re	string;
-	err	*os.Error;
+	err	os.Error;
 }
 var bad_re = []stringError{
 	stringError{ `*`,	 	regexp.ErrBareClosure },
@@ -85,7 +85,7 @@
 	tester{ `a*(|(b))c*`,	"aacc",	vec{0,4, 2,2, -1,-1} },
 }
 
-func compileTest(t *testing.T, expr string, error *os.Error) *regexp.Regexp {
+func compileTest(t *testing.T, expr string, error os.Error) *regexp.Regexp {
 	re, err := regexp.Compile(expr);
 	if err != error {
 		t.Error("compiling `", expr, "`; unexpected error: ", err.String());
diff --git a/src/lib/regexp/regexp.go b/src/lib/regexp/regexp.go
index 3ec3ff8..135dcc3 100644
--- a/src/lib/regexp/regexp.go
+++ b/src/lib/regexp/regexp.go
@@ -70,7 +70,7 @@
 type Regexp struct {
 	expr	string;	// the original expression
 	ch	chan<- *Regexp;	// reply channel when we're done
-	error	*os.Error;	// compile- or run-time error; nil if OK
+	error	os.Error;	// compile- or run-time error; nil if OK
 	inst	*vector.Vector;
 	start	instr;
 	nbra	int;	// number of brackets in expression, for subexpressions
@@ -233,7 +233,7 @@
 func (nop *_Nop) print() { print("nop") }
 
 // report error and exit compiling/executing goroutine
-func (re *Regexp) setError(err *os.Error) {
+func (re *Regexp) setError(err os.Error) {
 	re.error = err;
 	re.ch <- re;
 	sys.Goexit();
@@ -586,7 +586,7 @@
 
 // Compile parses a regular expression and returns, if successful, a Regexp
 // object that can be used to match against text.
-func Compile(str string) (regexp *Regexp, error *os.Error) {
+func Compile(str string) (regexp *Regexp, error os.Error) {
 	// Compile in a separate goroutine and wait for the result.
 	ch := make(chan *Regexp);
 	go compiler(str, ch);
@@ -754,7 +754,7 @@
 // Match checks whether a textual regular expression
 // matches a substring.  More complicated queries need
 // to use Compile and the full Regexp interface.
-func Match(pattern string, s string) (matched bool, error *os.Error) {
+func Match(pattern string, s string) (matched bool, error os.Error) {
 	re, err := Compile(pattern);
 	if err != nil {
 		return false, err