summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-10-06 17:37:31 +0000
committerburaq <buraq@epfl.ch>2003-10-06 17:37:31 +0000
commitf1d658c71e64cb81bd3f40cf23f25426de8900a9 (patch)
tree85179d2768482b8124ba4a5d03e4c69f4b960af3 /sources
parentd49b034739b5071bfbc37c2c010a83d12d7405e4 (diff)
downloadscala-f1d658c71e64cb81bd3f40cf23f25426de8900a9.tar.gz
scala-f1d658c71e64cb81bd3f40cf23f25426de8900a9.tar.bz2
scala-f1d658c71e64cb81bd3f40cf23f25426de8900a9.zip
fixed bug133, refactored code ignoreValue,Null ...
fixed bug133, refactored code ignoreValue,Null to calls to TreeGen.mkDefaultValue
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/transformer/matching/Autom2Scala.java4
-rw-r--r--sources/scalac/transformer/matching/CodeFactory.java13
-rw-r--r--sources/scalac/transformer/matching/LeftTracerInScala.java12
-rw-r--r--sources/scalac/transformer/matching/RightTracerInScala.java7
-rw-r--r--sources/scalac/transformer/matching/SequenceMatcher.java75
-rw-r--r--sources/scalac/transformer/matching/TracerInScala.java12
6 files changed, 33 insertions, 90 deletions
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 ));
}