[kaffe] CVS kaffe-extras (guilhem): Fixed initializers in KJC. Circular definitions of fields is now supported.
Kaffe CVS
Kaffe Mailing List <kaffe@kaffe.org>
Sat Feb 14 10:49:02 2004
PatchSet 28
Date: 2004/02/14 18:48:56
Author: guilhem
Branch: HEAD
Tag: (none)
Log:
Fixed initializers in KJC. Circular definitions of fields is now supported.
Added a patch for ant-1.6.0 to compile.
Members:
bootstrap-kaffe+ant.sh:1.5->1.6
patches/ant-kaffe-1.1.3.diff:INITIAL->1.1
patches/kjc-initializers.diff:1.1->1.2
Index: kaffe-extras/bootstrap-kaffe+ant.sh
diff -u kaffe-extras/bootstrap-kaffe+ant.sh:1.5 kaffe-extras/bootstrap-kaffe+ant.sh:1.6
--- kaffe-extras/bootstrap-kaffe+ant.sh:1.5 Fri Jan 30 08:12:46 2004
+++ kaffe-extras/bootstrap-kaffe+ant.sh Sat Feb 14 18:48:56 2004
@@ -6,7 +6,7 @@
TOPDIR=$(cd `dirname $0`; pwd)
PREFIX=$TOPDIR/install
-KAFFE=kaffe-1.1.2
+KAFFE=kaffe-1.1.3
ANT=apache-ant-1.5.4
export TOPDIR PREFIX KAFFE ANT
===================================================================
Checking out kaffe-extras/patches/ant-kaffe-1.1.3.diff
RCS: /home/cvs/kaffe/kaffe-extras/patches/ant-kaffe-1.1.3.diff,v
VERS: 1.1
***************
--- /dev/null Sun Aug 4 19:57:58 2002
+++ kaffe-extras/patches/ant-kaffe-1.1.3.diff Sat Feb 14 18:48:58 2004
@@ -0,0 +1,130 @@
+diff -ur apache-ant-1.6.0/bootstrap.sh apache-ant-1.6.0.new/bootstrap.sh
+--- apache-ant-1.6.0/bootstrap.sh 2003-12-18 21:16:06.000000000 +0100
++++ apache-ant-1.6.0.new/bootstrap.sh 2004-02-14 14:04:14.000000000 +0100
+@@ -115,13 +115,111 @@
+
+ echo ... Compiling Ant Classes
+
+-"${JAVAC}" $BOOTJAVAC_OPTS -d ${CLASSDIR} ${TOOLS}/bzip2/*.java ${TOOLS}/tar/*.java ${TOOLS}/zip/*.java \
++"${JAVAC}" $BOOTJAVAC_OPTS -d ${CLASSDIR} ${TOOLS}/bzip2/*.java ${TOOLS}/tar/*.java ${TOOLS}/zip/*.java ${TOOLS}/mail/*.java \
+ ${TOOLS}/ant/util/regexp/RegexpMatcher.java \
+ ${TOOLS}/ant/util/regexp/RegexpMatcherFactory.java \
+ ${TOOLS}/ant/types/*.java \
+ ${TOOLS}/ant/*.java ${TOOLS}/ant/taskdefs/*.java \
+ ${TOOLS}/ant/taskdefs/compilers/*.java \
+- ${TOOLS}/ant/taskdefs/condition/*.java
++ ${TOOLS}/ant/taskdefs/condition/*.java \
++ ${TOOLS}/ant/filters/util/ChainReaderHelper.java \
++ ${TOOLS}/ant/filters/BaseFilterReader.java \
++ ${TOOLS}/ant/filters/ChainableReader.java \
++ ${TOOLS}/ant/launch/Locator.java \
++ ${TOOLS}/ant/util/ResourceUtils.java \
++ ${TOOLS}/ant/util/JavaEnvUtils.java \
++ ${TOOLS}/ant/util/FileNameMapper.java \
++ ${TOOLS}/ant/util/MergingMapper.java \
++ ${TOOLS}/ant/util/IdentityMapper.java \
++ ${TOOLS}/ant/util/GlobPatternMapper.java \
++ ${TOOLS}/ant/util/SourceFileScanner.java \
++ ${TOOLS}/ant/taskdefs/email/EmailTask.java \
++ ${TOOLS}/ant/taskdefs/email/Mailer.java \
++ ${TOOLS}/ant/taskdefs/email/PlainMailer.java \
++ ${TOOLS}/ant/util/facade/ImplementationSpecificArgument.java \
++ ${TOOLS}/ant/util/facade/FacadeTaskHelper.java \
++ ${TOOLS}/ant/taskdefs/rmic/RmicAdapterFactory.java \
++ ${TOOLS}/ant/taskdefs/rmic/RmicAdapter.java \
++ ${TOOLS}/ant/taskdefs/rmic/DefaultRmicAdapter.java \
++ ${TOOLS}/ant/taskdefs/rmic/SunRmic.java \
++ ${TOOLS}/ant/taskdefs/rmic/KaffeRmic.java \
++ ${TOOLS}/ant/taskdefs/rmic/WLRmic.java \
++ ${TOOLS}/ant/util/StringUtils.java \
++ ${TOOLS}/ant/util/TeeOutputStream.java \
++ ${TOOLS}/ant/util/LazyFileOutputStream.java \
++ ${TOOLS}/ant/types/selectors/SelectorContainer.java \
++ ${TOOLS}/ant/types/selectors/modifiedselector/ModifiedSelector.java \
++ ${TOOLS}/ant/types/selectors/BaseExtendSelector.java \
++ ${TOOLS}/ant/types/selectors/modifiedselector/PropertiesfileCache.java \
++ ${TOOLS}/ant/types/selectors/modifiedselector/DigestAlgorithm.java \
++ ${TOOLS}/ant/types/selectors/modifiedselector/EqualComparator.java \
++ ${TOOLS}/ant/util/JAXPUtils.java \
++ ${TOOLS}/ant/types/selectors/BaseSelectorContainer.java \
++ ${TOOLS}/ant/helper/AntXMLContext.java \
++ ${TOOLS}/ant/helper/ProjectHelperImpl.java \
++ ${TOOLS}/ant/types/selectors/BaseSelector.java \
++ ${TOOLS}/ant/types/selectors/ExtendFileSelector.java \
++ ${TOOLS}/ant/types/selectors/FileSelector.java \
++ ${TOOLS}/ant/types/selectors/TypeSelector.java \
++ ${TOOLS}/ant/types/selectors/SizeSelector.java \
++ ${TOOLS}/ant/types/selectors/SelectSelector.java \
++ ${TOOLS}/ant/types/selectors/PresentSelector.java \
++ ${TOOLS}/ant/types/selectors/MappingSelector.java \
++ ${TOOLS}/ant/types/selectors/OrSelector.java \
++ ${TOOLS}/ant/types/selectors/NotSelector.java \
++ ${TOOLS}/ant/types/selectors/NoneSelector.java \
++ ${TOOLS}/ant/types/selectors/MajoritySelector.java \
++ ${TOOLS}/ant/types/selectors/FilenameSelector.java \
++ ${TOOLS}/ant/types/selectors/ExtendSelector.java \
++ ${TOOLS}/ant/types/selectors/DifferentSelector.java \
++ ${TOOLS}/ant/types/selectors/DepthSelector.java \
++ ${TOOLS}/ant/types/selectors/DependSelector.java \
++ ${TOOLS}/ant/types/selectors/DateSelector.java \
++ ${TOOLS}/ant/types/selectors/ContainsSelector.java \
++ ${TOOLS}/ant/types/selectors/ContainsRegexpSelector.java \
++ ${TOOLS}/ant/util/regexp/Regexp.java \
++ ${TOOLS}/ant/types/selectors/AndSelector.java \
++ ${TOOLS}/ant/util/CollectionUtils.java \
++ ${TOOLS}/ant/input/MultipleChoiceInputRequest.java \
++ ${TOOLS}/ant/input/InputRequest.java \
++ ${TOOLS}/ant/types/selectors/SelectorUtils.java \
++ ${TOOLS}/ant/util/TimeoutObserver.java \
++ ${TOOLS}/ant/taskdefs/email/Message.java \
++ ${TOOLS}/ant/types/selectors/modifiedselector/Algorithm.java \
++ ${TOOLS}/ant/types/selectors/modifiedselector/Cache.java \
++ ${TOOLS}/ant/util/Watchdog.java \
++ ${TOOLS}/ant/util/ClasspathUtils.java \
++ ${TOOLS}/ant/filters/ClassConstants.java \
++ ${TOOLS}/ant/filters/EscapeUnicode.java \
++ ${TOOLS}/ant/filters/ExpandProperties.java \
++ ${TOOLS}/ant/filters/HeadFilter.java \
++ ${TOOLS}/ant/filters/LineContains.java \
++ ${TOOLS}/ant/filters/LineContainsRegExp.java \
++ ${TOOLS}/ant/filters/PrefixLines.java \
++ ${TOOLS}/ant/filters/ReplaceTokens.java \
++ ${TOOLS}/ant/filters/StripJavaComments.java \
++ ${TOOLS}/ant/filters/StripLineBreaks.java \
++ ${TOOLS}/ant/filters/StripLineComments.java \
++ ${TOOLS}/ant/filters/TabsToSpaces.java \
++ ${TOOLS}/ant/filters/BaseParamFilterReader.java \
++ ${TOOLS}/ant/filters/TailFilter.java \
++ ${TOOLS}/ant/util/Tokenizer.java \
++ ${TOOLS}/ant/util/LineTokenizer.java \
++ ${TOOLS}/ant/filters/TokenFilter.java \
++ ${TOOLS}/ant/util/regexp/RegexpFactory.java \
++ ${TOOLS}/ant/util/DateUtils.java \
++ ${TOOLS}/ant/types/selectors/SelectorScanner.java \
++ ${TOOLS}/ant/launch/AntMain.java \
++ ${TOOLS}/ant/util/LoaderUtils.java \
++ ${TOOLS}/ant/util/KeepAliveInputStream.java \
++ ${TOOLS}/ant/input/DefaultInputHandler.java \
++ ${TOOLS}/ant/taskdefs/email/EmailAddress.java \
++ ${TOOLS}/ant/input/InputHandler.java \
++ ${TOOLS}/ant/util/DOMElementWriter.java \
++ ${TOOLS}/ant/util/FlatFileNameMapper.java \
++ ${TOOLS}/ant/helper/ProjectHelper2.java \
++ ${TOOLS}/ant/util/FileUtils.java \
++ ${TOOLS}/ant/taskdefs/optional/Test.java
+ ret=$?
+ if [ $ret != 0 ]; then
+ echo ... Failed compiling Ant classes !
+Only in apache-ant-1.6.0.new/: bootstrap.sh~
+diff -ur apache-ant-1.6.0/build.sh apache-ant-1.6.0.new/build.sh
+--- apache-ant-1.6.0/build.sh 2003-12-18 21:16:06.000000000 +0100
++++ apache-ant-1.6.0.new/build.sh 2004-01-29 19:29:02.000000000 +0100
+@@ -24,7 +24,7 @@
+ export ANT_HOME
+
+ if test ! -f bootstrap/lib/ant.jar -o ! -x bootstrap/bin/ant -o ! -x bootstrap/bin/antRun ; then
+- /bin/sh ./bootstrap.sh
++ /bin/sh ./bootstrap.sh -Dbuild.compiler=kjc
+ fi
+
+ if test ! -f bootstrap/lib/ant.jar -o ! -x bootstrap/bin/ant -o ! -x bootstrap/bin/antRun ; then
Index: kaffe-extras/patches/kjc-initializers.diff
diff -u kaffe-extras/patches/kjc-initializers.diff:1.1 kaffe-extras/patches/kjc-initializers.diff:1.2
--- kaffe-extras/patches/kjc-initializers.diff:1.1 Thu Jan 29 20:32:16 2004
+++ kaffe-extras/patches/kjc-initializers.diff Sat Feb 14 18:48:57 2004
@@ -1,6 +1,6 @@
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/CBinaryField.java kjc-suite-2.1B.new/src/kjc/CBinaryField.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/CBinaryField.java kjc-suite-2.1B.new/src/kjc/CBinaryField.java
--- kjc-suite-2.1B/src/kjc/CBinaryField.java 2002-07-15 20:53:31.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/CBinaryField.java 2004-01-28 21:26:17.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/CBinaryField.java 2004-02-13 21:23:15.000000000 +0100
@@ -59,6 +59,7 @@
setValue(createLiteral(factory, getType(), value));
}
@@ -9,9 +9,9 @@
}
public void checkTypes(CBinaryTypeContext context) throws UnpositionedError {
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/CBodyContext.java kjc-suite-2.1B.new/src/kjc/CBodyContext.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/CBodyContext.java kjc-suite-2.1B.new/src/kjc/CBodyContext.java
--- kjc-suite-2.1B/src/kjc/CBodyContext.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/CBodyContext.java 2004-01-28 07:50:30.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/CBodyContext.java 2004-02-13 21:23:15.000000000 +0100
@@ -55,6 +55,7 @@
flowState = parent.flowState;
variableInfo = new CVariableInfo(parent.getVariableInfo());
@@ -67,9 +67,9 @@
+
private Hashtable throwables;
}
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/CTryContext.java kjc-suite-2.1B.new/src/kjc/CTryContext.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/CTryContext.java kjc-suite-2.1B.new/src/kjc/CTryContext.java
--- kjc-suite-2.1B/src/kjc/CTryContext.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/CTryContext.java 2004-01-28 20:49:14.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/CTryContext.java 2004-02-13 21:23:15.000000000 +0100
@@ -59,6 +59,13 @@
public void close(TokenReference ref) {
}
@@ -84,9 +84,9 @@
// ----------------------------------------------------------------------
// ACCESSORS
// ----------------------------------------------------------------------
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/CVariableExtInfo.java kjc-suite-2.1B.new/src/kjc/CVariableExtInfo.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/CVariableExtInfo.java kjc-suite-2.1B.new/src/kjc/CVariableExtInfo.java
--- kjc-suite-2.1B/src/kjc/CVariableExtInfo.java 1970-01-01 01:00:00.000000000 +0100
-+++ kjc-suite-2.1B.new/src/kjc/CVariableExtInfo.java 2004-01-29 19:16:12.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/CVariableExtInfo.java 2004-02-13 21:23:15.000000000 +0100
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2004 Kaffe.org's developers
@@ -153,9 +153,9 @@
+ public static final int EXIST = 0x01;
+ public static final int ANALYSED = 0x02;
+}
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JAddExpression.java kjc-suite-2.1B.new/src/kjc/JAddExpression.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JAddExpression.java kjc-suite-2.1B.new/src/kjc/JAddExpression.java
--- kjc-suite-2.1B/src/kjc/JAddExpression.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JAddExpression.java 2004-01-29 19:02:51.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JAddExpression.java 2004-02-13 21:23:15.000000000 +0100
@@ -81,6 +81,8 @@
left = left.analyse(context);
@@ -183,9 +183,22 @@
if (left.isConstant() && right.isConstant()) {
if (type.equals(stringType)) {
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JBinaryExpression.java kjc-suite-2.1B.new/src/kjc/JBinaryExpression.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JAssignmentExpression.java kjc-suite-2.1B.new/src/kjc/JAssignmentExpression.java
+--- kjc-suite-2.1B/src/kjc/JAssignmentExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JAssignmentExpression.java 2004-02-14 13:43:24.000000000 +0100
+@@ -99,6 +99,9 @@
+ context.getEnvironment(),
+ false,
+ false));
++ // Here, we expect it to be true in any case. But we never know.
++ fully_analysed = right.isFullyAnalysed() && left.isFullyAnalysed();
++
+ if (right instanceof JTypeNameExpression) {
+ check(context, false, KjcMessages.VAR_UNKNOWN, ((JTypeNameExpression)right).getQualifiedName());
+ }
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JBinaryExpression.java kjc-suite-2.1B.new/src/kjc/JBinaryExpression.java
--- kjc-suite-2.1B/src/kjc/JBinaryExpression.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JBinaryExpression.java 2004-01-27 21:11:36.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JBinaryExpression.java 2004-02-13 21:58:46.000000000 +0100
@@ -46,6 +46,7 @@
super(where);
this.left = left;
@@ -194,27 +207,72 @@
}
// ----------------------------------------------------------------------
-@@ -113,6 +114,11 @@
- code.plantJumpInstruction(cond ? opc_ifne : opc_ifeq, label);
+@@ -59,6 +60,20 @@
+ return type;
}
++ /**
++ * @return true is the expression has been completely initialized.
++ */
+ public boolean isFullyAnalysed() {
-+// return fully_analysed;
-+ return left.isFullyAnalysed() && right.isFullyAnalysed();
++ return fully_analysed;
++ }
++
++ /**
++ * @return true if the expression depends on the specified field.
++ */
++ public boolean dependsOnField(CField field) {
++ return left.dependsOnField(field) || right.dependsOnField(field);
+ }
+
// ----------------------------------------------------------------------
- // DATA MEMBERS
+ // CODE GENERATION
// ----------------------------------------------------------------------
-@@ -120,4 +126,5 @@
+@@ -120,4 +135,5 @@
protected CType type;
protected JExpression left;
protected JExpression right;
+ protected boolean fully_analysed;
}
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JClassDeclaration.java kjc-suite-2.1B.new/src/kjc/JClassDeclaration.java
---- kjc-suite-2.1B/src/kjc/JClassDeclaration.java 2004-01-29 19:10:43.000000000 +0100
-+++ kjc-suite-2.1B.new/src/kjc/JClassDeclaration.java 2004-01-27 21:41:02.000000000 +0100
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JBitwiseComplementExpression.java kjc-suite-2.1B.new/src/kjc/JBitwiseComplementExpression.java
+--- kjc-suite-2.1B/src/kjc/JBitwiseComplementExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JBitwiseComplementExpression.java 2004-02-13 21:52:07.000000000 +0100
+@@ -62,7 +62,11 @@
+
+ expr = expr.analyse(context);
+ check(context, expr.getType(factory).isOrdinal(), KjcMessages.UNARY_BADTYPE_BNOT, expr.getType(factory));
++
+ type = CNumericType.unaryPromote(context, expr.getType(factory));
++ if (!expr.isFullyAnalysed())
++ return this;
++
+ expr = expr.convertType(context, type);
+
+ if (expr.isConstant()) {
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JBitwiseExpression.java kjc-suite-2.1B.new/src/kjc/JBitwiseExpression.java
+--- kjc-suite-2.1B/src/kjc/JBitwiseExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JBitwiseExpression.java 2004-02-14 13:25:49.000000000 +0100
+@@ -67,6 +67,7 @@
+
+ left = left.analyse(context);
+ right = right.analyse(context);
++ fully_analysed = left.isFullyAnalysed() && right.isFullyAnalysed();
+
+ try {
+ type = computeType(context, left.getType(factory), right.getType(factory));
+@@ -74,6 +75,9 @@
+ throw e.addPosition(getTokenReference());
+ }
+
++ if (!fully_analysed)
++ return this;
++
+ left = left.convertType(context, type);
+ right = right.convertType(context, type);
+
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JClassDeclaration.java kjc-suite-2.1B.new/src/kjc/JClassDeclaration.java
+--- kjc-suite-2.1B/src/kjc/JClassDeclaration.java 2004-02-14 13:55:21.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JClassDeclaration.java 2004-02-13 21:23:15.000000000 +0100
@@ -378,7 +378,7 @@
* Check that initializers are correct
* @exception PositionedError an error with reference to the source file
@@ -261,9 +319,9 @@
}
/**
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JCompilationUnit.java kjc-suite-2.1B.new/src/kjc/JCompilationUnit.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JCompilationUnit.java kjc-suite-2.1B.new/src/kjc/JCompilationUnit.java
--- kjc-suite-2.1B/src/kjc/JCompilationUnit.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JCompilationUnit.java 2004-01-27 21:01:23.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JCompilationUnit.java 2004-02-13 21:23:15.000000000 +0100
@@ -220,12 +220,14 @@
* @return true iff sub tree is correct enought to check code
* @exception PositionedError an error with reference to the source file
@@ -281,9 +339,63 @@
}
// ----------------------------------------------------------------------
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JDivideExpression.java kjc-suite-2.1B.new/src/kjc/JDivideExpression.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JCompoundAssignmentExpression.java kjc-suite-2.1B.new/src/kjc/JCompoundAssignmentExpression.java
+--- kjc-suite-2.1B/src/kjc/JCompoundAssignmentExpression.java 2004-02-14 13:55:21.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JCompoundAssignmentExpression.java 2004-02-14 13:44:03.000000000 +0100
+@@ -127,6 +127,8 @@
+ check(context, false, KjcMessages.VAR_UNKNOWN, ((JTypeNameExpression)right).getQualifiedName());
+ }
+
++ fully_analysed = left.isFullyAnalysed() && right.isFullyAnalysed();
++
+ // JLS 15.26.2 Compound Assignment Operators :
+ // All compound assignment operators require both operands to be of
+ // primitive type, except for +=, which allows the right-hand operand to be
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JConditionalAndExpression.java kjc-suite-2.1B.new/src/kjc/JConditionalAndExpression.java
+--- kjc-suite-2.1B/src/kjc/JConditionalAndExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JConditionalAndExpression.java 2004-02-13 21:45:29.000000000 +0100
+@@ -61,6 +61,7 @@
+
+ left = left.analyse(context);
+ right = right.analyse(context);
++ fully_analysed = left.isFullyAnalysed() && right.isFullyAnalysed();
+
+ CType leftType = left.getType(factory);
+ CType rightType = right.getType(factory);
+@@ -72,6 +73,9 @@
+
+ type = booleanType;
+
++ if (!fully_analysed)
++ return this;
++
+ // JLS 15.28: Constant Expression ?
+ if (left.isConstant() && right.isConstant()) {
+ return new JBooleanLiteral(getTokenReference(), left.booleanValue() && right.booleanValue());
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JConditionalOrExpression.java kjc-suite-2.1B.new/src/kjc/JConditionalOrExpression.java
+--- kjc-suite-2.1B/src/kjc/JConditionalOrExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JConditionalOrExpression.java 2004-02-13 21:45:39.000000000 +0100
+@@ -61,6 +61,7 @@
+
+ left = left.analyse(context);
+ right = right.analyse(context);
++ fully_analysed = left.isFullyAnalysed() && right.isFullyAnalysed();
+
+ CType leftType = left.getType(factory);
+ CType rightType = right.getType(factory);
+@@ -72,6 +73,9 @@
+
+ type = primBoolean;
+
++ if (!fully_analysed)
++ return this;
++
+ // JLS 15.28: Constant Expression ?
+ if (left.isConstant() && right.isConstant()) {
+ return new JBooleanLiteral(getTokenReference(), left.booleanValue() || right.booleanValue());
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JDivideExpression.java kjc-suite-2.1B.new/src/kjc/JDivideExpression.java
--- kjc-suite-2.1B/src/kjc/JDivideExpression.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JDivideExpression.java 2004-01-25 19:43:29.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JDivideExpression.java 2004-02-13 21:23:15.000000000 +0100
@@ -63,6 +63,7 @@
left = left.analyse(context);
@@ -292,36 +404,102 @@
try {
type = computeType(context, left.getType(factory), right.getType(factory));
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JExpression.java kjc-suite-2.1B.new/src/kjc/JExpression.java
+@@ -70,6 +71,9 @@
+ throw e.addPosition(getTokenReference());
+ }
+
++ if (!fully_analysed)
++ return this;
++
+ if (type.isOrdinal() && right.isConstant() && ((JLiteral)right).isDefault()) {
+ context.reportTrouble(new CWarning(getTokenReference(), KjcMessages.DIVIDE_BY_ZERO_INT));
+ }
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JEqualityExpression.java kjc-suite-2.1B.new/src/kjc/JEqualityExpression.java
+--- kjc-suite-2.1B/src/kjc/JEqualityExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JEqualityExpression.java 2004-02-13 21:47:23.000000000 +0100
+@@ -82,8 +82,15 @@
+ public JExpression analyse(CExpressionContext context) throws PositionedError {
+ left = left.analyse(context);
+ right = right.analyse(context);
++ fully_analysed = left.isFullyAnalysed() && right.isFullyAnalysed();
+
+ TypeFactory factory = context.getTypeFactory();
++
++ type = factory.getPrimitiveType(TypeFactory.PRM_BOOLEAN);
++
++ if (!fully_analysed)
++ return this;
++
+ CType leftType = left.getType(factory);
+ CType rightType = right.getType(factory);
+ CType booleanType = factory.getPrimitiveType(TypeFactory.PRM_BOOLEAN);
+@@ -117,8 +124,6 @@
+ }
+ }
+
+- type = factory.getPrimitiveType(TypeFactory.PRM_BOOLEAN);
+-
+ if (left.isConstant() && right.isConstant()) {
+ return constantFolding(factory);
+ } else {
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JExpression.java kjc-suite-2.1B.new/src/kjc/JExpression.java
--- kjc-suite-2.1B/src/kjc/JExpression.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JExpression.java 2004-01-25 19:39:20.000000000 +0100
-@@ -53,6 +53,14 @@
++++ kjc-suite-2.1B.new/src/kjc/JExpression.java 2004-02-13 21:23:15.000000000 +0100
+@@ -53,6 +53,21 @@
public abstract CType getType(TypeFactory factory);
/**
+ * Tests whether the expression is fully analysed or if they are any pending
-+ * expressions to reanalyse.
++ * expressions to reanalyse (useful for static initializers).
+ */
+ public boolean isFullyAnalysed() {
+ return true;
+ }
+
+ /**
++ * Tests whether the expression depends on the specified field.
++ */
++ public boolean dependsOnField(CField field) {
++ return false;
++ }
++
++ /**
* Tests whether this expression denotes a compile-time constant (JLS 15.28).
*
* @return true iff this expression is constant
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JFieldAccessExpression.java kjc-suite-2.1B.new/src/kjc/JFieldAccessExpression.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JFieldAccessExpression.java kjc-suite-2.1B.new/src/kjc/JFieldAccessExpression.java
--- kjc-suite-2.1B/src/kjc/JFieldAccessExpression.java 2002-07-15 20:53:33.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JFieldAccessExpression.java 2004-01-29 19:03:06.000000000 +0100
-@@ -119,7 +119,6 @@
++++ kjc-suite-2.1B.new/src/kjc/JFieldAccessExpression.java 2004-02-14 13:29:25.000000000 +0100
+@@ -107,6 +107,12 @@
+ return type;
+ }
+
++ public boolean dependsOnField(CField field) {
++ return this.field == field ||
++ (this.field.getValue() != null &&
++ this.field.getValue().dependsOnField(field));
++ }
++
+ /**
+ * Tests whether this expression denotes a compile-time constant (JLS 15.28).
+ *
+@@ -119,10 +125,14 @@
// are constant expressions
// - Qualified names of the form TypeName . Identifier that refer to
// final variables whose initializers are constant expressions
--
++ if (field.getValue() == null)
++ return false;
+
++ if (field.getValue().dependsOnField(field))
++ return false;
++
return constantPrefix
&& field.isFinal()
- && field.getValue() != null
-@@ -184,6 +183,10 @@
+- && field.getValue() != null
+ && field.getValue().isConstant();
+ }
+
+@@ -184,6 +194,10 @@
return field;
}
@@ -332,15 +510,7 @@
/**
* Returns the literal value of this field.
*/
-@@ -206,6 +209,7 @@
- buffer.append(field);
- }
- buffer.append("]");
-+ buffer.append(" cprefix="+constantPrefix + " field.isFinal="+field.isFinal() + " field.value="+field.getValue());
- return buffer.toString();
- }
-
-@@ -275,6 +279,9 @@
+@@ -275,6 +289,9 @@
type = field.getType();
@@ -350,12 +520,20 @@
if (isConstant()) {
// FIX Type!!
return field.getValue();
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JFieldDeclaration.java kjc-suite-2.1B.new/src/kjc/JFieldDeclaration.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JFieldDeclaration.java kjc-suite-2.1B.new/src/kjc/JFieldDeclaration.java
--- kjc-suite-2.1B/src/kjc/JFieldDeclaration.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JFieldDeclaration.java 2004-01-28 07:50:58.000000000 +0100
-@@ -178,6 +178,12 @@
++++ kjc-suite-2.1B.new/src/kjc/JFieldDeclaration.java 2004-02-14 13:29:37.000000000 +0100
+@@ -177,7 +177,20 @@
+ public void analyse(CBodyContext context) throws PositionedError {
TypeFactory factory = context.getTypeFactory();
++ // This is special case where a crazy programmer made this variable
++ // depends on itself. Sun is gen
++ if (variable.getValue() != null &&
++ variable.getValue().dependsOnField(getField())) {
++ ((CSourceField)getField()).setFullyDeclared(true);
++ }
++
variable.analyse(context);
+ if (!variable.isDefinitionAnalysed())
+ {
@@ -366,7 +544,7 @@
// JLS 8.1.2 : Inner classes may inherit static members that
// are not compile-time constants even though they may not declare
// them. Inner classes may not declare static members, unless
-@@ -211,6 +217,8 @@
+@@ -211,6 +224,8 @@
}
}
@@ -375,9 +553,9 @@
if (hasInitializer()) {
context.setFieldInfo(((CSourceField)getField()).getPosition(), CVariableInfo.INITIALIZED);
}
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JInitializerDeclaration.java kjc-suite-2.1B.new/src/kjc/JInitializerDeclaration.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JInitializerDeclaration.java kjc-suite-2.1B.new/src/kjc/JInitializerDeclaration.java
--- kjc-suite-2.1B/src/kjc/JInitializerDeclaration.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JInitializerDeclaration.java 2004-01-28 17:49:16.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JInitializerDeclaration.java 2004-02-13 21:23:15.000000000 +0100
@@ -22,6 +22,7 @@
import at.dms.compiler.PositionedError;
@@ -422,9 +600,9 @@
}
// ----------------------------------------------------------------------
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JInterfaceDeclaration.java kjc-suite-2.1B.new/src/kjc/JInterfaceDeclaration.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JInterfaceDeclaration.java kjc-suite-2.1B.new/src/kjc/JInterfaceDeclaration.java
--- kjc-suite-2.1B/src/kjc/JInterfaceDeclaration.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JInterfaceDeclaration.java 2004-01-27 21:11:27.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JInterfaceDeclaration.java 2004-02-13 21:23:15.000000000 +0100
@@ -158,19 +158,20 @@
* Check that initializers are correct
* @exception PositionedError an error with reference to the source file
@@ -450,9 +628,20 @@
}
/**
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JMinusExpression.java kjc-suite-2.1B.new/src/kjc/JMinusExpression.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JLogicalComplementExpression.java kjc-suite-2.1B.new/src/kjc/JLogicalComplementExpression.java
+--- kjc-suite-2.1B/src/kjc/JLogicalComplementExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JLogicalComplementExpression.java 2004-02-13 21:51:38.000000000 +0100
+@@ -63,6 +63,7 @@
+ expr = expr.analyse(context);
+ check(context, expr.getType(factory) == booleanType, KjcMessages.UNARY_BADTYPE_LNOT, expr.getType(factory));
+ type = booleanType;
++
+ if (expr.isConstant()) {
+ return new JBooleanLiteral(getTokenReference(), !expr.booleanValue());
+ } else {
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JMinusExpression.java kjc-suite-2.1B.new/src/kjc/JMinusExpression.java
--- kjc-suite-2.1B/src/kjc/JMinusExpression.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JMinusExpression.java 2004-01-25 19:42:30.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JMinusExpression.java 2004-02-13 21:23:15.000000000 +0100
@@ -62,6 +62,7 @@
left = left.analyse(context);
@@ -461,9 +650,40 @@
try {
type = computeType(context, left.getType(factory), right.getType(factory));
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JMultExpression.java kjc-suite-2.1B.new/src/kjc/JMultExpression.java
+@@ -69,6 +70,9 @@
+ throw e.addPosition(getTokenReference());
+ }
+
++ if (!fully_analysed)
++ return this;
++
+ left = left.convertType(context, type);
+ right = right.convertType(context, type);
+
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JModuloExpression.java kjc-suite-2.1B.new/src/kjc/JModuloExpression.java
+--- kjc-suite-2.1B/src/kjc/JModuloExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JModuloExpression.java 2004-02-13 21:23:15.000000000 +0100
+@@ -63,6 +63,7 @@
+
+ left = left.analyse(context);
+ right = right.analyse(context);
++ fully_analysed = left.isFullyAnalysed() && right.isFullyAnalysed();
+
+ try {
+ type = computeType(context, left.getType(factory), right.getType(factory));
+@@ -70,6 +71,9 @@
+ throw e.addPosition(getTokenReference());
+ }
+
++ if (!fully_analysed)
++ return this;
++
+ left = left.convertType(context, type);
+ right = right.convertType(context, type);
+
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JMultExpression.java kjc-suite-2.1B.new/src/kjc/JMultExpression.java
--- kjc-suite-2.1B/src/kjc/JMultExpression.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JMultExpression.java 2004-01-25 19:43:00.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JMultExpression.java 2004-02-13 21:23:15.000000000 +0100
@@ -63,6 +63,7 @@
left = left.analyse(context);
@@ -472,9 +692,40 @@
try {
type = computeType(context, left.getType(factory), right.getType(factory));
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JReturnStatement.java kjc-suite-2.1B.new/src/kjc/JReturnStatement.java
+@@ -70,6 +71,9 @@
+ throw e.addPosition(getTokenReference());
+ }
+
++ if (!fully_analysed)
++ return this;
++
+ left = left.convertType(context, type);
+ right = right.convertType(context, type);
+
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JRelationalExpression.java kjc-suite-2.1B.new/src/kjc/JRelationalExpression.java
+--- kjc-suite-2.1B/src/kjc/JRelationalExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JRelationalExpression.java 2004-02-13 21:47:37.000000000 +0100
+@@ -66,6 +66,7 @@
+
+ left = left.analyse(context);
+ right = right.analyse(context);
++ fully_analysed = left.isFullyAnalysed() && right.isFullyAnalysed();
+
+ check(context,
+ left.getType(factory).isNumeric() && right.getType(factory).isNumeric(),
+@@ -73,6 +74,9 @@
+
+ type = context.getTypeFactory().getPrimitiveType(TypeFactory.PRM_BOOLEAN);
+
++ if (!fully_analysed)
++ return this;
++
+ CType promoted = CNumericType.binaryPromote(context, left.getType(factory), right.getType(factory));
+ left = left.convertType(context, promoted);
+ right = right.convertType(context, promoted);
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JReturnStatement.java kjc-suite-2.1B.new/src/kjc/JReturnStatement.java
--- kjc-suite-2.1B/src/kjc/JReturnStatement.java 2002-07-15 20:53:33.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JReturnStatement.java 2004-01-27 20:34:05.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JReturnStatement.java 2004-02-13 21:23:15.000000000 +0100
@@ -88,7 +88,8 @@
check(context,
expr.isAssignableTo(expressionContext, returnType),
@@ -485,9 +736,30 @@
} else {
check(context, returnType.getTypeID() == TID_VOID, KjcMessages.RETURN_EMPTY_NONVOID);
}
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JTryCatchStatement.java kjc-suite-2.1B.new/src/kjc/JTryCatchStatement.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JShiftExpression.java kjc-suite-2.1B.new/src/kjc/JShiftExpression.java
+--- kjc-suite-2.1B/src/kjc/JShiftExpression.java 2002-07-15 20:53:32.000000000 +0200
++++ kjc-suite-2.1B.new/src/kjc/JShiftExpression.java 2004-02-14 13:25:36.000000000 +0100
+@@ -67,6 +67,7 @@
+
+ left = left.analyse(context);
+ right = right.analyse(context);
++ fully_analysed = left.isFullyAnalysed() && right.isFullyAnalysed();
+
+ try {
+ type = computeType(context, left.getType(factory), right.getType(factory));
+@@ -74,6 +75,9 @@
+ throw e.addPosition(getTokenReference());
+ }
+
++ if (!fully_analysed)
++ return this;
++
+ left = left.convertType(context, type);
+ right = right.convertType(context, context.getTypeFactory().getPrimitiveType(TypeFactory.PRM_INT));
+
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JTryCatchStatement.java kjc-suite-2.1B.new/src/kjc/JTryCatchStatement.java
--- kjc-suite-2.1B/src/kjc/JTryCatchStatement.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JTryCatchStatement.java 2004-01-28 20:48:05.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JTryCatchStatement.java 2004-02-13 21:23:15.000000000 +0100
@@ -21,6 +21,7 @@
package at.dms.kjc;
@@ -516,9 +788,9 @@
+ private Hashtable saveThrowables;
+ private boolean analysed;
}
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JTypeDeclaration.java kjc-suite-2.1B.new/src/kjc/JTypeDeclaration.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JTypeDeclaration.java kjc-suite-2.1B.new/src/kjc/JTypeDeclaration.java
--- kjc-suite-2.1B/src/kjc/JTypeDeclaration.java 2002-07-15 20:53:33.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JTypeDeclaration.java 2004-01-27 20:58:22.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JTypeDeclaration.java 2004-02-13 21:23:15.000000000 +0100
@@ -340,7 +340,7 @@
*
* @exception PositionedError Error catched as soon as possible
@@ -536,10 +808,10 @@
}
// ----------------------------------------------------------------------
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JUnaryExpression.java kjc-suite-2.1B.new/src/kjc/JUnaryExpression.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JUnaryExpression.java kjc-suite-2.1B.new/src/kjc/JUnaryExpression.java
--- kjc-suite-2.1B/src/kjc/JUnaryExpression.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JUnaryExpression.java 2004-01-25 19:44:49.000000000 +0100
-@@ -53,6 +53,10 @@
++++ kjc-suite-2.1B.new/src/kjc/JUnaryExpression.java 2004-02-13 21:23:15.000000000 +0100
+@@ -53,6 +53,14 @@
return type;
}
@@ -547,12 +819,16 @@
+ return expr.isFullyAnalysed();
+ }
+
++ public boolean dependsOnField(CField field) {
++ return expr.dependsOnField(field);
++ }
++
// ----------------------------------------------------------------------
// DATA MEMBERS
// ----------------------------------------------------------------------
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JUnaryMinusExpression.java kjc-suite-2.1B.new/src/kjc/JUnaryMinusExpression.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JUnaryMinusExpression.java kjc-suite-2.1B.new/src/kjc/JUnaryMinusExpression.java
--- kjc-suite-2.1B/src/kjc/JUnaryMinusExpression.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JUnaryMinusExpression.java 2004-01-25 20:10:41.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JUnaryMinusExpression.java 2004-02-13 21:51:10.000000000 +0100
@@ -49,7 +49,8 @@
// ----------------------------------------------------------------------
// SEMANTIC ANALYSIS
@@ -563,32 +839,34 @@
/**
* Analyses the expression (semantically).
* @param context the analysis context
-@@ -68,7 +69,8 @@
+@@ -68,6 +69,9 @@
expr = expr.analyse(context);
check(context, expr.getType(factory).isNumeric(), KjcMessages.UNARY_BADTYPE_PM, expr.getType(factory));
type = CNumericType.unaryPromote(context, expr.getType(factory));
-- expr = expr.convertType(context, type);
-+ if (expr.isFullyAnalysed())
-+ expr = expr.convertType(context, type);
++ if (!expr.isFullyAnalysed())
++ return this;
++
+ expr = expr.convertType(context, type);
if (expr.isConstant()) {
- switch (type.getTypeID()) {
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JUnaryPlusExpression.java kjc-suite-2.1B.new/src/kjc/JUnaryPlusExpression.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JUnaryPlusExpression.java kjc-suite-2.1B.new/src/kjc/JUnaryPlusExpression.java
--- kjc-suite-2.1B/src/kjc/JUnaryPlusExpression.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JUnaryPlusExpression.java 2004-01-25 20:10:35.000000000 +0100
-@@ -61,7 +61,8 @@
++++ kjc-suite-2.1B.new/src/kjc/JUnaryPlusExpression.java 2004-02-13 21:51:26.000000000 +0100
+@@ -61,8 +61,10 @@
expr = expr.analyse(context);
check(context, expr.getType(factory).isNumeric(), KjcMessages.UNARY_BADTYPE_PM, expr.getType(factory));
type = CNumericType.unaryPromote(context, expr.getType(factory));
- expr = expr.convertType(context, type);
-+ if (expr.isFullyAnalysed())
-+ expr = expr.convertType(context, type);
++ if (!expr.isFullyAnalysed())
++ return this;
++ expr = expr.convertType(context, type);
return expr;
}
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/JVariableDefinition.java kjc-suite-2.1B.new/src/kjc/JVariableDefinition.java
+
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/JVariableDefinition.java kjc-suite-2.1B.new/src/kjc/JVariableDefinition.java
--- kjc-suite-2.1B/src/kjc/JVariableDefinition.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/JVariableDefinition.java 2004-01-28 17:52:20.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/JVariableDefinition.java 2004-02-13 21:23:15.000000000 +0100
@@ -142,8 +142,17 @@
check(context,
expr.isAssignableTo(context, type),
@@ -616,27 +894,9 @@
+
+ protected boolean analysed_definition;
}
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/KjcScanner.java kjc-suite-2.1B.new/src/kjc/KjcScanner.java
---- kjc-suite-2.1B/src/kjc/KjcScanner.java 2004-01-29 19:10:58.000000000 +0100
-+++ kjc-suite-2.1B.new/src/kjc/KjcScanner.java 2004-01-28 20:56:26.000000000 +0100
-@@ -1,4 +1,4 @@
--/* The following code was generated by JFlex 1.3.2 on 29-Jan-04 7:10:57 PM */
-+/* The following code was generated by JFlex 1.3.2 on 28-Jan-04 8:56:25 PM */
-
- /*
- * Copyright (C) 1990-2001 DMS Decision Management Systems Ges.m.b.H.
-@@ -37,7 +37,7 @@
- /**
- * This class is a scanner generated by
- * <a href="http://www.jflex.de/">JFlex</a> 1.3.2
-- * on 29-Jan-04 7:10:57 PM from the specification file
-+ * on 28-Jan-04 8:56:25 PM from the specification file
- * <tt>file:/mnt/external2/guilhem_ext2/PROJECTS/kaffe-extras/build/kjc-suite-2.1B/src/kjc/Kjc.flex</tt>
- */
- public class KjcScanner extends at.dms.compiler.tools.antlr.extra.Scanner implements KjcTokenTypes {
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/Main.java kjc-suite-2.1B.new/src/kjc/Main.java
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/Main.java kjc-suite-2.1B.new/src/kjc/Main.java
--- kjc-suite-2.1B/src/kjc/Main.java 2002-07-15 20:53:32.000000000 +0200
-+++ kjc-suite-2.1B.new/src/kjc/Main.java 2004-01-27 21:08:46.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/Main.java 2004-02-13 21:23:15.000000000 +0100
@@ -171,13 +171,18 @@
return false;
}
@@ -677,9 +937,9 @@
}
}
-diff -N -x Kjc.java -x '*~' -ur kjc-suite-2.1B/src/kjc/Makefile kjc-suite-2.1B.new/src/kjc/Makefile
---- kjc-suite-2.1B/src/kjc/Makefile 2004-01-29 19:10:43.000000000 +0100
-+++ kjc-suite-2.1B.new/src/kjc/Makefile 2004-01-27 21:03:26.000000000 +0100
+diff -N -ur -x KjcParser.java -x KjcScanner.java -x '*~' kjc-suite-2.1B/src/kjc/Makefile kjc-suite-2.1B.new/src/kjc/Makefile
+--- kjc-suite-2.1B/src/kjc/Makefile 2004-02-14 13:55:21.000000000 +0100
++++ kjc-suite-2.1B.new/src/kjc/Makefile 2004-02-13 21:23:15.000000000 +0100
@@ -54,7 +54,8 @@
CSourceMethod CStdType \
CSwitchBodyContext CSwitchGroupContext \