Goose  Diff

Differences From Artifact [b5bedb429e]:

  • File bs/parse/resolver.cpp — part of check-in [157221e014] at 2019-08-11 13:36:12 on branch trunk — Ported more error messages to the DiagnosticsManager. (user: achavasse size: 5698)

To Artifact [a4e6ff7ba2]:

  • File bs/parse/resolver.cpp — part of check-in [972c1d8b47] at 2019-08-12 20:15:11 on branch trunk —
    • Implemented a system to temporarily silence error outputs.
    • Syntax errors now silence further errors encountered while parsing the same block and nested children blocks.
    • All errors are also silenced while speculatively attempting to evaluate invocations at compilation time.
    (user: achavasse size: 5740)

111
112
113
114
115
116
117
118

119
120
121
122
123
124
125
111
112
113
114
115
116
117

118
119
120
121
122
123
124
125







-
+







    auto valId = AppendToVectorTerm( m_context.identity(), t.first );
    switch( m_context.env()->retrieveValue( valId, m_context.identity(), result ) )
    {
        case sema::Env::Status::NoMatch:
            return t;

        case sema::Env::Status::AmbiguousMatch:
            DiagnosticsManager::GetInstance().emitErrorMessage(
            DiagnosticsManager::GetInstance().emitSyntaxErrorMessage(
                t.second, "ambiguous match for symbol." );
            return t;
    }

    return TermLoc( result, t.second );
}

165
166
167
168
169
170
171
172

173
174
175
176
177

178
179
180
181
182

183
184
185
186
187
188
189
165
166
167
168
169
170
171

172
173
174
175
176

177
178
179
180
181

182
183
184
185
186
187
188
189







-
+




-
+




-
+








        case Delimiter::OpenBracket:
            co_yield move( *tok );
            co_yield consumeBlock( Delimiter::CloseBracket );
            break;

        case Delimiter::CloseParen:
            DiagnosticsManager::GetInstance().emitErrorMessage(
            DiagnosticsManager::GetInstance().emitSyntaxErrorMessage(
                tok->second, "mismatched ')'.", 0 );
            break;

        case Delimiter::CloseBrace:
            DiagnosticsManager::GetInstance().emitErrorMessage(
            DiagnosticsManager::GetInstance().emitSyntaxErrorMessage(
                tok->second, "mismatched '}'.", 0 );
            break;

        case Delimiter::CloseBracket:
            DiagnosticsManager::GetInstance().emitErrorMessage(
            DiagnosticsManager::GetInstance().emitSyntaxErrorMessage(
                tok->second, "mismatched ']'.", 0 );
            break;

        default:
            co_yield move( *tok );
            break;
    }
202
203
204
205
206
207
208
209

210
211
212
213
214

215
216
217
218
219

220
221
222
223
224
225
226
227
228
202
203
204
205
206
207
208

209
210
211
212
213

214
215
216
217
218

219
220
221
222
223
224
225
226
227
228







-
+




-
+




-
+









                co_return;
            }
            else
            {
                switch( *delim )
                {
                    case Delimiter::CloseParen:
                        DiagnosticsManager::GetInstance().emitErrorMessage(
                        DiagnosticsManager::GetInstance().emitSyntaxErrorMessage(
                            tok->second, "mismatched ')'.", 0 );
                        co_return;

                    case Delimiter::CloseBrace:
                        DiagnosticsManager::GetInstance().emitErrorMessage(
                        DiagnosticsManager::GetInstance().emitSyntaxErrorMessage(
                            tok->second, "mismatched '}'.", 0 );
                        co_return;

                    case Delimiter::CloseBracket:
                        DiagnosticsManager::GetInstance().emitErrorMessage(
                        DiagnosticsManager::GetInstance().emitSyntaxErrorMessage(
                            tok->second, "mismatched ']'.", 0 );
                        co_return;
                }
            }
        }

        co_yield consumeUnit();
    }
}