summary refs log tree commit diff stats
path: root/compiler/sem.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/sem.nim')
-rw-r--r--compiler/sem.nim18
1 files changed, 18 insertions, 0 deletions
diff --git a/compiler/sem.nim b/compiler/sem.nim
index 48f767af7..f4d992e25 100644
--- a/compiler/sem.nim
+++ b/compiler/sem.nim
@@ -58,6 +58,24 @@ proc isArrayConstr(n: PNode): bool {.inline.} =
   result = n.kind == nkBracket and
     n.typ.skipTypes(abstractInst).kind == tyArray
 
+type
+  ObjConstrContext = object
+    typ: PType             # The constructed type
+    initExpr: PNode        # The init expression (nkObjConstr)
+    requiresFullInit: bool # A `requiresInit` derived type will
+                           # set this to true while visiting
+                           # parent types.
+
+  InitStatus = enum # This indicates the result of object construction
+    initUnknown
+    initFull     # All  of the fields have been initialized
+    initPartial  # Some of the fields have been initialized
+    initNone     # None of the fields have been initialized
+    initConflict # Fields from different branches have been initialized
+
+proc semConstructType(c: PContext, initExpr: PNode,
+                      t: PType, flags: TExprFlags): InitStatus
+
 template semIdeForTemplateOrGenericCheck(conf, n, requiresCheck) =
   # we check quickly if the node is where the cursor is
   when defined(nimsuggest):