class compiler::CheckErrors
sys::Obj compiler::CompilerSupport compiler::CompilerStep compiler::CheckErrors
CheckErrors walks the tree of statements and expressions looking for errors the compiler can detect such as invalid type usage. We attempt to leave all the error reporting to this step, so that we can batch report as many errors as possible.
Since CheckErrors already performs a full tree walk down to each leaf expression, we also do a couple of other AST decorations in this step:
1) add temp local for field assignments like return ++x 2) add temp local for returns inside protected region 3) check for field accessor optimization 4) check for field storage requirements 5) add implicit coersions: auto-casts, boxing, to non-nullable 6) implicit call to toImmutable when assigning to const field 7) mark ClosureExpr.setsConst
- canCoerce
-
static Bool canCoerce(Expr expr, CType expected)
Return if
coerce
would not report a compiler error. - checkFacet
- checkFacets
- checkPodDef
- coerce
-
static Expr coerce(Expr expr, CType expected, |->Void| onErr)
Coerce the target expression to the specified type. If the expression is not type compatible run the onErr function.
- doCoerce
-
static Expr doCoerce(Expr expr, CType expected, |->Void| onErr)
Coerce the target expression to the specified type. If the expression is not type compatible run the onErr function. Default Fantom behavior.
- enterFinally
- enterStmt
- exitFinally
- exitStmt
- isFuncAutoCoerce
-
static Bool isFuncAutoCoerce(CType actualType, CType expectedType)
- isFuncAutoCoerceMatch
-
static Bool isFuncAutoCoerceMatch(CType actual, CType expected)
- isRestrictedName
- isSlotVisible
- make
-
new make(Compiler compiler)
- needCoerce
- run
-
virtual override Void run()
- visitExpr
- visitFieldDef
- visitMethodDef
- visitStmt
- visitTypeDef