From c5d8aae5152e7e3838dd7d609cc491ded0b30513 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Fri, 25 Feb 2011 14:49:50 +0300 Subject: [PATCH] codegen, initial --- .idea/dictionaries/max.xml | 7 + .../jet/codegen/ClassVisitorFactory.java | 17 ++ .../jet/codegen/ExpressionCodegen.java | 256 ++++++++++++++++++ .../jet/codegen/FunctionCodegen.java | 25 ++ .../jetbrains/jet/codegen/MethodCodeGen.java | 8 + .../jet/codegen/NamespaceCodegen.java | 45 +++ .../jet/codegen/PropertyCodegen.java | 25 ++ .../jet/lang/psi/JetConstantExpression.java | 43 +++ .../jetbrains/jet/lang/psi/JetNamespace.java | 4 + .../jet/codegen/ExpressionGenTest.java | 77 ++++++ 10 files changed, 507 insertions(+) create mode 100644 .idea/dictionaries/max.xml create mode 100644 idea/src/org/jetbrains/jet/codegen/ClassVisitorFactory.java create mode 100644 idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java create mode 100644 idea/src/org/jetbrains/jet/codegen/FunctionCodegen.java create mode 100644 idea/src/org/jetbrains/jet/codegen/MethodCodeGen.java create mode 100644 idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java create mode 100644 idea/src/org/jetbrains/jet/codegen/PropertyCodegen.java create mode 100644 idea/tests/org/jetbrains/jet/codegen/ExpressionGenTest.java diff --git a/.idea/dictionaries/max.xml b/.idea/dictionaries/max.xml new file mode 100644 index 00000000000..59b317d1177 --- /dev/null +++ b/.idea/dictionaries/max.xml @@ -0,0 +1,7 @@ + + + + codegen + + + \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/codegen/ClassVisitorFactory.java b/idea/src/org/jetbrains/jet/codegen/ClassVisitorFactory.java new file mode 100644 index 00000000000..40ff59f7c38 --- /dev/null +++ b/idea/src/org/jetbrains/jet/codegen/ClassVisitorFactory.java @@ -0,0 +1,17 @@ +package org.jetbrains.jet.codegen; + +import org.jetbrains.jet.lang.psi.JetNamespace; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.util.TraceClassVisitor; + +import java.io.PrintWriter; +import java.io.StringWriter; + +/** + * @author max + */ +public class ClassVisitorFactory { + public ClassVisitor visitorForClassIn(JetNamespace namespace) { + return new TraceClassVisitor(new PrintWriter(new StringWriter())); + } +} diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java new file mode 100644 index 00000000000..7a928630a67 --- /dev/null +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -0,0 +1,256 @@ +package org.jetbrains.jet.codegen; + +import gnu.trove.TObjectIntHashMap; +import org.jetbrains.jet.lang.psi.*; +import org.objectweb.asm.Label; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Type; +import org.objectweb.asm.commons.InstructionAdapter; + +import java.util.List; +import java.util.Stack; + +/** + * @author max + */ +public class ExpressionCodegen extends JetVisitor { + private final Stack