cbc/ToDo

205 lines
4.6 KiB
Plaintext

- generate resolved AST
- constant table
- types
- scope, frame
- integer literal
- 1, 2, 3, ...
- octal (010)
- hex (0x1f)
- 1U, 1L, 1UL
- character literal
- 'c'
- standard escape sequence ('\n', ...)
- octal escape sequence ('\077')
- string literal
- "string"
- standard escape sequence ('\n', ...)
- octal escape sequence ("\077")
- import
- single import
- recursive import
- import function
- import type
- build x86 test environment
- compile "Hello, World"
- write unit tests
- funcall
- 0 arg
- 1 arg
- 2 args
- 3
- 4 - 10 args
- variables
- param
- reference
- assign
- lvar
- assign
- reference
- initializer
- common symbol
- assign
- reference
- global variable
- define
- reference
- assign
- private common symbol
- assign
- reference
- private global variable
- define
- assign
- reference
- function-static variable
- assign
- reference
- initializer
- op
- +
- -
- *
- /
- %
- bitwise op
- ~
- &
- |
- ^
- >>
- <<
- unary op
- +@
- -@
- !
- comparison op
- ==
- !=
- >
- >=
- <
- <=
- self assignment
- +=, -=, *=, ...
- ++
- --
- control structure
- if
- while
- flow
- break
- continue
- for
- flow
- break
- continue
- do...while
- flow
- break
- continue
- switch
- goto
- valued control structure
- &&
- ||
- a ? b : c
- array
- as LHS
- as RHS
- reject negative length array definition
- struct
- as LHS
- as RHS
- recursive definition with pointer
- union
- as LHS
- as RHS
- recursive definition with pointer
* composite literal {1,2,3...}
- parse (initializer)
- parse (rhs)
* type check
* code generation
- pointer
- *ptr
- *ptr = val
- ptr->memb
- ptr->memb = val
- &expr
- as RHS
* ?? as LHS
- function pointer
- refer
- call ptr(arg)
* complex LHS
- local variable
* parameter
* global variables / common symbols
* static variables
* *arr[0] = ...
* *st.memb = ...
* *ptr++ = ...
* *(ptr + N) = ...
* *(int*)ptr = ...
* their combination
- bare block ({...})
- cast
- semantic check (control)
- reject break from out of loop/switch
- reject continue from out of loop
* reject no return
- semantic check (reference)
- check all symbols are resolved
- check duplicated parameters
- check if the calling function exists
- warn unused static variables
- warn unused local variables
- warn unused static functions
- check if aref base expr is indexable (a must be indeable where a[0])
- check if funcall base expr is callable (a must be callable where a())
* semantic check (type)
- simple type check (binary ops, unary ops)
- a[0]
- *ptr
- ct.memb
- ptr->memb
- funcall args
- prohibit circular struct/union definition
- implicit cast
- validate struct/union member (ct.memb)
- validate struct/union member (ct->memb)
* check duplicated struct/union members
* ptr + int; ptr - int
* check return type
* check if assignable
- op for various types
- signed char
- signed short
- signed int
- signed long
- unsigned char
- unsigned short
- unsigned int
- unsigned long
- Multibyte input
* print node location in error message
* parse command line option
* --dump-tokens
* --dump-ast
* ?? --dump-semantic
* generate IR
* --dump-ir
* control flow graph
* --dump-cflow
* semantic check (cflow)
* warn unreachable stmt
* warn no return
* data flow graph
* --dump-dflow
* warn unused variable
* warn uninitialized use of variables
* semantic check (dflow)
* register allocation
* vararg retrieve
* 64bit long_long support