Commit Graph

36 Commits

Author SHA1 Message Date
Minero Aoki 1e3eae4634 r4890@macbookpro: aamine | 2009-05-24 00:00:20 +0900
* net/loveruby/cflat/compiler/IRGenerator.java: refactoring: reorder stmts.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4233 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-23 15:00:29 +00:00
Minero Aoki a54e95aa16 r4887@macbookpro: aamine | 2009-05-23 23:30:32 +0900
* net/loveruby/cflat/compiler/IRGenerator.java: refactoring: use reverse(node.args) instead of ListIterator.
 * net/loveruby/cflat/sysdep/x86/CodeGenerator.java: ditto.
 * net/loveruby/cflat/utils/ListUtils.java: new utility class.
 * net/loveruby/cflat/ast/FuncallNode.java: remove #finalArgs.
 * net/loveruby/cflat/ir/Call.java: ditto.
 * net/loveruby/cflat/ast/FuncallNode.java: refactoring: rename method: arguments -> args.
 * net/loveruby/cflat/compiler/Visitor.java: follow it.
 * net/loveruby/cflat/compiler/TypeChecker.java: ditto.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4232 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-23 14:31:37 +00:00
Minero Aoki 717bd630c9 * net/loveruby/cflat/compiler/IRGenerator.java: refactoring: rename method: deref -> mem
* net/loveruby/cflat/type/ArrayType.java: remove useless definition of #isScalar.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4229 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-23 13:22:14 +00:00
Minero Aoki 2bca02006e * net/loveruby/cflat/compiler/IRGenerator.java: refactoring: extract method: #bin.
* net/loveruby/cflat/compiler/IRGenerator.java: refactoring: extract method: #isPointerDiff.
* net/loveruby/cflat/compiler/IRGenerator.java: refactoring: extract method: #isPointerArithmetic.
* net/loveruby/cflat/type/TypeTable.java: new method #longSize.
* net/loveruby/cflat/ast/ExprNode.java: remove unused method #baseSize.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4228 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-23 12:34:09 +00:00
Minero Aoki db59955467 Add preproc tags. Attach location to all Assign.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4227 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-21 23:20:09 +00:00
Minero Aoki 7af5ebc4a9 r4875@macbookpro: aamine | 2009-05-18 05:10:22 +0900
* net/loveruby/cflat/compiler/TypeChecker.java: allow ptr-ptr.
 * net/loveruby/cflat/compiler/IRGenerator.java: implement ptr-ptr.
 * net/loveruby/cflat/type/VoidType.java: VoidType#size is 1.
 * net/loveruby/cflat/ast/ExprNode.java: new helper method #baseType.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4225 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-17 20:10:28 +00:00
Minero Aoki e8f60b1e9f add preproc tag
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4224 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-17 19:30:00 +00:00
Minero Aoki 3b29c039bd r4865@macbookpro: aamine | 2009-05-18 03:02:28 +0900
* net/loveruby/cflat/parser/Parser.jj: change function pointer syntax: int(*)(int,int) -> int(int,int)*.  Function type is int(int,int).
 * net/loveruby/cflat/parser/Parser.jj: function returns function type, not pointer to function.
 * net/loveruby/cflat/compiler/TypeResolver.java: resolve all function headers first, then resolve bodies.
 * net/loveruby/cflat/compiler/TypeResolver.java: generate a pointer for array-type expression.
 * net/loveruby/cflat/compiler/TypeResolver.java: isDereferable -> isPointer.
 * net/loveruby/cflat/compiler/TypeChecker.java: ditto.
 * net/loveruby/cflat/compiler/DereferenceChecker.java: ditto.
 * net/loveruby/cflat/compiler/IRGenerator.java: ditto.
 * net/loveruby/cflat/compiler/IRGenerator.java: shouldEvaluatedToAddress -> isLoadable (check arrays and functions, not only arrays).
 * net/loveruby/cflat/type/Type.java: remove #isDereferable.
 * net/loveruby/cflat/type/UserType.java: ditto.
 * net/loveruby/cflat/type/ArrayType.java: is not a scalar.
 * net/loveruby/cflat/type/ArrayType.java: is not dereferable itself.
 * net/loveruby/cflat/type/PointerType.java: is incompatible with arrays.
 * net/loveruby/cflat/type/IntegerType.java: ditto.
 * net/loveruby/cflat/type/FunctionType.java: is callable.
 * net/loveruby/cflat/type/ParamTypeRefs.java: x[] -> x* for param types.
 * net/loveruby/cflat/type/TypeTable.java: new method #getParamType.
 * net/loveruby/cflat/ast/ExprNode.java: new method #isLvalue.
 * net/loveruby/cflat/ast/ExprNode.java: new method #isAssignable.
 * net/loveruby/cflat/ast/ExprNode.java: new method #isLoadable.
 * net/loveruby/cflat/ast/CastNode.java: delegate them.
 * net/loveruby/cflat/ast/LHSNode.java: new super class of LHS nodes.
 * net/loveruby/cflat/ast/VariableNode.java: ditto.
 * net/loveruby/cflat/ast/DereferenceNode.java: ditto.
 * net/loveruby/cflat/ast/ArefNode.java: ditto.
 * net/loveruby/cflat/ast/MemberNode.java: ditto.
 * net/loveruby/cflat/ast/PtrMemberNode.java: ditto.
 * net/loveruby/cflat/entity/Entity.java: remove #cannotLoad.
 * net/loveruby/cflat/entity/Function.java: ditto.
 * net/loveruby/cflat/entity/Variable.java: ditto.
 * net/loveruby/cflat/entity/Constant.java: ditto.
 * net/loveruby/cflat/ir/Addr.java: is not LHS node now.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4220 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-17 18:35:02 +00:00
