[project @ 2000-05-11 07:20:36 by andy]
authorandy <unknown>
Thu, 11 May 2000 07:20:36 +0000 (07:20 +0000)
committerandy <unknown>
Thu, 11 May 2000 07:20:36 +0000 (07:20 +0000)
Wibble...

The corrected example is as follows:

myS :: (forall t t1 t2. (t -> t2 -> t1) -> (t -> t2) -> t -> t1)
[NoDiscard] __AL 3
myS
  = \ @ t @ t1 @ t2 f :: (t -> t2 -> t1) g :: (t -> t2) x :: t -> f x (g x)

public class myS implements Code {
  public Object ENTER () {
    VM.COLLECT(3, this);
    final Object f = VM.POP();
    final Object g = VM.POP();
    final Object x = VM.POP();
    VM.PUSH(x);
    VM.PUSH(new Thunk(new myS$1(g, x)));
    return f;
  }
}
class myS$1 extends Code {
  final Object g;
  final Object x;
  public myS$1 (Object _g_, Object _x_) {
    g = _g_;
    x = _x_;
  }
  public Object ENTER () {
    VM.PUSH(x);
    return g;
  }
}

ghc/compiler/javaGen/JavaGen.lhs

index 0fd4b9e..513d99a 100644 (file)
@@ -599,9 +599,12 @@ new env@(Env _ pairs) typ args Nothing =
 new env typ [] (Just inner) =
   -- anon. inner class
   do { innerName <- genAnonInnerClassName 
-     ; frees <- liftClass env innerName inner [] []
-     ; return (mkNew env typ [ Var name | name <- frees ])
+     ; frees <- liftClass env innerName inner [unType typ] []
+     ; return (New (Type [innerName]) [ Var name | name <- frees ] Nothing)
      }
+  where unType (Type [name]) = name
+       unType _             = error "incorrect type style"
+       
 new env typ _ (Just inner) = error "cant handle inner class with args"
 
 liftClass :: Env -> Name -> [Decl] -> [Name] -> [Name] -> LifterM [ Name ]