Skip to content

Commit ac7a65c

Browse files
author
dlsmith
committed
Added Type class hierarchy for type representation (rather than Class<?>); modified build script to run ASTGen; cleaned up parser build script code using javacc 4.0 features
git-svn-id: file:///tmp/test-svn/trunk@3810 fe72c1cf-3628-48e9-8b72-1c46755d3cff
1 parent d484768 commit ac7a65c

File tree

6 files changed

+118
-12
lines changed

6 files changed

+118
-12
lines changed

dynamicjava/build.xml

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@
7878
in the "Source-generating Targets" section and the "clean" target. -->
7979
<property name="dynamicjava-parser" value="${src-working-dir}/parser/grammar.jj" />
8080
<property name="dynamicjava-parser-dir" value="${src-working-dir}/parser/impl" />
81+
<property name="type-ast" value="${src-working-dir}/interpreter/Type.ast" />
82+
<property name="type-ast-dir" value="${src-working-dir}/interpreter/type" />
8183
<property name="code-status-source" value="${src-working-dir}/CodeStatus.orig" />
8284
<property name="code-status-target" value="${src-working-dir}/CodeStatus.java" />
8385
<property name="version-source" value="${src-working-dir}/Version.orig" />
@@ -107,6 +109,9 @@
107109

108110
<fileset id="libs" dir="lib" includes="*.jar" /> <!-- Only include jars that are at the top level (not in buildlib) -->
109111

112+
<!-- ASTGen task, used to generate Java source representing an AST with visitors from a single .ast file -->
113+
<taskdef name="astgen" classpath="lib/buildlib/astgen.jar" classname="edu.rice.cs.astgen.AntTask" />
114+
110115
<!-- Retroweaver task, used to convert Java 1.5 class files to be compatible with an earlier JVM;
111116
also checks class references to insure that there are no dependencies on 1.5 APIs -->
112117
<taskdef name="retroweaver" classpath="lib/buildlib/retroweaver-ex.jar"
@@ -275,6 +280,10 @@
275280
<echo message="Processing ${version-source}" />
276281
<copy file="${version-source}" tofile="${version-target}" filtering="yes" />
277282

283+
<antcall target="generate-ast" inheritall="false">
284+
<param name="generate-sourcefile" value="${type-ast}" />
285+
<param name="generate-dir" value="${type-ast-dir}" />
286+
</antcall>
278287
<antcall target="generate-parser">
279288
<param name="generate-sourcefile" value="${dynamicjava-parser}" />
280289
<param name="generate-dir" value="${dynamicjava-parser-dir}" />
@@ -285,28 +294,27 @@
285294
already-generated has *not* been set -->
286295
<target name="generate-parser" depends="check-generate-dir-from-file" unless="already-generated">
287296
<echo message="Processing ${generate-sourcefile}" />
288-
<!-- Unfortunately, dependset doesn't delete nested directories, so we have
289-
to clean up the empty directories here -->
290297
<delete dir="${generate-dir}" />
291298
<mkdir dir="${generate-dir}" />
292299
<javacc target="${generate-sourcefile}" outputdirectory="${generate-dir}" javacchome="${javacc-home}" />
293-
294300
<!-- Fix problems in generated code that cause compiler warnings -->
295301
<replace file="${generate-dir}/JavaCharStream.java"
296302
token="public int getColumn()"
297303
value="@Deprecated public int getColumn()" />
298304
<replace file="${generate-dir}/JavaCharStream.java"
299305
token="public int getLine()"
300306
value="@Deprecated public int getLine()" />
301-
<!-- We want to replace the next two in the parser file, but we don't have easy access to its name,
302-
so we just search the whole directory instead -->
303-
<replace dir="${generate-dir}"
304-
token="java.util.Vector jj_expentries = new java.util.Vector()"
305-
value="java.util.Vector&lt;int[]&gt; jj_expentries = new java.util.Vector&lt;int[]&gt;()" />
306-
<replace dir="${generate-dir}"
307-
token="java.util.Enumeration e = jj_expentries.elements()"
308-
value="java.util.Enumeration&lt;int[]&gt; e = jj_expentries.elements()" />
307+
</target>
308+
309+
<!-- Assumes that the properties generate-sourcefile and generate-dir have been set, and that
310+
already-generated has *not* been set -->
311+
<target name="generate-ast" depends="check-generate-dir-from-file" unless="already-generated">
312+
<echo message="Processing ${generate-sourcefile}" />
313+
<delete dir="${generate-dir}" />
314+
<mkdir dir="${generate-dir}" />
315+
<astgen file="${generate-sourcefile}" />
309316
</target>
317+
310318