Minero Aoki d3194fb8bd r4853@macbookpro: aamine | 2009-05-17 16:34:27 +0900
* net/loveruby/cflat/parser/Parser.jj: support constant definition.
 * net/loveruby/cflat/ast/Declarations.java: hold constants.
 * net/loveruby/cflat/ast/AST.java: ditto.
 * net/loveruby/cflat/compiler/LocalResolver.java: resolve constants.
 * net/loveruby/cflat/compiler/TypeResolver.java: resolve constants.
 * net/loveruby/cflat/compiler/IRGenerator.java: transform constants reference into literal value.
 * net/loveruby/cflat/compiler/DereferenceChecker.java: check if toplevel variable initializer consists of a literal.
 * net/loveruby/cflat/compiler/DereferenceChecker.java: check if constant value consists of a literal.
 * net/loveruby/cflat/ast/ExprNode.java: new method #isConstant.
 * net/loveruby/cflat/ast/LiteralNode.java: override.
 * net/loveruby/cflat/entity/Entity.java: support Constant.
 * net/loveruby/cflat/entity/Constant.java: new entity.
 * net/loveruby/cflat/entity/EntityVisitor.java: add Constant.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4217 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-17 07:39:00 +00:00
Minero Aoki 189c089088 r4839@macbookpro: aamine | 2009-05-13 03:24:14 +0900
* compiler/Compiler.java: grand refactoring.
 * compiler/Options.java: refactoring: avoid ping-pong call with SourceFile.
 * compiler/SourceFile.java: ditto.
 * ast/AST.java: does not contain a TypeTable.
 * compiler/IRGenerator.java
 * compiler/TypeResolver.java
 * compiler/TypeChecker.java
 * sysdep/Linker.java: change arg order.
 * sysdep/GNULinker.java: ditto.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4210 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-12 18:24:47 +00:00
Minero Aoki 703b44faf5 r4824@macbookpro: aamine | 2009-05-11 01:09:13 +0900
* net/loveruby/cflat/compiler/IRGenerator.java: generate address expression for LHS expr.
 * net/loveruby/cflat/sysdep/x86/CodeGenerator.java: remove #compileLHS.  Just compile LHS expr.
 * net/loveruby/cflat/ir/Addr.java: is a constant address now.
 * net/loveruby/cflat/ir/Var.java: is not a constant address now.
 * net/loveruby/cflat/ir/Expr.java: new base method #addressNode.
 * net/loveruby/cflat/ir/Mem.java: override #addressNode.
 * net/loveruby/cflat/ir/Var.java: ditto.
 * net/loveruby/cflat/ir/Addr.java: ditto.
 * net/loveruby/cflat/ir/Expr.java: new base method #getEntityForce.
 * net/loveruby/cflat/ir/Var.java: override #getEntityForce.
 * net/loveruby/cflat/ir/Addr.java: ditto.
 * net/loveruby/cflat/ir/Call.java: get function entity by Expr#getEntityForce.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4202 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-10 16:49:45 +00:00
