Commit Graph

165 Commits

Author SHA1 Message Date
Minero Aoki ec7a3285fe * net/loveruby/cflat/ast/Function.java: reduce a warning using Reference.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3981 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-31 10:40:30 +00:00
Minero Aoki c846043242 updated
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3980 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-31 10:39:58 +00:00
Minero Aoki eca722f362 * net/loveruby/cflat/compiler/TypeChecker.java: transform pointer arithmetic to normal arithmetic (e.g. ptr+7 => ptr+(7*sizeof(*ptr))).
* net/loveruby/cflat/compiler/TypeChecker.java: int-ptr is invalid.
* net/loveruby/cflat/compiler/CodeGenerator.java: implement pointer arithmetic correctly (e.g. *(ptr+1) for various types work now).
* net/loveruby/cflat/ast/PrefixOpNode.java: inherit UnaryArithmeticOpNode.
* net/loveruby/cflat/ast/SuffixOpNode.java: ditto.
* net/loveruby/cflat/ast/UnaryArithmeticOpNode.java: new file.
* net/loveruby/cflat/ast/CastNode.java: is not assignable.
* net/loveruby/cflat/type/TypeTable.java: new method #pointerSize, #ptrDiffTypeRef.
* net/loveruby/cflat/type/ArrayType.java: fetch pointer size from a TypeTable.
* net/loveruby/cflat/type/ArrayType.java: we can cast any pointers to void*.
* net/loveruby/cflat/type/PointerType.java: ditto.
* net/loveruby/cflat/type/IntegerTypeRef.java (equals): check name equality by #equals, not ==.
* test: test pointer arithmetic.
* test: CastNode does not becomes LHS, do not check it.
* import/string.hb: add mem* functions.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3979 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-31 10:24:40 +00:00
Minero Aoki 0229e05728 * net/loveruby/cflat/ast/Declarations.java: reject duplicated symbols to support duplicated import.
* net/loveruby/cflat/compiler/LibraryLoader.java: should return previous loaded symbols for the same import file.
* test: test duplicated import.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3978 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-31 06:18:26 +00:00
Minero Aoki fae7f1e085 * net/loveruby/cflat/parser/Parser.jj: implement NULL.
* test: use it.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3977 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-30 11:21:49 +00:00
Minero Aoki 2437c9e4a2 updated
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3976 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-30 11:14:12 +00:00
Minero Aoki 80651a70cc * net/loveruby/cflat/compiler/TypeChecker.java: ptr==ptr should work.
* net/loveruby/cflat/compiler/TypeChecker.java: ptr&&ptr should work.
* net/loveruby/cflat/compiler/TypeChecker.java: any==any should always returns int.
* net/loveruby/cflat/compiler/CodeGenerator.java: ditto.
* test: test it.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3975 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-30 11:07:44 +00:00
Minero Aoki 7e39838625 * test/test_cbc.sh: test overrapped lvar.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3974 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-30 09:01:14 +00:00
Minero Aoki 737fb40fb5 * test/assign.cb: test case was wrong (caused SEGV). I don't know why this test case did not crash.
* test/test_cbc.sh: follow it.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3973 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-30 08:39:31 +00:00
Minero Aoki 5ceac8d332 * net/loveruby/cflat/compiler/CodeGenerator.java: lvar overrapped allocation.
* net/loveruby/cflat/ast/LocalScope.java: export children.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3972 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-30 08:36:24 +00:00
Minero Aoki 01e51bf969 * cbc: surround path variables by double quotes.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3971 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-29 09:25:08 +00:00
Minero Aoki 4f50048234 * net/loveruby/cflat/compiler/CodeGenerator.java (allocateLocalVariables): refactoring: stackWordSize -> stackAlignment.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3970 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-29 08:18:15 +00:00
Minero Aoki 14722b9d49 * build.xml: test entry point is now run.sh.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3969 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-29 08:12:21 +00:00
Minero Aoki 13e2116602 * test/Makefile: testing entry point is run.sh.
* test/shunit.sh: add "shunit_" prefix for all internal functions.
* test/run.sh: load test_*.sh to support multiple test case files.
* test/run.sh: accept command line arguments as test case files.
* test/test.sh -> test/test_cbc.sh
* test/test2.cb -> test/syntax1.cb
* test/test3.cb -> test/syntax2.cb
* test/test4.cb -> test/syntax3.cb


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3968 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-29 08:05:09 +00:00
Minero Aoki 40720e76cf * net/loveruby/cflat/compiler/CodeGenerator.java: should handle global string literal.
* net/loveruby/cflat/asm/Assembler.java (_long, _quad): should handle label.
* test/run.sh: new test runner.
* test/shunit.sh: library function name must not start with "test_" because they are treated as test case definition.
* test/test.sh: split tests in to multiple functions.
* test/initializer.cb: test string initializer.
* test/comm.cb: ditto.
* test/scomm.cb: ditto.
* test/slvar.cb: ditto.
* test/gvar.cb: ditto.
* test/sgvar.cb: ditto.
* test/slcomm.cb: : ditto.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3967 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-29 07:35:31 +00:00
Minero Aoki 85f2af8c84 test if empty struct is allowed
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3966 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-29 05:03:19 +00:00
Minero Aoki 8cbf437fb7 * net/loveruby/cflat/compiler/CodeGenerator.java (generateAssembly): did not set typeTable field.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3965 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-19 10:18:05 +00:00
Minero Aoki b01627db0c * net/loveruby/cflat/compiler/CodeGenerator.java: refactoring: all DSL methods should take a Register argument, not a String.
* net/loveruby/cflat/compiler/CodeGenerator.java: refactoring: PTRREG -> baseptr().
* net/loveruby/cflat/asm/Register.java: refactoring: a Register object does not represents size-specified register, it represents generic register.  So we can get a size-specified register object by #forType.
* net/loveruby/cflat/asm/Register.java: new method #forType.
* net/loveruby/cflat/asm/Assembler.java: refactoring: ptrcall -> callAbsolute.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3964 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-19 09:59:54 +00:00
Minero Aoki 66d6f8880f add preproc tags.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3963 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-19 09:16:06 +00:00
Minero Aoki 5f8ff3aefc * net/loveruby/cflat/compiler/TypeChecker.java: allow safe implicit integer cast like "char c = 0" adhocly.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3962 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-19 07:19:15 +00:00
Minero Aoki 8c51d5d1a7 * net/loveruby/cflat/type/IntegerType.java: new method #isInDomain, #minValue, #maxValue.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3961 1b9489fe-b721-0410-924e-b54b9192deb8
2008-08-19 06:40:24 +00:00
Minero Aoki 92afb927cd * net/loveruby/cflat/compiler/CodeGenerator.java (compileBinaryOp): We must use shr for right-shift of unsigned value.
* net/loveruby/cflat/compiler/CodeGenerator.java (compileBinaryOp): We must use seta/ae/b/be for comparison of unsigned value.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3946 1b9489fe-b721-0410-924e-b54b9192deb8
2008-05-06 18:42:06 +00:00
Minero Aoki 5874563f7e * net/loveruby/cflat/compiler/CodeGenerator.java: We must use div instruction for unsigned division.
* net/loveruby/cflat/compiler/CodeGenerator.java: We must call cltd before idiv.
* net/loveruby/cflat/compiler/CodeGenerator.java: define facade methods for Assembler class.
* net/loveruby/cflat/asm/Assembler.java: remove *q methods such as movq, addq, etc. by utilizing method overloading.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3944 1b9489fe-b721-0410-924e-b54b9192deb8
2008-05-05 18:54:37 +00:00
Minero Aoki fdd7a9f4c9 * net/loveruby/cflat/parser/Parser.jj: defvar -> defvars (again).
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3932 1b9489fe-b721-0410-924e-b54b9192deb8
2008-03-23 17:47:44 +00:00
Minero Aoki 5b78ddd411 * net/loveruby/cflat/parser/Parser.jj: top_decls -> top_defs
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3931 1b9489fe-b721-0410-924e-b54b9192deb8
2008-03-23 17:39:18 +00:00
Minero Aoki 1475f08013 * net/loveruby/cflat/compiler/TypeChecker.java: use (new) CastNode constructor directly.
* net/loveruby/cflat/ast/CastNode.java: new constructor.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3925 1b9489fe-b721-0410-924e-b54b9192deb8
2008-03-01 11:06:36 +00:00
Minero Aoki f1f140b5d3 add preproc tags
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3921 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-24 15:10:21 +00:00
Minero Aoki d626ec5fbb * net/loveruby/cflat/compiler/TypeChecker.java: implement usual arithmetic conversion for BinaryOpNode.
* net/loveruby/cflat/compiler/TypeChecker.java: implement usual arithmetic conversion for OpAssignNode.
* net/loveruby/cflat/compiler/TypeChecker.java: implement usual arithmetic conversion for ++, --.
* net/loveruby/cflat/compiler/TypeChecker.java: new entry point TypeTable#check(AST).


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3920 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-24 14:41:05 +00:00
Minero Aoki 87cbe3bc3b * net/loveruby/cflat/parser/Parser.jj (SPACES): "\v" is invalid escape sequence in JavaCC.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3919 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-24 10:58:48 +00:00
Minero Aoki 37ecd78688 * net/loveruby/cflat/parser/Parser.jj (INTEGER): 0xUL is invalid.
* net/loveruby/cflat/parser/Parser.jj (CHARACTER): 'aa' is invalid.
* net/loveruby/cflat/parser/Parser.jj: refactoring: insert spaces after character set comma.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3917 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-24 06:31:34 +00:00
Minero Aoki cf5e124336 * net/loveruby/cflat/compiler/TypeChecker.java: TypeTable is useless.
* net/loveruby/cflat/compiler/Compiler.java: ditto.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3916 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-17 21:12:16 +00:00
Minero Aoki 2568b19bdf * net/loveruby/cflat/compiler/TypeChecker.java (mustBeScalar): checks if type is an integer, a pointer, or an array (previous #mustBeScalarAlike definition).
* net/loveruby/cflat/compiler/TypeChecker.java (expectsSameInteger, expectsComparableScalars): return immediately after first error.
* net/loveruby/cflat/compiler/TypeChecker.java (PrefixOpNode, SuffixOpNode): allow array parameter.
* net/loveruby/cflat/type/Type.java: new method #isScalar.
* net/loveruby/cflat/type/IntegerType.java: is a scalar.
* net/loveruby/cflat/type/ArrayType.java: is a scalar.
* net/loveruby/cflat/type/PointerType.java: is a scalar.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3915 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-17 21:07:15 +00:00
Minero Aoki d1d388ab0c * net/loveruby/cflat/compiler/TypeChecker.java (checkCond): cond expr might be an array.
* net/loveruby/cflat/compiler/TypeChecker.java (SwitchNode): cond expr should not be pointer.
* net/loveruby/cflat/compiler/TypeChecker.java: <</>> expects same integer.
* net/loveruby/cflat/compiler/TypeChecker.java: comparison operators accept arrays.
* net/loveruby/cflat/compiler/TypeChecker.java: "!" accepts a pointer and an array.
* net/loveruby/cflat/compiler/TypeChecker.java: new method #mustBeScalarAlike.
* net/loveruby/cflat/compiler/TypeChecker.java (mustBeInteger, mustBeScalar, mustBeScalarAlike): takes operator name.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3914 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-17 20:39:32 +00:00
Minero Aoki d27ddfebee * net/loveruby/cflat/compiler/TypeChecker.java (mustBeScalar): array is a scalar.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3913 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-17 19:10:52 +00:00
Minero Aoki 67c1972a8a * net/loveruby/cflat/compiler/TypeChecker.java: check returning void value.
* net/loveruby/cflat/compiler/TypeChecker.java: allow array LHS, only when LHS is a parameter.
* net/loveruby/cflat/ast/Entity.java: define #isParameter here.
* net/loveruby/cflat/ast/Variable.java: remove #isVariable, #isParameter.
* net/loveruby/cflat/ast/ExprNode.java: new method #isParameter.
* net/loveruby/cflat/ast/VariableNode.java: override it.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3912 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-17 19:08:48 +00:00
Minero Aoki 95deed38e4 * net/loveruby/cflat/compiler/TypeChecker.java (checkCond): cond expr might be an array, which is a parameter.
* net/loveruby/cflat/compiler/TypeChecker.java (isInvalidReturnType): array is returnable.
* net/loveruby/cflat/compiler/TypeChecker.java (isInvalidLHSType): "unallocated array" means an array which is parameter.  Length does not matter.
* net/loveruby/cflat/compiler/DereferenceChecker.java: should check an operand of ++/-- is assignable.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3911 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-17 18:33:18 +00:00
Minero Aoki b8a0f0ecde * net/loveruby/cflat/ast/UndefinedVariable.java: should always be NOT private.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3910 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-17 17:33:19 +00:00
Minero Aoki deeeb03a3e add preproc tag
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3909 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-17 17:31:13 +00:00
Minero Aoki 55841b6115 * net/loveruby/cflat/compiler/DereferenceChecker.java: add blanks.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3908 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-17 17:30:59 +00:00
Minero Aoki e50c55f673 remove package directory ir/
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3907 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-16 11:30:20 +00:00
Minero Aoki a11a16260e * net/loveruby/cflat/compiler/TypeResolver.java: should check duplicated type definition.
* net/loveruby/cflat/type/TypeTable.java: new method #isDefined.
* net/loveruby/cflat/type/TypeTable.java (put): reject duplicated type definition.
* test/recursivetypedef.cb: test duplicated typedef.
* test/test.sh: run it.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3905 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-11 21:49:42 +00:00
Minero Aoki bcf7042b28 add preproc tags
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3904 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-11 21:28:43 +00:00
Minero Aoki 6849a2f05a * net/loveruby/cflat/type/TypeTable.java (semanticCheck): check all types by checkRecursiveDefinition. It is not efficient because checking char, short, int, long, ... is not needed, but is more reliable.
* net/loveruby/cflat/type/TypeTable.java (checkRecursiveDefinition): should traverse ArrayType.
* net/loveruby/cflat/type/TypeTable.java (checkRecursiveDefinition): should traverse ComplexType and ArrayType (and UserType which points these types) *at the same time*.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3903 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-11 21:23:23 +00:00
Minero Aoki 1d06aa2e2a add preproc tags
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3899 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-11 18:07:52 +00:00
Minero Aoki 1166d7d0f3 add preproc tags
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3898 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-11 16:28:57 +00:00
Minero Aoki 9c50fd7032 * net/loveruby/cflat/compiler/TypeResolver.java: extract method #defineTypes again.
* net/loveruby/cflat/compiler/TypeResolver.java: define types by TypeTable#put here.  Get typeref and type from TypeDefinition nodes.
* net/loveruby/cflat/type/TypeTable.java: remove #define.  Use #put instead.
* net/loveruby/cflat/ast/TypeDefinition.java: remove #defineIn.  Use #definingType instead.
* net/loveruby/cflat/ast/StructNode.java: ditto.
* net/loveruby/cflat/ast/UnionNode.java: ditto.
* net/loveruby/cflat/ast/TypedefNode.java: ditto.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3897 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-11 15:46:32 +00:00
Minero Aoki 52733c96b8 * net/loveruby/cflat/type/TypeTable.java: remove deftype methods, use #put instead.
* net/loveruby/cflat/ast/StructNode.java: define type by myself, calling TypeTable#put directly.
* net/loveruby/cflat/ast/UnionNode.java: ditto.
* net/loveruby/cflat/ast/TypedefNode.java: ditto.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3896 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-11 15:35:40 +00:00
Minero Aoki d3cbcbacf4 * net/loveruby/cflat/compiler/TypeResolver.java: resolving VariableNode is useless, because it is equal to resolving DefinedVariable.
* net/loveruby/cflat/compiler/TypeResolver.java: define resolveNodeList, which is an alias of visitNodeList.


git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3895 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-11 15:26:27 +00:00
Minero Aoki 25ed96e67c * net/loveruby/cflat/compiler/Compiler.java: new option --dump-stmt, to dump only first statement of main.
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3894 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-10 21:54:23 +00:00
Minero Aoki 114ba1ffe6 add comment
git-svn-id: file:///Users/aamine/c/gitwork/public/cbc/trunk@3893 1b9489fe-b721-0410-924e-b54b9192deb8
2008-02-10 21:39:11 +00:00