311319

312320
<!-- *******************
@@ -625,6 +633,7 @@
625633
<delete dir="classes" failonerror="${clean-can-fail}" />
626634
<delete dir="docs" failonerror="${clean-can-fail}" />
627635
<delete dir="${dynamicjava-parser-dir}" failonerror="${clean-can-fail}" />
636+
<delete dir="${type-ast-dir}" failonerror="${clean-can-fail}" />
628637

629638
<delete failonerror="${clean-can-fail}">
630639
<fileset dir="testFiles">
110 Bytes
Binary file not shown.

dynamicjava/lib/readme.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ buildlib/retroweaver-ex.jar: Retroweaver 1.1, patched with SourceForge patch #12
1313
and some modifications by Dan Smith to support incremental
1414
reference verification.
1515

16-
buildlib/astgen.jar: astgen-20060227-1521
16+
buildlib/astgen.jar: astgen-20060419-1726
1717

1818
buildlib/junit.jar: JUnit 3.8.1
1919

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* Represents a Java type.
3+
*/
4+
5+
visitmethod apply;
6+
visitormethodprefix for;
7+
tabsize 2;
8+
outputdir type;
9+
allownulls no;
10+
addgetterprefixes no;
11+
12+
package koala.dynamicjava.interpreter.type;
13+
14+
import koala.dynamicjava.interpreter.TypeVariable;
15+
16+
begin ast;
17+
18+
abstract Type();
19+
20+
abstract PrimitiveType();
21+
BooleanType();
22+
abstract NumericType();
23+
abstract IntegralType();
24+
CharType();
25+
abstract IntegerType();
26+
ByteType();
27+
ShortType();
28+
IntType();
29+
LongType();
30+
abstract FloatingPointType();
31+
FloatType();
32+
DoubleType();
33+
34+
abstract ReferenceType();
35+
NullType();
36+
abstract ArrayType(Type ofType);
37+
SimpleArrayType();
38+
VarargArrayType();
39+
abstract ClassType(Class<?> ofClass);
40+
SimpleClassType();
41+
RawClassType();
42+
ParameterizedClassType(Iterable<Type> typeArguments);
43+
44+
VariableType(TypeVariable ofVariable);
45+
IntersectionType(Iterable<Type> ofTypes);
46+
47+
WildcardType(Type upperBound, Type lowerBound);
48+
VoidType();
49+
50+
TopType();
51+
BottomType();
52+
53+
end;
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package koala.dynamicjava.interpreter;
2+
3+
import koala.dynamicjava.interpreter.type.Type;
4+
5+
/**
6+
* Represents a type variable. For simplicity, two kinds of variables may be represented.
7+
* Declared type variables have a name; generated type variables are unnamed. In both
8+
* cases, equality is defined in terms of identity, rather than by equating names or other
9+
* parameters.
10+
*/
11+
public class TypeVariable {
12+
13+
private final boolean _generated;
14+
private final String _name;
15+
private final Type _upperBound;
16+
private final Type _lowerBound;
17+
18+
public TypeVariable(Type upperBound, Type lowerBound) {
19+
_generated = true;
20+
_name = null;
21+
_upperBound = upperBound;
22+
_lowerBound = lowerBound;
23+
}
24+
25+
public TypeVariable(String name, Type upperBound, Type lowerBound) {
26+
_generated = false;
27+
_name = name;
28+
_upperBound = upperBound;
29+
_lowerBound = lowerBound;
30+
}
31+
32+
public boolean generated() { return _generated; }
33+
34+
public String name() {
35+
if (_generated) { throw new IllegalArgumentException("Variable is unnamed"); }
36+
else { return _name; }
37+
}
38+
39+
public Type upperBound() { return _upperBound; }
40+
41+
public Type lowerBound() { return _lowerBound; }
42+
43+
}

dynamicjava/src/koala/dynamicjava/parser/grammar.jj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
options {
55
JAVA_UNICODE_ESCAPE = true;
66
STATIC = false;
7+
JDK_VERSION = "1.5";
78
}
89

910
PARSER_BEGIN(Parser)

0 commit comments

Comments
 (0)