Minero Aoki 5c0f37ca8a r4815@macbookpro: aamine | 2009-05-10 23:48:56 +0900
* net/loveruby/cflat/parser/Parser.jj: define SOURCE_ENCODING here (again).
 * net/loveruby/cflat/compiler/Constants.java: removed.
 * net/loveruby/cflat/compiler/CodeGenerator.java -> net/loveruby/cflat/codegenerator
 * net/loveruby/cflat/compiler/CodeGeneratorOptions.java -> net/loveruby/cflat/codegenerator
 * net/loveruby/cflat/compiler/Platform.java -> net/loveruby/cflat/sysdep
 * net/loveruby/cflat/compiler/ErrorHandler.java -> net/loveruby/cflat/utils
 * net/loveruby/cflat/compiler/LibraryLoader.java -> net/loveruby/cflat/parser
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4201 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-10 14:52:00 +00:00
Minero Aoki 6e8bfed7a3 r4762@macbookpro: aamine | 2009-05-07 13:00:19 +0900
* net/loveruby/cflat/compiler/IRGenerator.java: should not return Expr for stmt, to suppress wrong warning.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4193 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:41:03 +00:00
Minero Aoki 2ce6ddbd93 r4760@macbookpro: aamine | 2009-05-07 12:55:51 +0900
* net/loveruby/cflat/compiler/IRGenerator.java (AddressNode): always omit Addr for #shouldEvaluatedToAddress node.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4191 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:41:02 +00:00
Minero Aoki e06185e56d r4756@macbookpro: aamine | 2009-05-07 11:06:57 +0900
* net/loveruby/cflat/compiler/IRGenerator.java (BinaryOpNode): evaluate RIGHT before LEFT.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4189 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:41:00 +00:00
Minero Aoki e57e42b188 r4755@macbookpro: aamine | 2009-05-07 10:32:44 +0900
add preproc tags.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4188 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:41:00 +00:00
Minero Aoki 586a7d8bd3 r4754@macbookpro: aamine | 2009-05-07 10:31:21 +0900
* net/loveruby/cflat/compiler/IRGenerator.java: fix compile error.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4187 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:40:59 +00:00
Minero Aoki 9f4a9fc8bc r4753@macbookpro: aamine | 2009-05-07 10:01:52 +0900
* net/loveruby/cflat/compiler/IRGenerator.java: emit statement info for casted stmt.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4186 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:40:59 +00:00
Minero Aoki 8a57dbbdd8 r4751@macbookpro: aamine | 2009-05-06 18:40:33 +0900
* net/loveruby/cflat/compiler/IRGenerator.java: assignBeforeStmt is useless.  Use assign instead.
 * net/loveruby/cflat/compiler/IRGenerator.java: should be able to create tmp in variable initializers for also function toplevel block.
 * net/loveruby/cflat/compiler/IRGenerator.java: move funcall before stmt.
 * net/loveruby/cflat/compiler/CodeGenerator.java: do not display "(null)" location.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4184 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:40:57 +00:00
Minero Aoki ec4ae3acfd r4747@macbookpro: aamine | 2009-05-06 15:49:51 +0900
* net/loveruby/cflat/asm/Type.java: types should not know signed or not.
 * net/loveruby/cflat/ir/Op.java: have signed/unsigned information.
 * net/loveruby/cflat/compiler/IRGenerator.java: use new op and type.
 * net/loveruby/cflat/compiler/CodeGenerator.java: ditto.
 * net/loveruby/cflat/compiler/TypeChecker.java (FuncallNode): should check optional argument types.
 * net/loveruby/cflat/compiler/CodeGenerator.java: now use simple mov to load values from memory (and cast it later).
 * net/loveruby/cflat/type/TypeTable.java: provide stack value type.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4182 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:40:53 +00:00
