From d2f50069d279ce86465c935c03aa81f88521e98b Mon Sep 17 00:00:00 2001 From: "Schubert, Julia (WWI2012D)" Date: Thu, 25 Jun 2015 23:05:51 +0200 Subject: [PATCH] NewArray implementiert, scheitert daran, dass der Parser keine Array Initialisierung annimmt. --- .../syntaxtree/statement/NewArray.java | 315 +++++++++--------- test/bytecode/NewArray.jav | 10 + test/bytecode/NewArrayTest.java | 45 +++ 3 files changed, 217 insertions(+), 153 deletions(-) create mode 100644 test/bytecode/NewArray.jav create mode 100644 test/bytecode/NewArrayTest.java diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java index 6c60bc9c..1461c248 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/NewArray.java @@ -1,153 +1,162 @@ -// ino.module.NewArray.8641.package -package de.dhbwstuttgart.syntaxtree.statement; -// ino.end -// ino.module.NewArray.8641.import -import java.util.Hashtable; - -import org.apache.bcel.generic.ClassGen; - -import de.dhbwstuttgart.typeinference.Menge; -import de.dhbwstuttgart.logger.Logger; -import de.dhbwstuttgart.myexception.CTypeReconstructionException; -import de.dhbwstuttgart.myexception.JVMCodeException; -import de.dhbwstuttgart.syntaxtree.Class; -import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; -import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; -import de.dhbwstuttgart.syntaxtree.type.Type; -import de.dhbwstuttgart.typeinference.ConstraintsSet; -import de.dhbwstuttgart.typeinference.JavaCodeResult; -import de.dhbwstuttgart.typeinference.ResultSet; -import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; -import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; - - - - -// ino.class.NewArray.25787.declaration -public class NewArray extends Expr -// ino.end -// ino.class.NewArray.25787.body -{ - // ino.method.NewArray.25791.definition - public NewArray(int offset,int variableLength) - // ino.end - // ino.method.NewArray.25791.body - { - super(offset,variableLength); - } - // ino.end - // ino.attribute.type.25794.declaration - private Type type; - // ino.end - // ino.attribute.expr.25797.declaration - public Menge expr = new Menge(); - // ino.end - // ino.attribute.parserlog.25800.declaration - protected static Logger parserlog = Logger.getLogger("parser"); - // ino.end - - - // ino.method.getType.25803.defdescription type=javadoc - /** - * Author: J�rg B�uerle
- * @return Returns the type. - */ - // ino.end - // ino.method.getType.25803.definition - public Type getType() - // ino.end - // ino.method.getType.25803.body - { - return type; - } - // ino.end - - // ino.method.setType.25806.defdescription type=javadoc - /** - * Author: J�rg B�uerle
- * @param type The type to set. - */ - // ino.end - // ino.method.setType.25806.definition - public void setType(Type type) - // ino.end - // ino.method.setType.25806.body - { - this.type = type; - } - // ino.end - - // ino.method.get_Name.25809.definition - public String get_Name() - // ino.end - // ino.method.get_Name.25809.body - { - return null; - } - // ino.end - - /* - // ino.method.sc_check.25812.definition - public void sc_check(Menge classname, Hashtable bh, Hashtable ch,boolean ext, Hashtable parach, Hashtable parabh) - // ino.end - // ino.method.sc_check.25812.body - { - if(ext) - parserlog.debug(" ---NewArray---"); - } - // ino.end - */ - - // ino.method.get_codegen_Array_Type.25815.definition - public int get_codegen_Array_Type() - throws JVMCodeException - // ino.end - // ino.method.get_codegen_Array_Type.25815.body - { - if(this.getType().equals("boolean")) return 4; - else if(this.getType().equals("char")) return 5; - else if(this.getType().equals("float")) return 6; - else if(this.getType().equals("double")) return 7; - else if(this.getType().equals("byte")) return 8; - else if(this.getType().equals("short")) return 9; - else if(this.getType().equals("int")) return 10; - else if(this.getType().equals("long")) return 11; - else throw new JVMCodeException("JVMCodeException: NewArray: int get_codegen_Array_Type()"); - } - // ino.end - - // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.definition - public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) - // ino.end - // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.body - { - } - // ino.end - - @Override - public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { - // TODO Auto-generated method stub - return null; - } - - @Override -public JavaCodeResult printJavaCode(ResultSet resultSet) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Menge getChildren() { - Menge ret = new Menge(); - ret.addAll(this.expr); - return ret; - } - - @Override - public void genByteCode(ClassGen _cg) { - // TODO Auto-generated method stub - - } - -} -// ino.end +// ino.module.NewArray.8641.package +package de.dhbwstuttgart.syntaxtree.statement; +// ino.end +// ino.module.NewArray.8641.import +import java.util.Hashtable; + +import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.InstructionFactory; +import org.apache.bcel.generic.InstructionList; + +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.logger.Logger; +import de.dhbwstuttgart.myexception.CTypeReconstructionException; +import de.dhbwstuttgart.myexception.JVMCodeException; +import de.dhbwstuttgart.syntaxtree.Class; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.type.Type; +import de.dhbwstuttgart.typeinference.ConstraintsSet; +import de.dhbwstuttgart.typeinference.JavaCodeResult; +import de.dhbwstuttgart.typeinference.ResultSet; +import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions; +import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet; + + + + +// ino.class.NewArray.25787.declaration +public class NewArray extends Expr +// ino.end +// ino.class.NewArray.25787.body +{ + // ino.method.NewArray.25791.definition + public NewArray(int offset,int variableLength) + // ino.end + // ino.method.NewArray.25791.body + { + super(offset,variableLength); + } + // ino.end + // ino.attribute.type.25794.declaration + private Type type; + // ino.end + // ino.attribute.expr.25797.declaration + public Menge expr = new Menge(); + // ino.end + // ino.attribute.parserlog.25800.declaration + protected static Logger parserlog = Logger.getLogger("parser"); + // ino.end + + + // ino.method.getType.25803.defdescription type=javadoc + /** + * Author: J�rg B�uerle
+ * @return Returns the type. + */ + // ino.end + // ino.method.getType.25803.definition + public Type getType() + // ino.end + // ino.method.getType.25803.body + { + return type; + } + // ino.end + + // ino.method.setType.25806.defdescription type=javadoc + /** + * Author: J�rg B�uerle
+ * @param type The type to set. + */ + // ino.end + // ino.method.setType.25806.definition + public void setType(Type type) + // ino.end + // ino.method.setType.25806.body + { + this.type = type; + } + // ino.end + + // ino.method.get_Name.25809.definition + public String get_Name() + // ino.end + // ino.method.get_Name.25809.body + { + return null; + } + // ino.end + + /* + // ino.method.sc_check.25812.definition + public void sc_check(Menge classname, Hashtable bh, Hashtable ch,boolean ext, Hashtable parach, Hashtable parabh) + // ino.end + // ino.method.sc_check.25812.body + { + if(ext) + parserlog.debug(" ---NewArray---"); + } + // ino.end + */ + + // ino.method.get_codegen_Array_Type.25815.definition + public int get_codegen_Array_Type() + throws JVMCodeException + // ino.end + // ino.method.get_codegen_Array_Type.25815.body + { + if(this.getType().equals("boolean")) return 4; + else if(this.getType().equals("char")) return 5; + else if(this.getType().equals("float")) return 6; + else if(this.getType().equals("double")) return 7; + else if(this.getType().equals("byte")) return 8; + else if(this.getType().equals("short")) return 9; + else if(this.getType().equals("int")) return 10; + else if(this.getType().equals("long")) return 11; + else throw new JVMCodeException("JVMCodeException: NewArray: int get_codegen_Array_Type()"); + } + // ino.end + + // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.definition + public void wandleRefTypeAttributes2GenericAttributes(Menge paralist, Menge genericMethodParameters) + // ino.end + // ino.method.wandleRefTypeAttributes2GenericAttributes.25827.body + { + } + // ino.end + + @Override + public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) { + // TODO Auto-generated method stub + return null; + } + + @Override +public JavaCodeResult printJavaCode(ResultSet resultSet) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Menge getChildren() { + Menge ret = new Menge(); + ret.addAll(this.expr); + return ret; + } + + @Override + public InstructionList genByteCode(ClassGen cg) { + + InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + InstructionList il = new InstructionList(); + + il.append(expr.elementAt(0).genByteCode(cg)); + il.append(_factory.createNewArray(org.apache.bcel.generic.Type.getType(getTypeName()), (short)1)); + + + return il; + } + +} +// ino.end diff --git a/test/bytecode/NewArray.jav b/test/bytecode/NewArray.jav new file mode 100644 index 00000000..0b80f746 --- /dev/null +++ b/test/bytecode/NewArray.jav @@ -0,0 +1,10 @@ +class NewArray{ + +void method() { +zahl; +zahl = new Integer[2]; +} + + + +} \ No newline at end of file diff --git a/test/bytecode/NewArrayTest.java b/test/bytecode/NewArrayTest.java new file mode 100644 index 00000000..6a9c3853 --- /dev/null +++ b/test/bytecode/NewArrayTest.java @@ -0,0 +1,45 @@ +package bytecode; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; + +import junit.framework.TestCase; + +import org.junit.Test; + +import plugindevelopment.TypeInsertTester; +import de.dhbwstuttgart.core.MyCompiler; +import de.dhbwstuttgart.core.MyCompilerAPI; +import de.dhbwstuttgart.logger.LoggerConfiguration; +import de.dhbwstuttgart.logger.Section; +import de.dhbwstuttgart.parser.JavaParser.yyException; +import de.dhbwstuttgart.typeinference.ByteCodeResult; +import de.dhbwstuttgart.typeinference.Menge; +import de.dhbwstuttgart.typeinference.TypeinferenceResultSet; +import de.dhbwstuttgart.typeinference.typedeployment.TypeInsertSet; + +public class NewArrayTest { + + public final static String rootDirectory = System.getProperty("user.dir")+"/test/bytecode/"; + public final static String testFile = "NewArray.jav"; + public final static String outputFile = "NewArray.class"; + + @Test + public void test() { + LoggerConfiguration logConfig = new LoggerConfiguration().setOutput(Section.PARSER, System.out); + MyCompilerAPI compiler = MyCompiler.getAPI(logConfig); + try { + compiler.parse(new File(rootDirectory + testFile)); + compiler.typeReconstruction(); + ByteCodeResult bytecode = compiler.generateBytecode(); + System.out.println(bytecode); + bytecode.getByteCode().getJavaClass().dump(new File(rootDirectory + outputFile)); + } catch (IOException | yyException e) { + e.printStackTrace(); + TestCase.fail(); + } + } + +}