Skip to content

Commit 4cc771f

Browse files
committed
improved error reporting
1 parent 126ffec commit 4cc771f

3 files changed

Lines changed: 7 additions & 23 deletions

File tree

arc++.vcxproj

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@
4949
</PropertyGroup>
5050
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
5151
<ClCompile>
52-
<PrecompiledHeader>
53-
</PrecompiledHeader>
5452
<WarningLevel>Level3</WarningLevel>
5553
<Optimization>Disabled</Optimization>
5654
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -66,15 +64,15 @@
6664
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
6765
<ClCompile>
6866
<WarningLevel>Level3</WarningLevel>
69-
<PrecompiledHeader>
70-
</PrecompiledHeader>
67+
<PrecompiledHeader>NotUsing</PrecompiledHeader>
7168
<Optimization>MaxSpeed</Optimization>
7269
<FunctionLevelLinking>true</FunctionLevelLinking>
7370
<IntrinsicFunctions>true</IntrinsicFunctions>
7471
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
7572
<SDLCheck>true</SDLCheck>
7673
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
7774
<LanguageStandard>stdcpplatest</LanguageStandard>
75+
<SuppressStartupBanner>false</SuppressStartupBanner>
7876
</ClCompile>
7977
<Link>
8078
<SubSystem>Console</SubSystem>

arc.cpp

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2060,11 +2060,13 @@ A symbol can be coerced to a string.
20602060
}
20612061
err = read_expr(p, &p, &expr);
20622062
if (err) {
2063+
err_expr = expr;
20632064
break;
20642065
}
20652066
atom result;
20662067
err = macex_eval(expr, &result);
20672068
if (err) {
2069+
err_expr = expr;
20682070
break;
20692071
}
20702072
//else {
@@ -2107,7 +2109,6 @@ A symbol can be coerced to a string.
21072109
return ERROR_OK;
21082110
}
21092111
else if (!listp(expr)) {
2110-
err_expr = expr;
21112112
return ERROR_SYNTAX;
21122113
}
21132114
else {
@@ -2125,7 +2126,6 @@ A symbol can be coerced to a string.
21252126
}
21262127
err = eval_expr(car(args), env, result);
21272128
if (err) {
2128-
err_expr = expr;
21292129
return err;
21302130
}
21312131
if (!no(*result)) { /* then */
@@ -2140,7 +2140,6 @@ A symbol can be coerced to a string.
21402140
else if (sym_is(op, sym_assign)) {
21412141
atom sym1;
21422142
if (no(args) || no(cdr(args))) {
2143-
err_expr = expr;
21442143
return ERROR_ARGS;
21452144
}
21462145

@@ -2151,17 +2150,14 @@ A symbol can be coerced to a string.
21512150
return err;
21522151
}
21532152
err = env_assign_eq(env, get<sym>(sym1.val), *result);
2154-
if (err) err_expr = expr;
21552153
return err;
21562154
}
21572155
else {
2158-
err_expr = expr;
21592156
return ERROR_TYPE;
21602157
}
21612158
}
21622159
else if (sym_is(op, sym_quote)) {
21632160
if (no(args) || !no(cdr(args))) {
2164-
err_expr = expr;
21652161
return ERROR_ARGS;
21662162
}
21672163

@@ -2170,11 +2166,9 @@ A symbol can be coerced to a string.
21702166
}
21712167
else if (sym_is(op, sym_fn)) {
21722168
if (no(args)) {
2173-
err_expr = expr;
21742169
return ERROR_ARGS;
21752170
}
21762171
err = make_closure(env, car(args), cdr(args), result);
2177-
if (err) err_expr = expr;
21782172
return err;
21792173
}
21802174
else if (sym_is(op, sym_do)) {
@@ -2188,7 +2182,6 @@ A symbol can be coerced to a string.
21882182
}
21892183
error err = eval_expr(car(args), env, result);
21902184
if (err) {
2191-
err_expr = expr;
21922185
return err;
21932186
}
21942187
args = cdr(args);
@@ -2199,13 +2192,11 @@ A symbol can be coerced to a string.
21992192
atom name, macro;
22002193

22012194
if (no(args) || no(cdr(args)) || no(cdr(cdr(args)))) {
2202-
err_expr = expr;
22032195
return ERROR_ARGS;
22042196
}
22052197

22062198
name = car(args);
22072199
if (name.type != T_SYM) {
2208-
err_expr = expr;
22092200
return ERROR_TYPE;
22102201
}
22112202

@@ -2214,11 +2205,9 @@ A symbol can be coerced to a string.
22142205
macro.type = T_MACRO;
22152206
*result = name;
22162207
err = env_assign(env, get<sym>(name.val), macro);
2217-
if (err) err_expr = expr;
22182208
return err;
22192209
}
22202210
else {
2221-
err_expr = expr;
22222211
return err;
22232212
}
22242213
}
@@ -2228,7 +2217,6 @@ A symbol can be coerced to a string.
22282217
atom fn;
22292218
err = eval_expr(op, env, &fn);
22302219
if (err) {
2231-
err_expr = expr;
22322220
return err;
22332221
}
22342222

@@ -2239,7 +2227,6 @@ A symbol can be coerced to a string.
22392227
atom r;
22402228
err = eval_expr(car(*p), env, &r);
22412229
if (err) {
2242-
err_expr = expr;
22432230
return err;
22442231
}
22452232
vargs.push_back(r);
@@ -2266,7 +2253,6 @@ A symbol can be coerced to a string.
22662253
atom r;
22672254
error err = eval_expr(car(body), env, &r);
22682255
if (err) {
2269-
err_expr = expr;
22702256
return err;
22712257
}
22722258
body = cdr(body);
@@ -2275,7 +2261,6 @@ A symbol can be coerced to a string.
22752261
}
22762262
else {
22772263
err = apply(fn, vargs, result);
2278-
if (err) err_expr = expr;
22792264
}
22802265
return err;
22812266
}
@@ -2388,7 +2373,7 @@ A symbol can be coerced to a string.
23882373

23892374
void print_error(error e) {
23902375
if (e != ERROR_USER) {
2391-
printf("%s : ", error_string[e]);
2376+
printf("%s: ", error_string[e]);
23922377
print_expr(err_expr);
23932378
puts("");
23942379
}
@@ -2442,6 +2427,7 @@ A symbol can be coerced to a string.
24422427
}
24432428
}
24442429
else {
2430+
err_expr = expr;
24452431
print_error(err);
24462432
}
24472433
}

arc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#endif
3636

3737
namespace arc {
38-
constexpr auto VERSION = "0.31";
38+
constexpr auto VERSION = "0.32";
3939

4040
enum type {
4141
T_NIL,

0 commit comments

Comments
 (0)