summary refs log tree commit diff stats
path: root/compiler/sem.nim
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/sem.nim')
-rwxr-xr-xcompiler/sem.nim27
1 files changed, 15 insertions, 12 deletions
diff --git a/compiler/sem.nim b/compiler/sem.nim
index 1c1b4351d..7d296dbfc 100755
--- a/compiler/sem.nim
+++ b/compiler/sem.nim
@@ -10,11 +10,11 @@
 # This module implements the semantic checking pass.
 
 import
-  strutils, hashes, lists, options, lexer, ast, astalgo, trees, treetab,
+  ast, strutils, hashes, lists, options, lexer, astalgo, trees, treetab,
   wordrecg, ropes, msgs, os, condsyms, idents, renderer, types, platform, math,
-  magicsys, parser, nversion, semdata, nimsets, semfold, importer,
-  procfind, lookups, rodread, pragmas, passes, semtypinst, sigmatch, suggest,
-  semthreads, intsets, transf, evals, idgen, aliases
+  magicsys, parser, nversion, nimsets, semfold, importer,
+  procfind, lookups, rodread, pragmas, passes, semdata, semtypinst, sigmatch,
+  suggest, semthreads, intsets, transf, evals, idgen, aliases
 
 proc semPass*(): TPass
 # implementation
@@ -75,17 +75,20 @@ proc semWhen(c: PContext, n: PNode, semCheck: bool = true): PNode
 
 include semtempl
 
-proc semConstExpr(c: PContext, n: PNode): PNode = 
-  var e = semExprWithType(c, n)
-  if e == nil: 
-    GlobalError(n.info, errConstExprExpected)
-    return nil
+proc evalTypedExpr(c: PContext, e: PNode): PNode =
   result = getConstExpr(c.module, e)
   if result == nil:
     result = evalConstExpr(c.module, e)
-    if result == nil or result.kind == nkEmpty: 
-      GlobalError(n.info, errConstExprExpected)
-  
+    if result == nil or result.kind == nkEmpty:
+      GlobalError(e.info, errConstExprExpected)
+
+proc semConstExpr(c: PContext, n: PNode): PNode =
+  var e = semExprWithType(c, n)
+  if e == nil:
+    GlobalError(n.info, errConstExprExpected)
+    return nil
+  result = evalTypedExpr(c, e)
+
 proc semAndEvalConstExpr(c: PContext, n: PNode): PNode = 
   result = semConstExpr(c, n)