Minero Aoki 12979779e3 r4746@macbookpro: aamine | 2009-05-06 14:53:56 +0900
* net/loveruby/cflat/compiler/IRGenerator.java: isStatement() did not work correctly; e.g. return ++argc failed to return value, because ++argc was wrongly judged as statemen (is really expr).
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4181 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:40:52 +00:00
Minero Aoki e9beca5096 r4743@macbookpro: aamine | 2009-05-06 14:18:45 +0900
* net/loveruby/cflat/ir/StringValue.java -> Str.java
 * net/loveruby/cflat/ir/IntValue.java -> Int.java
 * net/loveruby/cflat/ir/IRVisitor.java: ditto.
 * net/loveruby/cflat/compiler/IRGenerator.java: ditto.
 * net/loveruby/cflat/compiler/CodeGenerator.java: ditto.
 


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4178 1b9489fe-b721-0410-924e-b54b9192deb8
2009-05-08 10:40:50 +00:00
Minero Aoki e66d1b59d9 * net/loveruby/cflat/entity: new package.
* net/loveruby/cflat/ast: move Entity and its subclasses under entity/.
* net/loveruby/cflat/ast: move Scope and its subclasses under entity/.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4162 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 17:55:46 +00:00
Minero Aoki 2f7019356a * net/loveruby/cflat/asm/Type.java: new class representing assembly integer types.
* net/loveruby/cflat/asm/*.java: support it.
* net/loveruby/cflat/ir/*.java: support it.
* net/loveruby/cflat/compiler/IRGenerator.java: convert ast Type -> asm Type.
* net/loveruby/cflat/compiler/CodeGenerator.java: use asm Type.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4160 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 17:04:29 +00:00
Minero Aoki a5eb1024f9 * net/loveruby/cflat/compiler/IRGenerator.java: use ExprNode#shouldEvalutedToAddress again, it contains complex condition.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4158 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 14:54:52 +00:00
Minero Aoki 04f5d8e6cc * net/loveruby/cflat/compiler/IRGenerator.java (BlockNode): static variables are special case.
* net/loveruby/cflat/compiler/IRGenerator.java (SwitchNode): Switch must precedes Case bodies to prevent programs from infinite loop.
* net/loveruby/cflat/compiler/CodeGenerator.java (Bin): fix MOD problem.
* net/loveruby/cflat/compiler/CodeGenerator.java (Bin): fix LSHIFT problem.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4155 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 13:41:19 +00:00
Minero Aoki 0b3098612a * now IR nodes are separated from AST. Sources are compilable but not tested yet.
* ir/*: new classes.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4154 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 13:08:40 +00:00
Minero Aoki eaba86066f * ast/ASTVisitor.java: fork DeclarationVisitor.
* ast/DeclarationVisitor.java: new class.
* compiler/Visitor.java: do not visit declarations.
* compiler/TypeResolver.java: visit declarations explicitly.
* compiler/IRGenerator.java: remove useless declarations acceptor.
* compiler/CodeGenerator.java: ditto.
* ast/Entity.java: accept DeclarationVisitor.
* ast/DefinedFunction.java: ditto.
* ast/UndefinedFunction.java: ditto.
* ast/DefinedVariable.java: ditto.
* ast/UndefinedVariable.java: ditto.
* ast/TypeDefinition.java: ditto.
* ast/StructNode.java: ditto.
* ast/UnionNode.java: ditto.
* ast/TypedefNode.java: ditto.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4153 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 09:09:52 +00:00
Minero Aoki 68a99258e5 * net/loveruby/cflat/compiler/IRGenerator.java (SuffixOp): do not calculate twice. Save expr value and reuse it.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4152 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 08:45:30 +00:00
Minero Aoki f23dd70dd2 * net/loveruby/cflat/compiler/IRGenerator.java: must compile initializer.
* net/loveruby/cflat/compiler/IRGenerator.java: f = &puts generated addr(addr(puts)), so remove redundant AddressNode.
* net/loveruby/cflat/compiler/CodeGenerator.java: now --verbose-asm works.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4151 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 08:25:30 +00:00
Minero Aoki 41e5e61c16 * net/loveruby/cflat/compiler/IRGenerator.java: treat LHS specially and remove AddressNode at the top of the LHS tree (e.g. printf = 0 generates &printf = 0).
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4150 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 07:51:05 +00:00
Minero Aoki e8f10dc3f6 * net/loveruby/cflat/compiler/Simplifier.java -> IRGenerator.java
* net/loveruby/cflat/compiler/Compiler.java: rename class.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4149 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-26 07:19:33 +00:00
Minero Aoki 1e80fec3ab * refactoring: rename class: compiler/Simplifier.java -> IRGenerator.java.
* compiler/Compiler.java: ditto.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4139 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-19 05:57:41 +00:00
Minero Aoki ae4073e7c3 revert r4136 (no IR)
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4138 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-19 05:50:16 +00:00
Minero Aoki 444c8e1bd9 * net/loveruby/cflat/compiler/IRGenerator.java: generates IR (intermediate representation) tree (work is still incomplete but commit for logging).
* net/loveruby/cflat/ir: new package to hold IR tree nodes.
* net/loveruby/cflat/ir/IRTree.java: new class.
* net/loveruby/cflat/ir/Stmt.java: new class.
* net/loveruby/cflat/ir/StmtKind.java: new enum.
* net/loveruby/cflat/ir/Expr.java: new class.
* net/loveruby/cflat/ir/ExprKind.java: new enum.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4136 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-12 16:53:28 +00:00
Minero Aoki 5a287a7b48 * net/loveruby/cflat/compiler/TypeChecker.java: split IRGenerator.
* net/loveruby/cflat/compiler/IRGenerator.java: new class.
* net/loveruby/cflat/compiler/Compiler.java: call IRGenerator.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@4135 1b9489fe-b721-0410-924e-b54b9192deb8
2009-04-12 08:49:23 +00:00