aboutsummaryrefslogtreecommitdiffstats
path: root/src/classes/com/sun/gluegen/cgram/HeaderParser.g
diff options
context:
space:
mode:
Diffstat (limited to 'src/classes/com/sun/gluegen/cgram/HeaderParser.g')
-rw-r--r--src/classes/com/sun/gluegen/cgram/HeaderParser.g52
1 files changed, 20 insertions, 32 deletions
diff --git a/src/classes/com/sun/gluegen/cgram/HeaderParser.g b/src/classes/com/sun/gluegen/cgram/HeaderParser.g
index 212e56091..78ba5c54a 100644
--- a/src/classes/com/sun/gluegen/cgram/HeaderParser.g
+++ b/src/classes/com/sun/gluegen/cgram/HeaderParser.g
@@ -56,17 +56,6 @@ options {
/** Name assigned to a anonymous EnumType (e.g., "enum { ... }"). */
public static final String ANONYMOUS_ENUM_NAME = "<anonymous>";
- /** Set the machine description for this HeaderParser. Must be
- done before parsing. */
- public void setMachineDescription(MachineDescription machDesc) {
- this.machDesc = machDesc;
- }
-
- /** Returns the MachineDescription this HeaderParser uses. */
- public MachineDescription machineDescription() {
- return machDesc;
- }
-
/** Set the dictionary mapping typedef names to types for this
HeaderParser. Must be done before parsing. */
public void setTypedefDictionary(TypeDictionary dict) {
@@ -130,7 +119,7 @@ options {
int cvAttrs) {
CompoundType t = (CompoundType) structDictionary.get(typeName);
if (t == null) {
- t = new CompoundType(null, -1, kind, cvAttrs);
+ t = new CompoundType(null, null, kind, cvAttrs);
t.setStructName(typeName);
structDictionary.put(typeName, t);
}
@@ -207,7 +196,6 @@ options {
}
}
- private MachineDescription machDesc;
private boolean doDeclaration; // Used to only process function typedefs
private String declId;
private List parameters;
@@ -242,7 +230,7 @@ options {
private void processDeclaration(Type returnType) {
if (doDeclaration) {
- FunctionSymbol sym = new FunctionSymbol(declId, new FunctionType(null, -1, returnType, 0));
+ FunctionSymbol sym = new FunctionSymbol(declId, new FunctionType(null, null, returnType, 0));
if (parameters != null) { // handle funcs w/ empty parameter lists (e.g., "foo()")
for (Iterator iter = parameters.iterator(); iter.hasNext(); ) {
ParameterDeclaration pd = (ParameterDeclaration) iter.next();
@@ -272,13 +260,13 @@ options {
// FIXME: this doesn't take into account struct alignment, which may be necessary
// See also FIXMEs in ArrayType.java
int len = parseIntConstExpr(t);
- tb.setType(canonicalize(new ArrayType(tb.type(), len * tb.type().getSize(), len, 0)));
+ tb.setType(canonicalize(new ArrayType(tb.type(), SizeThunk.mul(SizeThunk.constant(len), tb.type().getSize()), len, 0)));
return;
} catch (RecognitionException e) {
// Fall through
}
}
- tb.setType(canonicalize(new PointerType(machDesc.pointerSizeInBytes(),
+ tb.setType(canonicalize(new PointerType(SizeThunk.POINTER,
tb.type(),
0)));
}
@@ -301,7 +289,7 @@ options {
}
if (enumType == null) {
- enumType = new EnumType(enumTypeName, machDesc.longSizeInBytes());
+ enumType = new EnumType(enumTypeName, SizeThunk.LONG);
}
return enumType;
@@ -348,7 +336,7 @@ declarator[TypeBox tb] returns [String s] {
doDeclaration();
} else if ( funcPointerName != null ) {
/* TypeBox becomes function pointer in this case */
- FunctionType ft = new FunctionType(null, -1, tb.type(), 0);
+ FunctionType ft = new FunctionType(null, null, tb.type(), 0);
if (params == null) {
// If the function pointer has no declared parameters, it's a
// void function. I'm not sure if the parameter name is
@@ -362,7 +350,7 @@ declarator[TypeBox tb] returns [String s] {
ft.addArgument(pd.type(), pd.id());
}
}
- tb.setType(canonicalize(new PointerType(machDesc.pointerSizeInBytes(),
+ tb.setType(canonicalize(new PointerType(SizeThunk.POINTER,
ft,
0)));
s = funcPointerName;
@@ -431,7 +419,7 @@ declSpecifiers returns [TypeBox tb] {
{
if (t == null &&
(x & (SIGNED | UNSIGNED)) != 0) {
- t = new IntType("int", machDesc.intSizeInBytes(), ((x & UNSIGNED) != 0), attrs2CVAttrs(x));
+ t = new IntType("int", SizeThunk.INT, ((x & UNSIGNED) != 0), attrs2CVAttrs(x));
}
tb = new TypeBox(t, ((x & TYPEDEF) != 0));
}
@@ -465,13 +453,13 @@ typeSpecifier[int attributes] returns [Type t] {
boolean unsigned = ((attributes & UNSIGNED) != 0);
}
: "void" { t = new VoidType(cvAttrs); }
- | "char" { t = new IntType("char" , machDesc.charSizeInBytes(), unsigned, cvAttrs); }
- | "short" { t = new IntType("short", machDesc.shortSizeInBytes(), unsigned, cvAttrs); }
- | "int" { t = new IntType("int" , machDesc.intSizeInBytes(), unsigned, cvAttrs); }
- | "long" { t = new IntType("long" , machDesc.longSizeInBytes(), unsigned, cvAttrs); }
- | "__int64" { t = new IntType("__int64", machDesc.int64SizeInBytes(), unsigned, cvAttrs); }
- | "float" { t = new FloatType("float", machDesc.floatSizeInBytes(), cvAttrs); }
- | "double" { t = new DoubleType("double", machDesc.doubleSizeInBytes(), cvAttrs); }
+ | "char" { t = new IntType("char" , SizeThunk.CHAR, unsigned, cvAttrs); }
+ | "short" { t = new IntType("short", SizeThunk.SHORT, unsigned, cvAttrs); }
+ | "int" { t = new IntType("int" , SizeThunk.INT, unsigned, cvAttrs); }
+ | "long" { t = new IntType("long" , SizeThunk.LONG, unsigned, cvAttrs); }
+ | "__int64" { t = new IntType("__int64", SizeThunk.INT64, unsigned, cvAttrs); }
+ | "float" { t = new FloatType("float", SizeThunk.FLOAT, cvAttrs); }
+ | "double" { t = new DoubleType("double", SizeThunk.DOUBLE, cvAttrs); }
| t = structSpecifier[cvAttrs] ( attributeDecl )*
| t = unionSpecifier [cvAttrs] ( attributeDecl )*
| t = enumSpecifier [cvAttrs]
@@ -507,7 +495,7 @@ structOrUnionBody[CompoundTypeKind kind, int cvAttrs] returns [CompoundType t] {
t = (CompoundType) canonicalize(lookupInStructDictionary(id.getText(), kind, cvAttrs));
} ( structDeclarationList[t] )?
RCURLY { t.setBodyParsed(); }
- | LCURLY { t = new CompoundType(null, -1, kind, cvAttrs); }
+ | LCURLY { t = new CompoundType(null, null, kind, cvAttrs); }
( structDeclarationList[t] )?
RCURLY { t.setBodyParsed(); }
| id2:ID { t = (CompoundType) canonicalize(lookupInStructDictionary(id2.getText(), kind, cvAttrs)); }
@@ -528,7 +516,7 @@ structDeclaration[CompoundType containingType] {
CompoundType ct = t.asCompound();
if (ct.isUnion()) {
// Anonymous union
- containingType.addField(new Field(null, t, -1));
+ containingType.addField(new Field(null, t, null));
}
}
}
@@ -544,7 +532,7 @@ specifierQualifierList returns [Type t] {
)+ {
if (t == null &&
(x & (SIGNED | UNSIGNED)) != 0) {
- t = new IntType("int", machDesc.intSizeInBytes(), ((x & UNSIGNED) != 0), attrs2CVAttrs(x));
+ t = new IntType("int", SizeThunk.INT, ((x & UNSIGNED) != 0), attrs2CVAttrs(x));
}
}
;
@@ -563,7 +551,7 @@ structDeclarator[CompoundType containingType, Type t] returns [boolean addedAny]
}
:
#( NStructDeclarator
- ( s = declarator[tb] { containingType.addField(new Field(s, tb.type(), -1)); addedAny = true; } )?
+ ( s = declarator[tb] { containingType.addField(new Field(s, tb.type(), null)); addedAny = true; } )?
( COLON expr { /* FIXME: bit types not handled yet */ } ) ?
( attributeDecl )*
)
@@ -659,7 +647,7 @@ pointerGroup[TypeBox tb] { int x = 0; int y = 0; }
{
//System.err.println("IN PTR GROUP: TB=" + tb);
if (tb != null) {
- tb.setType(canonicalize(new PointerType(machDesc.pointerSizeInBytes(),
+ tb.setType(canonicalize(new PointerType(SizeThunk.POINTER,
tb.type(),
attrs2CVAttrs(x))));
}