summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2015-07-03 10:31:49 +0200
committerAraq <rumpf_a@web.de>2015-07-03 10:31:49 +0200
commit2d196442fa6db010307a2dc62c65f1129ce9705d (patch)
tree7ded4f000191041149a78fc47cb43e360533666e
parent6b3abdba0f930bb714644a368a0d23b169c30a8c (diff)
downloadNim-2d196442fa6db010307a2dc62c65f1129ce9705d.tar.gz
fixes #3048, fixes #3047
-rw-r--r--compiler/semtypes.nim18
1 files changed, 10 insertions, 8 deletions
diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim
index d0cd70947..b82c51c07 100644
--- a/compiler/semtypes.nim
+++ b/compiler/semtypes.nim
@@ -251,19 +251,21 @@ proc semArrayIndex(c: PContext, n: PNode): PType =
 
 proc semArray(c: PContext, n: PNode, prev: PType): PType =
   var base: PType
-  result = newOrPrevType(tyArray, prev, c)
   if sonsLen(n) == 3:
     # 3 = length(array indx base)
-    var indx = semArrayIndex(c, n[1])
-    addSonSkipIntLit(result, indx)
-    if indx.kind == tyGenericInst: indx = lastSon(indx)
-    if indx.kind notin {tyGenericParam, tyStatic, tyFromExpr}:
-      if not isOrdinalType(indx):
+    let indx = semArrayIndex(c, n[1])
+    var indxB = indx
+    if indxB.kind == tyGenericInst: indxB = lastSon(indxB)
+    if indxB.kind notin {tyGenericParam, tyStatic, tyFromExpr}:
+      if not isOrdinalType(indxB):
         localError(n.sons[1].info, errOrdinalTypeExpected)
-      elif enumHasHoles(indx):
+      elif enumHasHoles(indxB):
         localError(n.sons[1].info, errEnumXHasHoles,
-                   typeToString(indx.skipTypes({tyRange})))
+                   typeToString(indxB.skipTypes({tyRange})))
     base = semTypeNode(c, n.sons[2], nil)
+    # ensure we only construct a tyArray when there was no error (bug #3048):
+    result = newOrPrevType(tyArray, prev, c)
+    addSonSkipIntLit(result, indx)
     addSonSkipIntLit(result, base)
   else:
     localError(n.info, errArrayExpectsTwoTypeParams)
ang/Nim/blame/lib/system/syslocks.nim?h=devel&id=ff5b446dfc32f2121799f1a8b90c913ceb52401f'>^
99bcc233c ^


2ca90a20a ^
99bcc233c ^


2ca90a20a ^
8446d51a6 ^
99bcc233c ^
2ca90a20a ^
99bcc233c ^


2ca90a20a ^
99bcc233c ^


2ca90a20a ^
99bcc233c ^

2df9b442c ^
99bcc233c ^
2ca90a20a ^
5b96eaa95 ^
99bcc233c ^
2ca90a20a ^
99bcc233c ^
2ca90a20a ^
3b69a8d27 ^
99bcc233c ^
2ca90a20a ^
99bcc233c ^

2ca90a20a ^
2df9b442c ^
2ca90a20a ^
2df9b442c ^
2ca90a20a ^
99bcc233c ^
2df9b442c ^
99bcc233c ^

2ca90a20a ^
346443d1b ^

99bcc233c ^

2ca90a20a ^
99bcc233c ^
2ca90a20a ^
99bcc233c ^

2ca90a20a ^
99bcc233c ^

2ca90a20a ^
99bcc233c ^
2ca90a20a ^
99bcc233c ^

2ca90a20a ^
2df9b442c ^
99bcc233c ^
2ca90a20a ^
99bcc233c ^
2ca90a20a ^
99bcc233c ^

2ca90a20a ^
3b69a8d27 ^
2ca90a20a ^
3b69a8d27 ^
2ca90a20a ^
3b69a8d27 ^
99bcc233c ^
2ca90a20a ^
99bcc233c ^

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106