From f1d658c71e64cb81bd3f40cf23f25426de8900a9 Mon Sep 17 00:00:00 2001 From: buraq Date: Mon, 6 Oct 2003 17:37:31 +0000 Subject: fixed bug133, refactored code ignoreValue,Null ... fixed bug133, refactored code ignoreValue,Null to calls to TreeGen.mkDefaultValue --- .../scalac/transformer/matching/Autom2Scala.java | 4 +- .../scalac/transformer/matching/CodeFactory.java | 13 ++-- .../transformer/matching/LeftTracerInScala.java | 12 +++- .../transformer/matching/RightTracerInScala.java | 7 +- .../transformer/matching/SequenceMatcher.java | 75 ---------------------- .../scalac/transformer/matching/TracerInScala.java | 12 +++- 6 files changed, 33 insertions(+), 90 deletions(-) (limited to 'sources') diff --git a/sources/scalac/transformer/matching/Autom2Scala.java b/sources/scalac/transformer/matching/Autom2Scala.java index 51a378f960..5fb169d8d9 100644 --- a/sources/scalac/transformer/matching/Autom2Scala.java +++ b/sources/scalac/transformer/matching/Autom2Scala.java @@ -159,7 +159,9 @@ public class Autom2Scala { cf.gen.ValDef( this.curSym, cf.If( _ref( hasnSym ),//cf._hasNext( _iter() ), cf._next( _iter() ), - cf.ignoreValue( curSym.type() ))), + gen.mkDefaultValue(cf.pos,curSym.type()))), + //cf.ignoreValue( curSym.type() ) + body }, body.type() ); } diff --git a/sources/scalac/transformer/matching/CodeFactory.java b/sources/scalac/transformer/matching/CodeFactory.java index 98b014861d..5ad4b05fbf 100644 --- a/sources/scalac/transformer/matching/CodeFactory.java +++ b/sources/scalac/transformer/matching/CodeFactory.java @@ -193,8 +193,7 @@ class CodeFactory extends PatternTool { } /** FIXME - short type - */ - Tree ignoreValue( Type asType ) { + Tree ignoreValue1( Type asType ) { if( asType.isSameAs(defs.BYTE_TYPE )) return make.Literal(pos, new Integer( 0 )) .setType( defs.INT_TYPE ); @@ -202,7 +201,7 @@ class CodeFactory extends PatternTool { return make.Literal(pos, new Character( 'a' )) .setType( defs.CHAR_TYPE ); else if( asType.isSameAs(defs.SHORT_TYPE )) - return make.Literal(pos, new Integer/*Short?*/( 0 )) + return make.Literal(pos, new Integer( 0 ))//Short .setType( defs.SHORT_TYPE ); else if( asType.isSameAs(defs.INT_TYPE )) return gen.mkIntLit( pos, 0 ); @@ -220,19 +219,17 @@ class CodeFactory extends PatternTool { else if( asType.isSameAs(defs.STRING_TYPE )) return make.Literal(pos, "") .setType( defs.STRING_TYPE ); - /** FIX ME FOR THE NEW VERSION*/ else - return /*gen.Apply( */Null( asType )/*, - Tree.EMPTY_ARRAY)*/; - + return Null( asType ); //throw new ApplicationError("don't know how to handle "+asType); } + */ /** code `null' - */ Tree Null( Type asType ) { return gen.Ident(pos, defs.NULL ); } + */ // the caller needs to set the type ! Tree _applyNone( Tree arg ) { diff --git a/sources/scalac/transformer/matching/LeftTracerInScala.java b/sources/scalac/transformer/matching/LeftTracerInScala.java index a953551759..4b0c0d82ff 100644 --- a/sources/scalac/transformer/matching/LeftTracerInScala.java +++ b/sources/scalac/transformer/matching/LeftTracerInScala.java @@ -68,7 +68,10 @@ public class LeftTracerInScala extends TracerInScala { .setType( cf.SeqListType( pat.type() )) ; ValDef varDef = (ValDef) gen.ValDef( helpVar, - cf.ignoreValue( cf.SeqListType( pat.type() ))); + gen.mkDefaultValue(cf.pos, + cf.SeqListType( pat.type() )) + //cf.ignoreValue( ) + ); helpVarDefs.add( varDef ); return helpVar; } @@ -128,7 +131,6 @@ public class LeftTracerInScala extends TracerInScala { _ref( accumSym )); */ Tree hd = cf.newPair( gen.mkIntLit(cf.pos, i), currentElem() ); - Tree newAcc = gen.Cons(cf.pos, hd.type, hd, @@ -307,7 +309,11 @@ public class LeftTracerInScala extends TracerInScala { /** return the accumulator + last state */ Tree run_finished( int state ) { - Tree hd = cf.newPair( gen.mkIntLit( cf.pos, state ), cf.ignoreValue( elementType )); + Tree hd = cf.newPair( gen.mkIntLit( cf.pos, state ), + gen.mkDefaultValue(cf.pos, + elementType) + /*cf.ignoreValue( elementType )*/); + //System.err.println(hd.type); return gen.Cons( cf.pos, hd.type(), hd, diff --git a/sources/scalac/transformer/matching/RightTracerInScala.java b/sources/scalac/transformer/matching/RightTracerInScala.java index 12eca9080f..a01053e069 100644 --- a/sources/scalac/transformer/matching/RightTracerInScala.java +++ b/sources/scalac/transformer/matching/RightTracerInScala.java @@ -1,3 +1,7 @@ +/** + * $Id$ + */ + package scalac.transformer.matching ; import scalac.*; @@ -111,7 +115,8 @@ public class RightTracerInScala extends TracerInScala { Tree rhs; if( keepType ) - rhs = cf.ignoreValue( realVar.type() ); + rhs = gen.mkDefaultValue(cf.pos, + realVar.type()); //cf.ignoreValue( realVar.type() ); else rhs = /* cf.newRef( cf.newSeqNil( */ gen.Nil( cf.pos ) .setType( cf.SeqListType( elementType )); diff --git a/sources/scalac/transformer/matching/SequenceMatcher.java b/sources/scalac/transformer/matching/SequenceMatcher.java index f9d5b10e19..6ccadf51d0 100644 --- a/sources/scalac/transformer/matching/SequenceMatcher.java +++ b/sources/scalac/transformer/matching/SequenceMatcher.java @@ -31,86 +31,11 @@ public class SequenceMatcher extends PatternTool { Tree pat[]; Tree body[]; - /* - public Tree[] getNested( HashMap varMap ) { - Tree[][] stmsNest = new Tree[varMap.size()][]; - int i = 0; - int k = 0; - for( Iterator it = varMap.keySet().iterator() ; it.hasNext(); ) { - Tree pat = (Tree) it.next(); // contains variables - Symbol v = (Symbol) varMap.get( pat ); - - BindingBerrySethi build = new BindingBerrySethi(); - NondetWordAutom leftNest = build.automatonFrom( pat, - new Integer( 0 )); - - DetWordAutom dLeftNest = new DetWordAutom( leftNest ); - - NondetWordAutom rightNest = build.revnfa; - - Matcher mNest = new Matcher( _m.owner, _m.selector, null ); - - LeftTracerInScala ltisNest = - new LeftTracerInScala( dLeftNest, - cf.getElemType( pat.type() ), - mNest, - cf ); - Tree stmsLeftNest[] = ltisNest.getTrace(); - - Tree selNest = gen.Ident( Position.FIRSTPOS, ltisNest.resultSym ); - - DetWordAutom dRightNest = - new DetWordAutom( rightNest, leftNest, dLeftNest); - - RightTracerInScala rtisNest = - new RightTracerInScala( dRightNest, leftNest, mNest, - cf, pat, cf.getElemType(pat.type())); - - Tree stmsRightNest[] = rtisNest.getStms( gen.Ident( Position.FIRSTPOS, v ) ); - stmsNest[ i ] = new Tree[ stmsLeftNest.length - + stmsRightNest.length ]; - - System.arraycopy( stmsLeftNest, 0, - stmsNest[ i ], 0, stmsLeftNest.length ); - System.arraycopy( stmsRightNest, 0, stmsNest[ i ], - stmsLeftNest.length, stmsRightNest.length ); - k += stmsNest[ i ].length; - i++; - } - // flatten - Tree[] res = new Tree[ k ]; - k = 0; - for( i = 0; i < varMap.size(); i++ ) { - System.arraycopy( stmsNest[ i ], 0, res, k, stmsNest[ i ].length ); - k += stmsNest[ i ].length; - } - return res; - } - */ - /** translates the det/switching automaton to scala code * precondition: pat.type() corresponds to element type */ Tree addBinderToBody( Tree pat, Tree body ) { - /* - SplitNested spn = new SplitNested( pat, _m.owner, cf ); - - pat = spn.flatPat; // - - for( Iterator it = spn.nestedVarToPats.keySet().iterator(); - it.hasNext(); ){ - Symbol v = (Symbol) it.next(); - Tree nestPat = (Tree) spn.nestedVarToPats.get( v ); - Matcher mNest = new Matcher( _m.owner, gen.Ident(Position.FIRSTPOS, v), null ); - - Matcher saveM = _m; _m = mNest; - - Tree nbody = addBinderToBody( nestPat, body ); - _m = saveM; - body = nbody; - } - */ Type elementType = cf.getElemType_Sequence( pat.type() ); BindingBerrySethi build = new BindingBerrySethi(); diff --git a/sources/scalac/transformer/matching/TracerInScala.java b/sources/scalac/transformer/matching/TracerInScala.java index 7bcb631c2b..b2ed49069c 100644 --- a/sources/scalac/transformer/matching/TracerInScala.java +++ b/sources/scalac/transformer/matching/TracerInScala.java @@ -44,12 +44,20 @@ public class TracerInScala extends Autom2Scala { Tree bindVar(Symbol realVar) { Tree hv = refHelpVar( realVar ); - //System.out.println("binding realVar.name "+realVar.name+" type:"+realVar.type()+" to smth"); + /* + System.out.println("binding realVar.name "+realVar.name+" type:"+realVar.type()+" to hv type:"+hv.type()); realVar.setOwner( owner ); + System.out.println("is same as realVar"+realVar.type().isSameAs( elementType )); + System.out.println("is same as hv"+realVar.type().isSameAs( hv.type() )); if( realVar.type().isSameAs( elementType )) return gen.ValDef( realVar, cf.SeqList_head( hv )); else - return gen.ValDef( realVar, hv); + return gen.ValDef( realVar, hv ); + */ + if( realVar.type().isSameAs( hv.type())) { + return gen.ValDef( realVar, hv ); // e.g. x @ _* + } + return gen.ValDef( realVar, cf.SeqList_head( hv )); } -- cgit v1.2.3